diff options
Diffstat (limited to 'Master/texmf-dist/tex/latex/frankenstein/tag.sto')
-rw-r--r-- | Master/texmf-dist/tex/latex/frankenstein/tag.sto | 441 |
1 files changed, 441 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/frankenstein/tag.sto b/Master/texmf-dist/tex/latex/frankenstein/tag.sto new file mode 100644 index 00000000000..e8bfe0fa161 --- /dev/null +++ b/Master/texmf-dist/tex/latex/frankenstein/tag.sto @@ -0,0 +1,441 @@ +% \AddToCheckSum{441} +% +% \subsection{Writing to \cname{@auxout}} +% +% \todo{ +% Might I need to do \code{\let\protect\@unexpandable@protect} instead of +% \cs\noexpand, in the def of \cname{\protected@writeaux}? +% } +% +% \begin{macro}{\nc@writeaux@main} +% \begin{macro}{\nc@protected@writeaux@main} +% The |main| versions are exactly the same as what they replaced. +% \begin{macrocode} +\newcommand\nc@writeaux@main {% + \immediate\write\@auxout +} +\newcommand\nc@protected@writeaux@main {% + \protected@write\@auxout +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\nc@writeaux@aux} +% \begin{macro}{\nc@protected@writeaux@aux} +% When you remove the \cs\immediate, you have to expand whatever's in the +% argument at the time you invoke \cs\write. \cs\IncludeName and +% \cname{@percentchar}, and other exandables in |#2| will get expanded now. +% The \cname{@percentchar} and the |^^J|s are there because lines written to +% \cname{@auxout} must be on lines by themselves to satisfy \BibTeX. The +% |^^J|s write newlines, and the \cname{@percentchar} eliminates a newline when +% the \ext{aux} file is read in again later. Accommodating \BibTeX{} requires +% special consideration several times below as well. +% \begin{macrocode} +\newcommand\nc@writeaux@aux [1] {% args: write-text + \eExecute {% + \write\@auxout{\string\@auxtag{\IncludeName}{\@percentchar^^J#1^^J}}% + }% +} +\newcommand\nc@protected@writeaux@aux [2] {% args: init-hook write-text + \protected@write\@auxout{#1}{\string\@auxtag{\IncludeName}{\@percentchar^^J#2^^J}}% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@writeaux} +% \begin{macro}{\@protected@writeaux} +% We start with the |main| versions. We don't reserve the control sequences +% \cname{@writeaux} and \cname{protected@writeaux} because the hack to adapt +% other packages might have already defined it with \cs\providecommand. +% \begin{macrocode} +\let\@writeaux\nc@writeaux@main +\let\protected@writeaux\nc@protected@writeaux@main +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \subsection{Kernel redefinitions} +% +% \begin{macro}{\@bibitem} +% \begin{macro}{\@lbibitem} +% \begin{macro}{\label} +% \begin{macro}{\@citex} +% \begin{macro}{\bibliography} +% \begin{macro}{\nocite} +% \begin{macro}{\addtocontents} +% These are simple redefinitions of kernel functions. The changes are the +% substitutions for the writing commands described above. +% \begin{macrocode} +\defcommand*\@bibitem [1] {% + \item + \if@filesw + \@writeaux{\string\bibcite{#1}{\the\value{\@listctr}}}% + \fi + \ignorespaces +} +\DefName*{@lbibitem} {[#1]#2} {% + \item[\@biblabel{#1}\hfill]% + \if@filesw + \begingroup + \let\protect\noexpand + \@writeaux{\string\bibcite{#2}{#1}}% + \endgroup + \fi + \ignorespaces +} +\defcommand*\label [1] {% + \@bsphack + \protected@writeaux{}{\string\newlabel{#1}{{\@currentlabel}{\thepage}}}% + \@esphack +} +\defcommand\addtocontents [2] {% + \protected@writeaux + { + \let\label\Gobble + \let\index\Gobble + \let\glossary\Gobble + } + {\string\@writefile{#1}{#2}}% +} +\DefName*{@citex} {[#1]#2} {% + \let\@citea\@empty + \@cite {% + \@for\@citeb:=#2\do {% + \@citea + \def\@citea{,\penalty\@m\ }% + \edef\@citeb{\expandafter\@firstofone\@citeb}% + \if@filesw + \@writeaux{\string\citation{\@citeb}}% + \fi + \@ifundefined{b@\@citeb} {% + \mbox{\reset@font\bfseries ?}% + \G@refundefinedtrue + \@latex@warning + {Citation `\@citeb' on page \thepage \space undefined}% + }{% ELSE + \hbox{\csname b@\@citeb\endcsname}% + }% + }% + }{#1}% second arg to \@cite +} +\defcommand*\bibliography [1] {% + \if@filesw + \@writeaux{\string\bibdata{#1}}% + \fi + \@input@{\jobname.bbl}% +} + \defcommand*\bibliographystyle [1] {% + \ifx\@begindocumenthook\@undefined\else + \expandafter\AtBeginDocument + \fi + {\if@filesw + \@writeaux{\string\bibstyle{#1}}% + \fi}% +} +\defcommand*\nocite [1] {% + \@bsphack + \@for\@citeb:=#1\do {% + \edef\@citeb{\expandafter\@firstofone\@citeb}% + \if@filesw + \@writeaux{\string\citation{\@citeb}}% + \fi + \@ifundefined{b@\@citeb} {% + \G@refundefinedtrue + \@latex@warning{Citation `\@citeb' undefined}% + }{}% + }% + \@esphack +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \subsection{Checkpoints} +% +% \begin{macro}{\@writeckpt} +% \begin{macro}{\@wckptelt} +% The \cname{@charlb}, \cname{@charrb}, and \cname{@percentchar} stuff is to +% satisfy \BibTeX{} (see above). +% \begin{macrocode} +\defcommand*\@writeckpt [1] {% + \if@filesw + \write\@auxout{\string\@setckpt{#1}\@charlb\@percentchar}% + {\let\@elt\@wckptelt + \cl@@ckpt}% + \write\@auxout{\@charrb}% + \fi +} +\defcommand\@wckptelt [1] {% + \write\@auxout{\string\setcounter{#1}{\the\@nameuse{c@#1}}}% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \subsection{Including} +% +% \begin{macro}{\IncludeName} +% \begin{macro}{\ParentName} +% \begin{macro}{\nc@includename@<N>} +% \mbox{} +% \begin{macrocode} +\newcommand\IncludeName {% + \@nameuse{nc@includename@\theIncludeDepth}% +} +\newcommand\ParentName {% + \ifnum\value{IncludeDepth}= 0 + \jobname + \FrankenWarning{newclude}{Requested name of parent of principle source}% + \else +% \end{macrocode} +% The incrementation of the \cs{IncludeDepth} counter is local to the group. +% \begin{macrocode} + \begingroup + \advance\c@IncludeDepth by \m@one + \@nameuse{nc@includename@\theIncludeDepth}% + \endgroup + \fi +} +\NewName {nc@includename@0} {} {\jobname} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\nc@include} +% \begin{macro}{\nc@@include} +% \todo{dox} +% \begin{macrocode} +\newcommand\nc@include [2][] {% args: hook filename + \@ifnextchar [ {%] + \nc@@include{#1}{#2}% + }{% ELSE + \nc@@include{#1}{#2}[]% + }% +} +\NewName{nc@@include}{#1#2[#3]} {% args: prehook filename posthook + \IfAllowed{#2} {% + \nc@t@b % surround the \include with something + \stepcounter{IncludeDepth}% + \DefName*{nc@includename@\theIncludeDepth} {} {#2}% + \let\@writeaux\nc@writeaux@aux + \let\protected@writeaux\nc@protected@writeaux@aux +% \end{macrocode} +% Now execute the text of the optional argument to \cs\include. +% \begin{macrocode} + #1% + \@input@{#2.tex}% + #3% + \@writeckpt{#2}% + \let\@writeaux\nc@writeaux@main + \let\protected@writeaux\nc@protected@writeaux@main +% \end{macrocode} +% We mustn't restore the counter before we have finished using it. +% \begin{macrocode} + \addtocounter{IncludeDepth}{\m@ne}% + \nc@t@b % surround the \include with something + }{% ELSE +% \end{macrocode} +% If the file is not allowed, we don't load it and do two things instead. We +% execute the part's checkpoint, then we write out the part's auxcommands and +% checkpoint again. We must handle the case when the auxcommands isn't +% defined; but the checkpoint will always be defined. +% \begin{macrocode} + \@ifundefined{cp@#2} {% +% \DTypeout{No information on part [#2]!}% + }{% ELSE + \@nameuse{cp@#2}% + \if@filesw% + \nc@write@auxcommands{#2}% + \nc@write@ckpt{#2}% + \fi% if@filesw + }% if@undefined + }% IfAllowed +}% +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\nc@write@auxcommands} +% \begin{macro}{\nc@write@ckpt} +% \todo{dox} +% +% \cs\meaning produces catcode 12's for all chars except spaces which are 10. +% Begin making definitions with |\catcode`\^^M=12| (other). +% \begin{macrocode} +\begingroup +\catcode`\^^M=12 %% double percents mean they're there only because of the catcode +%% +\Global\DefName*{nc@write@auxcommands} {#1} {% args: partname + \@ifundefined{nc@auxcommands@#1} {% + }{% ELSE + \write\@auxout{\string\@auxtag{#1}\@charlb\@percentchar}% + \EExpand*\csname nc@auxcommands@#1\endcsname\In {% + \edef\nc@t@a {% + \expandafter\strip@prefix\meaning ##1% + }% + }% + \edef\nc@t@a {\expandafter\nc@strip@M\nc@t@a\@nil}% +% \DTypeout{The auxcommands: \meaning\nc@t@a}% + \begingroup %% + \catcode`\^^M=12 % other + \nc@for\nc@t@b:=\nc@t@a\do {% +% \DTypeout{auxcommand ITEM: \meaning\nc@t@b}% + \EExpand\nc@t@b\In {% + \write\@auxout{##1}% + }% + }% + \endgroup %% + \write\@auxout{\@charrb}% + }% +}%% +\Global\DefName*{nc@write@ckpt} {#1} {% args: partname + \write\@auxout{\string\@setckpt{#1}\@charlb\@percentchar}% + \EExpand*\csname cp@#1\endcsname\In {% + \edef\nc@t@a {% + \expandafter\strip@prefix\meaning ##1% + }% + }% + \edef\nc@t@a {\expandafter\nc@strip@M\nc@t@a\@nil}% + \begingroup %% + \catcode`\^^M=12 % other + \nc@for\nc@t@b:=\nc@t@a\do {% +% \DTypeout{checkpoint ITEM: \meaning\nc@t@b}% + \EExpand\nc@t@b\In {% + \write\@auxout{##1}% + }% + }% + \endgroup %% + \write\@auxout{\@charrb}% +}%% +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\nc@for} +% \begin{macro}{\nc@forloop} +% \begin{macro}{\nc@iforloop} +% \cname{nc@for} is like the kernel's \cname{@for} but divides its list at +% |^^M|$_{12}$ instead of |,|. +% \begin{macrocode} +\Global\NewName{nc@for} {#1:=#2\do#3} {% FIX (what?) + \expandafter \def %% + \expandafter \@fortmp %% + \expandafter {#2}% + \ifx\@fortmp\@empty \else %% + \expandafter\nc@forloop#2^^M\@nil^^M\@nil\@@#1{#3}% + \fi %% +}%% +\Global\NewName{nc@forloop} {#1^^M#2^^M#3\@@#4#5} {% + \def#4{#1}% + \ifx #4\@nnil \else %% + #5% + \def#4{#2}% + \ifx #4\@nnil \else %% + #5% + \nc@iforloop #3\@@#4{#5}% + \fi %% + \fi %% +}%% +\Global\NewName{nc@iforloop} {#1^^M#2\@@#3#4} {% + \def#3{#1}% + \ifx #3\@nnil %% + \expandafter\@fornoop %% + \else %% + #4% + \relax %% + \expandafter\nc@iforloop %% + \fi %% + #2\@@#3{#4}% +}%% +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\nc@strip@M} +% This strips a final |^^M|$_{12}$ from its argument. \todo{I think this could be +% built in to \cname{nc@for}.} +% \begin{macrocode} +\Global\NewName{nc@strip@M} {#1^^M\@nil} {#1}%% +% \end{macrocode} +% Finish making definitions with |\catcode`\^^M=12|. +% \begin{macrocode} +\endgroup +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@auxtag} +% \begin{macro}{\@@auxtag} +% We both execute and save. \todo{efficiency? check only once, then redefine +% auxtag?} \todo{dox}. +% +% I could use |\EExpand\In| for clarity, but I go for efficiency on this +% crucial macro. +% +% Begin making definitions with |\catcode`\^^M=12| (other). +% \begin{macrocode} +\begingroup +\catcode`\^^M\active %% double percents mean they're there only because of the catcode +%% +\Global\NewName*{@auxtag} {#1} {% args: partname + \begingroup %% + \catcode`\^^M\active %% + \@@auxtag{#1}% +}%% +\Global\NewName*{@@auxtag} {#1#2} {% args: partname auxcommands + \@ifundefined {nc@auxcommands@#1} {% + \nc@toks@a={#2}% + }{% ELSE + \expandafter \nc@toks@a %% + \expandafter \expandafter %% + \expandafter {\csname nc@auxcommands@#1\endcsname#2}% + }% + \expandafter\xdef\csname nc@auxcommands@#1\endcsname{\the\nc@toks@a}% + #2% + \endgroup %% +}%% +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@setckpt} +% \begin{macro}{\@@setckpt} +% \todo{dox} +% \begin{macrocode} +\Global\DefName*{@setckpt} {#1} {% args: partname + \begingroup %% + \catcode`\^^M\active %% + \@@setckpt{#1}% +}%% +% \end{macrocode} +% Finish making definitions with |\catcode`\^^M=12|. +% \begin{macrocode} +\endgroup +% \end{macrocode} +% The \cs\endgroup terminates the change in catcode. +% \begin{macrocode} +\newcommand*\@@setckpt [2] {% args: partname checkpoint + \expandafter\gdef\csname cp@#1\endcsname{#2}% + \endgroup +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% What this does is effectively remove all the tags. The end of document hook +% is processed before the closing processing of the \ext{aux} files, during +% which checking for things like undefined references is done. At this point +% we do not need the tags. +% \begin{macrocode} +\AtEndDocument {% + \let\@auxtag\@secondoftwo +} +% \end{macrocode} |