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

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

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

[CJKパッケージ]: (https://www.ctan.org/pkg/cjk)
[CTAN]: (https://www.ctan.org/)

## 前提知識

* フツーの（欧文での）pdfLaTeXの扱いについては既に知っているものとします。

:::note warn
特に「(pdfLaTeXどころか）LaTeXの扱いに慣れていない初心者」は想定していないことに注意してください。そのレベルの初心者についてはCJKパッケージの利用は避けるべきだと私は考えます。
:::


## はじめの注意

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

### 文字コードについて

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

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

[^dame]: いわゆる「ダメ文字」があるため。

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

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

  * 和文の出現箇所が高々十数か所程度である。
  * 和文の部分が約物（句読点など）を含まない。
  * 節見出し（`\section{...}`の類）などのいわゆる「動く引数」、および、タイトル（`\maketitle`）の要素（`\title`など）に和文を含まない。

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

  * CJKutf8パッケージを読み込む。  
    ※ CJKutf8パッケージはCJKパッケージの配布に含まれます。  
    ※ CJKutf8パッケージは内部でCJKパッケージを読み込みます。

    ```latex
    \usepackage{CJKutf8}
    ```

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

    ```latex
    \begin{CJK}{UTF8}{‹ファミリ名›}和文語句\end{CJK}
    ```
    ここで`‹ファミリ名›`には和文（CJK）用のフォントファミリの名前を書きます（詳細は後述）。

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

### チョット日本語する例

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

```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](https://qiita-image-store.s3.amazonaws.com/0/14550/ddad4241-fdc9-2702-3efd-b57ceb5f811a.png)

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

```latex
% 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で用いる「ファミリ名」が与えられています。例えば、先ほどの例では

```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パッケージ]で提供される。

[ipaex-type1パッケージ]: (https://www.ctan.org/pkg/ipaex-type1)
[arphicパッケージ]: (https://www.ctan.org/pkg/arphic)
[uhcパッケージ]: (https://www.ctan.org/pkg/uhc)
[nanumtype1パッケージ]: (https://www.ctan.org/pkg/nanumtype1)

#### minやgothに注意

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

今では日本語のファミリとして`ipxm`／`ipxg`がすぐに利用可能になっているので、`min`や`goth`のことは忘れてしまって構いません。

:::note info
参考資料：

  * [CJK パッケージ入門的な何か(1)](https://zrbabbler.hatenablog.com/entry/20130209/1360434598)（マクロツイーター） この記事の脚注 *4。
:::

[^normal]: 自分でタイプセットして出力されたPDFファイルを成果物として利用する、という場合。
[^online]: オンラインサービスでLaTeXを使っている場合はそもそも事前処理ができないかも知れない。

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

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

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

  * bxcjkjatypeパッケージを`whole`付きで読み込む。  
    ※ bxcjkjatypeパッケージは内部でCJKutf8を読み込みます。

    ```latex
    \usepackage[whole]{bxcjkjatype}
    ```

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

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

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

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

[bxcjkjatypeパッケージ]: (https://www.ctan.org/pkg/bxcjkjatype)

### いっぱい日本語する例

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

```latex
% 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](https://qiita-image-store.s3.amazonaws.com/0/14550/b7e38c91-a418-992a-691e-1331e315d0ca.png)

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

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

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

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

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

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

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

    ```latex
    \documentclass[pdflatex,ja=standard,‹他オプション›...]{bxjsarticle}
    ```

    `‹他オプション›`の部分には`a4paper`や`twocolumn`などの“一般的なクラスオプション”を指定します。

  * bxcjkjatypeを読み込んだ場合と同じく、文書本体全体があたかも`CJK`環境（正確には`CJK*`環境）で囲まれた状態になります。  
    ※ BXJSクラスは内部でbxcjkjatypeパッケージを読み込みます。
  * 和文と欧文の間の**​“四分空き”は自動的には入りません。​**代わりに、チルダ（`~`）が和欧文間空白のための命令になっているので、**手動で**適宜挿入する必要があります。
  * LaTeX本来のチルダの意味である「非分割欧文空白」が必要な場合は`\nbs`命令を使ってください。

[BXjsclsパッケージ]: (https://www.ctan.org/pkg/bxjscls)

### 日本語文書した例

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

```latex
\documentclass[pdflatex,a5paper,ja=standard]{bxjsarticle}
\title{pdf{\LaTeX}~で日本語文書}
\author{匿名\ 希望}
\begin{document}

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

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

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

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

\end{document}
```

![qiita-cjk-3a.png](https://qiita-image-store.s3.amazonaws.com/0/14550/19d9e328-99e8-716e-aae3-93f1321c40dd.png)

### Beamerする場合は

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

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

  * [今さら人に聞けない「日本語でBeamer」のキホン](https://qiita.com/zr_tex8r/items/69e8cc32038ff29f5ac3)（Qiita）

## 補足事項

### 空白文字の扱い

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

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

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

```latex
% "夏目"と"漱石"の間に欧文空白が入る
Natsume Soseki (\begin{CJK}{UTF8}{ipxm}夏目 漱石\end{CJK})
```

![qiita-cjk-4.png](https://qiita-image-store.s3.amazonaws.com/0/14550/4a384ab3-30bd-20ea-f7b5-94521738249f.png)

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

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

![qiita-cjk-5.png](https://qiita-image-store.s3.amazonaws.com/0/14550/af7afa12-fd5e-2899-e1df-83d4aedccee1.png)

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

```latex
% これだと"夏目"と"漱石"の間に欧文空白が入らない
Natsume Soseki (夏目 漱石)

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

![qiita-cjk-6.png](https://qiita-image-store.s3.amazonaws.com/0/14550/34969729-2fae-bee3-c3a1-33029d1c057b.png)

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

```latex
The number 1,234,056 is written
as 百二十三万四千五十六
in kansuji and read as
ひゃくにじゅうさんまん
よんせんごじゅうろく.
```

![qiita-cjk-7.png](https://qiita-image-store.s3.amazonaws.com/0/14550/c4fc7386-75c4-507b-9cea-385312ea3aa6.png)

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

```latex
pdf{\LaTeX}~しか使えない状況でも~
BXJS~クラスを利用すると日本語文書を
作ることができます。
```

![qiita-cjk-8a.png](https://qiita-image-store.s3.amazonaws.com/0/14550/6e0dbfd3-9b02-2c06-f14d-bd68201ae423.png)

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

<details><summary>補足：なぜ規則が異なるのか</summary>

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

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

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

  * [CJK パッケージで空白は空白になるかならないか](https://d.hatena.ne.jp/zrbabbler/20150831/1441011783)（マクロツイーター）
:::

</details>

### 各パッケージの機能

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

CJKパッケージの機能：

  * `\begin{CJK}{UTF8}{‹ファミリ名›}～\end{CJK}`： 和文（CJK）記述用の環境。
  * `\begin{CJK*}{UTF8}{‹ファミリ名›}～\end{CJK*}`： “和文間の空白文字を無視する”版の`CJK`環境。
  * `\CJKfamily{‹ファミリ名›}`： `CJK`環境の中で和文ファミリを変更する。

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

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

    ```latex
    \begin{CJK}{UTF8}{ipxm}吾輩は\Unicode{"26}{"C4}である。\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*`環境。

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

  * `\UTF{‹16進数字›}`： 和文文字をUnicode符号値で入力する。

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

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

※参考： [bxcjkjatypeの説明書](https://github.com/zr-tex8r/BXcjkjatype/blob/master/README-ja.md)

BXJSクラスの機能：

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

    ```latex
    \usepackage[whole,autotilde]{bxcjkjatype}
    ```

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

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

※参考： [TeX Wiki - BXjscls](https://texwiki.texjp.org/BXjscls)

## まとめ

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