開源書和開源技術-PDF中蛋疼的中文字型

larrycai發表於2012-01-14

介紹

上次我介紹了一個用Markdown格式來寫開源書和相關的開源技術,還留了個在Linux下產生PDF所需要的中文字型這個大尾巴。這次我想借用我寫【跟我學企業敏捷開發】的一點經驗,給不太瞭解這一塊知識的朋友一起探討一下。

有些問題還是沒有解決,希望有Latex的高手解答。

不管怎樣,還是希望能借此機會推動國內電子書,特別是開源電子書的發展。

Linux下的中文編碼和字型

首先,我用的是Linux環境並且選用的是UTF-8的編碼,而不是GBK,否者在github上顯示會有問題,不瞭解這方面的朋友自己找找資料吧,夠講個把小時的。

在產生PDF時,一般建議內嵌中文字型的,但是真正能用的中文字型實際很少,極大多數是有版權的:

  • 文鼎開放的四套字型(簡報宋、細上海宋、簡中楷、中楷),沒有一點版權問題,是大部分的中文Linux的預設安裝。
  • 文泉驛的幾套字型(微米黑、正黑、點陣宋體)是開放但是GPL性質的,所以不是隨便可以商用的。
  • Adobe有兩套開放字型(宋體、黑體)我認為是可以隨便用的,忘了在哪裡看到這個解釋的了。

可以看看Ubuntu免費中文字型的介紹有個認識。

怎麼選擇對應字型

一般預設中文正文字型是宋體、細明體,對應英文Serif類的英文字型:Georgia、Times New Roman等。

標題和重要內容可以選楷體和黑體,對應英文Sans Serif類的英文字型:Arial、Tahoma、Verdana等

技術文章中常見的程式碼典型的等寬體用黑體,對應英文Monospace類的英文字型:Courier New等

所以對應的在我的中文Latex配置中可選的是:

  • font:文鼎的簡報宋、細上海宋,文泉驛的點陣宋體,Adobe的宋體
  • bold: 文鼎的簡中楷、中楷,文泉驛的微米黑、正黑,Adobe的黑體
  • mono: 文泉驛的微米黑、正黑,Adobe的黑體

如何安裝字型

我用的試驗環境是Ubuntu 11.04 (Natty),大部分可以直接從Ubuntu源中下載了。

你可以用命令fc-list :lang=zh-cn檢視安裝好的中文字型,結果中前半部分就是字型名稱(如AR PL UMing CN)。

user@puppet1:~$ fc-list :lang=zh-cn | grep CN
AR PL UMing CN:style=Light
AR PL UKai CN:style=Book

文鼎開放的四套字型的Ubuntu包、字型名字和名稱如下:

ttf-arphic-gbsn00lp      "AR PL SungtiL GB" 文鼎PL簡報宋
ttf-arphic-gkai00mp      "AR PL KaitiM GB" 文鼎PL簡中楷
ttf-arphic-ukai          "AR PL UKai" 文鼎PL中楷
ttf-arphic-uming         "AR PL UMing" 文鼎PL細上海宋

文泉驛字型的Ubuntu包、字型名字和名稱如下

ttf-wqy-microhei   "WenQuanYi Micro Hei" 文泉驛的微米黑
ttf-wqy-zenhei     "WenQuanYi Zen Hei" 文泉驛的正黑
xfonts-wqy         "WenQuanYi Bitmap Song" 文泉驛的點陣宋體

Adobe的中文字型有官方下載

$ tar -jzxf FontPack910_chs_i486-linux.tar.bz2
$ tar -xvf CHSKIT/LANGCHS.TAR
$ mkdir ~/.fonts 
$ cp Adobe/Reader9/Resource/CIDFont/*.otf ~/.fonts
$ fc-cache -f -v
$ fc-list :lang=zh | grep Adobe

蛋疼的問題

只可惜現在正文在產生PDF時沒有一種字型是有完美表現的。

  1. 文鼎貢獻的字型中臺灣字形的細上海宋的句號在中間,出來的效果不倫不類的。
  2. 文鼎貢獻的字型中大陸字形的簡中楷和簡報宋,標點符號的位置是對的,但是當碰到條目(Item)的時候條目的點沒能顯示出來。
  3. Adobe的宋體,條目的時候顯示一個田子框,很難看。
  4. 文泉驛的點陣宋體老是轉化Latex時出錯,搞不定。

現在將就著用文鼎的細上海宋。

【更新】 2、3 條目的問題,我hack成其他字元(*)顯示就沒問題了(如下),不知道預設的圓點為啥顯示不對。http://wiki.ctex.org/index.php/LaTeX/%E5%88%97%E8%A1%A8,現在就用文鼎的細上海宋了。

\begin{itemize}\setlength{\itemsep}{1pt}\setlength{\parskip}{0pt}\setlength{\parsep}{0pt}
\item[*]
% 原來是
% \item

其他

本文也是我用git記錄在github上的,你可以看到每次的變化。

如果對此文有興趣,幫忙頂一下,別忘了 @larrycaiyu

參考

  1. 中文字型沒有版權問題的解決方案?http://bbs.ctex.org/viewthread.php?tid=46106&extra=&page=1

相關文章