覚え書き > 中期朝鮮語PDFの作成

main menu

miscellaneous

Valid HTML 4.01!

Contact

Hotmail

さて,TeXで朝鮮語を使う+PDFの作成までの作業で,いったんPDFは作成できるようになったと思います.以下では,CJKパッケージを利用して,日本語と朝鮮語(中期朝鮮語含む)が混在したPDFの作成について述べてみます.

既にTeX/LaTeXの基本システム,さらにCJKパッケージがインストールされているものとします.詳細についてはTeXのインストールTeXで朝鮮語を使う+PDFの作成と,関連したリンクを参照してください.また,中期朝鮮語の文書作成には,Micorosoft社の配布するNew Batang(あるいはNew Gulim)フォントが必要です.これらのフォントの入手などについては閲覧に必要なフォントについてをご覧ください.

なお,TeX/LaTeXについての総合的な情報は,日本語TeX情報をご覧ください.また,誤った記述を発見された場合,ご教示いただければ幸いです.

ttf2tfmとttf2pkによるNew Gulim/New Batangフォントの変換

まずは手始めに,ttf2pkと補助漢字で示された方法と同様にして,New Gulimフォント中Unicodeの「私用領域」に割り当てられた文字を出力してみます.手順は,TeXで朝鮮語を使う+PDFの作成においてCyberbitフォントを処理したのと同じ方法です.ここではNew Gulimフォントのファイル名がNgulim.ttf,作成するフォント名をnGulimとしましょう.フォントのファイル名などはご自分の環境に合わせてください.まずはttf2tfmを使ってtfmファイルを作成します.そのための準備として,$TEXMF\ttf2pk\baseディレクトリ[2004/06/26 修正] $TEXMF\fonts\map\ttf2pk(TeXディレクトリ構成が変わっています.不明な場合はttfonts.mapの所在を検索してください.[Thanks: 宮崎さん])にあるttfonts.mapファイルに以下の行を記述しておきます.

nGulim@unicode@	Ngulim.ttf
なお,ファイルに修正を加える前に,ttfonts.map.oldのようにファイルを別名で保存しておきましょう.何か失敗したときに,簡単に復旧できます.

次に,コマンドラインから以下のようにタイプしましょう.

> ttf2tfm Ngulim.ttf nGulim@unicode@

かなり時間がかかりますが,処理が終了すると,カレントディレクトリにnGulim??.tfmといった大量のファイルが作成されているはずです(??は00からffまでの16 進数).これらの.tfmファイルは,$TEXMF/fonts/tfm/ttf2pkといったフォルダに移動します.

次に,dvioutでプレビューできるよう,ttf2pkを使って必要な文字を含むPKフォントファイルを生成します.例えばUnicodeのE390に割り当てられた文字である""(志部昭平式の転写ではd@rg)の場合,Unicodeの上位2桁であるE3とフォント名(nGulim)を合わせ,さらに引数として文字の解像度(ここでは例として300dpi)を,以下のようにコマンドラインからタイプします.

> ttf2pk nGulime3 300

これで,カレントディレクトリにnGulime3.300pkというファイルが生成されたはずです.このファイルをPKフォントの検索パス(例えば$TEXMF/fonts/pk/ttf2pk)に格納します.そして以下のようなサンプルファイルを作成し,LaTeXで処理してましょう.

\documentclass{article}
\newfont{\nGulimEIII}{nGulime3}
\begin{document}
{\nGulimEIII\symbol{"90}}
\end{document}

生成されたDVIファイルをプレビューし,"/d@rg"が表示されれば成功です.サンプルファイル:darg.texdarg.dvi

△top

dvipdfmxの準備

次は,生成されたDVIファイルをPDFに変換するための準備です.実際の変換にはdvipdfmxというコマンドを使います.PDFに変換する際,あるフォントでタイプセットされた文字については,このフォントをこのエンコーディングで変換する,という規則を示してやる必要があります.そのためのmapファイル(フォントマップファイル)が$TEXMF\dvipdfm\configディレクトリに格納されていますが,このうちcid-x.mapというファイルの末尾に,次の1行を追加してやります.

nGulim@Unicode@ 	Identity-H	:0:Ngulim.ttf
この記述方法やパラメータなどについては,cid-x.mapの記述を参照してください.なお,cid-x.mapも名前を変えて保存しておくことをお勧めします.私は,上述の1行とその他の朝鮮語関連のフォント設定を,全て別のファイル(例えばforhangul.map)に保存しておき,$TEXMF\dvipdfm\configディレクトリのdvipdfmx.cfgファイルからforhangul.mapファイルを読み込む,というように記述してあります.こうすれば,ハングルに関わる部分だけ設定を変えることが楽にできます.

ここまで設定したら,さっそく実験してみましょう.先の"/d@rg"を表示するためのサンプルファイルを使って,DVIファイルを処理し,Adobe Acrobat Readerなどのビューアを使って見てみます.うまく"/d@rg"が表示されればOKです.サンプルファイル:darg.pdf

結局処理の流れとしては,.texファイルをLaTeXで処理→生成された.dviファイルをdvipdfmxでPDFに変換,ということになります.

ここまでに示した方法と同様にして,New Batangフォントも利用することができます.ただし,いちいちUnicode番号で指定しなければならないため,非常に面倒です.これを解消するために,CJKパッケージを用いてUnicodeのまま文書を処理してみます.

△top

TeXソースの準備

TeX文書を作りましょう.日本語・朝鮮語の混在文書なので,UTF-8エンコーディングで作成します.CJKパッケージを利用する際には以下のようにLaTeXソースを用意します(%以下はコメントなので入力する必要はありません).TeXで朝鮮語を使う+PDFの作成ではあまり詳しく触れませんでしたが,簡単な解説をつけて示せば以下のとおりです.

\documentclass{article}
\usepackage{CJK} %% CJKパッケージ使用の宣言

\begin{document}
  \begin{CJK}{UTF8}{}
    %% ここに内容を書く
    %% UTF-8エンコーディングで作成
  \end{CJK}
\end{document}

CJKパッケージの使用方法については,付属のドキュメントをご覧ください.ここではCJK環境に関する部分のみ簡単に触れておきます.

\begin{CJK}[<fontencoding>]{<encoding>}{<family>}
...
\end{CJK}

このうち,<encoding>にはJIS,GB,KS,UTF8など,文字セットとエンコーディングを記述します.<fontencoding>は空白のままにしておいて構いません.また,<family>についても空白のままでけっこうです.なお,<family>を空白にしておくと,デフォルトの値であるsongが用いられます.このまま処理すると,c70song.fd(Font Definitionファイル)に従って,Bitstream Cyberbitフォントが用いられます(当然インストールされていればの話ですが).

以下の作業では,Cyberbitフォントがインストールされていることを前提とします.フォントについて詳しくは,閲覧に必要なフォントについてを参照してください.
△top

例題

TeXで朝鮮語を使う+PDFの作成におけるCJKパッケージの例題を参照してください.

△top

日本語と中期朝鮮語を混在させる

さて,先に紹介した方法では,単一のフォント(ここではデフォルトのCyberbitフォント)を用いた日本語と朝鮮語の混在したPDFしか作成できません.Cyberbitフォントには,中期朝鮮語で用いられる文字がないため,中期朝鮮語PDFの作成も無理です.ここでは,中期朝鮮語を用いるための方法を考えてみます.

先にFD(Font Definition)ファイルについて触れましたが,UTF-8エンコーディングのTeX文書をCJKパッケージで処理する際に用いられる,c70song.fdファイルについて見てみましょう.

...
\DeclareFontFamily{C70}{song}{\hyphenchar \font\m@ne}

\DeclareFontShape{C70}{song}{m}{n}{<-> CJK * cyberb}{}
\DeclareFontShape{C70}{song}{bx}{n}{<-> CJKb * cyberb}{\CJKbold}
...

ここに抜粋したのは,フォントの定義に関連する部分です.songというfont familyに対してcyberbという名前のフォントを使え,ということです(だと思います.間違ってるかもしれません).とりあえず,中期朝鮮語の文字をタイプセットするために,この部分を書き換えるという方法をとります.c70song.fdを直接書き換えるのもなんなので,TeX文書のプリアンブルの部分に書くことにします.先に作成したcjk.texを以下のように書き換え,別名で保存しましょう.

\documentclass{article}
\usepackage{CJK}

%% 使用するフォントの定義
\DeclareFontFamily{C70}{song}{}
\DeclareFontFamily{C70}{song}{}
\DeclareFontShape{C70}{song}{m}{n}{<-> CJK * nGulim}{}

\begin{document}
\begin{CJK}{UTF8}{}
こんにちは

안녕하세요

%% UnicodeのE391(d@rgs)とE7C0(bsgdai)
%% ↓この部分はNew Gulimフォントがないと表示されません.


\end{CJK}
\end{document}

New Gulim font demoこれをLaTeXとdvipdfmxで処理します.すると,先のcjk.pdfとは異なり,全てNew Gulimフォントでタイプセットされているはずです.New Gulimフォントを使うことで,中期朝鮮語のタイプセットができるようになりました.
左図はNew Gulimフォントの例です.

△top

フォントの使い分け

しかし,これではCyberbitフォントでタイプセットしたときと同じく,単一のフォントしか使われていません.New Gulimフォントは朝鮮語のフォントであるため,ひらがななどの字体がいまいち(だと思うんですが).そこで,日本語の部分はCyberbitフォントで,朝鮮語の部分はNew Gulimでタイプセットするようにします.New Gulimについては別にコマンドを用意することにします.プリアンブルの記述を,以下のように変えてみます.

\documentclass{article}
\usepackage{CJK}

%% mjというfont familyの作成・設定
\DeclareFontFamily{C70}{mj}{}
\DeclareFontShape{C70}{mj}{m}{n}{<-> CJK * nGulim}{}

%% \mjコマンドの定義
\newcommand{\mj}[1]{\CJKfamily{mj}#1\CJKfamily{}}

%% 本文
\begin{document}
\begin{CJK}{UTF8}{song}
こんにちは

\mj{안녕하세요}

%% UnicodeのE391(d@rgs)とE7C0(bsgdai)
%% ↓この部分はNew Gulimフォントがないと表示されません.
\mj{}

\end{CJK}
\end{document}

Cyberbit and New Gulim demo 1Cyberbit and New Gulim demo 2左図はその結果.右図は中期朝鮮語部分のみNew Gulimフォントで,他はCyberbitフォントでタイプセットした結果です.

△top

結論

ここまで,日本語と朝鮮語,さらに中期朝鮮語の文字を含むPDFを,CJKパッケージを用いて作成する方法について述べてきました.同様な方法により,日本語の基本フォントとしてMS明朝などを用いることもできますし,その他のフォントを利用することが可能です.ここまでの方法ではフォントを埋め込む設定になっていますが,フォントマップファイル(cid-x.mapなど)の記述を変えることで,フォントを埋め込まず,小さなサイズのPDFを作成することができます.

ただし,フォントの埋め込みについては,フォントごとに利用規約が異なるようですので注意が必要です.特に作成したPDFを配布する際に.

基本となるフォントをデフォルトのfont family(UTF-8エンコーディングを用いる際はsong)に設定し,部分的にしか用いないフォントをコマンドで指定するのが楽でしょう.また,文書ごとにプリアンブルにフォント設定を記述するのは面倒なので,その部分だけをスタイルファイル(例えばmystyle.styなど)に記述して,\usepackage{}によって呼び出す,という方法が考えられます.

ここまで記述した方法は,かなり強引な方法かとも思われますが,他にもっとスマートな方法があれば,教えていただけるとありがたいです.何といっても仕組みがよく分かっていませんので,かなり遠回りをしている可能性もあります.いちいちコマンドでフォント指定するのも面倒ですし.諸賢のご教示をお願いします.

△top

参考文献