2007年1月26日

CJK-LaTeX with UTF-8 on Gentoo

這是在 Gentoo 上和 CJK LaTeX with UTF-8 奮戰多時的記錄,有需要的人可以參考參考。

cjk-latex 環境的安裝:

這都有現成的 ebuild 檔可以透過 portage 加以管理,
  1. tetex 3.0_p1_r3: TeX 的本體套件,目前 Gentoo 在各硬體平台上應該都被標記為 Masked 的,請自行解除限制後安裝起來。
  2. app-text/dvipdfmx 20050201: 用於將 .dvi 檔轉成 .pdf 檔時使用。這個版本也是 Masked 的,請自行解除限制後安裝起來。
  3. cjk-latex 4.7.0: 中日韓 LaTeX 的支援套件,日前 Gentoo 上暫時沒有此版本的 ebuild 檔,不過在 Gentoo bugzilla 上有個 4.6.0 版的 ebuild, 請直接下載並更名成 cjk-latex-4.7.0.ebuild 後透過 PORTDIR_OVERLAY 方式加以安裝。安裝前請先下載 ftp://ftp.ctan.org/tex-archive/fonts/CJK.tar.gz 字型檔並改名為 cjk-4.7.0-fonts.tar.gz 後放到 /usr/portage/distfiles 下再開始 emerge 即可完成安裝動作(如果有錯誤發生時,請檢查下載的安裝檔案大小是否正確。(若已下載 cjk-4.5.2-fonts.tar.gz 時則可以直接更名即可)
    1. cjk-4.7.0-doc.tar.gz: 2113101 bytes
    2. cjk-4.7.0.tar.gz: 535037 bytes

中文字型的支援準備:

  1. 中文字碼對應表:有兩個套件可以提供此對應表
    1. app-text/acroread-7.0.8
    2. virtual/ghostscript: 不管是 app-text/ghostscript-esp 還是 app-text/ghostscript-gpl 都可以。
  2. 中文 TrueType 字型安裝:嗯,反正想用那個字型請隨意,只要是 TrueType 就好(我不知道 Type1 字型要怎麼裝… )。此處以 media-fonts/cjkuni-fonts 作為範例,它會安裝 ukai 及 uming 兩種字體。
  3. 中文字型資訊檔製作工具:mktfm.shttf2tfm ( 請選擇符合硬體架構的版本)。mktfm.sh 放在預定要製作字型資料的目錄(假設為 $WORKPATH)下,ttf2tfm 要放在 $PATH 下。
  4. Unicode.sfd 對照檔:[Cjk] full Unicode support added,注意那個下載的檔案雖然檔名叫 Unicode.sfd.obj 但實際上應該是 Unicode.sfd.bz2 ,用 bunzip2 解開後放到 mktfm.sh 同一目錄下。

