![syntonly:警告(字体):lua 加载的字体“16”,名称为“dummy”,没有字符](https://linux22.com/image/398434/syntonly%EF%BC%9A%E8%AD%A6%E5%91%8A%EF%BC%88%E5%AD%97%E4%BD%93%EF%BC%89%EF%BC%9Alua%20%E5%8A%A0%E8%BD%BD%E7%9A%84%E5%AD%97%E4%BD%93%E2%80%9C16%E2%80%9D%EF%BC%8C%E5%90%8D%E7%A7%B0%E4%B8%BA%E2%80%9Cdummy%E2%80%9D%EF%BC%8C%E6%B2%A1%E6%9C%89%E5%AD%97%E7%AC%A6.png)
我在编译使用 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)
)