如何在 LuaTeX 中检索当前的罗马字体、无字体和单色字体

如何在 LuaTeX 中检索当前的罗马字体、无字体和单色字体

我正在开发一个 LuaLaTeX 包,有一次我必须将三个基本字体系列(roman、sans、mono)的全名传递给另一个工具。我发现并检查过我可以正确地为目前活跃字体,但这并不是我真正需要的:

fonts.hashes.identifiers[font.current()].fullname

正确生成,例如“Linux Libertine O”,如果这是当前用于排版的内容。(我不知道这是不是实现该目标的正确或最简单的方法,所以我很高兴能简化。

\setmainfont但是,正如所说,我还需要用、\setsansfont和定义的字体名称\setmonofont。从文档来看,这似乎font.id()是我最好的选择,但到目前为止我没有任何运气。

[编辑:]当我说“字体名称”时,我指的是命令的强制参数中定义的三种字体的“家族名称” \setXXXXfont,忽略可以在可选参数中完成的任何规范。

答案1

经过更长的时间讨论在 luaTeX 邮件列表上,fontspec我和开发人员找到了一个可行的解决方案(尽管我觉得有点尴尬)。这个想法是依次激活三个字体系列,将它们捕获为“当前”,然后将所有内容包装在一个组中。诀窍是使用\edef

\begingroup
\rmfamily \edef\rmfamilyid{\fontid\font}%
\ssfamily \edef\ssfamilyid{\fontid\font}%
\ttfamily \edef\ttfamilyid{\fontid\font}%
\directlua{
    myfonts = { }
    myfonts.rm =
    fonts.hashes.identifiers[\rmfamilyid].shared.rawdata.metadata['familyname']
    myfonts.sf =
    fonts.hashes.identifiers[\ssfamilyid].shared.rawdata.metadata['familyname']
    myfonts.tt =
    fonts.hashes.identifiers[\ttfamilyid].shared.rawdata.metadata['familyname']
}%
\endgroup

此后,这三个家族名称即可在myfontsLua 表中使用。

相关内容