Jan January 2012

开源书和开源技术-PDF中蛋疼的中文字体

介绍

上次我介绍了一个用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

Shared in Google

blog comments powered by Disqus
comments powered by Disqus