判断是否已经定义用
\ifdefined
或者\ifcsname
,如果没有eTeX支持也可以用\ifx\foo\undefined
或者 LaTeX 内核的\@ifundefined
。判断是否用过一遍,可以在\foo的定义中设置一个全局变量,然后在后面检测。
\xdef
把定义中的内容完全展开,用来定义一个宏;\let
让新宏与旧宏意义相同。\xdef
就是\global\edef
。\let
没有\global
的意思。
\def\a{foo}
\def\b{\a}
\edef\c{\b} 得到的是 \c -> foo
\let\d\b 得到的是 \d -> \a
一个外链:What is the difference between \let and \edef
\renewcommand
所带参数可以包含用\par或空行表示的新段落;\renewcommand*
不行
将一个命令输出为带斜杠的字符串。
让制控命令顺序颠倒过来,后面的命令先起作用,下边是一个证明的例子:
\def\test{9999}
\makeatletter
\def\testt#1#2#3#4{\@alph{#1}\@Alph{#2}\@Roman{#3}\@roman{#4}}
\makeatother
\expandafter\testt\test
如果不加\expandafter的话:
\testt\test
就会出错。