マクロツイーター

はてダから移行した記事の表示が崩れてますが、そのうちに直せればいいのに(えっ)

CJK パッケージ入門的な何か(1)

この記事の内容は古くなっています。CJK パッケージの解説(特に日本語を扱う話)については以下の記事を参照してください。

なお、本記事で紹介されている“bxcjkipafont パッケージ”を発展させたものが bxcjkjatype パッケージです。

CJK パッケージとは、8 ビット欧文 TeX エンジン上の LaTeX において CJK 言語(中国語・日本語・韓国語)を扱うためのパッケージとして最もよく使われているものである。ここで、「8 ビット欧文 TeX」というのは、pTeX 系でも UnicodeTeX(XeTeX/LuaTeX)でもないということで、LaTeX でいえばオリジナルの LaTeXlatex)と pdfLaTeX(pdflatex)が該当する。主に欧米や中国において CJK 言語を含む LaTeX 文書を作成するのに用いられている。*1

他の(pTeX 系/Unicode TeX)エンジンの何れかが使用可能な状況では CJK パッケージを特に選択する理由はない。日本語に関しては pTeX 系の方が機能も品質も優れているし、また、少なくとも現在は、CJK 言語全般に関して pTeX 系も Unicode TeX も CJK パッケージよりも優れているからである。実際、欧米や中国でも最近は Unicode TeX、特に XeLaTeX + xeCJK パッケージの利用に徐々に移行しつつあるようである。しかし、どうしても 8 ビット欧文 TeX を使わざるを得ない状況も確かに存在する。

  • TeX を内部で使用する文書作成(等の)ツール」において 8 ビット欧文 TeX しかサポートされていない。
  • TeXコンパイルを提供するオンラインのサービス」において 8 ビット欧文 TeX しかサポートされていない。
  • pdfTeX 特有の機能を使いたい。*2

従って、これに該当する状況で日本語(等の CJK 言語)を含む LaTeX 文書を作りたい場合には、今でも CJK パッケージは有望な選択肢となるだろう。

この記事では、現時点で最適と考えられる方式での CJK パッケージの使用法を解説する。ただし、CJK パッケージは非常に複雑なので、少しでも理解を容易にするため、以下のような前提条件を設ける。

  • 文字コードUTF-8 に限定する。*3
  • アウトラインフォントを埋め込んだ PDF 文書を作る。ビットマップフォントは論外。
  • もちろん和田研フォントは論外。*4日本語には「IPA フォント」等の TrueType/OpenType フォントを用いる。
  • DVI ウェアは pdfTeX と dvipdfmx に限定する。*5
インストール

この記事で扱う使用法の範囲で必要になるものは、CTAN のパッケージ名でいうと以下のようになる。最近(1 年以内)の TeX Live であれば全て含まれているはずである。*6W32TeX にはどれも含まれないので自分でインストールする必要がある。最低限必要なファイルをインストールする手順を併せて記した。

  • cjk ― CJK パッケージ本体
    アーカイブ(cjk-4.x.x.tar.gz)展開後、texinput ディレクトリ(自身)を $TEXMF/tex/latex/cjk/ 以下に移動。*7
  • cjkpunct ― CJKpunct パッケージ
    CJKpunct.sty を $TEXMF/tex/latex/cjkpunct/ に移動。
  • zhmetrics ― CJK 用の TFM ファイル群
    tex, fonts ディレクトリを $TEXMF/ に移動。*8

IPA フォントは TeX Live には既に含まれている。インストール済みでない場合は配布元から入手して(OS に)インストールしておく必要がある。

また、CJK パッケージでの「IPA フォント」の使用を補助するためのパッケージを用意したので、これもインストールする。
後ほど公開します

  • bxcjkipafont パッケージ (gist/zr-tex8r)
    bxcjkipafont.sty を $TEXMF/tex/latex/bxcjkipafont/ に移動。
最も基本的な使用法

CJK パッケージを使用した文書の作成方法を説明するために、以下に単純な文書の例を示す。

[test-cjk.tex]
% 文字コードは UTF-8 (BOM無)
\documentclass[a4paper]{article}
\usepackage{CJK,CJKspace,CJKpunct,bxcjkipafont}
\begin{document}
Here is a Japanese passage:

\begin{CJK*}{UTF8}{ipam}
「ただ今、CJK パッケージの
テスト中。」
\end{CJK*}
\end{document}

コンパイル組版)の方法は欧文の LaTeX 文書と同じである。

  • dvipdfmx の場合: 「latex test-cjk」で DVI ファイルに変換、その後「dvipdfmx test-cjk」で PDF 文書に変換する。
  • pdfTeX の場合: 「pdflatex test-cjk」で PDF 文書に変換する。

特に注意すべき要点は次の通り。

  • ファイルの文字コードは BOM 無しの UTF-8 にする。*9
  • 文書クラスは pLaTeX 専用のもの(jsarticle 等)以外は任意のものが使える。
  • CJK パッケージとともに必ず CJKspace、CJKpunct を読み込む。*10CJKpunct パッケージを読み込むと約物の周りの空きが自動調整される。例えば上の例では〈。」〉の箇所で半角詰められている。CJKspace パッケージについては後で少し説明する。
  • bxcjkipafont パッケージを読み込むと、IPA フォントのファミリ(ipam、ipag)が使えるようになる。それ以外のフォントの利用については後で説明する予定である。
  • 原則として、日本語(CJK 言語)の文字を含むテキストは全て CJK* 環境((または(後で登場する)CJK 環境。))の中に含める必要がある。

CJK* 環境の書式は以下の通り。

\begin{CJK*}{UTF8}{<ファミリ>}
〈CJK言語のテキスト〉
\end{CJK*}

ここで <ファミリ> は CJK フォントファミリの名前で、bxcjkipafont 読込時には以下のものが指定できる。

  • ipam: IPA明朝
  • ipag: IPAゴシック

この <ファミリ> は省略する(空にする)ことも可能で、その場合の既定値は ipam となる。((ただし bxcjkipafont パッケージの mainfamily オプションで変更可能。なお、bxcjkipafont 非使用時は CJK パッケージで元から定義されている “song” がファミリの既定値となる。))最初の引数の UTF8エンコーディング名であり、CJK パッケージでは UTF-8 以外のエンコーディングもサポートされているが、この記事では UTF-8 しか使わない前提なので必ず UTF8 とする。

なお、「CJK の文字は全て CJK* の中に限られる」という制限は、その場で出力されるテキストに限らず、例えば、

\date{1年前の今日}
\newcommand{\sampleText}{本日は豚天なり。}
\renewcommand{\figurename}{ふぃぎゃー}

のような定義文も含む。欧文の UTF-8 入力(inputenc 使用時)との競合が問題にならないならば、本文全体を CJK* 環境に入れてしまっても構わない。プリアンブルに CJK* 環境を置くことはできないので、必ず本文に含めることになる。

フォントの選択

CJK* 環境内で、\CJKfamily{<ファミリ>} で CJK フォントファミリを*11変更できる。bxcjkipafont パッケージでは IPA フォント用のファミリ ipam と ipag を用意しているが、この他に CJK パッケージで予め定義されたものもある。詳細は後で扱う。

なお、bxcjkipafont パッケージでは、ファミリを ipam/ipag に切り替えるための命令 \ipamfamily\ipagfamily が用意されている。

シリーズとシェープは欧文と連動している。つまり欧文用のフォント切替命令(\bfseries\textsl 等)を用いて切り替えることができる。((ただし、日本語では斜体は普通は用いられず、また IPA フォントには「太字」のフォントがないので、ipam/ipag ファミリでは既定ではシリーズ・シェープの切り替えは無効にしている。bxcjkipafont パッケージのオプションに fancy を指定すると、斜体(\slshape)と太字(bfseries)の指定が有効になる。ただし、斜体は dvipdfmx でしか実現できない。また、太字は(CJK パッケージの機能を使って)「重ねうち」で実現しているので十分に注意すること。))

[test-cjk2.tex]
% 文字コードは UTF-8 (BOM無)
\documentclass[a4paper]{article}
\usepackage{CJK,CJKspace,CJKpunct}
\usepackage[fancy]{bxcjkipafont}
\begin{document}
\begin{CJK*}{UTF8}{} % 既定は ipam
(明朝){\ipagfamily (ゴシック)}%
直立体 upright \textsl{斜体 oblique}
\end{CJK*}
\end{document}

*1:韓国では HLaTeX というパッケージ(これも 8 ビット欧文 TeX エンジン上で動作する)が広く使われている。もちろん日本で使われているのは pTeX 系である。

*2:原理的には pdfTeX の機能はすべて LuaTeX でも実現できるのであるが、LaTeX のパッケージに関しては、pdfTeX にのみ対応(LuaTeX は不可)のものが存在する。

*3:Windows ユーザはシフト JIS の方が便利かも知れないが、いわゆる「ダメ文字」の問題があって CJK パッケージでシフト JIS を使おうとすると変換フィルタを途中に挟む形になる。どうせ変換が必要になるのなら、UTF-8文字コード変換をする方が賢明であろう。

*4:CJK パッケージの日本語フォントファミリ(min/goth)の実体として本来想定されているものは大日本印刷のフォント(多分 NTT jTeX 用の PK フォントじゃないかな?)であり、「和田研フォント」は飽くまで「手元での組版の確認のための」代用である、というのが実状のようである。もちろん今では「本来の」結果を得るのは不可能なので、既定の日本語フォントファミリは諦めて、「IPA フォント」用のファミリを用意することになる。

*5:dvips では「Unicode サブフォント TFM + TrueType/OpenType フォント」という組み合わせは扱えない。

*6:Debian 系 OS の texlive パッケージでは何故か cjkpunct が欠落しているらしい。

*7:残りのファイル・ディレクトリは(この記事の使用法では)不要。TeX Live では cjk 直下に contrib, texinput, utils がある。

*8:アーカイブのファイルの配置が TDS に従ったものになっている。

*9:BOM 有りでも通るシステムもあるが確実ではない。

*10:CJKspace パッケージは CJK のアーカイブに一緒に含まれている。

*11:CJK 用のフォントファミリは欧文のフォントファミリとは別箇に管理されていて、この 2 つのフォントファミリは独立して変更することができる。この仕組は pTeX 系と同じである。