📄 warmread.sty
字号:
\newtoks\BBexpansiontoks\def\BBpattern{####1 ####2 ####3 ####4 ####5 ####6}\def\BBstripped{ , , , , }\BBexpansiontoks={\def\testcomment{#1}% \ifx\testcomment\AdobeBoundingBoxString \def\wrm@llx{#2}\def\wrm@lly{#3}% \def\wrm@urx{#4}\def\wrm@ury{#5}% % there can be only one \aftergroup\morelinesfalse\wrm@message{file: \wrm@filename}%\wrm@message{Bounding Box is (\wrm@llx,\wrm@lly)->(\wrm@urx,\wrm@ury)}% \WriteToBBfile %{\ThisFileLine}% \fi}\def\WRM@DataPattern{}\def\WRM@DataStripped{}\def\wrm@filename{}%% These are now defined later, for use with Adobe EPS files:%%\newtoks\ParenPointToks%\ParenPointToks={\def\wrm@x{#2}\def\wrm@y{#3}%% \def\afterdata{#7}%% \ifx\afterdata\ParenEmpty%% \edef\wrm@label{datapoint\the\wrmdatacounter}%% \edef\wrm@label{\wrm@prefix\the\wrmdatacounter}%% \def\wrm@texstring{#4}%% \else% \def\wrm@label{#4}\def\wrm@texstring{#5}%% \fi% \def\testdata{#1}\wrm@savedata }%%\def\ParenPointData{%% \let\WRM@DataPattern\ParenPointPattern% \let\WRM@DataStripped\ParenPointStripped% \def\SetExpansionToks{\let\WARM@ExpansionToks\ParenPointToks}%%}%%%% \RecoverData{<which>}{<what to do>}{<fallback>}{<mode>}%%%% <which> : symbolic label for a marked-point%% <what to do> : macro to expand for the given label%% <fallback> : action to take if <which> is invalid%% <mode> : @ = numeric {}= symbolic%%%% this also sets a macro \wrm@name to expand to an identifying%% string WRM@<which> , as a name for the point itself.%% e.g. useful in Xy-pic to return to the marked point as a <pos>%%\def\RecoverData#1#2#3#4{% \expandafter\ifx\expandafter\relax\csname WRM@#1#4\endcsname \message{There is no data for label: #1}% \let\wrm@name\wrm@none \def\wrm@next{#3}% \else \def\wrm@name{WRM#1}\def\wrm@next{#2}% \csname WRM@#1#4\endcsname \fi \wrm@next }\newif\iftesting\global\testingfalse%% default value for \wrm@name when no valid marked-point.\def\wrm@none{@WRM@none}\let\wrm@name\wrm@none%% show information associated with a symbolic label:\def\ShowMarkedData#1{\RecoverData{#1}{\ShowMarkedData@{#1}}\relax{}}\def\ShowMarkedData@#1{% \wrm@message{'#1' (\wrm@x,\wrm@y) \codeof\wrm@name: \codeof\wrm@text}}%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% for use with Xy-pic%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% allow for top-to-bottom coordinates\def\Mac@orig{}\def\MacintoshOrigin{\def\Mac@orig{-}}%%%% This is the main macro for establishing a marked-point%% as the current <pos>, for placing a label, or whatever.%% It establishes "WRM@<name>" as an easy recovery method.%%\def\xyMarkedPos#1{\RecoverData{#1}\xyMarkedPos@\POS{}}\def\xyMarkedPos@{\def\wrmtext{\wrm@text}% \edef\wrm@next{(\wrm@x,\Mac@orig\wrm@y)}% \ifx\wrm@quiet\relax\wrm@message{\wrm@name:\codeof\wrm@text: \wrm@next}\fi \let\protect\relax % for "robust" LaTeX commands \expandafter\expandafter\expandafter\POS \expandafter\wrm@next\expandafter=\expandafter"\wrm@name"}%% Default positioning of the label,%% with respect to the marked-points%% text: bottom-left corner, including a small margin%% math: centered%%\def\labelmathmodifiers{!C}\def\labeltextmodifiers{+!LD}\def\labelmathstyle{}\def\labeltextstyle{}\def\markobject{*\dir{x},*+<3pt>!UL{\scriptscriptstyle\the\wrmcounter}}\def\markobjectlabel#1{*\dir{x},*+<3pt>!U{\scriptscriptstyle#1}}\def\markedempty@@{}%%%% \xyShowMark {<pos>*<object>}{<which>}%% \xyShowMarkPoints {<pos>*<object>}{<which>}%% \xyShowMarksExcept {<pos>*<object>}{<which>}%%%% allows any valid Xy-pic code to be interpreted%% at the specified marked-point.%% defaults to use \markobject when the 1st argument is empty.%%\def\xyShowMark{\xyShowMarks@i\z@}\def\xyShowMarkPoints{\xyShowMarks@i\markedempty@@}\def\xyShowMarksExcept{\xyShowMarks@i\relax}\def\xyShowMarks@i#1#2#3{% \def\xymarkobject@{#2}% \ifx\xymarkobject@\markedempty@@ \let\xymarkobject@\markobject \fi \ifx#1\z@ \def\xymarkobject@{\markobjectlabel{#3}}% \DN@{\RecoverDataLabel{#3}}% \else \DN@{\RecoverDataPoints{#3}#1}% \fi \next@\xyShowMark@x\POS }\def\xyShowMark@x{% \expandafter\xyMarkedPos@\xymarkobject@\relax}%%%% \xyMarkedTxt <modifiers> {<label>}%% \xyMarkedTxtPoints <modifiers> {<which>}%% \xyMarkedTxtExcept <modifiers> {<which>}%% and \xyMarkedText, \xyMarkedTextPoints, \xyMarkedTextExcept%%%% \xyMarkedStyledTxt <modifiers> {<styles>} {<label>}%% \xyMarkedStyledTxtPoints <modifiers> {<styles>} {<which>}%% \xyMarkedStyledTxtExcept <modifiers> {<styles>} {<which>}%%%% Use the default label, in text-mode,%% with optional modifiers, default: \labeltextmodifiers%% and styles, default: \labeltextstyle\def\xyMarkedTxt{\xyMarkedTxt@i\z@}\def\xyMarkedTxtPoints{\xyMarkedTxt@i\markedempty@@}\def\xyMarkedTxtExcept{\xyMarkedTxt@i\relax}\def\xyMarkedStyledTxt{\xyMarkedStyledTxt@i\z@}\def\xyMarkedStyledTxtPoints{\xyMarkedStyledTxt@i\markedempty@@}\def\xyMarkedStyledTxtExcept{\xyMarkedStyledTxt@i\relax}%% Recognise alternate names for the above user-macros\let\xyMarkedText\xyMarkedTxt\let\xyMarkedTextPoints\xyMarkedTxtPoints\let\xyMarkedStyledText\xyMarkedStyledTxt\let\xyMarkedTextExcept\xyMarkedTxtExcept\let\xyMarkedStyledTextPoints\xyMarkedStyledTxtPoints\let\xyMarkedStyledTextExcept\xyMarkedStyledTxtExcept% containers for user-supplied data\def\xyMarkedTxtMods@{}\def\xyMarkedTxtStyles@{}\def\xyMarkedTxt@i#1#2#{\def\xyMarkedTxtMods@{#2}% \ifx\xyMarkedTxtMods@\markedempty@@ \let\xyMarkedTxtMods@\labeltextmodifiers \fi \let\xyMarkedTxtStyles@\labeltextstyle \xyMarkedTxt@ii#1}\def\xyMarkedTxt@ii#1#2{% \ifx#1\z@ \DN@{\RecoverDataLabel{#2}}% \else \DN@{\RecoverDataPoints{#2}#1}% \fi \next@\xyMarkedTxt@x\POS }\def\xyMarkedStyledTxt@i#1#2#{\def\xyMarkedTxtMods@{#2}% \ifx\xyMarkedTxtMods@\markedempty@@ \let\xyMarkedTxtMods@\labeltextmodifiers \fi \xyMarkedStyledTxt@ii#1}\def\xyMarkedStyledTxt@ii#1#2#3{% \def\xyMarkedTxtStyles@{#2}% \ifx\xyMarkedTxtStyles@\markedempty@@ \let\xyMarkedTxtMods@\labeltextmodifiers \fi \ifx#1\z@ \DN@{\RecoverDataLabel{#3}}% \else \DN@{\RecoverDataPoints{#3}#1}% \fi \next@\xyMarkedTxt@x\POS }\def\xyMarkedTxt@x{% \wrm@recovercode \xyMarkedPos@\relax \ifnum\wrmcounter > \z@ \edef\next@{="WRM\the\wrmcounter t"}% \else \def\next@{}\fi \def\tmp@{% \expandafter\expandafter\expandafter\drop \expandafter\xyMarkedTxtMods@ \expandafter\txt\xyMarkedTxtStyles@}%%\wrm@message{\codeof\tmp@{\codeof\wrm@text}}% \expandafter\cfromid@\expandafter{\wrm@name}% \expandafter\tmp@\expandafter{\wrm@text}% \ifnum\wrmcounter > \z@ \edef\next@{="WRM\the\wrmcounter t"}% \else \def\next@{}\fi \expandafter\POS\next@}%%%% \xyMarkedMath <modifiers> {<which>}%% \xyMarkedMathPoints <modifiers> {<list>}%% \xyMarkedMathExcept <modifiers> {<list>}%% and %% \xyMarkedStyledMath <modifiers> {<styles>} {<which>}%% \xyMarkedStyledPoints <modifiers> {<styles>} {<list>}%% \xyMarkedStyledMathExcept <modifiers> {<styles>} {<list>}%%%% Use the default label, in math-mode,%% with optional modifiers, default: \labelmathmodifiers%% and styles, default: \labelmathstyle\def\xyMarkedMath{\xyMarkedMath@i\z@}\def\xyMarkedMathPoints{\xyMarkedMath@i\markedempty@@}\def\xyMarkedMathExcept{\xyMarkedMath@i\relax}% containers for user-supplied data\def\xyMarkedMathMods@{ }\def\xyMarkedMathStyles@{ }\def\xyMarkedMath@i#1#2#{% \def\xyMarkedMathMods@{#2}% \ifx\xyMarkedMathMods@\markedempty@@ \let\xyMarkedMathMods@\labelmathmodifiers \fi \expandafter\def\expandafter\xyMarkedMathStyles@\expandafter {\labelmathstyle{}}% \xyMarkedMath@ii#1}\def\xyMarkedMath@ii#1#2{% \ifx#1\z@ \DN@{\RecoverDataLabel{#2}}% \else \DN@{\RecoverDataPoints{#2}#1}% \fi \next@\xyMarkedMath@x\POS}\def\xyMarkedStyledMath{\xyMarkedStyledMath@i\z@}\def\xyMarkedStyledMathPoints{\xyMarkedStyledMath@i\markedempty@@}\def\xyMarkedStyledMathExcept{\xyMarkedStyledMath@i\relax}\def\xyMarkedStyledMath@i#1#2#{% \def\xyMarkedMathMods@{#2}% \ifx\xyMarkedMathMods@\markedempty@@ \let\xyMarkedMathMods@\labelmathmodifiers \fi \xyMarkedStyledMath@ii#1}\def\xyMarkedStyledMath@ii#1#2#3{% \def\xyMarkedMathStyles@{#2}% \ifx\xyMarkedMathStyles@\markedempty@@ \expandafter\def\expandafter\xyMarkedMathStyles@\expandafter {\labelmathstyle{}}% \fi \ifx#1\z@ \DN@{\RecoverDataLabel{#3}}% \else \DN@{\RecoverDataPoints{#3}#1}% \fi \next@\xyMarkedMath@x\POS}\def\xyMarkedMath@x{% \wrm@recovercode \xyMarkedPos@ \relax \expandafter\def\expandafter\tmp@\expandafter{% \expandafter\drop\xyMarkedMathMods@}%%\wrm@message{\codeof\tmp@{\codeof\xyMarkedMathStyles@ \codeof\wrm@text}}%% shouldn't need \tmp@ to be expanded yet \expandafter\expandafter\expandafter\tmp@ \expandafter\expandafter\expandafter{% \expandafter\xyMarkedMathStyles@\wrm@text}% \ifnum\wrmcounter >\z@ \edef\next@{="WRM\the\wrmcounter m"}% \else \def\next@{}\fi \expandafter\POS\next@}\def\RecoverDataLabel#1#2#3{\RecoverData{#1}#2#3{@}}\def\RecoverDataPoints#1#2#3#4{% \ParsePointsList@{#1}% \ifx#2\markedempty@@ \reverse@WRMflags \fi \xyAllMarkedPoints@{#3}{#4}}%\def\xyMarkedPoints#1{%% \xyAllMarkedPoints@i\xyShowMark@x\relax}\def\ParsePointsList@#1{\parseLIST@#1 0\relax\endlist@}\def\parseLIST@#1{\expandafter\ifx \space#1\relax \expandafter\DN@\space{\parseLIST@}% \else\ifx \relax#1\relax \DN@{\parseLIST@}% \else\ifx \endlist@#1\relax \DN@{}% \else\ifcat \noexpand#1\relax \DN@{\expandafter\parseLIST@#1}% \else\ifx ,#1\relax \DN@{\wrm@setflag}% \else\addDASH@\ifx #1\relax \DN@{\afterassignment\wrm@endlist\count@=}%% \else \DN@{\parselisterror{#1}\FN@\parseLIST@}% \else \DN@{\afterassignment\wrm@startlist\count@=#1}% \fi\fi\fi\fi\fi\fi \next@ }\def\wrm@start{0}\def\wrm@end{0}\def\parselisterror#1{% \xyerror@{Token #1 is not part of a <num> or range <num>-<num>.}}\def\wrm@startlist{%% \errorcontextlines=40 \showthe\count@ \ifnum\count@<\z@ \multiply\count@\m@ne \expandafter\wrm@endlist \else \edef\wrm@start{\the\count@}\fi% \parseLIST@ } \DN@##1{\addDASH@\ifx##1\DN@{\parseLIST@##1}% \else \DN@{\wrm@setflag ##1}\fi\next@ }% \next@ }\def\wrm@setflag{% \ifnum\wrm@start=\z@\else \expandafter\expandafter\expandafter\let \expandafter\csname\wrm@start @WRM\endcsname\markedempty@@ \def\wrm@start{0}% \fi \parseLIST@ }% \DN@{\parseLIST@}%% \DN@##1{\show##1\relax\parseLIST@}%% \next@ }\def\wrm@endlist{% \ifnum\count@=\z@ \edef\wrm@end{\the\wrmdatacounter}% \else \edef\wrm@end{\the\count@}\fi \ifnum\wrm@start=\z@ \def\wrm@start{1}\fi \ifnum\wrm@end<\wrm@start \relax\else \wrmcounter=\wrm@start\relax \loop \expandafter\expandafter\expandafter\let \expandafter\csname\the\wrmcounter @WRM\endcsname\markedempty@@ \ifnum\wrmcounter<\wrm@end \advance\wrmcounter\@ne \repeat \fi \def\wrm@start{0}\def\wrm@end{0}\parseLIST@ }\def\xyAllMarkedPoints#1{% \def\xymarkobject@{#1}% \ifx\xymarkobject@\markedempty@@ \let\xymarkobject@\markobject \fi \xyShowAllMarkedPoints@ }\let\xyShowAllMarkedPoints\xyAllMarkedPoints\def\xyShowAllMarkedPoints@#1#2{% \xyWARMprocess{#1}{#2}% \def\wrm@filename{#1.#2}% \xyAllLabelsImport@{#1.#2}% \ifnum\wrmdatacounter>0 \DN@{\xyAllMarkedPoints@\xyShowMark@x\relax}% \else \DN@{\POS}\fi \next@ }\def\xyAllMarkedMath#1#{% \expandafter\def\expandafter\xyMarkedMathStyles@ \expandafter{\labelmathstyle{}}% \def\xyMarkedMathMods@{#1}% \ifx\xyMarkedMathMods@\markedempty@@ \let\xyMarkedMathMods@\labelmathmodifiers \fi \xyAllMarkedPoints@y\xyMarkedMath@x\relax}\def\xyAllMarkedText#1#{% \let\xyMarkedTxtStyles@\labeltextstyle \def\xyMarkedTextMods@{#1}% \ifx\xyMarkedTextMods@\markedempty@@ \let\xyMarkedTextMods@\labeltextmodifiers \fi \xyAllMarkedPoints@y\xyMarkedTxt@x\relax}%\def\xyAllMarkedPoints@y#1#2#3#4{% \xyWARMprocess{#3}{#4}% \def\wrm@filename{#3.#4}% \xyAllLabelsImport@{#3.#4}% \xyAllMarkedPoints@i#1#2}\def\xyAllMarkedPoints@i#1#2{% \ifnum\wrmdatacounter>0 \DN@{\xyAllMarkedPoints@#1#2}% \else \DN@{\POS}\fi \next@ }\def\xyMarkedImport#1{\def\tmp{#1}% \ifx\tmp\markedempty@@ \ifx\wrm@filename\markedempty@@ \DN@{\xyAllImportError@}% \else \DN@{\xyAllLabelsImport@{\wrm@filename}}% \fi \else \DN@{\xyAllLabelsImport@{\tmp}}% \fi \next@}\def\xyAllImportError@{% \xyerror@{There is no graphic file to import.}}%
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -