Многострочные формулы align и ссылки на них

Урок учит верстать выкладки в несколько строк с выравниванием по знаку равенства и ссылаться на формулы по номеру.

align — окружение из amsmath для многострочных формул с выравниванием по точке, помеченной символом &.

Когда вы выводите формулу в несколько шагов, хочется, чтобы знаки равенства стояли друг под другом. Окружение align делает именно это и заодно нумерует строки.

Выравнивание по знаку равенства

Символ & отмечает точку выравнивания, \\ — конец строки:

\begin{align}
  (a+b)^2 &= a^2 + 2ab + b^2 \\
          &= a^2 + b^2 + 2ab
\end{align}

$$\begin{aligned} (a+b)^2 &= a^2 + 2ab + b^2 \\ &= a^2 + b^2 + 2ab \end{aligned}$$

Знаки = встали друг под другом — за это отвечает & перед каждым из них. В исходнике & пишется как обычный амперсанд; на этой странице он показан HTML-сущностью, чтобы не сломать разметку.

Нумерация и её отключение

По умолчанию align нумерует каждую строку. Чтобы убрать номер у конкретной строки, ставят \nonumber или используют align* (без звёздочки нумеруются все):

\begin{align}
  y &= x^2 \\
  y &= x^2 + 1 \nonumber
\end{align}

Метки и ссылки на формулы

Чтобы сослаться на формулу из текста, ей дают метку \label, а в тексте ссылаются через \eqref (печатает номер в скобках):

\begin{equation} \label{eq:pythag}
  a^2 + b^2 = c^2
\end{equation}
Как видно из~\eqref{eq:pythag}, гипотенуза ...

В тексте появится «как видно из (1)». Если формула переедет и сменит номер, ссылка обновится сама. Принято давать меткам префикс eq:, чтобы отличать их от меток рисунков и таблиц.

Несколько окружений выкладок

ОкружениеНазначение
equationодна нумерованная формула
alignнесколько строк с выравниванием, каждая нумеруется
gatherнесколько строк по центру, без выравнивания
alignedвыравнивание внутри другой формулы (без своих номеров)

Как работает под капотом

align устроен как невидимая таблица из двух колонок на каждый &: текст слева от & прижимается вправо, справа — влево, и точки стыка оказываются на одной вертикали. Нумерация идёт через тот же механизм счётчиков, что и у разделов, поэтому \label/\eqref работают по знакомой двухпроходной схеме через .aux. \eqref в отличие от \ref сам добавляет круглые скобки вокруг номера.

align, gather, multline, split — что когда

Четыре окружения решают четыре разные задачи, и путать их не стоит. align нужен, когда у строк есть общая вертикаль выравнивания — почти всегда это знак равенства, и каждая пара «левая часть — правая часть» прижимается к этой вертикали. gather просто центрирует несколько независимых формул друг под другом: внутри него & не используется, потому что выравнивать нечего. multline предназначен для одной длинной формулы, которая не влезает в строку: её первую строку он прижимает влево, последнюю — вправо, а промежуточные центрирует, и номер ставит только один на всю формулу. split же сам по себе не окружение верхнего уровня — он разбивает одну формулу на выровненные куски внутри equation, и тогда на всю конструкцию приходится один общий номер, а не по номеру на строку.

Звёздочка, tag и ручные номера

Каждое из этих окружений имеет звёздную версию (align*, gather*, equation*), которая полностью отключает нумерацию: это удобно для промежуточных выкладок, на которые вы не собираетесь ссылаться. Если же нужен не автоматический номер, а свой собственный ярлык — скажем, (*) или (II), — на строку ставят \tag, и она получает именно то обозначение, которое вы написали, не сбивая сквозную нумерацию остальных формул. Команда \tag* печатает метку вообще без круглых скобок. Полезно помнить и про разницу: \nonumber убирает номер у одной строки внутри нумерованного окружения, тогда как звёздочка глушит счётчик для всего блока сразу.

Почему amsmath, а не eqnarray

В старых учебниках вы встретите окружение eqnarray — его не нужно использовать в новых документах. Оно появилось ещё до пакета amsmath и реализовано как обычная таблица из трёх колонок, из-за чего вставляет вокруг знака равенства лишние горизонтальные отступы неправильной величины, ломает перенос длинных формул и плохо дружит с номером, который может наезжать на саму формулу. Окружения семейства amsmath считают межсимвольные интервалы по тем же правилам, что и обычная математика, поэтому выкладки выглядят ровно и профессионально. Практическое правило простое: там, где раньше писали eqnarray, сегодня пишут align, и весь этот богатый набор окружений приезжает одной строкой \usepackage{amsmath} в преамбуле.

Частые ошибки

  • align без пакета amsmath — ошибка «Environment align undefined». Подключите \usepackage{amsmath}.
  • Забыть & — выравнивания не будет, строки разъедутся.
  • \ref вместо \eqref для формул — номер без скобок, неаккуратно.

Итоги

  • align выравнивает строки по &; конец строки — \\.
  • \label + \eqref дают авто-обновляемую ссылку на номер формулы.
  • Звёздочка (align*) или \nonumber убирают нумерацию.
Проверьте себя
1. Что отмечает символ & внутри окружения align?
AКонец формулы
BТочку выравнивания строк (обычно по знаку равенства)
CНомер формулы
DНачало комментария
2. Чем \eqref удобнее \ref для ссылки на формулу?
AОн короче
BОн сам ставит номер в круглые скобки, как принято для формул
CОн не требует \label
DОн работает без amsmath
3. Какой пакет нужен для окружения align?
Agraphicx
Bamsmath
Cbabel
Dgeometry