我在 lua 端创建一个字形节点(大写 A):
\directlua{%
n = node.new('glyph')
n.font = font.current()
n.char = 65 % ASCII code for capital A
}
我知道如何选择当前字体(font.current()
)。如何访问luaotfload
数据库中的其他字体(texgyreschola-regular.otf
举例来说)?
答案1
我如何访问 luaotfload 数据库中的其他字体(例如 texgyreschola-regular.otf)?
为了在 Luatex 中使用字体,首先需要定义字体。字体加载器有一个fonts.definers.read()
与回调函数签名相同的函数define_font
。它的字体查找会调用 Luaotfload 的字体索引功能,因此您可以向其传递任何有效的定义字符串。
成功后,您将收到一个符合 Luatex 手册第 5 章“字体结构”中描述的对象,因此您可以将其直接输入font.define()
。它返回 TeX 分配给此特定字体的字体 ID,您可以在您描述的情况下使用它。
在回调中分配字体的示例是:
local glyph_t = nodes.nodecodes.glyph
local fontify = function (id)
return function (hd)
for n in node.traverse (hd) do
if n.id == glyph_t then n.font = id end
end
return hd
end
end
local main = function ()
local tfmdata = fonts.definers.read
("file:iwona-regular.otf:mode=base", 42*2^16)
local id = font.define (tfmdata)
luatexbase.add_to_callback("pre_linebreak_filter", fontify (id),
"userdata.stackexchange.fontify")
tex.sprint "some text"
end
return main ()
-- vim:ft=lua:sw=2:et
整个 TeX 文档:
\input luaotfload.sty
\directlua {dofile "\jobname.lua"}
\bye