syntonly:警告(字体):lua 加载的字体“16”,名称为“dummy”,没有字符

syntonly:警告(字体):lua 加载的字体“16”,名称为“dummy”,没有字符

我在编译使用 LuaLaTeX 的文档时收到此警告syntonly。每种字体是否都有一个 ID 和 16 个链接指向已加载的第 16 种字体?虚拟字体在哪里?为什么我会收到此警告?

这是误报吗,因为假人总是空的?

\documentclass[11pt,a4paper]{article}
\usepackage{syntonly}
\syntaxonly
\begin{document}
Test
\end{document}

答案1

在过去,排版一本大书可能需要小时。大部分时间都花在将段落分成行、将段落分成页和 I/O 操作上。现代机器的开销很小,而在 80 年代,开销很大。

TeXbook 的附录 D 有一节关于“仅进行语法检查”而不进行排版的内容,并建议使用没有字符但具有足够的字体参数以用作数学符号字体​​(即 22)的虚拟字体,并将所有字体的字体关联更改为此虚拟字体。

当 Michael Spivak 编写 AMS-TeX 时,他采纳了这个建议,并且 AMS-TeX 确实附带了dummy.tfm

如果你仔细研究amstex.tex,你会发现每种字体都使用与纯 TeX 不同的语法加载,即

\font@\tenmsa=msam10

定义是

\def\font@#1=#2 {\rightappend@#1\to\fontlist@\font#1=#2 }

这意味着 AMS-TeX 维护着已定义字体的列表,因此可以发出\syntax执行多项操作的命令,其中包括遍历\fontlist@列表并执行\font\tenmsa=dummy(对每个已定义字体执行相同操作);除此之外\tracinglostchars=0,它还会执行其他操作,以免日志文件中充斥着大量“缺少字符”警告。

因此,文档将被编译,并且不会设置任何文本(嗯,几乎没有文本),但宏将被扩展并可捕获错误。

LaTeX2e 利用了此方案,并提供了syntonly基本上模仿 AMS-TeX\syntax命令所做操作的软件包,但使用 LaTeX 的字体选择方案。\syntaxonly如果您只想执行语法检查,您还需要。

因此,如果您加载该syntonly包,您将收到 LuaTeX 的警告,提示该dummy字体没有字符,因为实际上它没有字符。

这是的人类可读版本dummy.tfm,它现在是套件的一部分amsfonts

(FAMILY UNSPECIFIED)
(FACE F MRR)
(CODINGSCHEME NULL FONT FOR SYNTAX CHECKING)
(DESIGNSIZE R 10.0)
(COMMENT DESIGNSIZE IS IN POINTS)
(COMMENT OTHER SIZES ARE MULTIPLES OF DESIGNSIZE)
(CHECKSUM O 1234567)
(FONTDIMEN
   (SLANT R 0.0)
   (SPACE R 0.0)
   (STRETCH R 0.0)
   (SHRINK R 0.0)
   (XHEIGHT R 0.0)
   (QUAD R 0.0)
   (EXTRASPACE R 0.0)
   (PARAMETER D 8 R 0.0)
   (PARAMETER D 9 R 0.0)
   (PARAMETER D 10 R 0.0)
   (PARAMETER D 11 R 0.0)
   (PARAMETER D 12 R 0.0)
   (PARAMETER D 13 R 0.0)
   (PARAMETER D 14 R 0.0)
   (PARAMETER D 15 R 0.0)
   (PARAMETER D 16 R 0.0)
   (PARAMETER D 17 R 0.0)
   (PARAMETER D 18 R 0.0)
   (PARAMETER D 19 R 0.0)
   (PARAMETER D 20 R 0.0)
   (PARAMETER D 21 R 0.0)
   (PARAMETER D 22 R 0.0)
   )

相关内容