どうやら、とある記事によると、「(u)pLaTeX上のjlreqクラスにおいて和文を多書体(多ウェイト)にする」のはトッテモ難しいようです。そして、その記事の結論としては、jlreqクラスを多書体(多ウェイト)にしたい場合は
とにかくLua(La)TeXしよう
とのこと。至極ゴモットモなので、**「LuaLaTeX上のjlreqクラスにおいて和文を多書体(多ウェイト)にする」**方法についてチョット解説してみることにします。
例題は『猫』である
この記事の解説の例示用に、LuaLaTeX+jlreqクラスで『吾輩は猫である』の文章の一部を縦組で組んだ文書を用意しました。
% 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つの方法があります([参考記事][lualatex-quiz])。
- プリセットの設定を利用する → luatexja-presetパッケージ
- 自力で好きなように設定する → luatexja-fontspecパッケージ
※原則的に3luatexja-presetパッケージはluatexja-fontspecを読みこんでその機能を利用するので、luatexja-presetを使う場合には同時にluatexja-fontspecの機能も使えます。
取りあえず、これらの一般的な方法をjlreqクラスに適用するとどうなるかを見てみましょう。先程の例の文書の一部の段落を太字にするため、luatexja-presetパッケージを読みこんで「源ノフォントの多ウェイト」(sourcehan,deluxe
)の設定を適用してみます。
% 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)にこの修正を加えてみましょう。
% 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パッケージが提供する和文フォント設定用命令(setmainjfont
、newjfontfamily
、など)においては、以下のオプションで適用するJFMを指定できます。
% オプションを追加する
YokoFeatures={JFM=<横組JFM名>},TateFeatures={JFM=<縦組JFM名>}
例えば、jlreqのJFMを維持したまま和文フォントを「HGS創英角ポップ体」に切り替える命令\jPoptai
を定義するための\newjfontfamily
命令は以下のようになります。
% 素敵なフォントを使いましょう
\newjfontfamily{\jPoptai}[
YokoFeatures={JFM=jlreq},
TateFeatures={JFM=jlreqv},
]{HGSSoeikakupoptai}
念のため、完全な文書の例を挙げておきます。
% 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パッケージの機能を利用する」例を挙げておきます。
% 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しましょう!
-
決して「ぶら下げを行う方がよい」と主張する意図はありません。なお、luatexja-otfパッケージにもぶら下げ組を行う機能があります。 ↩
-
(u)pLaTeXの場合は「先に論理フォントが与えられていて、それに物理フォント(実際のOpenTypeフォント)をマップする」という方式になっているため、「使う物理フォントを変える(これを行うのがpxchfonパッケージ)」のと「フォントの個数を増やす(これを行うのがjapanese-otfパッケージ)」のが全く別の話になり、後者の実装を自力で行う(これが“とある記事”が目標としていたこと)のは非常に困難です。一方、LuaLaTeXの場合は「直接に物理フォントの使用を宣言する」という方式であるため、「使う物理フォントを変える」のも単に「フォントの個数を増やす」話の一種に過ぎない(従来のフォントを使わなくなるだけ)ことになります。
[lualatex-quiz]: https://qiita.com/zr_tex8r/items/ac9176e4611bf233a3e0 ↩ -
luatexja-fontspec(やfontspec)の機能を使わずに和文プリセット設定を行うための「nfssonlyモード」というものも存在するのですが、この記事では扱いません。 ↩
-
ちなみに、jlreqクラスでは行組版パラメタを複数の方式から(
open_bracket_pos
とhanging_punctuation
オプションにより)選択できますが、どの方式を選んだ場合も同じ名前のJFMが使われます。 ↩