我有一个“plain”,\hbox
里面有一系列尚未处理的字形luaoftload
(至少没有完全处理,尽管理想情况下,就我所希望的而言,它们根本不应该被处理),我想(重新)处理它们(经过一些操作)。这是初始测试文件,只是为了展示如何重新映射字形:
\documentclass{article}
\usepackage{fontspec}
\makeatletter
\setmainfont{Amiri}
\setbox0\hbox{بِسْمِ}
\directlua{
for n in node.traverse_id(node.id('glyph'), tex.box[0].head) do
print('>>',
string.format("\@percentchar x", n.char),
n.yoffset, n.xoffset)
end
print()
}
\setmainfont[Script=Arabic]{Amiri}
\setbox0\hbox{بِسْمِ}
\directlua{
for n in node.traverse_id(node.id('glyph'), tex.box[0].head) do
print('>>',
string.format("\@percentchar x", n.char),
n.yoffset, n.xoffset)
end
}
\stop
结果是:
>> 628 0 0
>> 650 0 -425920
>> 633 0 0
>> 652 0 -289280
>> 645 0 0
>> 650 -41600 -259200
>> f09a0 0 0
>> 650 0 -230720
>> f09b7 0 0
>> 652 0 -305920
>> f0b29 0 0
>> 650 0 -320640
第一个块仍然是输入字符(未处理),第二个块是已处理的节点列表(第一个数字是“char”字段)。到目前为止一切顺利。这正是我所期望的。
所以我认为我所需要的只是类似的东西:
tex.box[0].head = xxxx(tex.box[0].head)
loadotfload
在 中添加了两个函数hpack_filter
,因此它们是我的候选者xxxx
,但显然它们不是公开的(至少标记为 的函数不是公开的luaotfload.node_processor
)。
所以我的问题是,有没有办法hlist
处理luaotfload
?