xparse 命令定义 vs \newcommand

xparse 命令定义 vs \newcommand

也许我的问题太宽泛了,但我真的很想知道:在xparse命令定义(例如\NewDocumentCommand)和 LaTeX“标准”定义(例如)之间最好使用什么(以及为什么\newcommand)?

当我开始使用 LaTeX 时,我了解到 LaTeX 定义比 TeX 纯定义(例如\def)更方便,原因有很多(例如,不存在无意中覆盖某些现有命令的风险等)。

我想知道新的xparse定义是否更好;例如有时我发现定义命令的语法更清晰(对我来说)并且看起来非常强大。

有什么缺点吗?谢谢

答案1

注意:前方基于观点的回答 ;-)

命令参数规范是xparse\NewDocumentCommand(以及其他的,如\DeclareDocumentCommand等)宏的一个非常强大的特性。(\NewDocumentCommand这里代表这类命令的整个包!)

它们是否比定义的宏更好(更安全?)这个问题\newcommand很难回答,并且基于观点。

  • \IfValueTF使用etc.可以更轻松地处理多个可选参数。
  • 提供其他类型的可选参数等更加容易

  • 关于未限定的参数功能\NewDocumentCommand肯定比\def普通的 TeX 更\newcommand

  • 由于也进行了命令定义检查,因此与宏的重新定义xparse相比,命令更安全。\def
  • 命令定义的宏xparse允许带星号的版本,这对于重新定义\section*等非常方便。
  • 此外:由定义的环境\NewDocumentEnvironment甚至可以在代码末尾部分使用参数,这与\newenvironment

但是,使用 定义的命令\NewDocumentCommand不是完全可展开的,并且一旦涉及可选参数,就无法在需要完全展开的地方使用,因此这可能是一个缺点。但在很多情况下,可以回退到\newcommand没有可选参数的简单命令。

对于这种情况,\DeclareExpandableDocumentCommand必须使用。

\def很久以前就开始使用它,然后逐渐改进,\newcommand现在它\NewDocumentCommand用于我的大部分个人文件,当然也用于这里的答案。

与之结合expl3 xparse(当然,实际上是一个expl3应用程序包)非常强大,值得推荐。

相关内容