如何查询当前数学字体的信息?
我在使用 unicode-math 和 Cambria Math 字体的文档中尝试了以下内容
\documentclass{article}
\usepackage{unicode-math}
\setmathfont{Cambria Math}
\begin{document}
Try to get math font name inside math mode.
\[
\directlua{
local font = fonts.identifiers[font.current()]
local fullname = font.fullname
tex.sprint(fullname)
}
\]
\end{document}
但是,它是在数学字体中打印的周围文本字体的字体名称,如下图所示。
font.current()
即使代码处于数学模式中,它似乎也会返回当前文本字体 ID 而不是数学字体。
接下来,我序列化了fonts.identifiers
表并获取了数学字体的 ID。在此示例中,我font.current()
用一个明确的数字替换了28
它,上面的代码正确打印了数学字体名称,如下所示。
所以我猜想数学字体在fonts.identifiers
表中确实有一个 ID。但我如何自动获取此 ID?
答案1
TeX 中没有“当前数学字体”的概念,LuaTeX 和 XeTeX 也是如此。符号使用公式末尾指定的字体排版,使用数学家族。
但是,可以通过以\setmathfont
一种稍微棘手的方式将所选的数学字体设为当前文本字体来访问:
\documentclass{article}
\usepackage{unicode-math}
\setmathfont{XITS Math}
\begin{document}
\sbox0{$$}\the\textfont2
\directlua{
local font = fonts.identifiers[font.current()]
local fullname = font.fullname
tex.sprint(fullname)
}
\end{document}
这将打印“XITS Math-2”。这是因为\the\textfont2
生成一个字体标识符,使系列 2 中的字体成为当前文本字体。在传统 TeX 中,\textfont2
是用于文本大小中最常见符号的字体;unicode 数学将其用于所有已知符号,但出于技术原因,它还必须保留它的副本\textfont3
,因此后缀为“2”。
之所以\sbox0{$$}
需要,是因为 LaTeX 实际上直到排版公式时才将字体分配给数学系列。也可以这样说
\makeatletter\check@mathfonts\makeatother
因为\check@mathfonts
是根据当前上下文将字体分配给系列的命令。
我猜想其他 Lua 工具也可以用来访问内部表中的字体编号。