学习使用 xparse

学习使用 xparse

我正在学习使用xparse可选参数构建命令。但我遇到了问题:

我想创建一个名为\topcat并输出的命令:

\mathcal{O} if no argument is specified 
\mathcal{O}^{#1} if we specify \topcat[op]

我尝试使用类似的东西:

\NewDocumentCommand{\topcatm}{o}{#1}{$\mathcal{O}$^{\IfValueTF{#1}}}

如果有人能给我一些建议就太好了,因为xparse我试图阅读xparseCTAN 但发现它相当难懂。

答案1

xparse乍一看可能会有点令人困惑,因为它的语法与 不同\newcommand

语法是

\NewDocumentCommand{\macroname}{argument specifiers}{%
expansion code
}

参数说明符非常有用。如果请求的是可选参数,并且没有给出默认值,那么o很可能是正确的选择,否则使用O{default}(用默认值替换默认值 ;-))

现在,如果o使用,命令\IfValueTF\IfValueT\IfValueF决定是否给出可选参数。(应用哪一个取决于具体需求。如果不确定,请使用\IfValueTF。)

(如果没有使用上述任何宏\IfValueTF,则相关参数的替换‘文本’是-NoValue-如果可选参数被指定为o类型并且在宏调用中被省略)

用法是

\IfValueTF{#1}{true code}{false code}

尽管 OP 的试用代码可能有效,但^{\IfValueTF{#1}...}我不推荐这种语法,只是为了清晰的原因。

这是一个有效版本,但是我删除了$...$字符。

\documentclass{article}
\usepackage{mathtools}


\usepackage{xparse}

\NewDocumentCommand{\topcatm}{o}{%
  \IfValueTF{#1}{%
    \mathcal{O}^{#1}%
  }{%
    \mathcal{O}%
  }%
}
\begin{document}

$ \topcatm$ 


$\topcatm[foo]$
\end{document}

在此处输入图片描述

xparse提供了使用不同选项的功能delimiters,例如<>()作为可选参数,使用dD说明符代替oO

相关内容