1. ImageMagick
我們主要是使用這個軟體中的一個工具:convert,他是個功能非常強大的圖檔轉 換程式,但主是用在點陣圖,縱使轉成向量圖也不是真正的向量圖,只是把點陣圖 wrap 進向量圖檔裡頭而已,放大時仍然會有鋸齒狀。他的網站在:
http://www.imagemagick.org/
2. netpbm
這是許多圖檔轉換的小工具所組成的圖檔轉換工具組,主要是用在點陣圖的轉換。
他的網站在:
http://netpbm.sourceforge.net/
3. pstoedit
這是真正各種向量圖格式之間的轉換工具。向量圖的轉換,主要是利於編修,例如 eps/pdf 圖檔要直接編修的話,一般工具會有困難,如果我們轉換成 fig 圖檔,然後 再交給 xfig 去編修;或轉成 METAPOST 原始碼,使用編輯器進行編修,完成後再 轉回 eps/pdf,這樣就很方便了。他的網站在:
http://www.pstoedit.net/pstoedit/
4. ps2eps
通常我們手上的圖檔不一定是 eps,而是一般的 ps,也就是說除了真正圖的部份 外,尚有一些空白在圖的四周,這代表裡頭的邊界(BoundingBox)沒有定好,這 樣引入圖檔的時候,除非另做其他處理,不然的話,連原圖周圍的不必要空白也會 引進文稿裡去,通常我們只是想要有圖的部份,這時可以將這個 ps 檔經由 ps2eps 處理過,去除不必要的空白。這個程式的作者是 Roland Bless,使用 perl 所寫一個 很實用的小工具,在 Windows 系統的話,只要有安裝 perl 及 GhostScript 也可以使 用,作者也提供了一個 ps2eps.bat 批次檔供使用。他的網站在:
http://www.ipv6.tm.uka.de/~bless/ps2eps
系統上安裝 Ghostscript 的話,他也會附上一個 ps2epsi,這個工具也可以利用,但 有時會算錯 BoundingBox 就是了。
9.3 picture 環境
由於這是 LATEX 內建的繪圖環境,最能配合 LATEX 原來的語法及版面配置,因此我們多花 一點時間研究,使用時請另外引入 epic package,這樣可使用多一些繪圖功能。要注意的
第9 章 圖形的處理 9.3. PICTURE環境
是,LATEX 的 picture 環境,和座標息息相關,所以,繪圖之前一定腦海裡要有個座標圖 來定位,而且要有相對長度的想像。
9.3.1 進入 picture 環境
進入 picture 環境的方式就像進入其他的環境一樣,但他要指定圖形物件的大小:
...
\usepackage{epic}
...
\begin{document}
...
\begin{picture}(寬, 高)(參考原點) % 進入圖形模式
這裡下繪圖指令,形成一個或多個圖形物件,也可以寫入一般文字 讓 latex 去排版。
\end{picture}
...
\end{document}
指定長、寬等度量時,可以加上單位,如果不加單位,事先也沒有指定使用單位,那就 是以 pt 為單位,(寬, 高) 是不能省略的,這在座標圖上,就是建立了左下角 (0, 0) 至右 上角 (寬, 高) 的參考座標系。(參考原點) 指的是左下角的原點平移至這個位置,往後就 以這個點為原點,這個可以省略,省略的話,原點位置就是 (0, 0)。通常我們都會在進入 picture 環境前先加以指定好單位,例如:
...
\unitlenght=1mm % 指定 picture 環境內的度量單位為 mm
\begin{picture}(50, 50) % 要進入 picture 環境前指定 ...
這樣在 picture 環境裡頭就無需使用單位,直接寫數字就可以了,而單位就是 mm。
9.3.2 picture 環境的繪圖指令
在繪製任何線條之前,我們通常會指定開始的位置,否則通通會從(參考)原點開始畫 起。原則上,picture 環境內,有方向性的圖形物件的參考原點,例如直線、箭頭直線,
他的移動方式,在繪製了圖形物件後,如果不再指定起始點,那麼,x 軸的位置會平移過 去,但 y 軸的位置則維持在原點的位置,這樣說有點抽象,只有請大家試著去畫看看才能 體會了,但最好就是指定好各個圖形物件的起始位置,才不容易搞錯。
第9 章 圖形的處理 9.3. PICTURE環境
1. \put(啟始座標){圖形物件}
將圖形物件置於啟始座標。這個圖形物件也就是 picture 環境的繪圖指令,也可以 是一般的文字敘述,如果是文字,那麼會依 LATEX 的排版方式來顯現,在這篇文章 裡頭,有時也會稱為「圖文物件」。
2. \line(向量座標){長度}
以參考原點和向量座標所構成的斜率畫指定長度的直線。不過,LATEX 的這個畫直線 的指令,有其限制:
(a) 兩座標值必需互質。
(b) 座標值要在 −6 和 +6 之間的整數。
(b) 座標值必需為整數。
所以,實際上只能畫出 25 種斜率的直線,超過這個限制的直線,只能使用較複雜的
\qbezier 指令來畫出來。
3. \vector(向量座標){長度}
和 \line 指令的作用及使用方法相同,但限制更嚴格,座標值要在 −4 和 +4 之 間,和 \line 不同的是向量方向的那一端會多了個箭頭符號。直線和箭頭直線,他 們的參考起啟點如果沒有另行指定,那 x 軸的值是會連續的,也就是說畫了一條直 線後,再接著畫另一條直線,那他的 x 軸起啟點是由前一條直線的終點開始,但 y 軸的值則沒有這個特性。
4. \circle{半徑}
畫圓指令。請注意,如沒有使用 \put,則圓心是在原點。如果是使用 \circle*{半 徑} 則是實心的圓,常常用來畫某個粗點。由於圓是以圓心為參考點,並沒有方向 性,所以,並不像直線一樣,x 軸的位置會平移,仍然會以原來的原點為圓心。但如 果前面有直線,那麼圓心的位置會受前一個直線影響,也就是說圓心的 x 軸位置會 是前一條直線的終點的位置,當然,y 軸的位置不會受其影響,正圓及橢圓都是一 樣。
5. \oval{寬,高}[顯示部份]
畫橢圓。「顯示部份」指的是要畫上半部(t),或是畫下半部(b),或是畫左下 半部(bl),依此類推。不管是否完全畫出,圓心仍然是位在完整畫出時的圓心位 置。
6. \qbezier[曲線總點數]{起點座標}{控制點座標}{終點座標}
畫 quadratic B´ezier 曲線。其中的「曲線總點數」,代表整條曲線的總點數,有指定
第9 章 圖形的處理 9.3. PICTURE環境
的話,曲線會變成虛線,不指定的話是實線,至於什麼是控制點(control point),
他可以控制曲線的弧度,可由數學運算計算出來。有興趣的話,請參考:
http://www.ursoswald.ch/metapost/tutorial/BezierDoc/BezierDoc.pdf 7. \thicklines
指定用較粗的線條,無需接任何參數。使用 \thinklines 可還原為預設值。
8. \thinklines
指定用較細的線條,這是預設的線條組細大小,亦無需接任何參數。
9. \linethickness{粗細單位}
指定線條的預設粗細。
10. \framebox(寬, 高)[框內位置]{圖文物件}
畫實線框。所謂的「框內位置」可有 t, b, l, r, s,表示圖文物件置放於方框中 的位置。
11. \dashbox{虛線線段長度}(寬, 高)[框內位置]{圖文物件}
畫虛線框。
9.3.3 簡化座標位置
選定一個座標定點,我們可以使用 \put(座標) 的方式來指定,但如果是有規律性重複出 現的圖形物件,這樣一個一個指定,不僅很煩,而且也較耗記憶體,計算也會比較慢。這 時可以使用 \multiput 指令,他的語法如下:
\multiput(起啟座標)(座標遞增值){重複次數}{圖形物件}
這裡舉一個例子,畫一個有格子的座標系:
% example25.tex
\documentclass{article}
\usepackage{epic}
\parindent=0pt
\begin{document}
\unitlength=1mm
\begin{picture}(80, 60)
\multiput(5, 0)(5, 0){15}{\line(0, 1){60}} % 畫 15 條直線,每隔 5mm 一條
\multiput(0, 5)(0, 5){11}{\line(1, 0){80}} % 畫 11 條橫線,每隔 5mm 一條
\thicklines
\put(0, 0){\vector(0, 1){60}} % 畫 y 軸
第9 章 圖形的處理 9.3. PICTURE環境
\put(0, 0){\vector(1, 0){80}} % 畫 x 軸
\put(0, 0){\circle*{1}} % 畫圓點,實心粗點
\put(-5, -5){$O(0, 0)$} % 標上原點的座標
\put(-5, 60){$y$} % 標上 y 軸字樣
\put(80, -5){$x$} % 標上 x 軸字樣
\end{picture}
\end{document}
我們來看看這個 multiput 到底做了些什麼事:
\multiput(5, 0)(5, 0){15}{\line(0, 1){60}}
第一個座標 (5, 0) 是啟始座標,接著的 (5, 0) 是遞增值,也就是說 (5, 0), (10, 0), (15, 0). . . (75, 0) 會畫後面所接的圖形物件,也就是畫長度為 60mm 的垂直線 15 次。由於我們 在 x 軸及 y 軸是另外畫帶有箭頭的直線,因此,縱橫軸的部份可以少畫一條直線。x 軸為 0 的 \line 就是在畫垂直線,y 軸為 0 的則是在畫水平線。試想想看,這些線條如果要由
\put 指令一個一個畫上去的話,會有多煩!
畫這些除了練習外,主要是給初接觸 picture 環境的朋友一個建議,那就是把方格子畫 上去,有利於繪圖時找位置,等真正要畫的圖畫好了,再把方格子拿掉。編譯好的例子如 下:
http://edt1023.sayya.org/tex/latex123/example25.tex http://edt1023.sayya.org/tex/latex123/example25.pdf
另外一個簡化座標的方式,就是使用 \shortstack 指令,他的語法如下:
\shortstack[位置]{圖文物件}
這會像疊羅漢一樣的把「圖文物件」疊在一個欄位內,和疊羅漢不同的是,後進的疊在最 下面,先進的會被往上堆高,底部的基準線是固定的,高度則是往上增高,各圖文物件由 換行符號來換行,也就是說可以由換行符號來決定他們之間的間隔。當然,這要自行注意 他的高度,否則會和其上的其他內容重疊。「位置」可為 l, r, c 之一,是指居中,或靠 這個欄位的左右邊的意思。
\shortstack 的一個特殊的運用,就是在座標圖上標註縱軸的文字,但這通常是用在中 文,因為,一般的慣例,縱軸的說明文,英文的話是沿縱軸由下往上寫,中文的話是由上 往下寫。我們把 example25 標上中文,實際要加入的內容為:
...
\put(-7, 20){\shortstack{這\\[-2pt]裡\\[-2pt]是\\[-2pt]縱\\[-2pt]軸}}
\put(30, -6){這裡是橫軸}
...
第9 章 圖形的處理 9.3. PICTURE環境
從這裡,我們也可以發現,把格子畫出來,對於繪圖或加入說明文字時的定位非常方便。
請注意,這個例子使用了 CJK 環境,要使用 bg5latex 來編譯。編譯好的例子如下:
http://edt1023.sayya.org/tex/latex123/example26.tex http://edt1023.sayya.org/tex/latex123/example26.pdf
當然,這樣一來,字間距也得手動去調整了,理想的話是應該將中文字旋轉才比較能符合 原來的字間距,意即,橫排時的字間距和行間距,在直排的時候,兩者要互換過來,但是 這樣一來,會造成中文是沿著縱軸往上寫的情形,這就不符合慣例了,但這剛好常常用在 中英文混合的說明文場合,中英文混合時,是按英文的慣例,沿著縱軸由下往上寫,我們 將 example26 修改一下:
...
\put(-7, 20){\rotatebox{90}{這裡是 $y$ $axis$}}
\put(30, -6){這裡是 $x$ $axis$}
...
請注意,數學式子中的額外空白通常會被忽略。編譯好的例子如下:
http://edt1023.sayya.org/tex/latex123/example27.tex http://edt1023.sayya.org/tex/latex123/example27.pdf
如何恰當的使用,就請大家視需要去調整、運用了。我們甚至可以更進一步的把各別的中 文字去分別旋轉後再排上去,而且,通常圖表的說明文字會比正文小一號,就請大家動手 練習一下囉!這個 \rotatebox 指令,我們還沒有學到,會在第 9.6.4 小節,頁 122 裡說 明。
請將以上所談到的指令,一一去試著畫幾次,大概就能體會出 picture 環境如何畫圖了。
9.3.4 epic 巨集延伸的指令與環境
以下是 epic 所擴充的指令,和 picture 環境配合的話,會使繪圖更得心應手。
1. \multiputlist(起啟座標)(座標遞增值)[tbrl]{物件1, 物件2· · · }
\multiput 是針對同一個圖形物件按規律性來置放,這個指令則是針對,不同的圖 物形物件按規律性來置放。他是把所有的物件置放在一個 box 中去排列,因此會有 tbrl 的置放位置的選項參數。
\multiput 是針對同一個圖形物件按規律性來置放,這個指令則是針對,不同的圖 物形物件按規律性來置放。他是把所有的物件置放在一個 box 中去排列,因此會有 tbrl 的置放位置的選項參數。