使用 Lua 标记字体警告

使用 Lua 标记字体警告

使用 lualatex、TeXlive2024、Linux。

在一个先前的问题,Marcel Krüger 展示了如何使用 Lua 来跟踪错误。本质上,如果报告了任何错误,该代码会设置一个标志。最后,我可以用其他代码检测该标志,在 PDF 中执行某些操作(修改其元数据),并在终端中写入最终消息。我一直都在使用它。非常有帮助。

当消息通过 GenericError 或 GenericWarning 机制传来时,还有其他方法(简单的 LaTeX 代码黑客)可以设置标志。

但是,当问题是由缺少字符引起的时,我无法使用标志方法。我使用 grepMissing characterMissing~character intexmf-dist都没有成功,因此(至少对于 lualatex)消息是由二进制文件生成的。MWE:

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

如果使用 进行编译pdflatex,则会出现以下错误: ! LaTeX Error: Unicode character ⛾ (U+26FE) not set up for use with LaTeX. 编译器在此处停止。如果用户忽略错误消息继续操作,则会生成 PDF。如果使用 TeXworks,则会检测到错误,并在“错误、警告、坏框”中报告该错误。

如果使用 进行编译lualatex,则没有错误消息,编译器将继续运行到最后,而不会暂停: Missing character: There is no ⛾ (U+26FE) in font [lmroman10-regular]:+tlig;! 如果使用 TeXworks,则不会在“错误、警告、坏框”中检测到它。

errorLua 错误跟踪无法检测到缺失字符消息。我尝试通过更改为(暂停以示笑声)来破解代码,warning但没有成功。

所以我的问题是,当一个字符缺失时,我该如何设置标志?它不需要记录字符、字体或页面。只需一个简单的真/假,我就可以检测到 AtEndDocument。伪代码:

\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}

顺便说一句,我知道后备字体机制。如果使用后备,则只有在后备中也缺少字符时才会生成缺失字符消息。

我为什么要这样做:在我的工作流程中,有问题的 PDF 必须包含标记为未就绪的元数据。我知道如何将该元数据写入 AtEndDocument。

事后想法:我可以选择启用该lua-typo包来检测不是 PDF 问题的可读性问题。太神奇了。

答案1

LuaTeX 寄存器\tracinglostchars应该设置为 3。然后当前字体中缺失的字符将表现为常规错误。

相关内容