我正在尝试排版一个上下括号重叠的方程式,如下图所示:
我设法使用一种黑客技术对其进行了排版,方法是输入两次方程式,一次使用\phantom
命令,然后将其提升。有没有更简单的方法,也许是宏?上图的 MWE 如下所示。
\documentclass[12pt]{article}
\usepackage{amsmath}
\begin{document}
\[a+b+\overbrace{c+d+e+f+g}^{x}+h+i+k+l=e^2\]
\vspace{-35pt}
\[\phantom{+b+c+d+}\underbrace{\phantom{e+f+g+h+i}}_{y}\phantom{+k+=e^2}\]
\end{document}
答案1
\documentclass[12pt]{article}
\usepackage{amsmath}
\begin{document}
\[
a+b+\rlap{$\overbrace{\phantom{c+d+e+f+g}}^x$}c+d
+\underbrace{e+f+g+h+i}_y +k+l=e^2
\]
\end{document}
答案2
在赫伯特的数学模式align
63.2 重叠括号,他对、\hphantom
和使用了类似的方法\\[-11pt]
。
我认为最好使用 LaTeX 的\ooalign
:
\[
\ooalign{
$a+b+\overbrace{c+d+e+f+g}^{x}+h+i+k+l=e^2$\cr
$\phantom{a+b+c+d+{}} {\underbrace{\phantom{e+f+g+h+i}}_{y}} $\cr
}
\]
注意:\ooalign
在 LaTeX 内核中定义,用于定义一些特殊的文本重音和数学符号。它用原始的 定义\halign
。类似的方法在 LaTeX 内核中被广泛用于定义重叠符号 — 如\angle
、\cong
、\notin
和\overrightarrow
等\overbrace
。
答案3
\overbrace
查看和宏的定义\underbrace
可知,正在使用\ialign
其中的\halign
零\tabskip
和空\everycr
。
因此,括号位于其自己的“表格行”中。可以定义一个宏,该宏确实需要三个参数:第一部分仅在上括号下方,中间部分在两者之间,最后一部分仅在下括号上方。然后将其放入\ialign
具有三个单元格和三行的类似结构中。然后将括号放入 plainTeX 等效项中\multicolumn{2}
(\span\omit
据我所知)。
然而,上标和下标无法正常工作,必须手动读取并放置在正确的位置。将它们放置在正确的垂直位置是最困难的事情。
代码:
\documentclass{article}
\iffalse
% The definitions of the existing macros for study:
\overbrace:
macro:#1->\mathop {\vbox {\m@th \ialign {##\crcr
\noalign {\kern 3\p@ }\downbracefill \crcr \noalign {\kern 3\p@ \nointerlineskip }$\hfil \displaystyle {#1}\hfil $\crcr
}}}\limits
\underbrace:
macro:#1->\mathop {\vtop {\m@th \ialign {##\crcr
$\hfil \displaystyle {#1}\hfil $\crcr \noalign {\kern 3\p@ \nointerlineskip }\upbracefill \crcr \noalign {\kern 3\p@ }%
}}}\limits
\fi
\makeatletter
\def\overunderbrace#1#2#3{%
\begingroup
\let\overunderbrace@sup\empty
\let\overunderbrace@sub\empty
\@ifnextchar^%
{\@overunderbracesup{#1}{#2}{#3}}%
{\@ifnextchar_%
{\@overunderbracesub{#1}{#2}{#3}}%
{\@overunderbrace{#1}{#2}{#3}}%
}%
}
\def\@overunderbracesup#1#2#3^#4{%
\def\overunderbrace@sup{#4}%
\@ifnextchar_%
{\@overunderbracesub{#1}{#2}{#3}}%
{\@overunderbrace{#1}{#2}{#3}}%
}
\def\@overunderbracesub#1#2#3_#4{%
\def\overunderbrace@sub{#4}%
\@ifnextchar^%
{\@overunderbracesup{#1}{#2}{#3}}%
{\@overunderbrace{#1}{#2}{#3}}%
}
\def\@overunderbrace#1#2#3{%
\mathop {\vcenter {\m@th \ialign {##&##&##\crcr
\noalign {\kern 3\p@}%
\span\omit\hfil\hbox{\vbox to 0pt{\vss\hbox{\vbox{\hbox{$\m@th\scriptstyle\overunderbrace@sup$}\vspace{0pt}}}}}\hfil
&%
\crcr \noalign {\kern 5\p@\nointerlineskip}%
\span\omit\downbracefill&%
\crcr \noalign {\kern 3\p@\nointerlineskip}%
$\hfil \displaystyle {#1}\hfil $&%
$\hfil \displaystyle {#2}\hfil $&%
$\hfil \displaystyle {#3}\hfil $%
\crcr \noalign {\kern 3\p@\nointerlineskip}%
& \span\omit \upbracefill
\crcr \noalign {\kern 5\p@\nointerlineskip}%
&\span\omit\hfil\hbox{\vbox to 0pt{\hbox{\vbox{\vspace{0pt}\hbox{$\m@th\scriptstyle\overunderbrace@sub$}}}\vss}}\hfil
\crcr \noalign {\kern 3\p@ }%
}}}%
\endgroup
}
\makeatother
\begin{document}
% The extra `\mathord{}` is used to get the spacing right, otherwise
% the +'s before f and h think they are signs not operators.
% This is content specific and can't be added to the \overunderbracemacro.
\[
a+b+\overunderbrace{c+d+\mathord{}}{e+f+g}{\mathord{}+h+i}^{x}_{y} =e^2
\]
\end{document}
结果
答案4
您也可以使用此解决方案,它利用了包重叠不足
\usepackage{underoverlap}
\[\UOLunderbrace{w \leq}[p]_{=q} \UOLunderbrace{\leq v}_{=q}\]
\[ a + b + \UOLoverbrace{c+d+}[e+f+g]^x \UOLunderbrace{+h+i}_y + k + l = e^2 \]
它还可以与两个下支撑架(或两个上支撑架)一起使用,而不是一个下支撑架接着一个上支撑架,尽管在这种情况下结果看起来有点不理想。