简单地消除一些 LaTeX 内部混淆

简单地消除一些 LaTeX 内部混淆

以下是 LaTeX 中的一些代码示例\DeclareFontFamily

\def\reserved@a{#3}
\global
\expandafter\let\csname #1+#2\expandafter\endcsname
       \ifx \reserved@a\@empty
         \@empty
       \else \reserved@a
       \fi

我可能是错的,但对我来说,这看起来与以下内容相同:

\expandafter\gdef\csname#1+#2\endcsname{#3}

现在,该代码的源代码注释如下:

我们\reserved@a与进行比较,\@empty如果这两个相同,我们将\let“额外”宏等于\@empty不相同的,对做一个\let——\reserved@a后者会浪费一个额外的内存位置,而不是重用来自的那个\@empty

但是如果我们不重新使用此点之后的内容\reserved@a(据我所知我们不会这样做),就没有理由走这条迂回的路,对吗?

答案1

要获得完整答案,您需要询问可能写过这篇文章的人(可能是 Frank Mittelbach 或 Leslie Lamport - 我不知道这是否从 2.09 开始)。但是,我认为发生的事情\reserved@a不是等于\@empty则不保存,因为稍后\reserved@a会再次需要。另一方面,当\reserved@a等于\@empty时,内存位置被保存,因为\@empty永远不会改变,因此两个宏的定义始终相同。在编写此代码时,这种小的保存可能确实很重要(它们加起来)。

相关内容