diff options
author | Norbert Preining <norbert@preining.info> | 2024-01-31 03:01:01 +0000 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2024-01-31 03:01:01 +0000 |
commit | 79e1bbc1ad6b308aa2074540b2afd43b6a72ce03 (patch) | |
tree | 32074e03eec88cf72e5973ddff176a0534c77dff /macros/lollipop/tex/lollipop-define.tex | |
parent | 084f5d8435744b7ea7ef487ec111a7bfd100ed62 (diff) |
CTAN sync 202401310301
Diffstat (limited to 'macros/lollipop/tex/lollipop-define.tex')
-rw-r--r-- | macros/lollipop/tex/lollipop-define.tex | 425 |
1 files changed, 0 insertions, 425 deletions
diff --git a/macros/lollipop/tex/lollipop-define.tex b/macros/lollipop/tex/lollipop-define.tex deleted file mode 100644 index 6f805a2791..0000000000 --- a/macros/lollipop/tex/lollipop-define.tex +++ /dev/null @@ -1,425 +0,0 @@ -% lollipop-define.tex copyright 1992/3 Victor Eijkhout -% copyright 2014--2016 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/>. -% -% -\NewTrace:ref -%%%%%%%%%%%%%%%% Symbolic references - -% User command for labels. -% this is hardly ever necessary: -% most commands directly accept the label. -% -\def\label[#1]{\bsp@hack\@label{#1}\esp@hack} - -% Automatic generation of labels. -% after \@Labelize{command}, it is possible to write \command[sym:ref] -% This is done for any generic construct that has a counter. -% -%\add@generic@stop@default{\ifhas@label \@Labelize{\@command}\fi} -\newif\ifhas@label -\add@generic@default{\has@labelno} -\@GenericOption{haslabel}{\global\has@labelyes} -\def\@Labelize#1{\edef\cs@e{\let\CSname{lab@#1}=\CSname{#1}}\cs@e - \csarg\edef{#1}{\begingroup - \aftergroup\CSname{lab@#1}\nxp\@referentiep}} -\def\@referentiep - {\ifnextchar[%] - \x@label{\ifNextChar<%> - \x@o@label{\gdef\xx@label{}\endgroup}% - }} - -% if \command has a symbolic key, -% \x@label#1 = -% \def\xx@label -% \@label{#1} -% \xx@label <- {} -% the \xx@label command is called at the start of every environment -% this delay is necessary, because the label is seen before -% the title, or before any counter is stepped. -% -\newif\ifcustom@label -\def\xx@label{}\def\RefLabel{} -\def\x@o@label<#1>{\global\custom@labeltrue - \global\current@label{#1}\x@label} -\def\x@label[#1]{\gdef\RefLabel{#1}% - \gdef\xx@label{\@label{#1}\global\custom@labelfalse - \gdef\xx@label{}}\endgroup} - -% Label contents -% mostly generated by \step@counter or so -% -\newtoks\current@label -\def\define@reference - #1{\ifcustom@label\else - \edef\cs@e{\global\current@label - {\counter@@repr{#1}{\csarg\number{\counter@name{#1}}}}}% - \cs@e - \fi} - -% Internal labeling command -% 1/ \current@label contains tokens describing the reference -% do a twostep unwrap of that -% 2/ write out the result to the .aux file -% 3/ if the current file has been \InputeFile'd, -% write out to the .aux of the input file. -% -% the string written out is for \@label{Key}: -% \refer@label{ref@Key}{label value}{page counter} -% -\def\@label@key#1{ref@#1} -\noeol -\def\@label#1{\Tmessage[ref]{Label definition: <#1>=\the - \current@label} - \ifWriteExtern \begingroup - \def\label[##1]{}\normalesc - \def\cprotect{\xp\string} - %\xp\xp\xp\string\FooCounter => - %\xp\string\Foo@R{\number\Foo@C} => \string\@arabic{123} - \def\protect{\noexpand\protect\noexpand} - %\test@defined@key{#1} - \edef\cs@e{\edef\nxp\cs@e{\current@label={\the\current@label}} - \nxp\cs@e} - \cs@e - %\Tmessage[ref]{Label as written: <\the\current@label>} - \edef\cs@e{\the\current@label} - \edef\cs@a##1{\nxp\csarg\write{##1@file} - {\string\refer@label{\@label@key{#1}} - {\macro@meaning\cs@e}{\noexpand\PageCounter}}} - \cs@a{aux} - \ifx\@invoernaam\@leeg - \else \ifLocalReferences \cs@a{incaux}\relax \fi\fi - \endgroup\fi} -\newcount\duplicate@labels -\def\test@defined@key#1{\if\UndefinedCS{\@label@key{#1}} - \Tmessage[ref]{First time definition of <#1>} - \else\xp\xp\xp\xp\xp\xp\xp\ifx\xp\xp\xp - \third@of@three\csn \@label@key{#1}\ecs\StaleRef - \begingroup - \edef\cs@e{\CSname{\@label@key{#1}}} - \xp\xp\xp\def\xp\xp\xp\cs@e\xp\xp\xp{\cs@e} - \temptoksa\xp\xp\xp{\xp\first@of@three\cs@e} - \edef\cs@e{\CSname{\@label@key{#1}}} - \xp\xp\xp\def\xp\xp\xp\cs@e\xp\xp\xp{\cs@e} - \temptoksb\xp\xp\xp{\xp\second@of@three\cs@e} - \edef\cs@e{\temptoksa - {{\the\temptoksa}{\the\temptoksb}\nxp\FreshRef}} - \cs@e - \csarg\xdef{\@label@key{#1}}{\the\temptoksa} - \endgroup - \Tmessage[ref]{Refreshing definition of <#1>:\@space - \xp\meaning\csn \@label@key{#1}\ecs} - \else\Wmessage{Duplicate label: <#1>}% - \advance\duplicate@labels\@ne\fi\fi} -\normaleol - -% complete expandable exploding of token lists -\def\macro@meaning#1{\xp\strip@macro@meaning\meaning#1} -\def\toks@meaning#1{\edef\cs@e{\the#1}\macro@meaning\cs@e} -\begingroup\escapechar=-1 -\xp\xp\xp\gdef\xp\xp\xp\strip@macro@meaning\xp\string - \csname macro:->\endcsname{} -\endgroup - -\NewDummy{StaleRef}\NewDummy{FreshRef} - -% Referring and Page references. -% first of all, when the .aux file is read: -% \refer@label{ref@Key}{label}{page} = -% \gdef\ref@Key{ {{label}} {{page}} } -% with extra braces for occurring fonts -% -\def\refer@label#1#2#3{\csarg\gdef{#1}{{{#2}}{{#3}}\StaleRef}} - -% then \ref[key] = \@ref\take@former[key] -% \pgref[key] = \@ref\take@latter[key] -% and \@ref\cs[key] = \expandafter\cs\ref@key -% = \cs {{label}} {{page}} -% -\def\ref {\ifnextchar(%) - {\@ref\first@of@three}{\@ref\first@of@three()}} -\def\pgref{\ifnextchar(%) - {\@ref\second@of@three}{\@ref\second@of@three()}} -\newcount\unknown@refs -\add@start@command{\unknown@refs\z@} -\def\@ref#1(#2)[#3]{% - \if\UndefinedCS{\@label@key{#3}}% - \message{Unknown #1{}{page}{}reference: <#3>}{\bf ??}% - \global\advance\unknown@refs\@ne - \else \@@ref{#1}{#2}{\@label@key{#3}}\fi} -\def\@@ref#1#2#3{\@@@ref#1{#3}% - \if\IsEmptyList{#2}\else,\penalty200\ #2\fi} -\def\@@@ref#1#2{% - \xp\xp\xp#1\csname#2\endcsname} -% for btxmac -\def\@printlabel#1{\@ref\first@of@three()[#1]} -%\@@@ref\first@of@three{\@label@key{#1}}} - -% Test for changed references -% at the end of the job -% -\def\test@refer@label#1#2#3{ - \def\cs@a{{{#2}}{{#3}}\FreshRef} - \def\cs@b{{{#2}}{{#3}}\StaleRef} - \csarg\ifx{#1}\cs@a - \else \csarg\ifx{#1}\cs@b - \else \labels@changedyes - \Tmessage[ref]{New definition for <#1>} - \fi\fi} - -% Citations. -% \cite[key] = [\ref[key]] -% \cite(string)[key] = [\ref[key], string] -% -%\def\cite{\ifnextchar(\y@cite\x@cite} -%\def\y@cite(#1)[#2]{[\ref[#2], #1]} -%\def\x@cite[#1]{[\ref[#1]]} - -% External Generic Option -% use: external:extfile ... external:stop -% stores result in \extern@x/y/z@toks in a tricky way: -% 'x' stores expandable parts, 'y' stores protectable parts. -% this is inserted in \@outerstartcommands -% -\NewTrace:ext -\newif\ifin@external -\add@generic@default{\in@externalno} -\newtoks\extern@toks \newtoks\late@extern@toks -\newtoks\build@extern@toks -\newtoks\extern@x@toks \newtoks\extern@y@toks \newtoks\extern@z@toks -\adds@generic@default{ - \extern@toks\empty@toks \late@extern@toks\empty@toks - \extern@x@toks\empty@toks\extern@y@toks\empty@toks} -\@GenericOption{external}{ - \switch {\if\EqualString{#1}} - {stop} {\external@stop{extern@toks}} - {late} {\external@stop{late@extern@toks}} - {default} {\external@start{#1}} - \endswitch} -\def\external@start#1{\b@group[external]\in@externalyes - \build@extern@toks\empty@toks - \switch@to@options@list{build@extern@toks} - \if\UndefinedCS{\file@ext@name{#1}} - \Wmessage{Unknown external file: <#1> - while defining <\@name>}\def\@add@toks##1{}% - \else \generate@extern{#1}% document: this writes the file name - \Tmessage[ext]{External definition <#1>} - \fi - \extern@x@toks\empty@stack \extern@y@toks\empty@stack - \extern@z@toks\empty@toks - \begingroup \switch@to@options@list{extern@z@toks} - } -\def\external@handle@title#1{\seen@textyes - \external@handle@expandable{#1}{\csn\@@@title{#1}\ecs}{title: <#1>}} -\def\external@handle@expandable#1#2#3{ - \extern@push@part{y}{\the\extern@z@toks} - \extern@push@part{x}{#2} - \Tmessage[ext]{External pushed #3} - \extern@z@toks\empty@toks} -\def\extern@push@part#1{\csarg{\let\xp\cs@a}{extern@#1@toks} - \xp\push@onto@cs\xp\cs@a\xp} -\def\extern@pop@n@pop{} -\def\external@before@title{\in@externalyes\seen@textno - \switch@to@options@list{e@before@toks}} -\def\in@ref@protect{\ifin@label\@add@toks{\protect}\fi} -\def\cs@in@ref@protect#1{% - \ifin@label \title@count@no@protect{#1} \fi - \ifin@external \title@count@no@protect{#1} \fi -} -\def\title@count@no@protect#1{% - \if\has@no@count@string #1Counter? - \if\has@no@title@string #1Title? - \@add@toks{\protect}\fi\fi} -\def\has@no@count@string #1Counter#2? - {00\fi\if\IsEmptyList{#2}} -\def\has@no@title@string #1Title#2? - {00\fi\if\IsEmptyList{#2}} -% wind up making an external: invert the stacks -% and append them -\def\external@stop#1{\extern@push@part{y}{\the\extern@z@toks} - \invert@csstack\extern@x@toks \invert@csstack\extern@y@toks - \xdef\cs@e{\nxp\@add@toks - {{\the\extern@x@toks}{\the\extern@y@toks}}} - \endgroup %revert to build@extern@toks - \cs@e \@add@toks{\e@extern} - \switch@to@options@list{#1} - \edef\cs@e{\nxp\@add@toks{\the\build@extern@toks}}\cs@e - \e@group[external]} -% how do we write stuff to the aux file? -% #1 is the x toks, #2 the y -\def\aux@write@external#1#2{% - \extern@x@toks{#1}\extern@y@toks{#2}% -% \let\\\relax -%\message{Expandables <\the\extern@y@toks>} -% \edef\cs@e{\extern@y@toks{#2}}\cs@e -%\message{becomes <\the\extern@y@toks>} - \length@of@csstack\extern@x@toks - \tempcounta\z@ \extern@toks\empty@toks - \loop\ifnum\tempcounta<\stack@length - \pop@cs@into\extern@z@toks\extern@y@toks - \append@cslist@to@cslist\extern@toks\extern@z@toks - \pop@cs@into\extern@z@toks\extern@x@toks - \extern@z@toks\xp\xp\xp{\the\extern@z@toks}% - \append@cslist@to@cslist\extern@toks\extern@z@toks - \advance\tempcounta\@ne\repeat - \pop@cs@into\extern@z@toks\extern@y@toks - \append@cslist@to@cslist\extern@toks\extern@z@toks - \xp\def\xp\cs@e\xp{\the\extern@toks}\edef\cs@e - {\write\aux@file{\real@meaning\cs@e}}\cs@e} -% -% Protection of expandable control sequences; -% value \nxp\protect\nxp is set during label definition and shipout -% \protect should be empty during execution -% -\def\protect{} - -%%%%%%%%%%%%%%%% External references -% define explicitly the form a reference will take -% label:start ... label:stop -% -% Maybe this can be unified with the `external' option -% -\newif\ifin@label -\newif\iflabel@defined \newtoks\@labelcoms -\add@generic@default{\@labelcoms{} \label@definedno \in@labelno} -\@GenericOption{label}{ - \if\EqualString{#1}{stop}\e@group[label] - \else \global\label@definedyes\global\has@labelyes - \b@group[label] \in@labelyes - \switch@to@options@list{@labelcoms} - \fi} - -%%%%%%%%%%%%%%%% Substitutions - -% Long substitutions -% the style designer declares the existence of a substitution -% -% \DefineSubstitution:Foo = -% \def\Foo#1\par -% -\def\DefineSubstitution:#1 - {\Tmessage[def]{Substitution being defined: #1} - \csarg\edef{#1}##1\par{\@@subdef{#1}} - \edef\cs@e{\let\CSname{if#1Exists}=\CSname{iffalse}} - \cs@e - } -\def\@@subdef#1{\let\CSname{if#1Exists}=\CSname{iftrue}% - \def\CSname{#1@text}{##1}} - -% Short substitutions -% almost the same, but to end of line instead of to \par -% -\def\DefineShortSubstitution:#1 - {\@DefineShortSubstitution{#1}} -{\noeol -\othercr -\gdef\@DefineShortSubstitution#1{ - \Tmessage[def]{Defining short substitution: #1} - {\othercr - \csarg\xdef{#1}{\noexpand\othercr \CSname{@#1}} - \csarg\xdef{@#1}##1^^M{ - \@@subdef{#1}\noexpand\normalcr}} - \global\csarg\let{ifExists#1}=\iffalse}} - - -% Substitute -% is then a command for both user and style designer. -% \Substitute:text=uppercase/lowercase is possible -% but these take more than just expansion. -% -\def\Substitute:#1 {\@substitute#1== } -\def\@substitute#1=#2= - {\if\ifempty{#2}{\csname#1@text\endcsname}% - \else\if\EqualString{#2}{uppercase}% - \uppercase\xp\xp\xp{\csname#1@text\endcsname}% - \else \lowercase\xp\xp\xp{\csname#1@text\endcsname}% - \fi - \fi}%why did this say \noesc\csname\string#1@text... ? - -{\noeol -\othercr -\gdef\variant{\bgroup\othercr \@variant} -\gdef\@variant:#1=#2^^M#3\variantstop{ - \csarg\gdef{#1}{\par\bgroup #3 \csname#2\endcsname} - \csarg\xdef{#1stop}{\CSname{#2stop}\egroup} - \egroup} -} - -% Value -% this is analogous to \Distance (in file text) -% -\def\Value:#1=#2 - {\edef\cs@e{\if\UndefinedCS{#1}\noexpand\new@count - \else \noexpand\set@value \fi - {#1}% - \if\UndefinedCS{#2}{#2}% - \else \CSname{#2}\fi} - \cs@e} - -%%%%%%%%%%%%%%%% Tests -% -% Test user command -% -\def\DefineTest:#1 - {\Tmessage[def]{Defining test: #1} - \csarg\newif{if#1} - \csarg\def{#1}:##1 {\csname #1##1\endcsname}} - -% Test generic option -% -% option test:Foo tests if \ifFoo is defined -% -% if not, \let\ifFoo=\iffalse, and -% \StyleDefinitionStop performs a test -% and warns if still undefined -% -% \let\hang@fi\@empty globally -% \def\hang@fi{\@add@toks{\fi}} is defined locally -% ==> check on unclosed test options. -% -\@GenericOption{test}{ - \switch {\if\EqualString{#1}} - {otherwise}{\hang@else} - {stop}{\hang@fi \e@group} - {default}{\b@group - \if\UndefinedCS{if#1} - \check@existence{if#1} - \edef\cs@e{\global\let\CSname{if#1}\CSname{iffalse}} - \cs@e - \fi - \hang@fi@define - \edef\cs@e{\nxp\@add@toks{\CSname{if#1}}}\cs@e - } - \endswitch} - -% The body of these macros has to be kept outside of conditionals -% -\def\hang@else{\@add@toks{\else}} -\def\hang@fi@define{\def\hang@fi{\@add@toks{\fi}}} -\add@generic@default{\let\hang@fi\@empty} -\add@generic@stop@default - {\ifx\hang@fi\@empty\else - \Emessage{There are tests open in \@name}\fi} - -% voorgegeven tests uit TOOLS -\newif\ifVoortgang -\def\Voortgang:#1 {\csname Voortgang#1\endcsname} -\DefineTest:Diagnose - -\endinput - -% 92/11/26 ifcustom@label and attendant handling -% 92/12/05 \@label@key
\ No newline at end of file |