jlreq は、阿部紀行氏が作った日本語ドキュメントクラスです。W3C の技術文書「日本語組版処理の要件(JLReq / Requirements for Japanese Text Layout)」に沿った組版を目指すのが名前の由来で、版面(はんめん=本文を組む領域)を数値で精密に設計できるのが最大の特徴。pLaTeX・upLaTeX・LuaLaTeX のどれでも同じ書き方で動きます。このページでは、jlreq が何のためにあり、どんなオプションで版面を設計し、いつ js 系クラスの代わりに選ぶのかを見ていきます。
jlreq とは何か
jlreq は、\documentclass{jlreq} の一行だけで本格的な日本語組版を始められるクラスです。名前の元になった JLReq(日本語組版処理の要件) は、CSS や電子書籍などで日本語を正しく組むために何が必要かを W3C がまとめた技術文書で、日本工業規格 JIS X 4051(日本語文書の組版方法)を土台に、見出し・図表・注・参照記号の扱いといった 版面設計(はんめんせっけい) の指針まで踏み込んでいます。jlreq クラスは、その要件を LaTeX 上で実現しようとする試みです。
もうひとつの柱が エンジン横断 です。jlreq は伝統的な pLaTeX / upLaTeX(DVI を経由して dvipdfmx で PDF にする経路)でも、モダンな LuaLaTeX(LuaTeX-ja)(直接 PDF を出力)でも動きます。どのエンジンで処理されているかはクラスが 自動判定 するので、原稿はそのままで処理系だけを乗り換えられます。明示したいときは platex / uplatex / lualatex をクラスオプションに渡します(XeLaTeX は対象外)。
なぜ jlreq か(js 系との違い)
奥村晴彦氏の jsclasses(jsarticle など)は、よく練られた既定の体裁をそのまま使う設計で、多くの場面でそのまま美しく組めます。これに対し jlreq の発想は逆向きで、版面そのものを設計させる ことに主眼があります。「文字サイズは何ポイントで、1 行は何字詰め、1 ページ何行、行送りはいくつ、天・地・ノドの余白はいくつ」——こうした出版で言う 体裁(はんめん) の各寸法を、規格に基づいて自分で指定できるのです。
だから、指定された判型・字詰め・行数を厳密に満たしたい とき——同人誌や書籍の組版、縦組みの作品、版面寸法が決められた提出物など——に jlreq は力を発揮します。逆に、論文を手早く整った体裁で仕上げたいだけなら、jsclasses や、その LuaLaTeX 版 ltjsclasses で十分なことも多いでしょう。なお jlreq は現在の TeX Live に標準で含まれており、別途インストールは不要です。
基本オプションと文字サイズ
文書の種類は、角括弧のオプションで切り替えます。既定は article 相当で、report を渡せば章(\chapter)を持つ報告書風に、book を渡せば書籍風になります(jsclasses のようにクラス名自体が分かれているのではなく、**一つの jlreq をオプションで切り替える** 点に注意)。縦組みにするには tate を加えます。用紙は paper= で指定し、paper=a4・paper=b5(ISO B 系。JIS B 系は b5j のように)や、paper={148mm,210mm} のような実寸指定もできます。
文字サイズは欧文と和文を分けて考えます。fontsize= が欧文の基準サイズ(既定 10pt)、jafontsize= が和文サイズです。両者の比を直接与える jafontscale= もあり、既定は 1(和文と欧文が同寸)。jlreq では出版で使う 級(Q)と歯(H) も単位として使え、たとえば fontsize=13Q のように書けます(1 級 = 1 歯 = 0.25 mm)。
| オプション | 意味 | 既定 |
|---|---|---|
article / report / book | 文書の種類(章の有無・体裁)を切り替える | article 相当 |
tate | 縦組みにする | 横組み |
platex / uplatex / lualatex | エンジンを明示(通常は自動判定) | 自動判定 |
paper= | 用紙サイズ。a4・b5・{幅,高さ} など | — |
fontsize= | 欧文の基準文字サイズ(Q・H も可) | 10pt |
jafontsize= / jafontscale= | 和文サイズ/和文と欧文の比 | 比は 1 |
版面を設計する
jlreq の核心が 版面設計 です。本文を組む長方形の領域(版面)を、二通りのうちどちらかの考え方で決められます。ひとつは 内側から ——文字サイズと行送り、1 行の長さ、1 ページの行数を与えて、結果として余白が決まる方法。line_length=(1 行の長さ)と number_of_lines=(1 ページの行数)、baselineskip=(行送り)を使います。もうひとつは 外側から ——天(head_space=)・地(foot_space=)・ノド(gutter=)・小口(fore-edge=)の余白を与えて版面を決める方法です。
寸法には専用の単位が便利です。**zw は全角 1 文字分の幅(zen-width)、zh** は全角 1 文字分の高さ(zen-height)を表し、字詰めや行送りを「文字何個分」で素直に書けます。たとえば line_length=40zw なら 1 行 40 字、baselineskip=1.75zw なら全角 1.75 文字分の行送りです。既定では line_length は用紙の文字方向の幅の 0.75 倍、number_of_lines は用紙の行方向の高さの 0.75 倍 に収まる行数、baselineskip は和文サイズの 1.7 倍 になっています。head_space と foot_space を省くと、版面は天地中央に置かれます。2 段組のときは段間を column_gap= で指定します。
| オプション | 意味 | 既定 |
|---|---|---|
line_length= | 1 行の長さ(字詰め) | 用紙幅の 0.75 倍 |
number_of_lines= | 1 ページの行数 | 高さの 0.75 倍に収まる行数 |
baselineskip= | 行送り(行のピッチ) | 和文サイズの 1.7 倍 |
gutter= / fore-edge= | ノド(綴じ側)/小口(その反対側)の余白 | — |
head_space= / foot_space= | 天/地の余白 | 省略時は天地中央 |
column_gap= | 2 段組のときの段間 | — |
縦組みの作例
次は、A5 判の縦組みで版面を内側から設計した例です。tate で縦組みにし、paper=a5 で判型を決め、和文 13 級・1 行 40 字・1 ページ 17 行・行送り全角 1.75 文字分、と数値で版面を指定しています。本文に何も足さなくても、この一行で出版物のような体裁が決まります。
\documentclass[
tate, % 縦組み
paper=a5, % A5 判
fontsize=13Q, % 級で指定(1 級 = 0.25mm)
line_length=40zw, % 1 行 40 字
number_of_lines=17, % 1 ページ 17 行
baselineskip=1.75zw, % 行送り
]{jlreq}
\begin{document}
\title{雪国}
\author{川端康成}
\maketitle
国境の長いトンネルを抜けると雪国であった。
\end{document}これを LuaLaTeX で処理すれば、OS のフォントを使って直接 PDF が、upLaTeX で処理すれば DVI 経由で PDF が得られます。どちらでも \documentclass の行は同じで構いません。横組みにしたいときは tate を外すだけです。
\jlreqsetup と細部の調整
版面の寸法はクラスオプションで決めますが、注・引用・箇条書き・見出しといった 細部の体裁 は、プリアンブルで **\jlreqsetup{...}** にキー=値を並べて整えます。たとえば脚注や傍注(\sidenote)、割注(\warichu)、後注(\endnote)の出し方、引用の字下げ(quote_indent=)、見出しの行取りなどがここで指定できます。見出しそのものを設計し直す \NewBlockHeading や \ModifyHeading も用意され、縦中横を出す \tatechuyoko、字取りの \jidori といった日本語組版に固有の命令も使えます。
こうした作り込みは、最初から全部覚える必要はありません。まず \documentclass のオプションで判型・字詰め・行数を決め、必要になった分だけ \jlreqsetup で足していくのが現実的です。詳しい一覧は、texdoc jlreq で開ける付属の取扱説明書(阿部紀行氏による日本語マニュアル)が最も正確です。