是否有令人信服的理由坚持使用\newcommand
或应该始终使用\NewDocumentCommand
,即使不使用提供的任何附加功能xparse
?
此外,更具体地说,
如果我已经需要
xparse
定义我的文档/包/类的一个宏,那么将其用于\NewDocumentCommand
我所有的其他宏定义是一个好主意吗?最终会
\newcommand
被弃用/停止使用而转而使用\NewDocumentCommand
LaTeX3 吗?
答案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}