日文排版方法

日文需要处理西文没有的问题:竖排、禁则处理(行首或行尾不能出现的字符)以及日文与拉丁文字之间的间距。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 排版

首先选择日文用的文档类:广泛使用的 jsclassesjsarticlejsbook,奥村晴彦维护),或符合 JLReq 的现代 jlreq。用于 upLaTeX 时,在类选项中传入 uplatex。构建流程是 uplatex → DVI → dvipdfmx(或一次运行 ptex2pdf -l -u)。upLaTeX 可处理整个 Unicode,而普通 pLaTeX 仅限 JIS X 0208 范围。

latex
% 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

latex
% 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 中,文档类通常会设置合适的默认值。

latex
\ltjsetparameter{xkanjiskip=0.25\zw plus 1pt minus 1pt}

该用哪一个

  • 既有资产、速度、论文中的常规选择upLaTeXjsclassesjlreq)+ dvipdfmx
  • 现代、OpenType 字体、直接 PDFLuaLaTeX-jaltjsclassesjlreq);新项目中越来越常见。
  • 普通 pLaTeX 受 JIS X 0208 限制,新文档建议选择 up 系或 Lua 系路线。
  • jlreq 同时支持 pLaTeX、upLaTeX、LuaLaTeX,适合严肃的 JLReq 规范排版。