这些命令是 LaTeX3 项目xparse
包的一部分。这个问题是为了满足好奇心……
摘自xparse
2014 年 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
和 ,这样生活会更快乐。