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

Как предлагается здесь, latexmk это удобный способ постоянно компилировать ваш документ при изменении источника. Но часто, когда вы работаете над документом, вы получаете ошибки, а затем latex будет паниковать и ждать ввода пользователя, прежде чем продолжить. Это может очень раздражать, особенно в последнее время, когда я взломал что-то для компиляции latex непосредственно из документа etherpad, который непрерывно сохраняется при вводе текста.

Есть ли настройка для latex или же latexmk сделать его просто прервать с сообщением об ошибке, если он не может скомпилировать? Или, если необходимо, как мне установить какой-нибудь сценарий Expect для автоматического отклонения жалоб LaTeX?

(Я думал pdflatex вариант -halt-on-error сделал бы трюк, но, видимо, нет.)

Дополнительный вопрос: Skim на Mac OSX - это хороший просмотрщик PDF, который автоматически обновляется при изменении pdf (в отличие от Preview), за исключением того, что всякий раз, когда возникает ошибка латекса, он подтверждает, что вы хотите автоматическое обновление. У Texniscope такой проблемы нет, но мне пришлось отказаться от Texniscope по другим причинам. Есть ли способ сделать Skim всегда автоматически обновляемым, или есть другой зритель, который понимает это правильно?


ДОБАВЛЕНО: Мини-учебник по latexmk основываясь на ответе на этот вопрос:

  1. Получить latexmk здесь: http://www.phys.psu.edu/~collins/software/latexmk-jcc/

  2. Добавьте следующее к вашему ~/.latexmkrc файл:

    $pdflatex = 'pdflatex -interaction=nonstopmode';
    

    (Для OS X с Skim)

    $pdf_previewer = "open -a /Applications/Skim.app";
    
  3. При редактировании вашего исходного файла, foo.tex запустите следующее в терминале:

    latexmk -pvc -pdf foo.tex
    
  4. Используйте Skim или другую программу просмотра PDF в реальном времени для просмотра foo.pdf. Для Skim, просто посмотрите на вкладку "Синхронизация" в настройках Skim и настройте ее для своего редактора.

Вуаля! Удар экономить на foo.tex теперь вызовет foo.pdf освежить, не касаясь ничего.

4 ответа

Решение

С MikTeX, pdflatex имеет эту опцию командной строки:

  -interaction=MODE               Set the interaction mode; MODE must be one
                                  of: batchmode, nonstopmode, scrollmode,
                                  errorstopmode.

Редактировать предлагается @9999 лет:

Эти значения эквивалентны набору LaTeX \commands которые обеспечивают ту же функциональность.

Из советов по использованию TeX:

Режимы заставляют TeX вести себя следующим образом:

  • errorstopmode останавливается на всех ошибках, будь то ошибки в исходном коде или несуществующие файлы.

  • scrollmode не останавливается на ошибках в источнике, но запрашивает ввод, когда происходит более серьезная ошибка, такая как, например, отсутствующий файл.

  • В несколько неправильно названном nonstopmodeTeX не запрашивает ввод после серьезных ошибок, но полностью останавливается.

  • batchmode предотвращает весь вывод в дополнение к этому (предназначен для использования в автоматизированных сценариях). Во всех случаях все ошибки записываются в файл журнала (yourtexfile.log).

Вы также можете положить \nonstopmode или же \batchmode в самом начале вашего текстового файла; тогда он будет работать с любой версией TeX, а не только pdflatex, Для получения дополнительной информации об этих и связанных с ними командах см. Очень хороший справочник по (необработанным) командам TeX от David Bausum. Особенно интересна команда из отладочной семьи.

Другой возможный хак - просто использовать:

yes x | latexmk source.tex

Вы всегда можете создать псевдоним для "да х | latexmk', если вы собираетесь использовать эту опцию много. Основное преимущество этого, которое я вижу выше других предложений, состоит в том, что это очень быстро, когда вы иногда хотите, чтобы latexmk вел себя так.

Мехмет

Также есть \batchmode команда может сделать работу.

Другие вопросы по тегам