判断是否已经定义用
\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
就会出错。