在纯 tex 文档中重新定义 eplain 的 \numberedfootnote

在纯 tex 文档中重新定义 eplain 的 \numberedfootnote

eplain 提供了一个宏\numberedfootnote,从名称可以看出,它会产生一个上升的数字,后跟脚注文本,每次调用时数字都会增加一。

\numberedfootnoteeplain.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

相关内容