老板要去开会了!- -| 回首页 | 2004年索引 | - -好几天没写什么了!

tex的中文化- -

                                      

主要是针对linux系统而言,具体来说是debian下tetex的中文化,之所以有这些针对性没有什么特别的,因为我用的就是tetex,呵呵!

tex安装完成后,制作中文文档需要做一些配置。对于debian下安装的tetex,中文化可
分为一下三步:
1.安装CJK软件包
2.生成中文字体
3.设置字体配置文件


一、安装CJK软件包
apt-get install cjk-latex


二、生成中文字体
下载gbkfonts程序和字体simsun.ttf、simli.ttf、simhei.ttf、simkai.ttf、simfang.ttf、simyou.ttf……等等TrueType字体,采用以下命令:
gbkfonts simsun.ttf song
gbkfonts simli.ttf li
………………
等等生成Type1字体文件,和一些配置文件。(所有这些*.ttf文件都可以在windows的系统文件中找到,或者是对应的*.ttc文件,直接重命名为*.ttf即可)


三、设置字体配置文件
生成了上述字体后,还需要配置一下,这样Tex才能找到所需要的字体。

1.将gbkfonts新生成的所有文件和目录拷贝到/usr/local/share/texmf中。

2.让dvips使用Type1中文字体:
a) TeX 首先生成 dvi 文件,然后 dvi 可以被 dvips 这样的程序转成 PostScript(*.ps)或者被 dvipdfm 或 dvipdf 转换成 PDF。
b) LaTeX 在生成的 dvi 文件里记录的汉字名称叫做 gbksong01,gbksong02, ...而不是在 begin{CJK}{song} 里指定的那个 "song",这是很容易混淆的。"song" 根据你使用的汉字不同,被CJK的fd文件映射为了 gbksong01, gbksong02...
c) dvips 要使用汉字,就必须让 dvips 知道 Type1 字体在哪里。
d) dvips 通过 cjk.map 来找到字体,cjk.map 是在第二步用 gbkfonts 生成 Type1字体时生成的文件,我们必须在 dvips 的配置文件中指定 cjk.map
e) 在/usr/local/share/texmf/dvips/下新建一个目录,名为config。
f) 把 gbkfonts 生成的 cjk.map 文件复制到刚才建立的 config 目录下,并将/etc/texmf/dvips 目录下的 config.ps 也复制到 这个 config 目录下,并在复制过来的 config.ps 文件中加入一行:
p +cjk.map

说明:
a) /etc/texmf/ 一般称为 TEXMFMAIN 目录,保存着安装 tetex 时,自带的配置文件,而 /usr/local/share/texmf/ 一般称为 TEXMFLOCAL 目录,可以定制自己的配置文件,且重装 tetex 时不会删除掉,可以继续用。
b) config.ps 文件中指定 dvips 使用的 cjk.map,可以不必把 cjk.map 文件复制到本目录下,只要在 config.ps 中指定 cjk.map 的位置即可。如:
p +/usr/local/share/texmf/cjk.map
c) cjk.map 是一个映射文件。
d) dvipdf 实际上利用的是 dvips,所以它和 dvipdfm 很不一样。

3.dvipdfm-CJK 使用 Type1 中文字体:
dvipdfm-CJK 是支持中日韩字体的 dvipdfm,它同样需要通过映射文件来找到名字对应的字体文件,需要哪些映射文件是在 $TEXMFLOCAL/dvipdfm/config/ 下由config 文件指定的。这和dvips 相似。如果你没有,就把 $TEXMFMAIN/dvipdfm/ 下的 config 文件拷贝过来,在复制过来的 config 文件中加入一行:
f cid-x.map
同样由于没有指定 cid-x.map 所在的目录,默认就在本目录下,所以应将 gbkfonts 生成的 cjk.map 文件复制到 $TEXMFLOCAL/dvipdfm/config/ 下。

4.pdflatex 直接使用 Type1 中文字体:
方法基本跟上面相同。
将 $TEXMFMAIN/pdftex/ 下的 pdftex.cfg 文件复制到 $TEXMFLOCAL/pdftex/config/目录下,并将 cjk.map 文件复制到 $TEXMFLOCAL/pdftex/config/ 目录下,在复制过来的 config 文件中加入一行:
map +cjk.map
同样这里的 cjk.map 也可以不用复制过来,只要在上面一行中加入路径即可。

