日文 LaTeX 系统介绍 - 最简示例
本文为译文,原文载于这里。欢迎关注本系列的文章。
上一篇文章(译文)我们探讨了关于字符集和编码的一些细节,今次我们继续讨论如何在 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 系统介绍 - 最简示例相关推荐
- LaTeX入门第二集!LaTeX的几个示例!
LaTeX入门第二集!LaTeX的几个示例! 一.基本入门教程视频 latex中文教程-15集从入门到精通包含各种latex操作 二.几个示例 LaTeX源文件的基本结构 % 导言区 \documen ...
- 01、Flutter FFI 最简示例
Flutter FFI 学习笔记系列 <Flutter FFI 最简示例> <Flutter FFI 基础数据类型> <Flutter FFI 函数> <Fl ...
- DFT Compiler极简示例1
DFT Compiler极简示例1 Test Protocol Example 1 电路结构 RTL 脚本 结果 (1)如果不定义in3为常量 (2)没有建立test协议之前,SI/SE是不知道如何连 ...
- LaTex中英文简历代码示例
1. 英文简历: 1) 网上较好的英文简历模板 2)较简洁的英文简历模板 自己主要根据第2)个模板制作了一个更为简洁的英文简历, 效果如下图: 2. 中文简历: 中文简历是根据一个师兄的简历改变的 ...
- mmdetection 学习教程(一)mmdetection安装、最简示例、最简分析
目录 一.mmdetection安装 二.mmdetection最简单示例 三.mmdetection demo最简单分析 easy_demo.py的github下载链接欢迎star 参考:mmdet ...
- Django环境的搭建以及最简示例
一.环境的搭建 先安装pip yum install python-pip 安装失败: 安装epel扩展源 yum install epel-release 在安装pip 再利用pip安装django ...
- LaTeX排版工具使用
专业的论文,都是用Latex.CTex等相关的工具.那么,用word写论文,缺点在哪? latex 写的东西,最终要编译成pdf格式的. 里面的格式,尤其是数学类符号等,比较漂亮.这是word不能比的 ...
- latex中怎么设置每一行文字都对齐_排版系列教程 | LaTeX,为学术论文排版而生【浮动体篇】...
今天,迎来LaTeX系列的第四篇[浮动体篇].LaTeX作为最优秀的排版语言,非常值得大家学习,对LaTeX感兴趣朋友可以点个关注,后面持续更新! 关于LaTeX,今天和大家多唠叨一点. 与主流的编程 ...
- LaTeX 数学公式大全
文章目录 1 数学公式的插入 2 声调 / 变音符号 3 标准函数 4 界限 5 投射 6 微分及导数 7 类字母符号及常数 8 模算数 9 根号 10 运算符 11 集合 12 关系符号 13 几何 ...
最新文章
- django正反向查询
- PCL点云特征描述与提取(3)
- 推荐一款常用的IDE插件,越用越喜欢
- 打开深度学习的黑盒,详解神经网络可解释性
- python学习之--安装IDE(eclipse+pydev)
- java 注册回调_java 实现回调代码实例
- 千元平板电脑排行榜_最值得买的平板电脑推荐-最佳平板电脑品牌排行榜【2020年10月】...
- python如何判断列表是否为空_Python中如何检查字符串/列表是否为空
- 【API进阶之路】因为不会创建云服务器,我被实习生摆了一道
- CentOS7虚拟机优化
- java类和对象的基础(笔记)
- Pytorch torch.nonzero()的简单用法
- 提取特征点的方式,opencv2.x和opencv3.x的区别
- 关于私募基金高水位业绩报酬计提的N种方式!
- 深度装机大师一键重装_电脑重装系统步骤
- ip软件在生活中器到哪些作用呢?
- 如何用getevent查看C-TouchPanel上报数据?
- 深度学习·理论篇(2023版)·第001篇快速了解人工智能与Pytorch:机器/表示/深度学习定义+端到端的学习+神经网络在计算机视觉应用+深度学习的技术蓝图
- XCTF_MOBILE15_人民的名义-抓捕赵德汉1-200
- 西南交通大学计算机考研资料汇总
热门文章
- TensorFlow中文社区论坛 发布上线!
- 数据意识上的“代沟”
- 卷积神经网络在自然语言处理的应用
- android 蓝牙耳机 判断,Android实现蓝牙耳机连接
- 深入理解分布式技术 - Dubbo vs Spring Cloud
- Android获取SDK的版本信息
- 爬虫学习笔记(二十二)—— Mitmproxy
- 面试 -- Java基础(一)
- python导入模块的变量_python 环境变量和import模块导入方法(详解)
- git 内网搭建_搭建GitLab(Github) 简易教程