9.5.7 更多的 METAPOST 的實例
這裡只是簡單的介紹了 METAPOST,實際要用的話,複雜一點的圖形,可能會不太 足夠,Knuth 教授的 The METAFONTbook ,這應該最詳細的資料了,其中有些地方會 和 METAPOST 不一樣,但整個結構上是相同的,可和系統上就有的 mpman.ps 這個 METAPOST 作者 John D. Hobby 寫的使用手冊相互參照就可以清楚不同的地方。
關於 METAPOST 更多的例子,也另請參考 Andr´e Heck 所寫的 Learning METAPOST by Doing 及 Urs Oswald、Vincent Zoonekynd 所舉的實例及其解說,examples.zip 檔是 metapost.html 網頁的原始碼,收錄在 CTAN 中:
http://remote.science.uva.nl/~heck/Courses/mptut.pdf http://www.ursoswald.ch/metapost/tutorial.pdf
http://tex.loria.fr/prod-graph/zoonekynd/metapost/metapost.html ftp://ctan.unsw.edu.au/tex-archive/info/metapost/examples.zip http://www.topology.org/tex/conc/mp/mp.zip
最後一個mp.zip 是 Alan U. Kennington 所著 differential geometry reconstructed: a unified systematic framework 一書中使用 METAPOST 繪圖的實例原始碼。
9.6 圖形的引入
這裡我們使用 graphicx package 來說明,他會自動引入 graphics package,這兩個 pack-age,主要是一些指令的參數用法不同,由於 graphicx 的參數用法彈性較大,而且也和 LATEX 的一些參數的形式較符合,因此,我們就以 graphicx 來說明,引入巨集時就引用 graphicx 就可以了。這一節所說的是外來的圖檔及 METAPOST 圖檔,而非由 picture 環 境或 PSTricks 巨集所繪製的圖檔。
9.6.1 引入外來圖檔的方法
講繪圖工具講了老半天,到底有了圖檔,要如何引進文稿裡頭呢?就是使用 graphicx package 的 \includegraphics 指令:
...
\usepackage{graphicx}
...
\begin{document}
第9 章 圖形的處理 9.6. 圖形的引入
...
\begin{figure} % 進入浮動環境
\includegraphics[選項參數]{圖檔名稱} 的,那要附上延伸檔名,通常是數目字,例如 some-graphic.1,但這在 pdflatex 可能 會有誤認檔案格式的情形發生,所以,要讓他知道這是 METAPOST 所產生的 mps 圖檔。
如果圖檔中有 jpeg/png 圖檔,這在 latex/dvips 是無法處理的,可使用 convert 把他轉 成 eps 格式。在這種情形下,如果要讓 latex/pdflatex 都能正常運作的話,可能要準備 兩種格式(eps/pdf)的圖檔了,然後,圖檔名稱不指定延伸檔名,讓執行程式各取所需。
有時使用圖檔時如果會有無法判斷 BoundingBox 值的情形,在這種情形下,可以使用 dvipdfm 所附的 ebb 這支小工具來產生必要的 BoundingBox 值。
第9 章 圖形的處理 9.6. 圖形的引入
9.6.2 includegraphics 指令的選項參數
我們還沒談到 \includegraphics 選項參數的部份。這個選項參數很多,功能很強大。這 些選項參數可以有多個,各選項間以逗點來分隔,他的值的設定是使用等號(請注意,我 們這裡談的是 graphicx 巨集,而不是 graphics,這在參數使用上不同)。
1. bb
設定圖檔的邊界(bounding box),含四個值,每個值以空白隔開。例如 bb=98 98 468 430,這個意思就是左下角的座標是 (98, 98),而右上角座標是 (468, 430),這 個參考標準是可被印出紙張的左下角為 (0, 0)。請注意,如果沒有指定單位的話,那 預設是 bp。而且,這個設定在 pdflatex 會不被接受,此時請改使用 trim 選項參 數。
通常,這是會加上 clip 參數,作用是在修剪引入的圖檔的四周,但不是很好控制,
所以建議圖檔由圖形處理或轉換程式去處理過後再引入會比較好控制。不加 clip 參 數,加個星號 \includegraphics* 作用是一樣的。
一般如果是 eps/ps 檔,可以使用編輯器去修改他的 BoundingBox 值,無需用到這 些不好控制的參數,如何抓到座標值呢?使用 gv 或 gsview 把圖檔載入後,將游標 置於圖中所要的位置,這些軟體就會顯示所在處的座標,然後就可以依自己需要去 修改他了。
2. clip
修剪圖的四周指定的邊緣。
3. trim
作用和 bb 一樣,也是四個參數,但這裡指的是要去除的部份長度值,而非相對於左 下角的相對座標。這個參數可以用在 pdflatex。例如:
\includegraphics[trim=7 7 7 7, clip]{some}
這會除去 some 這個圖檔的四周 7bp 的寬度。請注意,圖檔盡量不要加延伸檔名,
讓系統自己去判斷,這樣文稿會比較有彈性。
4. angle
旋轉的角度。旋轉指的是逆時針的方向轉的,除非使用負數的角度。
5. orgin
旋轉的中心點。
第9 章 圖形的處理 9.6. 圖形的引入
6. width
這是指圖形的寬度,會自動伸縮調整,長度亦會等比例調整。
7. height
這是指圖形的高度,會自動伸縮調整,寬度亦會等比例調整。
8. totalheight
這是指圖形的總高度,即 height 再加上 depth 的值。會自動伸縮調整,寬度亦會等 比例調整。
9. scale
按一定比例縮放,這沒有單位,這是縮放倍數。
9.6.3 指定圖檔的搜尋路徑
如果圖檔很多,一個比較方便的方法就是在目前工作目錄下,新開一個子目錄來專門置放 圖檔,這樣在文件的維護上也會比較好維護。他的語法如下:
\graphicspath{{路徑一}{路徑二}{路徑三}...}
\graphicspath{{images/}} % 縱使只有一個子目錄,也不可省略大括號
\graphicspath{{:images:}} % Mac 系統的表示法
LATEX 系統預設找圖檔的路徑是 TEX 預設會去找的路徑及目前的工作目錄(通常目前的 工作目錄會先找)。或者,也可以修改 TEXINPUTS 變數的值(會較有效率,也較省記憶 體),例如,以 unix-like 系統下的 sh shell 為例:
TEXINPUTS = "images/:" ; export TEXINPUTS
這樣會首先搜尋目前工作目錄下的 images 這個子目錄,找不到的話,才會去 TEX 預設的 搜尋目錄去找,這樣一來就會很有效率,而且會較省記憶體。所以,這個方法比較建議使 用。
當然,也可以直接在 \includegraphics{} 的參數裡頭就直接把路徑寫進去,但這是最不 建議的方法,不管效率或是文稿可攜性都會很差。
9.6.4 圖文的旋轉
我們常常會需要某些圖文在特別的情況下旋轉一下,\rotatebox 這個指令,其實我們前 面舉的例子當中就曾使用過,我們現在來看看詳細的使用方法:
第9 章 圖形的處理 9.6. 圖形的引入
\rotatebox[選項參數]{角度}{圖文物件}
角度和 \includegraphics 的 angle 選項參數一樣,但使用方法則簡化了,直接寫上數值 即可,當然預設是逆時針方向旋轉。選項參數的部份可以有三個小選項:
1. origin
設定旋轉中心點的位置,可以使用lrctbB 或其中兩個的組合,其中 B 代表的是基線
(baseline),其他的依其英文字母就可理解他的意義,如 t 是 top,r 是 right,c 是 center。預設的位置是左下角,文字的話,則是左下角的參考點(reference point),旋轉就是以此點所構成的的軸心線來轉的。
2. x, y
這是以左下角為原點,直接設座標,來表示 origin 所能表現的更精確中心點位置。
3. units
設定旋轉的特殊弧度。其中 units=-360,這樣會把預設的逆時針旋轉,變成順時針 旋轉。
旋轉不限於簡單的圖文物件,甚至一整個表格、圖形環境都可以拿來轉。要注意的是,編 譯成 *.dvi 檔的話,有可能 dvi viewer 會不支援旋轉效果的解讀,此時要把他由 dvips 來轉成 ps 檔,或直接使用 pdflatex 編譯成 pdf 檔,再來預視。
9.6.5 圖文的縮放及延展
1. \scalebox{水平縮放倍數}[垂直縮放倍數]{圖文物件}
垂直縮放倍數可以省略,省略時代表等於水平縮放倍數。
2. \reflectbox{圖文物件}
這其實是 \scalebox{-1}[1]{圖文物件} 的意思,會得到鏡射的效果。
3. \resizebox{寬度}{高度}{圖文物件}
\resizebox*{寬度}{總高度}{圖文物件}
這是在改變原圖文物件的大小。寬高使用 ! 代替的話,會依另一個值做同比例的改 變。如果加個星號,如 \resizebox*{}{}{},他的作用是會把深度(depth,基線以 下的稱為深度,基線以上的稱為高度 height,兩者之和稱為總高度,totalheight)也 考慮進去,否則只考慮高度,但深度不一定會有,這時 height 就等於 totalheight。
基線、深度等術語的意義,請複習一下第 3.3.1 小節,頁 14。
第9 章 圖形的處理 9.6. 圖形的引入
我們在表格及圖形的章節裡花了比重不少的篇幅,主要的用意是想打破 LATEX 所能使用領 域的刻板印象,個人還覺得這些內容實在還不夠,但要硬塞入這篇入門級的文件,已經不 恰當,時間、能力允許的話,希望將來有機會另外專文來做更詳細一點的介紹。
第 10 章 數學排版
好啦!這章是 LATEX 的拿手把戲了。就讓我們就來見識一下 LATEX 的威力吧!光這一章的 內容就可以寫一本厚厚的書了,所以,只能點到為止,先小酌一番。這一章的內容,他們 排版精確性,以 PDF 格式的內容為準,HTML 格式的內容,僅供參考。
對於較複雜的數學式子,除非是自行定義巨集,否則 LATEX 內建所提供的排版數學式子的 能力可能會有不足,這時可以使用美國數學協會所開發的 AMS-LATEX 巨集套件,目前所 有的 TEX 發行版本應該都會附上,而且也會附上另一套 AMSFonts 巨集套件及其字型。
這個套件的使用,這裡並不做詳細的說明,只在必要的時候附帶提及,可以另外參考系統 上所附的 amsldoc.dvi 文件及 The LATEX Companion 這本書第八章,這個部份網路上可 以抓得到,檔名是 ch8.pdf,CTAN 有收錄:
http://www.ctan.org/tex-archive/info/companion-rev/ch8.pdf