白屋書房Blog

組版・縦書きサイト「白屋書房」のブログです

激闘TeX:utbook vs. jlreq

サイトの更新ではありませんが、個人的に戦いだったので記事を書いています。jlreqクラスの字間について。

さる10月の朝8時、私は死に物狂いで原稿を書いていました。その日が同人誌即売会当日だというのに、ペーパーがまだ完成していなかったのです。どうにか原稿本体の執筆を終え組版に入る段になり、私は迷わずドキュメントクラスにjlreqを選択しました。
jlreqクラスは日本語組版処理の要件に基づいて組版を行い、かつ版面や見出しなどの設定が容易に行える大変素晴らしいクラスです。余計なパッケージなどを設定している時間のない時にはこれ一択です。(おまけにut系列以外で縦書き書籍が組める唯一のクラスでもある)

以下のような設定でテキストを流し込み、組版してみました。すると……

\documentclass[uplatex,dvipdfmx,tate,book,openany,twocolumn,hanging_panctuation,fontsize=9pt,jafontsize=9pt,paper=a5,head_space=11mm,foot_space=18mm]{jlreq}
\usepackage[sourcehan-otc]{pxchfon}
\usepackage[default,regular,black,scale=1.05]{sourceserifpro}
\usepackage[T1]{fontenc}
\usepackage{textcomp}
\usepackage[utf8]{inputenc}
\usepackage{pxrubrica}
\rubysetup{||hJf>}
\usepackage[pdfdirection=R2L]{hyperref}

{\catcode`\^^M=\active%
\gdef\xobeylines{\catcode`\^^M\active \def^^M{\par\leavevmode}}%
\global\def^^M{\par\leavevmode}} % obeylinesの強化版
\parindent = 0pt % 全角スペースで字下げしたい

\ModifyPageStyle{plain}{nombre_position=bottom-left}
\pagestyle{plain}
\ModifyHeading{chapter}{format={\large\mdseries #2},indent=6zw,lines=4}

\begin{document}
\xobeylines%
\chapter{}
 \ruby{吾輩}{わが|はい}は猫である。名前はまだ無い。
︙

f:id:isaribisaitoh:20181203104308p:plain
jlreq

なんか微妙に間が抜けてませんか?

普段使っているutbookクラスよりも行間が広いことも原因なんですが、それだけでなく字と字の間がほんの少しだけ広いです。特にこのへん

f:id:isaribisaitoh:20181203105400p:plain

とかこのへん

f:id:isaribisaitoh:20181203110742p:plain

が気になります。

大した空きじゃないだろ、と思われるかもしれませんが、紙に刷った時の間延び具合が顕著でした。
今まで使っていたutbookクラスではこんなことはなかったんです。使っているフォントも同じなのにです。
utbookのセッティングはこちら。

\documentclass[uplatex,dvipdfmx,a5paper,twocolumn,openany]{utbook}
\usepackage[T1]{fontenc}
\usepackage{textcomp}
\usepackage[utf8]{inputenc}
\usepackage[sourcehan-otc]{pxchfon}
\usepackage[default,regular,black,scale=1.05]{sourceserifpro}
\usepackage{lltjp-geometry}
\usepackage[dvipdfm,top=11mm,bottom=18mm,left=16mm,right=24mm,footskip=8mm,twoside]{geometry}
\usepackage{pxatbegshi}
\usepackage[pdfdirection=R2L]{hyperref}
\usepackage{pxrubrica}
\rubysetup{||hJf>}
\usepackage{titlesec}
\titleformat{\chapter}{\normalsize}{}{7zw}{}
\titlespacing{\chapter}{0zw}{3zw}{3zw}

{\catcode`\^^M=\active%
\gdef\xobeylines{\catcode`\^^M\active \def^^M{\par\leavevmode}}%
\global\def^^M{\par\leavevmode}}
\parindent = 0pt
\def\rensuji#1{\hskip\kanjiskip\hbox to 1zw{\yoko\hss\smash{#1}\hss\rule[-0.12zw]{0zw}{1zw}}\hskip\kanjiskip} % plextの連数字の修正版
\renewcommand{\baselinestretch}{1.25}
\setlength{\columnsep}{7mm}
\pagestyle{footnombre}

\begin{document}
\xobeylines%
\small%
\chapter{}
 \ruby{吾輩}{わが|はい}は猫である。名前はまだ無い。
︙

f:id:isaribisaitoh:20181203111826p:plain
utbook

画面上だと詰まって見えるかもしれませんが、紙に刷った時の読み心地はこちらの方が格段に上でした。

行間や版面のパラメータが揃っていないのが悪いのかと思い、できるだけutbookの仕上がりに寄せたバージョンでもやってみました。

\documentclass[uplatex,dvipdfmx,tate,book,openany,twocolumn,hanging_panctuation,fontsize=9pt,jafontsize=9pt,baselineskip=1.5zw,paper=a5,head_space=11mm,foot_space=18mm,gutter=24mm]{jlreq}
\usepackage[sourcehan-otc]{pxchfon}
\usepackage[default,regular,black,scale=1.05]{sourceserifpro}
\usepackage[T1]{fontenc}
\usepackage{textcomp}
\usepackage[utf8]{inputenc}
\usepackage{pxrubrica}
\rubysetup{||hJf>}
\usepackage[pdfdirection=R2L]{hyperref}

{\catcode`\^^M=\active%
\gdef\xobeylines{\catcode`\^^M\active \def^^M{\par\leavevmode}}%
\global\def^^M{\par\leavevmode}}
\parindent = 0pt

