使用 luaotfload 处理 \hbox

使用 luaotfload 处理 \hbox

我有一个“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

相关内容