將使用 CJK 的範本無痛轉移到 XeTeX

上一篇文章中,簡單的介紹了 XeTeX 使用中文字型的優點,但是它也不是沒有缺點的,在這篇文章中有提到,不過目前已經有套件可以彌補這些不足了,也就是這篇文章要介紹的 xeCJK。

透過 xeCJK 處理原本 CJK 的部份

簡單來說,xeCJK 就是加強版的 xCJK (相關介紹),透過這個套件,我們可以幾乎不用去更動之前用 CJK 寫的程式碼,只要在內文之前宣告好你要的字型,其餘的全部都交給它幫你搞定!

現在讓我們以台大論文範本為例,範本可以從這裡下載到,同時也有環境設定的教學。

1. 編碼問題

必須確保編輯器是使用 UTF8 without BOM 的編碼,並且在 thesis.tex 的開頭前兩行宣告這是 XeLatex 的程式以及使用 UTF8 編碼:

%!TEX TS-program = xelatex %!TEX encoding = UTF-8 Unicode
### 2. 修改 thesis.tex

3. 把註解拿掉以使用 bibtex

BibTeX 是用來管理參考文獻的工具,預設範本中把這個部分註解掉了,所以現在我們得把這註解拿掉:

80 81
% input your reference here \bibliography{thesis}
接著我們可以到 thesis.bib 看我們們要引用的是哪一篇,假設我們現在要引用的文獻是「… JPEG2000 …」: [![](http://www.hitripod.com/blog/content/images/2011/04/vim-2-1.jpg "vim-2-1")](http://www.hitripod.com/blog/content/images/2011/04/vim-2-1.jpg)

接著把紅色那部分字串複製下來,在內文中透過 \cite 引用該文章:

4. 透過 xeCJK 分開宣告中英文字型

在範本中, ntu.sty 裡面定義了行距、字體大小等性質,而裡面會用到一些定義在 ntuvars.tex 的變數,例如:學校、系級。我們可以發現其中的變數都是以 CJK 去宣告的:

63 64 65 66 67 68 69 70 71
\[renewcommand](http://www.golatex.de/wiki/index.php?title=%5Crenewcommand){\[maketitle](http://www.golatex.de/wiki/index.php?title=%5Cmaketitle)}{% {{{ \begin{CJK}{UTF8}{kai} \CJKhorz \begin{titlepage} \begin{center} \fontsize{18}{27}\selectfont \[vspace](http://www.golatex.de/wiki/index.php?title=%5Cvspace){1cm} \theuniversityCH\thecollageCH\theinstituteCH\\ \thethesisCH
所以我們就在這之前宣告我們所需要的中英文字型,其他就交給 xeCJK 幫我們處理了:
17 18 19 20
\RequirePackage{fontspec} \RequirePackage{xeCJK} \setmainfont{Times New Roman}% Default main font \setCJKmainfont{BiauKai}% Default CJK font
### 5. Makefile 編譯!

如此一來我們就不用處理惱人的字型問題,直接編譯就可以順利的產生最後的 thesis.pdf 檔案了:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
MAIN=thesis DRAFT=draft

TEX=$(wildcard *.tex)
BIB=$(wildcard *.bib)
STY=$(wildcard *.sty)

.SUFFIXES: .tex

all: $(MAIN).pdf
draft: $(DRAFT).pdf

thesis.bib.orig: thesis.bib
sed -i ".orig" 's/^title = {([^{}])}/title = {{\1}}/' $<
sed -i ".orig" 's/^title = {LLVM(.
)}/title = {{LLVM\1}}/' $<

$(MAIN).pdf: $(TEX) $(BIB) $(STY) thesis.bib.orig
xelatex $(MAIN)
bibtex $(MAIN)
xelatex $(MAIN)
xelatex $(MAIN)

dvips -t a4paper -f < $(MAIN).dvi > $(MAIN).ps

ps2pdf $(MAIN).ps $@

完整的範本請自此下載