📄 warmread.sty
字号:
%%%% WARMreader.sty v1.2%% 5 July 2001%%%% by Ross Moore, <ross@mpce.mq.edu.au> %%\edef\wrmprevat{\the\catcode`\@}\catcode`\@=11%%%% If you have trouble finding files,%% then we may need to know the directory delimiter;%% so uncomment one of the following lines...%%\ifx\undefined\@currdir % ... get it from LaTeX's config file:% \input texsys.cfg \ifx\undefined\@currdir % ... or specify it directly: \def\@currdir{}% ... or try winging-it without% \def\@currdir{:}% for Macintosh % \def\@currdir{:}% for Unix \fi\fi\ifx\undefined\codeof {\catcode`\:=12 \gdef\codeof#1{\expandafter\codeof@\meaning#1<-:} \gdef\codeof@#1:->#2<-:{#2}%}\fi\newread\wrmread\newread\wrm@write\let\wrm@next=\relax\def\wrm@empty{}%\def\maxwrmlines{20}\let\wrm@tmp\relax\def\EndLinePattern{!;!}\let\wrm@quiet\relax\def\wrmquiet{\def\wrm@quiet{}}\def\wrmverbose{\let\wrm@quiet\relax}\newcount\wrmcounter\newcount\wrmdatacounter\newif\ifmorelines\morelinestrue\newwrite\wrm@tmpfile\def\wrm@recovercode{% \immediate\openout\wrm@tmpfile=\jobname.wrm \relax\immediate\write\wrm@tmpfile{{\codeof\wrm@text}}\relax \immediate\closeout\wrm@tmpfile\relax \immediate\openin\wrmread=\jobname.wrm \read\wrmread to \wrm@text \immediate\closein\wrmread \expandafter\expandafter\expandafter\def \expandafter\expandafter\expandafter\wrm@text \expandafter\expandafter\expandafter{\expandafter \strip@endline\wrm@text \strip@endline}%}\let\WARM@PreDataString=\relax\let\WARM@EndFileString=\relax\def\wrm@defprefix{datapoint}\let\wrm@prefix=\wrm@defprefix\def\WARMprefix#1{\def\wrm@prefix{#1}\WARM@prefixMessage\ignorespaces}\def\WARM@prefixMessage{% \wrm@message{Using prefix '\wrm@prefix' for unlabelled points.}}\def\wrm@message#1{{\let\protect=\noexpand \let\\\relax \endlinechar=10 \immediate\write16{#1}}}%\def\WARMprocess#1#2#3{% \WARMprocessDir{\@currdir}{#1}{#2}{#3}}%\def\WARMprocessDir#1#2#3#4#5{\begingroup \begingroup \wrmdatacounter=\z@ \let\wrm@llx=\undefined% \def\CleanupAfterDir{\endgroup}% \def\fileprefix{#2}% \def\fileextn{#3}% \def\dataextn{#4}% \ifx\dataextn\wrm@empty \else \WARM@RelaxOpenFileMessage \edef\wrm@filename{#1\fileprefix.\dataextn}% \TryToOpenTheFile\relax \fi \ifnum\wrmdatacounter<\z@ \aftergroup\WARM@RelaxOpenFileMessage \aftergroup\WARM@RelaxBBWrite \aftergroup\WARM@ReadDataFromFile \else \edef\wrm@filename{\@currdir\fileprefix.\fileextn}% \TryToOpenTheFile\relax \ifnum\wrmdatacounter<\z@ \aftergroup\WARM@ReadDataToFile \else \aftergroup\WARM@NoFilesError \fi\fi \endgroup {#1#2}{#3}{#4}{#5}\CleanupAfterDir \def\wrm@filename{#1#2.#3}%}\def\CleanupAfterDir{% \ifx\undefined\wrm@llx\expandafter\endgroup \else\expandafter\saveBBafterFile\fi}\def\WARM@NoFilesError#1#2#3#4{% \message{Cannot open file #1.#2 nor #1.#3 }}\def\WARM@ReadDataFromFile#1#2#3#4{% \def\wrm@filename{#1.#3}% \expandafter\ProcessFile\expandafter{\wrm@filename}{#4}%}\def\WARM@ReadDataToFile#1#2#3#4{% \begingroup \def\wrm@filename{#1.#3}% \immediate\openout\wrm@write=\wrm@filename \def\wrm@filename{#1.#2}% \expandafter\ProcessFile\expandafter{\wrm@filename}{#4}% \immediate\closeout\wrm@write \endgroup \WARM@ReadDataFromFile{#1}{#2}{#3}{#4}%}\def\TryToOpenTheFile{% \immediate\openin\wrmread\wrm@filename\relax \ifeof\wrmread \expandafter\TryAgainToOpenTheFile \else \read\wrmread to\ThisFileLine \expandafter\FileIsOpen \fi}\def\ReadLineFromFile{% \ifeof\wrmread \morelinesfalse \else \read\wrmread to\ThisFileLine \fi {\ifx\ThisFileLine\wrm@empty \ifmorelines\aftergroup\ReadLineFromFile\fi\fi}%}\def\CloseTheFile#1{\immediate\closein\wrmread}\def\FileIsOpen{\ResetDataCounter\FileIsOpenMessage}\def\FileIsOpenMessage{\message{% opened file \wrm@filename\space successfully:\codeof\ThisFileLine}}\def\WARM@RelaxOpenFileMessage{\let\FileIsOpenMessage\relax}\def\TryAgainToOpenTheFile{% \immediate\closein\wrmread \immediate\openin\wrmread\wrm@filename\relax \ifeof\wrmread\expandafter\FileEmptyError \else\expandafter\FileIsOpen\fi}\def\FileEmptyError{% \message{file \wrm@filename\space could not be opened or is empty.}% \futurelet\next\CloseTheFile}{\obeylines\gdef\PrepareToOpenFile{% \begingroup \catcode`\%=12 \catcode`=9 \catcode`\{=12 \catcode`\}=12}\gdef\EndLineAdjust{\def\strip@endline##1\strip@endline{##1}}\gdef\strip@endline#1 \strip@endline{#1}%\gdef\strip@endline#1\strip@endline{#1}}\def\ProcessFile#1#2{% \def\wrm@filename{#1}% \PrepareToOpenFile \TryToOpenTheFile#2% \CleanupAfterFile}\def\CleanupAfterFile{\endgroup}\def\TestIfEnd{% \ifx\ThisFileLine\WARM@EndFileString\message{Finishing with `\WARM@EndFileString' after \number\wrmcounter\space lines.}% \morelinesfalse \wrmcounter\maxwrmlines\advance\wrmcounter\@ne \fi }\def\TestMoreLines{% \ifnum\wrmcounter<\maxwrmlines\relax \else\morelinesfalse\fi}\def\TestReadLine#1#2{\begingroup \def\DataPattern{#2}\def\Empty{}% \ifx\DataPattern\Empty \def\next{\endgroup\TestExactLine#1}% \else \def\protect{\noexpand}% for "robust" LaTeX commands% \edef\testdata{\ThisFileLine\space\StrippedDataPattern\EndLinePattern}% \edef\testdata{\StrippedDataPattern\EndLinePattern}% \expandafter\expandafter\expandafter\def \expandafter\expandafter\expandafter\testdata \expandafter\expandafter\expandafter{\expandafter\ThisFileLine\testdata}%%\show\testdata \edef\tmp{\gdef\noexpand\ThisData\DataPattern\EndLinePattern}% \expandafter\tmp\expandafter{\the\WARM@ExpansionToks}% \expandafter\ThisData\testdata \relax \def\next{\endgroup}% \ifx\undefined\wrm@llx \ifdim\wrm@aspect\p@=\p@\else\SaveARvalues@\fi \else\SaveBBvalues@\fi \aftergroup\TestExactLine\aftergroup#1\relax \fi \next }\def\declareWRMdata#1#2#3{{%\gdef\wrm@namespace{#2}% \DN@{#2}\ifx\next@\empty\let\wrm@namespace\relax \else\gdef\wrm@namespace{#2}\fi \def\ThisFileLine{#1}\TestDataLine\WRM@DataPattern\WRM@DataStripped\relax}}\def\wrm@namespace{}\def\wrm@savedata{% check for End of Data \ifx\testdata\WARM@EndDataTestString\aftergroup\morelinesfalse \else\aftergroup\morelinestrue \ifx\testdata\WARM@PreDataString \aftergroup\AdvanceDataCount \ifx\wrm@namespace\relax \else \expandafter\expandafter\expandafter \def\expandafter\expandafter\expandafter\wrm@texstring \expandafter\expandafter\expandafter{\expandafter\wrm@namespace\wrm@texstring}% \fi \let\protect\noexpand \ifx\wrm@quiet\relax \wrm@message{Marked '\wrm@label' point at (\wrm@x,\wrm@y) for \codeof\wrm@texstring.}% \fi \edef\tmp@{\noexpand\def\noexpand\wrm@x{\wrm@x}% \noexpand\def\noexpand\wrm@y{\wrm@y}}% \expandafter\expandafter\expandafter\def \expandafter\expandafter\expandafter\tmp@ \expandafter\expandafter\expandafter{% \expandafter\expandafter\expandafter\def \expandafter\expandafter\expandafter\wrm@text \expandafter\expandafter\expandafter{% \expandafter\wrm@texstring\expandafter}\tmp@}%% \ifx\wrm@namespace\relax \expandafter\global\expandafter \let\csname WRM@\wrm@label\endcsname=\tmp@ \advance\wrmdatacounter\@ne \expandafter\global\expandafter \let\csname WRM@\the\wrmdatacounter @\endcsname=\tmp@ \else \ifx\wrm@namespace\wrm@empty \expandafter\global\expandafter \let\csname WRM@\wrm@label\endcsname=\tmp@ \advance\wrmdatacounter\@ne \expandafter\global\expandafter \let\csname WRM@\the\wrmdatacounter @\endcsname=\tmp@ \else \expandafter\global\expandafter \let\csname WRM@\wrm@label.\wrm@namespace\endcsname=\tmp@ \advance\wrmdatacounter\@ne \expandafter\global\expandafter \let\csname WRM@\the\wrmdatacounter @\endcsname=\tmp@ \expandafter\ifx\csname WRM@\wrm@label\endcsname\relax \expandafter\global\expandafter \let\csname WRM@\wrm@label\endcsname=\tmp@ \else \begingroup \def\wrm@message##1{\def\prev@name{##1}}% \csname WRM@\wrm@label\endcsname \ifx\wrm@text\wrm@empty \def\tmp@{\endgroup \edef\wrm@text{\wrm@namespace}}% \else \ifx\wrm@text\relax \edef\tmp@{\endgroup\def\noexpand\prev@name{\prev@name\space}% \let\noexpand\twoalready\relax}% \else%\show\wrm@text %\aftergroup\tracingall \edef\tmp@{\endgroup\def\noexpand\prev@name{\wrm@text\space}}%% \def\noexpand\wrm@text{\noexpand\wrm@namespace}}% \fi\fi \tmp@ \ifx\undefined\prev@name \else \ifx\twoalready\relax \edef\tmp@{\def\noexpand\wrm@x{\wrm@x}\def\noexpand\wrm@y{\wrm@y}%% \def\noexpand\wrm@text{\wrm@text}% \let\noexpand\wrm@text\relax \noexpand\wrm@message{\prev@name or \codeof\wrm@texstring}}% \else \edef\tmp@{\def\noexpand\wrm@x{\wrm@x}\def\noexpand\wrm@y{\wrm@y}% \let\noexpand\wrm@text\relax\noexpand\wrm@message% \def\noexpand\wrm@text{\wrm@text}\noexpand\wrm@message {\wrm@label\space could be \prev@name or \codeof\wrm@texstring}}% \fi\fi%\show\tmp@ \expandafter\global\expandafter \let\csname WRM@\wrm@label\endcsname=\tmp@ \fi \fi\fi \else %% all data occurs in a block --- unnecessary% \ifnum\wrmdatacounter>\z@\aftergroup\morelinesfalse\fi \fi\fi}\def\SaveBBvalues@{% \ifx\undefined\wrm@llx \def\next{\endgroup}% \else \edef\next{\endgroup \wrmdatacounter=\the\wrmdatacounter\relax \def\noexpand\wrm@llx{\wrm@llx}\def\noexpand\wrm@lly{\wrm@lly}% \def\noexpand\wrm@urx{\wrm@urx}\def\noexpand\wrm@ury{\wrm@ury}% \def\noexpand\wrm@aspect{\wrm@aspect}% \def\noexpand\wrm@offset{\wrm@offset}% \def\noexpand\wrm@filename{\wrm@filename}}% \fi }\def\saveBBafterFile{\SaveBBvalues@\next \def\CleanupAfterFile{\endgroup}}\def\SaveARvalues@{% \ifdim\wrm@aspect\p@=\p@ \def\next{\endgroup}% \else \edef\next{\endgroup \def\noexpand\wrm@aspect{\wrm@aspect}% \def\noexpand\wrm@offset{\wrm@offset}}% \fi }\def\saveARafterFile{\SaveARvalues@\next \def\CleanupAfterFile{\endgroup}}\def\TestExactLine#1{\ifx\ThisFileLine#1\morelinesfalse\fi}\def\TestDataString{%% \edef\testdata{\ThisFileLine\space\DataStripped\EndLinePattern}% \edef\testdata{\DataStripped\EndLinePattern}% \expandafter\expandafter\expandafter\def \expandafter\expandafter\expandafter\testdata \expandafter\expandafter\expandafter{\expandafter\ThisFileLine\testdata}% \edef\tmp{\def\noexpand\ThisData@Test\DataPattern\EndLinePattern}% \expandafter\tmp\expandafter{\the\WARM@ExpansionToks}% \expandafter\ThisData@Test\testdata}\def\TestDataLine#1#2#3{{% \def\DataPattern{#1}\def\Empty{}\def\DataStripped{#2}% \ifx\DataPattern\Empty \aftergroup\TestExactLine\aftergroup\WARM@PreDataString\relax \else \TestIfEnd\ifmorelines \ifnum\wrmdatacounter<\z@ \aftergroup\wrmdatacounter\aftergroup\z@ \else\expandafter\TestDataString\fi \else\morelinesfalse\fi \ifmorelines % found valid data #3% \else % no more data -- pass boolean to next level \aftergroup\morelinesfalse \fi \fi}}\def\PrintDataLine{% \wrm@message{\wrm@filename\space data: \codeof\ThisFileLine}}\def\PrintInfoLine{% \wrm@message{Found \codeof\ThisFileLine\space on line \number\wrmcounter}}\def\PrintNumberOfDataPoints{% \wrm@message{Found \number\wrmdatacounter\space data points.}}\def\WriteToBBfile{% \immediate\write\wrm@write{\codeof\ThisFileLine}}\def\WARM@RelaxBBWrite{\let\WriteToBBfile\relax}\def\AdvanceLineCount{\advance\wrmcounter\@ne}\def\RevertLineCount{\advance\wrmcounter\m@ne}\def\AdvanceDataCount{\advance\wrmdatacounter\@ne\RevertLineCount}\def\ResetDataCounter{\wrmdatacounter=\m@ne}\def\ReadSomeLines{\wrmcounter=\@ne \morelinestrue \loop \TestIfEnd \TestMoreLines \ifmorelines \AdvanceLineCount \ReadLineFromFile \repeat}\def\ReadToLine#1#2#3{\ifnum\wrmcounter=\z@\wrmcounter=\@ne\fi \ifnum\wrmcounter<\maxwrmlines\relax\morelinestrue\fi \loop %\PrintDataLine \TestReadLine #1{#2}\TestMoreLines \ifmorelines \advance\wrmcounter\@ne \ReadLineFromFile \repeat \ifnum\wrmcounter>0 \ifnum\maxwrmlines<\wrmcounter \message{Failed to find: #1}% \else \expandafter #3\fi \else \message{Failed to find: #1}\fi}\def\ReadDataLines#1#2#3{% \ResetDataCounter \edef\WARM@EndDataTestString{\WARM@EndDataString\space\ParenEmpty}% \ifnum\wrmcounter<\maxwrmlines\relax\morelinestrue\fi \loop \TestDataLine{#1}{#2}{#3}\TestIfEnd \TestMoreLines \ifmorelines \advance\wrmcounter\@ne \ReadLineFromFile \repeat \PrintNumberOfDataPoints}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -