как использовать -interaction=batchmode, но в то же время останавливать и выводить на терминал сообщение об ошибке?

как использовать -interaction=batchmode, но в то же время останавливать и выводить на терминал сообщение об ошибке?

Я провел эксперимент и обнаружил, что использование -interaction=batchmodelualatex сокращает время компиляции больше всего на одном большом файле 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

поэтому он показывает только журнал ошибок

Связанный контент