\ModifyPageStyle{plain}{nombre_position=bottom-left}
\pagestyle{plain}
\ModifyHeading{chapter}{format={\large\mdseries #2},indent=6zw,lines=7}

\begin{document}
\xobeylines%
\chapter{}
 \ruby{吾輩}{わが|はい}は猫である。名前はまだ無い。
︙

f:id:isaribisaitoh:20181203112433p:plain
jlreq改

空白はあらかた揃いましたが、それでもやっぱり字間が空いて見えます。最初の方の「ニャーニャー」や最後の行の「ようやくの事で」あたりを見てもらえれば分かるかと思います。

さて困りました。jlreqには行間を指定するパラメータはありますが字間を指定するパラメータなんてものはありません(そんなものがTeXの理念上存在しうるのかどうかも怪しい)。かろうじてline_lengthが近いかと思い、utbookの方の一行の字数である29zwをセットしてみました。が、

f:id:isaribisaitoh:20181203114526p:plain
line_length=29zw

現在の字間のまま29字詰めに伸びただけで、「現在の\linewidthの長さのままそこに29文字を押し込む」という動作はしてくれませんでした。(当たり前か……)

和文文字と和文文字の間の隙間なのだからこれはkanjiskipだろうと思い、恐る恐るjlreq.cls本体を開いて\providecommand*{\jlreq@kanjiskip}{0pt plus 0.25\zw minus 0pt}の数値を{0pt plus 0pt minus 0pt}に書き換えるという暴挙にも出ました。組版がガタガタになりました。

f:id:isaribisaitoh:20181203122429p:plain
ガタガタ。しかも字間にはあまり影響がない

ここで詰みました。筆者は素人なのでTeXが文字を並べる際の動作などについては皆目分かりません。
途方に暮れているうちにTeXConf 2018がやってきました。初参加(会場の隅っこで話を聞いていただけ)の緊張の中、公演終了後のフリータイムで某さんにこの話を打ち明けたところ、仮想フォントの問題ではないかという示唆をいただきました。
仮想フォント。TeX言語そのものよりも深い沼だと言われる仮想フォント。手に負える気がしません。
ともあれ私の口頭でのグダグダな説明だけでは詳しいことは分からないのでサンプルを上げてくれと某さんや某さんが仰いました。そんなわけで私は今この記事を書いています。

いいお知恵が(あるいはトンチンカンなことを言っている場合にはツッコミが)あれば教えていただけると幸いです。