重叠和垂直对齐

重叠和垂直对齐

我正在使用该\overset命令,我想垂直对齐重叠值

未对齐的重叠值

答案1

我们可以添加垂直幻影,但必须小心保持正确的间距。我会使用一个新的宏\varoverset

\documentclass{article}
\usepackage{amsmath}

\makeatletter
\newcommand{\varoverset}[2]{\binrel@{#2}%
  \binrel@@{\mathop{\vphantom{M}{#2}}\limits^{#1}}}
\makeatother

\begin{document}

\begin{gather*}
\overset{0}{\neg} Aa \overset{0}{\lor}
(\overset{0}{Mcc} \overset{0}{\leftrightarrow} \overset{1}{Mba})
\\
\varoverset{0}{\neg} Aa \varoverset{0}{\lor}
(\varoverset{0}{\mathit{Mcc}} \varoverset{0}{\leftrightarrow} \varoverset{1}{\mathit{Mba}})
\end{gather*}

\end{document}

在此处输入图片描述

\binrel@/结构\binrel@@继承自 的原始定义,\overset并负责处理间距。 将 的第二个参数\varoverset放在括号中,以便将\mathord其变成 ,否则 的间距\vphantom通常是错误的。

还要注意,如果MccMba是多字母变量,最好将它们放入\mathit(正如我在第二个公式中所做的那样)。

编辑为了完全控制,您可以定义一个通常使用的新长度,以及一个可选参数来本地更改它。

\newlength{\varoversetheight}
\settoheight{\varoversetheight}{M}
\makeatletter
\newcommand{\varoverset}[3][\varoversetheight]{\binrel@{#3}%
  \binrel@@{\mathop{\vrule width\z@ height#1{#3}}\limits^{#2}}}
\makeatother

答案2

在这里,我使用堆栈来创建重叠。(我也偷了 campa 的\binrel@技巧,+1)。这里的优点是重叠位置是可调整的,可以通过逐个使用可选参数或重置默认值来调整\oversetnorm。如果对象的高度异常高(例如,如果戴帽子),这很方便。

MWE 显示\oversetnorm针对第二行调整后的默认值。

\documentclass{article}
\usepackage{stackengine,amsmath}
\newcommand\oversetnorm{.7\normalbaselineskip}
\makeatletter
\newcommand\myoverset[3][\oversetnorm]{%
  \binrel@{#3}\binrel@@{\mathop{\ensurestackMath{%
  \stackengine{#1}{#3}{\scriptstyle#2}{O}{c}{F}{F}{L}}}}}
\makeatother
\begin{document}
\[
\myoverset{0}{\neg} Aa \myoverset{0}{\lor}
(\myoverset{0}{\mathit{Mcc}} \myoverset{0}{\leftrightarrow} \myoverset{1}{\mathit{Mba}})
\]
\renewcommand\oversetnorm{11pt}
\[
\myoverset{0}{\neg} Aa \myoverset{0}{\lor}
(\myoverset{0}{\mathit{\hat M\!cc}} \myoverset{0}{\leftrightarrow} \myoverset{1}{\mathit{\hat M\!ba}})
\]
\end{document}

在此处输入图片描述

相关内容