Перекрёстные ссылки label и ref

Урок собирает воедино перекрёстные ссылки — главный аргумент в пользу LaTeX для больших работ.

Перекрёстная ссылка — это упоминание раздела, рисунка, таблицы или формулы по метке: номер и страница подставляются автоматически и всегда верны.

Вы уже встречали \label у формул и рисунков. Теперь соберём общую картину: один механизм меток работает для всего и избавляет от ручной нумерации навсегда.

Метка и ссылка

Любому нумеруемому элементу дают метку \label{ключ}, а ссылаются на неё:

КомандаЧто подставит
\ref{ключ}номер (раздела, рисунка, таблицы)
\eqref{ключ}номер формулы в скобках
\pageref{ключ}номер страницы, где стоит метка
\section{Метод} \label{sec:method}
...
В разделе~\ref{sec:method} на стр.~\pageref{sec:method}
мы описали алгоритм (см. рис.~\ref{fig:scheme}).

В тексте получится, например: «в разделе 2 на стр. 7 мы описали алгоритм (см. рис. 3)». Все числа — автоматические.

Соглашение о префиксах меток

Чтобы не путаться, метки префиксуют по типу объекта. Это не требование LaTeX, а полезная дисциплина:

  • sec: — разделы (sec:intro)
  • fig: — рисунки (fig:scheme)
  • tab: — таблицы (tab:results)
  • eq: — формулы (eq:euler)

Почему это супер для больших работ

Представьте диплом на 100 страниц с 30 рисунками, 15 таблицами и 40 формулами. Вы вставили новый рисунок в начало второй главы. В Word пришлось бы вручную перенумеровать все последующие рисунки и поправить все ссылки «см. рис. N». В LaTeX вы просто пересобираете документ — все номера и все ссылки обновляются сами. Ошибиться невозможно: ссылка \ref{fig:scheme} всегда указывает на тот рисунок, у которого метка fig:scheme, какой бы номер он ни получил.

Умные ссылки cleveref

Пакет cleveref подставляет не только номер, но и слово «рис.»/«табл.»/«разд.» автоматически: \cref{fig:scheme} даст «рис. 3» целиком. Это удобно и защищает от рассогласования слова и номера.

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

При сборке \label{ключ} записывает в .aux строку «ключ → текущий номер счётчика и номер страницы». \ref на следующем проходе читает эту строку и подставляет номер. Тип объекта определяется тем, какой счётчик был активен в момент \label (раздел, рисунок, уравнение). Вот почему важно ставить \label после \caption или команды раздела — чтобы счётчик уже увеличился. И вот почему ссылки требуют двух проходов: на первом метки записываются, на втором — читаются.

Кликабельные ссылки: hyperref

Пакет hyperref превращает все перекрёстные ссылки в живые гиперссылки: в готовом PDF читатель щёлкает по «рис. 3» и попадает прямо на рисунок, по записи в оглавлении — на нужный раздел. Подключают его, как правило, последним в преамбуле, потому что он переопределяет множество внутренних команд и должен «накрыть» собой остальные пакеты. Вместе с навигацией hyperref добавляет в PDF закладки и метаданные, так что документ становится удобным не только на бумаге, но и на экране. С cleveref он сочетается особенно хорошо: «рис. 3» целиком становится одной аккуратной кликабельной ссылкой, без рассогласования слова и номера.

Дисциплина именования меток

Ключ метки — это идентификатор, и относиться к нему стоит как к имени переменной в коде. Хорошее имя описательно и устойчиво: fig:loss-curve переживёт любую перестановку рисунков, а fig:3 или fig:novyy через месяц ничего вам не скажет и начнёт врать, как только порядок изменится. Полезно держать единый регистр и разделитель (скажем, всегда строчные буквы и дефис), не вставлять в ключи пробелы и спецсимволы и не привязывать имя к номеру, который LaTeX всё равно проставит сам. В большой работе на сотни меток именно эта дисциплина отличает документ, в котором легко ориентироваться, от такого, где ссылки правят наугад.

Диапазоны и ссылки на несколько объектов

Сила cleveref не только в подстановке слова. Команда \cref{fig:a,fig:b,fig:c} сама соберёт перечисление «рис. 1, 2 и 3» с правильными запятыми и союзом, а \crefrange{eq:start}{eq:end} выдаст диапазон «формулы (4)–(7)». Слово при этом склоняется по числу: одна ссылка даёт «рис.», несколько — то же слово во множественном понимании. Всё это снимает с автора рутину пунктуации в ссылках и гарантирует, что перечисление останется верным, даже если объекты потом поменяются местами или один из них исчезнет. По сути это та же идея автонумерации, доведённая до уровня целых фраз-ссылок.

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

  • Ссылки показывают ?? — нужен второй проход компиляции.
  • \label до \caption/команды раздела — указывает на чужой номер.
  • Опечатка в ключе — предупреждение «Reference undefined» и ?? на месте номера.

Итоги

  • Один механизм меток \label работает для разделов, рисунков, таблиц и формул.
  • \ref, \eqref, \pageref подставляют номер/формулу/страницу автоматически.
  • Для больших работ это устраняет ручную нумерацию и ошибки в ссылках навсегда.
Проверьте себя
1. Что подставит \pageref{ключ}?
AНомер раздела
BНомер страницы, на которой стоит соответствующая метка
CТекст метки
DНомер формулы
2. Почему перекрёстные ссылки особенно ценны в большом дипломе?
AОни делают документ короче
BПри вставке нового рисунка все номера и ссылки пересчитываются автоматически
CОни запрещают двигать рисунки
DОни ускоряют компиляцию
3. Почему \label надо ставить после \caption?
AТак короче код
BТип и номер метки берутся из активного счётчика, который \caption уже увеличил
CИначе документ не скомпилируется
DЭто требование graphicx