\smashoperator
将大括号拉得太近,导致它们与限制重叠。有什么解决方法吗?
编辑:一个临时解决方案是使用\,
\quad
等在左/右括号的右侧/左侧强制留出适当数量的空白。但这些“技巧”显然破坏了使用 LaTeX 的全部意义。
例子:
\documentclass[american]{article}
\usepackage{amsmath,amssymb,amsthm,mathtools}
\usepackage{babel}
\begin{document}
$\lambda\left(\smashoperator{\bigcup_{x=lowerlimit}^{upperlimit}} f(x) \right)$
\end{document}
答案1
正如评论中所述,定义一个\smashoperator
处理所有可能涉及长限制的情况的命令非常困难。要理解为什么这很困难,您需要对 中的框有所了解TeX
。粗略地说,水平粉碎的框(本例中的限制)被认为具有零宽度,并且没有简单的方法可以说
小物体要考虑极限才可以砸,大物体则不用。
这正是您所需要的。
以下代码似乎适用于您的情况,但在我未考虑的其他情况下可能会失败。在我看来,最好避免使用长限制,因为它们很怪异(也许这就是为什么作者没有提供mathtools
构建它们的简单方法的原因)。
\documentclass{minimal}
\usepackage{mathtools}
\newcommand{\test}[4]{ %
%
\newbox\bigbox
\newbox\smallbox
\newbox\argbox
\newdimen\smallwidth
\newdimen\offsetwidth
\newdimen\argwidth
%
%Store the unsmashed operator in \bigbox.
\sbox\bigbox{\ensuremath{\displaystyle #1_{#2}^{#3}}}
%Now store the smashed operator in \smallbox.
\sbox\smallbox{\ensuremath{\smashoperator{#1_{#2}^{#3}}}}
%Finally, store the argument in \argbox
\sbox\argbox{\ensuremath{\displaystyle \,#4}}
%Calculate the width of the argument
\argwidth=\wd\argbox
%
%Calculate the width by which the limits protrude. Note:
%this will evaluate to zero if the limits do not protrude.
\offsetwidth=\wd\bigbox
\smallwidth=\wd\smallbox
\multiply\smallwidth by -1
\advance\offsetwidth by \smallwidth
\divide\offsetwidth by 2
%
%Place the unsmashed operator and the argument on the page,
%pulling back the argument by the appropriate distance.
\usebox\bigbox\hspace{-\offsetwidth}\usebox\argbox
%
%If the width of the argument is less than the width of
%the protrusion, we now need to add some more space.
\ifnum\offsetwidth>\argwidth \hspace{\offsetwidth}\hspace{-\argwidth} \fi
%
}
\begin{document}
\begin{equation*}
\left[\test{\bigcup}{longlimit}{longlimit}{f(x)} \right]
\quad
\left[\test{\bigcup}{veryverylonglimit}{veryverylonglimit}{f(x)} \right]
\quad
\left[\test{\bigcup}{x}{y}{f(x)} \right]
\end{equation*}
\end{document}