Как мне воспринимать предупреждения LaTeX как ошибки? - PullRequest
12 голосов
/ 14 июля 2010

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

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

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

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

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

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

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

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

Ответы [ 2 ]

4 голосов
/ 19 июля 2010

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

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

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

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

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

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

1 голос
/ 14 июля 2010

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

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

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

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

...