Showing Mathematics on the Web --- PostScript

PostScript 簡介

Adobe 公司 (adobe 的唸法不同於一般的英文發音規則, 請查字典學習它的讀音) 發明並擁有 PostScript 程式語言的版權. 大部分的讀者, 可能是經由他們在個人電腦上的著名產品 Illustrator 而認識這家公司. 其實他們不只如此. 我個人認為 Adobe 是一家在產品設計上很有風格, 在其專業領域內技術卓越的傑出軟體企業. 我一向喜歡他們的產品, 而且信賴他們的優越性. 商業軟體公司中, 能夠讓我感到信賴而且佩服的企業並不多; 除了 Adobe, 我還願意推薦 MathWorks (出產 Matlab); 其他的就不這麼確定了.

Adobe 是商業軟體中首先創造描邊字型 (out-line font) 的公司. 他們採用數學中所謂的樣條函數 (splines) 在一個座標平面上描述一個字樣的邊框. 這個做法的首要好處是, 使用者可以方便地調整某些參數, 而改變字型的高矮胖瘦, 解析度, 傾斜度, 粗細度, 以及諸如色彩陰影之類的特殊效果. (有關字型, 字樣這些名詞的解釋, 可參考我的另一份文件.)

Adobe 使用一套他們自己發明的語言, 稱為 PostScript, 來定義 (或說描述) 這些字型的邊框. 其實 PostScript 的功能不只是描述字型, 它可以更一般性地描述任意的平面設計. PostScript 的設計理念是, 精確地描述如何在一個平面 (紙張) 上繪製任意的記號 (字或圖). 所謂程式語言, 應該是可以解決一般性的問題的; 但是每個程式語言都有其設計上最擅長的問題對象. PostScript 最擅長的就是指揮一個高解析度印刷機在白紙上寫字和畫圖. 所謂 Adobe 的描邊字型, 就是 PostScript 的一個應用特例. 在這裡, PostScript 程式語言被用來精確地描述一個字樣的邊框. 後來發展的 PostScript 語言還可以用來指揮彩色印刷機, 或是解析度比較低的監視器螢幕 (Display PostScript (PDF file)).

所謂 PostScript 文件, 就是一個以 PostScript 寫成的程式檔案. 這些文件的第一行的開頭部分總是
%!PS-Adobe
這個文件 (或程式) 的內容, 就是描述在平面 (紙張) 的什麼位置, 以什麼樣的方式畫一個什麼樣的線條 (以組成字或圖形). 一個熟練的程式設計師可以直接在一個編輯器 (editor) 中撰寫一份 PostScript 文件, 但是通常的使用者當然不願意這麼做. 大部分的人是藉由應用程式來做文字的編排以及圖形的繪製, 再由該應用程式輸出 PostScript 文件. 例如 Microsoft Word 和 Adobe Illustrator 都可以輸出 PostScript 文件. 科學界常用 TeX 或 LaTeX 來做科學文獻的排版工作, 排版之後的輸出檔案叫做 dvi (device indepentdent) 格式. 而今天, 大部分的使用者會將 dvi 格式的檔案轉換成 PostScript 文件.

PostScript 只是個程式語言. 就像 C 是個程式語言一樣. 一個以 C 寫下的程式, 必須經過編譯 (compile) 的程序才能執行. 一個以 PostScript 寫下的程式, 也是必須經過解譯 (interpret) 的程序才能執行. 一般來說, 以 PostScript 寫下的程式就是一份 PostScript 文件; 而這樣一個程式所謂的執行, 就是在平面媒體上呈現 PostScript 文件的內容. 這個平面媒體通常是紙張或者監視器. 如果媒體是紙張, 那麼程式的執行者通常是一台雷射印刷機.

