我对定义新命令的多种方式有疑问。我浏览了网络和 TeX.SE,但找不到完整的答案(只有一些部分答案,例如,这里,这里,这里, 或者这里)。
我知道有几种方法:
\newcommand
,\DeclareRobustCommand
,\newrobustcmd
,\NewDocumentCommand
,\NewExpandableDocumentCommand
仅举几例,其中大多数也有带星号的版本,当然还有像
\def
,\gdef
,\edef
等等。
我得出的结论是,使用 LaTeX 宏来定义新命令通常比使用原语更好。支持宏的一些论点是更好的语法(允许您理解执行)、安全性(因为大多数宏都会检查现有的命令名称)或修补或重新定义命令的可能性。
但当我浏览其他几篇分类我发现第三方文件经常使用\def
原语而不是复杂的宏。后者或多或少只在特殊情况下使用。
是否有充分的理由使用原语而不是 LaTeX 宏来定义新命令;尤其当写分类文件?也许可以减少软件包大小,或者做类似的事情?还是只是老习惯?
\newcommand
我知道,如果我只是使用或 ,这将取决于具体情况\newrobustcmd
。但也许有一种强烈的倾向,何时在类文件中使用原语而不是宏?
编辑
正如我的问题所暗示的,并在评论中证实,没有普遍的答案。因此,如果一些更经验丰富的 LaTeX 作者可以分享他们的个人喜好什么时候编写/编辑类文件,以及他们为什么这样做。
编辑2
到目前为止,我忘记了expl3
这样的命令\cs_new...
。如果我理解正确的话,LaTeX3被引入作为详细的编程层,特别适用于麦粒肿,分类和其他后端文件。那么,编写此类文件的现代方法是否应该更多地依赖这些expl3
命令而不是原语或或多或少简单的 LaTeX 宏?