我正在编写一个 markdown 文档,并且希望每个术语下都有相同大小的下括号,就像这样:
\
我只能手动地在术语周围添加一堆空格( ):
$$
\underbrace{\ \ \ \ X_t \ \ \ \ }_\text{Population at time $t$} =
\underbrace{\alpha \circ X_{t-1}}_\text{Survivors from time $t-1$} +
\underbrace{\ \ \ \ \epsilon_t \ \ \ \ }_\text{Immigration}
$$
但是,手动添加空格(并通过视觉检查它们是否最终大小相同)效率不高,而且看起来也不好看,需要稍微降低一点。:
我该如何修复它?
(请忽略圆运算符的不匹配;我已经发布了别处。
答案1
eqparbox
可以通过其\eqmakebox[<tag>][<align>]{<stuff>}
宏来帮助解决此问题。所有<stuff>
具有相同内容的内容<tag>
都设置在具有最大宽度的框中。<align>
可以根据每次使用指定其他内容(l
eft、c
entre 或r
ight)。不确定这是否适用于 Markdown,因为它需要至少两次编译才能更改使用相同内容的元素的最大宽度<tag>
。
我添加了\eqmathbox
将定义转换为数学友好环境的功能(因为数学模式中有不同的显示样式)。如果您没有最新的 LaTeX,您还应该包括xparse
(...或者更新你的 LaTeX 发行版)。
\documentclass{article}
\usepackage{eqparbox,amsmath}
%\usepackage{xparse}% If you have LaTeX2e < 2020-10-01
% https://tex.stackexchange.com/a/34412/5764
\makeatletter
% \eqmathbox[<tag>][<align>]{<math>}
\NewDocumentCommand{\eqmathbox}{o O{c} m}{%
\IfValueTF{#1}
{\def\eqmathbox@##1##2{\eqmakebox[#1][#2]{$##1##2$}}}
{\def\eqmathbox@##1##2{\eqmakebox{$##1##2$}}}
\mathpalette\eqmathbox@{\vphantom{\Big|} #3} % \vphantom{\Big|} added to push the braces lower
}
\makeatother
\begin{document}
\[
\underbrace{\eqmathbox[Xt]{ X_t }}_\text{Population at time $t$} =
\underbrace{\eqmathbox[Xt]{\alpha \circ X_{t - 1}}}_\text{Survivors from time $t - 1$} +
\underbrace{\eqmathbox[Xt]{ \epsilon_t }}_\text{Immigration}
\]
\end{document}
答案2
您使用\parbox
基于的方法如下:
\documentclass{article}
\usepackage{amsmath}
\usepackage{newtxtext,newtxmath} % optional - Times Roman text and math fonts
\newlength\mylen
\settowidth\mylen{$\displaystyle\alpha\circ X_{t-1}$} % measure width of widest element
\newcommand\mybox[1]{\parbox{\mylen}{\centering$\displaystyle #1$}}
\begin{document}
\[
\underbrace{\mybox{X_t}}_{\text{Population at time $t$}} =
\underbrace{\mybox{\alpha\circ X_{t-1}}}_{\text{Survivors from time $t-1$}} +
\underbrace{\mybox{P\epsilon_t}}_{\text{Immigration}}
\]
\end{document}
答案3
一种非常丑陋的做法是使用 来作弊\vphantom
。请注意,您也可以使用 来插入水平空格,而\hspace*
不是一系列反斜杠。可能有更好的方法来实现所有这些,但首先...
\documentclass{article}
\usepackage{amsmath}
\begin{document}
$$
\underbrace{\vphantom{\Big|} \hspace*{5mm} X_t \hspace*{5mm}}_\text{Population at time $t$} =
\underbrace{\vphantom{\Big|}\alpha \circ X_{t-1}}_\text{Survivors from time $t-1$} +
\underbrace{\vphantom{\Big|} \hspace*{5mm} \epsilon_t \hspace*{5mm}}_\text{Immigration}
$$
\end{document}
答案4
您可以在数学模式中定义\ubrace
宏并在每个这样的公式之前使用。\def\ubracew{max-width-formula}
\def\ubrace#1#2{%
\setbox0=\hbox{$\displaystyle\ubracew$}%
\underbrace{\hbox to\wd0{\hss$\displaystyle#1$\lower.8ex\hbox{}\hss}}%
_{\text{#2}}%
}
$$
\def\ubracew{\alpha\circ X_{t-1}}
\ubrace{X_t}{Population at time $t$} =
\ubrace{\alpha \circ X_{t-1}}{Survivors from time $t-1$} +
\ubrace{\epsilon_t}{Immigration}
$$