pdfLaTeX + CJK パッケージで日本語する方法

More than 1 year has passed since last update.

pdfLaTeX(または欧文 LaTeX)上で CJK パッケージ(およびその関連パッケージ)を利用して日本語を含む文書を作成する方法についての入門的解説です。

※ pdfLaTeX の扱い方については知っているものとします。

※ この記事で取り上げるパッケージは全て、最新の TeX Live には標準で含まれています。お使いの TeX システムに含まれていない場合は適宜 CTAN から入手してインストールしてください。


はじめの注意

まず初めに注意すべきなのは「日本語の分量が多い場合は、可能な限り pdfLaTeX の使用は避けるべき」ということです。現在では、主流のエンジンの全てにおいて日本語を扱う環境が整っていますが、pdfLaTeX と CJK パッケージを使う方法は、その中で最も面倒でありかつ最も品質が劣ります。このため、その使用が妥当なのは、どうしても pdfLaTeX の使用が避けられない場合に限られます。


文字コードについて

文字コードは UTF-8 を使うことを前提にします。

※実際には CJK パッケージはシフト JIS や EUC-JP 等の他の文字コードもサポートしているのですが、シフト JIS の使用は少々面倒な前処理が必要となる1 ので奨められません。その他の日本語文字コードは現在では需要がないでしょう。


パターン①: チョットだけ日本語したい

まずは、「欧文(英語など)の文書中に所々和文(日本語)の語句が入る」という場合を考えます。具体的には、次の条件を満たしていると仮定します。


  • 和文の出現箇所が高々十数か所程度である。

  • 和文の部分が約物(句読点など)を含まない。

  • 節見出し(\section{...} の類)などのいわゆる「動く引数」、および、タイトル(\maketitle)の要素(\title など)に和文を含まない。

このようなケースでは、以下のように CJKutf8 パッケージを使うのがよいでしょう。



  • CJKutf8 パッケージを読み込む。

    ※ CJKutf8 パッケージは CJK パッケージの配布に含まれます。

    ※ CJKutf8 パッケージは内部で CJK パッケージを読み込みます。

    \usepackage{CJKutf8}
    



  • 個々の和文の箇所を CJK 環境で囲みます。

    \begin{CJK}{UTF8}{<ファミリ名>}和文語句\end{CJK}
    

    ここで <ファミリ名> には和文(CJK)用のフォントファミリの名前を書きます(詳細は後述)。



この方法のメリットは、CJK 環境の外では CJK パッケージの干渉を気にすることなく欧文 LaTeX の機能を自由に利用できることです。


チョット日本語する例

「日本語を少し含む英語文書」の例を示します。

% encoded in UTF-8

\documentclass[a5paper]{article}
\usepackage{CJKutf8}
\begin{document}
\emph{I Am a Cat}
(\begin{CJK}{UTF8}{ipxm}吾輩は猫である\end{CJK})
is a novel written by Natsume Soseki
(\begin{CJK}{UTF8}{ipxm}夏目 漱石\end{CJK}).
\end{document}

qiita-cjk-1.png

いちいち \begin{CJK}... を書くのが面倒である場合はマクロを定義するといいでしょう。

% encoded in UTF-8