中文字型的配置程序:

  1. 以 root 身份設定以下環境變數並建立相關目錄(※請注意,這是針 tetex 3 的設定):
    1. TEXMFLOCAL=/usr/local/share/texmf
    2. TEXMFFONT=$TEXMFLOCAL/fonts/truetype && mkdir -p $TEXMFFONT
    3. TEXMFTFM=$TEXMFLOCAL/fonts/tfm && mkdir -p $TEXMFTFM
    4. TEXMFENC=$TEXMFLOCAL/fonts/enc && mkdir -p $TEXMFENC
    5. TEXMFSFD=$TEXMFLOCAL/fonts/sfd && mkdir -p $TEXMFSFD
    6. TEXMFDVIPDFM=$TEXMFLOCAL/fonts/map/dvipdfm && mkdir -p $TEXMFDVIPDFM
    7. TEXMFUTF8FD=$TEXMFLOCAL/tex/latex/cjk-latex/UTF8 && mkdir -p $TEXMFUTF8FD
  2. 將 Unicode.sfd 搬移到 $TEXMFSFD 目錄下
    mv $WORKPATH/Unicode.sfd $TEXMFSFD
    在製作字型資訊時也需要這個 Unicode.sfd 檔,所以另行建個檔案連結到工作目錄下
    ln -s $TEXMFSFD/Unicode.sfd $WORKPATH/Unicode.sfd
  3. 建立字型聯結以便製作字型資訊相關檔案
    ln -s /usr/share/fonts/cjkuni-fonts/ukai.ttf $WORKPATH/ukai.ttf
  4. 到 $WORKPATH 下執行 mktfm.sh 以便建立 Unicode 環境下所需的 *.tfm 、*.enc 、*.fd 及 cid-x.map.append 等相關檔案
    cd $WORKPATH && ./mktfm.sh ukai.ttf ukai Unicode
  5. 在 $TEXMFTFM 下建立一個存放 ukai 字型資訊的目錄,其中 CJK 只是用來表示中日韓字型存放區
    mkdir -p $TEXMFTFM/CJK/ukai
  6. 將 *.tfm 檔全部搬移到 $TEXMFTFM/CJK/ukai 中
    mv $WORKPATH/*.tfm $TEXMFTFM/CJK/ukai
  7. 在 $TEXMFENC 下建立一個存放 ukai 字型資訊的目錄,其中 CJK 只是用來表示中日韓字型存放區
    mkdir -p $TEXMFENC/CJK/ukai
  8. 將 *.enc 檔全部搬移到 $TEXMFENC/CJK/ukai 中
    mv $WORKPATH/*.enc $TEXMFENC/CJK/ukai
  9. 將 *.fd 檔搬到 $TEXMFUTF8FD 下
    mv *.fd $TEXMFUTF8FD
  10. 將 cid-x.map.append 附加到 $TEXMFDVIPDFM/cid-x.map 中
    cat $WORKPATH/cid-x.map.append >> $TEXMFDVIPDFM/cid-x.map
  11. 將字型檔連結到 $TEXMFFONT 下
    ln -s /usr/share/fonts/cjkuni-fonts/ukai.ttf $TEXMFFONT/ukai.ttf
  12. 重覆以上步驟完成所有字型檔的配置動作,最後執行 texhash 登錄所有的檔案。沒有執行 texhash 的話將會出現一大堆字型對應錯誤的訊息。
※ 備註:
  1. 如果要產生的是 Big5 編碼下使用的字型資訊檔,那麼在 mktfm.sh 時必須將 Unicode 字樣換成 Big5 ,這個參數正是作為指定字形資訊檔欲使用的編碼設定。
  2. 不同編碼下的字形描述檔 *.fd 有不同的檔名及對應的儲放位置,例如 Big5 編碼的字形描述檔檔名為 c00xxxx.fd,儲放目錄則為 $TEXMFLOCAL/tex/latex/cjk-latex/Bg5 。
  3. 若想產生 GBK 編碼所使用的字形檔,可以找一下 gbkfont 這個工具程式協助。

CJK LaTeX 4.7.0 環境測試

請下載符合前述作業設定的 cjk.tex 嘗試編譯,若能正常編成 cjk.dvi 再輸出成 cjk.pdf 檔時,即可確認 cjk latex 環境已經 ready 。
ada@www ~/latex $ latex cjk
This is pdfeTeX, Version 3.141592-1.30.5-2.2 (Web2C 7.5.5)
entering extended mode
(./cjk.tex
LaTeX2e <2003/12/01>
Babel <v3.8d> and hyphenation patterns for american, french, german, ngerman, b
ahasa, basque, bulgarian, catalan, croatian, czech, danish, dutch, esperanto, e
stonian, finnish, greek, icelandic, irish, italian, latin, magyar, norsk, polis
h, portuges, romanian, russian, serbian, slovak, slovene, spanish, swedish, tur
kish, ukrainian, nohyphenation, loaded.
(/usr/share/texmf/tex/latex/base/article.cls
Document Class: article 2004/02/16 v1.4f Standard LaTeX document class
(/usr/share/texmf/tex/latex/base/size10.clo))
(/usr/share/texmf/tex/latex/cjk-latex/CJKutf8.sty
(/usr/share/texmf/tex/latex/oberdiek/ifpdf.sty)
(/usr/share/texmf/tex/latex/base/inputenc.sty
(/usr/share/texmf/tex/latex/base/utf8.def
(/usr/share/texmf/tex/latex/base/t1enc.dfu)
(/usr/share/texmf/tex/latex/base/ot1enc.dfu)
(/usr/share/texmf/tex/latex/base/omsenc.dfu)))
(/usr/share/texmf/tex/latex/cjk-latex/CJK.sty
(/usr/share/texmf/tex/latex/cjk-latex/mule/MULEenc.sty)
(/usr/share/texmf/tex/latex/cjk-latex/CJK.enc))
(/usr/share/texmf/tex/latex/base/fontenc.sty)) (./cjk.aux)
(/usr/share/texmf/tex/latex/cjk-latex/UTF8/UTF8.bdg)
(/usr/share/texmf/tex/latex/cjk-latex/UTF8/UTF8.enc)
(/usr/share/texmf/tex/latex/cjk-latex/UTF8/UTF8.chr)
(/usr/local/share/texmf/tex/latex/cjk-latex/UTF8/c70ukai.fd) [1] (./cjk.aux) )
Output written on cjk.dvi (1 page, 4436 bytes).
Transcript written on cjk.log.
ada@www ~/latex $ dvipdfmx cjk
cjk.dvi -> cjk.pdf
[1
** NOTICE: This document contains `Preview & Print' only licensed font **
]
** WARNING ** UCS-4 TrueType cmap table...

75370 bytes written

手動安裝 cjk-latex 4.7.0 的方法

※ 請先下載以下檔案,集中放入工作目錄 $WORKPLACE (自選) 下:
  • tetex-src-3.0_p1.tar.gz
  • tetex-texmf-3.0.tar.gz
  • cjk-4.7.0.tar.gz
  • dvipdfmx-20050831.tar.gz

建立 texmf main tree

cd $WORKPLACE
mkdir -p /usr/share/texmf
tar zxvf tetex-texmf-*.tar.gz -C /usr/share/texmf

編譯及安裝 tetex

cd $WORKPLACE
tar zxvf tetex-src-*.tar.gz
cd tetex-src-3.0
./configure --prefix=/usr/share/texmf \
            --datadir=/usr/share \
            --disable-multiplatform 
make && make world

安裝 CJK

cd $WORKPLACE
mkdir -p /usr/share/texmf/tex/latex/cjk-latex/
tar zxvf cjk-4.7.0.tar.gz
cd cjk-4.7.0
cp -R texinput/* /usr/share/texmf/tex/latex/cjk-latex/

安裝 dvipdfmx

cd $WORKPLACE
tar xzvf dvipdfmx-*.tar.gz
cd dvipdf*
./configure --prefix=/usr --with-kpathsea=/usr/share/texmf
make
make install

安裝字體

請參考 替 LaTeX CJK 新增字型 說明。