Не заставляйте меня вручную прерывать компиляцию 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
.