使用 lualatex、TeXlive2024、Linux。
在一个先前的问题,Marcel Krüger 展示了如何使用 Lua 来跟踪错误。本质上,如果报告了任何错误,该代码会设置一个标志。最后,我可以用其他代码检测该标志,在 PDF 中执行某些操作(修改其元数据),并在终端中写入最终消息。我一直都在使用它。非常有帮助。
当消息通过 GenericError 或 GenericWarning 机制传来时,还有其他方法(简单的 LaTeX 代码黑客)可以设置标志。
但是,当问题是由缺少字符引起的时,我无法使用标志方法。我使用 grepMissing character
和Missing~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,则不会在“错误、警告、坏框”中检测到它。
error
Lua 错误跟踪无法检测到缺失字符消息。我尝试通过更改为(暂停以示笑声)来破解代码,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。然后当前字体中缺失的字符将表现为常规错误。