3. ucs 巨集套件的使用

這是由 Dominique Unruh 所發展的 LaTeX 巨集套件。這個巨集套件是用於 UTF-8 編碼的 LaTeX 文稿的處理,目前還在發展中,但一般情況已經可以拿來實用了。這樣不管是中、日、韓文的一些惱人問題,就可以因使用 UTF-8 編碼而獲得初步的解決。

3.1 安裝

最新版本的 ucs package 可以先參考他的網頁的說明:

http://www.unruh.de/DniQ/latex/unicode/

這其實不算是什麼安裝,只是把壓縮檔下載後,找個目錄把他解壓縮罷了,這樣雖然很不正式,但對於不熟悉 LaTeX 系統結構的朋友,無疑是最方便簡單的方法。

http://www.unruh.de/DniQ/latex/unicode/unicode.tgz

下載後在 kpathsea 函式庫找得到的路徑下解開,就算是安裝完成了:

cd /usr/share/texmf/tex/latex
[Windows 系統,請找相對的路徑]
tar zxvf unicode.tgz
[如果下載的是 zip 壓縮檔的話:unzip unicode.zip]
texhash 或 mktexlsr
[在 MikTeX 的話,改執行 initexmf -u]

但我們還沒有字型可以用,要在下一節的字型處理完成後才能真正拿來實際使用。

3.2 多國語文字型處理

我們實際上並沒有 free 的 Unicode 全字型,這裡使用 Bitstream 公司以往供人自由下載的 Cyberbit.ttf 為例來說明,使用時請注意這個字型的使用授權說明:

ftp://ftp.netscape.com/pub/communicator/extras/fonts/windows/
ftp://cle.linux.org.tw/pub2/fonts/ttf/unicode/bitstream/

字型下載後置於以下的目錄下(請依 TeX 安裝目錄及 OS 調整):

/usr/share/texmf/fonts/truetype/CJK

並把他改成小寫字母。對於這個字型的處理,我們主要是要產生:

*.tfm TeX 系統的字型描述資料。
*.enc PDFLaTeX 取字時的字型編碼對應資料。
*.map PDFLaTeX 取字時的對照表。

為免解釋上的煩瑣,這裡使用 sh script 來產生,也可以減少打字時的錯誤:

http://edt1023.sayya.org/tex/ipeucs/cyberb.sh

請注意,他只針對 cyberbit.ttf 處理。如果是在 Windows 系統的話,可能會需要 unxtools3.1來處理(並未經過測試,有可能需要小修改)。而且不管是哪一種 OS,他需要 ttf2tfm 這個工具。這個處理已沿用 CJK package 及 DVIPDFM$ x$3.2 的字型使用名稱,因此在這些環境、工具裡頭也可以使用。他的使用很簡單,只要把 cyberb.shcyberbit.ttf 置於同一個目錄下,執行 cyberb.sh 即可,執行完畢會產生 tfmenc 兩個子目錄和一個 cyberb.map 檔,他要置放的目錄如下(如無此目錄請自行建立):

tfm /usr/share/texmf/fonts/tfm/CJK/cyberb
enc /usr/share/texmf/pdftex/enc
cyberb.map /usr/share/texmf/pdftex/config/cyberb.map

最後在 pdftex.cfg 中加入一行:

map +cyberb.map

3.3 和 Ipe 的配合

由於 Ipe 使用的是 PDFLaTeX,我們現在想直接就使用 TTF 字型,這樣就不必另外去製作 Type1 字型,多佔硬碟空間。因此請先下載這個 macro:

http://ipe.compgeom.org/ttfucs.sty

把他置於:

/usr/share/texmf/tex/latex/ucs

目錄下即可,然後執行 texhash 或 Windows 系統的話,執行 initexmf -u 就大功告成了!這樣 Ipe 的多國語文就可以運作了。當然,這些 macro 必需引用才能正常運作,在 Ipe 可以在 [Edit][Document properties],這會跳出一個視窗,可以填入 pdf 檔的一些檔頭資料及 LaTeX preamble 區要用到的 macro。這裡我們要輸入的是:

