XeTeX 快速上手
這一頁主要記錄如何使用 XeTeX 排出中文 pdf 文件。XeTeX 改良 TeX 的核心,讓它以 unicode 字元為單位進行排版,同時它直接取用系統中的字型使用,你的 GUI 能用哪些字型,XeTeX 也「立即」可用,不需要額外安裝字型的手續。在 Linux/FreeBSD 上,XeTeX 使用 fontconfig 來取用系統字型,而這也是近來 X window 上最方便的字型管理系統。因為使用了 unicode,除了中文以外,理論上其它各式各樣的語言都可以交給 XeTeX 處理。
1. 安裝
不要自找麻煩,最方便的做法是安裝 Tex Live 2007,裡面就有附上 XeTeX。在 Windows 上已經有圖形化的安裝程式,選取 “collection-xetex” 就會一併安裝 XeTeX。
2. 使用方法
使用 XeTeX 的方式相當簡單,首先是 LaTeX 文件:
\documentclass{article}
\XeTeXlinebreaklocale "zh"
\XeTeXlinebreakskip = 0pt plus 1pt
\font\ming="新細明體" at 10pt
\begin{document}
\ming 中文測試
\end{document}
然後對這個檔執行 xelatex 就可以產生中文 pdf 文件了,而且使用新細明體作為文件字型。其中的 \XeTeXlinebreaklocale 是表示 XeTeX 應該以中文的方式斷行,因為一般英文字只會在空白處斷行,而中文字除了避頭避尾以外可以斷在任何地方,因此要指定 XeTeX 使用中文方式斷行。後面的 \XeTeXlinebreakskip 則是讓 XeTeX 可以在字元間加入 0pt~1pt 的彈性間距,這樣才能排出左右切齊的文件。
3. 使用 fontspec 設定字型
雖然 XeTeX 內建選選字型的指令,但要設定全文使用的字型、或是使用某些字型的特殊功能 (如連字符 ligature) 時,使用 fontspec package 是比較方便的做法。
上述的例子改用 fontspec 後如下:
\documentclass{article}
\XeTeXlinebreaklocale "zh"
\XeTeXlinebreakskip = 0pt plus 1pt
\usepackage{fontspec}
\setmainfont{PMingLiU}
\begin{document}
中文測試
\end{document}
注意我們改用英文字型名稱,原因後述。fontspec 提供一些更方便的字型設定指令,常用的如下:
- \fontspec
- 選用某一個字型。
- \setmainfont
- 設定文件的預設字型,這也是當使用者下 \rmfamily 指令時會選用的字型。
- \setsansfont, \setmonofont
- 同上,分別設定 \sffamily 與 \ttfamily 所對應的字型。
- \newfontfamily
- 定義新的字型,這樣使用新字型時就不需要用 \fontspec,就像 \rmfamily 那樣寫自己指定的名稱即可。
以下是一個小範例:
\documentclass{article}
\XeTeXlinebreaklocale "zh"
\XeTeXlinebreakskip = 0pt plus 1pt
\usepackage{fontspec}
\setmainfont{PMingLiU}
\setsansfont{DFPHeiMedium-UN}
\newfontfamily\ming{DFPMingLight-UN}
\begin{document}
中文測試,這些字使用細明體。 \\
{\sffamily 這些字會改用華康中黑體} \\
{\ming 華康細明體}
\end{document}
fontspec 還有許多特異功能,比如說加入字體變化或連字符 (ligature),詳細的情況請參考文件。此外網路上似乎很難找到說明 XeTeX 的網頁,請直接參考安裝時附上的 pdf 文件。
4. 已知問題
雖然 XeTeX 看起來相當完美,但和 CJK 比起來,它還有一些小問題沒解決:
- 目前沒辦法對中英文設定不同的字型。似乎是因為多數中文字型的使用者不關心英文部份的樣子,許多中文字型中的英文字只能說是「可以辦識」,離美觀還差了段距離。另一方面,就算中英文字型可以分開設定,合在一起看時往往會有英文字過高或過低的現象,因為它們畢竟是不同的字型。這點在 CJK 中有個 hacking solution (\CJKhdef),不知道未來 XeTeX 是否會提供另一種解法。
- CJK 中有個 CJK* environment,讓原始檔內的中文文字可以在任意處斷行而不至於多出一個空白。不過 XeTeX 似乎沒有對應的功能,因此斷行處會多出一個空白。暫時的解決方法是不要斷行,或是加上百分號把斷行註解掉。
- 目前 XeTeX 使用改版過的 dvipdfmx (稱為 xdvipdfmx) 來產生 pdf,不幸的是,目前無法產生中文 bookmarks (就是打開 pdf 時,在 Acrobat Reader 左邊顯示的文件結構)。這部份應該是沒有太大的技術困難,最近的 CJK 也提供這個功能,因此相信不久後的版本就可以修正這個問題。
- 加上底線的文字無法正確斷行。CJK 中提供 \CJKunderline 來解決這個問題。
另外雖然 \setmainfont 等指令可以接受中文字型名稱,但處理時似乎有一些問題,當字型名稱重覆時會出現錯誤:
\setmainfont{細明體}
\setmonofont{細明體}
這樣會出現重覆定義的錯誤訊息:
! LaTeX Error: Command \c@zf@famc@細明體 already defined.
Or name \end... illegal, see p.192 of the manual.
改用英文名稱 (PMingLiU) 就不會出現這項錯誤。
Comments
page revision: 10, last edited: 05 Oct 2009 10:17
Post preview:
Close preview