如何让下牙套和上牙套重叠

如何让下牙套和上牙套重叠

我正在尝试排版一个上下括号重叠的方程式,如下图所示:

在此处输入图片描述

我设法使用一种黑客技术对其进行了排版,方法是输入两次方程式,一次使用\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

在赫伯特的数学模式align63.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 \]

在此处输入图片描述

它还可以与两个下支撑架(或两个上支撑架)一起使用,而不是一个下支撑架接着一个上支撑架,尽管在这种情况下结果看起来有点不理想。

相关内容