zhfonts:ConTeXt MkIV 中文支持的 Hacking

背景

如『睦鄰友好的 ConTeXt Standalone』文中最後一節所述,對於不怎麼講究的中文排版,ConTeXt 目前對中文的支持勉強夠用。目前,ConTeXt MkIV 僅支持:php

  • 載入中文字體,將其嵌入 PDF 文件;html

  • 對中文字體中的西文字符,可以指定替換字體,即 Fallback 機制。node

若是僅具備上述單薄的功能,那麼在中文排版方面 ConTeXt MkIV 甚至不如 MS Word。舉幾個例子來講明這一點。git

標點間距

看下圖, ConTeXt MkIV 尚沒法對相鄰的標點符號的間隔距離進行微調。雖然這個問題是中文字體設計上的缺陷——標點的寬度與字寬相同而致使的,可是文字排版軟件本應給出方便的特定字距調整機制。github

標點符號間距無壓縮時的排版結果

下圖是對標點間距進行壓縮後的效果,可與上圖對比一下。數據庫

標點符號間距壓縮後的排版結果

標點在文本邊界的伸出

看下圖,左引號在左側未能與其下面文本行的左側邊界對齊,致使段首出現「缺損」。編程

文本左邊界標點無伸出的排版結果

做爲對比,下圖是通過微調使得左引號向左偏移半個字款後的排版結果。segmentfault

文本左邊界標點無伸出的排版結果

一樣,落在右側邊界的標點也應該向右伸。下圖截取自《Word 排版藝術》一書,是 Word 沒法進行右側邊界標點伸出處理的排版結果。右側邊界豎向看起來,像是被咬去一塊。ConTeXt MkIV 對西文標點的邊界伸出進行了很好的處理,而中文標點像是後孃養的……右側邊界上的標點排版結果與 MS Word 差很少。bash

右側標點未伸出的排版示例

做爲對比,下圖給出右側標點伸出的排版示例。ide

右側標點伸出的排版示例

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 有一些更新

相關文章
相關標籤/搜索