使用嵌套命令的分隔符错误

使用嵌套命令的分隔符错误

我不是 TeX 专家,但我遇到了一个问题。我已将其浓缩为以下最小工作示例(或者说不工作示例):

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\usepackage{amssymb}
\makeatletter
\newcommand{\E}{
    \@ifnextchar[{\Ea}{\mathbb{E}}
}
\newcommand{\Ea}[1][]{
    \@ifnextchar\bgroup{\Eb{#1}}{\mathbb{E}\left[#1\right]}
}
\newcommand{\Eb}[2]{
    \mathbb{E}\left[#1\,\middle|\, #2\right]
}
\makeatother

\begin{document}

\begin{equation}
    \E[\E[X]{Y}]{Y}=\E[X]{Y}
\end{equation*}

\end{document}

我希望此命令\E可以用作\mathbb{E}。我希望第一个可选参数放在方括号中,第二个(更可选)参数放在花括号中。我不太明白,为什么上面的例子不起作用。我收到错误“缺少分隔符(插入 .)。”输出如下所示:E[E[X|Y]]Y=E[X|Y] 它应该看起来像这样 E[E[X|Y]|Y]=E[X|Y] 我在传递时也遇到了一些问题

\E[X_{n+1}]{X_1,\dots,X_n}

我可以确定\dots问题出在哪里。这个问题可以通过以下方式修复(为什么,我不太明白)

\newcommand{\Eb}[2]{
    \mathbb{E}\left[\nonexpanded{#1\,\middle|\, #2\right}]
}

但是,这也不能解决嵌套问题。我现在完全不知道发生了什么。有什么方法可以解决这个问题吗?

答案1

不要使用可选的{...}分隔参数。这些是丑陋的

但如果你必须...

将内部参数括在括号中:

\begin{equation}
  \E[{\E[X]{Y}}]{Y}=\E[X]{Y}
%    ^        ^
\end{equation*}

或使用xparse

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\usepackage{amssymb}

\usepackage{xparse}
\NewDocumentCommand \E { o !g }
  {%
    \IfValueTF{#1}%
      {%
        \mathbb{E}\left[#1%
          \IfValueT{#2}{\,\middle|\,#2}%
        \right]%
      }%
      {\mathbb{E}\IfValueT{#2}{{#2}}}%
  }

\begin{document}

\begin{equation}
    \E[\E[X]{Y}]{Y}=\E[X]{Y}
\end{equation}
\begin{equation}
    \E[\E[X]]=\E[X]
\end{equation}
\begin{equation}
    \E\E{Y}=\E[X]
\end{equation}

\end{document}

在此处输入图片描述

相关内容