jlreq 是阿部纪行编写的日文 document class。它的名字来自目标:按照 W3C 技术文档 “Requirements for Japanese Text Layout”(JLReq / 日本語組版処理の要件) 来排版。它最大的特点,是可以用数值精确设计 *hanmen*,也就是正文所在的版面区域。它在 pLaTeX、upLaTeX、LuaLaTeX 上都能以同样写法运行。本页介绍 jlreq 的用途、如何用选项设计版面,以及什么时候选择它而不是 js 系 class。
jlreq 是什么
jlreq 是一个只需 \documentclass{jlreq} 一行就能开始正式日文排版的 class。它名称所来自的 JLReq,“Requirements for Japanese Text Layout”,是 W3C 关于在 CSS、电子书等技术中正确排日文需要什么的技术文档。它主要基于日本工业标准 JIS X 4051(日文文档排版规则),并深入到 hanmen(正文版面)设计 指针,例如标题、图表、注、参照符号的处理。jlreq class 就是在 LaTeX 上实现这些要求的尝试。
另一个支柱是 跨引擎。jlreq 既能在传统的 pLaTeX / upLaTeX(生成 DVI,再用 dvipdfmx 转 PDF 的路线)上运行,也能在现代的 LuaLaTeX(LuaTeX-ja)(直接输出 PDF)上运行。class 会 自动判定 正在使用的引擎,因此原稿不变,只切换处理系即可。若要强制指定,可把 platex / uplatex / lualatex 作为 class 选项传入(不支持 XeLaTeX)。
为什么选择 jlreq(与 js 系的区别)
奥村晴彦的 jsclasses(jsarticle 等)围绕精心调好的默认体裁设计,在许多场景中开箱即可排得很漂亮。jlreq 的思路正相反:重点是让你 设计正文版面本身。“正文字号是多少点,每行多少字,每页多少行,行距多少,天、地、书脊侧的边距是多少”——这些出版中称为 page design / hanmen 的各项尺寸,都可以基于规范自行指定。
因此,当你必须 严格满足指定的开本、字数和行数 时,jlreq 最能发挥作用,例如排书或同人志、竖排作品,或有明确版面尺寸要求的提交物。反过来,如果只是想把论文快速排成整洁的默认样式,jsclasses 或其 LuaLaTeX 版 ltjsclasses 往往已经足够。jlreq 现在已随 TeX Live 标准提供,不需要单独安装。
基本选项与字号
文档类型通过方括号中的选项切换。默认相当于 article;传入 report 就成为带章(\chapter)的报告形式,传入 book 就成为书籍形式。(注意它不像 jsclasses 那样按类型分成不同 class 名,而是 用选项切换同一个 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(1Q = 1H = 0.25 mm)。
| 选项 | 含义 | 默认值 |
|---|---|---|
article / report / book | 切换文档类型(章的有无、体裁) | 相当于 article |
tate | 竖排 | 横排 |
platex / uplatex / lualatex | 显式指定引擎(通常自动判定) | 自动判定 |
paper= | 纸张大小:a4、b5、{宽,高} 等 | — |
fontsize= | 西文基准字号(可用 Q / H) | 10pt |
jafontsize= / jafontscale= | 日文字号 / 日文与西文比例 | 比例 1 |
设计版面
jlreq 的核心是 正文版面设计。正文所在的矩形区域(*hanmen*)可用两种思路确定。一种是 由内向外:给出字号、行距、每行长度和每页行数,余白随之确定,使用 line_length=(一行长度)、number_of_lines=(每页行数)、baselineskip=(行距)。另一种是 由外向内:给出天(head_space=)、地(foot_space=)、书脊侧(gutter=)、小口侧(fore-edge=)边距,由它们确定正文版面。
这里使用专用单位很方便。zw 表示一个全角字符的宽度(zen-width),zh 表示其高度(zen-height),因此可以自然地把字数和行距写成“几个字”。例如 line_length=40zw 表示一行 40 字,baselineskip=1.75zw 表示 1.75 个全角字符的行距。默认情况下,line_length 是纸张字符方向长度的 0.75 倍,number_of_lines 是在行方向高度 0.75 倍 内可容纳的行数,baselineskip 是日文字号的 1.7 倍。省略 head_space 和 foot_space 时,版面在天地方向居中。双栏时,用 column_gap= 指定栏间距。
| 选项 | 含义 | 默认值 |
|---|---|---|
line_length= | 一行长度(字数) | 纸张宽度的 0.75 倍 |
number_of_lines= | 每页行数 | 能放入高度 0.75 倍范围内的行数 |
baselineskip= | 行距(行的 pitch) | 日文字号的 1.7 倍 |
gutter= / fore-edge= | 书脊侧 / 小口侧边距 | — |
head_space= / foot_space= | 上 / 下边距 | 省略时上下居中 |
column_gap= | 双栏时的栏间距 | — |
竖排示例
下面是一个 A5 竖排文档,从内向外设计正文版面。tate 设为竖排,paper=a5 决定开本,其余数值指定版面:日文 13Q、一行 40 字、每页 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 与细部调整
正文版面尺寸由 class 选项决定,但注、引用、列表、标题等 细部体裁,则在导言区通过 \jlreqsetup{...} 列出 key=value 来调整。这里可以指定脚注、旁注(\sidenote)、割注(\warichu)、尾注(\endnote)的排法,引用缩进(quote_indent=)、标题占行等。\NewBlockHeading、\ModifyHeading 可重新设计标题本身,也能使用 \tatechuyoko(纵中横)、\jidori(字取り)等日文排版特有命令。
这些细节不必一开始全部记住。实际做法是先用 \documentclass 选项确定开本、字数和行数,只有在需要时再用 \jlreqsetup 逐项添加。完整列表以 texdoc jlreq 打开的随附说明书(阿部纪行的日文手册)最为准确。
从给定页面规格开始
当出版社或课程给出“A5、竖排、每行 38 字、每页 18 行”这样的尺寸时,jlreq 最有用。首先把该规格分解为纸张、方向、字号、字数、行数、行距,然后写入 \documentclass 那一行。在写正式稿前,先放入一页假文生成 PDF,用尺确认行数和边距,再进入正文。这样可以避免最后才重做版面。
\documentclass[
tate,
paper=a5,
fontsize=13Q,
line_length=38zw,
number_of_lines=18,
baselineskip=1.75zw,
]{jlreq}引擎可以交给自动判定,但在共同写作或 CI 中,显式指定更不容易出事故。如果原稿用 upLaTeX 验证过,就加入 uplatex;如果用 LuaLaTeX 连同字体设置一起验证过,就加入 lualatex。构建命令也固定到同一路线。
定好版面后先检查一页
jlreq 的设置很强大,因此即使数值错了也可能照样生成 PDF。写正式正文前,先放入一页假文,加上标题、脚注、引用、小图或表,然后检查每行字数、行数、书脊侧和小口侧。尤其在竖排中,纸面上的“行方向”和“字进方向”与横排互换,所以首先确认没有把 line_length 和 number_of_lines 理解反。
- 每行字数 — 在正文中数全角字符,不要只看标点位置判断。
- 行数 — 普通页面和带标题的页面都要检查正文行数是否在预期内。
- 边距 — 装订原稿要给书脊侧更多空间;仅提交 PDF 时避免过大的装订边。
- 引擎 — 如果 upLaTeX 与 LuaLaTeX 使用不同字体,只把所选路线生成的 PDF 作为准本。