Пакеты, которые борются друг с другом
Hyperref последним, умный после, устаревшие пары, минимальное количество примеров.
Пакеты, которые сражаются друг с другом
Пакеты LaTeX могут свободно переопределять команды друг друга, и многие делают это намеренно. Именно так hyperref превращает каждую перекрестную ссылку в ссылку. Это также означает, что каждый из двух пакетов может исправлять одну и ту же команду с несовместимыми предположениями, и результат варьируется от явной ошибки, такой как «Команда \footnote уже определена» или «Конфликт опций для пакета xcolor», до вывода, который заведомо неправильный. Конфликты почти всегда возникают сразу после добавления пакета к ранее работающей преамбуле, что также является самой важной подсказкой.
Порядок загрузки — половина дела
Многие конфликты разрешаются исключительно по порядку, поскольку последнее слово остается за пакетом, загруженным позже. Самое важное правило: загружайте гиперссылку ближе к концу преамбулы. Он переписывает большие части механизма перекрестных ссылок LaTeX, и пакеты, загруженные после него, могут отменить эти исправления. Краткий список исключений должен появиться еще позже, и на самом деле вы встретите cleveref, который предназначен для размещения поверх hyperref и должен загружаться после него:
\usepackage{graphicx}\usepackage{amsmath}% ... everything else ...\usepackage{hyperref}\usepackage{cleveref} % after hyperref, by designЕсли в документации пакета указана позиция относительно другого пакета, верьте этому. Эти записи существуют, потому что кто-то уже столкнулся с конфликтом, который у вас скоро возникнет.
Устаревшие пакеты и их замены
Некоторые конфликты возникают из-за загрузки мертвого пакета рядом с его преемником. Не комбинируйте «epsfig» с «graphicx», «subfigure» с «subcaption» или старые прокладки «times» и «mathptmx» с современными пакетами шрифтов, такими как «newtxtext». Старые шаблоны являются обычным источником: они загружают все, что было актуально на момент написания шаблона, а вы добавляете современный эквивалент поверх него. Удалите устаревший и сохраните замену. Пакет nag может пометить вас об устаревшем использовании во время компиляции.
Конфликты опций
«Конфликт опций для пакета X» означает, что пакет был загружен дважды с разными параметрами, часто один раз вашим классом документа за вашей спиной. Вы не можете загрузить его снова с новыми параметрами, но вы можете добавить параметры до того, как кто-либо его загрузит: поместите \PassOptionsToPackage{table}{xcolor} перед \documentclass, и параметры объединятся в зависимости от того, какая загрузка произойдет раньше.
Изолируем с помощью минимального примера
Если причина не очевидна, создайте минимальный рабочий пример: документ, содержащий только \documentclass, два подозрительных пакета и \begin{document}...\end{document} с одной строкой текста. Если ошибка повторяется, переключайте порядок загрузки и параметры до тех пор, пока она не исчезнет. Если он не воспроизводится, добавьте остальные пакеты обратно пополам, пока он не вернется. Этот бинарный поиск объединяется в несколько компиляций и дает вам четкую пару для поиска. Тот же метод спасает унаследованные преамбулы, как описано в Файлы университетских классов, которые не компилируются.