我正在编辑的稿件的作者正在使用\medcup
下面 MWE 中的宏。我们注意到,如果在命令中使用宏,它会完全缩放\text
。有人能解释一下为什么吗?
\documentclass[a4paper]{memoir}
\usepackage{amsmath}%,scalerel}
\usepackage{graphicx}
\def\medcup{%
\operatornamewithlimits{%
\mathchoice{\vcenter{\hbox{\scalebox{1.2}{$\bigcup$}}}}
{\vcenter{\hbox{$\bigcup$}}}%
{\bigcup}%
{\bigcup}%
}%
}
\begin{document}
\[
\text{Inside \cs{text}: $ \medcup_{n = 1}^{\infty} $}
\]
\[
\text{Not inside \cs{text}: } \medcup_{n = 1}^{\infty}
\]
\end{document}
答案1
当\medcup
在显示方程中使用时,它通常会生成文本样式的缩放版本。然而,在第一个方程中,由于导致命令插入,因此使用了\bigcup
显示样式的缩放版本。\bigcup
\text
\displaystyle
$\bigcup$
该\text
命令的设计使得其参数中的任何方程式都以当前数学样式排版,\displaystyle
在本例中为。其定义包含一个\mathcoice
,其\displaystyle
分支实际上由
\hbox{{\everymath{\displaystyle}\let\f@size\f@size\selectfont #1}}
因为这设置了\everymath={\displaystyle}
,\displaystyle
将被插入到每一个的参数内的方程。这包括的定义中的\text
第一个方程。因此,您的第一个方程实际上变成了$\bigcup$
\medcup
\[
\hbox{Inside \cs{text}:
$\displaystyle
\operatornamewithlimits{
\vcenter{\hbox{{\scalebox{1.2}{$\displaystyle\bigcup$}}}}
}_{n = 1}^{\infty}
$
}
\]
从而生成了 的显示样式版本的缩放版本\bigcup
,而不是文本样式版本。
为了确保始终使用 的文本样式版本,您可以在 的定义中\bigcup
明确插入:\textstyle
\medcup
\newcommand*\medcup{%
\operatorname*{%
\mathchoice{\vcenter{\hbox{\scalebox{1.2}{$\textstyle\bigcup$}}}}%
{\bigcup}%
{\bigcup}%
{\bigcup}%
}%
}
(我还按照 egreg 的建议替换了已弃用\operatnamewithlimits
的\operatorname*
并简化了分支\textstyle
此评论。
答案2
\[\text{$\mathchoice{D}{T}{S}{s}$}\]
这与产生D
isplaystyle 而不是 extstyle 的事实有关T
。
因此,\textstyle
需要添加定义来克服这种行为。
\documentclass[a4paper]{memoir}
\usepackage{amsmath}%,scalerel}
\usepackage{graphicx}
\def\medcup{%
\operatornamewithlimits{%
\mathchoice{\vcenter{\hbox{\scalebox{1.2}{$\bigcup$}}}}
{\vcenter{\hbox{$\bigcup$}}}%
{\bigcup}%
{\bigcup}%
}%
}
\begin{document}
\[
\text{Inside \cs{text}: $\textstyle \medcup_{n = 1}^{\infty} $}
\]
\[
\text{Not inside \cs{text}: } \medcup_{n = 1}^{\infty}
\]
\[\text{$\mathchoice{D}{T}{S}{s}$}\]
\[\bigcup\scalebox{1.2}{$\bigcup$}\text{$\scalebox{1.2}{$\bigcup$}$}\]
\[\bigcup\scalebox{1.2}{$\bigcup$}\text{$\scalebox{1.2}{$\textstyle\bigcup$}$}\]
\def\medcup{%
\operatornamewithlimits{%
\mathchoice{\vcenter{\hbox{\scalebox{1.2}{$\textstyle\bigcup$}}}}
{\vcenter{\hbox{$\textstyle\bigcup$}}}%
{\bigcup}%
{\bigcup}%
}%
}
\[
\text{Inside \cs{text}: $\textstyle \medcup_{n = 1}^{\infty} $}
\]
\[
\text{Not inside \cs{text}: } \medcup_{n = 1}^{\infty}
\]
\end{document}
输出的前两行来自 OP 的原始定义。然后我用“D”行演示了显示/文本样式问题。
然后我在下一行展示了第三个大杯应该与第二个大杯相同,但由于这种行为,事实并非如此。
下一行通过明确调用来解决这个问题\textstyle
。
最后,我改变了 OP 的定义,明确添加了\textstyle
,以解决整个问题。