Use Lua para sinalizar avisos de fonte

Use Lua para sinalizar avisos de fonte

Usando lualatex, TeXlive2024, Linux.

Em umpergunta anterior, Marcel Krüger mostrou como usar Lua para controlar erros. Em essência, esse código define um sinalizador, se algum erro for relatado. No final posso detectar a flag com outro código, fazer algo no PDF (modificar seus metadados) e escrever uma mensagem final no Terminal. Eu uso isso o tempo todo. Muito útil.

Existem outros métodos (hacks simples de código LaTeX) para definir um sinalizador, quando uma mensagem chega através do mecanismo GenericError ou GenericWarning.

Mas não consegui usar o método flag, quando o problema é causado pela falta de um caractere. Eu procurei Missing charactere Missing~character entrei texmf-distsem sucesso, então (pelo menos para lualatex) a mensagem é gerada pelo binário. MWE:

\documentclass{article}
% Compile with lualatex, which uses fontspec and Latin Modern Roman.
\begin{document}
I could use a ⛾ right now.
\end{document}

Se compilado com pdflatex, este erro resultará: ! LaTeX Error: Unicode character ⛾ (U+26FE) not set up for use with LaTeX. O compilador para aí. Se o usuário continuar após a mensagem de erro, um PDF será produzido. Se estiver usando TeXworks, o erro será detectado e relatado entre “erros, avisos, caixas ruins”.

Se compilado com lualatex, há uma mensagem de não erro, o compilador continua até o final, sem parar: Missing character: There is no ⛾ (U+26FE) in font [lmroman10-regular]:+tlig;! Se estiver usando TeXworks, não é detectado entre "erros, avisos, caixas ruins".

O rastreamento de erros Lua não detecta a mensagem de caracteres ausentes. Tentei hackear o código mudando errorpara warning(pausa para risadas), mas não funcionou.

Então, minha pergunta é: como posso definir um sinalizador quando um caractere está faltando? Não é necessário registrar o caractere, a fonte ou a página. Apenas um simples verdadeiro/falso que posso detectar AtEndDocument. Pseudo-código:

\documentclass{article}
\newif\iffoo
\directlua{
% This would be the code that sets the foo flag, if missing character.
}
\AtEndDocument{\iffoo\typeout{EEEEEEEK}\fi}
\begin{document}
I could use a ⛾ right now.
\end{document}

Aliás, estou ciente do mecanismo de fonte substituta. Se um fallback for usado, a mensagem de caractere faltante só será gerada se também estiver faltando no fallback.

Por que quero fazer isso: em meu fluxo de trabalho, um PDF problemático deve conter metadados marcando-o como não pronto. Eu sei como escrever esses metadados AtEndDocument.

Reflexão posterior: opcionalmente, habilito o lua-typopacote para detectar problemas de legibilidade que não sejam problemas de PDF. Incrível.

Responder1

O registro LuaTeX \tracinglostcharsdeve ser definido como 3. Então o caractere ausente na fonte atual se comporta como um erro normal.

informação relacionada