总是使用 \NewDocumentCommand 而不是 \newcommand?

总是使用 \NewDocumentCommand 而不是 \newcommand?

是否有令人信服的理由坚持使用\newcommand或应该始终使用\NewDocumentCommand,即使不使用提供的任何附加功能xparse

此外,更具体地说,

  • 如果我已经需要xparse定义我的文档/包/类的一个宏,那么将其用于\NewDocumentCommand我所有的其他宏定义是一个好主意吗?

  • 最终会\newcommand被弃用/停止使用而转而使用\NewDocumentCommandLaTeX3 吗?

答案1

\NewDocumentCommand是 的一部分xparse,是“LaTeX3-in-2e”代码。团队已将此部分标记为“稳定”,这意味着我们将持续维护此代码以供与 LaTeX2e 一起使用。因此,不存在\NewDocumentCommand消失的危险。

从概念上讲,\NewDocumentCommand旨在让“软件包作者”定义命令,而它则\newcommand更加灵活,因为它还用于创建变量(用作存储的宏)。\newcommand如果您定义的是变量,那么这是一个更好的选择:我们目前没有针对此概念的“文档级”LaTeX3 命令。因此,决定在某种程度上取决于您如何看待所定义的宏(没有参数的命令和变量很难区分!)。

预测未来是有风险的,但我认为任何独立的 LaTeX3 格式都极不可能不定义\newcommand,即使建议使用其他方法。无论如何,我怀疑还有很多其他概念意味着对于某些任意的 LaTeX2e 文档,您将无法在不进行调整的情况下使用独立的 LaTeX3 格式进行处理。

答案2

扩展 Joseph 关于命令和值的回答:用 定义的宏\NewDocumentCommand是健壮的,当移动到 时,它们不会扩展.toc。这对于\cite应该但一般来说,.toc对于文档中可以改变的值以及您想要传输当前值的位置,不需要内容而不仅仅是.toc命令的名称。例如:

\documentclass{article}
\usepackage{xparse}

\begin{document}
\NewDocumentCommand\testA{}{ABC}
\newcommand\testB{ABC}

\tableofcontents

\RenewDocumentCommand\testA{}{CDE}
\renewcommand\testB{CDE}

\section{\testA, \testB}

\end{document}

相关内容