Labels and nesting gather and align

I have nested gather and align according to

\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}


to get an output looking like this:

The problem is that it is not possible to label all equations separately. The problem is identical to that discussed in How do I get this strange alignment?, except that in my problem the first line needs to be centered.

Thanks for any help.

• Thanks for your reply. I do not use equation for (1) and align for (2)-(4) as it will result in too much space between (1) and (2). Of course, I could use \vspace to reduce the gap, but I wonder if there is a more elegant solution. – More_Qs_than_As Jan 26 '18 at 14:32
• The possibility to use align inside gather is explicitly mentioned in the official guide to amsmath (revision 2016-11-14 and, I'm pretty sure, also in the next revision). – egreg Jan 26 '18 at 21:16

The possibility of using align inside gather is explicitly mentioned in the official guide to amsmath.

However it appears there is a bug with \label; the errors seem innocuous, in the sense that the labels are absorbed correctly notwithstanding, so I guess it should be possible to fix the issue.

In the meantime, you can trick amsmath into centering the line with a low level hack:

\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}


which will work for the present display, but is not guaranteed to work generally.

Update August 2019

It turns out that the issue is essentially cosmetic:

\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}


Here are two ways to align equations in a gather. The first uses \phantom, \mathllap and \mathrlap. The second uses saveboxes and \mathmakebox. The trick is to locate the longest expressions to the left and right of the = and make everything the same width.

Note: for the last line to work the saveboxes need to be defined outside the gather.

Of course, I would hardly call either of these elegant.

\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}

$$\sum\limits_{i=1}^n i + \text{expression} = \dfrac{n(n-1)}{2} \label{l1}$$
\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}