Перекрёстные ссылки 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подставляют номер/формулу/страницу автоматически.- Для больших работ это устраняет ручную нумерацию и ошибки в ссылках навсегда.