
                       bg5ps -- BIG5 文字檔印表輔助程式
                                       
   By 金振山

   Oct 1, 1998
   
1. bg5ps 簡介

   bg5ps 是一個 使用巨蟒描述語言(Python Scrpting Language)寫的一個小程式，
   能夠利 用幾套免費的 Truetype 中文字型將一般用 BIG5 編碼的文字檔轉換成能
   夠在沒有中文字型的 postscript 印表機或是只有 ghostscript 的系統 上印列
   的 postscript 檔案。 bg5ps 也可以拿來當做過濾器 (filter)，用來過濾在
   Linux 上的 Netscape 或是 mpage 產生的 postscript 檔案來印列其中所包含的
   BIG5 中文字元。因為 bg5ps 使用的是 Truetype 字型而非矩陣字型，當在雷射
   印表 機上或是字型較大時，可以獲得比較好的印列品質。
   
2. 安裝

   安裝過程大致如下：
   
    1. 安裝 Python。
       先檢查你的系統中是否有已經安裝 Python 1.4/1.5/1.51。如果你的系統是
       Linux RedHat 4.2/5.0/5.1，那你應該已經有 Python 了。
    2. 取得 ntu_*.ttf 或 moe_*.ttf 等中文字 型檔。
       你可以在下列地方得到中文字型檔
          + ftp://ftp.ntu.edu.tw/Chinese/ifcss/software/fonts/bug5/ms-win
          + ftp://ftp.ifcss.org/pub/software/fonts/big5/ms-win
       在 Chinese Linux Extension 的 CDROM 中也有相關字型的 rpm 檔。
    3. 先建立你想要安裝 bg5ps 的目錄，將 bg5ps-1.1b2.tgz 解壓縮到你想要的
       目錄下。如果你的 tar 有支援壓縮格式，使用

       tar zxvf bg5ps-1.1b2.tgz

       如沒有支援，使用

       gunzip bg5ps-1.1b2.tgz
       tar xvf bg5ps-1.1b2.tar

    4. 編譯 ttf2psm.c。
       執行

       gcc -O2 -fomit-frame-pointer ttf2psm.c -o ttf2psm

       將產生的 ttf2psm 放在與 bg5ps 相同的目錄 下，或者你可以放在你想要的
       目錄下，然後在設定檔中加上一行

       ttf2psmPath="/your/ttf2psmpath/"

       來標明 ttf2psm 的路徑。

    5. 編輯設定檔(Configuration file)。
       請參考以下及 所附的 bg5ps.conf 檔。裡面有各個參數的說明。其中比 較
       重要的是上述的 ttf2psmPath 以及 ChineseFontPath 這兩個參數。在本版
       的 bg5ps 中，bg5ps 會依下列的順序去尋找設定 檔案

         1. ~/.bg5ps.conf
         2. /etc/bg5ps.conf

    6. 測試。
       進到你用來安裝 bg5ps 的目錄裡下達

       bg5ps -if test.big5 -of test.ps

       如果你的設定都沒有問題，那應該會有一個叫 test.ps 的檔案產生你可以試
       著用 gv+ghostscript 或是 ghostview+ghostscript 來看產生的檔案有沒有
       錯誤。 如果有問題，請參考程式輸出的錯誤訊息並檢查你的設定檔。除了
       用設定檔案來設定印列參數，你也可以在命令列來控制一些印列的 參數。請
       用

       bg5ps -h

       來看有那些參數可以使用。
       
3. 使用方法

   bg5ps 可以以獨立(stand along)或是當成過濾器(filter)來使用。

    1. 以獨立方式執行。
       如果你的設定檔沒有問題，在大多數的時候你只須下達

       bg5ps -if yourfile.big5 -of yourfile.ps

       就可以將 big5 編碼的檔案轉成可以印列的 postscript 檔案。 在大部份的
       類 UNIX 的系統裡，使用

       lpr yourfile.ps

       就可將 postscript 檔案印出。需要注意的是你必須要有 postscript 印表
       機或是用 ghostscript 模擬 postscript 的印表 機及印表過濾器。此外你
       還需要確定你是否正確的指定印表機。
       如果你想要將 mpage 及 netscape 所產生的 postscript中的 big5 碼做處
       理，使其成為可以印列 big5 中文的 postscript檔。 那你需要加上 "-nps
       y" 這個選項如下

       bg5ps -nps y -if netscape.ps -of cnetscape.ps

       因為在 netscape 產生的 postscript 檔中的英文是可變寬度的字型， 所以
       有時會有和中文對不齊的狀況發生。如用 mpage 則沒有這方面 的問題。用
       mpage+bg5ps 是用來預覽大的中文檔案節省紙張的好方 案。

    2. 當成過濾器使用。
       bg5ps 也可以利用 UNIX 中的管 道(pipe)當成過濾器使用。方法如下

       cat yourfile.big5 | bg5ps > yourfile.ps
       cat yourfile.big5 | bg5ps | lpr
       
       或

       cat netscape.ps | bg5ps -nps y > yourfile.ps
       cat netscape.ps | bg5ps | lpr
       
