日本在TeX方面的贡献做了不少工作,其普及程度也远比我们做得好一些,本文系列转载了日文当前的系统的大致情况。


本文为译文,原文载于这里 nihongo-latex

一、简介

对于日本人来说,在 LaTeX 里面写日文很简单。但是由于文档的缺乏,外国人(相对日本)想要这样做就不容易了。更何况日语里面会混合罗马字母、假名、汉字。

这里我想总结一下我自己写日文 LaTeX 文档的经验。这些经验一方面来自我自己的实践,另一方面来自我的日本朋友的各种帮助。系列文章的第一部分简介了日文排版的一些情况,特别是关于 TeX 的介绍。在这里,我会对用于排版日文的 TeX 引擎和宏包做一个简单的比较。

日文书写系统

日文中至少有四种书写系统:

  • 罗马字母
  • 平假名:平假名共有 45 个,一般来说用于连接汉字。
  • 片假名:片假名和平假名一一对应,一般用来音译外文。
  • 日文汉字:来自中文的表意文字,书面语里有很多汉字。

通常来说,日文文章里这四种书写系统会混杂在一起。下面的截图来自日文维基百科的「日本」词条。

Japanese-Text-Example

截图:日文维基百科的「日本」词条

日文书写系统的的规则繁复。Haruhiko Okumura (奥村 晴彦) 先生对此有过一个不错的介绍;如果你想了解详细的规则,可以看这里。TeX 本身并没有支持这些规则,于是 1987 年 NTT 的 Yasuki Saito (斉藤 康己) 先生编写了 NTT jTeX 这个引擎;1990 年,ASCII 公司 的 Shunji Ohno (大野 俊治) 先生和 Ryoichi Kurasawa (倉沢 良一) 先生修改了 NTT jTeX,增加了出版业所必须的竖排功能,命名为 pTeX (publishing TeX)。对此,Okumura 先生的文章里有详细的叙述。

日文排版

日本自己开发了 pTeX,但这些年也有其他的一些 TeX 引擎可以用来排版日文。据我所知,有以下一些。
  • e(p)(la)tex: 从原始的 pTeX 而来,增加了 e-TeX 的补丁以适应现代 LaTeX 的需要
  • up(la)tex: 同样从原始的 pTeX 发展而来,增加了 e-TeX 的补丁并增加了 UTF-8 编码支持
  • xe(la)tex: 另一个系统,同样支持 UTF-8 编码以及其他一些先进的技术
  • pdf(la)tex with CJK package: 支持中日韩文字,但已过时
  • pdf(la)tex with bxcjkjatype package: 一个易用的新宏包,有一些功能上的限制
  • lua(la)tex with luatex-ja package: 最新的日文支持方式,提供了不少优秀的特性

需求

在 LaTeX 里书写日文有以下需求。
  • e-TeX 原语:e-TeX 是原始 TeX 的扩展,后逐渐成为主流,现在它的原语成为 LaTeX 强制要求的一部分
  • 日文排版禁则:如前所述
  • 竖排:许多非技术文本都会用到竖排
  • UTF-8 支持:pTeX 使用的编码不大好,有不少问题,现代计算机大都使用 UTF-8 编码
  • 能够使用商业字体:在文章里能够自由切换字体
  • 插图支持
在这里,pTeX 不支持 e-TeX、UTF-8 编码,插图功能孱弱;e-pTeX 完善了 e-TeX 支持,但仍不支持 UTF-8 编码且插图功能依旧孱弱;upTeX 又克服了 UTF-8 编码支持的问题;XeTeX 对竖排的支持能力有限;pdfTeX + CJK 对日文禁则处理不好,也不支持竖排;pdfTeX + bxcjkjatype 对日文禁则处理不好,不支持竖排,也无法比较好地处理商业字体;LuaTeX + LuaTeX-ja 对竖排的支持不甚良好。

(至今为止的)结论

最近我都在使用 LuaTeX-ja,以下是对此的一些总结。
  • (u)ptex: 如果你想要竖排功能,这是唯一的选择;此外,由于 pTeX 系源自日本,它对日文排版禁则的支持最好
  • xe(la)tex: 目前功能相对完善的宏包是 xeCJK,但其实只是对中文支持良好;日本有同好对此做了扩展,效果一般
  • pdf(la)tex + CJK: 过时了,不推荐
  • pdf(la)tex + bxcjkjatype: 很好用,但是有一个很重要缺点:所有非 ASCII 字符都被当做汉字对待
  • luatexja: 最打动我的宏包,强烈推荐。
下一篇文章里我会介绍一下各种方式底下的最简日文示例。 谢谢!

译者续

马起园 (Clerk Ma) 的 pTeX-ng 是下一代的 pTeX。pTeX-ng 从 Y&Y TeX 发展而来,是纯 C 编写的 TeX 引擎。它带有 e-TeX, pTeX 的补丁,并原生支持 Unicode 编码,对字体支持良好,并且能够直接输出 PDF 文档。pTeX-ng 的前景十分喜人。

二、字符与编码

上一节简单介绍了在 LaTeX 中排版日文的一些情况,今次我们会探讨一些关于字符和编码的技术细节。

这篇文章我们将讨论字符集和编码。在书写欧洲文字的时候,人们就已经需要用到非 ASCII 字符了;诸如日文这样的有成千上万个表义字符的书写系统,其字符数量更是远超 ASCII 所能涵盖的数量。同时我们也会琢磨一下为什么在日文文档里的转义字符为什么不是反斜线(\),而是日本货币标志(¥)。

首先,我并不精于此道。因此,文中讲解的内容十分简单,并且不可避免地会有谬误。如有发现请指出。

字符集和编码

对于 ASCII 来说,这事儿很简单。比如,在计算机中表示「A」这个字母,我们只需要用 65 这个十进制数来表示即可。并且,65 对应的二进制数,也正是字母「A」在计算机中的样子。因此,对于 ASCII 来说,它既是字符集又是编码。

对于非 ASCII 字符来说,这事儿就变得复杂起来了。

对于欧洲的字符来说可能还好。比如常用的 Latin1 字符集中,字符「Ö」的码位是 214。由于一个字节可以表示 256 个不同的值,所以勉强能装下整个 Latin1 字符集。

但是对于成千上万的日文汉字 (Kanji) 来说,这就不行了。首先需要有一个统一的方式将字形 (glyph) 编号,每个字形对应一个 ID (数字)。然后再寻找一个合适的方式去编码这些字形。

字符集标准

  • JIS - 实践中有一些日本工业标准 (Japanese Industrial Standards)。比如,JIS X 0201 在 ASCII 字符集的基础上,增加了 64 个半宽 (half-width) 的片假名;又比如,JIS X 0208 是最常见的汉字字符集,它包含 6879 个字符,其中有 6355 个汉字,另有 524 个其他类型的字符。
  • UCS - 通用字符集 (Universal Character Set) 中包含了近十万个抽象字符,它试图将有史以来所有的字符都包含进来。涉及到日语的部分有一些特殊,对应的标准是统一汉码 (Han Unification),这个字符集将中日韩表意相同的形近字统一映射到一个码位上。

编码

有了字符集标准,接下来需要考虑如何在计算机中用二进制和字节表示这些字符。编码和字符集是两个不同的概念,但因为总是一起提及,所以经常有人混淆。

对于现代计算机和 TeX 来说,有以下一些常见的编码。其中前三个编码了 JIS 字符集;最后一个编码了 Unicode 字符集。

  • SJIS (Shift JIS) - SJIS 编码了 JIS X 0201 和 JIS X 0208 两个字符集。它很好地兼容了 ASCII 和 JIS X 0201,这使得它在老的计算机上工作正常;但是它也有一些奇怪的性质,并因此在一些通用解析器上工作不正常。
  • JIS X 0202 - 通称 JIS 的编码标准,它编码了 JIS X 0208。这个编码在诸如电子邮件的 7-bit 信道上的传输性能良好;老的 Emacs 也将其当做内部编码。
  • EUC(-JP) Extanded Unix Code - 实际上是符合 ISO 2022 标准的字符集的编码族。这种编码在日本的 Unix-affine 计算机上流行多年。
  • UTF-8 - 编码了 UCS 字符集,是 Unicode 标准的一部分,先行与几乎所有现代计算机操作系统上。

最后我们来看一个例子。

Language
Ä á
日本語
ひらがな
注意观察他们在不同编码规则情况下对应的十六进制数据。

UTF-8

第一行的「Language」在 UTF-8 编码中对应的十六进制与 ASCII 完全相同,用一个字节表示一个字符;第二行的注音字母则用两个字节来编码,其中 0x20 是单字节的空格;第三行的日文汉字和第四行的平假名都用三个字符来编码。

4c 61 6e 67 75 61 67 65
c3 84 20 c3 a1
e6 97 a5 e6 9c ac e8 aa 9e
e3 81 b2 e3 82 89 e3 81 8c e3 81 aa

SJIS

SJIS 编码就有点意思了。首先,第一行保持相同,与 ASCII 兼容。第二行的「Ä」并不在字符集当中,于是 SJIS 把它当做是「”A」,编码成「0x22 0x41」;另一方面,「á」在字符集当中,SJIS 用三个字节将它编码成「0x81 0x4c 0x61」。注意第一行的编码,「0x4c」是字母「L」,「0x61」是字母「a」。它们连在一起与「á」的第二和第三个字节完全相同。这样「La」的编码就出现了歧义,一些解析器就无法正常工作了。

接下来的日文汉字和平假名分别用两个字节来编码。

4c 61 6e 67 75 61 67 65
22 41 20 81 4c 61
93 fa 96 7b 8c ea
82 d0 82 e7 82 aa 82 c8

ISO2022-JP

同样由于「Ä」不在字符集当中,ISO2022-JP 把它当做是「”A」来进行编码;但「á」却花了 9 个字节来编码。同时汉字和平假名的编码方式也是不固定的。

4c 61 6e 67 75 61 67 65
22 41 20 1b 24 42 21 2d 1b 28 42 61
1b 24 42 46 7c 4b 5c 38 6c 1b 28 42
1b 24 42 24 52 24 69 24 2c 24 4a 1b 28 42

EUC-JP

EUC-JP 编码对应的字符集是 JIS X 0212,比之前的 JIS X 0201 和 JIS X 0208 大得多。这次「Ä」能够正确编码了。两个变音的拉丁字符被分别编码成三个字节;汉字和假名则是两个字节。

4c 61 6e 67 75 61 67 65
8f aa a3 20 8f ab a1
c6 fc cb dc b8 ec
a4 d2 a4 e9 a4 ac a4 ca
从这里可以看到,UTF-8 编码汉字和假名需要用到三个字节。因此用 UTF-8 编码来处理文档,得到的文件体积要大上不少。同时,旧有的编码沿用多年,惯性很大。因此 UTF-8 编码在日本用了很多年才得以推广。

我的计算机在用什么编码?

这取决于你的计算机操作系统。

  • Linux: 大多数情况下,Linux 系统使用 UTF-8 编码。在终端里执行 locale 命令,输出结果中的 LC_CTYPE 字段里可以看到系统语言和使用编码的信息。比如,en_US.utf8
  • Mac: 在 OS X 之前,Mac 使用的是苹果公司修改的 SJIS 版本,其名为 MacJapanese。从 OS X 开始,Mac 使用的是 UTF-8。
  • Windows: 老版本使用 M$ 家修改的 SJIS 版本,其名为 CP932 (代码页 932,简体中文系统则是 CP936)。不过,新版本的 Windows 也有可能使用 UTF-8。
  • BSD: 据我所知,用的是 UTF-8。

小结

在 LaTeX 里些日文文档之前,你先要确定你使用的是什么编码。不同的 TeX 引擎对编码支持的情况不同,你应该根据需要选择合适的编码和 TeX 引擎。目前被 TeX 引擎支持最好的编码(译注:原文是字符集)是 UTF-8。新版本的 pTeX 接受 UTF-8 编码;upTeX, XeTeX, LuaTeX 原生支持 UTF-8 编码;使用 BXcjkjatype 时,也应当使用 UTF-8 编码。

不过,不少老版本的文档使用 SJIS 编码。此时你应该使用 pTeX,用 pLaTeX 来编译;或者将他们转换为 UTF-8 编码后使用。

关于 \ 和 ¥

以下内容来自维基百科 ShiftJIS 词条:

The single-byte characters 0x00 to 0x7F match the ASCII encoding, except for a yen sign (U+00A5) at 0x5C and an overline (U+203E) at 0x7E in place of the ASCII character set’s backslash and tilde respectively.

也就是说,在 SJIS 中,符号「¥」的编码与 ASCII 里的反斜线「\」的编码相同,都是 0x5C;与此同时,TeX 将 0x5C 当做是转义符。于是,在使用 SJIS 编码的计算机里,TeX 控制序列就都变成了类似 ¥hfill 的样子。

下一篇文章,我们将正式开始编写 LaTeX 代码!

译者续

SJIS 在日本的地位和 GBK 在中国的地位差不多。在早期的 Windows 系统里,使用的 CP936 与 GBK 几乎相同。同时,中文 LaTeX 早期的支持方式也都是基于 GBK 编码的。

为了避免不必要的麻烦,我们的口号是:「珍爱生命,远离 GBK」。

三、最简示例

上一节我们探讨了关于字符集和编码的一些细节,今次我们继续讨论如何在 LaTeX 中书写日文。今天的内容需要动手操作试试,要用不同的引擎和宏包写一些 Hello world 类型的文档。

今天的内容同样会涉及到一些配置 TeX 环境的内容,会讲一讲如何在 TeX Live 里配置书写日文的环境。

配置日文 TeX 环境

我们假设,你已经在计算机上安装好了类似 TeX Live 2014 的 TeX 系统。你可以在下列 TeX 系统中选择其一安装。

  • TeX Live 的原始版本 (Upstream TeX Live installation) - 完整的安装步骤,请参考 TeX Live 的文档(中文版)的第三章。对于 Linux 和 Windows 系统,也可以参照相应的快速安装教程。对于 Mac OS X 的用户,则建议安装基于 TeX Live 的 MacTeX
  • 发行版里的 TeX Live (Distribution’s TeX Live) - 具体的安装取决于你使用的发行版。如果你用的是 Debian/jessie 或者 Debian/sid,那么你只需要运行 apt-get install texlive-full 即可。其他发行版 (Fedora, RedHat, SuSE) 的用户请注意检查发行版里当前的 TeX Live 版本。在老版本的环境下,后文中的例子可能无法得到预期的结果。
  • W32TeX - W32TeX 是 Akira KAKUTO 针对 Windows 系统制作的 TeX 发行版,其中的宏包也专门为 Windows 系统筛选过。W32TeX 对日文的配置可能是最周全的,不过我没有亲身体验过。
  • 其他 TeX 发行版 - MiKTeX 是另一个重要的 TeX 发行版。MiKTeX 是 Windows 平台上高度集成的优秀发行版。不过因为打包和依赖脚本的差异,特别是涉及到 udpmap 的部分与 TeX Live 完全不同,MiKTeX 在我手头的一些设备上并不能很好地运行。

我的建议是,如果你的发行版足够新,那最好使用软件源里的 TeX Live;不然的话最好是使用 TUG 上的 TeX Live,包括 MacTeX。

最简示例

言归正传。接下来我们来写几个「Hello world」文档。当然,「Hello world」这几个字母里并没有日文字,所以文章的正文部分看起来会是这个样子:

\begin{document}
\LaTeX で日本語を書きましょう!
\end{document}

在进行下一步之前,有必要说一下关于编码的问题。请按以下规则,在保存文件的时候选择正确的编码:

  • Unix-like 系统以及 Mac OS X 系统:总是保存为 UTF-8 编码
  • Windows 系统:在测试 pLaTeX 的时候使用 ShiftJIS 编码,其他时候使用 UTF-8 编码

这样做的原因在于:在 Windows 系统上,pTeX 以 ShiftJIS 编码作为默认编码;在其他系统上以 UTF-8 编码作为默认编码。当然,你也可以在 Windows 上把 pLaTeX 的测试文档以 UTF-8 编码保存,但是在编译的时候你得加上 -kanji utf8 这样的参数。

pLaTeX 以及 upLaTeX

这是最简单的情况,我们只需要加上 \documentclass 就好了。

