带有括号和下标中的可选参数的命令

带有括号和下标中的可选参数的命令

我想要一个数学简写命令,它接受一个可选参数,如果存在,则将其放入括号中,并且运算符也可以有一个下标。我该如何将下标和括号放在我想要的位置?

我希望它看起来像这个 MWE:

\documentclass{article}
\usepackage{amsmath}
\newcommand{\op}[1]
{
    \operatorname{\mathrm{J}}(#1)
}
\begin{document}
\begin{tabular}{lllll}
    $ \op $ &
    $ \op{a} $ & 
    $ \op_f $ & 
    $ \op_f{a} $ & 
    $ \op{a}_f $ % probably doesn't make sense to use it like this
    \\
    $ \mathop{\mathrm J} $ &
    $ \mathop{\mathrm J}(a) $ & 
    $ \mathop{\mathrm J}_f $ & 
    $ \mathop{\mathrm J}_f(a) $ & 
    $ \mathop{\mathrm J}_f(a) $
\end{tabular}
\end{document}

下面一行是我希望第一个代码块看起来的样子: 姆韦

答案1

你可以用xparse通过使用 进行打包\NewDocumentCommand。但我不确定这是否是一个好主意,因为可选的大括号分隔参数非常不符合 LaTeX 风格,而且很容易在无意中将某些内容作为参数传入。

\documentclass{article}
\usepackage{amsmath}
\usepackage{xparse}

\NewDocumentCommand{\op}{e{_}ge{_}}{%
  \operatorname{J}%
  \IfValueT{#1}{_{#1}}\IfValueT{#3}{_{#3}}%
  \IfValueT{#2}{(#2)}%
}

\begin{document}

\begin{tabular}{lllll}
    $ \op $ &
    $ \op{a} $ &
    $ \op_f $ &
    $ \op_f{a} $ &
    $ \op{a}_f $ % probably doesn't make sense to use it like this
    \\
    $ \mathop{\mathrm J} $ &
    $ \mathop{\mathrm J}(a) $ &
    $ \mathop{\mathrm J}_f $ &
    $ \mathop{\mathrm J}_f(a) $ &
    $ \mathop{\mathrm J}_f(a) $
\end{tabular}

\end{document}

输出

在参数规范中,e{_}表示可选参数,前面带有_g表示可选{}-分隔参数。 \IfValueT用于测试是否提供了可选参数,然后采取相应措施。请参阅文档更多细节。

请注意,g参数类型未列在顶部,因为它只是为了向后兼容而包含的,因为“现在应该很大程度上避免使用它们,因为在包中使用它们会导致用户界面不一致”(来自文档)。

答案2

您可以通过以下方式定义一个带有两个参数的新命令:

\newcommand{\op}[2]{\mathrm{J}_{#1}(#2)}

然后以 的形式写入命令\op{subscript}{argument}。这种方法很好,但是如果您只想键入运算符,则必须写入\op{}{}而不是 \op,并且您不能直接在运算符上写上标(\op^2{}{}例如,您不能写 )。

如果你将新运算符视为常规运算符(我的意思是像运算\sin符),我的建议是在序言中写入

\DeclareMathOperator{\op}{\mathrm{J}}

只需将下标和参数写成\sin,即 的形式\op_f(a)。这样做的好处是\op就像 一样处理\sin,因此您可以直接在运算符上写下标和上标,如果参数不存在,则省略括号。

相关内容