<!DOCTYPE LINUXDOC SYSTEM>
<linuxdoc>
  <!-- one of (manpage notes slides telefax letter book report article chapt sect) -->
  <article>
    <titlepag>
      <title>bg5ps -- BIG5 文字檔印表輔助程式</title>
      <author>
	<name>金振山</name>
      </author>
      <date>Oct 1, 1998</date>
    </titlepag>
    <sect>
      <heading><tt>bg5ps</tt> 簡介</heading> <p><tt>bg5ps</tt> 是一個
      使用巨蟒描述語言(Python Scrpting Language)寫的一個小程式，能夠利
      用幾套免費的 Truetype 中文字型將一般用 BIG5 編碼的文字檔轉換成能
      夠在沒有中文字型的 postscript 印表機或是只有 ghostscript 的系統
      上印列的 postscript 檔案。 <tt>bg5ps</tt> 也可以拿來當做過濾器
      (filter)，用來過濾在 Linux 上的 Netscape 或是 mpage 產生的 
      postscript 檔案來印列其中所包含的 BIG5 中文字元。因為
      <tt>bg5ps</tt> 使用的是 Truetype 字型而非矩陣字型，當在雷射印表
      機上或是字型較大時，可以獲得比較好的印列品質。
</p>
    </sect>

    <sect>
      <heading>安裝</heading> 
      <p>安裝過程大致如下：
      </p>
      <p>
        <enum>
          <item>安裝 Python。<newline>先檢查你的系統中是否有已經安裝 
            Python 1.4/1.5/1.51。如果你的系統是 Linux RedHat
            4.2/5.0/5.1，那你應該已經有 Python 了。
          </item>

	  <item>取得 <tt>ntu_*.ttf</tt> 或 <tt>moe_*.ttf</tt> 等中文字
            型檔。<newline>你可以在下列地方得到中文字型檔
              <itemize>
		<item><tt>ftp://ftp.ntu.edu.tw/Chinese/ifcss/software/fonts/bug5/ms-win</tt></item>
		<item><tt>ftp://ftp.ifcss.org/pub/software/fonts/big5/ms-win</tt></item>
	      </itemize>
            在 Chinese Linux Extension 的 CDROM 中也有相關字型的 rpm 檔。    
          </item>

          <item>先建立你想要安裝 <tt>bg5ps</tt> 的目錄，將 
          <tt>bg5ps-1.1b2.tgz</tt> 解壓縮到你想要的目錄下。如果你的 
          tar 有支援壓縮格式，使用
<verb>
tar zxvf bg5ps-1.1b2.tgz
</verb>
          如沒有支援，使用
<verb>
gunzip bg5ps-1.1b2.tgz
tar xvf bg5ps-1.1b2.tar
</verb>
          </item>

	  <item>編譯 <tt>ttf2psm.c</tt>。<newline>
            執行 
<verb>
gcc -O2 -fomit-frame-pointer ttf2psm.c -o ttf2psm
</verb>
            將產生的 <tt>ttf2psm</tt> 放在與 <tt>bg5ps</tt> 相同的目錄
            下，或者你可以放在你想要的目錄下，然後在設定檔中加上一行
<verb>
ttf2psmPath="/your/ttf2psmpath/"
</verb>
            來標明 <tt>ttf2psm</tt> 的路徑。
	  </item>

          <item>編輯設定檔(Configuration file)。<newline>請參考以下及
           所附的 <tt>bg5ps.conf</tt> 檔。裡面有各個參數的說明。其中比
           較重要的是上述的 <tt>ttf2psmPath</tt> 以及 
           <tt>ChineseFontPath</tt> 這兩個參數。在本版的 
           <tt>bg5ps</tt> 中，<tt>bg5ps</tt> 會依下列的順序去尋找設定
           檔案
              <enum>
		<item><tt>~/.bg5ps.conf</tt></item>
                <item><tt>/etc/bg5ps.conf</tt></item>
	      </enum>
          </item>
          
          <item>測試。<newline>
            進到你用來安裝 <tt>bg5ps</tt> 的目錄裡下達 
<verb>
bg5ps -if test.big5 -of test.ps
</verb>
            如果你的設定都沒有問題，那應該會有一個叫 <tt>test.ps</tt> 
            的檔案產生你可以試著用 <tt>gv+ghostscript</tt> 或是 
            <tt>ghostview+ghostscript</tt> 來看產生的檔案有沒有錯誤。
            如果有問題，請參考程式輸出的錯誤訊息並檢查你的設定檔。除了
            用設定檔案來設定印列參數，你也可以在命令列來控制一些印列的
            參數。請用
