我怎样才能在下括号下换行文本以避免出现任何间距问题?

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 的评论,他在评论中指出“我想换行”和“拆分此文本”两行之间的垂直空间很小。对于当前的情况,狭窄是由于上行不包含任何在基线以下有材料的字母(例如jpq或)。虽然在一行或两行中插入指令肯定会成功增加两行之间的空间,但这样做实际上有点过头了。为了得到一个好的修复,在第一行的末尾插入就足够了,即更改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}

为什么我建议不要使用\underbraceand \overbrace?因为它们的语法很奇怪,而且在周围的间距方面有特殊的行为。

1

  • 1
    +1 简化了(隐式)使用\mathclap。:-)


    –