overbrace
有时我想在等式中使用/插入文本stackrel
,并将其放在多行中。最直接的方法是什么?
我希望得到下图所示的效果。我的(有点愚蠢的)解决方法是:
\documentclass[a4paper]{article}
\usepackage{amsmath,times}
\begin{document}
$$e = \underbrace{m}_{\substack{\text{I wish this text}\\ \text{ to be in two lines}} }\cdot \underbrace{c^2}_{\text{and the same here} }$$
\end{document}
有任何(更好的)解决方案吗?
谢谢!
答案1
您可以使用\parbox
指令。在下面的例子中,我使用\Centering
(来自raggede
包)而不是基本\centering
指令,因为它\Centering
提供了自动行长平衡。
\documentclass[a4paper]{article}
\usepackage{amsmath,newtxtext,ragged2e} % 'times' package is deprecated
\begin{document}
\[
E = \underbrace{m}_{\parbox{1.75cm}{\Centering\scriptsize I wish this text to be in two lines}}
\cdot \underbrace{c^2}_{\parbox{1.25cm}{\Centering\scriptsize and the same here}}
\]
\end{document}
答案2
其他可能性如下:
$$e = \underbrace{m}_{\substack{\text{I wish this text}\\ \text{ to be in two lines}}}\cdot \underbrace{c^2}_{\text{and the same here} }$$
$$e = \underbrace{m}_{\parbox{10em}{\scriptsize I wish this text to be in two lines}}\cdot \underbrace{c^2}_{\text{and the same here} }$$
$$e = \underbrace{m}_{\text{I wish this text }\atop\text{to be in two lines}}\cdot \underbrace{c^2}_{\text{and the same here} }$$
答案3
您可以定义一个\textsubstack
适用\text
于每个块的命令(以 分隔\\
):
\documentclass[a4paper]{article}
\usepackage{amsmath}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\textsubstack}{m}
{
\seq_set_split:Nnn \l_omer_textsubstack_input_seq { \\ } { #1 }
\seq_set_map:NNn \l_omer_textsubstack_output_seq
\l_omer_textsubstack_input_seq
{ \exp_not:n { \text {##1} } }
\substack{ \seq_use:Nn \l_omer_textsubstack_output_seq { \\ } }
}
\seq_new:N \l_omer_textsubstack_input_seq
\seq_new:N \l_omer_textsubstack_output_seq
\ExplSyntaxOff
\begin{document}
\begin{equation*}
e = \underbrace{m}_{\textsubstack{I wish this text\\to be in two lines}}
\cdot \underbrace{c^2}_{\textsubstack{and the\\ same here}}
\end{equation*}
\end{document}
首先将输入在 处拆分\\
;然后围绕每个项目用 构建一个新序列\text{...}
,然后生成序列,以\\
作为分隔符。
答案4
您的\substack
/\text
解决方案非常合理,特别是因为它不需要指定宽度。只需注意虚假空格。但是,如果愿意,可以定义多行版本\text
:
\documentclass[a4paper]{article}
\usepackage{amsmath,times,varwidth}
\makeatletter
\DeclareRobustCommand{\textblock}[1]{%
{\mathchoice
{\textblockdef@\displaystyle\f@size{#1}}%
{\textblockdef@\textstyle\f@size{\firstchoice@false #1}}%
{\textblockdef@\textstyle\sf@size{\firstchoice@false #1}}%
{\textblockdef@\textstyle \ssf@size{\firstchoice@false #1}}%
\check@mathfonts
}%
}
\def\textblockdef@#1#2#3{\begin{varwidth}{\textwidth}
\everymath{#1}%
\let\f@size#2\selectfont
\baselineskip=\f@size pt
\baselineskip=1.1\baselineskip
\centering
#3
\end{varwidth}}
\begin{document}
\begin{equation*}
e = \underbrace{m}_{\textblock{I wish this text\\to be in two lines}}
\cdot \underbrace{c^2}_{\textblock{and the\\ same here}}
\end{equation*}
\end{document}
的定义\textblock
基于\text
from的定义amstxt.sty
,但只是假设我们处于数学模式。它将根据其在等式中的位置调整其字体大小,并将继承周围文本的字体特征。我选择让文本自动居中。数学尺寸信息不包含基线跳跃的规范,因此我选择了一个比普通文本略紧的值。