\documentclass[a5paper]{article}
\usepackage{CJKutf8}
% \Ja{text}: Outputs Japanese text.
\newcommand*{\Ja}[1]{%
\begin{CJK}{UTF8}{ipxm}#1\end{CJK}}
\begin{document}
\emph{I Am a Cat} (\Ja{吾輩は猫である}) is a novel
written by Natsume Soseki (\Ja{夏目 漱石}).
\end{document}


フォントファミリ

CJK パッケージで使えるようにセットアップされた和文フォントには、欧文フォントと同様に、LaTeX で用いる「ファミリ名」が与えられています。例えば、先ほどの例では

\begin{CJK}{UTF8}{ipxm}

のようにファミリ名に ipxm が指定されていますが、これは「IPAex 明朝」フォントを表しています。

TeX Live 2015 において使用可能な和文(CJK)ファミリには以下のものがあります。



  • ipxm: IPAex 明朝[日本語・明朝体]


  • ipxg: IPAex ゴシック[日本語・ゴシック体]

    ※以上の2つは ipaex-type1 パッケージで提供される。


  • gbsn: AR PL SungtiL GB[簡体字中国語・宋体(明朝)]


  • gkai: AR PL KaitiM GB[簡体字中国語・楷体(楷書)]


  • bsmi: AR PL Mingti2L Big5[繁体字中国語・明体(明朝)]


  • bkai: AR PL KaitiM Big5[繁体字中国語・楷体(楷書)]

    ※以上の4つは arphic パッケージで提供される。


  • mj: UhcMyoungjo[韓国語・明朝体]

    uhc パッケージで提供される。


  • nanummj: Nanum Myeongjo[韓国語・明朝体]


  • nanumgt: Nanum Gothic[韓国語・ゴシック体]

    ※以上の2つは nanumtype1 パッケージで提供される。


min や goth に注意

CJK パッケージでの日本語の出力を扱った資料では、ファミリ名として mingoth を指定した例がよく見受けられます。ところが実は、“普通の pdfLaTeX の使い方”2 を前提にする限り、これら(および maru の合わせて 3 つ)のファミリは、面倒な事前処理を行わないと“実際に使える”ようになりません。3

今では日本語のファミリとして ipxmipxg がすぐに利用可能になっているので、mingoth のことは忘れてしまって構いません。

※参考: マクロツイーター - CJK パッケージ入門的な何か(1) この記事の脚注 *4。


パターン②: いっぱい日本語したい

次に考えるのは、先と同じく「欧文の文書中に所々和文の語句が入る」場合ではあるが、先述のパターン①の条件を満たさないものです。例えば、「和文が大量にある」「節見出しに和文がある」場合などが該当します。

このケースでは、以下のように bxcjkjatype パッケージを利用するのがいいでしょう。



  • bxcjkjatype パッケージを whole 付きで読み込む。

    ※ bxcjkjatype パッケージは内部で CJKutf8 を読み込みます。

    \usepackage[whole]{bxcjkjatype}
    


  • これにより、文書本体(\begin{document}~\end{document})全体があたかも CJK 環境(正確には CJK* 環境)で囲まれた状態になります。このため特に CJK 環境を記述することなく欧文と和文が混ざった文章を書くことができます。


  • 和文フォントの変更について。(u)pLaTeX で jsarticle クラスを使っている場合と同様に、欧文フォントをサンセリフ(\sffamily)や等幅(\ttfamily)に変更すると連動して和文フォントがゴシックに変更されます。必要ならば、\CJKfamily 命令(後述)で和文フォントを直接指定できます。


  • 既定では、“基本の和文フォント”(明朝・ゴシック)として IPAex フォントが使われます。


この方法だと、全体が CJK* 環境に入るため、欧文の部分も CJK パッケージの影響を受ける可能性があることに注意してください。


いっぱい日本語する例

「日本語の段落を含む英語文書」の例を示します。

% encoded in UTF-8

\documentclass[a5paper]{article}
\usepackage[whole]{bxcjkjatype}
\begin{document}

Soseki's novel \emph{I Am a Cat} (吾輩は猫である)
starts with the following passage:

\begin{quote}
吾輩は猫である。名前はまだ無い。
どこで生れたかとんと見当がつかぬ。

\itshape (Translation)\\
I am a cat. I have yet no name.
I have no idea where I was born.
\end{quote}

The word 吾輩 (\emph{wagahai}) is
the first-person pronoun of high register,
and has a nuance of arrogance.
\end{document}

qiita-cjk-2.png


パターン③: 日本語文書したい

これまでは「欧文文書に日本語を混ぜる」話でしたが、最後に、「(pdf)LaTeX と CJK パッケージで日本語文書を作成する」ことを考えます。

“日本語の文書”はその慣習に従ったページレイアウトをもつ(例えば段落下げが全角 1 文字分、など)ことが求められるため、「日本語用の文書クラス」を用いる必要があります。ところが、日本では (u)pLaTeX が主流であるため、それ以外のエンジンで使える「日本語用の文書クラス」の選択肢は非常に限られます。

ここでは、pdfLaTeX に対応した日本語文書クラスのセットである「BXJS クラス」の 1 つである bxjsarticle クラスの使用法を紹介します。

※「BXJS クラス」は BXjscls パッケージで提供されます。bxjsarticle、bxjsbook などの用途の異なる 4 つの文書クラスが含まれますが、基本的な使い方は同じです。

※ 以下の方法を行うには BXjscls の 1.0 版[2015/08/05]以降が必要です。



  • 文書クラスの宣言を以下のように書きます。

    \documentclass[pdflatex,ja=standard,<他オプション>...]{bxjsarticle}
    

    <他オプション> の部分には a4papertwocolumn などの“一般的なクラスオプション”を指定します。



  • bxcjkjatype を読み込んだ場合と同じく、文書本体全体があたかも CJK 環境(正確には CJK* 環境)で囲まれた状態になります。

    ※ BXJS クラスは内部で bxcjkjatype パッケージを読み込みます。


  • 和文と欧文の間の“四分空き”は自動的には入りません。代わりに、チルダ(~)が和欧文間空白のための命令になっているので、手動で適宜挿入する必要があります。


  • LaTeX 本来のチルダの意味である「非分割欧文空白」が必要な場合は \nbs 命令を使ってください。



日本語文書した例

bxjsarticle クラスの文書の例を示します。

\documentclass[pdflatex,a5paper,ja=standard]{bxjsarticle}

\title{pdf{\LaTeX}~で日本語文書}
\author{匿名\ 希望}
\begin{document}

BXJS~クラスを利用すると~pdf{\LaTeX}~
で日本語文書を比較的容易に作成できます。
文書ファイルの文字コードは~
UTF-8~にする必要があります。

\section{夏目漱石「吾輩は猫である」冒頭}

吾輩は猫である。
名前はまだ無い。

どこで生れたかとんと見当がつかぬ。
何でも薄暗いじめじめした所で
ニャーニャー泣いていた事だけは記憶している。
吾輩はここで始めて人間というものを見た。
しかもあとで聞くとそれは書生という
人間中で一番獰悪な種族であったそうだ。
この書生というのは時々我々を
捕えて煮て食うという話である。

\end{document}

qiita-cjk-3a.png


補足:Beamerする場合は

Beamer(などのスライド用クラス)については、日本語と欧文で同じクラスを使うのが(pTeX系エンジンを使う場合も含めて)普通に行われています。こういう場合は、普通にbeamerクラスを指定した上でパターン②の用法に従えばいいでしょう。

以下の記事も参考になるでしょう。


補足事項


空白文字の扱い

日本語を含む LaTeX ソースを書く場合の、空白文字の扱いについて説明します。

※タブ文字・改行文字は空白文字と全く同等なものと扱われるので、ここではまとめて「空白文字」と総称します。

パターン①の使い方の場合、空白文字の扱いは通常の (pdf)LaTeX の規則に従います。

% "夏目"と"漱石"の間に欧文空白が入る

Natsume Soseki (\begin{CJK}{UTF8}{ipxm}夏目 漱石\end{CJK})

qiita-cjk-4.png

\begin{CJK}{...}{...}\end{CJK} の前後にある空白文字は特に無視されるわけでないことに注意が必要です。

The ``iroha order'' is as follows:

% 上の行末で欧文空白が1つ入る
% 以下の行末の改行文字を無効化しないと余計な空白が入る
\begin{CJK}{UTF8}{ipxm}%
いろはにほへとちりぬるをわかよたれそつねならむ%
うゐのおくやまけふこえてあさきゆめみしゑひもせす%
\end{CJK}. % "す"の直後にピリオド

qiita-cjk-5.png

一方、パターン②や③の使い方の場合、和文文字どうしの間の空白文字が無視されます。

% これだと"夏目"と"漱石"の間に欧文空白が入らない

Natsume Soseki (夏目 漱石)

% これだと欧文空白が入る
Natsume Soseki (夏目\ 漱石)

qiita-cjk-6.png

和文と欧文の間の空白は保持されるので、比較的自由にソース上の改行が入れられます。

The number 1,234,056 is written

as 百二十三万四千五十六
in kansuji and read as
ひゃくにじゅうさんまん
よんせんごじゅうろく.

qiita-cjk-7.png

パターン③で和欧文間空白のチルダ(~)のある箇所で改行を入れたい場合は、チルダの直後(直前でなく)で改行しましょう。チルダの直後の改行文字は自動的に無力化(欧文空白にならない)されます。

pdf{\LaTeX}~しか使えない状況でも~

BXJS~クラスを利用すると日本語文書を
作ることができます。

qiita-cjk-8a.png

※いずれの場合も、(u)pLaTeX や LuaTeX-ja とは規則が少し異なることに注意してください。


さらに補足

①とそれ以外で規則が異なるのは CJK パッケージ自体が 2 種類のモードをサポートしているからで、CJK 環境では空白文字が保持され、CJK* 環境では一部の空白文字が無視される仕様になっています。ただし、元々の CJK* 環境は少々不便なので、パターン②と③ではそれを修正する CJKspace パッケージを利用しています。すなわち、


  • パターン①は CJK 環境

  • パターン②と③は CJKspace 読込時の CJK* 環境

に相当します。空白文字の扱いの詳細については以下の記事を参照してください。


各パッケージの機能

本記事で紹介した範囲の使い方をする場合において、比較的有用だと思われるものを取り上げて紹介します。

CJK パッケージの機能:



  • \begin{CJK}{UTF8}{<ファミリ名>}~\end{CJK}: 和文(CJK)記述用の環境。


  • \begin{CJK*}{UTF8}{<ファミリ名>}~\end{CJK*}: “和文間の空白文字を無視する”版の CJK 環境。


  • \CJKfamily{<ファミリ名>}CJK 環境の中で和文ファミリを変更する。

    \begin{CJK}{UTF8}{ipxm}%
    
    明朝で{\CJKfamily{ipxg}ゴシックで}また明朝%
    \end{CJK}



  • \Unicode{"xxx}{"yy}: 符号値が U+xxxyy の文字を出力する。x, y は 16 進数字。

    \begin{CJK}{UTF8}{ipxm}吾輩は\Unicode{"26}{"C3}である。\end{CJK}
    


  • \CJKtilde: チルダ(~)の意味を「和欧文間空白(四分空き)」に変更する。

    ※ BXJS クラスでは \CJKtilde が自動的に有効になっている。


  • \standardtilde: チルダ(~)の意味を「非分割欧文空白」に戻す。


  • \nbs: 常に「非分割欧文空白」を出力する。


bxcjkjatype パッケージのオプション:



  • whole: 文書本体を自動的に \begin{uCJK*}~\end{uCJK*} で囲む。


  • wholeCJK: 文書本体を自動的に \begin{uCJK}~\end{uCJK} で囲む。


  • autotilde(u)CJK(*) 環境の先頭で自動的に \CJKtilde を発行する。

bxcjkjatype パッケージの機能:



  • \mcfamily\gtfamily\mgfamily: 和文ファミリを明朝/ゴシック/丸ゴシックの総称ファミリに変更する。

    ※既定では \mcfamily に IPAex 明朝、\gtfamily\mgfamily に IPAex ゴシックが割り当てられている。(だから設定を変えないと実際に丸ゴシックにはならない。)

  • 欧文ファミリの変更に連動して和文ファミリも変わる。欧文が \rmfamily になると和文は \mcfamily に、欧文が \sffamily\ttfamily になると和文は \gtfamily になる。


  • \begin{uCJK}~\end{uCJK}: 和文ファミリが欧文に連動して決まる CJK 環境。


  • \begin{uCJK*}~\end{uCJK*}: 和文ファミリが欧文に連動して決まる CJK* 環境。

    \sffamily %欧文ファミリを変更
    
    \begin{uCJK*}% 和文は \gtfamily から始める
    ゴシックで\rmfamily 明朝で
    また{\gtfamily ゴシックで}また明朝。
    \end{uCJK}



  • \UTF{<16進数字>}: 和文文字を Unicode 符号値で入力する。

    \begin{uCJK*}吾輩は\UTF{26C3}である。\end{uCJK*}
    


  • \setminchofont などの命令で \mcfamily などのファミリの実体と使う物理フォントを変更できる。(詳細は説明書を参照してほしい。)


※参考: bxcjkjatype の説明書

BXJS クラスの機能:



  • BXJS クラスは bxcjkjatype を次の設定で読み込む。

    \usepackage[whole,autotilde]{bxcjkjatype}
    



  • \zw: 現在の和文フォントの全角幅。(u)pLaTeX 特有の単位 zw に相当する長さ命令。

    吾輩は!\hspace{1\zw}% 全角分空ける
    
    猫である!


※参考: TeX Wiki - BXjscls


まとめ

というわけで、日本語を含む文書を作りたい場合は、できる限り (u)pLaTeX や XeLaTeX や LuaLaTeX を使いましょう!





  1. いわゆる「ダメ文字」があるため。 



  2. 自分でタイプセットして出力された PDF ファイルを成果物として利用する、という場合。 



  3. オンラインサービスで LaTeX を使っている場合はそもそも事前処理ができないかも知れない。