TeX 相关名词的不完全考察

LuaTeX 的第一次尝试

lyanry posted @ 2007年11月04日 16:07 in 文档标记语言 with tags luatex texlive , 9094 阅读

从 http://foundry.supelec.fr/frs/?group_id=10&release_id=252 可以下载到最新的 luatex beta 版。我用的操作系统是 Gentoo Linux,便下载了 uatex-beta-0.11.2-linux-i386.tar.bz2 包。

将所下载的软件包解开后,得到的就是一个可执行程序 luatex,将它复制到我的 TeX Live 2007 bin/i386-linux 目录下。

随便写一个 TeX 源文档,使用 luatex 进行处理,得到一个错误:luatex.fmt 文件找不到。其实以前我也有过一次尝试,也是因为这个问题阻挡,就消失了试用它的耐心。但是前段时间在 ctex bbs 上 yulewang 给了一些提示,我又找回了一点信心:)

生成 luatex.fmt 的命令如下:

$ luatex --ini tex.ini --jobname=luatex --progname=luatex

执行该命令后,会在终端当前所在目录下生成 luatex.fmt 文件。有了这个文件,只需要执行:

$ luatex -fmt=yourpath/luatex.fmt filename.tex

即可正常编译 TeX 文档了。

我又想起 yulewang 曾经说过一次,使用 fmtutil 可以生成 fmt 文件,但当时事务繁杂,也没有深究。这次 man 了一下 fmtutil,大致知道了它的用法。

TeX Live 有一个配置文件 fmtutil.cnf,位于 $TEXMFVAR 目录下。这个文件可以指导 fmtutil 程序如何生成各种 fmt 文件。要生成 luatex.fmt,在 fmtutil.cnf 文件中找到这样一段内容:

# Standard formats (plain, latex) with all engines:
#
# Change "tex.ini -> bplain.ini" and "- -> language.dat"
# if you want babel support in tex. Add -translate-file=cp227.tcx before
# tex.ini if you want to make all characters directly "printable" for
# any \write (instead of ^^xy).
tex		tex	-		tex.ini
...		...	...		...
xetex		xetex	-		-etex xetex.ini
xelatex		xetex	language.dat	-etex xelatex.ini

在这段代码之后,照葫芦画瓢地添上这样一行:

luatex luatex language.dat tex.ini

然后执行:

$ fmtutil --byfmt=luatex

这样也可以生成 luatex.fmt,并将其放置在 $HOME/$TEXMFVAR 目录下,这样再使用 luatex 编译 TeX 文档时,就不需要显式地设定 -fmt 选项了。

yulewang 给出了一个 luatex 处理中文 TeX 文档的示例,我根据我系统上的 ttf 字体略作改动,如下:

\pdfoutput1
\directlua0{
callback.register('define_font',
    function(name, size)
      filename=kpse.find_file(name,"truetype fonts")
      if (filename) then
        ttffont = fontforge.to_table(fontforge.open(filename))
        if ttffont then
          f = { }
          f.name = ttffont.fontname
          f.fullname = ttffont.names[1].names.fullname
          f.size = size
          f.characters = {}

         for char, glyph in pairs(ttffont.map.map) do
            glyph_table = ttffont.glyphs[glyph]

            f.characters[char] = {
              index = glyph,
              width = glyph_table.width * size/256,
              name = glyph_table.name,
            }
          end
          f.filename = filename
          f.type = 'real'
          f.format = 'truetype'
          f.cidinfo = {
            registry = "Adobe",
            ordering = "Identity",
            supplement = 0,
            version = 1
          }
        end  
      else
        f = font.read_tfm(name, size)
      end
    return f
    end
  )
}

\font\myfont /usr/share/fonts/winfonts/simsun.ttf at 11pt
\font\cmrfont cmr10 at 11pt

\myfont在\cmrfont Lua\TeX{}\myfont中使用中文。
\bye

对于生成的 pdf 文档,我用 evince 阅读时,出现了 “cairo context error: out of memory” 错误。不知何故。

另外也不知道如何使用 luatex 断行。

Avatar_small
yulewang 说:
2007年11月09日 20:22 根据目前的消息,ConTeXt的下一个beta版本(使用LuaTeX 0.15 beta)将解决中文问题。敬请关注。
Avatar_small
lyanry 说:
2007年11月10日 01:53 前几日尝试了一下 ConTeXt + lua,死活搞不定,又要培养自信心了。
Avatar_small
yulewang 说:
2007年11月10日 20:36 >又要培养自信心了。 我怎么老觉得你在不停地折腾一些东西啊。还是把原理搞搞清楚再去操作,这样的话心情舒畅也节省时间。
Avatar_small
lyanry 说:
2007年11月11日 02:03

恩。现在按照 wiki.contextgarden.net 上所说的安装方式搞定了。


登录 *


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