是否有可用于在 Plain TeX 中创建尾注的宏?
我确信我自己可以写这些,但我更愿意搭乘别人的便车。
答案1
endnote
来自CTAN可以给出一个合适的起点。这里有一个简单的例子:
\input endnote
Hello world! This is to have an endnote. \endnote{[1]}{ Endnote text.}
\producenotes
\bye
答案2
你可以受到以下启发OPmac 技巧 0051以下是我对这个 OPmac 技巧的笨拙翻译:
文档末尾的词汇表
文档中可能会出现缩写或其他内容,我们需要在文档末尾写一些对此类对象的解释。我们写成\glos{abbreviation}{explanation}
。文档的此处没有出现任何内容。例如:
\input opmac
...
I am working at CTU\glos{CTU}{Czech Technical University in Prague} in Prague.
宏将信息保存到内存中,并在需要的\glos
地方使用它们。您可以通过以下方式实现:\makeglos
\glos
\makeglos
\def\gloslist{}
\def\glos #1#2{%
\expandafter\isinlist\expandafter\gloslist\csname;#1\endcsname
\iftrue \opwarning{Duplicated glossary item `#1'}%
\else
\global\sdef{;#1}{{#1}{#2}}%
\global\expandafter\addto\expandafter\gloslist\csname;#1\endcsname
\fi
}
\def\makeglos{%
\ifx\gloslist\empty \opwarning{Gossary data unavailable}%
\else
\bgroup
\let\iilist=\gloslist
\dosorting
\def\act##1{\ifx##1\relax \else \expandafter\printglos##1\expandafter\act\fi}
\expandafter\act\iilist\relax
\egroup
\fi
}
\newdimen\glosindent \glosindent=2\parindent
\def\printglos #1#2{\noindent \hangindent=\glosindent \hbox to\glosindent{#1\hss-- }#2\par}
词汇表自动按字母顺序排序。如果您不需要这样的排序,并且按出现次数排序就足够了,那么您可以\dosorting
在定义中注释掉该顺序\makeglos
。
当然,您可以\printglos
根据自己的意愿和排版设计来编程。该\printglos
宏有两个参数:
{abbverviation}{explanation}
和 ,它在列表中打印一个词汇表项。上面的定义设置了所有项的\printglos
固定缩进 。您可以使用其他缩进,例如,缩进可以 根据缩写的最大长度计算,请参阅
2\parindent
OPmac 技巧 0041
另一个更简单的例子\printglos
:
\def\printglos #1#2{\noindent #1 -- #2\par}
解释:宏将等
\glos
保存到并将定义为,定义 为等。宏在本地转换为 并按照 OPmac 中的宏进行字母排序。最后,宏打印项目。\;abbver1
\;abbver2
\gloslist
\;abbver1
{abbver1}{explanation}
\;abbver2
{abbver2}{explanation}
\makeglos
\gloslist
\iilist
\dosorting
\act
相关OPmac技巧: