Как обрабатывать предупреждения LaTeX как ошибки

Я использую MiKTeX 2.8 для Windows.

Мы разрабатываем программное обеспечение в первую очередь и используем LaTeX для составления наших пользовательских инструкций. Мы используем LaTeX, потому что:

  • Это отлично подходит для управления версиями для отслеживания изменений и т.д.
  • Исходные файлы не могут внезапно стать коррумпированными, в отличие от документов Word.
  • Несколько документов могут делиться отдельными разделами, поэтому мы можем применить принцип DRY к нашей документации и не допустить, чтобы некоторые документы не синхронизировались с другими. У вас могут быть основные документы в Word, но я обнаружил, что они неровные, как черт.

Как часть процесса автоматической сборки на нашем сервере сборки, мы создаем документацию с помощью исполняемого файла MiKTeX texify. Это работает достаточно хорошо.

Однако проблемы возникают, когда разработчик делает ошибку (например, a\ref to\label, которая не существует). Подобная ошибка генерирует предупреждение только в LaTeX. Предупреждение остается незамеченным texify, и у нас остались ошибки в документации.

В настоящее время у меня есть шаг сборки, который сканирует файлы журнала для строк, начинающихся с "LaTeX Warning", и не удается построить, если они есть. Это работает, но, очевидно, довольно шелушатся и может пропустить предупреждения. В настоящее время он не используется для локальных построений на машинах dev, но если это единственный способ сделать это, мне, возможно, придется интегрировать его с редактором, который мы сейчас используем (TeXworks поставляется с MiKTeX).

Я хотел бы скомпрометировать сборку, если возникнут какие-либо предупреждения, такие как ссылка undefined, и я бы предпочел не делать шелушащихся файлов журналов. Что-нибудь предлагает эту функцию?

Если я могу использовать эту функцию в локальных сборках на машинах dev, а также на сервере сборки, это будет огромный бонус.

Ответ 1

Следующий (непроверенный) код должен превратить любое предупреждение в ошибку:

\renewcommand{\GenericWarning}[2]{\GenericError{#1}{#2}{}{This warning has been turned into a fatal error.}}

Затем вам может быть интересен пакет silence для фильтрации предупреждений.

Однако вам также нужно будет сделать это только для последнего запуска LaTeX, потому что некоторые предупреждения, такие как undefined ссылка, следует ожидать во время первых прогонов.

Редакторы с хорошей поддержкой LaTeX расскажут вам, нужно ли повторно запускать LaTeX (не работает ли TeXworks?). Они делают это путем анализа вывода консоли или файла журнала. Это на самом деле достаточно надежный (и если вы действительно волнуетесь, вы можете переопределить \GenericWarning, чтобы добавить характерную строку ко всем предупреждениям). Я думаю, что анализ журналов - это правильный способ сделать это.

Подумайте об этом как об испытании для работы с документацией. Если есть ссылки undefined, сборка документации завершается успешно. Продукты сборки - это pdf (или что-то еще) и журналы TeX. Проверка предупреждений в журналах - это тест.

Ответ 2

Лучше всего было бы это сделать через управление заданиями на латекс, но я не знаю, как это сделать.

Вот некоторая непроверенная клейкая лента, которая может быть полезна:

\def\exitfromtex{\nonstopmode\read16to\dummy}
\let\writerrmessage\errmessage
\def\errmessage#1{\writerrmessage{#1}\exitfromtex}

Он может быть помещен в файл пакета, который вам нужно, чтобы ваши документаторы включали или испекли в ваш локальный файл Latex.fmt.