有时,在 LaTeX 中,人们想对宏是否为空进行简单测试,例如
\def\foo{%
This is...
\ifx\baz\@empty
Sparta!
\else
a pony farm.
\fi
}
我感兴趣的是如何定义\baz
才能获得期望的结果。一些想法表明,所有这三个定义
\def\baz{}
\edef\baz{\@empty}
\let\baz=\@empty
将导致真实情况。现在,我想知道,最佳做法是什么,或者是否存在任何差异(就而言\def\@empty{}
),或者是否存在人们青睐的情况,(显然)取决于人们在做什么?(例子会非常好!)
答案1
如果你问的是定义(而不是前面问题关注的测试形式)
那么假设\@empty
具有其通常含义
\def\baz{}
\edef\baz{\@empty}
就 的最终定义而言是相同的\baz
。
\let\baz=\@empty
理论上略有不同,因为 TeX 可以共享用于存储两个定义的内存,但由于这种情况下的定义是空的,所以这实际上并没有什么区别,并且在任何情况下都无法在 TeX 中检测到这种差异。