Не заставляйте меня вручную прерывать компиляцию LaTeX при возникновении ошибки.
-
09-09-2019 - |
Вопрос
Как предложено здесь, latexmk
— это удобный способ непрерывно компилировать документ при каждом изменении источника.Но часто при работе над документом возникают ошибки, а затем latex
будет паниковать и ждать ввода пользователя, прежде чем продолжить.Это может очень раздражать, особенно недавно, когда я что-то взломал для компиляции. latex
прямо из Ethernet-панель документ, который постоянно сохраняется по мере ввода.
Есть ли настройка для latex
или latexmk
чтобы он просто прервался с сообщением об ошибке, если он не может скомпилироваться?Или, если необходимо, как мне настроить какой-нибудь сценарий Expect для автоматического отклонения жалоб LaTeX?
(Я думал pdflatex
вариант -halt-on-error
помогло бы, но видимо нет.)
Бонусный вопрос:Skim для Mac OSX — это хорошая программа для просмотра PDF-файлов, которая автоматически обновляется при изменении PDF-файла (в отличие от Preview). кроме что всякий раз, когда возникает латексная ошибка, вам приходится повторно подтверждать, что вы хотите автообновление.У Texniscope такой проблемы нет, но мне пришлось отказаться от Texniscope ради другие причины.Есть ли способ заставить Skim всегда автоматически обновляться, или есть другой просмотрщик, который это понимает?
ДОБАВЛЕН:Мини-урок по 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
Использовать Снимать или другое средство просмотра PDF-файлов в реальном времени для просмотра foo.pdf.Для Skim просто посмотрите вкладку «Синхронизация» в настройках Skim и настройте ее для своего редактора.
Вуаля!Нажимаем «Сохранить» foo.tex
теперь вызовет foo.pdf
обновиться, ничего не трогая.
Решение
С МикТексом, pdflatex
имеет эту опцию командной строки:
-interaction=MODE Set the interaction mode; MODE must be one
of: batchmode, nonstopmode, scrollmode,
errorstopmode.
Изменение, предложенное @9999years:
Эти значения эквивалентны набору LaTeX. \commands
которые обеспечивают ту же функциональность.
От Советы по использованию TeX:
Режимы заставляют TeX вести себя следующим образом:
errorstopmode
Останавливается на все ошибки, будь то об ошибках в исходном коде или не существующих файлах.
scrollmode
Не останавливается на ошибках в источнике, но запрашивает ввод, когда возникает более серьезная ошибка, подобная отсутствующему файлу.В несколько неправильно названном
nonstopmode
, Текс не запрашивает вклад после серьезных ошибок, но вообще останавливается.
batchmode
Предотвращает все выходные данные в дополнение к этому (предназначенное для использования в автоматических сценариях).Во всех случаях все ошибки записываются в файл журнала (yourtexfile.log).
Другие советы
Вы также можете поставить \nonstopmode
или \batchmode
в самом начале вашего tex-файла;тогда он будет работать с любой версией TeX, а не только pdflatex
.Дополнительную информацию об этих и связанных с ними командах см. в очень хорошем материале. ссылка на (необработанные) команды TeX Дэвида Баусума.Особенно команда из семейство отладчиков может быть здесь интересен.
Другой возможный хак — просто использовать:
yes x | latexmk source.tex
Вы всегда можете создать псевдоним для 'Да x | LatexMk 'Если вы собираетесь использовать эту опцию.Основное преимущество этого подхода, которое я вижу над другими предложениями, заключается в том, что это очень быстро, когда вам иногда нужно, чтобы latexmk вел себя подобным образом.
Мехмет
Существует также \batchmode
команда может выполнить работу.