newcommand 带有两个参数,其中一个是可选的

newcommand 带有两个参数,其中一个是可选的

我正在努力解决一个命令,但它并没有按照我的预期执行。这是我的代码

\newcommand{\expectation}[2][]{\mathrm{E}_{#1}\left[#2\right]}

\begin{document}
I get $\expectation{A}{B}$, but I expect $\mathrm{E}_{A}\left[B\right]$\\
Optional arguments, I get $\expectation{B}$, and I expect $\mathrm{E}\left[B\right]$
\end{document}

这是输出 在此处输入图片描述

这对我来说没什么意义。如果我跳过 newcommand 并直接插入我想要的内容,一切看起来都很好。但带有两个输入的 newcommand 版本做了一些不同的事情。我错过了什么?

(更糟糕的是:我确信昨天一切都按预期进行。但今天却不再如此了)

编辑:原来这是由于 Texstudio 中修复了一个错误。可选参数必须用括号调用

答案1

我会使用该xparse包,因为它使可选参数的默认行为保持非常易于管理。

\documentclass[10pt]{article}

\usepackage{xparse}

%\ExplSyntaxOn
    \DeclareDocumentCommand{\expectation}{ O{} m }{%
        $\mathrm{E}_{#1}\left[#2\right]$%
    }
%\ExplSyntaxOff

% choose a different way of producing subscripts if you need ExplSyntax

\begin{document}
    I get \expectation[A]{B}, but I expect $\mathrm{E}_{A}\left[B\right]$\\
    Optional arguments, I get \expectation{B}, and I expect $\mathrm{E}\left[B\right]$
\end{document}

相关内容