日文需要处理西文没有的问题:竖排、禁则处理(行首或行尾不能出现的字符)以及日文与拉丁文字之间的间距。TeX 有两条成熟路线:历史悠久的 pLaTeX / upLaTeX(经由 DVI 和 dvipdfmx)以及现代的 LuaLaTeX-ja(直接输出 PDF,使用 OpenType 字体)。本页概览这些选择,并说明各自的入门方法与选择标准。
日文 TeX 的全貌
日文排版的基础是 ASCII Corporation 开发的 pTeX 引擎,它把竖排、禁则以及日文—拉丁文间距调整带入了 TeX。建立在其上的 LaTeX 就是 pLaTeX。后来出现了内部 Unicode 化的 upTeX / upLaTeX,再之后又有把日文排版移植到现代 LuaTeX 引擎上的 LuaTeX-ja。实际选择主要有三种:pLaTeX、upLaTeX、LuaLaTeX-ja(引擎本身见“pTeX 系”)。
用 pLaTeX / upLaTeX 排版
首先选择日文用的文档类:广泛使用的 jsclasses(jsarticle、jsbook,奥村晴彦维护),或符合 JLReq 的现代 jlreq。用于 upLaTeX 时,在类选项中传入 uplatex。构建流程是 uplatex → DVI → dvipdfmx(或一次运行 ptex2pdf -l -u)。upLaTeX 可处理整个 Unicode,而普通 pLaTeX 仅限 JIS X 0208 范围。
% upLaTeX。uplatex main.tex && dvipdfmx main
\documentclass[uplatex]{jsarticle}
\begin{document}
日本語と English の混植。
\end{document}用 LuaLaTeX-ja 排版
现代路线是 LuaTeX-ja:在 LuaLaTeX 上进行日文排版,特点是 Unicode 原生、OpenType/系统字体、直接输出 PDF(不经过 DVI)。使用 LuaTeX-ja 用的类(如 ltjsarticle,或在 lualatex 下使用 jlreq),并用 luatexja-fontspec 的 \setmainjfont / \setsansjfont 指定日文字体。编译命令是 lualatex。
% LuaLaTeX-ja。lualatex main.tex
\documentclass{ltjsarticle}
\usepackage{luatexja-fontspec}
\setmainjfont{Noto Serif CJK JP}
\begin{document}
日本語と English の混植。
\end{document}日文排版会在字符之间插入细微的空白(glue):日文字符之间的 kanjiskip,以及日文和西文边界处的 xkanjiskip(“日本語 and abc” 周围的小间距)。在 LuaTeX-ja 中可用 \ltjsetparameter{...} 调整;在 pLaTeX/upLaTeX 中,文档类通常会设置合适的默认值。
\ltjsetparameter{xkanjiskip=0.25\zw plus 1pt minus 1pt}该用哪一个
- 既有资产、速度、论文中的常规选择 →
upLaTeX(jsclasses或jlreq)+dvipdfmx。 - 现代、OpenType 字体、直接 PDF →
LuaLaTeX-ja(ltjsclasses或jlreq);新项目中越来越常见。 - 普通 pLaTeX 受 JIS X 0208 限制,新文档建议选择 up 系或 Lua 系路线。
jlreq同时支持 pLaTeX、upLaTeX、LuaLaTeX,适合严肃的 JLReq 规范排版。