
Fiz um experimento e descobri que usar -interaction=batchmode
lualatex reduz ao máximo o tempo de compilação em um grande arquivo de látex que tenho. Caiu de 77 minutos para 45 minutos. Tudo em Linux WSL-2 Ubuntu 20.04. Isso foi ainda mais rápido do que usar lualatex foo.tex >/dev/null
(55 minutos), pois a saída foi eliminada diretamente da fonte e nenhuma saída foi necessária para ser redirecionada para/dev/null
http://latexref.xyz/Command-line-options.html
Portanto, quero alterar meus Makefiles para usar isso. O grande problema é que não vejo mais os erros na tela quando eles acontecem. Tudo vai para o arquivo de log.
Existe uma maneira de usar, -interaction=batchmode
mas faça parareexibir o erro na tela? Caso contrário, agora tenho que abrir o arquivo de log todas as vezes para descobrir se o arquivo foi compilado com ou sem erros.
Isso não é prático, pois tenho dezenas de milhares de arquivos Latex para compilar e preciso parar e ver a mensagem de erro quando isso acontecer, e não mais tarde.
Aqui está um MWE com um erro
\documentclass{report}%
\begin{document}
This is a test
\sin x
\end{document}
Agora
>lualatex -interaction=batchmode foo.tex
This is LuaHBTeX, Version 1.15.0 (TeX Live 2022)
restricted system commands enabled.
>
Nada é exibido na tela. O erro aparece no arquivo de log. Eu também tentei
>lualatex -halt-on-error -interaction=batchmode foo.tex
This is LuaHBTeX, Version 1.15.0 (TeX Live 2022)
restricted system commands enabled.
>
Existe uma maneira de fazer o batchmode exibir os erros de compilação na tela e parar então?
Eu uso apenas Lualatex.
Atualizar
Graças à dica, verificar o status existente do Lualatex é tudo o que é necessário para saber se ele foi concluído com sucesso ou não. Não há necessidade de procurar no arquivo de log.
Responder1
Se você deseja apenas determinar se um erro ocorreu ou não, você pode observar o status de saída do lualatex
comando: Será 0 se nenhum erro ocorreu, caso contrário, será 1. Em caso de erro, você pode então consultar o arquivo de log.
Se você quiser ver os erros diretamente, você também pode usar retornos de chamada Lua.
Crie um arquivo mybatchmode.lua
contendo
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)
e então corra
lualatex -lua=mybatchmode.lua file
Para o arquivo de exemplo da sua pergunta, isso resultaria em
This is LuaHBTeX, Version 1.15.0 (TeX Live 2022)
restricted system commands enabled.
! Missing $ inserted.
Responder2
Você pode usar
lualatex --interaction=batchmode file || cat file.log
então só mostra o erro de logon