TeX Live 2007 中文支持

本文讨论 TeX Live 2007 的中文支持包的设计与实现,目前在构思阶段,只是罗列可能的做法,并不限制以后一定必须这样做。

目标

第一,跨平台,虽然因为实际限制,不一定能兼容所有 TeX Live 提供的平台,但至少应该包括的有:

  • i386-linux
  • i386-darwin
  • i386-freebsd
  • win32
  • powerpc-darwin

考虑添加支持的:

  • x86_64-linux

第二,支持 TeX Live inst CD 和 live DVD,也就是说,在用户提供一定存放空间的情况下,具有 live 运行能力。

第三,为了避免版权问题,我们不能直接提供字体 (即使提供,也只能提供授权可以分发的字体),所以应该提供比较好的字体探测能力。 (和文泉驿字体项目组合作有没有可能?)

实现技术/语言

考虑到 win32 支持,我们不能使用 bash 脚本。

TrueType 到 Type 1 的转换

首先,我们必须确认这是有必要的,考虑目前可用的 3 套 DVI 处理程序:dvipdfmx (包括 xdvipdfmx), dvips 和 dvipdfm,和直接生成 PDF 的 pdfTeX。

  • (x)dvipdfmx 有很好的 TrueType 支持。
  • dvipdfm 的支持一般。
  • dvips 不知道是否支持。
  • pdfTeX (1.40.3) 支持状况待确认,这是工作 1。

就算所有的工具都支持直接嵌入 TrueType 字体,仍然存在的问题是 TrueType 字体在 Adobe 的 PDF 阅读软件 (Adobe Reader, Adobe Acrobat) 上渲染效果较差 (有猜测是这部分可以由改变 PDF 的生成代码来改进,待调查,这是工作 2),所以用户可能仍然希望使用 Type 1 字体。(然而,考虑到 TrueType 转换为 Type 1 还要耗费不少空间,生成 Type 1 应该是可选项)

第二,转换应该使用什么工具。现有的工具包括:

  • ttf2pfb, TeX Live 2007 不附带,MiKTeX 附带。
  • ttf2pt1, TeX Live 2007 除 win32 版本都不附带。
  • fontforge

fontforge 的优点是它是一个仍然在更新的程序。它可以动态的对字体进行加粗,虽然这部分的速度很慢。最大的问题是软件庞大,dependency 繁多 (是否可以剔除冗余部分,单独 build 一个只用命令行的版本?)。此外它没有 win32 native 的版本,只有 cygwin 版本 (幸运的是 *nix, Mac OS 和 win32 平台都有已经编译好的二进制程序提供)。

ttf2pfb 随 FreeType 1 提供,可以在 freetype 的 CVS 获得。

选择哪一款程序来使用可以根据转换速度和转换效果来决定。前者可以作确定的 benchmark (印象中 ttf2pfb 是最快的),而后者目前不知道如何判定。

TeX Live 2007 的 texmf/fonts/sfd 目录下有 sfd 文件可用。

系统字体探测

必须能够列出字体的名称,基本信息,和找到其存放的位置。使用系统 native 的 API 实现?

  • win32 有 EnumerateFontFamily?

fontconfig 和 Mac 下的 ATS 部分已经完成,见 http://code.google.com/p/fontman。win32 部分还没完成,因为我没有 Windows 机器。另外需要一点时间把代码和 CMakeLists.txt 移植到 Linux 下测试,我现在是在 Darwin (Mac OS X) 下测试的。

CJK Ext B 的支持

CJK Ext B 的支持主要可以从两个方面着手:CJK 宏包与 Xe(La)TeX。

CJK 宏包的支持,如果使用 pdfTeX,就没有办法直接用 TrueType,而必须转换为 pfb,将多个 ttf 拼成一套完整的中文字体使用。dvipdfmx 的支持可以直接通过映射另一个 cid-x.map 表项实现。

XeTeX 的支持,目前是可以胜任,但问题是没有字体可以单独覆盖那么多的区域,所以我们仍然需要预处理软件来区分,选择字体。似乎 XeTeX 0.997 正在添加新的跨语言字体选择机制。

新的包管理

 
news/tl2007.txt · Last modified: 2007/11/07 14:23 by 204.112.154.154
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki