日文 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 系统介绍 - 最简示例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机视觉测试数据集 dataset
- 下一篇: 虽然不能取代排版之王,但 Word 也能