由 TeX/LaTeX 製作中文 PDF 檔李果正 Edward G.J. Lee 目 錄
|
檔案 | 所在位置 |
pdftex | /usr/bin |
pdfetex | /usr/bin |
ttf2afm | /usr/bin |
pdftosrc | /usr/bin |
pdftex.pool | /usr/share/texmf/web2c |
pdfetex.pool | /usr/share/texmf/web2c |
supp-mis.tex | /usr/share/texmf/tex/context/base |
supp-pdf.tex | /usr/share/texmf/tex/context/base |
pdftex.def | /usr/share/texmf/tex/latex/graphics |
這個巨集套件主要是把 PDF 的一些功能嵌入 *.tex 檔內。不更新也沒關係,但就無法做出 PDF 檔中的中文 bookmarks 了。當然,中文的 bookmarks 還得配合新版的 CJK 套件才行。可在以下網址下載:
ftp://ftp.tug.org/pub/tex/hyperref/版本一定要高於 2002/04/12 v6.72l 否則會無法處理中文 bookmarks。這個套件的原始作者是 Sebastian Rahtz,目前是由 Heiko Oberdiek 所維護。實際例子請參考第 5 節,相關設定可參考第 4.4 小節。
http://www.study-area.org/tips/latex/pdftex.html這裡要補充的是,目前大概還有不少朋友還留有以前的 Big-5 碼的 TTF,這可以借由 oto3這支程式來加入 Unicode name/cmap table,這樣就可以當做是 Unicode 字型來使用。不過,其中的 map 表,並不合我們使用的 Big-5 碼中有關日文的部份,我做了個 patch,只要 patch 裡頭的 BIG5.TXT 檔就可以了,不必重編譯程式,可在 study-area 網站下載:
http://www.study-area.org/tips/latex/oto-BIG5.diff.gzpatch 的方法如下:
cd /usr/local/share/oto/ gzip -dc oto-BIG5.diff.gz | patch -s -p0
為了要使用 Type1 字型,$TEXMF/dvips/config.ps 最好是修改一下,加入以下各種設定 (這裡假設您的中文 Type1 或 TTF 字型都已安裝、設定妥當):
%% 以下設定會預設使用 BlueSky 的 Type1 字型,等同於 dvips 的 -Ppdf 參數。 p +bsr.map % CM/AMS fonts p +bsr-interpolated.map % additional sizes p +hoekwater.map % additional fonts from Taco Hoekwater h tex.pro h alt-rule.pro % 以下這個 o 要把前面的 % 拿掉,否則預設執行 dvips 會導向印表機。 o如果不加這些設定,則要執行以下的指令代替:
dvips -Ppdf -G0 -o your.ps your.dvi千萬不要省略這個 -G0 參數,不然就得在 $TEXMF/tex/dvips/config.pdf 中把 G 這個設定給 % 起來。這是一個古老的 acroread 的 bug 所產生的相容性問題,目前的 acroread 應該不會有這種情形,加進去反而會有其他副作用。
本文 PDF 格式所使用的字型都是自由軟體或 Public Domain,非常感謝各提供的公司及個人,由於他們的熱心,使得這篇文件裡裡外外稱得上是自由文件。茲列表於表 2:
字型檔名稱 | 使用處 | 字型名稱 | 提供者 | 版權 |
(lr)1-5 bsmi00lp.ttf | 內文 | 文鼎細上海宋 | 文鼎公司 | GPL-like |
wcl-02.ttf | 內文標題 | 王漢宗特明體 | 王漢宗博士 | GPL |
wcl-07.ttf | Title | 王漢宗粗鋼體 | 王漢宗博士 | GPL |
cm*.pfb | 內文英文字 | CM PS fonts | Blue Sky Research | Public Domain |
使用的轉換程式是 oto 及 ttf2pt1。如果是使用 pdfTEX 的話,可直接抓取 TTF 而不必轉換成 Type1。
以下所討論的方法應該是最常見的,當然 TEX/LATEX 的世界無奇不有 (個人覺得,有點像 perl 的世界,一大堆的現成模組可以運用)。但以處理中文而言,除非是自行寫程式,否則這應該算是最方便的現成方法了。以下的舉例,都是以 chpdf.tex 為例,也是本文寫作的文稿檔案名稱。
這可說是最正統,最古老的方法了。最近由於 Ghostscript 的大幅改進,已經使這個製作方法愈來愈完美。Ghostscript 要在 6.51 以上的版本才會有較佳的效果。
這個方法其實就是一般 TEX/LATEX 製作的正常過程,由 TEX/LATEX 指令,得到 *.dvi 檔,再由 dvips 製作成 *.ps 檔,然後再由 ps2pdf 將 *.ps 檔轉成 *.pdf 檔。當然,處理中文而言,我們使用的是 CJK 套件,在 Big-5 碼的話, 指令是 bg5latex。實際指令如下:
bg5latex chpdf.tex dvips -t a4 -Ppdf -G0 chpdf ps2pdf13 chpdf.ps
其中 ps2pdf13 是指使用 PDF-1.3 的格式,建議使用這個格式,比上不足,比下有餘。據個人的經驗,使用這個方法製作來的 PDF 檔,會大一些,但品質會比較好,而且,在使用 gzip 壓縮後會比由 dvipdfm 或 pdfTEX 做出來的還要小,很奇怪吧!這也是本文的 PDF 格式的製作方法。不過,無論如何,本文中文字型是內嵌的,這樣可攜性會比較好,但檔案就會比較大了。
這個過程比第 4.1 小節的方法少了一個 *.ps 的步驟。dvipdfm 會將 *.dvi 檔直接生成 *.pdf 檔。
dvipdfm 標榜的是忠於原 TEX,但這樣一來,可加入的 PDF 特性的功能就少了許多,可以依靠 hyperref 套件來做擴充的功能。
實際執行指令如下:
bg5latex chpdf.tex dvipdfm chpdf
hyperref 套件雖然也可以加入不少的 PDF 特性,但 pdfTEX/pdfLATEX 可說是重寫的軟體,可以當做 TEX/LATEX 來使用,並且加入相當多的 PDF 特異功能,如果目標是製作 PDF 檔的話,pdfTEX/pdfLATEX 無疑是首選的工具。
這個部份可以先參考第 3 節所指網頁的說明,先能動再來談應用。版本至少要 0.14h 以上的版本才能直接抓取 TTF。
當然 pdfTEX/pdfLATEX 的詳細功能,本篇文章並沒有做詳細說明,僅對有用到的功能略加解說。讀者可以下載使用手冊來參考。
以目前的情形而言,hyperref 套件的使用範圍可能會比 pdfTEX/pdfLATEX 還要廣。他不僅可以配合原來的 TEX/LATEX 系統,也可以和 pdfTEX/pdfLATEX 合用,因此對這個套件有必要多瞭解一下。
原則上設定檔是 hyperref.cfg,使用 hyperref 套件時,一有用到其中的 macro 就是會找這個檔,其中找尋的順序是:
這裡以我自已的 hyperref.cfg 來說明:
1 \hypersetup{backref, 2 dvips, 3 bookmarks=true, 4 pdfauthor=Edward G.J. Lee, 5 colorlinks=true, 6 breaklinks=true, 7 hyperfigures=true, 8 pdfstartview=FitH, 9 linkcolor=blue}
基本上,原來文稿使用 \label/\ref 及目錄、索引的部份就會自動可以交互參照。2 是指定要用其他如 dvipdfm,pdfTEX 時更改這裡的值,或設在文稿內。
3 是指要不要 bookmarks,4 是作者名字,在使用 Xpdf4所附的 pdfinfo 指令執行後就會顯示。或者使用 acroread 在功能表上叫出 Document info 時也會顯示,在 PDF 正文內則不會顯示出來。5 及 9 是設定超連結的地方要不要顯示顏色,及顯示什麼顏色。
8 是指使用 acroread 閱覽這個 PDF 檔時的顯示模式,例如,是 Fit Width 還是 Fit in Window。這在 Xpdf 及 gs/gv 則沒有這個功能來判斷這個設定。這裡設的是 Fit Width,不過,這個是傳參數給 PDF View 這個 key,據個人的測試,似乎控制得不是很好。
最後,請大家饒了我吧!不要把例子裡頭的阿拉伯數字也寫進您的設定檔裡去了。
這個部份可說是本文的精華了,因為要加入 PDF 特有的功能,光靠傳統的方法及工具是不夠的,例如一些連結及 bookmarks 的功能,除非很瞭解 PDF 的一些 instructions,自行由 TEX 的指令 \special 來帶入 *.tex 文稿中,但這樣一來可就累了,本就夠複雜的 TEX/LATEX 語法,再加上 PDF 的指令,那一篇文章還沒完成,大概就打退堂鼓了。先別緊張,本文雖沒有很深入的說明,但本文這個活實例,就是您的 templet,直接拿來套用就對了!
本文的實際文稿及完成後的 PDF 檔可在 study-area 網站下載:
http://www.study-area.org/tips/latex/chpdf.tex
http://www.study-area.org/tips/latex/chpdf.pdf
這樣就可以一邊看文章一邊看實際的排版結果。其中 chpdf.tex 由於加入了許多注解,因此顯得比較亂,而且個人寫 *.tex 文稿的習慣都是不內縮的,這點請大家忍耐一下。本文沒有詳細說明的部份,應該在 chpdf.tex 的注解裡頭都會稍加說明。
當然,您必須具有最基本的 LATEX 排版的經驗,例子中已經盡量採用較簡單的方式,但有一小部份,為達到所需要的效果,還是不得不要用到特殊的套件。
1 \documentclass[12pt,a4paper]{article} 2 \usepackage{CJK} 3 \usepackage[dvips,CJKbookmarks]{hyperref} 4 \begin{document} 5 \begin{CJK*}{Bg5}{aming} 6 \CJKtilde ...... 這裡寫文章 7 \end{CJK*} 8 \end{document}
重點在 2 及 3 的部份。這裡如果要改用 pdfTEX,那就得把 dvips 改成 pdftex,由於我的 hyperref.cfg 已經設定好 dvips,因此這裡的 dvips 也是可以省略。而且注意這個 CJKbookmarks,這就是讓 PDF 能有中文 bookmarks 的設定,要不然因為標題的部份經過編碼,最後如果沒有還原的話就變成一堆亂碼了。這裡要特別感謝 Werner Lemberg 及 Heiko Oberdiek 的幫忙,解決了中文 bookmarks 的問題,是由 Werner 提出 patch,然後 Heiko 做了一些修改後釋出。當然,這在目前只能在 Windows 系統下的 acroread 才會看得到中文 bookmarks,拿到 Unix-lke 系統的 acroread 閱覽則仍是一堆亂碼,這是 acroread 的問題,而不是 PDF 檔的問題。
其他關於目錄、交互參照、腳注、參考文獻、索引 ......等等,只要使用了 hyperref 套件,便會自動處理,不必操心。但本文並沒有談到參考文獻、索引的部份,這是更進階的課題了,留待有機會再來探討。
基本上 LATEX 本身就有交互參照的指令可用,分別是 \label 及 \ref,\pageref,當然這只能顯示,沒辦法由滑鼠點了以後跳來跳去。也就是說只要使用 hyperref 套件,縱使沒有加入新的 tags,也是會有基本的文內連結功能。當然 hyperref 套件另有擴充這方面的功能。請參考表 3:
套件 | 指令 | 功能說明 |
LATEX | \label{name} | 以 name 來定位 |
\ref{name} | 顯示 name 之所在章節、圖表 | |
\pageref{name} | 顯示 name 之所在頁碼 | |
hyperref | \hypertarget{name}{text} | 以 name 來定位 |
---|---|---|
\hyperlink{name}{text} | 按 hyperlink 處,會跳至 | |
hypertarget 所在之處 |
這個在原本 LATEX 當然是沒有的, TEX/LATEX 是屬於平面排版系統,網路上的應用是在 PDF 格式廣為被使用後才開始有相關套件出現,這恐怕也是 TEX 系統能長久維持一定比例使用者的原因,彈性、功能都相當大,品質也有保證,較不容易被時間所淘汰。
底下仍以圖表的方式來說明比較清楚,請參考表 4:
套件 | 定址 | 說明 |
pdfTEX | 為了相容性,請盡量直接使用 | |
---|---|---|
hyperref 的方式 | ||
hyperref | \href{url}{text} | 連結至 url 所在處 |
\hyperref{url}{category}{name}{text} | 連結至 url#{category} 所在處 | |
LATEX2HTML | \htmladdnormallink{text}{url} | 連結至 url 所在處 |
現在很流行 ``所見即所得'' ,這裡不想引發任何爭議或論戰,只是目前個人使用的環境是 GNU/Linux 系統,我就說說我是怎麼編譯,怎麼預視的。
首先我開了兩個終端機 (rxvt),我的視窗管理程式是 IceWM,我已經設定好由按鍵就可以在兩個虛擬視窗間方便移動。使用的編輯器是 Vim。在工作目錄已寫好了一個 sh script 稱為 compile 其內容如下:
#!/bin/sh if [ $# -ne 1 ] then echo "Usage: `basename $0` your.tex" exit 1 fi FNAME=$1 rmtextmp bg5latex $FNAME && \ bg5latex $FNAME && \ dvips -t a4 -Ppdf -G0 ${FNAME%.tex} && \ ps2pdf ${FNAME%.tex}.ps && \ xpdf ${FNAME%.tex}.pdf其中 rmtextmp 是另一個 sh script,內容如下:
#!/bin/sh rm -f *.aux *.toc *.log *.dvi *.cjk *.out \ *.brf *.idx *.ind *.lof *.lot主要是去除一些暫時產生的檔案,可置於路徑可達之處,否則要指明路徑。這裡 bg5latex 要執行二次,是因為交互參照的部份要第二次編譯時才會完成。
左邊由 vim 編輯了一段,想預視的話,馬上移到右邊執行:
./compile chpdf.tex就可以了,文稿不大,而且又使用 Type1 字型的話,速度是相當快的,而 vim 也可以由顏色來幫忙控制語法是否正確,當然前提是文稿的整個大結構要先建立好,否則編譯容易發生錯誤而停下來。而大文稿本就應該切割成幾個部份,由 make,makefile 來控制。當然要做到完全由 vim 來控制也是可以,這樣會不會更方便就看個人所持的觀點和習慣了。
在 Emacs 編輯器 (系統?) 也有現成的 preview-latex 可以使用。
不曉得這樣子算不算是另類 WYSIWYG?在我的經驗裡,這樣的生產量是不會輸給 MS Word,尤其是文稿份量相當大,例如幾百頁的內容,至於細部微調控制那就更不用說了。甚至國人開發的 cwTEX 及 ChiTEX 目前都有相配合的 GUI 工具,相當方便,只可惜偏重在 Windows 系統上,在 Unix-like 系統上還是得雙手萬能一下。這裡要提醒大家一下,TEX 系統畢竟是幕後排版系統。而且,排版是一門審美藝術,大小細節要能掌握住,才能達到質的要求,我們要的不是 WTGIWYG(What They Give Is What You Get)。
好了,文章告一段落。我得事先聲明,我不算是什麼 TEX/LATEX 的專家,只是常在使用,會有一些使用上的心得,文章裡頭所說的不敢保證百分之百正確,但至少我是親自實作過,如果有不正確的地方,希望大家提出指正。跟據我的說法去實作,如果有任何 ``意外'',那我是不負責的。您不會認為看了這十頁的內容就變成 TEX/LATEX 的專家了吧!千萬不能有這種想法,學海無涯,一山還有一山高 ......。
另外,有許多朋友來信問到 TEX/LATEX 相關文件的問題,其實一般的 TEX 系統裡頭就會附上相當多的文件,只是有些可能沒有編譯出來,是以 *.tex 或 *.dvi 的形式存在,只要動手把他們編譯出來就成了。另外,一些 *.sty 檔裡頭都會有一些說明,這可是第一手資料喔!當然,這些都是英文,但只要找到相關的指令,照著指令的格式動手實驗一下就成了。 當然現成的 FAQ 不能忘了:
http://www.tex.ac.uk/faq
至於中文書籍,新版本的確實不多,但吳聰敏教授的《cwTEX排版系統》一書應該相當具參考價值,這是個人手邊重要的工具書之一,雖然說的是 cwTEX 但其實都差不多,LATEX 的語法是固定的,這本書網路上也可以下載。陳弘毅教授的 ChiTEX 系統也是有一些文件可以參考,也可以由網路上下載。CJK 本身的話,所附的文件也有中文的,就是 READMEb5.tex,如果沒有編譯出來的話,自行改一下裡頭使用的中文字型,手動編譯出來就是一篇 CJK 中文使用手冊了。
Copyright © 2002 李果正 Edward G.J. Lee
本文件除 sh script 外,為自由文件(FDL),可自由複製、修改、散佈,但請保留版權聲明。sh script 的部份為 Public Domain。文件內所提及的商標皆屬其合法註冊公司所有。
This document was generated using the LaTeX2HTML translator Version 2002 (1.62)
Copyright © 1993, 1994, 1995, 1996,
Nikos Drakos,
Computer Based Learning Unit, University of Leeds.
Copyright © 1997, 1998, 1999,
Ross Moore,
Mathematics Department, Macquarie University, Sydney.
The command line arguments were:
latex2html -split 0 -show_section_number -ascii_mode -noimages chpdf.tex
The translation was initiated by on 2002-04-27