将参数作为下标传递给 \newcommand

将参数作为下标传递给 \newcommand

据我了解,我可以使用定义新命令

\newcommand{name}[num]{definition}

一个例子是

\newcommand{\E}[1]{\mathbf{E}_{#1}}

现在我可以在我的文本中使用它,如下所示

\E{\theta}

打印\mathbf{E}_\theta

是否可以将参数作为下标传递,而不是将其编码在括号之间?

我想将其编码为

\E_\theta

这对我来说更自然。我还想添加第二个参数,以便得到

\mathbf{E}_\theta[X]

通过编码

\E_\theta{X}

答案1

我非常喜欢解析包,但我不知道如何使用它来做你想做的事,因为它使用(可选) 参数的分隔符。编辑 Egreg 的帖子Xparse 的新 e-type 参数(k-type 参数的替代)描述如何使用解析去做这个。

\def您可以使用和\@ifnextchar测试括号轻松完成此操作-\makeatletter...\makeatother由于@in ,定义需要被包围\@ifnextchar

更明确地说,我认为以下一对宏可以满足您的要求:

\def\E_#1{\mathbf{E}_{#1}\@ifnextchar[{\Ebrac}{\relax}}
\def\Ebrac[#1]{#1}

的定义\E表明它有一个跟在下划线后面的参数。如果下一个字符是括号,则此宏将用于\@ifnextchar[ 调用。\Ebrac

以下是完整的 MWE:

\documentclass{article}

\makeatletter
\def\E_#1{\mathbf{E}_{#1}\@ifnextchar[{\Ebrac}{\relax}}
\def\Ebrac[#1]{#1}
\makeatother

\begin{document}

$\E_1, \E_\theta, \E_{\theta+1}$

$\E_1[X], \E_\theta[X], \E_{\theta+1}[X]$

\end{document}

输出结果如下:

在此处输入图片描述

相关内容