20
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2019-01-16

どうやら、とある記事によると、「(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つの方法があります([参考記事][lualatex-quiz])。

  • プリセットの設定を利用する → 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の闇:skull:に突っ込みたい人:scream:は、(u)pLaTeXしましょう!
  • 欅坂46とかで盛り上がりたい人:relaxed:は、とにかくLuaLaTeXしましょう!
  1. 決して「ぶら下げを行う方がよい」と主張する意図はありません。なお、luatexja-otfパッケージにもぶら下げ組を行う機能があります。

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

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

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

20
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?