diff options
Diffstat (limited to 'Master/texmf-dist/tex/lollipop/lollipop-document.tex')
-rw-r--r-- | Master/texmf-dist/tex/lollipop/lollipop-document.tex | 381 |
1 files changed, 381 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/lollipop/lollipop-document.tex b/Master/texmf-dist/tex/lollipop/lollipop-document.tex new file mode 100644 index 00000000000..7014bae8423 --- /dev/null +++ b/Master/texmf-dist/tex/lollipop/lollipop-document.tex @@ -0,0 +1,381 @@ +% lollipop-document.tex copyright 1992/3 Victor Eijkhout +% copyright 2014 Vafa Khalighi +% +% +% This program is free software: you can redistribute it and/or modify +% it under the terms of the GNU General Public License as published by +% the Free Software Foundation, either version 3 of the License, or +% (at your option) any later version. +% +% This program is distributed in the hope that it will be useful, +% but WITHOUT ANY WARRANTY; without even the implied warranty of +% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +% GNU General Public License for more details. +% +% You should have received a copy of the GNU General Public License +% along with this program. If not, see <http://www.gnu.org/licenses/>. +% +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%% D O C U M E N T S T R U C T U R E %%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\DefineTest:LocalReferences +\NewTrace:doc + +% Start +% open external files and execute default commands +% +\newif\if@started +\def\Start{\@startedyes \the\start@commands + \ifBasicIndentIsSet\else + \Distance:basicindent=parindent \fi + \set@level@indent} +\def\StartCommand#1{\adds@start@command{#1}} + +% End +% 1/ close any open groups and give warnings +% 2/ \vfil\eject the last page +% 3/ \immediate\close the .auxs file +% 4/ load the .aux for writing the external files +% and testing changed references +% +\let\@end=\end +\def\Stop{\Close@all@groups + \the\stop@commands + \vfil \penalty\slotpenalty + \ifnum\unknown@refs>\z@ + \message{-- There \ifnum\unknown@refs=\@ne was an \else + were \number\unknown@refs\@space\fi + unresolved reference\ifnum\unknown@refs>\@ne s\fi.}\fi + \ifnum\duplicate@labels>\z@ + \message{-- There \ifnum\duplicate@labels=\@ne was an\else + were \number\duplicate@labels\@space\fi + duplicate label\ifnum\duplicate@labels>\@ne s\fi.}\fi + \immediate@close@aux@file{aux} + \ifWriteExtern \final@load@aux \fi + \@end} +\def\StopCommand#1{\adds@stop@command{#1}} + +%%%%%%%%%%%% input other files +\newwrite\aux@file \newwrite\incaux@file +\let\ifWriteaux\iftrue +\def\aux@name{aux} \def\aux@extension{aux} +\newif\if@auxopen \newif\if@incauxopen + +% the following line is in output.tex +%\add@mark@item{first@page} + +% Input files are in a group, +% they also set the IsFirstPage test +\def\InputFile:#1 {\begingroup \def\input@name{#1} + \Tmessage[doc]{Input File: #1} + \refresh@mark@item{first@page}{yes} + \refresh@mark@item{first@page}{no} + \ifLocalReferences + \get@aux@file{#1}{incaux}{aux}\fi + \input@file{#1}% + \immediate@close@aux@file{incaux} + \Close@all@groups + \def\test@input@name{#1}\ifx\input@name\test@input@name\else + \Wmessage{Input `#1' overbalanced}\fi + \endgroup} +\def\xInputFile:#1 {\input@file{#1}} +\def\input@file#1{\input #1 \vfil\penalty\slotpenalty\par} + +\let\input@name=\@empty +\let\test@input@name=\@empty + +% Input of Lollipop files +% +\def\InputLollipop:#1 {\makeatletter\input#1\relax\makeatother} + +%%%%%%%%%%%%%%%% External Communication + +% List of files +% not including the .aux file +% +\newtoks\ext@files@list \ext@files@list={} + +% I don't want to remember my own naming conventions. +% +\def\file@ext@name#1{#1@extension} +\def\cs@file@ext@name#1{\csname#1@extension\endcsname} + +% Define External File +% #1 is name known to style definition, +% #2#3#4 is three-letter file extension in +% file system +% +% correspondence: \#1@extension = #2#3#4, \#2#3#4@name = #1 +% +% user test \Write#1 to prevent overwriting +% internal test \if@#2#3#4open +% \newwrite\#2#3#4@file +% +\def\DefineExternalFile:#1=#2#3#4#5 + {\Tmessage[doc]{Define external file `#1' (ext=#2#3#4)} + \csarg\newwrite{#2#3#4@file} + \append@to@list{ext@files@list}{\\#2#3#4; } + \csarg\newtoks{#1@local@defs}%constructed in \ExternalItem + \csarg\gdef{\file@ext@name{#1}}{#2#3#4} + \csarg\gdef{#2#3#4@name}{#1} + \DefineTest:{Write#1} + \global\csname Write#1yes\endcsname + \csarg\newif{if@#2#3#4open} + } + +%%%% Load + +% Initial load of the auxiliary file +% +\def\initial@load@aux{%\begingroup%why this group? + \disable@external@write@command + \Tmessage[doc]{Load initial aux file} + \get@aux@file{\jobname}{aux}{aux} + %\endgroup + \ifWriteExtern + \open@ext@file@for@output{\jobname}{aux}{aux} + \fi} +% A test to determine all-or-nothing writing of .aux file. +% below there is a redefinition for bibTeX +\DefineTest:WriteExtern \WriteExtern:yes +\ifini{\add@start@command{\initial@load@aux}} + +% Load of external file +% +\def\LoadExternalFile:#1 + {\if\UndefinedCS{\file@ext@name{#1}} + \Wmessage{LoadExternalFile: unknown external file `#1'} + \else \begingroup + \Tmessage[doc]{Loading external file: #1} + \WriteExtern:no %prevent trouble with undefined entries + \csarg\the{#1@local@defs} + \get@aux@file{\jobname}{\cs@file@ext@name{#1}} + {\cs@file@ext@name{#1}} + \endgroup + \fi} + +% Basic load +% +\def\get@aux@file#1#2#3{ + \csarg\openin{#2@file} #1.#3 + \csarg\ifeof{#2@file} + \message{No aux file `\csname#2@name\endcsname'} + \else \csarg\closein{#2@file} + \Tmessage[ref]{Inputting aux file <#2>: <#1.#3>} + \Tmessage[ext]{Inputting aux file <#2>: <#1.#3>} + \makeatletter \input #1.#3 \makeatother + \fi} + +% Open for output: +% initially used for the .aux file +% at the final load of the .aux file used to generate .toc +% et cetera +% +\def\open@ext@file@for@output#1#2#3{ + \csname ifWrite\csname #2@name\endcsname\endcsname + \immediate\openout\csname#2@file\endcsname=#1.#3 + \global\csname @#2openyes\endcsname + \immediate\write\csname#2@file\endcsname{\relax} + \Tmessage[doc]{File '#2' (#3) open for output} + \Tmessage[ext]{File '#2' (#3) open for output} + \else + \global\csname @#2openno\endcsname + \Tmessage[doc]{File '#2' (#3) not open for output} + \Tmessage[ext]{File '#2' (#3) not open for output} + \fi} +\def\open@external@files@for@output{ + \def\protect{\noexpand\protect\noexpand} + \def\\##1;{##1}\Tmessage[doc]{External files: \the\ext@files@list} + \def\\##1;{\open@ext@file@for@output{\jobname}{##1}{##1}} + \the\ext@files@list} + +\newif\iflabels@changed +\def\final@load@aux{\labels@changedno + \def\refer@label##1##2##3{\test@refer@label{##1}{##2}{##3}} + \open@external@files@for@output + \install@external@write@command + \Tmessage[doc]{Load aux for label testing and ext file generation} + \Tmessage[ext]{Load aux for label testing and ext file generation} + \makeatletter \input \jobname.aux + \end@write@extern + \iflabels@changed \Wmessage{Labels have changed. Rerun!} \fi + \makeatother} +\def\end@write@extern{ + \def\\##1;{\immediate@close@aux@file{##1}} + \the\ext@files@list} +\def\close@aux@file #1{\csname if@#1open\endcsname + \write\csname#1@file\endcsname{\relax} + \closeout\csname#1@file\endcsname + \Tmessage[doc]{File '#1' closed}\fi} +\def\immediate@close@aux@file#1{\csname if@#1open\endcsname + \immediate\write\csname#1@file\endcsname{\relax} + \immediate\closeout\csname#1@file\endcsname + \Tmessage[doc]{File '#1' immediately closed}\fi} + + +% Generate the extern call in the style definition +% this one is part of 'external:<file name>' +% +\def\generate@extern#1{\edef\cs@e + {\nxp\@add@toks{\nxp\@extern + {\CSname{\file@ext@name{#1}}} + {\@name} + {\ifhas@counter \CSname{\@name Counter}\fi} +%\counter@@repr{\@name} +%{\nxp\the\counter@@name{\@name}}\fi}% + }}\cs@e} + +% call: +% \@extern{extension}{object}{counter}\the\title@toks\e@extern +% to aux: +% \write@to@external{extension}{object}{counter}{page}{tekst}\ew@extern +% to .extension file: +% \object{counter}{page}tekst\par +% where \object is locally defined in the 'extension' file. +% +\def\ToExternalFile:#1=#2 + {\edef\cs@e{\nxp\x@extern{\cs@file@ext@name{#1}}}% + \cs@e{anon}{}{\\{#2}\\{}}{\\{}\\{}\\{}}\e@extern} +\def\@extern{\ifWriteExtern + \xp\x@extern \else \xp\skip@extern \fi} +\def\skip@extern#1#2#3\e@extern + {\Tmessage[ext]{Skipped `#2' for `#1'}} +\newtoks\ext@text@toks +\newtoks\ext@labl@toks +\newtoks\ext@page@toks +\begingroup\noeol\catcode`\?\catcode`\%\catcode`\%=12 +\gdef\x@extern#1#2#3#4#5\e@extern + {\begingroup\normalesc + \def\label[##1]{} + \def\protect{\noexpand\protect\noexpand} + \def\cprotect{\xp\string} + \Tmessage[ext]{Write to aux `#2' for `\csname#1@name\endcsname'} + \edef\cs@e{\write\aux@file{\string\write@to@external + {#1}{#2}{#3}}}\cs@e + \write\aux@file{ + {\counter@@repr{Page}{\csarg\number{\counter@name{Page}}}}%} + \aux@write@external{#4}{#5} + \write\aux@file{\string\ew@extern} + \endgroup} +\normaleol\endgroup + +% string a word, delimited by a space, +% first see whether it is a group, recognized by the fact +% that there is another space in it. +\def\string@um@up#1 {\string@space@group#1 \>\@bean} +\def\string@space@group#1 #2#3\@bean + {\ifx#2\> \string@word#1\@roy + \else \string{\string@um@up#1 #2#3 \string}% + \fi \@space\string@um@up} +% a word is delimited by \@roy; if the word is \> then this +% is the last word, and we should remove +% a trailing \@roy plus the \@space\string@um@up tokens after the call, +% but also parts of the conditional after the call have to be removed: +% \expandafter \take@three \expandafter \@roy \else .. \fi \@space\string@.. +% +% sick. very sick. +% +\def\string@word#1{\ifx#1\>\xp\expandafter\xp\take@three\xp\expandafter + \else \ifx#1\@roy + \else \string#1\ifcat\nxp#1\relax\@space\fi + \xp\xp\xp\string@word + \fi \fi} + +% an attempt to string up a title. +% this covers for the case where there are groups, +% but it is still quite wrong if \else or so is in the title +% +\NewDummy{@roy}\NewDummy{@bean}\NewDummy{@rope}\NewDummy{@bear} +\NewDummy{@Rope} +% Enable/Disable communication to external files +% former during initial load of .aux file, +% latter during final load of .aux file +% +\def\disable@external@write@command + {\def\write@to@external##1\ew@extern{}} +\disable@external@write@command %do this initially just to be sure +\def\install@external@write@command %grouping ok? + {\def\write@to@external##1##2##3##4##5\ew@extern + {\csname if@##1open\endcsname + \Tmessage[ext]{Write `##2' + to `\csname##1@name\endcsname'} + \ext@labl@toks{##3} + \ext@page@toks{##4} + \ext@text@toks{##5} + \immediate\write\csname##1@file\endcsname + {\CSname{##2}{\the\ext@labl@toks}% + {\the\ext@page@toks}\the\ext@text@toks + \string\par} + \else + \Tmessage[ext]{Skipped `##2' + for `\csname##1@name\endcsname'} + \fi}} + +%%%%%%%%%%%%% BibTeX interface +% we interface ourselves to the BtxMac macros +% of Karl Berry and Oren Patashnik, version 0.99h + +% prevent btxmac from rewriting *our* auxfile +% if btxmac has not been loaded this is just \relax +\adds@start@command{\csn @auxfiledonetrue\ecs} + +% alternate name for the aux write stream +\adds@start@command{\let\@auxfile\aux@file} + +% disable / alter Btxmac definitions +\def\bbl@hook{\default@everypar} +\adds@start@command{\let\bblhook\bbl@hook} + +% switch off btxmac if need be +\xp\def\xp\WriteExternno\xp + {\WriteExternno \let\noauxfile\@space} + +% if you want to read an aux file but not load btxmac: +\let\bibstyle\take@one \let\bibdata\take@one +\let\citation\take@one \let\nocite\take@one +% similarly the source: +\let\bibliography\take@one \let\bibliographystyle\take@one + +% user defined bibliography +\def\DefineBBL{\let\bbl@hook\BBL@hook \DefineList:BBL } +\def\BBL@hook + {\def\begin##1##2{\default@everypar\BBL}\def\end##1{\>}% + %intercept \begin{thebibliography}{width} + \def\bibitem{\ifNextChar[%] + \bbl@print@item\bbl@item} + \def\biblabelprint##1{} + } +\def\bbl@item#1{\item[#1]} +\def\bbl@print@item[#1]#2{\item<#1>[#2]} + +% refer to a bib item +\def\bibref[#1]{\cite{#1}}%{[\ref[#1]]\nocite{#1}} + +\def\one@bib@citation#1\@@{% this is what \bib@citation will become + \if@notfirstcitation + \printbetweencitations + \fi + % + \expandafter \ifx \csname\@citelabel{#1}\endcsname \relax + \if@citewarning + \message{\@linenumber Undefined citation `#1'.}% + \fi + % Give it a dummy definition: + \expandafter\gdef\csname\@citelabel{#1}\endcsname{% + {\tt \nobreak\hskip0pt#1\nobreak\hskip0pt}}% + \fi + \@printlabel{#1}% + \@notfirstcitationtrue +} +\def\@c@l#1{@empty} +\adds@start@command{\let\@onecitation\one@bib@citation + \let\@citelabel\@c@l} + +\endinput + +% 92/11/18 \Start extended with start@commands and \basicindent +% 92/11/20 \StopCommand added +% 92/11/21 groups removed from initial loading aux (twice) +% 92/11/26 BibTeX interface
\ No newline at end of file |