jlreqクラスの多書体化(ただしLuaLaTeXの場合)


どうやら、とある記事によると、「(u)pLaTeX上のjlreqクラスにおいて和文を多書体(多ウェイト)にする」のはトッテモ難しいようです。そして、その記事の結論としては、jlreqクラスを多書体(多ウェイト)にしたい場合は

とにかくLua(La)TeXしよう

とのこと。至極ゴモットモなので、「LuaLaTeX上のjlreqクラスにおいて和文を多書体(多ウェイト)にする」方法についてチョット解説してみることにします。

例題は『猫』である

この記事の解説の例示用に、LuaLaTeX+jlreqクラスで『吾輩は猫である』の文章の一部を縦組で組んだ文書を用意しました。

sample0.tex
% LuaLaTeX 文書
% A6判縦組, 一段組, 基底サイズ9pt
\documentclass[tate,book,paper=a6,fontsize=9pt,onecolumn,
% ぶら下げ組を有効にする
  hanging_punctuation]{jlreq}
\usepackage{bxjalipsum}% "吾輩は猫である"したい
\begin{document}
%「吾輩は猫である」の4~6段落目の文章
\jalipsum[4-6]{wagahai}
\end{document}

出力の先頭ページは以下のようになりました。(LuaTeX-jaの既定設定に従って、フォントはIPAex明朝が用いられています。)

さて、冒頭で紹介した「jlreqの多書体化」の記事でも強調されているように、jlreqクラスの重要な特長がJLREQの規定に従った組版の実現」です。従って、フォント設定の変更を行う際には、「jlreqが定めている行組版のパラメタ」(LuaTeX-jaではこれをJFMと呼びます)が維持されるように注意を払う必要があります。

ここでは、JFMの差異が明確になるように1、jlreqの側でぶら下げ組hanging_punctuation)を敢えて指定しました。先の出力結果をよく見ると、10行目の行末の読点がぶら下げられています。

LuaTeX-jaの既定のJFMではぶら下げが行われないため、以降の実例において、出力の10行目の行末を見ることで「jlreqの行組版が維持されているか」を判断できます。

※なお、JFMについては、以下の記事に少し詳しい解説があります。

復習:LuaLaTeX(+LuaTeX-ja)で和文フォントをイロイロする方法

LuaLaTeX+LuaTeX-jaの和文フォント設定を変更する(物理フォントを変更する2・多ウェイトにする・多書体にする)には、次の2つの方法があります(参考記事)。

  • プリセットの設定を利用する → luatexja-presetパッケージ
  • 自力で好きなように設定する → luatexja-fontspecパッケージ
    ※原則的に3luatexja-presetパッケージはluatexja-fontspecを読みこんでその機能を利用するので、luatexja-presetを使う場合には同時にluatexja-fontspecの機能も使えます。

取りあえず、これらの一般的な方法をjlreqクラスに適用するとどうなるかを見てみましょう。先程の例の文書の一部の段落を太字にするため、luatexja-presetパッケージを読みこんで「源ノフォントの多ウェイト」(sourcehan,deluxe)の設定を適用してみます。

sample1.tex
% LuaLaTeX 文書
\documentclass[tate,book,paper=a6,fontsize=9pt,onecolumn,
  hanging_punctuation]{jlreq}
% 源ノ明朝/角ゴシックの多ウェイト設定
\usepackage[sourcehan,deluxe]{luatexja-preset}
\usepackage{bxjalipsum}
\begin{document}
\jalipsum[4]{wagahai}\par
% 途中の段落("猫"の5段落目)だけ太字で出力する
{\bfseries\jalipsum[5]{wagahai}\par}
\jalipsum[6]{wagahai}\par
\end{document}

出力の「10行目の行末」を見てみましょう。

jlreqのJFM設定が維持されていないので失敗です。どうやら話はそんなに単純ではないようです。

jlreqでマトモにluatexja-presetする方法

luatexja-presetパッケージでは、自身が行う設定に適用するJFMをパッケージオプションで指定できます。

\usepackage[jfm_yoko=<横組JFM名>,jfm_tate=<縦組JFM名>,...]{luatexja-preset}

jlreqクラスが用いているJFMの情報はドキュメント中に書いてあります4

LuaLaTeXの場合

  • 横書き用のJFMはjlreq
  • 縦書き用のJFMはjlreqv

従って、「jlreqでluatexja-presetを使いたい」場合は、パッケージの読込を以下のようにすればよいはずです。

% jlreq用のJFMを指定する
\usepackage[jfm_yoko=jlreq,jfm_tate=jlreqv,...]{luatexja-preset}

先ほどの失敗例(sample1.tex)にこの修正を加えてみましょう。