所謂 PostScript 印刷機, 就是在硬體內安裝了 PostScript 解譯器 (interpreter, 而非 compiler) 的印刷機 (通常是燒錄在一顆 ROM 裡面). 根據 Adobe 的規定, 所有的 PostScript 解譯器, 不論是以軟體還是硬體的形式存在, 都必須伴隨 35 種最常用的標準字型 (Level 3 規定了 136 種標準內建字型). 所以, 如果一份 PostScript 文件的文字內容, 所指定的字型都屬於這 35 種標準字型, 那麼 PostScript 文件本身就不需要記錄這些字型的描邊程式. 否則, 如果文件的文字內容指定了特殊的字型, 那麼這個 PostScript 文件只要記錄了這些字的描邊程式, 一個 PostScript 解譯器就可以把那些特殊字型繪製在平面媒體上. 當然, 不管那些特殊字出現了幾次, 一份文件內只需要定義一次它們的描邊程式.

由於 PostScript 程式語言是以 ASCII 碼寫成, 所以我們可以編輯 PostScript 文件, 就好像編輯 C 程式一樣. 這使得 PostScript 文件受到許多程式設計師的喜愛. 又由於 PostScript 文件是以數學的曲線模型來描述字與圖形, 再經由 PostScript 解譯器將它以特殊的解析度呈現在紙上. 所以 PostScript 文件不受印刷機或監視器的解析度限制, 而總是得到幾乎最好也最準確看的呈現效果. 這使得 PostScript 文件比較容易受惠於高品質的印刷機, 而得到高品質的輸出.

PostScript 是個程式語言, 人人得以寫之. 但是解譯 PostScript 的技術卻握在 Adobe 手裡, 有些部分是具有智慧財產權的. PostScript 印刷機內部附有 PostScript 解譯器, 所以要付給 Adobe 一筆權利金. 大約在 1988 年, Peter Deutsch 迂迴了版權的部分, 寫了另一套 PostScript 的解譯器, 稱為 GhostScript (真是個有風格的名字!!), 採取 GNUCopy-Left 版權政策. 這套程式解譯了 PostScript 程式語言, 而且將其結果轉換到許多不同的輸出硬體上. 例如惠普 (HP) 的雷射印刷機 LaserJet 系列和佳能 (Canon) 的噴墨印刷機系列, 都是品質不錯的印刷機, 但是各自有不同的驅動機器碼 (非程式語言). GhostScript 可以將一份 PostScript 文件轉換成這些印刷機的機器碼, 使其內容可以在這些不具有 PostScript 解譯器的印刷機上呈現出來. 後來 Deutsch 成立了 Aladdin Enterprises 公司, 繼續維護並更新 GhostScript 程式, 並開始銷售. 但是 Deutsch 還是很照顧非商業導向的玩家們, 所以我們還是可以從網路上取得 GhostScript 程式, 而且其稍微舊一點的版本, 仍然採用 GNU Copy-Left 版權政策.

幾乎在所有個人電腦和 UNIX 工作站的環境內都有一份 GhostScript 的版本. 有一些架構在 GhostScript 之上的程式, 使得 PostScript 文件得以呈現在螢幕上 (當然, 必須是在一個圖形操作環境內). 比如說, ghostview 就是這樣的一個程式.

以下是我個人收集的一些有關 PostScript 的書籤.

PostScript 與科學文件

所謂科學文獻, 其內容常常需要呈現數學符號, 曲線圖, 線路圖或是化學鍵結圖等等; 這些內容都不是一般的文字可以替代的. 由於 PostScript 提供一套方便而且高品質的方法, 使得上述的符號, 圖形與文字一起呈現在紙上, 所以今天 (1997 年) 絕大部分的科學文獻都是以 PostScript 文件的格式儲存, 並在網路上公開交流, 或是由出版商印刷出售. 在今天的網路社會中, 已經有多得數不清的 PostScript 科學文獻. 科學家透過網路取得這些文獻, 並經由 PostScript 印刷機輸出精美的文件.

