luaotftool
假设我通过这样的方式加载字体
\font\MyFont="OpenSans:mode=node;" at 10pt
现在,我可以按如下方式确定这是否是可变粗细字体:
\directlua{ local isVariableWeight = luaotfload.aux.provides_axis(\fontid\MyFont,'wght') }
我想知道是否有一种简单的方法可以一次列出所有字体轴。
答案1
下面的 MWE 提供了必要的数据。(要用 LuaLaTeX 进行编译,例如lualatex mwe.tex
)
关键部分是数据的“路径”:
luaotfload.fontloader.fonts.hashes.identifiers[<fontid>].resources.variabledata
\documentclass{article}
\directlua{ require 'mwe.lua' }
\font\MyFont="OpenSans:mode=node;" at 10pt
\begin{document}
\setlength{\parindent}{0pt}
\directlua{ PrintVariableData(\fontid\MyFont,5) }
\end{document}
-- file: mwe.lua
local indentsize = 10
function PairsByKeys(t, f) -- from https://www.lua.org/pil/19.3.html
local a = {}
for n in pairs(t) do table.insert(a, n) end
table.sort(a, f)
local i = 0
local iter = function ()
i = i + 1
if a[i] == nil then return nil
else return a[i], t[a[i]]
end
end
return iter
end
function PrintTableRecursiveAux(t, indent, depth)
if type(t) == 'table' then
for k, v in PairsByKeys(t) do
tex.sprint('\\hspace{' .. indent .. 'mm}\\verb|' .. tostring(k) .. '| \\texttt{=} \\verb|' .. tostring(v) .. '|\\par')
if type(v) == 'table' and depth > 0 then
PrintTableRecursiveAux(v, indent+indentsize, depth - 1)
end
end
else
tex.sprint('\\hspace{' .. indent .. 'mm}\\verb|' .. tostring(t) .. '|\\par')
end
end
function PrintTableRecursive(t, depth)
PrintTableRecursiveAux(t, 0, depth or 0)
end
function PrintVariableData(fontid, depth)
local vardata = luaotfload.fontloader.fonts.hashes.identifiers[fontid].resources.variabledata
PrintTableRecursive(vardata,depth or 1)
end