PostScript 與 Encapsulated PostScript
PostScript 是一種程式語言,最適用於列印影象和文字(無論是在紙、膠片或非物質的 CRT
都可)。用現今的行話講,它是頁面描述語言。它既可以像程式程式碼一樣具有可讀性,又能表示出可任意放大和縮小的向量圖。
Postscript 語言以空格,換行符或水平製表符作為基本分割符,以百分號("%")為註釋開始的標誌,每行註釋在遇到換行符結束,所有的字元都用 ansi
編碼。
Encapsulated PostScript
Encapsulated PostScript 是一種被封裝的 PostScript 格式,簡稱 EPS。它主要包含以下幾個特徵:
(1)EPS 檔案格式又被稱為帶有預檢視象的 PS 格式,它是由一個 PostScript 語言的文字檔案和一個(可選)低解析度的由 PICT
或 TIFF
格式描述的代表像組成。
(2)EPS 檔案格式的“封裝”單位是一個頁面,也就是一個。EPS 檔案只包含一個頁面的描述。這樣,如果有50個頁面的出版物就會產生50個 EPS 檔案。另外要注意:頁面大小可以隨著所儲存的頁面上的物體的整體長方形邊界來決定,所以它既可用來儲存組版軟體中一個標準的頁面大小,也可用來儲存一個獨立大小的物件的矩形區域。
(3)其文字部分同樣既可由 ASCII
字元寫出(這樣生成的檔案較大,但可直接在普通編輯器中修改和檢查),也可以由二進位制數字寫出(生成的檔案小,處理快,但不便修改和檢查)。
(4)EPS 檔案雖然採用向量描述的方法,但亦可容納點陣影象,只是它並非將點陣影象轉換為向量描述,而是將所有畫素資料整體以象素檔案的描述方式儲存。而對於針對象素影象的組版剪裁和輸出控制引數,如輪廓曲線的引數,加網引數和網點形狀,圖象和色塊的顏色裝置特徵檔案(Profile)等,都用 PostScript 語言方式另行儲存。
PostScript 與 Encapsulated PostScript 區別
PostScript 語言能夠用來描述圖形和文字。它既可在傳統的 PostScript(PS) 檔案中來描述多頁的文件,也用於 Encapsulated PostScript(EPS) 檔案中來描述插入文件的圖形。 PS 和 EPS 主要的區別在於:
BoundingBox
Encapsulated PostScript 禁止使用的 PostScript 操作符
由於 EPS 圖形需要和其它物件一起共享頁面,所以 EPS 檔案中不能使用像 選擇頁面大小 ( a4
或 letter
) 和清除整個頁 面 ( erasepage
) 等命令。下面是一些不能在 EPS 檔案中使用的 PostScript 操作符:
a3 | a4 | a5 | banddevice |
---|---|---|---|
clear | cleardictstack | copypage | erasepage |
exitserver | framedevice | grestoreall | initclip |
initgraphics | initmatrix | letter | legal |
note | prenderbands | quit | renderbands |
setdevice | setglobal | setpagedevice | setpageparams |
setsccbatch | setshared | startjob | stop |
儘管下列 PostScript 操作符可以在 EPS 檔案中使用,但是不適當的使用它們極易導致錯誤:
nulldevice | setcolortransfer | setgstate | sethalftone |
---|---|---|---|
setmatrix | setscreen | settransfer | undefinedfont |
上面的一些操作符可能會使 PS 到 EPS 的轉換失敗,另一些則可能導致像 圖形位置錯誤或圖形消失等奇怪的問題。因為這些操作符絕大部分不會影響 到 PostScript 的堆疊,所以,在大多數情況下,簡單的將這些招致問題的操作符 刪除就可解決問題。其它的情形則需要更為複雜的 PostScript 的知識。
The EPS BoundingBox
習慣上,PostScript 檔案的第一行是標明該檔案的型別,接下來的幾行是 被稱為 header 或 preamble 的註釋行 ( PostScript 的註釋符也是 %)。 這些註釋中的一行就定義了 BoundingBox 。BoundingBox 這行有四個整數值, 分別代表:
- BoundingBox 的左下角的 x 座標。
- BoundingBox 的左下角的 y 座標。
- BoundingBox 的右上角的 x 座標。
- BoundingBox 的右上角的 y 座標。
%!PS-Adobe-2.0 EPSF-2.0 %%Creator: gnuplot %%DocumentFonts: Times-Roman %%BoundingBox: 50 50 410 302 %%EndComments 複製程式碼
上面的例子是一個EPS 檔案的前五行, 這個 EPS 圖形的左下角的座標是 (50,50), 右上角的座標是 (410,302)。這裡座標的單位是 PostScript point, 等於 1/72 英寸。這樣上面的這幅圖的自然寬度為 5 英寸, 相應的自然高度為 3.5 英寸。需要注意的是 PostScript point 要比 TEX point (等於 1/72.27 英寸)稍大, 在 TEX 和 LATEX 中,PostScript points 被稱為 big points'' 或簡稱 `bp`, TEX point 被稱為
points'' 或簡稱 pt
。
將 PS 轉換為 EPS
單頁的 PostScript 檔案,如果沒有包含不適當的命令的話,可用下述方法轉為 EPS 檔案並加上 BoundingBox。 由於這些方法 都不檢查非法的 PostScript 操作符,所以只有在被轉換的 PostScript 檔案本身 不含有那些被禁制使用的操作符的情況下,才能得到正確的 EPS 檔案。
- 最方便的是用 GhostScript 裡帶的
ps2epsi
。它可以讀入 PostScript 檔案並計算 BoundingBox 的引數,然後生成一個含有 PostScript 圖形 的 EPS 檔案。 最終得到的 EPS 檔案是 EPSI 格式,即它在檔案的開始部分帶有一個底解析度的預覽點陣圖。因為這個預覽點陣圖是 ASCII編碼 的,使得檔案變大。 - 另一種方法是計算 BoundingBox 的引數,然後把它加到 PostScript 檔案中 或作為插圖命令的引數(比如用
\includegraphics
的bb
方式)。計算 BoundingBox 的方法有以下幾種:
-
用 Ghostview 或 GSview 將 PostScript 圖形開啟,當滑鼠在圖形上移動時就會顯示相應的座標(以頁面的左下角為參照點)。 記下圖形的左下角和右上角的座標就可確定它的 BoundingBox。
-
將 PostScript 圖形列印一份,測量它的左下角和右上角到頁面的左下角 的水平和垂直距離(以英寸為單位),然後乘以
就可得到 它的 BoundingBox。
-
使用
bbfig
。bbfig
是一個指令碼檔案, 它在 PostScript 圖形檔案前面加入一些 PostScript 命令並送往 PostScript 印表機。這時加入的命令會計算 BoundingBox, 然後將結果列印在 PostScript 圖形上面。
應用和學習
Post Script 非常適合製作學術論文插圖,因為在很多頂尖學術期刊要求示意圖必須為向量圖,而 Latex 支援的向量圖一般都是 eps 格式的向量圖。Adobe公司的illustrator和免費軟體Inkscape都支援eps格式向量圖的編輯。公式編輯器MathType,幾何作圖軟體Geogebra,還有強大的科學計算軟體Matlab都支援儲存為eps格式向量圖。因此,如果學會了Post Script語言,可以在它們輸出的向量圖的基礎上加以修改,從而得到更適應論文的插圖,對於寫出高質量的學術論文有重要意義。
學習PostScript語言推薦的書為Adobe公司釋出的Post Script Language Reference Third Edition,這本書可以在公司官網免費下載電子版 。