据我了解,我可以使用定义新命令
\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}
输出结果如下: