Linux下最小化安装ConTeXt
TeX是什么?

ConTeXt中文TTF字体安装

LiYanrui posted @ 2007年12月17日 18:16 in ConTeXt之旅 with tags tex ConTeXt , 12685 阅读

本文主要参考了http://wiki.contextgarden.net/Chinese,由于该页面只讲述了如何安装宋体、仿宋、楷体和黑体这四种中文TTF字体,不具备一般性。在网络上我能搜索到的其它一些资料中,只是针对GBK编码,没有考虑UTF-8编码。

本文以方正公司的一款“硬笔行楷”字体为例,讲述如何在使用PDFTeX引擎的ConTeXt环境中安装与使用UTF-8编码的中文TTF字体,主要为ConTeXt初学者在字体安装问题上提供些微参考。

1 准备字体

这款方正硬笔行揩字体FZYingBiXingKai.ttf,我取自网络,并非购买所得,仅为本文示例字体所用,不提供任何有关的下载信息。其实对于其它字体只需按照本文的步骤,相应地略作调整即可完成安装。

2 准备字体安装环境

根据自己的喜好,建立一个字体处理目录(譬如/tmp/font),进入该目录。操作如下:

$ mkdir /tmp/font
$ cd /tmp/font

将TTF字体复制到该目录下。

然后下载ttf2uni.rb脚本:

$ wget http://www.physik.fu-berlin.de/~tburnus/ttf2uni.rb

3  字体转换

PDFTeX可以根据TeX字元 (TeX Font Meta) 信息与TTF字体建立映射关系,从而实现TTF字体在PDF文档中的嵌入。其中具体的细节,我不懂。

上文所下载的ttf2uni.rb是一个ruby脚本(要使用它,必须确认你的系统安装了ruby语言),它可以生成 .enc 文件,并由TTF字体生成 .afm 文件、.tfm文件与 .map 文件。操作如下:

$ ruby ttf2uni.rb FZYingBiKaiShu.ttf

.enc文件是字体编码文件。ConTeXt的在处理中文时,可接受UTF-8编码的文本输入(可参考Encodings and Regimes),并将其处理为UCS-2 (Unicode的双字节编码方案)字体编码(根据 .enc 文件),然后通过 .map 文件将 .tfm 中所包含的字型信息与对应的中文TTF字体联系起来,最终实现中文字体在排版中的嵌入。

4 安装字体

TTF字体文件及前文中生成的 .enc文件、.tfm文件与 .map文件,需要移至TeX目录树中才可以被ConTeXt使用。

在ConTeXt的TeX目录树中,可将字体文件存放在 $TEXMFFONTS 目录下。如果是按照Linux下最小化安装ConTeXt中的方法安装的ConTeXt,那么 $TEXMFFONTS 目录即为context-installation-directory/tex/temxf-fonts。至于一些TeX发行版的ConTeXt环境,可参阅相关文献,只需确认 $TEXMFFONTS 的实际位置即可。

字体安装的具体操作如下:

##在TeX目录书中创建字体安装目录
$ mkdir -p $TEXMFFONTS/fonts/truetype/chinese
$ mkdir -p $TEXMFFONTS/fonts/enc/chinese
$ mkdir -p $TEXMFFONTS/fonts/map/chinese
$ mkdir -p $TEXMFFONTS/fonts/tfm/chinese

## 安装字体文件
$ mv *.ttf $TEXMFFONTS/fonts/truetype/chinese
$ mv *.enc $TEXMFFONTS/fonts/enc/chinese
$ mv *.map $TEXMFFONTS/fonts/map/chinese
$ mv *.tfm $TEXMFFONTS/fonts/tfm/chinese

注意,.enc文件只需安装一次,以后再安装中文TTF字体时,可以省略它。

最后需要更新一下TeX目录树,以便ConTeXt可以找到这些文件。操作如下:

$ mktexlsr

5 中文TTF字体配置

现在,虽然字体已经安装,但是还是不可以直接使用的。需要对ConTeXt中的中文字体配置文件font-chi.tex进行一些修改才可以使用。

使用kpsewhich工具可以查找到font-chi.tex文件的具体位置,操作如下:

$ kpsewhich font-chi

搜索到font-chi.tex文件的具体位置后,使用文本编辑器打开它,在其中找到以下内容:

    \loadmapfile [uni-htsong.map]
    \loadmapfile [uni-htfs.map]
    \loadmapfile [uni-hthei.map]
    \loadmapfile [uni-htkai.map]

这是http://wiki.contextgarden.net/Chinese上所讲述的方法中有关htfs.ttf、hthei.ttf、htkai.ttf、htsong.ttf这四种中文TTF字体的 .map文件的装载代码。除非你已经安装了这四种字体,否则暂时可以把它们注释掉,然后再添加本文示例所用的FZYingBiKaiShu.ttf字体的映射文件装载语句。具体操作如下:

%    \loadmapfile [uni-htsong.map]
%    \loadmapfile [uni-htfs.map]
%    \loadmapfile [uni-hthei.map]
%    \loadmapfile [uni-htkai.map]
    \loadmapfile [uni-FZYingBiKaiShu.map]

然后在font-chi.tex文件中寻找以下内容:

\definefontsynonym [SimplifiedChineseKaiTiRegular]         [gbkai]    [encoding=gbk]
\definefontsynonym [SimplifiedChineseKaiTiSlanted]         [gbkaisl]  [encoding=gbk]
\definefontsynonym [SimplifiedChineseKaiTiBold]            [gbkai]    [encoding=gbk]
\definefontsynonym [SimplifiedChineseKaiTiBoldSlanted]     [gbkaisl]  [encoding=gbk]

以上代码是ConTeXt预设的四种简体中文楷体字体类型,分别是“楷体”、“楷体的斜体”、“楷体的粗体”、“楷体的粗斜体”。由于我们现在只安装了一款方正硬笔楷体,所以这里就将这4种楷体字型都对应到现在所安装的方正硬笔楷体上。操作如下:

\definefontsynonym [SimplifiedChineseKaiTiRegular]     [uni-FZYingBiKaiShu-]    [encoding=uni-cjk]
\definefontsynonym [SimplifiedChineseKaiTiSlanted]     [uni-FZYingBiKaiShu-]  [encoding=uni-cjk]
\definefontsynonym [SimplifiedChineseKaiTiBold]        [uni-FZYingBiKaiShu-]    [encoding=uni-cjk]
\definefontsynonym [SimplifiedChineseKaiTiBoldSlanted] [uni-FZYingBiKaiShu-] [encoding=uni-cjk]

如果你手头上恰好对应这四种字型的字体,可以按照本文所讲述的过程将它们一一安装,并对font-chi.tex文件作相应修改。

6 测试

下面是一份在ConTeXt文档中使用本文所安装的FZYingBiKaiShu.ttf字体的示例文档,内容如下:

\enableregime[utf]
\usemodule[chinese]

\starttext
\SimKaiTi
你好,方正硬笔楷书!
\stoptext

使用texexec编译后的输出效果如下图所示:

ConTeXt-方正硬笔楷书

后记

本文只是讲述ConTeXt的中文TTF字体的一般安装方法,该方法只对PDFTeX引擎有效。若能理解本文所讲述的各个步骤,再仔细研读ConTeXt的Font in ConTeXt手册,会对深刻理解ConTeXt的中文处理有所帮助。

另外,font-chi.tex文件中对于中文字体给出了许多的预定义,我们在安装了各种中文TTF字体后,只需要认真观摩一下,进行相应的修改,就可以顺利的将这些中文字体应用到ConTeXt文档中。


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter