如何对齐括号下的文本

如何对齐括号下的文本

如何对齐括号下的文本:

在此处输入图片描述

\documentclass{article}
\usepackage{amsmath}
\begin{document}
\[
\underbrace{(zzz)}_{\textrm{tall}}
\underbrace{zzz}_{\textrm{short}}
\]
\end{document}

答案1

您希望使公式具有相同的高度。这里我使用\mathstrut,但在可选参数中您可以使用任何\vphantom

\documentclass{article}
\usepackage{amsmath}

\newcommand{\ubracetext}[3][\mathstrut]{%
  \mathinner{%
    \underbrace{#1#2}_{\textrm{\vphantom{X}#3}}%
  }%
}

\begin{document}

\begin{equation*}
\ubracetext{Y(z)}{output} =
\ubracetext{z^{-1}}{delay}
\ubracetext{X(z)}{input}
\end{equation*}

\end{document}

在此处输入图片描述

如果需要的话你可以做

\ubracetext[\vphantom{<formula>}]{top}{bottom}

请注意,最后一个参数(下标)中的空格是被尊重的;不要仅仅为了保持源代码的对齐而添加它们。

答案2

三个下括号中间没有与其他两个垂直对齐的原因是,关联\underbrace指令的第一个参数不包含突出于基线以下的材料;相反,第一个和第三个\underbrace指令的第一个参数包含()

为了解决这个问题,我建议您在 旁边插入指令\mathstrut-- ,其定义为-- 。我还会使用(或) 代替。并且我会使用指令让单词“输出”位于相关括号的左侧和右侧。\vphantom{)}z^{-1}\textnormal\textup\textrm\mathclap

并且,为了在排版类中达到最佳效果,在第一个和第三个指令的第二个参数中插入\vphantom{d}指令(也可以这样做) 。\vphantom{l}\underbrace

如果您的文档包含大量这些表达式,我会考虑创建一个自定义宏 - 按照给出的行@egreg 的回答——简化和标准化创建这些下括号表达式。

在此处输入图片描述

\documentclass{article}
\usepackage{mathtools} % for \mathclap macro
\begin{document}
\[
\underbrace{Y(z)} _{\mathclap{\textnormal{output\vphantom{d}}}} =
\underbrace{z^{-1}\mathstrut} _{\textnormal{delay}}\,
\underbrace{X(z)} _{\textnormal{input}\vphantom{d}}
\]
\end{document}

附录-- 我刚刚注意到原帖者已经修改并简化了他们的查询。因此,上面给出的答案的细节可能不再那么有用。然而,原则建议的调整所依据的规则保持不变。以 OP 的新代码块为例:

\[
\underbrace{(zzz)}_{\textrm{tall}}
\underbrace{zzz}_{\textrm{short}}
\]

请注意,第一\underbrace条指令的第一个参数包含(,它突出于基线以下,而第二\underbrace条指令的第一个参数不包含 。要修复由此导致的水平括号放置深度差异,请\mathstrut在第二行插入一条指令:

\[
\underbrace{(zzz)}_{\textrm{tall}}
\underbrace{zzz\mathstrut}_{\textrm{short}}
\]

这可以完美地实现,因为\mathstrut被定义为\vphantom{(},它是具有一定高度和(重要的是)深度的印刷支柱 - 并且没有宽度,这使得它不可见,从而证明了 中的“幻影”部分\vphantom

在此处输入图片描述

\documentclass{article}
\usepackage{amsmath} % for '\underbrace' and '\text' macros
\begin{document}
\[
\underbrace{(zzz)}_{\textrm{tall}}  \underbrace{zzz}_{\textrm{short}}
\quad\text{vs.}\quad
\underbrace{(zzz)}_{\textrm{tall}}\,\underbrace{zzz\mathstrut}_{\textrm{short}}
\]
\end{document}

答案3

简短回答

为所有下括号添加相同的\vphantom分隔符,并将最长的下划线字符传递给它。 本身\vphantom可以位于命令参数中的任何位置\underbrace

\underbrace{(zzz)\vphantom{(}}_{\textrm{tall}}
\underbrace{zzz  \vphantom{(}}_{\textrm{short}}

![在此处输入图片描述

Lyx 程序

在 Lyx 中,可以使用菜单Insert | Formatting | Phantom(更多的),或者使用工具栏中的数学间距菜单:

在此处输入图片描述

键入要用作参数的文本,选择它并插入间隔符。间隔符在其灰色参数上方显示为红色箭头,可随时编辑,结果以交互方式更新:

![在此处输入图片描述


细节

经过几次尝试后,我能够理解这是如何工作的,这里有一个不使用宏/定义的解决方案,因为:

  • 我只遇到过几次错位的情况。

  • 我更喜欢自包含的命令,以便代码可以从一个文档移植到另一个文档,而不受调整标题/前言的限制。

错位的原因

下支架锚定在垂直位置,基于最长的字符下降符. 下降部是某些字形的底部部分,延伸到排版基线以下,例如yg

因此,由于不能保证它们的参数包含相同的下划线,因此这种锚定位置因下划线而异。不幸的是,在 Latex 中,没有内置机制让同一行上的下划线自动协调其垂直位置。

解决方案

绕过方法是将具有最高字形的字符添加到所有下括号中,以便它们计算相同的垂直位置。

但是我们不希望出现这个额外的字符。幸运的是,有一个助手\phantom,创建一个透明区域,包含为其参数提供的任何内容,从而考虑到可能的下降字符。

“幻影”这个名字是有意义的,因为传递给助手的参数不会显示,只用于强制间距。

当然,我们只对创建的垂直空间感兴趣,我们不想添加空的水平空间。 有两种变体\phantom,一种只显示宽度(\hphantom),一种只显示高度(\vphantom)。因此我们可以使用\vphantom

(为了完整起见,还有另一种解决方案,使用规则,但据说很“脆弱”。)

幻影论证的选择

的参数\vphantom可以是任意值,通常是一个字符。我们选择所有下括号中降部最长的字符。

具有长下降部分的字母字符:jpqy({[|]})

注意实际边界框取决于字形,因此取决于使用的字体。特别是字体中的数字老式数字的字形有较长的下行线,而某些字形(如 for)s可以有装饰性的花饰。因此,在特定情况下使用(or)并不能保证成功。具有良好所见即所得功能的文字处理应用程序会很有帮助。

在数学公式中,可能会选择某些符号(例如可以选择积分等符号,包括其极限)。

没有什么可以阻止传递多个字符并让特征自行计算最外层边界框。

最终代码

替换此代码:

\underbrace{(zzz)_{\textrm{tall}}
\underbrace{zzz }_{\textrm{short}}

经过:

\underbrace{(zzz)\vphantom{(}}_{\textrm{tall}}
\underbrace{zzz\vphantom{(}}  _{\textrm{short}}

感谢 Barbara、Mico 和 egreg 为构建此答案提供了很好的建议。 也看看他们的答案,它们包含可能适合您需求的替代方案。

相关内容