以下是 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
永远不会改变,因此两个宏的定义始终相同。在编写此代码时,这种小的保存可能确实很重要(它们加起来)。