metapost 是一個可以讓你畫出非常高品質圖形的工具,它是我看過最棒的畫圖工具之一,我的論文都是用它來畫的,之所以選擇它是因為我需要用 tex 打數學式子與中文,如果只是要單純的數學式子不需要中文的話,另一套 ePiX 也是可以考慮看看,它畫出的圖形也是很漂亮。


想學 metapost 當然是先去從李果正先生的果正札記看起是最好的,不過要真的看完其實要花上一段時間的,以下是個小範例,示範如何將自己的資料畫出來,並加上數學式子與中文。

假設我們要畫的資料檔 probvar.d 內容如下:

3 0.621488417939872
4 0.822079842286841
5 0.865450961064564
6 0.91030064070971
7 0.90438639724002
8 0.913750616067028
9 0.926071956628881
10 0.924593395761459
11 0.930507639231148
12 0.936421882700838
13 0.932479053721045
14 0.931000492853623
15 0.924593395761459
16 0.93198620009857
17 0.935929029078364
18 0.94135041892558
19 0.95069033530572
20 0.938856015779093

而我們的 metapost 檔 probvar.mp 內容為:

verbatimtex
%&latex
\documentclass{article}
\usepackage{CJK}
\begin{document}
\begin{CJK}{UTF8}{cwhbc}
etex

input graph

beginfig(1)
draw begingraph(3in,2in);
glabel.lft(btex \vbox{\hbox{觀測值 $Y_{t,B+i}$ 之} \hbox{預測區間覆蓋機率}} etex, OUT);
glabel.bot(btex $t$ etex, OUT);
gdraw "probvar.d" withpen pencircle scaled 1.0pt;
for y=0.6,0.7,0.8,0.9,0.95:
grid.lft(format("%g",y), y) withcolor .85white;
endfor
autogrid(grid.bot,) withcolor .85white;
gdraw "probvar.d" withpen pencircle scaled 1.0pt;
endgraph;
endfig;

verbatimtex
\end{CJK}
\end{document}
etex
end

而要產生圖形就直接呼叫 mpost 來處理:

$ mpost probvar.mp

這個指令會產生 probvar.1 這個檔案,而要轉成 eps 檔的話,我是使用 mps2eps 這隻小 script 來轉檔:

$ mps2eps probvar.1

轉出來的 eps 檔就可以直接用在 LaTeX 或是任何地方了。事實上如果只是簡單圖形用在 TeX 中,可以直接使用 probvar.1 這個檔,不過我之前的經驗是有時候這樣直接加進 TeX 檔中會出錯,尤其是有用到中文的時候,我懶得處理這些麻煩,就直接全部轉成 eps 檔再來使用,一勞永逸。