走弯路了!

LiYanrui posted @ Jun 18, 2009 04:17:39 PM in Dream of TeX with tags tex luatex , 2034 阅读

在“寻找标点符号及其包围盒”中,发现在 luatex-fonts-merged.lua 中需要将 define.read () 函数里的 "fontdata.cache" 的值被设置为 "yes" 才可以访问到字符包围盒信息,便发信给 Hans 询问为啥默认要设置为 "no"。结果 Hans 的回答让我很沮丧,原来通过我说的那种途径获得包围盒信息是绕了一个大圈子。

事实上,每个字体的信息都被存放在一个全局的表 fonts.ids 里,而且这个表在“断行”中我已经用过了,只是当时没理解这个表的作用。等后来稍微明白了 LuaTeX 处理字体的机制后,又把那个表给忘记了。

正确的做法是这样的:

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

登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter