![上组与下组重叠处不需要的空间](https://linux22.com/image/465132/%E4%B8%8A%E7%BB%84%E4%B8%8E%E4%B8%8B%E7%BB%84%E9%87%8D%E5%8F%A0%E5%A4%84%E4%B8%8D%E9%9C%80%E8%A6%81%E7%9A%84%E7%A9%BA%E9%97%B4.png)
我正在努力适应这个答案在如何让下牙套和上牙套重叠重叠的 overgroup/undergroup,但我似乎得到了不需要的额外空间:
有没有办法去掉 2 和 3 之间的多余空间,或者让空间更加对称(2 和 3 之间以及 3 和 4 之间留一点多余空间就可以了)?
\documentclass{article}
\usepackage{amsmath,mathtools}
\usepackage{mathabx}
\begin{document}
\begin{align*}
\rlap{$\undergroup{\phantom{123}}$}12\overgroup{345} \\
\mathrlap{\undergroup{\phantom{123}}}12\overgroup{345}
\end{align*}
\end{document}
答案1
空间是按照\undergroup
大小生成的,删除命令可以看到\phantom
:
因此,你可以同时粉碎\undergroup
和\overgroup
,但要用\mathclap
以使它们居中。使用这个小技巧将它们绘制到合适的位置:
\settowidth{\sometempdim}{123} % get content width
\kern 0.5\sometempdim\relax % move to the middle of the expression
\mathclap{\undergroup{\phantom{123}}} % typeset the \undergroup sign
\kern -0.5\sometempdim\relax % go back
123 % typeset the expression
为此定义一些专用的命令:
\makeatletter
\newcommand*{\phantomundergroup}[1]{%
\settowidth{\@tempdima}{#1}
\kern 0.5\@tempdima\relax
\mathclap{\undergroup{\phantom{#1}}}
\kern -0.5\@tempdima\relax
}
\newcommand*{\phantomovergroup}[1]{%
\settowidth{\@tempdima}{#1}
\kern 0.5\@tempdima\relax
\mathclap{\overgroup{\phantom{#1}}}
\kern -0.5\@tempdima\relax
}
\makeatletter
这里我使用了\@tempdima
,它已由 LaTeX 定义(希望 和 都没有在内部使用\mathclap
)\overgroup
。\phantom
但是,如果您之前已定义过,则可以使用任意长度。\makeatletter...\makeatother
是处理名称@
中的所必需的\@tempdima
。
完整代码:
\documentclass{article}
\usepackage{amsmath,mathtools}
\usepackage{mathabx}
\makeatletter
\newcommand*{\phantomundergroup}[1]{%
\settowidth{\@tempdima}{#1}
\kern 0.5\@tempdima\relax
\mathclap{\undergroup{\phantom{#1}}}
\kern -0.5\@tempdima\relax
}
\newcommand*{\phantomovergroup}[1]{%
\settowidth{\@tempdima}{#1}
\kern 0.5\@tempdima\relax
\mathclap{\overgroup{\phantom{#1}}}
\kern -0.5\@tempdima\relax
}
\makeatletter
\begin{document}
\begin{align*}
12345\\
\phantomundergroup{123}12
\phantomovergroup{345}345
\end{align*}
\end{document}