当 LuaLaTeX/fontspec 使用字体(例如 Erewhon-Regular.otf)时,它会创建一个文件 erewhon-regular.lua,该文件放在(用户的)Library/texlive/2022/texmf-var/luatex-cache/generic/fonts/otl/ 中。实际上,它是此字体的 OpenType 表的 lua 版本。可以使用 lua 程序中的 loadfile 读取此文件。可以使用 luacode+luaotfload 函数(例如 fonts.hashes.identifiers[font.current()])获取相同的 OpenType 信息。奇怪的是,有些信息在两种方式下都相同,有时则不同。在这种情况下,会出现奇怪的结果,例如 rot13 或崩溃...
例子:
\documentclass{scrartcl}%
\usepackage{fontspec,luacode,luaotfload}
\begin{luacode*}
function check()
print("type of myt=",type(myt))
print("cache_version= ",myt.cache_version)
print("creator= ",myt.creator)
print("tableversion= ",myt.tableversion)
local mygsub=myt.resources.features.gsub
for k, v in pairs(mygsub) do print("k=",k) print(" v=",v)
end
end-- check
function OT()--
fff = assert (loadfile ("/Users/jacquesandre/Library/texlive/2022/texmf-var/luatex-cache/generic/fonts/otl/erewhon-regular.lua"))-- user dependent
myt=fff()
print("FROM FILE .lua")
check()
local f = fonts.hashes.identifiers[font.current()]
myt=f.shared.rawdata
print("FROM FONT .lua")
check()
end--OT
\end{luacode*}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\def\OT#1{\directlua{OT"#1"}}
\begin{document}
\fontspec{Erewhon-Regular}%or any other font
\OT{}
\end{document}
...
The output is as follows (extracts):
...
FROM FILE .lua
type of myt= table
cache_version= 3.119
creator= context mkiv
tableversion= 0.004
k= ss02
v= 212
k= aalt
v= 219
k= tnum
v= 215
FROM FILE .lua
type of myt= table
cache_version= 3.119
creator= context mkiv
tableversion= 0.004
k= ss02
v= 212
k= aalt
v= 219
k= tnum
v= 215
k= rot13
v= table: 0x600001f8f580
k= collapse
v= table: 0x600001f95080
etc.
我的程序有什么问题?