Почему вы компилируете более одного раза

Файлы Aux, библиография проходит, а зачем ссылки печатают?? при первом запуске.

Почему вы компилируете более одного раза

Рано или поздно вы скомпилируете документ, откроете PDF-файл и обнаружите ??, где должен быть номер рисунка или цитата. Ничего не сломано. Одна компиляция — это один проход по вашему файлу, и некоторая информация действительно не может быть получена за один проход.

Вот проблема в миниатюре. На странице 2 вы пишете «см. рисунок \ref{fig:results}», но этот рисунок попадает на страницу 7. Когда движок набирает страницу 2, он еще не дошел до страницы 7, поэтому он не знает, какой номер получит рисунок. То же самое относится и к оглавлению, которому требуется номер страницы каждого раздела еще до того, как первая страница будет закончена.

Как движок решает эту проблему

Механизм LaTeX читает ваш файл .tex, обрабатывает каждый макрос и записывает PDF-файл. Наряду с PDF-файлом он также записывает небольшие вспомогательные файлы: .aux для меток и цитат, .toc для оглавления, .bbl для форматированной библиографии. Эти файлы представляют собой заметки, которые движок оставляет себе в будущем.

  1. На первом проходе механизм верстает ваш текст и записывает все встреченные \label и \cite в файл .aux, печатая ?? везде, где ему нужен номер, который он еще не знает.
  2. Если вы цитируете что-либо, инструмент библиографии (bibtex или biber) затем читает файл .aux, ищет каждую цитату в вашей базе данных .bib и записывает отформатированный список ссылок в файл .bbl.
  3. На втором, а иногда и на третьем проходе движок считывает эти вспомогательные файлы обратно, поэтому перекрестные ссылки, записи оглавления и метки цитирования наконец преобразуются в действительные числа.

Современные установки запускают эти проходы автоматически, поэтому на практике вы редко вводите команды самостоятельно. Но знание цикла объясняет симптом: новое ?? после добавления метки или цитаты просто означает, что вспомогательные файлы еще не догнали, и еще одна компиляция исправляет это.

Двигатели в одну строку каждый

Роль «движка» могут выполнять несколько программ. pdfLaTeX — классический выбор с самой широкой поддержкой журналов. XeLaTeX добавляет полный Unicode и позволяет использовать шрифты, установленные в вашей системе. LuaLaTeX также поддерживает Unicode и имеет встроенный язык сценариев для расширенных пакетов. Tectonic — это современный движок, который загружает пакеты по требованию при первой же необходимости. Oleafly объединяет его, поэтому новый проект компилируется без предварительной установки дистрибутива TeX.

Для большинства документов различия не имеют большого значения; выберите то, что ожидает ваш шаблон или место проведения, и двигайтесь дальше. См. Сравнение двигателей, когда вам нужно сделать осознанный выбор.

Когда что-то действительно терпит неудачу

При неудачной компиляции выводится длинный журнал, и естественным инстинктом является чтение его снизу вверх. Сопротивляйтесь этому. Прочитайте первую ошибку в журнале и исправьте только ее; более поздние ошибки очень часто представляют собой каскадный шум, вызванный первой. Если ссылки по-прежнему печатают ?? после двух последовательных успешных компиляций, обычно виновником является опечатка в имени \label или \ref, а не пропущенный проход.

Вернуться к Открыть цикл