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

Как указано здесь , 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 ]

38 голосов
/ 11 апреля 2009

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

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

Правка, предложенная @ 9999years:

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

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

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

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

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

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

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

6 голосов
/ 20 октября 2011

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

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

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

yes x | latexmk source.tex

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

Мехмет

0 голосов
/ 21 июля 2010

Существует также команда \batchmode , которая может выполнить эту работу.

...