local fontdata = fonts.ids
function f4zhcn.pre_linebreak_filter (head, groupcode)
for t in node.traverse(head) do
if is_cjk_ideo (t) then
texio.write_nl ('*** CJK Ideo ***')
elseif is_cjk_puncts (t) then
texio.write_nl ('*** CJK Punct ***')
for k in pairs(fontdata[t.font]) do
texio.write_nl (k)
end
end
end
return true
end
走弯路了!
在“寻找标点符号及其包围盒”中,发现在 luatex-fonts-merged.lua 中需要将 define.read () 函数里的 "fontdata.cache" 的值被设置为 "yes" 才可以访问到字符包围盒信息,便发信给 Hans 询问为啥默认要设置为 "no"。结果 Hans 的回答让我很沮丧,原来通过我说的那种途径获得包围盒信息是绕了一个大圈子。
事实上,每个字体的信息都被存放在一个全局的表 fonts.ids 里,而且这个表在“断行”中我已经用过了,只是当时没理解这个表的作用。等后来稍微明白了 LuaTeX 处理字体的机制后,又把那个表给忘记了。
正确的做法是这样的: