覚え書き > CJKパッケージで多言語を使う

main menu

miscellaneous

Valid HTML 4.01!

Contact

Hotmail

既にTeXで朝鮮語を使う+PDFの作成で,CJKパッケージのインストールとその例題を見ました.ただしその例題ではUTF-8エンコーディングのみを使用して,いくつかの言語を混在させました.また,.dviファイルのプレビューなどについても触れませんでした.ここでは,各言語ごとのエンコーディングを使用して多言語を混在させるための設定などを見ていきますが,その際,朝鮮語に重点を置いて見ていくこととします. [2005/01/29] 中国語に関する記述を追加しました.末尾の番外編を参照してください.
ここではいくつかの方法について説明していきますので,必ず最後まで読んでから実際にやってみてください.

CJKパッケージを用いた朝鮮語の処理

フォントの入手とインストール

CTANのfonts/CJK/ディレクトリから各言語で必要なフォントを入手します.READMEに従ってダウンロードしましょう.日本語フォントで必要なのはkanji48.tar.gzjisksp40.tar.gzで,朝鮮語フォントで必要なのはhan.300.tar.gz(またはhan.600.tar.gz)(ハングル字母と完成型の文字を収録),han.tfmvf.tar.gz(font metric fileとvirtual font),hanja65.tar.gz(漢字フォント)の各ファイルです.詳細についてはfonts/CJK/ディレクトリにあるREADMEを参照してください.

ダウンロードしたらファイルを展開します.tarなどのプログラムを使って,$TEXMFの上位ディレクトリで展開しましょう.

dvioutでプレビューするための設定

フォントを入手してインストールすれば,CJKパッケージで組版するための準備は終わっています.基本的にこのままでもdvioutでプレビューすることができると思いますが,実際にやってみると朝鮮語の表示がうまくいきませんでした.というより,フォントの設定ファイルを見つけられずに表示できない,という感じです.ここから先の記述は,環境により役に立つかもしれないし,立たないかもしれません.ご了承ください.

朝鮮語環境でのdvioutの設定については,KTUGこの記事が参考になります.この記事によると,dvioutのフォント設定(Setup Parameters... -> Fontタブ)において,TEXPK:の値を次のように設定しろ,とあります.

^r\tfm\\^s.tfm;^r\pk\\dpi^d\^s.pk;^r\vf\\^s.vf;^r\ovf\\^s.ovf

この設定は,環境によって当然異なると思いますが,重要なのはセミコロンで区切られた二つ目の項目です.ここだけ再度見てみましょう.

^r\pk\\dpi^d\^s.pk

上記のフォント,han.300.tar.gzを展開すれば分かると思いますが,$TEXMF\fonts\pk\{cx,ljfour}\ksc5601\han\ディレクトリ以下には,それぞれdpi??(??は300などの解像度)といった名前で,解像度ごとに.pkファイルがインストールされています.どうもこのディレクトリ名のために,ファイルを見つけられなかったようです.管理者の場合,この部分を追加して設定することで,無事dvioutでプレビューできるようになりました.

上記の方法以外に,ttf2pkを使って.pkファイルを作ってやることで,とりあえず表示だけはできるようになります.その場合,ttfonts.mapファイルに
kmj@UKS@   batang.ttc   Pid=3 Eid=0 Fontindex=0
などを記述して,$TEXMF\fonts\pk\modeless\ksc5601\han\ディレクトリで
> ttf2pk -q kmj06 300
として.pkファイルを作成します."kmj06"はあくまで例です.ただし,この方法では字間が非常に詰まってしまい,dvipdfm(x)などでPDFを作成した際に,思うような結果が得られません.ここまで書いておいて何なんですが,この方法はおすすめできません.あしからず.

さて,次はこの設定でPDFを作ってみましょう.

dvipdfmxでPDFを作るための設定

これも,基本的にはTeXで朝鮮語を使う+PDFの作成中期朝鮮語PDFの作成で見たのと同じです.ただし,.tfmファイルは既にフォントに付属しているので,ここで作成する必要はありません.必要なのは,cid-x.mapファイルへ記述を追加することだけです.日本語と朝鮮語について見てみましょう.

cid-x.mapに以下の記述を追加します.

%%% 日本語フォントに関する設定
jsso12@UJIS@	UniJIS-UCS2-H	:0:!msmincho.ttc

%%% 朝鮮語フォントに関する設定
kmj@UKS@	UniKS-UCS2-H	:0:!batang.ttc
kmjb@UKS@	UniKS-UCS2-H	:0:!batang.ttc,Bold
なお,対応するCMapファイル(ここではUniJIS-UCS2-HUniKS-UCS2-H)が存在することを前提としています.

この方法では,結局字間の詰まったPDFができてしまいます.原因が何なのかよく分からないのですが,とりあえずこの現象を解消しなければなりません.次のセクションで,その解消方法について説明していきます.

CJK-UHCの導入

KTUGのこの記事では,UHC(Unified Hangul Codes)でエンコーディングされたKS X 1001の範囲外のハングルをCJKパッケージで処理するための方法が説明されています.この説明にしたがって設定を行なうと,字間の詰まっていない,きれいなPDFが作成できます.この内容を翻訳し,要約すれば以下の通り.

ここで注意しなければならないのは,c61mj.fdにある誤りを修正しなければならないことです.(参考).\CJKBoldとなっているのを,\CJKbold("bold"がすべて小文字)に直す必要があります.

この設定を導入することで,字間の詰まっていない,まともなPDFを作ることができるようになります.というわけで,最後のこの方法を使うようにしてください.

cjk-enc.elの利用

TeX文書の編集にEmacsを使っている人は,cjk-enc.elを利用することで,多言語の処理が楽になります.ここでは,cjk-enc.elについて簡単に説明してみます.

cjk-enc.elとは?

CJKパッケージに付属のドキュメントであるcjk-enc.docによれば,cjk-enc.elとは,Emacs(Mule)で入力した文書をTeXが理解できるようにしてくれるフィルタである,とされています.TeXで朝鮮語を使う+PDFの作成では単一の文字コード(UTF-8)しか使いませんでしたが,本来CJKパッケージを用いる際には,それぞれ文字集合ごとに\begin{CJK}という環境を用意してやる必要があります.例えば以下の通り.

…
\begin{CJK}{SJIS}{}
  …
  Shift-JISによる内容
  …
\end{CJK}

…

\begin{CJK}{KS}{}
  …
  KSによる内容
  …
\end{CJK}

…

Emacsを使えば複数の文字集合を同時に扱うことができるのですが,cjk-enc.elを用いると,いちいち環境を記述してやらずとも済んでしまいます.さっそく使ってみましょう.

cjk-enc.elの導入と設定

付属のドキュメントcjk-enc.docを参照して,cjk-enc.elを導入します.lispのあるディレクトリ(例えばsite-lispなど)にcjk-enc.elをコピーして,Emacsから読み込むために以下の記述を.emacsに加えます.

(load-library "cjk-enc")

他に特別な設定は必要ありません.

cjk-enc.elを利用した文書の作成

あとは文書を作成するだけですが,注意する点がいくつかあります.まず,CJK環境を記述しないこと.cjk-enc.elが自動的に挿入してくれます.あと,いくつかの文字集合が混在している場合,保存する時のエンコーディングをUTF-8などではなくemacs-muleにしてやること.単一の文字集合を用いる場合には,これは関係ありません.以下,処理の流れを見てみましょう.

まず,TeX文書を作ります.次に保存ですが,普通に保存する(C-x C-s)のではなく,cjk-write-fileというコマンドを使います(M-x cjk-write-file).こうすると,文書が保存され,<ファイル名>.cjkという名前のファイルが作成されます.次にLaTeXで処理しますが,作成したTeX文書ではなく,<ファイル名>.cjkというファイルに対して処理を行ないます.

試しに作ってみましょう.次のような内容のファイルを用意します.ファイル名はhello.texとしましょう.

\documentclass{article}
\begin{document}
こんにちは.
안녕하세요?
\end{document}

このファイルをEmacsで作成したら,cjk-write-fileコマンドを実行します.実行の際に保存する文字コードを聞かれるかも知れません.その場合には,emacs-muleを選択してください.

するとhello.cjkというファイルができるはずです.このファイルをLaTeXで処理しましょう.

> latex hello.cjk

これでできあがったhello.dviをプレビューすると,日本語と朝鮮語がきちんと組版されているはずです.場合によってはそのままdvipdfm(x)などでPDFを作成することもできるでしょう.

この他,いろいろな使い方がドキュメントで説明されています.詳しい解説や使用方法についてはそちらを参考にしてください.AUCTeXといっしょに使うこともできるようです.

おわりに

ここまで,CJKパッケージを用いた多言語混在文書の作成方法と,Emacsで用いるcjk-enc.elの(簡単な)使用方法について見てきました.これらのツールを用いると,日本語/朝鮮語の混在文書が簡単に作れることが分かると思います.特に,cjk-enc.elを使うことで,文書作成の際に文字コードの違いを意識せずに済むと思われます.

ただし,cjk-enc.elの使用についてはもっと詳しく調べる必要があると思います.日本語と朝鮮語の混在文書では,日本語に合わせてスペースが勝手に削除され,朝鮮語の分かち書きがうまく実現されない場合があります.こういった現象を回避するにはどうすればよいか,さらにドキュメントをよく読む必要があるでしょう.

ここで紹介した方法について,間違いなどがあればご指摘をお願いいたします.

番外編:中国語の組版について

[2005/01/29] 追加 朝鮮語とは関係ありませんが,せっかくの"CJK"なので中国語にも触れておこうと思います.ただし,管理者が中国語をよく知らないので,朝鮮語の場合のKTUGのような,本国のリソースを利用することができません.管理者が自分で試してみた結果である,という点にご注意ください.

方法としては朝鮮語の場合と同様です.(1) フォントをインストールする,(2) ttfonts.mapに記述を追加,(3) ttf2tfm.tfmファイルを作り直す,(4) dvipdfm(x)でPDFを作るために,cid-x.mapに記述を追加する.

フォントのインストール

朝鮮語の場合と同様に,CTANのfonts/CJK/ディレクトリから必要なフォントをダウンロードします.ここではとりあえず,中国語簡体字(文字コードGB2312)に必要なjfs56.tar.gzをダウンロードして,$TEXMFの上位ディレクトリにて展開してください.

ttfonts.mapへの記述の追加

dvioutでプレビューするための設定です..tfmファイルからTrueTypeフォントを参照して,.pkファイルを作成するために必要です.どのTrueTypeフォントを利用するかにもよりますが,Microsoft Office2000などに付属しているsimsun.ttcを利用することにします.$TEXMF/fonts/map/ttf2pk/ttfonts.mapに以下を追加します.

gsfs14@UGB@	simsun.ttc	Pid=3 Eid=1 Fontindex=0

ここまでの設定で,dvioutでプレビューすることができますが,なぜか解像度が300ではなく208で表示されてしまいます.というわけで,先の朝鮮語と同様,新たに.tfmファイルから作り直してやりましょう.

.tfmファイルの生成

$TEXMF/fonts/tfm/gb2312/gsfs14/(デフォルトの場合)にて以下を実行します.フォントをダウンロードした際に付属していた.tfmファイルは別のディレクトリに保存しておいてもかまわないでしょう.

> ttf2tfm simsun.ttc -q -f 0 gsfs14@UGB@

カレントディレクトリにgsfs14{00-32}.tfmというファイルが作成されます.別のフォント名を用いる場合には,対応するフォント定義ファイル(.fd,GB2312の場合にはc10fs.fd)への変更も必要なので注意.ここまでの作業で,dvioutによるプレビューがきれいにできると思います.試してみてください.

dvipdfm(x)でPDFを作る

cid-x.mapに以下の記述を追加します.

gsfs14@UGB@       UniGB-UCS2-H         :0:!simsun.ttc

あとはdvipdfmxなどで処理すればPDFのできあがりです.以下は(例によって)老乞大の本文を処理したもの.今回は翻訳老乞大. chinese demo

上の例では,中期朝鮮語も含めています.現代朝鮮語でも用いられるハングルの部分と中国語簡体字の部分についてはフォントを埋め込んでいません.ちなみに翻訳老乞大自体は簡体字で書かれているわけではないのであしからず.なお,このようなPDFをAdobe Readerなどで表示するためには,対応する言語サポートパッケージが導入されている必要があります.

この調子で,中国語繁体字についても同じようにやっていけばよいと思われます.中期朝鮮語を使わないのであれば,上述のcjk-enc.elを用いるとかなり効率的に文書作成できるでしょう.