在網路上呈現數學符號 (以及其他的科學記號), 最簡單的方法就是使用 PostScript 文件. 大半的科學家已經知道如何使用應用程式製作精美的科學文獻 (例如使用 TeX 或 LaTeX). 因為這套技術已經成熟, 而且被許多人所接受, 所以新進的人應該可以在比較輕鬆的環境下學習如何製作 PostScript 文件. 一旦有了 PostScript 文件, 所要做的事情不過就是將它放在網頁上, 供網路公民自由取閱.

PostScript 文件的流通示範

PostScript 文件的服務端

網站的管理人員必須在 WWW Server 的配置檔案中, 修改 mime.types 檔案 (或它的對等檔案), 定義一行

application/postscript ai eps ps
這樣子, 此網站中的任何 .ps 或 .eps 檔案, 都會以 application/postscript 的形態送出.

網站中的作者就很簡單了. 比如說我有個 foo.ps 檔案, 是一份 PostScript 文件, 我將一句話
<A HREF="foo.ps">PostScript 測試檔案</A>
寫在一張網頁 (Web Page) 內, 則這張網頁的讀者只要在 PostScript 測試檔案 這個按鍵上點一下, 其流覽器就會下載 foo.ps 這個 PostScript 文件.

PostScript 文件的客戶端

問題是, 目前的流覽器都不知道如何呈現 PostScript 文件. 換句話說, 它們沒有內建的 PostScript 解譯器. 所以, 讀者不能直接在流覽器的視窗內閱讀 PostScript 文件 (如果其流覽器是文字模式的, 那就更免談了). 權宜之計如下:

  1. 一般的流覽器在不知道該如何呈現的時候, 就會自動詢問使用者是否要儲存該檔案. 這時候, 讀者可以將檔案 foo.ps 下載並儲存在自己的磁碟內. 然後再來處理該檔案. 比如說印到紙上, 或是在視窗內預覽. (如果讀者在文字模式的終端機內閱讀網頁, 就必須使用這種方法.)
  2. 如果是在圖形操作環境內使用流覽器, 則可以安裝 GhostScript 和一個可以呈現 PostScript 文件於視窗內的預覽程式, 比如說 ghostview. 然後設定流覽器, 使其知道凡是遇到 PostScript 文件就啟動外掛程式 ghostview 來處理它. 那麼當讀者下載 foo.ps 的時候, 就會自動另啟一個視窗, 而視窗內就由 ghostview 呈現了 foo.ps 的內容. 在 ghostview 裡面, 讀者也可以選擇儲存檔案, 或是列印檔案.
  3. 以 Netscape 在 UNIX 系統上的設定為例, 要做以下事情.
  4. 若是在 MS Windows 95 的環境內, 要安裝 PC 版的 Ghostview 系統以及 GSTool 程式集, 其中有 GSview (或 GSview32) 可以在 MS Windows 95 內預覽 PostScript 文件.

PostScript 數學文件的特性

很顯然地, 如果採用這個方法在 WWW 網頁中呈現數學, 那麼就完全沒有享受到 WWW 的好處. 作者不能在文件中聯結到其他的網頁, 讀者必須使用外掛的程式來閱讀文件, 而文件的品質就要看那外掛程式的功力了.

在 TeX 世界裡, 有人用 \special 的方式寫了巨集程式, 使得 TeX 或 LaTeX 的文件可以有超文的聯結點. 這些聯結點對於文件在使用 TeX 編譯排版的時候, 完全沒有影響. 但是需要使用特殊的 dvips 程式, 再配合特殊的 ghostview 程式, 才能讓讀者享受到超文的好處. 這種解決方案太過局限, 眼看著不會成為一般性的方案; 所以就不多談了. 一般性的解決方案, 應該是要將 PostScript 文件轉換成 PDF 文件. 請參考下面的說明.


Created: May 25, 1997
Last Revised: Jun 28, 1998
© Copyright 1997 Wei-Chang Shann

shann@math.ncu.edu.tw