
Я провел эксперимент и обнаружил, что использование -interaction=batchmode
lualatex сокращает время компиляции больше всего на одном большом файле latex, который у меня есть. С 77 минут до 45 минут. Все на Linux WSL-2 Ubuntu 20.04. Это было даже быстрее, чем использование lualatex foo.tex >/dev/null
(55 минут), поскольку вывод был удален прямо из источника, и никакой вывод даже не нужно было перенаправлять на/dev/null
http://latexref.xyz/Command-line-options.html
Поэтому я хочу изменить свои Makefiles, чтобы использовать это. Большая проблема в том, что я больше не вижу ошибок на экране, когда они происходят. Все идет в файл журнала.
Есть ли способ использовать -interaction=batchmode
, но остановить это?ивывести ошибку на экран? Иначе мне теперь придется каждый раз открывать файл журнала, чтобы узнать, скомпилирован ли файл с ошибкой или без.
Это непрактично, поскольку мне нужно скомпилировать десятки тысяч файлов Latex, и мне нужно остановиться и посмотреть сообщение об ошибке, когда оно возникнет, а не позже.
Вот MWE с ошибкой
\documentclass{report}%
\begin{document}
This is a test
\sin x
\end{document}
Сейчас
>lualatex -interaction=batchmode foo.tex
This is LuaHBTeX, Version 1.15.0 (TeX Live 2022)
restricted system commands enabled.
>
На экране ничего не отображается. Ошибка отображается в файле журнала. Я также пробовал
>lualatex -halt-on-error -interaction=batchmode foo.tex
This is LuaHBTeX, Version 1.15.0 (TeX Live 2022)
restricted system commands enabled.
>
Есть ли способ заставить пакетный режим отображать ошибки компиляции на экране и на этом остановиться?
Я использую только Lualatex.
Обновлять
Благодаря подсказке проверка существующего статуса Lualatex — это все, что нужно, чтобы узнать, успешно ли он завершился или нет. Не нужно смотреть в лог-файл.
решение1
Если вы хотите только определить, произошла ли ошибка или нет, вы можете посмотреть на статус завершения команды lualatex
: он будет равен 0, если ошибки не произошло, в противном случае он будет равен 1. В случае ошибки вы можете посмотреть файл журнала.
Если вы хотите увидеть ошибки напрямую, вы также можете использовать обратные вызовы Lua.
Создайте файл, mybatchmode.lua
содержащий
texconfig.interaction = 0 -- Activate batchmode
texconfig.halt_on_error = true -- Stop at first error
callback.register('show_error_message', function(...)
texio.write_nl('term and log', status.lasterrorstring)
texio.write('term', '.\n')
end)
callback.register('show_lua_error_hook', function(...)
texio.write_nl('term and log', status.lastluaerrorstring)
texio.write('term', '.\n')
end)
а затем беги
lualatex -lua=mybatchmode.lua file
Для примера файла в вашем вопросе это приведет к следующему:
This is LuaHBTeX, Version 1.15.0 (TeX Live 2022)
restricted system commands enabled.
! Missing $ inserted.
решение2
Вы можете использовать
lualatex --interaction=batchmode file || cat file.log
поэтому он показывает только журнал ошибок