本文为译文,原文载于这里。欢迎关注本系列的文章。

上一篇文章(译文)我们探讨了关于字符集和编码的一些细节,今次我们继续讨论如何在 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」这几个字母里并没有日文字,所以文章的正文部分看起来会是这个样子:

demo

1
2
3
\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 就好了。

demo

1
2
3
4
\documentclass{article}
\begin{document}
\LaTeX で日本語を書きましょう!
\end{document}

以正确的编码将其保存为 hello-ptex.tex,然后运行 platex,UTF-8 编码的控制台会有类似于如下的输出:

demo

1
2
3
4
5
6
7
8
9
10
11
12
13
$ 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 文件。

因此,我们输入命令

demo

1
2
3
4
$ dvipdfmx hello-ptex.dvi
hello-ptex.dvi -> hello-ptex.pdf
[1]
7636 bytes written

接下来,使用 PDF 阅读器打开得到的 PDF 文档,效果类似于下:

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

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

demo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$ 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 来说,你得这么写:

demo

1
2
3
4
5
6
\documentclass{article}
\usepackage{xeCJK}
\setCJKmainfont{ipaexm.ttf}
\begin{document}
\LaTeX で日本語を書きましょう!
\end{document}

将其以 UTF-8 编码保存为 hello-xetex.tex,之后运行 xelatex:

demo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$ 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 来说,你得这么写:

demo

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

pdfLaTeX

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

CJK

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

demo

1
2
3
4
5
6
7
\documentclass{article}
\usepackage{CJKutf8}
\begin{document}
\begin{CJK*}{UTF8}{min}
\LaTeX で日本語を書きましょう!
\end{CJK*}
\end{document}

将其以 UTF-8 编码保存为 hello-cjk.tex,之后运行 pdflatex:

demo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ 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 导致的。

demo

1
2
3
4
5
6
7
8
\documentclass{article}
\usepackage{CJKutf8}
\usepackage{CJKspace}
\begin{document}
\begin{CJK*}{UTF8}{min}
\LaTeX{} で日本語を書きましょう!
\end{CJK*}
\end{document}

BXcjkjatype

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

demo

1
2
3
4
5
\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 里使用日文。最简示例是这样的:

demo

1
2
3
4
5
\documentclass{article}
\usepackage{luatexja}
\begin{document}
\LaTeX で日本語を書きましょう!
\end{document}

运行 lualatex 之后,你可能要等上不少时间。这是因为第一次运行 LuaLaTeX 的时候,系统需要刷新字体,耐心等待就好。最终在控制台终端上,你大概会得到下面的输出内容:

demo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$ 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 的例子,最简示例是:

demo

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

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

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

from: http://liam0205.me/2014/12/11/ptex-intro-and-tutorial-03/

日文 LaTeX 系统介绍 - 最简示例相关推荐

  1. LaTeX入门第二集!LaTeX的几个示例!

    LaTeX入门第二集!LaTeX的几个示例! 一.基本入门教程视频 latex中文教程-15集从入门到精通包含各种latex操作 二.几个示例 LaTeX源文件的基本结构 % 导言区 \documen ...

  2. 01、Flutter FFI 最简示例

    Flutter FFI 学习笔记系列 <Flutter FFI 最简示例> <Flutter FFI 基础数据类型> <Flutter FFI 函数> <Fl ...

  3. DFT Compiler极简示例1

    DFT Compiler极简示例1 Test Protocol Example 1 电路结构 RTL 脚本 结果 (1)如果不定义in3为常量 (2)没有建立test协议之前,SI/SE是不知道如何连 ...

  4. LaTex中英文简历代码示例

    1. 英文简历:  1) 网上较好的英文简历模板  2)较简洁的英文简历模板 自己主要根据第2)个模板制作了一个更为简洁的英文简历, 效果如下图: 2. 中文简历: 中文简历是根据一个师兄的简历改变的 ...

  5. mmdetection 学习教程(一)mmdetection安装、最简示例、最简分析

    目录 一.mmdetection安装 二.mmdetection最简单示例 三.mmdetection demo最简单分析 easy_demo.py的github下载链接欢迎star 参考:mmdet ...

  6. Django环境的搭建以及最简示例

    一.环境的搭建 先安装pip yum install python-pip 安装失败: 安装epel扩展源 yum install epel-release 在安装pip 再利用pip安装django ...

  7. LaTeX排版工具使用

    专业的论文,都是用Latex.CTex等相关的工具.那么,用word写论文,缺点在哪? latex 写的东西,最终要编译成pdf格式的. 里面的格式,尤其是数学类符号等,比较漂亮.这是word不能比的 ...

  8. latex中怎么设置每一行文字都对齐_排版系列教程 | LaTeX,为学术论文排版而生【浮动体篇】...

    今天,迎来LaTeX系列的第四篇[浮动体篇].LaTeX作为最优秀的排版语言,非常值得大家学习,对LaTeX感兴趣朋友可以点个关注,后面持续更新! 关于LaTeX,今天和大家多唠叨一点. 与主流的编程 ...

  9. LaTeX 数学公式大全

    文章目录 1 数学公式的插入 2 声调 / 变音符号 3 标准函数 4 界限 5 投射 6 微分及导数 7 类字母符号及常数 8 模算数 9 根号 10 运算符 11 集合 12 关系符号 13 几何 ...

最新文章

  1. django正反向查询
  2. PCL点云特征描述与提取(3)
  3. 推荐一款常用的IDE插件,越用越喜欢
  4. 打开深度学习的黑盒,详解神经网络可解释性
  5. python学习之--安装IDE(eclipse+pydev)
  6. java 注册回调_java 实现回调代码实例
  7. 千元平板电脑排行榜_最值得买的平板电脑推荐-最佳平板电脑品牌排行榜【2020年10月】...
  8. python如何判断列表是否为空_Python中如何检查字符串/列表是否为空
  9. 【API进阶之路】因为不会创建云服务器,我被实习生摆了一道
  10. CentOS7虚拟机优化
  11. java类和对象的基础(笔记)
  12. Pytorch torch.nonzero()的简单用法
  13. 提取特征点的方式,opencv2.x和opencv3.x的区别
  14. 关于私募基金高水位业绩报酬计提的N种方式!
  15. 深度装机大师一键重装_电脑重装系统步骤
  16. ip软件在生活中器到哪些作用呢?
  17. 如何用getevent查看C-TouchPanel上报数据?
  18. 深度学习·理论篇(2023版)·第001篇快速了解人工智能与Pytorch:机器/表示/深度学习定义+端到端的学习+神经网络在计算机视觉应用+深度学习的技术蓝图
  19. XCTF_MOBILE15_人民的名义-抓捕赵德汉1-200
  20. 西南交通大学计算机考研资料汇总

热门文章

  1. TensorFlow中文社区论坛 发布上线!
  2. 数据意识上的“代沟”
  3. 卷积神经网络在自然语言处理的应用
  4. android 蓝牙耳机 判断,Android实现蓝牙耳机连接
  5. 深入理解分布式技术 - Dubbo vs Spring Cloud
  6. Android获取SDK的版本信息
  7. 爬虫学习笔记(二十二)—— Mitmproxy
  8. 面试 -- Java基础(一)
  9. python导入模块的变量_python 环境变量和import模块导入方法(详解)
  10. git 内网搭建_搭建GitLab(Github) 简易教程