\NewDocumentCommand 和 \DeclareDocumentCommand 之间有什么区别?

\NewDocumentCommand 和 \DeclareDocumentCommand 之间有什么区别?

这些命令是 LaTeX3 项目xparse包的一部分。这个问题是为了满足好奇心……

摘自xparse2014 年 11 月 25 日发布的文档:

\DeclareDocumentCommand将始终创建新的定义,而不管是否存在同名的定义。

\NewDocumentCommand如果已经定义,将会发出错误。

这相当于\def和吗\newcommand

我在什么情况下需要这个?

答案1

这相当于\def和吗\newcommand

不完全是:\DeclareDocumentCommand与 有相同的语法\NewDocumentCommand\def与不同\newcommand。但文档似乎对此很清楚:对于\DeclareDocumentCommand,有检查作为参数给出的命令名称是否已经有定义。

别忘了还有\RenewDocumentCommand

我在什么情况下需要这个?

我知道几个,但我通常建议使用\NewDocumentCommand。不要使用\DeclareDocumentCommand。我希望团队也能提供\NewExpandableDocumentCommand

有什么用\DeclareDocumentCommand?每次你必须做\let\foo\relax\DeclareRobustCommand\foo{...},然后就该 了\DeclareDocumentCommand。如果你不明白我的意思,那么就使用\NewDocumentCommand和 ,这样生活会更快乐。

相关内容