本文讨论 TeX Live 2007 的中文支持包的设计与实现,目前在构思阶段,只是罗列可能的做法,并不限制以后一定必须这样做。
第一,跨平台,虽然因为实际限制,不一定能兼容所有 TeX Live 提供的平台,但至少应该包括的有:
考虑添加支持的:
第二,支持 TeX Live inst CD 和 live DVD,也就是说,在用户提供一定存放空间的情况下,具有 live 运行能力。
第三,为了避免版权问题,我们不能直接提供字体 (即使提供,也只能提供授权可以分发的字体),所以应该提供比较好的字体探测能力。 (和文泉驿字体项目组合作有没有可能?)
考虑到 win32 支持,我们不能使用 bash 脚本。
首先,我们必须确认这是有必要的,考虑目前可用的 3 套 DVI 处理程序:dvipdfmx (包括 xdvipdfmx), dvips 和 dvipdfm,和直接生成 PDF 的 pdfTeX。
就算所有的工具都支持直接嵌入 TrueType 字体,仍然存在的问题是 TrueType 字体在 Adobe 的 PDF 阅读软件 (Adobe Reader, Adobe Acrobat) 上渲染效果较差 (有猜测是这部分可以由改变 PDF 的生成代码来改进,待调查,这是工作 2),所以用户可能仍然希望使用 Type 1 字体。(然而,考虑到 TrueType 转换为 Type 1 还要耗费不少空间,生成 Type 1 应该是可选项)
第二,转换应该使用什么工具。现有的工具包括:
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 实现?
fontconfig 和 Mac 下的 ATS 部分已经完成,见 http://code.google.com/p/fontman。win32 部分还没完成,因为我没有 Windows 机器。另外需要一点时间把代码和 CMakeLists.txt 移植到 Linux 下测试,我现在是在 Darwin (Mac OS X) 下测试的。
CJK Ext B 的支持主要可以从两个方面着手:CJK 宏包与 Xe(La)TeX。
CJK 宏包的支持,如果使用 pdfTeX,就没有办法直接用 TrueType,而必须转换为 pfb,将多个 ttf 拼成一套完整的中文字体使用。dvipdfmx 的支持可以直接通过映射另一个 cid-x.map 表项实现。
XeTeX 的支持,目前是可以胜任,但问题是没有字体可以单独覆盖那么多的区域,所以我们仍然需要预处理软件来区分,选择字体。似乎 XeTeX 0.997 正在添加新的跨语言字体选择机制。