可选参数:xparse 与 xargs

可选参数:xparse 与 xargs

要实现一个宏,该宏可以采用一个或多个可选参数,而这些参数不必放在第一个位置,xargs可以使用 以及xparse。后者似乎有更新的版本,而前者在内部使用了众所周知的 keyval。

除了这些和它们的语法之外,它们还有哪些不同?它们中是否有一个可以被视为更高级的或被弃用的?在新文档中是否有使用哪个的指南?

答案1

由于xargs您只能将默认值传递给可选参数,因此很难区分参数是否缺失。相反,仅针对这种情况xparse提供。\IFNoValueTF

例如,可以说

\NewDocumentCommand{\foo}{o}{%
  \IfNoValueTF{#1}
    {foo without optional argument}
    {foo with optional argument #1}%
}

xparse还可以使用*-variant 定义命令,以及以各种方式分隔参数的命令。参数可以单独为“长”,而 可以xargs全部为“长”,也可以全部为“长”。*-variant 的一个示例是以下命令,其语法与 相同\section

\NewDocumentCommand{\foo}{ s o m }
 {
  \IfBooleanTF{#1}
    {*-variant called, do something with #3}
    {%
     \IfNoValueTF{#2}
      {normal foo without optional argument, do something with #3}
      {normal foo with optional argument, do something with #2 and #3}%
    }%
 }

因此\foo*{Xyz}\foo{Xyz}\foo[Abc]{Xyz}是可能的调用。实际上也是\foo*[Abc]{Xyz}允许的,但使用上面的代码,参数#2将被忽略。

相关内容