使用可选字符定义命令

使用可选字符定义命令

我有以下命令定义(在 MWE 中)

\documentclass{article}
\usepackage{amsmath}

\def\hE_#1^#2#3{\hat {\textrm{E}}_{#1}^{#2}\,[#3]}

\begin{document}
\[
  \hE_{1}^{2}{3},\qquad
  % \hE^{2}{3},\qquad
  % \hE_{1}{3},\qquad.
  % \hE^{2}_{1}{3},\qquad
  % \hE{3}
\]
\end{document}

输出带有上标和下标的特定表达式。我想定义此命令的其他用法,以允许注释变体。我想我可以做到这一点

\def\hE^#1_#2#3{\hE_{#2}^{#1}{#3}}
\def\hE^#1#2{\hE_{}^{#1}{#2}}
\def\hE_#1#2{\hE_{#1}^{}{#2}}

但这给了我一个TeX capacity exceeded错误。有办法吗?如果可能的话,我更喜欢使用内部 tex 定义而不是外部包。

答案1

您可以使用 来实现xparsee参数类型采用标记列表,并在正文中#1引用第一个标记后的项目、#2第二个标记后的项目等等。您可以使用 测试它们是否存在\IfValueT

我不会添加\,细空格。如果您愿意,请在以下代码中添加它。

\documentclass{article}
\usepackage{amsmath,xparse}

\NewDocumentCommand{\hE}{e{^_}m}{%
  \mathop{}\!\hat{\mathrm{E}}%
  \IfValueT{#1}{^{#1}}%
  \IfValueT{#2}{_{#2}}%
  [#3]%
}

\begin{document}

\[
  \hE_{1}^{2}{3},\quad
  \hE^{2}{3},\quad
  \hE_{1}{3},\quad
  \hE^{2}_{1}{3},\quad
  \hE{3}
\]

\end{document}

在此处输入图片描述

与此比较的输出\,

在此处输入图片描述

我认为,很明显,狭窄的空间是不合适的,但你是最终的裁判。

另一方面,我只需做

\newcommand{\hE}{\mathop{}\!\hat{\mathrm{E}}}

并在括号中输入。

\hE_{1}^{2}[3],\quad
\hE^{2}[3],\quad
\hE_{1}[3],\quad
\hE^{2}_{1}[3],\quad
\hE[3]

如您所见,所提议的语法没有任何好处(除了可以插入细空格)。

更重要的是,\textrm{E}是不是正确的工具;\mathrm{E}是。

为什么\mathop{}\!?因为这种方式\hE被视为数学运算符,如\sin\log。我选择不这样做\operatorname{\hat{E}},因为这样上标会太高。

相关内容