我怎样才能在下括号下换行文本以避免出现任何间距问题?
amsmath
这可能不是必需的,但它使问题更加清晰,因为它\underbrace
。
\documentclass{article}
\usepackage{amsmath}
\begin{document}
\[(equation\ 2)(\underbrace{equation\ 2}_{\text{I want to line break this text.}})\]
\end{document}
最佳答案
2
您可以使用\substack
该包提供的宏amsmath
。
请注意,\substack
材料在基础材料(“方程式 2”)的两侧突出。如果“方程式 2”两侧的基线上有材料需要紧贴此绳子,我建议您装入包装mathtools
(包装的超集amsmath
)并将\substack{...}
材料装入包装纸中\mathclap{...}
。
\documentclass{article}
\usepackage{amsmath} % for '\underbrace' and '\substack' macros
\begin{document}
\[
\underbrace{\text{equation 2}}_{%
\substack{\text{I want to line}\\
\text{break this text.}}}
\]
\end{document}
附录详细说明了@DonHosek 的评论,他在评论中指出“我想换行”和“拆分此文本”两行之间的垂直空间很小。对于当前的情况,狭窄是由于上行不包含任何在基线以下有材料的字母(例如j
、p
、q
或)。虽然在一行或两行中插入指令肯定会成功增加两行之间的空间,但这样做实际上有点过头了。为了得到一个好的修复,在第一行的末尾插入就足够了,即更改y
\strut
\vphantom{y}
\substack{\text{I want to line}\\
在上面的代码中
\substack{\text{I want to line}\vphantom{y}\\
当然,\vphantom{y}
也是一个印刷支柱——只是整体上比要小得多\strut
。
4
-
1我建议
\strut
在每一行中添加内容以改善垂直间距\substack
。
– -
1谢谢 Mico,我很欣赏你的见解。顺便问一下,@DonHosek,有没有办法自动确定支柱高度,还是只能用眼睛判断?
–
-
@DonHosek – 谢谢。我不会
\strut
在第一行插入,因为我觉得它与下划线的距离没问题。我可能会\textstyle\mathstrut
在后面插入\text{break this text}
,以增加两行文本之间的间隔。我会发布附录来充实这个想法。
–
-
1@Jasper – 我认为这应该用眼睛来调整。我认为问题出现是因为上行中没有低于基线的字母(例如 j、p、q 和 y)。如果上行包含哪怕一个这样的字母,行距问题都可以忽略不计。
–
|
一个想法是使用tabular
,但这需要一些帮助,因为\text
只设置字体大小而不是基线跳过。
另一方面,的全套功能\text
是不需要的,因为这种构造只会用于显示数学。
我提供\ubracetext
和\obracetext
就可以了;如果*
如下,文本将排版在零宽度框中(à la \mathclap
)。内部tabular
使用比字体大小大 10% 的基线跳过;它是顶部对齐的\ubracetext
,并且是底部对齐的\obracetext
。单行不是问题。
\documentclass{article}
\usepackage{amsmath}
% use these two, rather than \underbrace and \overbrace
\NewDocumentCommand{\ubrace}{mm}{{\underbrace{#1}_{#2}}}
\NewDocumentCommand{\obrace}{mm}{{\overbrace{#1}^{#2}}}
\makeatletter
\NewDocumentCommand{\ubracetext}{smm}{% *-version uses zero width
\ubrace{#2}{% now the subscript using tabular
\uo@brace{#1}{t}{#3}%
}%
}
\NewDocumentCommand{\obracetext}{smm}{% *-version uses zero width
\obrace{#2}{% now the subscript using tabular
\uo@brace{#1}{b}{#3}%
}%
}
\newcommand{\uo@brace}[3]{%
\makebox[\IfBooleanTF{#1}{0pt}{\width}]{% zero width if *-version
\linespread{1}% just in case
\fontsize{\sf@size}{\fpeval{1.1*\sf@size}}\selectfont
\begin{tabular}[#2]{@{}c@{}}#3\end{tabular}%
}%
}
\makeatother
\begin{document}
\begin{gather}
(equation\ 1)(\ubracetext{equation\ 2}{I want to line \\ break this text})
\\
(equation\ 1)(\ubracetext*{equation\ 2}{I want to line \\ break this text})
\end{gather}
\bigskip
\hrule
\bigskip
\begin{gather}
(equation\ 1)(\obracetext{equation\ 2}{I want to line \\ break this text})
\\
(equation\ 1)(\obracetext*{equation\ 2}{I want to line \\ break this text})
\end{gather}
\end{document}
为什么我建议不要使用\underbrace
and \overbrace
?因为它们的语法很奇怪,而且在周围的间距方面有特殊的行为。
1
-
1+1 简化了(隐式)使用
\mathclap
。:-)
–
|
|