使用 luatex mini 包处理中文

LiYanrui posted @ Jun 08, 2009 06:19:40 AM in Dream of TeX with tags luatex tex , 10725 阅读

在“LuaTeX 最小包 for Linux 用户”一文中,我是以英文和一幅 MetaPost 图形作为测试示例的。在这篇文章中,我简单介绍一下如何使用这个 luatex mini 包处理中文。

先来看这样一份含有中文字符的 tex 文档 foo.tex:

\font\a=file:simsun at 24pt \a

山近月远觉月小,便道此山大于月。若人有眼大如天,当见山高月更阔。

\end

依然是假设 luatex mini 包被位于 /opt/luatex 目录,那么打开一个终端,首先启用 luatex 环境:

$ cd /opt/luatex && source setuptex

然后就可以在这一终端里编译上述的 foo.tex 文档了。由于在 foo.tex 里,我设置了文档所使用的中文字体为 simsun.ttc,所以需要将这个字体所在的目录路径告诉 luatex,然后才能正确编译该示例。步骤如下:

$ export OSFONTDIR=/use/share/fonts/winfonts
$ luatex foo

就这么简单。

查看编译所得的 pdf 文档,会发现文字向右伸出了页面而未有断行。这是正常的,因为这就是我打算要解决的第一个问题,即 luatex 的中文断行问题。在此暂且不表,因为我还要折腾一段时间,或许能解决这个问题。

ok,现在中文的 ttf 字体(simsun.ttc 也是 ttf 字体)是可以被 luatex 处理了。那么 otf 字体可不可以呢?为验证这个问题,我将上述的 foo.tex 中所使用的 simsun 替换为 AdobeSongStd-Light.otf 字体:

\font\a=file:AdobeSongStd-Light at 24pt \a

山近月远觉月小,便道此山大于月。若人有眼大如天,当见山高月更阔。

\end

然后告诉 luatex 这个 AdobeSongStd-Light.otf 所在的目录路径,再重新编译 foo.tex:

$ export OSFONTDIR=/usr/share/fonts/adobe
$ luatex foo

结果会出错,而且生成一个空白的 pdf 文档。

对于这一问题,Hans 给我的解释如下:

this is because a cidmap is needed and the kpse that you use does not have it; upcoming versions of kpse (and luatex's kpse lib) will support it given that you also adapted your texmf.cnf accordingly then

意思就是说使用中文 otf 字体需要一份 cidmap 文件的支持,但是现在 kpse 工具还无法查到这份 cidmap 文件的位置。这份 cidmap 文件的作用就是将字符的编码映射到具体的字型。可以在 fontforge 包中找到该文件,也可以在 ConTeXt Minimals 里找,在 $TEXROOT/texmf-context/fonts/cid/fontforge 目录里,文件名为 adobe-gb1-4.cidmap。这份文件可点击这里下载

将 adobe-gb1-4.cidmap 文件与 foo.tex 文件放在同一目录下,即可正常编译了。

Avatar_small
LiYanrui 说:
2009年6月11日 17:49

因为现在有许多有意思的事情做了,不需要再空循环 :)

南浦月 说:
2013年3月22日 17:09

请问博主,现在有没有好的断行实现呢?


登录 *


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