我发现\underbrace
在方程式中的某个项上使用 会导致后面项的间距发生变化,特别是+
会移得更靠近\dot{m}
。这似乎与 中的问题不同\underbrace 标签过大会导致不必要的间距因为
- 空间越来越小
- 括号下的标签不大于括号
- 按照该问题中的建议尝试
\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
\underbrace
in的定义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
以下是两种规避方法:
将其放入
\underbrace
正确尺寸的盒子中。(这似乎是 Werner 的方法)将下括号堆叠在参数下方,同时忽略下括号的宽度。 是
\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
被放置在堆栈周围。