背景
如『睦邻友好的 ConTeXt Standalone』文中最后一节所述,对于不怎么讲究的中文排版,ConTeXt 目前对中文的支持勉强够用。目前,ConTeXt MkIV 仅支持:
载入中文字体,将其嵌入 PDF 文件;
对中文字体中的西文字符,能够指定替换字体,即 Fallback 机制。
如果仅具有上述单薄的功能,那么在中文排版方面 ConTeXt MkIV 甚至不如 MS Word。举几个例子来说明这一点。
标点间距
看下图, ConTeXt MkIV 尚无法对相邻的标点符号的间隔距离进行微调。虽然这个问题是中文字体设计上的缺陷——标点的宽度与字宽相同而导致的,但是文字排版软件本应给出方便的特定字距调整机制。
下图是对标点间距进行压缩后的效果,可与上图对比一下。
标点在文本边界的伸出
看下图,左引号在左侧未能与其下面文本行的左侧边界对齐,导致段首出现“缺损”。
作为对比,下图是经过微调使得左引号向左偏移半个字款后的排版结果。
同样,落在右侧边界的标点也应该向右伸。下图截取自《Word 排版艺术》一书,是 Word 无法进行右侧边界标点伸出处理的排版结果。右侧边界竖向看起来,像是被咬去一块。ConTeXt MkIV 对西文标点的边界伸出进行了很好的处理,而中文标点像是后娘养的……右侧边界上的标点排版结果与 MS Word 差不多。
作为对比,下图给出右侧标点伸出的排版示例。
hack 的必要性
既然 ConTeXt MkIV 现在对中文排版并不友好,而我们如果容忍这一点,那就真的对不起 Knuth 所说的“我从来也不期盼 TeX 会成为一个万能的排版工具,让大家使用它可以来做一些“快速而脏”的东西;我只是将其视为一种只要你足够用心就能得到最好结果的东西”。
因此,必须对 ConTeXT MkIV 的字体机制进行 hack。
我 hack 的结果就是 zhfonts 模块。zhfonts 项目位于:https://github.com/liyanrui/zhfonts
虽然 http://garfileo.is-programmer.com/posts/23740 已经给出了详细的使用说明,但是我觉得有一份简单点的使用说明会更接地气。
zhfonts 安装与简单用法
假设你的 ConTeXt Standalone 安装在 ~/context
目录。如果不知道怎么安装 ConTeXt Standalone,那只能证明你没有阅读“睦邻友好的 ConTeXt Standalone ”。
安装 zhfonts 的步骤如下:
$ mkdir -p ~/context/tex/texmf-local/tex/context/third
$ cd ~/context/tex/texmf-local/tex/context/third
$ git clone https://github.com/liyanrui/zhfonts.git
装完后,需要使用 context --generate
刷新一下 ConTeXt MkIV 的“文件数据库”,以使得 context
命令在编译 .tex 文件时能够找到 zhfonts 模块文件所在位置。
$ source ~/context/tex/setuptex # 开启 ConTeXt 运行环境
$ context --generate
这样,zhfonts 便安装完毕,但是它还不能用。因为没有中文字体。
安装中文字体
我已将 zhfonts 所用的所有中文字体打包为 fonts.tar.gz 并传至百度网盘,下载地址:http://pan.baidu.com/s/1hrQcI ,提取密码:2wpm
下载 fonts.tar.gz 后,安装字体过程如下:
$ tar zxvf fonts.tar.gz
$ cp -r fonts ~/context/tex/texmf-local/
然后刷新 ConTeXt MkIV 的环境(请确定已开启 ConTeXt MkIV 运行环境),即更新 ConTeXt 的文件数据库以及字体库:
$ context --generate
$ mtxrun --script fonts --reload
测试 zhfonts 是否可用
下面,我给出一份测试 zhfonts 的最小示例:
\usemodule[zhfonts]
\starttext
测试 English 与中文。
\stoptext
再给出一份比较全面又漂亮的 ConTeXt 入门示例,但是你需要去百度网盘下载,地址为:http://pan.baidu.com/s/1c0FJGvI
Just for fun!
结语
我不能担保 zhfonts 的长期有效性。虽然这三年多以来,它虽有小恙,但迄今还算有效。由于 ConTeXt MkIV 的开发还在进行中,因此 zhfonts 也就不可能会稳定下来。我一边担忧 zhfonts 的挂掉,一边希望有更强大的 ConTeXt 中文 hacker 来拯救世界……
zhfonts 模块的一些内幕,请参考:
[0]
ConTeXt MkIV 中文标点压缩与边界对齐的处理方案 [1]
ConTeXt MkIV 中文标点间距压缩问题的解决方案[2]
CJK 字符结点的判定[3]
寻找标点符号及其包围盒[4]
走弯路了[5]
如何创建 LuaTeX 结点[6]
ConTeXt 模块参数的获取[7]
MkIV:重新做了一份 zhfonts.tex 兼谈 LuaTeX “编程”[8]
zhfonts 有一些更新