对于以下内容,我需要找到一种更清晰的方法来拥有一个alignat
环境并将前两行彼此对齐,同时将后两行彼此对齐,以便所有行的垂直间距保持一致。
\documentclass{article}
\usepackage{mathtools, nccmath}
\begin{document}
\begin{fleqn}[0pt]
\begin{alignat}{2}
& a &&= b\\
%
& x &&= y
\end{alignat}\vspace*{-2\baselineskip}
\begin{alignat}{2}
& a &&= b\\
%
& xxx &&= yyy
\end{alignat}
\end{fleqn}
\end{document}
答案1
您可以删除\belowdisplayskip
和\abovedisplayskip
,但也要注意显示中的行间距要扩大\jot
。
\documentclass[twocolumn]{article}
\usepackage{mathtools, nccmath}
\begin{document}
\begin{fleqn}[14em]
\begin{alignat}{2}
& a &&= b\\
& x &&= y
\end{alignat}\par\nopagebreak
\vspace*{\dimeval{-\abovedisplayskip-\belowdisplayskip+\jot}}\noindent
\begin{alignat}{2}
& a &&= b\\
& xxx &&= yyy
\end{alignat}
\end{fleqn}
\end{document}
笔记。我使用twocolumn
14em 只是为了将方程式移得更接近数字,以便在较小的图片中更好地显示对齐。
答案2
该解决方案(受到 TeXbook 附录 D 中的代码的启发)在每个alignat
组后面都有一个语句,该语句以递归方式向上执行垂直列表并仅重新插入对齐产生的\hbox
es 和\penalty
s,同时从底部和顶部删除垂直空间。
\documentclass{article}
\usepackage{mathtools, nccmath}
\def\unpack{\unskip\unpenalty\unskip % remove space from bottom
\count0=\lastpenalty\unpenalty
\setbox0=\lastbox
\ifhbox0{\unpack}\box0 \penalty\count0 \else
\unskip\unskip\unpenalty\unskip\unskip\unskip % remove space from top
\fi}
\begin{document}
\begin{fleqn}[0pt]
\vbox{
\begin{alignat}{2}
& a &&= b\\
& x &&= y
\end{alignat}
\par\unpack
\begin{alignat}{2}
& a &&= b\\
& xxx &&= yyy
\end{alignat}
\par\unpack
}
\end{fleqn}
\end{document}
这\vbox
是必需的,因为\lastbox
不能在主垂直列表上使用。