Luaotfload 获取字体网格单位

Luaotfload 获取字体网格单位

以下代码将字符宽度(光标前进宽度)以及字形边界框的 x 和 y 坐标写入日志文件。以下是字母“a”的代码:

\documentclass[12pt]{article}
% Compile with lualatex.
\usepackage{fontspec}
\setmainfont{Latin Modern Roman}
\begin{document}
\directlua{
  local fontdata = font.getfont (font.current ())
  local descriptions = fontdata.shared.rawdata.descriptions                                                              
  local glyphdata = descriptions [utf.byte ("a")]
  inspect (glyphdata)
}
\end{document}

日志文件的相关部分:

table={
 ["boundingbox"]={ 34, -10, 474, 446 },
 ["depth"]=10,
 ["height"]=446,
 ["index"]=28,
 ["name"]="a",
 ["unicode"]=97,
 ["width"]=490,
}

这是正确的,通过在 Fontforge 中打开字体来确定。单位的数值是根据设计网格单位计算的。对于 OpenType 字体,这通常是每 em 1000,但对于 TrueType 字体,可能是 1024、2048 或 4096。甚至可能不是这些。

我的问题:使用类似于上面的代码,如何确定使用了哪些字体设计网格单元?

答案1

您可以unit_per_em从字体表中打印值:

\directlua{
  local fontdata = font.getfont (font.current ())
  local unit = fontdata.units_per_em
  texio.write_nl("unit per em: ") texio.write(unit)  texio.write_nl("")
  local descriptions = fontdata.shared.rawdata.descriptions                                                      local glyphdata = descriptions [utf.byte ("a")]
  inspect (glyphdata)
}

相关内容