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

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

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

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

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


ADDED: мини-учебник по latexmk на основе ответа на этот вопрос:

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

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

    $pdflatex = 'pdflatex -interaction=nonstopmode';
    

    (для OS X с Skim)

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

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

Voila! Нажатие save foo.tex теперь вызывает foo.pdf для обновления, не касаясь вещи.

Ответ 1

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

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

Изменить, предложенное @9999 лет:

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

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

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

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

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

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

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

Ответ 2

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

Ответ 3

Другой возможный взлом - это просто:

yes x | latexmk source.tex

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

Мехмет

Ответ 4

Также может выполняться команда \batchmode .