很多人被 LaTeX 的各种文件,字体搞的头昏脑胀(我就曾经是其中一个). 其实 LaTeX+CJK 处理汉字的过程很简单。是这样的:
首先你编辑了一个文件 example.tex,里面有如下内容:
\documentclass{article} \usepackage{CJK} \begin{CJK}{GBK}{song} \begin{document} 您 \end{CJK} \end{document}
#!/bin/sh test -f "`kpsewhich latex.fmt`" || fmtutil --byfmt latex exec tex -fmt=latex "$@"
为了达到这个目的,它把我们的汉字“您”变成了 "\C19/song/m/n/10/51 s", \C19/song/m/n/10/51 表示用 GBK 编码(C19) 的 song 体,粗细为 medium(m), 而不是 bold, 形状为upright(n), 而不是 italic, 大小是 10pt, 子集号码 51. 这个描述会被 C19song.fd 这个字体描述文件映射为gbksong51. 因为 C19song.fd 里有这样一行:
\DeclareFontShape{C19}{song}{m}{n}{ CJK * gbksong}{}
所以 "\C19/song/m/n/10/51" 这个命令就会把字体设置为 "gbksong51 at 10pt"(TeX术语). 后面接着一个"s", "s" 的 ASCII 码是 115, 正好是 “您” 在这个子集中的索引号。
%%BeginFont: SimSun51 %!FontType1-1.0: SimSun 2.10 %%Creator: ttf2pfb, $Id: ttf2pfb.c,v 1.2 2002/07/27 12:58:58 wy Exp $ %%CreationDate: Sun Jul 28 17:44:29 2002 %%VMusage: 030000 030000 ............... %%Page: 1 1 TeXDict begin 1 0 bop 639 523 a Fb(s)1926 8991 y Fa(1)p eop end %%Trailer ....
而你用 gsview 打开文件就看到了“您”。发现没有?"SimSun51" 就是插入Type1字体的开始处, 而"(s)" 就是说“输出字符串s”。这个字体里的"s"看起来就是“您”。而那个SimSun51,就是所谓的PostScript 字体名字。你的文档就是这样生成的。
从这个分析你可以看出,TeX 在本质上处理汉字是没有任何问题的,因为经过 CJK 的转化,汉字被转成了和英文字符一样的“盒子”。我们只要按照 TeX 的规则来处理这些盒子就可以实现与英文完全同样的功能。
最新评论