5.pdfTeX 直接使用 TrueType 中文字体:
a) 设置TTF字体路径
需要告诉 TeX 系统 TTF 字体放在哪里。这个信息应该记录在 $TEXMFMAIN/texmf.cnf 文件里,在改文件中有一行:
TTFONTS = .;$TEXMF/fonts/truetype//
目录后的两根//表示寻找的时候搜索这个目录及其子目录,可以将 *.ttf 文件复制到上述目录中,也可以将 *.ttf 文件所在的目录加入到这一行中,目录之间用分号 ; 隔开。这里的 $TEXMF 指的是所有的 texmf 目录。
b) 让 pdfTeX 找到字体
pdfTeX 还需要一些映射文件来决定字体文件的名字。这些映射文件都已经由 gbkfonts 生成了: gbksong.map, gbkkai.map,... 它们已经被拷贝到了$TEXMFLOCAL/pdftex/config 目录下,pdfTeX 还要知道使用哪些 map 文件。这个信息记录在 $TEXMFLOCAL/pdftex/config/pdftex.cfg 中. 如果没有这个文件,就把 $TEXMFMAIN/pdftex/ 下的 pdftex.cfg 文件拷贝过来,并将 gbkfonts 生成的pdftex.cfg 文件中的内容附在由 $TEXMFMAIN/pdftex/ 拷贝过来的 pdftex.cfg 文件后即可。

说明:需要注意的是 ConText 要用到 pdfTex,如果 pdfTeX 使用 TrueType 中文字体,则配置好 ConText 后,编译生成幻灯片会出现:
Error: pdfetex (file /usr/share/fonts/zh_CN/TrueType/simsun.ttf): can't find ta
ble `maxp'
==> Fatal error occurred, the output PDF file is not finished!
的错误,无法解决。 而如果 pdfTeX 使用 Type1 中文字体就没有任何问题。这个问题确实是由于2000以后的MS系统带的simsun.ttc有问题,使用windows98中带的simsun.ttc就没有任何问题。

6.ConText的中文配置!!!
所有工作都是在 $TEXMFMAIN/tex/context/base/ 目录下进行。
a) 因为使用的是 GBK 编码的中文字体,编辑$TEXMFMAIN/tex/context/base/font-uni.tex文件,将下面这段代码前面的注释去掉。注意不要把 "%D starttypen" 和"%D stoptypen" 的注释给去掉了!
defineucharmapping{GBK}#1#2%
{unicodeposition=#1
advanceunicodeposition -129
multiplyunicodeposition 190
advanceunicodeposition #2
advanceunicodeposition-ifnum#2>127 65else64fi
dorepositionunicode}
b) 编辑 $TEXMFMAIN/tex/context/base/cont-sys.ori 文件,在其中加上一行:
defcurrentucharmapping{GBK}
这一行必须加在 protect endinput 一行前,否则不起作用。然后另存为 $TEXMFMAIN/tex/context/base/cont-sys.tex记得一定要另存为这样一个cont-sys.tex。
c) 添加字体别名。
此外,由于 ConTeXt 缺省定义的简体中文字体名分别为: gbsong gbkai gbhei gbfs gbli(具体参看 $TEXMFMAIN/tex/context/base/font-chi.tex), 所以如果系统里中文字体名不同的话,就必须修改 $TEXMFMAIN/tex/context/base/font-chi.tex 文件。如果系统使用的是 gbksong,...,gbkli, 可相应添加:
definefontsynonym [gbsong] [gbksong] [encoding=gbk]
definefontsynonym [gbsongsl] [gbksongsl] [encoding=gbk]
definefontsynonym [gbhei] [gbkhei] [encoding=gbk]
definefontsynonym [gbheisl] [gbkheisl] [encoding=gbk]
definefontsynonym [gbkai] [gbkkai] [encoding=gbk]
definefontsynonym [gbkaisl] [gbkkaisl] [encoding=gbk]
definefontsynonym [gbfs] [gbkfs] [encoding=gbk]
definefontsynonym [gbfssl] [gbkfssl] [encoding=gbk]
definefontsynonym [gbli] [gbkli] [encoding=gbk]
definefontsynonym [gblisl] [gbklisl] [encoding=gbk]
d) 重新生成 ConTeXt 的格式文件
ConText 采用 texexec 脚本进行编辑,这个脚本用到了 perl,所以 MS 系统必须安装 perl (一般用 activeperl ),linux 下一般都已经装了 Perl,配置完 ConTeXt后,需要重新生成 ConTeXt 的格式文件,在 $TEXMFMAIN/tex/context/base/ 目录下运行:
texexec --make
即可。


至此,搞定,收工!


说明:需要注意的是,每次增加了文件在 TeX 的目录树($TEXMF)里,都需要运行mktexlsr 来刷新文件名数据库ls-R,这样 TeX 的程序才能顺利找到各种文件。



% The main tree, which must be mentioned in $TEXMF, below:
TEXMFMAIN = /usr/share/texmf

% A place for local additions to a "standard" texmf tree. For example:
TEXMFLOCAL = /usr/local/share/texmf
TEXMFOLDLOCAL = /usr/local/lib/texmf

TEXMF = {$HOMETEXMF,!!$TEXMFLOCAL,!!$TEXMFOLDLOCAL,!!$TEXMFMAIN}

- 作者: rondon 2004年09月18日, 星期六 15:47 加入博采

Trackback

你可以使用这个链接引用该篇文章 http://publishblog.blogchina.com/blog/tb.b?diaryID=110699

回复

评论内容: