CTEX社区

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 30980|回复: 7

[宏包] 安装CJK之GBK(MiKTeX 2.6)

[复制链接]
发表于 2007-10-21 12:46:38 | 显示全部楼层 |阅读模式
我使用的TeX系统是Windows下的MiKTeX,版本2.60——从MiKTeX网站直接下载basic-miktex-2.6.2831.exe 安装。安装CJK,可以使LaTeX能够生成东亚等文字的文档,主要包括韩文、日文、GB中文和Big5中文。安装MiKTeX后,执行“开始-- >MiKTeX 2.6-->Setting”和“开始-->MiKTeX 2.6-->Browse Packages”都可以选择安装CJK package。其使用方法参考MiKTeX安装目录下有关CJK使用文档:doc/latex/cjk/CJK.txt;文档commands.txt 则总结了所有CJK.sty中的命令。
    MiKTeX提供安装的CJK和CJK fonts库,只提供GB 2312-80编码的宋体汉字。即,使用环境:
          \begin{CJK*}{GB}{gbsn}
由于GB 2312-80只收录了6763个汉字,有不少汉字,如部分在GB 2312-80推出以后才简化的汉字(如“啰”),部分人名用字(如中国前总理朱镕基的“镕”字),台湾及香港使用的繁体字,日语及朝鲜语汉字等,并未有收录在内。中文电脑开发商,于是利用了GB 2312-80未有使用的编码空间,收录了所有出现在Unicode 1.1及GB 13000.1-93之中的汉字,制定了GBK编码。CJK本身也提供了对GBK编码的支持,但要使用必须安装相应的字库和字库定义文件。下面就介绍如何安装和使用。目前,GBK共定义字符21886个,收录了中国大陆、台湾、日本及韩国通用字符集的汉字,大部分的繁体字也收录在内。
    为了不改动MiKTeX已有的文件,我自建了一个目录D:\MyMiKTeX,将自己添加和修改的文档放入其中。在“开始-->MiKTeX 2.6-->Setting-->roots”中添加此目录,并将其移动到MiKTeX安装目录(我是d:\Program Files\MiKTeX 2.6)之上。为下面的叙述,首先定义几个目录符号,参考“开始-->MiKTeX 2.6-->Setting-->roots”:

    * $Install = "d:\Program Files\MiKTeX 2.6",本机安装MiKTeX的目录;
    * $Comm = "C:\Documents and Settings\All Users\Application Data\MiKTeX\2.6",common data和common configuration所在目录,存放MiKTeX的一些配置和数据文件;
    * $MyMK = "D:\MyMiKTeX",自建的目录,存放自己添加的一些文件,这里主要用来存为支持GBK而新增的文件。实际上,MiKTeX为用户设置了存放本地文档的目录,参考“开始-->MiKTeX 2.6-->Setting-->roots”;这里为了突出我自己添加和增改内容,而未使用该本地目录。

=================================================================
    第一步,建字库定义文件*.fd。仿照目录$\Install\tex\latex\cjk\GB,建目录$MyMK\tex\latex\cjk\GB。仿照$\Install\tex\latex\cjk\GB目录下的c19song.fd文件,分别在$MyMK\tex\latex\cjk\GB目录中建宋体、仿宋、楷体、黑体、隶书、幼圆字体的*.fd文件,分别命名为:c19song.fd, c19fs.fd, c19kai.fd, c19hei.fd, c19li.fd和c19you.fd。以文件c19song.fd为例,其中非注释部分为:
%...
\def\fileversion{4.3.0}
\def\filedate{1999/06/20}
\ProvidesFile{c19song.fd}[\filedate\space\fileversion]

%...

\DeclareFontFamily{C19}{song}{\hyphenchar \font\m@ne}

\DeclareFontShape{C19}{song}{m}{n}{<-> CJK * gbksong}{}
\DeclareFontShape{C19}{song}{bx}{n}{<-> CJKb * gbksong}{\CJKbold}
\DeclareFontShape{C19}{song}{m}{sl}{<-> CJK * gbksongsl}{}
\DeclareFontShape{C19}{song}{bx}{sl}{<-> CJKb * gbksongsl}{\CJKbold}
\DeclareFontShape{C19}{song}{m}{it}{<-> CJK * gbksongsl}{}
\DeclareFontShape{C19}{song}{bx}{it}{<-> CJKb * gbksongsl}{\CJKbold}

\endinput

