マクロツイーター

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

CJK パッケージで今度こそ日本語する件 (1)

能書きは措いといて、コレ。

最も安全でまともな設定

現状の CJK パッケージ(とその補助)の範囲内で、できるだけ安全*1でまともな出力が得られるような設定を採用した。具体的には、bxcjkjatype パッケージを読み込むと内部で(これまでの記事で行ったように)次のようなパッケージ読込が行われる。

\usepackage{CJKutf8,CJKspace,CJKpunct}
「全体を CJK 環境に入れる」を確実に行う機能

一般的には、CJK パッケージを使う際には、「和文(CJK)の部分を個別に CJK(*) 環境で囲む」*2方が安全である。しかし、文書中に散在する和文の箇所が大量にある場合は個別にマークアップするのは面倒である。また、節見出しや相互参照などの、いわゆる「動く引数」の中に和文が含まれる場合は、(詳細は省くが*3)「本文全体を CJK(*) 環境で囲む」方が安全な場合が多い。

ところが、「全体を囲む」場合に、単純に

\documentclass{article}
\usepackage{bxcjkjatype}
\begin{document}
\begin{CJK*}{UTF8}{}
(本文)
\end{CJK*}
\end{document}

としたのでは、LaTeX の内部処理の都合で失敗する可能性がある。そこで、「安全に全体を囲む」ための機能を用意した。次のように、オプションに whole を指定すると、安全に全体が CJK* 環境で囲まれる。

\documentclass{article}
\usepackage[whole]{bxcjkjatype}
\begin{document}% 本文は自動的にCJK*環境で囲まれる
(本文)
\end{document}

全体を(* でない)CJK 環境で囲むためのオプション wholeCJK もある。

和文と欧文のファミリを連動させる

pLaTeX + JS クラス(jsarticle 等)を用いた場合と同様に、欧文のファミリを変更した時に和文が追随するようにしている。

  • 欧文の \rmfamily 命令で和文明朝体に切り替わる。
  • 欧文の \sffamily および \ttfamily 命令で和文がゴシック体に切り替わる。
  • このパッケージでは、「明朝体」として「mc」、「ゴシック体」として「gt」、「丸ゴシック体」として「mg」という名前の CJK ファミリを用いる。((ただし実際にはこの名前は(pLateX と同様に)\mcdefault\gtdefault\mgdefault というマクロになっていて変更可能である。))
  • 既定ではこれらのファミリには ipaex-type1 パッケージのフォント(つまり IPAex フォントと同じもの)が使われる:mc は IPAex明朝、gt と mg は IPAexゴシック。後述の通り、この設定は変更可能である。
  • 和文ファミリだけを切り替えるための \mcfamily\gtfamily\mgfamily も存在する。これらは \CJKfamily の呼出と等価(例えば \mcfamily\CJKfamily{mc} と同じ)である。
  • 「既定の CJK ファミリ」((\CJKfamily{}\begin{CJK*}{UTF8}{} のようにファミリ名を空にした命令の呼び出しにおいて選択されるファミリのこと。ちなみに、「既定の CJK ファミリ」を設定するには \CJKencfamily{UTF8}{ファミリ名} とする。))は明朝体(mc)である。ただし、文書開始時に欧文の既定ファミリが \sffamily\ttfamily のものに変更されていた場合((プレアンブルで \renewcommand{\familydefault}{\sfdefault} を実行すると既定が \sffamily になる。))は、連動する形でゴシック体(gt)が既定の CJK ファミリになる。

また、「欧文ファミリと連動する」 CJK(*) 環境として「uCJK(*) 環境」を用意している。例えば、

\begin{uCJK*} 和文を含むテキスト \end{uCJK*}

は直前で有効な欧文ファミリに応じて次の何れかと等価になる。(* 無しの uCJK も同様。)

\begin{CJK*}{UTF8}{mc} 和文を含むテキスト \end{CJK*} % 下記以外の場合
\begin{CJK*}{UTF8}{gt} 和文を含むテキスト \end{CJK*} % \sffamily か \ttfamily の場合
実フォントを変更する

