eplain 提供了一个宏\numberedfootnote
,从名称可以看出,它会产生一个上升的数字,后跟脚注文本,每次调用时数字都会增加一。
\numberedfootnote
eplain.tex
在第 2997行定义为:
\def\numberedfootnote{%
\global\advance\footnotenumber by 1
\@eplainfootnote{$^{\number\footnotenumber}$}%
}%
我希望能够根据文档控制数字的显示方式。例如,因为我通常使用 XeTeX,所以我可能会使用字体的内置上标,而不是切换到数学模式并进行更改:
$^{\number\footnotenumber}$
到
\sup \number\footnotenumber
或从 切换\number
到\romannumeral
。
我只是不明白 eplain 中宏的交互,无法理解如何在文档中更改这一点。例如,如果我尝试添加:
\def\numberedfootnote{%
\global\advance\footnotenumber by 1
\@eplainfootnote{ \romannumeral\footnotenumber}%
}%
如果我尝试,该命令将被忽略\global\def
。因此我想知道我是否需要类似的东西\xdef
,但这只是给我警告:
Undefined control sequence.
l.36 \@
eplainfootnote{ \romannumeral\footnotenumber}%
?
是否有一个简单的命令可以用来在文档中重新定义这个宏?
答案1
引用自 TeXbook,第 344 页:
此时,
plain.tex
通过设置 完成类别代码的初始化\catcode`\@=11
,从而使字符 '@
' 暂时表现得像字母。该命令稍后会出现,因此在 TeX 运行时,at 符号将像普通标点符号一样工作。这个想法是让普通 TeX 可以轻松拥有无法被普通用户重新定义的私有控制序列;所有此类控制序列的名称中\catcode`\@=12
至少有一个 ' '。@
因此,这与\makeatletter 和 \makeatother 起什么作用?用于 LaTeX。
对于普通的 TeX,没有特定的宏,但是
\catcode`@=11
\def\numberedfootnote{%
\global\advance\footnotenumber by 1
\@eplainfootnote{ \romannumeral\footnotenumber}%
}
\catcode`@=12
会做。
中使用了相同的约定eplain.tex
;但实际上,eplain.tex
做有\makeatletter
和\makeatother
292 \def\makeatletter{%
293 \edef\resetatcatcode{\catcode`\noexpand\@\the\catcode`\@\relax}%
294 \catcode`\@11\relax
295 }%
296 \def\makeatother{%
297 \edef\resetatcatcode{\catcode`\noexpand\@\the\catcode`\@\relax}%
298 \catcode`\@12\relax
299 }%
因此最好使用它们:
\makeatletter
\def\numberedfootnote{%
\global\advance\footnotenumber by 1
\@eplainfootnote{ \romannumeral\footnotenumber}%
}
\makeatother