2013年9月9日 星期一

發現 PSTricks 好物

自從發現我電腦裡面有好用的 TeX 套件「圖書館」之後,我偶而就稍微看看裡面有什麼東西。當我在找尋畫甘特圖的套件庫時,無意間發現了 PSTricks 提供了好多繪圖套件呀!

當時,我並不清楚 PSTricks 是什麼東西,後來稍微研究一下,才發現 PSTricks 真是個好物呀!簡單來說,PSTricks 是一個繪圖套件,它提供一些命令巨集(例如: 畫點、畫線、塗色...等等),當你使用這些命令後,編譯文件的時候,PSTricks 會幫你把它轉換成 PostScript 的繪圖語言,這樣文件中就會出現圖案啦!

路人:這算什麼好物?都什麼年代了,哪裡還需要用輸入命令來畫圖?(不屑中...)

ㄜ, 我一開始的確是這麼想的啦! 只不過當我看到官方網站 PSTricks 的 Package List 的時候,突然....眼睛一亮...


咦?怎麼會跟光學系統有關?還跟示波器有關?這是什麼東西?點進去一看,嚇了我一大跳。原來這三個套件,可以讓我只用幾行程式碼,就畫出光學系統的架構圖、光學成像系統、甚至是畫出模擬示波器螢幕看到的波型。

直接來看些範例比較能了解這些套件能畫什麼東西?程式碼大概多長?
以下以子標題開頭的英文,即是套件名稱。有的圖沒有附程式碼,可能是程式碼在說明文件中分屬2頁或是過長,我就沒有放入程式碼了。

pst-optexp  畫光學系統架構用

光柵分光

光通訊系統

光柵分光

用於發表論文上的圖

pst-optic 繪製透鏡、反射鏡、成像系統

薄透鏡成像

放大鏡 (右側那個眼睛,用一個命令就畫完了!)

球面鏡反射光

厚透鏡成像

pst-osci 繪製示波器面板及波型


還能夠畫 Lissa Jous 模式的圖形

方波、鋸齒波也都能畫

上面這三個套件是跟我所學的比較相關。但我發現 PSTricks 還支援很多科學, 數學, 資料繪圖, 以下就列出幾個令我印象較深刻的套件。

pst-diffraction 繞射光學

這個套件可以畫出方孔、圓孔、三角形孔的繞射光強度模擬圖

pst-circ 電子學/電路學

這個套件適合繪製分析用的電路圖

pst-electricfield 繪製電場分佈圖


pst-magneticfield 繪製磁場分佈圖


亥姆霍茲線圈的磁場分佈

pst-labo 化學實驗儀器

這個對於需要用繪圖紀錄實驗步驟的人來說真的很方便。
不同樣式的燒瓶

傾斜角度不同, 但都自動畫出水平的液面!

集氣瓶?

滴定管

蒸餾瓶


pst-spectra 繪製光譜圖

這個套件很酷,根據 NASA 的資料庫建立的。直接給命令,看是要畫連續光譜, 吸收光譜, 還是發射光譜都可以。而且可以畫出元素表中的 99 元素的光譜線。
(下圖連續光譜中似乎有無數條白細線,這跟 PDF 閱讀器有關,如果放大 PDF 頁面來看白線就消失了)
汞原子的發射光譜

氫原子光譜。程式碼只有一行! 上面是吸收光譜,下面是發射光譜。

pst-pully 繪製滑輪系統

程式碼只有一行而已。改變 N 的參數就會畫出不同的滑輪系統。N=0 會畫出定滑輪。

pst-geo 2D 或 3D 地圖 (只有法文說明文件)

3D 的地圖
2D 地圖, 支援不同投影法畫出的地圖

pst-solarsystem 繪製太陽系行星的相對位置

給定一個特定時間,繪製出當時各行星的相對位置。
只有靠近太陽的4顆星的大小、距離是按比例的,木星、土星大小與距離沒有按比例,但是方向是正確的。

pst-barcode 繪製1維或2維條碼

1 維條碼

不只有 QR Code, 還有其他如 Data Matrix, 2D Maxi Code 等其他種類的2維條碼。

pst-calendar 畫日曆



pst-knot 繩結


結論

我光是看到畫出透鏡成像系統那張圖,我就決定要學會怎麼運用這個套件,因為實在太方便了。當我練習一陣子之後,發現寫程式碼畫圖,有的時候真的比用互動式的繪圖方法 (例如 Inkscape) 好用多了。
尤其是如果用互動式畫圖常常須要做「對齊」「放置標籤」「寫數學式」「畫平行線」等操做,這樣寫程式碼繪圖真的能夠節省時間。因為程式碼必須精準的給出座標,畫圖的時候想不對齊都難了。


下一篇我再來說明如何在 LyX 文件中使用 PSTricks 及其套件。但在真正使用 PSTricks 之前,還要補充一下,其實 TeX 系統中不只有 PSTricks 這套繪圖語言,還有另外一套稱為 PGF/TikZ 的繪圖語言。在繪製非正規甘特圖的那篇文章,我用的就是 PGF/TikZ 的繪圖套件。

PGF/TikZ 語言發明的比較晚,所以目前現成的套件庫沒有 PSTricks 來的多,但我還是看到一個繪製數位電路時序的 tikz-timing 套件是個滿實用的套件!(如下圖)

PGF/TikZ 支援 pdfLaTeX 編譯方法, 也就是在 LyX 內,以 PGF/TikZ 的方式繪圖, 可以直接按 Ctrl-R 編譯成 PDF 文件觀看。但是 PSTricks 只支援 PostScript 的方式生成圖形,在 LyX 中就必須按 Ctrl-T, 將文件生成 .ps 的檔案之後,再轉成 PDF 才行了。

總之,在 LaTeX 中繪圖不是這麼難的事情,我想大家應該可以多多嘗試看看,需要的時候就可以派上用場了!





參考網站:

沒有留言:

張貼留言