luaotfload:列出变量字体的可用轴

luaotfload:列出变量字体的可用轴

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

相关内容