Underbrace 改变操作符的间距

Underbrace 改变操作符的间距

我发现\underbrace在方程式中的某个项上使用 会导致后面项的间距发生变化,特别是+会移得更靠近\dot{m}。这似乎与 中的问题不同\underbrace 标签过大会导致不必要的间距因为

  1. 空间越来越小
  2. 括号下的标签不大于括号
  3. 按照该问题中的建议尝试\mathclap没有帮助

我在制作演示文稿时注意到了这个问题beamer,但我也能在标准article类中重现它。更改字体也无济于事(我注意到 TeX Gyre Pagella Math 存在问题)。我如何避免更改下括号周围的间距?

\documentclass{article}
\begin{document}
\[ \dot{W}_{cv} + \dot{m} \]
\[ \underbrace{\dot{W}_{cv}}_{=0} + \dot{m} \]
\[ \underbrace{\dot{W}}_{=0} + \dot{m} \]
\end{document}

在此处输入图片描述

答案1

\underbracein的定义latex.ltx本质上借鉴自 Plain TeX:

\def\underbrace#1{\mathop{\vtop{\m@th\ialign{##\crcr
   $\hfil\displaystyle{#1}\hfil$\crcr
   \noalign{\kern3\p@\nointerlineskip}%
   \upbracefill\crcr\noalign{\kern3\p@}}}}\limits}

这允许语法

\underbrace{...}_{...}

但其后果你可以在你的例子中看到。

间距与

\sin+x

在此处输入图片描述

解决办法:加上括号,使得该对象变成普通的原子。

\documentclass{article}
\begin{document}
\[ \dot{W}_{cv} + \dot{m} \]
\[ {\underbrace{\dot{W}_{cv}}_{=0}} + \dot{m} \]
\[ {\underbrace{\dot{W}}_{=0}} + \dot{m} \]
\end{document}

在此处输入图片描述

LaTeX 的正确语法是

\Underbrace{label}{formula}

你可以通过以下方式获得它

\newcommand{\Underbrace}[2]{{\underbrace{#2}_{#1}}}

答案2

这里的问题是,\underbrace(也\overbrace)至少由四个字形构成:两个外部向上卷发中间/内侧向下卷发如果要“下撑”的内容比此宽度更宽,则以水平填充线的形式在中间/内部向下两侧插入填充卷曲。如果内容比这小,那就这样吧,您必须手动调整内容以满足您的需要。

在此处输入图片描述

\documentclass{article}
\usepackage{xcolor}
\newlength{\mylen}
\begin{document}
\[ \dot{W}_{cv} +\smash{\rlap{\color{red}\rule[-9\baselineskip]{.4pt}{10\baselineskip}}} \dot{m} \]
\[ \underbrace{\dot{W}_{cv}}_{=0} + \dot{m} \]
\[ \underbrace{\dot{W}}_{=0} + \dot{m} \]

\[ \settowidth{\mylen}{$\dot{W}_{cv}$}
   \makebox[\mylen]{$\underbrace{\dot{W}_{cv}}_{=0}$}
   + \dot{m}
\]

\end{document}

上面我已将\underbrace部件置于固定宽度(这就是我想要的)的框中。构造\makebox[\mylen]将自动使其内容居中。

您可以对构造执行相同操作\underbrace{\dot{W}}_{=0},但会与\underbrace和运算符重叠。

答案3

以下是两种规避方法:

  1. 将其放入\underbrace正确尺寸的盒子中。(这似乎是 Werner 的方法)

  2. 将下括号堆叠在参数下方,同时忽略下括号的宽度。 是\renewcommand\useanchowidth{T}一个stackengine宏,它将 的模式设置\useanchorwidth为“true”,F(false)是替代模式。它告诉包,在创建堆栈时,堆栈的总宽度不应由整个堆栈的横向尺寸决定,而应仅由“锚点”(位于文本基线上的堆栈元素)的宽度决定。在这种情况下,这意味着 不会\underbrace影响整个堆栈的宽度,只有 的宽度才\dot{W}_{cv}可以决定堆栈的总宽度。请参阅文章末尾的示例。

以下是 MWE:

\documentclass{article}
\usepackage{stackengine}
\stackMath
\usepackage{calc}
\begin{document}
\[ \dot{W}_{cv} + \dot{m} \]
\[ \makebox[\widthof{$\dot{W}_{cv}$}]{$\underbrace{\dot{W}_{cv}}_{=0}$} + \dot{m} \]
\renewcommand\useanchorwidth{T}
\[\stackunder[0pt]{\dot{W}_{cv}}{\underbrace{}_{=0}} + \dot{m}\]
\fboxsep=-\fboxrule
\[\fbox{\stackunder[0pt]{\dot{W}_{cv}}{\underbrace{}_{=\textrm{a long underset}}}} + \dot{m}\]
\end{document}

在此处输入图片描述

以下是 的一个极端示例\useanchorwidth{T}。 一个\fbox被放置在堆栈周围。

在此处输入图片描述

相关内容