在lua端通过luaotfload选择字体

在lua端通过luaotfload选择字体

我在 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

字体定义

相关内容