(如何)我可以在数学模式下手动指定(水平)框的轴?

(如何)我可以在数学模式下手动指定(水平)框的轴?

这个问题导致了一个新的方案的出现:
underoverlap

我一直\overunderbrace在使用这个答案。对于简单的示例,它工作得很好,但由于原始定义使用\vcenter,当“内容”的轴未与其垂直中心对齐时,垂直对齐不正确。例如,为了在以下公式中获得正确的对齐,我不得不对进行一些手动调整\raisebox。不理想。

  在此处输入图片描述

我正在尝试完善宏;也许编写一个小包。(有几种可能的扩展,例如,\underoverbrace自定义垂直间距、自定义大括号命令(\underoverline)等。)

问题:除了“天真地”使用\vcenter,有没有办法将整个结构升高/降低到所需的精确量,以使其轴与“内容”(即中的一行\halign)的轴对齐?

我想到了几种可能的解决方案:

  • 对我来说,最简单的方法是向宏添加两个可选参数,分别用于括号前后的内容。然后我可以将它们放在“内容行”中。但我宁愿不这么做。
  • 如果必须的话,我大概可以测量各个部分并计算出正确的升高/降低量。

我只是希望有一个我还不知道的更简单的解决方案。


编辑:以下是基于原始答案的示例的错位的简单 MWE:

\documentclass{article}

\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}
    $$
        a+b+
        \overunderbrace
            {c+\mathord{\mathop{\Sigma}_d} + \mathord{}}
            {e+f+g}
            {\mathord{}+h+i}^{x}_{y}
        = e^2
    $$
\end{document}

在此处输入图片描述

答案1

您不想将其置于中心:只需取下下支撑,这样构造的基线就是底座的基线,然后重建它:

在此处输入图片描述

\documentclass{article}

\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 {\setbox\z@\vbox{\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@ }%
}%
\global\setbox\@ne\lastbox
\unkern
\global\setbox\thr@@\lastbox
\unkern
}%
\vtop{\box\z@\kern3\p@\nointerlineskip\box\thr@@\kern5\p@\nointerlineskip\box\@ne\kern3\p@}%
}%
    \endgroup
}
\makeatother


\begin{document}
    $$
        a+b+
        \overunderbrace
            {c+\mathord{\mathop{\Sigma}_d} + \mathord{}}
            {e+f+g}
            {\mathord{}+h+i}^{x}_{y}
        = e^2
    $$
\end{document}

答案2

以下是我的看法,基于赫伯特的回答回答你提到的问题。为了简单起见,我定义了\overunderbrace一个参数(最后两个是要放在括号上/下的东西),但也可以按照示例代码中的方式完成。

输出

\documentclass{article}
\usepackage{mathtools}
\newcommand*\overunderbrace[5]{%
  \mathrlap{\overbrace{\phantom{#1#2}}^{\mathclap{#4}}}%
  #1\mathord{\underbrace{#2#3}_{\mathclap{#5}}}%
  }
\begin{document}
\[
  a+b+\overunderbrace{c+\mathord{\mathop{\Sigma}_d}+}{e+f+g}{+h+i}{x}{y}+k+l=e^2
\]
\end{document}

相关内容