看看下面的例子
\begin{align}
& x \\
\overset{\text{some long explanation}}= & foo \\
& = bar
\end{align}
使等号对齐的最佳方法是什么?现在我已经看到了不同的解决方案,例如添加\overset{\hphantom{\ţext{some long explanation}}}=
到每行的开头,但我真的不认为这是最好的解决方案。有什么更好的想法吗?
更新
我想我真正想要的是
- 将对齐环境的第一列右对齐
- 将等号在溢流文本下方右对齐
答案1
\documentclass{article}
\usepackage{mathtools}
\begin{document}
\begin{align}
x & \\
&\overset{\mathclap{\strut\text{some long explanation}}}= foo\\
& = bar
\end{align}
\end{document}
答案2
你说你不想重复“一些冗长的解释”,但据我所知,确实没有更好的方法可以做到这一点。
这就是你想要的吗?
\documentclass{article}
\usepackage{amsmath}
\begin{document}
\begin{align}
x &\overset{\text{some long explanation}}= foo \\
&\overset{\phantom{\text{some long explanation}}}= bar
\end{align}
\end{document}
答案3
下面的宏怎么样\alignedoverset
?它保留间距并对齐第二个参数的左边缘?
\documentclass{article}
\usepackage{amsmath, calc}
\newlength\oversetwidth
\newlength\underwidth
\newcommand\alignedoverset[2]{
% #1 = over
% #2 = under
\settowidth\oversetwidth{$\overset{#1}{#2}$}
\settowidth\underwidth{$#2$}
\setlength\oversetwidth{\oversetwidth-\underwidth}
\hspace{.5\oversetwidth}
&
\settowidth\oversetwidth{$\overset{#1}{#2}$}
\settowidth\underwidth{$#2$}
\setlength\oversetwidth{\oversetwidth-\underwidth}
\hspace{-.5\oversetwidth}
\overset{#1}{#2}
}
\begin{document}
\begin{align}
x + 2 \alignedoverset{\text{some long explanation}}{\geq} foo \\
& = bar
\end{align}
\end{document}
如果第二个参数比第一个参数长,这似乎会中断,但在这种情况下根本没有必要。
答案4
根据你想要的黑客程度,你可以在第一个解决方案中使用不那么肮脏的技巧,非常第二种解决方案中的肮脏伎俩。
我绝对更喜欢第三种解决方案。
\documentclass{article}
\usepackage{amsmath}
% for the first solution
% see http://tex.stackexchange.com/a/209732/4427
\makeatletter
\newcommand{\Cen}[2]{%
\ifmeasuring@
#2%
\else
\makebox[\ifcase\expandafter #1\maxcolumn@widths\fi]{$\displaystyle{}#2$}%
\fi
}
\makeatother
% for the second solution
\newcommand{\CEN}[1]{%
\multispan{1}\hfill$\displaystyle{}#1$\hfill
}
\begin{document}
\begin{alignat}{2}
x & \Cen{2}{{}\overset{\text{some long explanation}}={}} && foo \\
& \Cen{2}{{}={}} && bar
\end{alignat}
\begin{alignat}{2}
x & \CEN{\overset{\text{some long explanation}}=} && foo \\
& \CEN{=} && bar
\end{alignat}
\begin{alignat}{2}
x &= foo &\qquad& \text{(some long explanation)} \\
&= bar
\end{alignat}
\end{document}