Re: [問題] 請問一下有沒有tex哪一版支援日文編排呢??
看板LaTeX (論文排版)作者ChenMeng0518 (Ch'enMeng)時間11年前 (2014/01/01 11:19)推噓0(0推 0噓 0→)留言0則, 0人參與討論串2/2 (看更多)
※ 引述《laicc0225 (laicc)》之銘言:
: 各位tex玩家好....我想問一下怎樣可以排版日文呢??
: 我想以tex的功能應該可以吧...最好是同時能排版日文及中文和英文這三種...
: 需不需要額外抓其他套件呢??
: 我目前在chitex測試是無法顯示出來...但是不會發生error...
: 另外winedt(不確定正確名稱)我這一兩天在適應中...不確定有沒有...
: 所以請版上的人幫忙回答一下我的問題...謝謝....
哎﹐我挖一下墳啊﹐這個問題原 po 和底下的推文都沒有解決﹐我就稍微詳細地說一下
好了。
TeX 本身隻有 8 位(最早是 7 位﹐後來擴展到 8 位)﹐所以原生的 TeX (通常稱為
Knuth TeX)是不能直接支持除掉英文之外的字符的。所以﹐如果想要在 TeX 文檔中輸
出非英文字符﹐就必須做兩件事情﹕
1. 選擇合適的編碼(比如中國大陸地區的 GBK, 中國台灣地區的 Big5)讓 TeX 能讀懂
2. 選擇包含有所需字符的字體
對於非東亞文字﹐這其實也算不上復雜。畢竟拼音文字也就那麼一些字母﹐多少不會超過
2**8=256 個字符。所以對於非東亞文字來說﹐這個工作基本上由 inputenc 等幾個套件
就能解決了。
但是東亞文字太多﹐比如漢語常用字就有三千多﹐遠遠超出了 2**8 的范疇﹐更別說還有
不少不常用的字了。
因此我們陷入了困境﹐而走出困境唯有兩個辦法﹕
1. 讓 TeX 能讀懂更多的字符
2. 把字體文件分為若幹區塊﹐每個區塊隻有 256 個字符﹐再讓 TeX 懂的如何尋找區塊
和區塊中間的字符
Knuth 老爹當時的建議是采用第二個方法(畢竟它不希望自己的 TeX 做改動)﹐當時中
文 TeX 社區使用的也就是這個方法。比如 CCT (中科院張林波)﹐又比如天元(華東
師范大學陳志傑)﹐以及各位可能很熟悉的 CJK (德國人)。
這種解決方案我們用了很多年﹐各位想必對他們也有無數的怨念。弊端是很明顯的﹕
* 可能需要在編譯之前進行預處理
* 一旦編譯出錯﹐出錯信息變得完全不可讀
* 字體分區安裝極為復雜
以上是中文的情況﹐實際上日語韓語泰國語的情況也大致相仿。
CCT 和天元我不熟悉﹐但是 CJK 還有一個並不顯而易見的弊端﹕
CJK 並沒有將編碼和語言區分開來(比如使用 GBK 就是中文簡體﹐使用 Big5 就是中文
正體)﹐這樣一來﹐一旦指定編碼﹐語言也就指定了。於是﹐如果有人像原 Po 那樣希望
同時排版中文和日文﹐CJK 就隻能幹瞪眼了。
Knuth 老爹也不是萬能的﹐這些弊端他並沒有完全預見到──畢竟他不適用這些文字。索
性﹐終於有 TeX 引擎嘗試走第一條路﹐他們是 XeTeX 和 LuaTeX. 這兩個引擎都直接支
持 Unicode 編碼﹐並能夠直接使用系統中的字體文件。於是之前說的那些弊端都消失。
-----------------------
我們回到中日文混排上來
-----------------------
前面說了﹐要讓 TeX 排除東亞文字﹐一是要讓 TeX 能認識相應編碼﹐二是要選擇合適的
字體。編碼問題引擎已經幫我們解決﹐一個 Unicode 編碼能覆蓋所有東亞文字。剩下的
就是解決字體問題。
前文說過﹐XeTeX 和 LuaTeX 都能直接調用系統字體。於是就有人開發了相關套件
* xeCJK for XeTeX
* LuaTeX-ja for LuaTeX
我們能使用這些套件方便地切換字體。於是剩下的工作就是為他們挑選合適的字體了。
簡體中文 Windows 系統下安裝的中易宋體(SimSun.ttf)內就包含有日文字符﹐因此我
們選用這個字體即可(正體中文系統我沒有使用過﹐所以很抱歉我不能給出一個直接的
例子)。
這是 XeTeX + LaTeX + xeCJK 的一個例子﹕
\documentclass{minimal}
\usepackage{xeCJK}
\setCJKmainfont{SimSun}
\begin{document}
這裡是中文。
□□□日本□
\end{document}
【抱歉﹐日語假名貌似顯示不出來】
然而﹐xeCJK 是中國大陸的孫文昌教授開發的(現在的維護者是劉海洋和李清)﹐他們對
日語並不太了解。所以有關日語的禁則、標點壓縮等工作﹐xeCJK 做得並不太好。所以﹐
如果要排版日語﹐我更推薦日本 TeX 社區的 LuaTeX-ja. 不過因為這個套件是基於
LuaTeX 的﹐而 LuaTeX 在 Windows 系統下運行非常緩慢(字體太多的緣故)﹐所以請慎
重使用。
\documentclass{minimal}
\usepackage{luatexja-fontspec}
\setmainjfont{SimSun}
\begin{document}
這裡是中文。
□□□日本□
\end{document}
以上兩份代碼保存為 UTF-8 編碼之後﹐分別使用 XeLaTeX 和 LuaLaTeX 編譯即可得到
結果。
----------------------
再來一個題外話
----------------------
中國和日本﹐很多古籍都是使用豎排進行書寫的。TeX 對此的支持並不好。解決這個問題
的方法同樣有兩個
1. 選擇一個直接支持豎排的引擎(比如日本的 e-upTeX)
2. 構造一個合適的套件
我在 XeTeX + LaTeX + xeCJK 的支持下﹐有過豎排的一些經驗﹐並且實現了所謂割注。
然而﹐這一技術還不成熟﹐所以如果有感興趣的同好﹐我們另開帖子交流吧。
: )
--
來自萌氣四溢的 M 君~
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 183.217.24.14
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
LaTeX 近期熱門文章
PTT數位生活區 即時熱門文章