• 沒有找到結果。

picture 環境

在文檔中 大家來學 (頁 106-112)

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 的置放位置的選項參數。

在文檔中 大家來學 (頁 106-112)