1.2. 如何取得這份文件?

這份文件目前可以在這個網址取得:

WWW: FreeBSD Chinese HOWTO

這份文件是由 SGML 所編寫而成的,如果想取得原始檔案, 可以用以下的方式:

% cvs -d :pserver:anoncvs@freebsd.sinica.edu.tw:/home1/ncvs login
(Logging in to anoncvs@freebsd.sinica.edu.tw)
CVS password: anoncvs
% cvs -d :pserver:anoncvs@freebsd.sinica.edu.tw:/home1/ncvs checkout zh-tut

如果想手動產生 HTML、TXT 等格式,則必須照以下的方式:

# cd /usr/ports/textproc/docproj
# make JADETEX=yes install clean
# cvsup -g /usr/share/examples/cvsup/doc-supfile

接著修改 /usr/local/share/texmf/web2c/texmf.cnf, 將以下改成 hash_extra = 25000,max_strings = 150000, pool_free = 50000,這樣應該就可以了。

接著就可以到 zh-tut/ 底下用 make FORMATS=html 製作整頁模式的 HTML 版本, make FORMATS=split-html 製作章節模式的 HTML 版本, 因為以 make FORMATS=pdf 製作出來的 PDF 中文無法正常顯示,make FORMATS=ps 製作出來的 PS 版本也是如此,所以目前的 PDF 版本是用 Adobe Distiller 以預設值 PDF 1.3 做出非內嵌中文的 PDF 版本,以及以 PDF 1.2 , 並內嵌字型製做出內嵌中文的 PDF 版本。 並用 WebCapture2CK 增效模組做出了 PDF 的有超連結版本。 TXT 版本則是使用 lynx-dump 並搭配 -assume_charset=big5 -assume_local_charset=big5 瀏覽整頁模式 HTML 版本所製作出來的。 PS 的版本則是由 pdf2ps 所製作, 不過做出來會變成 30 MB,不太適合下載。

1.2.1. jadetex - SGML+JadeTex 產生不內嵌字型的中文 PDF

Contributed by 海邊的野孩子 (edwar.bbs@bbs.sayya.org)

Last Update: 2003年 4月 7日 周一 19時11分14秒 CST

在產生中文 HTML 的部分沒什麼問題,只要在 freebsd.dsl 的 style-specification-body 的標籤內,加上如下的宣告即可:

(define %html-header-tags% '(("META" ("HTTP-EQUIV" "Content-Type") ("CONTENT" "text/html; charset=Big5"))))

但是要產生 PDF 則要先安裝 teTeXdocprojCJKxpdf 等應用軟體,請參考前一節的說明。

jade 可以將 XML/SGML 轉換成 tex 檔,若是 XML 原本內含中文, 或是其他 CJK 文字,原本會輸出成一般的中文, 加上環境變數 SP_ENCODING=Big5 後, 輸出的 tex 檔會將這些文字用 \Character{29992} 表示,這數字是 unicode,「用」在 unicode 裡是中文的「用」字。

若是直接以 jadetex 編譯這個 .tex,會出現 Unknown character 的錯誤訊息,方式很簡單,既然這些字元沒有定義,就幫他定義一下, 在編譯的時候先引入就好了。

定義一個 cjk-char.sty,每行的內容像:

\DefineCharacter{19968}{4E00}{\begin{CJK*}{Bg5}{bsmi}XXX\end{CJK*}}

XXX 是經過 bg5conv 處理過的中文字。因為每個字都用 \begin{CJK*} 和 \end{CJK*} 包住,所以編譯時會很久。 這個做法可能可以在一份文件中用到好幾種編碼的文字。

若要加快編譯速度,就要將 \begin{CJK*} 用在開頭, \end{CJK*} 放在 \endFOT{} 之前。這樣可以大幅提昇速度, 但是一份文件裡可能就只能有一種編碼的亞洲文字。 還有一種做法是最開始使用 \begin{CJK*}{}{bsmi}, 在每個字定義的地方都用 \CJKenc{Bg5} 來指定編碼, 這樣速度會比第一種快一些。

然後在 .tex 的開頭加入 \usepackage{CJK,pslatex}\input cjk-char.sty 再進行編譯。下面就是步驟,cjk-char.sty 要自行下載。

# env SP_ENCODING=Big5 make FORMATS=tex
# echo '\usepackage{CJK,pslatex}\input cjk-char.sty' > zh-tut.tex.2
# cat zh-tut.tex >> zh-tut.tex.2
# mv zh-tut.tex.2 zh-tut.tex
# env SP_ENCODING=Big5 make FORMATS=dvi
# dvipdfmx zh-tut.dvi

最後用 xpdfpdffont 檢驗。 在 type 的地方全都是 Type 1 就沒問題囉。

# pdffonts zh-tut.pdf
name                                 type         emb sub uni object ID
------------------------------------ ------------ --- --- --- ---------
Helvetica-Bold                       Type 1       no  no  no       8  0
Times-Roman                          Type 1       no  no  no      15  0
ShanHeiSun-Light                     CID TrueType no  no  no      18  0
Courier                              Type 1       no  no  no      19  0
Helvetica                            Type 1       no  no  no      20  0
Times-Bold                           Type 1       no  no  no      25  0
Times-Italic                         Type 1       no  no  no      26  0
Courier-Bold                         Type 1       no  no  no      59  0
UJULYZ+CMMI10                        Type 1       yes yes no     167  0

WWW: cjk-char.sty