<verb>
bg5ps -h
</verb>
            來看有那些參數可以使用。
          </item>
        </enum>
      </p>
    </sect>

    <sect>
      <heading>使用方法</heading> 
       <p><tt>bg5ps</tt> 可以以獨立(stand
      along)或是當成過濾器(filter)來使用。
        <enum>
          <item>以獨立方式執行。<newline>
            如果你的設定檔沒有問題，在大多數的時候你只須下達
<verb>
bg5ps -if yourfile.big5 -of yourfile.ps
</verb>     
            就可以將 big5 編碼的檔案轉成可以印列的 postscript 檔案。
            在大部份的類 UNIX 的系統裡，使用
<verb>
lpr yourfile.ps
</verb>
            就可將 postscript 檔案印出。需要注意的是你必須要有
            postscript 印表機或是用 ghostscript 模擬 postscript 的印表
            機及印表過濾器。此外你還需要確定你是否正確的指定印表機。
            <newline>
            如果你想要將 mpage 及 netscape 所產生的 postscript中的 
            big5 碼做處理，使其成為可以印列 big5 中文的 postscript檔。
            那你需要加上 "<tt>-nps y</tt>" 這個選項如下
<verb>
bg5ps -nps y -if netscape.ps -of cnetscape.ps
</verb>
            因為在 netscape 產生的 postscript 檔中的英文是可變寬度的字型，
            所以有時會有和中文對不齊的狀況發生。如用 mpage 則沒有這方面
            的問題。用 mpage+bg5ps 是用來預覽大的中文檔案節省紙張的好方
            案。
          </item>

          <item>當成過濾器使用。<newline>
          <tt>bg5ps</tt> 也可以利用 UNIX 中的管道(pipe)當成過濾器使用。方
          法如下
<verb>
cat yourfile.big5 | bg5ps > yourfile.ps
cat yourfile.big5 | bg5ps | lpr
</verb>
             或
<verb>
cat netscape.ps | bg5ps -nps y > yourfile.ps
cat netscape.ps | bg5ps | lpr
</verb>
            
          </item>
        </enum>
      </p>
    </sect>

    <sect>
      <heading>選項</heading>
      <p><tt>bg5ps</tt> 有下列的選項可以使用
        <itemize>
	  <item><tt>-fp ChineseFontPath</tt>: 指定中文字型的路徑(預設值: 與 <tt>bg5ps</tt> 同)</item>
          <item><tt>-fn ChineseFontName</tt>: 指定中文字型的檔案名稱(預設值: ntu_kai)</item>
          <item><tt>-o &lsqb;0|1&rsqb;</tt>: 0 不輸出奇數頁，1 輸出奇數頁(預設值: 1)</item>
          <item><tt>-e &lsqb;0|1&rsqb;</tt>: 0 不輸出偶數頁，1 輸出偶數頁(預設值: 1)</item>
          <item><tt>-s num</tt>: 指定輸出字型的大小(預設值: 12)</item>
          <item><tt>-ls num</tt>: 指定行距(預設值: 6.0)</item>
          <item><tt>-cs num</tt>: 指定字距(預設值: 2.0)</item>
          <item><tt>-lm num</tt>: 指定左邊界(預設值: 72.0)</item>
          <item><tt>-rm num</tt>: 指定右邊界(預設值: 72.0)</item>
          <item><tt>-tm num</tt>: 指定上邊界(預設值: 72.0)</item>
          <item><tt>-bm num</tt>: 指定下邊界(預設值: 72.0)</item>
          <item><tt>-if filename</tt>: 指定輸入檔檔名</item>
          <item><tt>-of filename</tt>: 指定輸出檔檔名</item>
          <item><tt>-cf filename</tt>: 指定設定檔(預設值: ~/.bg5ps.conf)</item>
          <item><tt>-nps &lsqb;y|n&rsqb;</tt>: y 使用 nps 模式，n 不使用 nps 模式(預設值: n)</item>
	</itemize>
      </p>
      <p>範例:
