我想使用 LuaTeX 的字体表打印字体名称(全名、ps 名称、文件名等)。以前它工作正常,但最近我遇到了来自 luaotfload 的错误消息
这是一个最小的工作示例,
\documentclass{article}
\usepackage{fontspec}
% \setmainfont{Minion Pro}
\begin{document}
\directlua{
local str = font.fonts[font.current()].fullname
tex.sprint(-2, str)
}
\end{document}
此示例在使用 LuaTeX 编译时可以正常工作。输出 PDF 包含字符串LMRoman10-Regular
,这是默认字体。但是,如果我不注释掉该setmainfont
行,即加载 Minion Pro 字体,则会收到以下错误消息,
error: ...3/texmf-dist/tex/luatex/luaotfload/luaotfload-merged.lua:7656: attempt to perform arithmetic on local 'factor' (a nil value)
.
\newpage ...k \@nobreakfalse \everypar {}\fi \par
\vfil \penalty -\@M
相关线路luaotfload-merged.lua
如下:
function injections.setkern(current,factor,rlmode,x,tfmchr)
local dx=factor*x
if dx~=0 then
local bound=#kerns+1
setattr(current,a_kernpair,bound)
kerns[bound]={ rlmode,dx }
return dx,bound
else
return 0,0
end
end
当我tex.sprint
用 替换该行时inspect
,控制台正确显示Minion Pro Regular
。
有人知道这里发生了什么事吗?
我正在使用最新的 TeXLive 2013 安装。
答案1
索引font.fonts
表可能会导致字体加载器布局的数据结构被覆盖。 提供对这些字体的安全访问font.getfont()
。 如果您想检索其他字体(例如 TFM/OFM 或虚拟字体),那么您必须编写一个包装器,如下所示:
local fontdata = fonts.hashes.identifiers
local my_getfont = function (id)
local f = fontdata[id]
if f then
return f
end
return font.fonts[id]
end
fonts.hashes.identifiers
字体加载器将其初始化的字体保存在哪里。