4. 選項

   bg5ps 有下列的選項可以使用
     * -fp ChineseFontPath: 指定中文字型的路徑(預設值: 與 bg5ps 同)
     * -fn ChineseFontName: 指定中文字型的檔案名稱(預設值: ntu_kai)
     * -o [0|1]: 0 不輸出奇數頁，1 輸出奇數頁(預設值: 1)
     * -e [0|1]: 0 不輸出偶數頁，1 輸出偶數頁(預設值: 1)
     * -s num: 指定輸出字型的大小(預設值: 12)
     * -ls num: 指定行距(預設值: 6.0)
     * -cs num: 指定字距(預設值: 2.0)
     * -lm num: 指定左邊界(預設值: 72.0)
     * -rm num: 指定右邊界(預設值: 72.0)
     * -tm num: 指定上邊界(預設值: 72.0)
     * -bm num: 指定下邊界(預設值: 72.0)
     * -if filename: 指定輸入檔檔名
     * -of filename: 指定輸出檔檔名
     * -cf filename: 指定設定檔(預設值:  /.bg5ps.conf)
     * -nps [y|n]: y 使用 nps 模式，n 不使用 nps 模式(預設值: n)
       
   範例:

   bg5ps -fn ntu_kai -e 0 -o 1 -s 18 -cs 3 -if mybig5.txt -of myps.ps

5. 設定檔(Configuration file)

   bg5ps 的設定檔其實每一行都是 python script 語言的一 行指令，由 bg5ps 主
   程式去呼叫執行，所以可能有安全性上的 問題。請記得要將設定檔改成唯讀。因
   為設定檔也是 python script，所以 每一行的開始是不能有空格的。
   
   bg5ps 設定檔有下列參數可以改變
     * chineseFontPath: 指定中文字型的路徑(預設值: 與 bg5ps 同)
     * fontName: 指定中文字型的檔案名稱(預設值: ntu_kai)
     * oddPages: 0 不輸出奇數頁，1 輸出奇數頁(預設值: 1)
     * evenPages: 0 不輸出偶數頁，1 輸出偶數頁(預設值: 1)
     * size: 指定輸出字型的大小(預設值: 12)
     * lineSpace: 指定行距(預設值: 6.0)
     * chrSpace: 指定字距(預設值: 2.0)
     * leftMargin: 指定左邊界(預設值: 72.0)
     * rightMargin: 指定右邊界(預設值: 72.0)
     * topMargin: 指定上邊界(預設值: 72.0)
     * bottomMargin: 指定下邊界(預設值: 72.0)
       
   範例:

chineseFontPath="/home/cschin/lib/cfonts"
fontName="ntu_kai"
oddPages=1
evenPages=1

6. 注意事項與臭蟲

   為了可攜性，bg5ps 產生的 postscript 檔案中是包含字型 的，這樣可以在沒有
   連到postscript 印表機的電腦上執行，然後用磁片 或是用網路傳到可以印的機
   器上，我自己用了一年了，大致上沒有很大的 問題，有時也許是字型資料太大有
   些印表機可能無法處理，這樣你可能需 要用比較好的 postscript 印表機，不然
   就是用 Linux+ghostscript，這 樣的組合到現在我還沒有出過甚麼問題。唯一要
   注意的是如果用 HP 噴墨 印表機，最好在設定 ghostscript 的選項時加上
   -dDepletion=2 可改善用墨過多的情況。其他的噴墨印表機我 就沒有試過了。也
   許以後看看有沒有機會寫用矩陣字型的版本來改善噴墨 過多的問題。
   
   bg5ps 1.1b2 改寫了 nps 模式下判斷中文 big5 編碼部份的 postscript 碼，所
   以現在應該在大部份的狀況下都能夠正確判斷 netscape 所產生的 postscript
   的 big5 碼。我用的 netscape 版本是 4.05，mpage 是 2.4，如使用其他版本，
   請自行試用看看。處理 netscape 產生的 postscript 檔時，因為使用可變字型
   也沒有以 "行" 為單位輸出 postscript 碼，所以有時會有一些重疊的現象，還
   沒有想到 方法解決這個問題，如果 HTML 檔沒有很複雜的編排的時候多半沒有甚
   麼 問題。
   
   為了考慮到 python 1.4 的使用者，bg5ps 用了一個 python 舊的的模組 regex
   ，在 python 1.5.* 之後這個模組被 re 模組取代，雖然 1.5.* 版還有支援
   regex，但不被鼓勵。 所以如果還有機會出新版本，我將會改用 re 模組。
   
   如果你發現有甚麼問題，臭蟲，或是建議，請電郵到我的電子郵件信 箱
   cschin@u.washington.edu，謝謝。
   
   如果你覺得這個程式好用，如果方便，可以和我交換明信片給我鼓勵 一下，我的
   地址是 (98及99年)
    
   Chen-Shan Chin
   PO BOX 95644
   Seattle, WA 98145-2644
   U.S.A.

   如果我收到你的明信片，我也會寄給你 Seattle 當地或是我出去旅遊時 買的明
   信片，謝謝。
   
7. 版權

   bg5ps 1.1b 程式使用 GNU General Public License，請參照所付的
   COPYING.txt 檔案。
   
   ttf2psm.c 是改自 Liangsheng Wu 的 ttf2ps.c， 請參考 ttf2ps.doc 檔。