<verb>
bg5ps -fn ntu_kai -e 0 -o 1 -s 18 -cs 3 -if mybig5.txt -of myps.ps
</verb>
      </p>
    </sect>

    <sect>
      <heading>設定檔(Configuration file)</heading> 
      
      <p><tt>bg5ps</tt> 的設定檔其實每一行都是 python script 語言的一
      行指令，由 <tt>bg5ps</tt> 主程式去呼叫執行，所以可能有安全性上的
      問題。請記得要將設定檔改成唯讀。因為設定檔也是 python script，所以
      每一行的開始是不能有空格的。
      </p>

      <p><tt>bg5ps</tt> 設定檔有下列參數可以改變
        <itemize>
          <item><tt>chineseFontPath</tt>: 指定中文字型的路徑(預設值: 與 <tt>bg5ps</tt> 同)</item>
          <item><tt>fontName</tt>: 指定中文字型的檔案名稱(預設值: ntu_kai)</item>
          <item><tt>oddPages</tt>: 0 不輸出奇數頁，1 輸出奇數頁(預設值: 1)</item>
          <item><tt>evenPages</tt>: 0 不輸出偶數頁，1 輸出偶數頁(預設值: 1)</item>
          <item><tt>size</tt>: 指定輸出字型的大小(預設值: 12)</item>
          <item><tt>lineSpace</tt>: 指定行距(預設值: 6.0)</item>
          <item><tt>chrSpace</tt>: 指定字距(預設值: 2.0)</item>
          <item><tt>leftMargin</tt>: 指定左邊界(預設值: 72.0)</item>
          <item><tt>rightMargin</tt>: 指定右邊界(預設值: 72.0)</item>
          <item><tt>topMargin</tt>: 指定上邊界(預設值: 72.0)</item>
          <item><tt>bottomMargin</tt>: 指定下邊界(預設值: 72.0)</item>
         </itemize>
      </p>
      <p>範例:
<verb>
chineseFontPath="/home/cschin/lib/cfonts"
fontName="ntu_kai"
oddPages=1
evenPages=1
</verb>
      </p>
    </sect>

    <sect>
      <heading>注意事項與臭蟲</heading> 
      
      <p>為了可攜性，<tt>bg5ps</tt> 產生的 postscript 檔案中是包含字型
      的，這樣可以在沒有連到postscript 印表機的電腦上執行，然後用磁片
      或是用網路傳到可以印的機器上，我自己用了一年了，大致上沒有很大的
      問題，有時也許是字型資料太大有些印表機可能無法處理，這樣你可能需
      要用比較好的 postscript 印表機，不然就是用 Linux+ghostscript，這
      樣的組合到現在我還沒有出過甚麼問題。唯一要注意的是如果用 HP 噴墨
      印表機，最好在設定 ghostscript 的選項時加上 
      <tt>-dDepletion=2</tt> 可改善用墨過多的情況。其他的噴墨印表機我
      就沒有試過了。也許以後看看有沒有機會寫用矩陣字型的版本來改善噴墨
      過多的問題。
      </p>

      <p>bg5ps 1.1b2 改寫了 nps 模式下判斷中文 big5 編碼部份的 
      postscript 碼，所以現在應該在大部份的狀況下都能夠正確判斷 
      netscape 所產生的 postscript 的 big5 碼。我用的 netscape 版本是 
      4.05，mpage 是 2.4，如使用其他版本，請自行試用看看。處理 
      netscape 產生的 postscript 檔時，因為使用可變字型也沒有以 "行" 
      為單位輸出 postscript 碼，所以有時會有一些重疊的現象，還沒有想到
      方法解決這個問題，如果 HTML 檔沒有很複雜的編排的時候多半沒有甚麼
      問題。
      </p>

      <p>為了考慮到 python 1.4 的使用者，<tt>bg5ps</tt> 用了一個 
      python 舊的的模組 <tt>regex</tt>，在 python 1.5.* 之後這個模組被 
      <tt>re</tt> 模組取代，雖然 1.5.* 版還有支援 regex，但不被鼓勵。
      所以如果還有機會出新版本，我將會改用 re 模組。
      </p>

      <p>如果你發現有甚麼問題，臭蟲，或是建議，請電郵到我的電子郵件信
      箱 <tt>cschin@u.washington.edu</tt>，謝謝。
      </p>

      <p>如果你覺得這個程式好用，如果方便，可以和我交換明信片給我鼓勵
      一下，我的地址是 (98及99年)
<verb>
Chen-Shan Chin 
PO BOX 95644 
Seattle, WA 98145-2644 
U.S.A.  
</verb>
      如果我收到你的明信片，我也會寄給你 Seattle 當地或是我出去旅遊時
      買的明信片，謝謝。
      </p>
    </sect>

    <sect>
      <heading>版權</heading>
      <p> bg5ps 1.1b 程式使用 GNU General Public License，請參照所付的
      <tt>COPYING.txt</tt> 檔案。
      </p>
      <p> <tt>ttf2psm.c</tt> 是改自 Liangsheng Wu 的 <tt>ttf2ps.c</tt>，
      請參考 <tt>ttf2ps.doc</tt> 檔。
      </p>
    </sect>
  </article> 
</linuxdoc>