\documentclass{article}
\begin{document}
\LaTeX で日本語を書きましょう!
\end{document}
 以正确的编码将其保存为hello-ptex.tex ,然后运行platex ,UTF-8 编码的控制台会有类似于如下的输出:
$ platex hello-ptex.tex
This is e-pTeX, Version 3.14159265-p3.5-130605-2.6 (utf8.euc) (TeX Live 2014) (preloaded format=platex)
 restricted \write18 enabled.
entering extended mode
(./hello-ptex.tex
pLaTeX2e <2006/11/10> (based on LaTeX2e <2014/05/01> patch level 0)
Babel <3.9k> and hyphenation patterns for 79 languages loaded.
(/home/norbert/tl/2014/texmf-dist/tex/latex/base/article.cls
Document Class: article 2007/10/19 v1.4h Standard LaTeX document class
(/home/norbert/tl/2014/texmf-dist/tex/latex/base/size10.clo)) (./hello-ptex.aux
) [1] (./hello-ptex.aux) )
Output written on hello-ptex.dvi (1 page, 384 bytes).
Transcript written on hello-ptex.log.

Windows 系统上的输出与此类似,只不过在版本号后面的不是 utf8.euc  而是 sjis 。

如你所见,输出结果是一个 DVI 文件。注意,此处不要使用 dvips 将其转换为 PostScript 文件,dvips 也许能够工作,但是 PS 文件却无法正常显示;请总是使用 dvipdfmx 将 pTeX/upTeX 输出的 DVI 文件转换为 PDF 文件。

因此,我们输入命令

$ dvipdfmx hello-ptex.dvi
hello-ptex.dvi -> hello-ptex.pdf
[1]
7636 bytes written
 接下来,使用 PDF 阅读器打开得到的 PDF 文档,效果类似于下:hello-ptex

如果觉得字体效果看起来稍有不同,也暂时不用担心,之后对此会有解释。但不论如何,你应该能看到日文字符,不然就说明有哪里错了。

类似的步骤在 upTeX 下同样奏效:

$ uplatex hello-ptex.tex
This is e-upTeX, Version 3.14159265-p3.5-u1.11-130605-2.6 (utf8.uptex) (TeX Live 2014) (preloaded format=uplatex)
 restricted \write18 enabled.
entering extended mode
(./hello-ptex.tex
pLaTeX2e <2011/05/07u00>+0 (based on LaTeX2e <2014/05/01> patch level 0)
Babel <3.9k> and hyphenation patterns for 79 languages loaded.
(/home/norbert/tl/2014/texmf-dist/tex/latex/base/article.cls
Document Class: article 2007/10/19 v1.4h Standard LaTeX document class
(/home/norbert/tl/2014/texmf-dist/tex/latex/base/size10.clo)) (./hello-ptex.aux
) [1] (./hello-ptex.aux) )
Output written on hello-ptex.dvi (1 page, 380 bytes).
Transcript written on hello-ptex.log.
$ dvipdfmx hello-ptex.dvi
hello-ptex.dvi -> hello-ptex.pdf
[1]
7638 bytes written

输出结果与之前应当完全相同。

多简单啊~

XeLaTeX

如果你用 XeLaTeX 编译同样的代码,输出结果里就不会有日文字符。这里我们要多写一点代码。这里我会展示使用 xeCJK 和 ZXjatype 的最简示例。这两个宏包在 TeX Live 里都有,你可以选择其一。

不管你用哪个宏包,你都得选择一个日文字体,不然的话日文字符就不会输出。

xeCJK

对于 xeCJK 来说,你得这么写:

\documentclass{article}
\usepackage{xeCJK}
\setCJKmainfont{ipaexm.ttf}
\begin{document}
\LaTeX で日本語を書きましょう!
\end{document}
 将其以 UTF-8 编码保存为 hello-xetex.tex,之后运行 xelatex:
$ xelatex hello-xetex.tex
This is XeTeX, Version 3.14159265-2.6-0.99991 (TeX Live 2014) (preloaded format=xelatex)
 restricted \write18 enabled.
entering extended mode
(./hello-xetex.tex
LaTeX2e <2014/05/01>
Babel <3.9k> and hyphenation patterns for 79 languages loaded.
(/home/norbert/tl/2014/texmf-dist/tex/latex/base/article.cls
Document Class: article 2007/10/19 v1.4h Standard LaTeX document class
(/home/norbert/tl/2014/texmf-dist/tex/latex/base/size10.clo))
(/home/norbert/tl/2014/texmf-dist/tex/xelatex/xecjk/xeCJK.sty
(/home/norbert/tl/2014/texmf-dist/tex/latex/l3kernel/expl3.sty
.....
(./hello-xetex.aux) (/home/norbert/tl/2014/texmf-dist/tex/latex/tipa/t3cmr.fd)
[1] (./hello-xetex.aux) )
Output written on hello-xetex.pdf (1 page).
Transcript written on hello-xetex.log.

直接就能得到 PDF 文档。

ZXjatype

对于 ZXjatype 来说,你得这么写:

\documentclass{article}
\usepackage{zxjatype}
\setjamainfont{ipaexm.ttf}
\begin{document}
\LaTeX で日本語を書きましょう!
\end{document}

pdfLaTeX

接下来,我们看看在 pdfLaTeX 底下怎么使用。pdfTeX 引擎可能是全球范围内使用最广泛的引擎了。这里,我们也将讨论两个宏包的使用方法:Werner Lemberg 的 CJK 宏包和 Takayuki Yato 的 BXcjkjatype

CJK

译注:这里作者用了一个很别扭的方式来构建文档,已改用通常习惯的方式。

\documentclass{article}
\usepackage{CJKutf8}
\begin{document}
\begin{CJK*}{UTF8}{min}
\LaTeX で日本語を書きましょう!
\end{CJK*}
\end{document}
 将其以 UTF-8 编码保存为 hello-cjk.tex,之后运行 pdflatex:
$ pdflatex hello-cjk.tex
This is pdfTeX, Version 3.14159265-2.6-1.40.15 (TeX Live 2014) (preloaded format=pdflatex)
 restricted \write18 enabled.
entering extended mode
(./hello-cjk.tex
LaTeX2e <2014/05/01>
Babel <3.9k> and hyphenation patterns for 79 languages loaded.
(/home/norbert/tl/2014/texmf-dist/tex/latex/base/article.cls
Document Class: article 2007/10/19 v1.4h Standard LaTeX document class
(/home/norbert/tl/2014/texmf-dist/tex/latex/base/size10.clo))
(/home/norbert/tl/2014/texmf-dist/tex/latex/cjk/texinput/CJKutf8.sty
...
t/fonts/type1/wadalab/dmj/dmjkk.pfb></home/norbert/tl/2014/texmf-dist/fonts/typ
e1/wadalab/dmj/dmjsy.pfb>
Output written on hello-cjk.pdf (1 page, 29574 bytes).
Transcript written on hello-cjk.log.

如果你仔细观察的话,你会发现:LaTeX 几个字母后的空距和之前的输出不大一样。尽管代码看起来有些麻烦,不过,如果你只是想在非日文的文档里嵌入一小段日文,这仍然是个不错的方案。

译者注:实际上,用下面的代码,也能得到正确的 CJK-western 空距。这应该是原作者不熟悉 CJK 导致的。

\documentclass{article}
\usepackage{CJKutf8}
\usepackage{CJKspace}
\begin{document}
\begin{CJK*}{UTF8}{min}
\LaTeX{} で日本語を書きましょう!
\end{CJK*}
\end{document}

BXcjkjatype

如果上面的代码看起来十分冗长,那么 BXcjkjatype 则提供了一种更简洁也更好的封装。这里只需要用下面简单的代码就能得到输出了:

\documentclass{article}
\usepackage[whole]{bxcjkjatype}
\begin{document}
\LaTeX で日本語を書きましょう!
\end{document}
输出结果和之前 CJK 方式的结果类似。不过,嵌入的字体和之前有所不同。BXcjkjatype 默认使用 IPAex 字体。使用此方式请注意:不要在文档中使用任何非 ASCII 字符。

LuaLaTeX

LuaTeX 是一个嵌入了 Lua 解释器的新的 TeX 引擎,这使得我们可以使用 Lua 语言来控制和调整许多 TeX 内部的行为。尽管它还不能完全取代 pdfTeX,但是至少拿来输出文档还是可以的。一些日本 TeX 同好为其开发了 LuaTeX-ja 宏包,用以在 LuaTeX 里使用日文。最简示例是这样的:

\documentclass{article}
\usepackage{luatexja}
\begin{document}
\LaTeX で日本語を書きましょう!
\end{document}
 运行 lualatex 之后,你可能要等上不少时间。这是因为第一次运行 LuaLaTeX 的时候,系统需要刷新字体,耐心等待就好。最终在控制台终端上,你大概会得到下面的输出内容:
$ lualatex hello-luatexja.tex
This is LuaTeX, Version beta-0.79.1 (TeX Live 2014) (rev 4971)
 restricted \write18 enabled.
(./hello-luatexja.tex
LaTeX2e <2014/05/01>
Babel <3.9k> and hyphenation patterns for 79 languages loaded.
(/home/norbert/tl/2014/texmf-dist/tex/latex/base/article.cls
Document Class: article 2007/10/19 v1.4h Standard LaTeX document class
(/home/norbert/tl/2014/texmf-dist/tex/latex/base/size10.clo))
(/home/norbert/tl/2014/texmf-dist/tex/luatex/luatexja/luatexja.sty
...
 1923 words of node memory still in use:
   6 hlist, 1 vlist, 3 rule, 3 glue, 10 kern, 1 glyph, 241 attribute, 299 glue_s
pec, 16 attribute_list, 1 write nodes
   avail lists: 1:1,2:888,3:5,4:40,5:4,6:25,7:3,9:12
<</home/norbert/tl/2014/texmf-dist/fonts/type1/public/amsfonts/cm/cmr10.pfb><</h
ome/norbert/tl/2014/texmf-dist/fonts/type1/public/amsfonts/cm/cmr7.pfb>
Output written on hello-luatexja.pdf (1 page, 17058 bytes).
Transcript written on hello-luatexja.log.

输出结果同样取决于你系统里的默认字体,但和之前的截图应该差不多。

总结

文章介绍了在不同 TeX 引擎和宏包下的最简日文示例。如果你能够运行这些示例,那么更复杂的文档你也应该能够运行,你的 TeX 系统完全可以进行日文排版。

不过,仍然还有不少问题需要讨论。比如:字体选择,插图,多语种混排以及非 ASCII 字符的使用。这些我们之后再讨论。

译者续

在 pdfLaTeX 编译的情况下,还有一种排版 CJK 文字的方法。可以使用刘海洋前辈的 zhmCJK宏包。这个宏包因为一些原因暂时没有收录到 TeX Live 中,不过,这系列文章的作者正好是 TeX Live 的开发者之一,我最近正在和他沟通这件事情。

zhmCJK 宏包提供了类似于 xeCJK 宏包的接口,相应的功能也完全类似。因此可以看做是不能使用 XeLaTeX 而必须使用 pdfLaTeX 的情况下的一个替代。对应于文章中 xeCJK 的例子,最简示例是:

\documentclass{article}
\usepackage{zhmCJK}
\setCJKmainfont{ipaexm.ttf}
\begin{document}
\LaTeX{} で日本語を書きましょう!
\end{document}

LaTeX 新手可以将宏包内的文件解压,释放到和你的 .tex 文件同目录下;有经验的 LaTeX 使用者,可以按照宏包文档,将宏包文件放在 TEXMF 中的合适位置,然后刷新 TeX 系统。

另外,正如刘海洋前辈和李清前辈(他们是当前 xeCJK 宏包的维护者)所言,xeCJK 虽然取名如此,但实际上只是对中文的支持比较完善。因此用 xeCJK 来排版日文在细节上还是会有一些问题的,特别是对日文排版规则的处理。此外,原作者提到的 ZXjatype 宏包,实际上是在 xeCJK 基础上再开发的结果。由于 xeCJK 的局限,ZXjatype 也不可避免地会有一些问题。

选自:http://liam0205.me/2014/12/07/ptex-intro-and-tutorial-01/ http://liam0205.me/2014/12/11/ptex-intro-and-tutorial-02/ http://liam0205.me/2014/12/11/ptex-intro-and-tutorial-03/

点赞(0)

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部