前述の通り、和文フォントの実体には既定では ipaex-type1 パッケージのフォントが使われるが、dvipdfmx または pdfTeX を使う場合は、実体を任意の OpenType/TrueType フォントに変更することができる。設定用命令の体系は pxchfon パッケージと同じである。

\setgothicfont{mplus-1p-regular.ttf} % ゴシック→ M+ 1P regular
\setboldgothicfont{mplus-1p-bold.ttf} % ゴシック太字→ M+ 1P bold

pxchfon と同じようにプリセットを指定することもできる。

\usepackage[ms-hg]{bxcjkjatype} % MS フォント + HG フォント

ただし、pdfTeX では使えるフォントの種類に制限があり、TrueType グリフのフォント(TTC 形式を除く)のみが使用可能である。*4

oneweight オプションを指定すると、明朝・ゴシックともに単ウェイトを用いる設定となり、((つまり、\setminchofont\setgothicfont だけを使用する。ただし(標準の pLaTeX と異なり)この場合でも丸ゴシックは使用可能で \setmarugothicfont も有効である。))明朝体の太字がゴシック体になる。

その他の注意
  • 文字コードUTF-8 のみが使用できる。
  • hyperref パッケージで和文を含むしおりを作る場合は、hyperref のオプションに unicode を指定する。
  • 実フォントを変更する機能はドライバ依存であり、パッケージにはドライバ指定のオプション(dvipdfmxpdftex)が存在するが、常に自動判別されるので明示的に指定する必要はない。((DVI モードである場合は dvipdfmx と判定する。実フォント変更を行わない限り、このまま dvips で使用しても問題ない。))
  • 「日本語文書のためのレイアウト設定」はこのパッケージの考慮範囲外である。
使用例

欧文と和文のファミリ連動を示す例。

% 文字コードは UTF-8
% latex + dvipdfmx で組版
% (Moga フォントは TTC 形式で, これは pdfTeX で未対応なため)
\documentclass[a4paper]{article}
\usepackage[moga-maruberi]{bxcjkjatype}% Mogaフォント + マルベリ
\begin{document}
Here is some test on Japanese fonts.\par
\begin{uCJK*}% 外側の欧文の総称ファミリ設定を"引き継ぐ"
  %(欧文 \rmfamily → 和文 明朝(\mcfamily))
Mincho(明朝) family, and \textbf{in bold(太字)}.\par
\sffamily  % 和文は"連動"してゴシック(\gtfamily)になる
Gothic(ゴシック) family, and \textbf{in bold(太字)}.\par
\mgfamily  % 和文のみ丸ゴシックに変更
Maru-gothic(丸ゴシック) family.
\end{uCJK*}
\end{document}

和文を広範的な箇所で用いるために「全体を囲った」例。和文を含むしおりも作成している。

% 文字コードは UTF-8
% pdflatex または latex + dvipdfmx/dvips で組版
\documentclass[a4paper]{article} % pdfTeX の場合
%\documentclass[a4paper,dvipdfmx]{article} % dvipdfmx の場合
  %(ドライバ明示指定が必要なのは bxcjkjatype でなく hyperref)
\usepackage[whole]{bxcjkjatype} % 本文全体をCJK*に入れる
  % 以降はプレアンブルで和文が使用可能
\newcommand\Nihongo{日本語} % ←和文を含むマクロ定義
\usepackage[unicode,% ←しおりの出力に必要
  bookmarks=true,colorlinks=true]{hyperref}
\begin{document}
% ↓和文を含む節見出し
\section{Preparing document in \Nihongo\ using pdf\TeX\ な件}
The 文書 contains \Nihongo\ and English,
with a bit of 郄島屋.
\end{document}

*1:「訳の解らないエラーが出ない」ということ。

*2:つまり欧文の部分は CJK(*) 環境に入れない。

*3:詳細については CJK パッケージの解説文書 CJK.txt を参照されたい。

*4:だからプリセットのほとんどは pdfTeX では使えない。