sample2.tex
% LuaLaTeX 文書
\documentclass[tate,book,paper=a6,fontsize=9pt,onecolumn,
  hanging_punctuation]{jlreq}
\usepackage[sourcehan,deluxe,
  % jlreq用のJFMを指定する
  jfm_yoko=jlreq,jfm_tate=jlreqv]{luatexja-preset}
\usepackage{bxjalipsum}
\begin{document}
\jalipsum[4]{wagahai}\par
% 途中の段落だけ太字で出力する
{\bfseries\jalipsum[5]{wagahai}\par}
\jalipsum[6]{wagahai}\par
\end{document}

うまくいきました!

jlreqでマトモにluatexja-fontspecする方法

luatexja-fontspecパッケージが提供する和文フォント設定用命令(setmainjfontnewjfontfamily、など)においては、以下のオプションで適用するJFMを指定できます。

  % オプションを追加する
  YokoFeatures={JFM=<横組JFM名>},TateFeatures={JFM=<縦組JFM名>}

例えば、jlreqのJFMを維持したまま和文フォントを「HGS創英角ポップ体」に切り替える命令\jPoptaiを定義するための\newjfontfamily命令は以下のようになります。

% 素敵なフォントを使いましょう
\newjfontfamily{\jPoptai}[
  YokoFeatures={JFM=jlreq},
  TateFeatures={JFM=jlreqv},
]{HGSSoeikakupoptai}

念のため、完全な文書の例を挙げておきます。

sample4.tex
% LuaLaTeX 文書
\documentclass[tate,book,paper=a6,fontsize=9pt,onecolumn,
  hanging_punctuation]{jlreq}
\usepackage{luatexja-fontspec}
\newjfontfamily{\jPoptai}[
  YokoFeatures={JFM=jlreq},
  TateFeatures={JFM=jlreqv},
]{HGSSoeikakupoptai}% HGS創英角ポップ体
\usepackage{bxjalipsum}
\begin{document}
\jalipsum[4]{wagahai}\par
% 途中の段落だけ創英角ポップ体で出力する
{\jPoptai\jalipsum[5]{wagahai}\par}
\jalipsum[6]{wagahai}\par
\end{document}

さらに蛇足になりますが、「luatexja-presetパッケージを読み込んで、かつluatexja-fontspecパッケージの機能を利用する」例を挙げておきます。

sample5.tex
% LuaLaTeX 文書
\documentclass[tate,book,paper=a6,fontsize=9pt,onecolumn,
  hanging_punctuation]{jlreq}
\usepackage[ms-hg,deluxe,% MSフォント+HGフォント
  jfm_yoko=jlreq,jfm_tate=jlreqv]{luatexja-preset}
% luatexja-fontspecは自動的kに読み込まれる
\newjfontfamily{\jPoptai}[
  YokoFeatures={JFM=jlreq},
  TateFeatures={JFM=jlreqv},
]{HGSSoeikakupoptai}% HGS創英角ポップ体
\usepackage{bxjalipsum}
\begin{document}
% 明朝・太字→HG明朝E
{\bfseries\jalipsum[4]{wagahai}\par}
% 創英角ポップ体
{\jPoptai\jalipsum[5]{wagahai}\par}
\jalipsum[6]{wagahai}\par
\end{document}

結論

  • TeXの闇に突っ込みたい人は、(u)pLaTeXしましょう!
  • 欅坂46とかで盛り上がりたい人は、とにかくLuaLaTeXしましょう!

  1. 決して「ぶら下げを行う方がよい」と主張する意図はありません。なお、luatexja-otfパッケージにもぶら下げ組を行う機能があります。 

  2. (u)pLaTeXの場合は「先に論理フォントが与えられていて、それに物理フォント(実際のOpenTypeフォント)をマップする」という方式になっているため、「使う物理フォントを変える(これを行うのがpxchfonパッケージ)」のと「フォントの個数を増やす(これを行うのがjapanese-otfパッケージ)」のが全く別の話になり、後者の実装を自力で行う(これが“とある記事”が目標としていたこと)のは非常に困難です。一方、LuaLaTeXの場合は「直接に物理フォントの使用を宣言する」という方式であるため、「使う物理フォントを変える」のも単に「フォントの個数を増やす」話の一種に過ぎない(従来のフォントを使わなくなるだけ)ことになります。 

  3. luatexja-fontspec(やfontspec)の機能を使わずに和文プリセット設定を行うための「nfssonlyモード」というものも存在するのですが、この記事では扱いません。 

  4. ちなみに、jlreqクラスでは行組版パラメタを複数の方式から(open_bracket_poshanging_punctuationオプションにより)選択できますが、どの方式を選んだ場合も同じ名前のJFMが使われます。