我想定义一个期望运算符,其作用如下\iint
:我希望它在限制下表现良好,我希望它默认将文本放在右侧,但在限制下\limits
,将其放在下方。以下是不起作用和起作用的方法的示例。
最后一行是我想要的结果,但是是手动完成的。我该如何自动完成呢?
生成该代码的代码如下。
\documentclass[preview]{standalone}
\usepackage{amsmath}
\DeclareMathOperator*{\E}{\bf E}
\DeclareMathOperator{\EE}{\bf E}
\newcommand{\EEE}{\mathop{{\bf E}}}
\begin{document}
\[
\iint_{R} f(x, y)\, dx dy \qquad \mbox{versus} \qquad \iint\limits_{R} f(x, y) \, dx dy
\]
\[
\E_{R} f(X, Y) \qquad \mbox{versus} \qquad \E\limits_{R} f(X, Y)
\]
\[
\EE_{R} f(X, Y) \qquad \mbox{versus} \qquad \EE\limits_{R} f(X, Y)
\]
\[
\EEE_{R} f(X, Y) \qquad \mbox{versus} \qquad \EEE\limits_{R} f(X, Y)
\]
desired result (but less ad-hoc)
\[
\mathbf{E}_{R} f(X, Y) \qquad \mbox{versus} \qquad \underset{R}{\mathbf{E}}~f(X, Y)
\]
\end{document}
答案1
\int
您可以使用以下模型:
\documentclass{article}
\usepackage{amsmath}
\makeatletter
\newcommand{\E}{\operatorname*{\mathbf{E}}\ilimits@}
\makeatother
\begin{document}
\[
\iint_{R} f(x, y)\, dx \, dy \qquad \text{versus} \qquad \iint\limits_{R} f(x, y) \, dx \, dy
\]
\[
\E_{R} f(X, Y) \qquad \text{versus} \qquad \E\limits_{R} f(X, Y)
\]
\end{document}
使用\ilimits@
将使命令intlimits
像 一样遵循选项\int
。
\nolimits
如果\ilimits@
您不想这样,请使用。
答案2
由于某种原因,\DeclareMathOperator
不会对 做出反应\limits
。然而,\DeclareMathOperator*
将要做出反应\nolimits
。因此这应该会给你想要的结果:
\DeclareMathOperator*{\E}{{}\bf E}
\[
\E\nolimits_{R} f(X, Y) \qquad \mbox{versus} \qquad \E_{R} f(X, Y)
\]
由于技术原因,我无法显示输出。(自从从 AMS 退休后,我就无法访问我以前的所有资源,而且还没有重建一个可以运行的系统。)
定义中的{}
旨在抵消单个字符作为运算符在数学轴上的垂直居中的默认定位。这是默认设置(在 TeXbook 的附录 G 中指定),以便正确定位诸如\sum
、等运算符。\int
未加星标的用户无法\DeclareMathOperator
做出反应\limits
似乎不太合理,因此我将请求在 的未来版本中实现该功能amsopn
。
更新。 有人敦促我查看 中的文档amsopn.dtx
,但我发现那里\limits
故意隐藏了 ,正如 @egreg 指出的那样。因此,我撤回了将其公开的建议。
答案3
你的第一个操作符以另一种方式工作:
\documentclass[preview]{standalone}
\usepackage{amsmath}
\DeclareMathOperator*{\E}{\mathbf E}
\DeclareMathOperator{\EE}{\mathbf E}
\newcommand{\EEE}{\mathop{{\mathbf E}}}
\begin{document}
\[
\iint_{R} f(x, y)\, dx dy \qquad \mbox{versus} \qquad \iint\limits_{R} f(x, y) \, dx dy
\]
\[
\E_{R} f(X, Y) \qquad \mbox{versus} \qquad \E\nolimits_{R} f(X, Y)
\]
\end{document}
答案4
您可以\nolimits
在运算符定义后指定:
\documentclass[preview]{standalone}
\usepackage{amsmath}
\newcommand\EE{\mathop{{}\mathbf{E}}\nolimits}
\begin{document}
\[ \EE_R F \text{ versus } \EE\limits_R F \]
\end{document}
您可以在 TeXBook 第 17 章的双重危险曲线部分找到对此的提示:“如果您说\nolimits\limits
(大概是因为某些宏\int
指定了\nolimits
,但您确实想要它们),那么最后一个词优先。 ”
正如您所发现的,运算符的默认行为是\displaylimits
。
(遵循 egreg 的评论:{}\mathbf{E}
确保正确的垂直对齐。)