標籤:

學習 MetaPost 和 TikZ 這一類的 LaTeX 繪圖工具有價值嗎?


  • 繪圖工具很多,不同的圖形有不同的自然表達方式。用專門為特定問題設計的合適的繪圖工具來畫圖,通常效果最好,效率也高。所以在可能的情況下,我們盡量用適合問題的工具。
  • 另一方面,使用你熟悉的工具效率也高。所以在可能的情況下,我們盡量用自己熟悉的工具。
  • 人的精力是有限的,學習和熟悉工具也需要時間。所以在可能的情況下,我們希望少學新工具或者只學簡單的工具。

這幾條道理很簡單,除了繪圖工具在很多地方也都是一樣的道理。可惜這幾個原則是有衝突的,越專門的工具越得多學幾樣才能應付工作,越通用的工具使用起來相對越不方便,學的工具越少就對工具越不熟悉,往往如此。 所以,你需要對你自己要做的事情,要花的精力有個充分的估計。然後取個好的折衷。

換句話說,你了解你自己要畫的圖形和不同工具適合畫的圖形,挑選適合自己的工具。

TikZ 與 MetaPost 都是代碼作圖工具,適合畫能用坐標表示的精確圖形。不過二者也有差別。

MetaPost 脫胎於字體設計語言 MetaFont,其語法可以用相對直觀的方式精確描述 Bézier 曲線,又自帶語法方便的線性方程求解功能、圖形的線性變換功能,因而有很強的二維曲線造型功能;同時又有宏定義、循環、分支等程序結構,可以表達較複雜的數學圖形;同時可以插入 TeX 代碼的文字、公式。所以用 MetaPost 來畫有數學描述的、數值或半數值化的、有 TeX 公式的曲線或直線圖是最適合的,在一些已有的宏支持下也適合數據結構圖。舉個例子的話,比如說,L-system 定義的分形曲線,集合論裡面的 Venn 圖,正十七邊形或五角星,射影幾何裡面 Desargues 定理的配圖,計算機科學中的 B+ 樹,都挺合適。

TikZ 是由 TeX 宏編寫的宏包,抽象掉底層 pdfTeX 這樣的引擎或 Dvips、dvipdfmx 這樣的輸出驅動來完成實際的繪圖工作。在功能上借鑒 PSTricks,在語法上也部分借鑒 MetaPost。由於 TeX 宏本身的限制,TikZ 在曲線造型、數值計算、複雜數據結構組織上,雖然也能做,但效率比較低;優勢是開發比較深入,預定義的功能多,能直接用的包比較多,作為宏包與 TeX 結合也最緊密。適合畫簡單的小符號,數據結構圖,計算量不太大的數學圖形等。適合做的圖形與 MetaPost 有不少重疊的,比如集合論的 Venn 圖,正十七邊形或五角星,簡單流程圖,數據結構圖;也包括自己獨有優勢的如數學符號標記,圖表標註,數學交換圖等。現在在 luatex 的幫助下也能完成一些複雜計算,比如複雜函數圖,圖可視化。

所以,如果你要畫的圖形與工具擅長的方面一致,又畫的比較多肯花時間熟悉,那學這些東西就有用。


會一種稱手的矢量繪圖工具就好了,無論是基於GUI,還是基於script。metapost和tikz以及一切程序類語言的優點在於可以繪製精確的幾何圖形,但調整效果會沒那麼直觀,需要調試-&>編譯-&>調試-&>編譯-&>…

另外,metapost和tikz和latex很好的協作能力,對於latex控還是很有吸引力的。

我現在用tikz,熟練的部分直接編腳本,然後用ktikz邊改邊看效果。為防止嵌入到latex中拖慢編譯速度,於是單獨寫了個將tikz代碼轉成pdf的腳本。

https://raw.githubusercontent.com/pkuwwt/code-collections/master/shell/pgf2pdf


推薦閱讀:

LaTeX 如何進行 debug?
LaTeX 命令的可選參數不能有方括弧么?
表示內積時,應該選擇leftlangle, left< 和 langle 中的哪一個?
有啥辦法能讓listings去檢查源代碼是不是和tex文件里一樣,而不是直接把那幾行input進來?
TeX Live 2015 有哪些值得關注的新特性?

TAG:LaTeX |