臨時記錄一下XeTeX的中文解決方案。一些包的文檔只是走馬觀花得到的解決方法,所以可能有諸多紕漏。
另個人還是比較看好LuaTeX,但是在里邊鼓搗中文還是一團糟,等探索一下再回來補充。
我使用的包是xeCJK, 推薦的調用方法是
\usepackage[LocalConfig=name]{xeCJK}
其中的LocalConfig=name表示在搜索路徑中尋找名為"xeCJK-name.cfg"的配置文件。這樣就可以復用關於中文自體的配置了。
在xeCJK中寫有:
使用TeX Live的用戶, 可以新建下列目錄, 然后再把xeCJK-<name>.cfg放在里面:
texlive/texmf-local/tex/xelatex/xecjk
最后還需要在命令行下執行mktexlsr,刷新文件名數據庫以便TeX系統能找到它。
問題在於在類Linux系統中, 一般不會把文件寫到~以外的地方的。關於在~應該放在那里,現在能從安裝sty的guide里得到點提示。我直接把相關的命令扔在這里好了,有時間搞清楚了再整理~ 可以看出來的是TeX Live有些特別的環境變量。
kpsewhich -var-value=TEXMFHOME texhash `kpsewhich -var-value=TEXMFHOME`
xeCJK的文檔有幾個奇怪的地方:復制中文出來的時候是亂碼。雖然這間接實現了保護內容的作用,但是鑒於復制英文沒有問題這顯然是個bug,況且也有違開源精神,(⊙_⊙)有時間再看看神馬情況、
OK 回歸正題。xeCJK設置字體有兩個常用的命令:
\setCJKmainfont{KaiTi} \newCJKfontfamily[hei]\heiti{SimHei}
詳細解釋看文檔, 簡要的說明是第一行設定默認的CJK字體, 第二行實際上定義了一個新的 \heiti, 可以改變當前環境的字體為SimHei。兩點說明:
為了實現\textbf \emph, 對應的字體family要有Bold & Italic face, 但是很多中文字體實際上是沒有這些face的,那么xeCJK提供了兩個選項
AutoFakeBold=true, AutoFakeSlant=true
來實現一個“偽”粗體和斜體。
但是中文環境中用該字體加粗和斜體是很難看的(至少我這么認為)。通常的做法是用黑體表示“加粗”來實現“重點”的作用。那么其實可以這樣:
\setCJKmainfont[BoldFont=SimHei]{KaiTi}
OK 相信不用解釋了。
另外提到的第二個命令,個人實際上不推薦。LaTeX的思想更多的是按邏輯組織文檔而不是dive into design,所以我一般會盡量避免在文檔中出現直接控制排版的語句。遇到這樣的需要我會首先考慮是不是我的文檔組織或者邏輯的問題。