Как мне воспринимать предупреждения LaTeX как ошибки
Я использую дистрибутив MiKTeX 2.8 для Windows.
В первую очередь мы разрабатываем программное обеспечение и используем LaTeX для составления инструкций для пользователя. Мы используем LaTeX, потому что:
- Это отлично под контролем источника для отслеживания изменений и т. Д.
- В отличие от документов Word, исходные файлы не могут внезапно стать испорченными.
- Несколько документов могут совместно использовать отдельные разделы, поэтому мы можем применить принцип DRY к нашей документации и избежать синхронизации некоторых документов с другими. У вас могут быть основные документы в Word, но я считаю, что они чертовски неповоротливы.
В качестве части процесса автоматической сборки на нашем сервере сборки мы создаем документацию с использованием исполняемого файла MiKTeX texify. Это работает довольно хорошо.
Однако проблемы возникают, когда разработчик делает ошибку (например, \ ref to \ label, который не существует). Такая ошибка генерирует предупреждение только в LaTeX. Предупреждение остается незамеченным для texify, и мы оставляем ошибки в документации.
В настоящее время у меня есть шаг сборки, который сканирует файлы журналов для строк, начинающихся с "LaTeX Warning", и завершает сборку, если таковые имеются. Это работает, но, очевидно, довольно ненадежно и может пропустить предупреждения. В настоящее время он не используется в локальных сборках на компьютерах разработчиков, но если это единственный способ сделать это, мне, возможно, придется интегрировать его с редактором, который мы в настоящее время используем (TeXworks поставляется с MiKTeX).
Я хотел бы прервать сборку, если появятся какие-либо предупреждения, такие как неопределенная ссылка, и я бы предпочел не делать случайные проверки файлов журналов. Что-нибудь предлагает эту функцию?
Если бы я мог использовать эту функцию в локальных сборках на машинах разработчиков, а также на сервере сборки, это было бы огромным бонусом.
3 ответа
Следующий (непроверенный) код должен превратить любое предупреждение в ошибку:
\renewcommand{\GenericWarning}[2]{\GenericError{#1}{#2}{}{This warning has been turned into a fatal error.}}
Тогда вас может заинтересовать пакет молчания для фильтрации предупреждений.
Однако вам также необходимо организовать это только для последнего запуска LaTeX, потому что некоторые предупреждения, такие как неопределенная ссылка, следует ожидать во время первых запусков.
Редакторы с хорошей поддержкой LaTeX скажут вам, если вам нужно перезапустить LaTeX (разве TeXworks не делает это?). Они делают это, анализируя вывод консоли или файл журнала. Это на самом деле достаточно надежно (и если вы действительно беспокоитесь, вы можете переопределить \GenericWarning
добавить характерную строку ко всем предупреждениям). Я думаю, что синтаксический анализ журналов является правильным способом сделать это.
Думайте об этом как о тесте для запуска против документации. Если есть неопределенные ссылки, сборка документации завершается успешно. Продукты для сборки - это pdf (или любой другой) и журналы TeX. Проверка предупреждений в журналах - это тест.
Было бы лучше сделать это с помощью управления заданиями из латекса, но я не знаю, как это сделать.
Вот некоторая непроверенная клейкая лента, которая может быть полезна:
\ Защита \exitfromtex{\nonstopmode\read16to\ фиктивная} \ Пусть \ writerrmessage \ errmessage \ Защита \errmessage#1{\writerrmessage{#1}\exitfromtex}
Он может быть помещен в файл пакета, который требуется включить в документацию, или запекать в локальный файл Latex .fmt.
Вы можете использовать мой fail-fast
пакет, который делает именно то, что было предложено :
\documentclass{article}
\usepackage{fail-fast}
\begin{document}
This reference is broken: \ref{foo}
\end{fail-fast}
\end{document}
Этот документ не скомпилируется,pdflatex
выйдет из строя с ошибкой.