`\newcommand{..}[1]` 和 `\NewDocumentCommand{..}{m}` 之间的区别

`\newcommand{..}[1]` 和 `\NewDocumentCommand{..}{m}` 之间的区别

这个答案, egreg 用途

\NewDocumentCommand{\refprefix}{m}{%
  \ifinproofref\else #1\fi
}

该命令\refprefix是写入辅助文件的代码的一部分。使用以下命令定义命令

\newcommand{\refprefix}[1]{%
  \ifinproofref\else #1\fi
}

显然不起作用,因为\refprefix在写入辅助文件时已经扩展。

为什么会这样?在这种情况下,还有哪些其他类似定义的命令会以何种方式运行?

答案1

在这种情况下,不同之处在于\NewDocumentCommand使用 e-tex \protected\def,因此命令不会在 中展开\write。您可以使用\NewExpandableDocumentCommand来定义不受保护的版本。同样,在经典 latex 中,您可以使用 来\DeclareRobustCommand定义不展开的命令(使用 LaTeX \protect机制而不是\protected)。

相关内容