Многострочные формулы 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убирают нумерацию.