\usepackage{ucs}
\usepackage[utf8]{inputenc}
\usepackage{ttfucs}
\DeclareTruetypeFont{cyberb}

請參考圖 3.1。這樣在 Ipe 裡頭輸入 CJK 文字,在輸出 eps/pdf 檔時就會自動呼叫 pdflatex 來編譯排版,非 ASCII 的字元就直接嵌入 cyberbit.ttf 字型。

圖: 輸入 LaTeX preamble 資料
Image ipe-doc-prop

這裡我們看一個 Ipe 編輯的實際例子,請參考圖 3.2,輸出的 pdf 檔,請參考:

圖: 實際的例子
Image ipe

http://edt1023.sayya.org/tex/ipeucs/ipe-cjk.pdf

3.4 一般 LaTeX 文稿使用

以上各節,除了安裝及輸入 LaTeX preamble 區的一些必要資訊外,完全沒有直接接觸到 LaTeX 的運作,那麼我們一般使用 LaTeX 文稿,也可以利用到嗎?答案是肯定的。這時我們將無需其他的多國語文系統的幫助,可以依一般英文語系的 LaTeX 文稿及編譯方式來運作。

我們來看一個實際 LaTeX 文稿的例子:

\includegraphics{UTF8-ucs-verb.eps}

他的編譯方法就和一般的英文語系的 LaTeX 文稿一樣:

latex UTF8-ucs.tex
dvipdfmx UTF8-ucs.dvi
或使用 pdflatex
pdflatex UTF8-ucs.tex

他編譯後的 pdf 輸出檔及原始文稿請參考:

http://edt1023.sayya.org/tex/ipeucs/UTF8-ucs.tex
http://edt1023.sayya.org/tex/ipeucs/UTF8-ucs.pdf

3.5CJK 巨集系統的配合

那麼,這些字型也可以用在 CJK package 嗎?可以的。由於製作字型描述檔時就使用了 LaTeX CJK 的預設命名方式,而 DVIPDFM$ x$ 也是使用相同的命名方式,在他的 cid-x.map 檔裡頭就已經預設設定好了,所以,可以直接使用。這也是字型命名統一(標準化、規格化)的最大好處,其他同類的工具也可以直接引用。

這裡,我們舉一個 LaTeX CJK 的例子:

\includegraphics{cjk-utf8-verb.eps}

雖然我們使用的是 CJK 環境,但由於這是 UTF-8 編碼的文稿,我們不能使用 bg5latex 來編譯,而是和一般英文語系的文稿一樣的編譯:

latex cjk-utf8.tex
dvipdfmx cjk-utf8.dvi
或者使用 pdflatex 一次完成
pdflatex cjk-utf8.tex

由於我們並沒有製作 Type1 字型,而 dvips 目前尚不支援 TTF 字型,所以這裡我們無法使用 dvips 去編譯。

如果是使用 CJK package 的話,他有注意到 moving arguments 的問題(請參考第 4 章,第 4.2 節的解釋),所以比較不容易發生這類問題。另外,使用 pdflatexdvipdfmx 的不同在於是否使用 subfont 的機制,dvipdfmx 會使用 subfont 的機制,有用到的字才會嵌入,因此編譯出來的 pdf 檔會比較小,而且 dvipdfmx 製作出來的 pdf 檔有索引的機制。但目前 Ipe 則只能和 pdflatex 配合使用。編譯好的 pdf 檔及其原始文稿可以在以下網站下載:

http://edt1023.sayya.org/tex/ipeucs/cjk-utf8.tex
http://edt1023.sayya.org/tex/ipeucs/cjk-utf8.pdf

Compiled by Edward G.J. Lee (2004-05-06)