我想定义一个\E
可以精确使用的命令,如下所示:它应该翻译
\E{f(x)}
\E_x{f(x)}
进入
\mathbb{E}(f(x))
\mathbb{E}_x(f(x))
具体来说,目标是将它们渲染为
分别。
但请注意,它们_x
都没有可选参数的语法,也没有强制参数的语法。
这可能吗?如果可以,我该怎么做?
答案1
是的,这是可能的,通过将其与结合起来\DeclarePairedDelimiter
。
新答案(2021 年 1 月)
这也允许上限。
\documentclass{article}
\usepackage{mathtools,amssymb}
\NewDocumentCommand{\E}{e{^_}}{%
\operatorname{\mathbb{E}}%
\IfValueT{#1}{^{#1}}%
\IfValueT{#2}{_{#2}}%
\parens
}
\DeclarePairedDelimiter{\parens}{(}{)}
\begin{document}
$\E{f(x)}$
$\E[\big]{f(x)}$
$\E[\Bigg]{f(x)}$
$\E*{\dfrac{1}{2}}$
$\E_x{f(x)}$
$\E_x[\big]{f(x)}$
$\E_x[\Bigg]{f(x)}$
$\E_x*{\dfrac{1}{2}}$
$\E^x{f(x)}$ $\E_x^y[\big]{f(x)}$
\end{document}
如果只需要下限,则可以将定义简化为
\NewDocumentCommand{\E}{e{_}}{%
\operatorname{\mathbb{E}}%
\IfValueT{#1}{_{#1}}%
\parens
}
\DeclarePairedDelimiter{\parens}{(}{)}
旧答案
\documentclass{article}
\usepackage{mathtools,amssymb}
\makeatletter
\DeclareRobustCommand{\E}{\operatorname{\mathbb{E}}\@ifnextchar_{\m@Es}{\m@Epd}}
\newcommand{\m@Es}[2]{_{#2}\m@Epd}
\DeclarePairedDelimiter{\m@Epd}{(}{)}
\makeatother
\begin{document}
$\E{f(x)}$
$\E[\big]{f(x)}$
$\E[\Bigg]{f(x)}$
$\E*{\dfrac{1}{2}}$
$\E_x{f(x)}$
$\E_x[\big]{f(x)}$
$\E_x[\Bigg]{f(x)}$
$\E_x*{\dfrac{1}{2}}$
\end{document}