文件中命令\DeclareFontFamily和\DeclareFontShape的定义可以总结为:
\DeclareFontFamily{C19}{#1}{\hyphenchar \font\m@ne}
\DeclareFontShape{C19}{#1}{#2}{#3}{<#4> #5 * gbk#6}{#7}

参考$Install\doc\latex\base下文档fntguide.dvi,每种文本字库(text font)都有5个属性,分别是encoding, family, series, shape, size。以上命令\DelareFontShape就是定义这些属性。这里的C19表示CJK所使用的GBK字库的编码(encoding)。参考经典文档clatex.pdf(吴凌云 and 王磊. "中文LaTeX扩展安装指南" ),七个参数的定义为:

    * #1,字族(family),这里每个*.fd文件定义一种字族,分别取song, fs, kai, hei, li, yuan。例如,对应着CJK环境定义:\begin{CJK*}{GBK}{yuan};
    * #2,字系(series),这里可以取:m(medium weight)和bx(bold extended),分别表示正常和加粗字体。其中bx对应着latex文档中\bf或\textbf命令的使用字体;
    * #3,字形(shape),这里可以取:n(normal/upright),sl(slant)和it(italic),分别表示正常,倾斜和斜体。例如,it对应着latex文档中\it或\textit命令的使用;
    * #4,适用的字号(size),一般认为所有字号都适用,设置为“-”;
    * #5,这里一般取CJK和CJKb,其中CJKb表示用另外一种字体代替,例如上面的{bx}{n}的字库文件就用{m}{n}的字库文件gbksong代替,只是多了一个操作\CJKbold,用来加粗;
    * #6,字库文件名字,CJK会在gbk#6后面再加上字库的编号,以作为子字库的名字(subfont name)。它们会对应于MiKTeX的*.tfm文件,例如gbksong05.tfm,gbkkaisl02.tfm等,可以参考后面的目录$ MyMK\fonts\tfm\chinese下面的各个子目录文件;
    * #7,CJK生成加粗字体的一种预处理方法:通过平移字模后重叠得到。但效果并不太好,特别是放大后可以看到明显的锯齿痕迹。如果希望用此功能则设置为\CJKbold,否则空着。

    我定义的幼圆字体/字族的文件c19you.fd如下,以作对照:
%...
\def\fileversion{4.3.0}
\def\filedate{1999/06/20}
\ProvidesFile{c19yuan.fd}[\filedate\space\fileversion]

%...

\DeclareFontFamily{C19}{you}{\hyphenchar \font\m@ne}

\DeclareFontShape{C19}{you}{m}{n}{<-> CJK * gbkyuan}{}
\DeclareFontShape{C19}{you}{bx}{n}{<-> CJKb * gbkyuan}{\CJKbold}
\DeclareFontShape{C19}{you}{m}{sl}{<-> CJK * gbkyuansl}{}
\DeclareFontShape{C19}{you}{bx}{sl}{<-> CJKb * gbkyuansl}{\CJKbold}
\DeclareFontShape{C19}{you}{m}{it}{<-> CJK * gbkyuansl}{}
\DeclareFontShape{C19}{you}{bx}{it}{<-> CJKb * gbkyuansl}{\CJKbold}

\endinput

这里可以看到参数#1和#6可以不一样,#1对应着文档中CJK字族定义,而#6对应着相应的字体文件*.tfm名字。

========================================================
    第二步,安装字库文件。下载ftp.ctex.org的字库文件:/pub/tex/fonts/type1/font-chs.zip,展开。

    * 将font-chs/fonts/tfm/chinese/下所有子目录和*.tfm文件都拷贝到相应的$ MyMK/fonts/tfm/chinese/目录下。这些是各个字体/字族(song, fs, kai, hei, li, you)的*.tfm文件,分别有gbk#6??.tfm和gbk#6sl??.tfm两种,对应这*.fd文件中的定义。其中#6对应前面所说的参数 #6,而??是这些子字库文件的编号,取十进制01~94;
    * 将font-chs/fonts/afm/chinese/下所有子目录和*.afm文件都拷贝到相应的$MyMK/fonts/afm/chinese/目录下;
    * 将font-chs/fonts/type1/chinese/下所有子目录和*.pfb文件都拷贝到相应的$MyMK/fonts/type1/chinese/目录下。与*.tfm相对应的命名规则;
    * 将font-chs/fonts/dvips/chinese/map/下的两个*.map文件拷贝到相应的$MyMK/fonts/map/dvips/chinese/map/下。这两个文件为文本文件,实际上规定了前面*.tfm和*.pfb的对应关系。其中可以从文件gbk-t1.map看到,gbk#6??.tfm文件的字体与gbk#6??.pfb定义的相对应;而gbk-t1sl.map规定,gbk#6sl??.tfm文件的字体是由gbk#6??.pfb定义的字体作一个倾斜操作得到的。

    这里说明一下:*.tfm文件只是在latex编译*.tex时使用来确定字符的高和宽等,即一个盒子,得到dvi文件;而当用MiKTeX工具yap打开dvi,或用dvips来将*.dvi文档生成*.ps文件时,会去找相应的*.pfb字库文件;*.afm文件则是pdflatex在编译*.tex 时所使用的定义字符高和宽的文件,并直接生成*.pdf文件。

==========================================================
    第三部,配置使用环境。进入MiKTeX的命令环境,如果使用WinEdt,则直接点击工具栏的“Command Prompt”图标,进入DOS命令框。执行命令:initexmf --edit-config-file updmap,在打开的文件updmap.cfg中添加两行:
    Map gbk-t1.map
    Map gbk-t1sl.map
保存并关闭这个文件。updmap.cfg文件位于$Comm\miktex\config目录下,一般都不直接打开修改。
    然后在DOS命令框中分别执行命令:

    * initexmf -u
    * initexmf --mkmaps
    * initexmf -u

Wonderful!!下面就可以使用我们的CJK之GBK环境了。
   
========================================================
    第四部,使用。由于一些GBK字符的第二个byte可能会与latx或pdflatex的一些字符定义冲突,在用latex和pdflatex命令编译*.tex文档时出现错误:

    * Paragraph ended before \CJK@XX was complete

哈哈,新版的CJK已经考虑得非常周到了:有命令gbklatex和gbkpdflatex分别来替代latex和pdflatex,非常圆满地编译含有GBK编码的文档。OK,让我们享受CJK之GBK带来的快乐吧,编辑文档test.tex:
\documentclass[11pt]{scrbook}
\usepackage{CJK}

\begin{document}
\begin{CJK*}{GBK}{song}

\noindent 隨園詩話卷一

\medskip{一}\medskip

\noindent 古英雄未遇時,都無大志,非止鄧禹希文學,馬武望督郵也。晉文公有妻有馬,不肯去齊。光武貧時,與李通訟逋租於嚴尤。尤奇而目之。光 武歸謂李通曰:『嚴公寧目君耶?』窺其意,以得嚴君一盼爲榮。韓蘄王爲小卒時,相士言其日後封王。韓大怒,以爲侮己,奮拳毆之。都是 一般見解。鄂西林相公辛丑元日云:『攬鏡人將老,開門草木生。』詠懷云:『看來四十猶如此,便到百年已可知。』皆作郎中時詩也。玩其 詞,若不料此後之出將入相者。及其爲七省經略,在金中丞席上云:『問心都是酬恩客,屈指誰爲濟世才?』登甲秀樓絕句云:『炊煙卓午散 輕絲,十萬人家飯熱時。聞訊何年招濟火?斜陽滿樹武鄉祠。』居然以武侯自命:皆與未得志時氣象迥異。張桐城相公則自翰林至作首相,詩 皆一格。最清妙者:『柳蔭春水曲,花外暮山多。』『葉底花開人不見,一雙蝴蝶已先知。』『臨水種花知有意,一枝化作兩枝看。』扈蹕云 :『誰憐七十龍鐘叟,騎馬踏冰星滿天。』和皇上風箏云:『九霄日近增華色,四野風多仗寶繩。』押『繩』字韻,寄託遙深。

\end{CJK*}
\end{document}

然后,在DOS命令框中,分别执行:

    * gbkpdflatex test.tex  %得到test.pdf文档
    * gbklatex test.tex  %得到test.dvi文档
    * 用pdf阅读工具(acrobat reader或gsview)打开test.pdf
    * yap test.dvi  %要生成*.pk文件,会等得比较久


What would you see???
倾力之作,版主加精!:-)

[ 本帖最后由 EChang 于 2007-10-29 21:16 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

评分

1

查看全部评分

发表于 2007-10-21 14:22:16 | 显示全部楼层
已经设置成高亮了。希望以后能够有更好的文档
我的评论由下面两点
1 如果想叙述详细过程的话,可以告诉初学者,TeX的字体的原理是什么,为什么要pfb,tfm呢?afm有什么作用呢?另外你如何让pdftex直接使用ttf而不是pfb呢?dvipdfm(x)如何嵌入ttf字体呢?不同的TeX发行版本比如MikTeX,它的目录结构是什么呢?如果这些问题都不讲明白,那初学者仍然不知道如何加入新的字体,相反,使用相关的工具比如gbkfonts之类,可以很方便地加入所想要的字体,那不如直接指导初学着如何用gbkfonts呢。
2 目前来说,使用pdftex或者etex调用中文字体,网络上大部分文章都已经介绍得很详细了。目前由于CTEX的努力,也没有必要去实际操作,除非你是Unix用户,建议广大的对折腾TeX有兴趣的用户,可以研究下XeTeX或者LuaTeX。
发表于 2007-10-22 08:29:58 | 显示全部楼层
原帖由 yulewang 于 2007-10-21 14:22 发表
已经设置成高亮了。希望以后能够有更好的文档
我的评论由下面两点
1 如果想叙述详细过程的话,可以告诉初学者,TeX的字体的原理是什么,为什么要pfb,tfm呢?afm有什么作用呢?另外你如何让pdftex直接使用ttf ...

版主的要求不低啊,呵呵。

这种帖子很好的,至少对那些不知道如何添加字体的人来说,可以借鉴的!
发表于 2007-10-22 18:20:02 | 显示全部楼层
>版主的要求不低啊,呵呵。
不是要求,是这样的帖子太多了而已。目前的用户不是用tex的就是折腾tex的,对于用tex的,下载一个CTeX足矣,也没有必要老是升级更新,Unix下用TeX的,先前也有一个帖子加入了精华并且长期高亮。对于折腾TeX的人而言,MikTeX2.6也好,TeXLive 2007也罢,都是提供XeTeX的,在未来还会增加LuaTeX的支持,pdfTeX的时代已经过去了,我倒是希望各位多多写些研究这两个新引擎的文章,如果有新意,我一定会加精华和置顶的,比如各位可以看到yindian的若干篇文章就如此,虽然例如割注之类的对大多数人意义不大,但是对于中文样式的定制,给了我们很好的启发,我对此依然加精华置顶。另外现在网友的ConTeXt的研究也很少,如果有这方面的原创,我也做相同处理。
发表于 2007-10-22 18:22:51 | 显示全部楼层
ft...我原先设置成高亮的,怎么现在没有了呢,重新高亮之.......
发表于 2007-11-10 23:01:16 | 显示全部楼层
好文章。

谢谢共享!
发表于 2008-3-12 23:35:16 | 显示全部楼层
CJK 4.7带有两种简体中文字体:gbsn和gkai

MiKTeX 2.7\tex\latex\cjk\GB\和MiKTeX 2.7\tex\latex\cjk\UTF8\目录里有以下字体定义文件:
c10fs.fd
c10gbsn.fd
c70gbsn.fd
c70gkai.fd

c10fs.fd指向字库文件gsfs14 (这种字库找不到,应该是CJK根本就没安装它)
c10gbsn.fd -> gbsnlp
c70gbsn.fd -> gbsnu
c70gkai.fd -> gkaiu

MiKTeX 2.7\miktex\config\updmap.cfg 里定义了以下map
# arphic
Map bkaiu.map
Map bsmiu.map
Map gbsnu.map
Map gkaiu.map

在MiKTeX 2.7\fonts\map\arphic目录里有上面这几个map文件。相应的字库文件放在以下几个目录:
MiKTeX 2.7\fonts\afm\arphic
MiKTeX 2.7\fonts\tfm\arphic
MiKTeX 2.7\fonts\type1\arphic

所以在latex文档中使用\CJKfamily{gbsn}这样的语句时,系统会根据.fd文件找到字库文件,并根据.map文件使用相应的字库。

这里有个问题,C10和C70有什么区别呢?这两个.fd文件里的font-family都是gbsn。
发表于 2008-3-12 23:56:29 | 显示全部楼层
安装ctex-fonts之后,在Documents and Settings\user\Local Settings\Application Data\MiKTeX\2.7\tex\latex\CJK\GB\目录里有以下字体定义文件
c19song.fd
c19fs.fd
c19hei.fd
c19kai.fd
c19li.fd

Documents and Settings\user\Local Settings\Application Data\MiKTeX\2.7\dvips\chinese\目录有以下.map文件
t1-gbksong.map
t1-gbkfs.map
t1-gbkhei.map
t1-gbkkai.map
t1-gbkli.map

而字库文件在以下目录里。
\Documents and Settings\user\Local Settings\Application Data\MiKTeX\2.7\fonts\afm
\Documents and Settings\user\Local Settings\Application Data\MiKTeX\2.7\fonts\tfm
\Documents and Settings\user\Local Settings\Application Data\MiKTeX\2.7\fonts\type1

但是我用\CJKfamily{li}编译无法通过,于是打开以下配置文件
Documents and Settings\user\Local Settings\Application Data\MiKTeX\2.7\miktex\config\updmap.cfg
添加map
# GBK
Map t1-gbkli.map

执行以下命令
initexmf -u
initexmf --mkmaps
initexmf -u

还是不能编译。为什么呢?错误信息是

LaTeX Font Warning: Font shape `C70/li/m/n' undefined
(Font)              using `C70/song/m/n' instead on input line 50.

("d:\edit\MiKTeX 2.7\tex\latex\cjk\UTF8\c70song.fd")
! Undefined control sequence.
try@size@range ...extract@rangefontinfo font@info
                                                  <-*>@nil <@nnil
l.50

?

难道是因为ctex-fonts只提供了c19li.fd,而没有c70?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|CTEX ( 京ICP备05002817号 )

GMT+8, 2018-10-20 15:22 , Processed in 0.062829 second(s), 12 queries , Gzip On, XCache On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表