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

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

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

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

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

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

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

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

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


person Alex Humphrey    schedule 14.07.2010    source источник
comment
Вам также следует попробовать задать этот вопрос на странице tex.stackexchange.com.   -  person Phil Miller    schedule 11.08.2010


Ответы (2)


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

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

Тогда вас может заинтересовать пакет тишина для фильтрации предупреждений. .

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

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

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

person Gilles 'SO- stop being evil'    schedule 18.07.2010

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

Вот несколько непроверенных изолент, которые могут пригодиться:

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

Его можно поместить в файл пакета, который вам нужно включить в документацию, или запечь в локальном файле Latex .fmt.

person Charles Stewart    schedule 14.07.2010
comment
Спасибо, Чарльз, попробую в ближайшие несколько дней. - person Alex Humphrey; 16.07.2010