![2019 年 8 月更新](https://linux22.com/image/369408/2019%20%E5%B9%B4%208%20%E6%9C%88%E6%9B%B4%E6%96%B0.png)
我已经嵌套收集并根据对齐
\begin{gather}
\sum\limits_{i=1}^n i + \text{expression} = \dfrac{n(n-1)}{2} \label{l1}\\
\begin{align}
a+\text{expression}&=b \\ %\label{l2} doesnt work
c&=d+\text{expression} \\
e+\text{long expression}&=f-\text{expression}
\end{align}
\end{gather}
问题在于不可能单独标记所有方程。这个问题与在 我如何得到这种奇怪的对齐?,除了我的问题中第一行需要居中。
谢谢你的帮助。
答案1
官方指南中明确提到了使用align
inside的可能性。gather
amsmath
然而,看起来有一个错误\label
;这些错误似乎是无害的,因为标签尽管被正确吸收了,所以我想应该可以解决这个问题。
与此同时,你可以用amsmath
低级黑客手段将线居中:
\documentclass{article}
\usepackage{amsmath}
\begin{document}
\begin{align}
\multispan{2}\hfill$\displaystyle
\sum_{i=1}^n i + \text{expression} = \dfrac{n(n-1)}{2}
$\hfill \label{l1}\\
a+\text{expression}&=b \label{l2} \\
c&=d+\text{expression} \label{l3} \\
e+\text{long expression}&=f-\text{expression}
\end{align}
\eqref{l1} and \eqref{l2} and \eqref{l3}
\end{document}
它适用于当前的显示,但不能保证普遍适用。
2019 年 8 月更新
事实证明,这个问题本质上只是表面问题:
\documentclass{article}
\usepackage{amsmath}
\usepackage{etoolbox}
\makeatletter
\patchcmd{\endalign}{\restorealignstate@}{\global\let\df@label\@empty\restorealignstate@}{}{}
\makeatother
\begin{document}
\begin{gather}
\sum_{i=1}^n i + \text{expression} = \frac{n(n-1)}{2} \label{l1}\\
\begin{align}
a+\text{expression}&=b \label{l2} \\
c&=d+\text{expression} \\
e+\text{long expression}&=f-\text{expression}
\end{align}
\end{gather}
\eqref{l1} and \eqref{l2}
\end{document}
答案2
这里有两种方法可以对齐集合中的方程式。第一种方法是使用\phantom
、\mathllap
和\mathrlap
。第二种方法是使用保存框和\mathmakebox
。诀窍是将最长的表达式放在 的左侧和右侧,=
并使所有内容具有相同的宽度。
注意:要使最后一行起作用,需要在 之外定义保存框gather
。
当然,我很难将其中任何一个称为优雅。
\documentclass{article}
\usepackage{mathtools}
\begin{document}
\begin{gather}
\sum\limits_{i=1}^n i + \text{expression} = \dfrac{n(n-1)}{2} \label{l1}\\
\phantom{e+\text{long expression}}\mathllap{a+\text{expression}}
=\mathrlap{b}\phantom{f-\text{expression}} \label{l2} \\
\phantom{e+\text{long expression}}\mathllap{c}
=\mathrlap{d+\text{expression}}\phantom{f-\text{expression}} \\
e+\text{long expression}=f-\text{expression}
\end{gather}
\eqref{l1} and \eqref{l2}
\sbox0{$\displaystyle e+\text{long expression}$}%
\sbox1{$\displaystyle f-\text{expression}$}%
\begin{gather}
\sum\limits_{i=1}^n i + \text{expression} = \dfrac{n(n-1)}{2} \\
\mathmakebox[\wd0][r]{a+\text{expression}}
=\mathmakebox[\wd1][l]{b} \\
\mathmakebox[\wd0][r]{c}
=\mathmakebox[\wd1][l]{d+\text{expression}} \\
\usebox0=\usebox1
\end{gather}
\begin{equation}
\sum\limits_{i=1}^n i + \text{expression} = \dfrac{n(n-1)}{2} \label{l1}
\end{equation}
\vspace{\dimexpr \smallskipamount-\abovedisplayskip-\belowdisplayskip}%
\begin{align}
a+\text{expression}&=b \\ %\label{l2} doesnt work
c&=d+\text{expression} \\
e+\text{long expression}&=f-\text{expression}
\end{align}
\end{document}