很多年前接觸過一點(diǎn)Asymptote矢量圖語(yǔ)言,但是不如現(xiàn)成的分子結(jié)構(gòu)程序方便,于是就壓箱子底下了。最近突然把Asymptote又拿出來(lái),主要有以下幾個(gè)原因:
1,顯示分子的振動(dòng)模式。雖然不少程序都可以做,但是如果遇到高對(duì)稱分子,振動(dòng)矢量的箭頭往往和分子鍵重合在一起。稍微好點(diǎn)的程序,允許把分子鍵設(shè)定得非常細(xì),雖然振動(dòng)箭頭突出了,但是卻很難看。而且箭頭的控制參數(shù)太少。例如下面這個(gè)圖,已經(jīng)是能得到的最好結(jié)果了
![用Asymptote產(chǎn)生3D PDF格式的分子結(jié)構(gòu)圖]()
2,能夠顯示振動(dòng)模式的程序一般都是針對(duì)特定數(shù)據(jù)格式設(shè)計(jì)的(例如Gaussian的輸出,fchk文件),在其他程序里照抄這些格式是不可能的。比較簡(jiǎn)單,又被廣泛接受的振動(dòng)模式數(shù)據(jù)格式,大概只有MOLDEN頻率文件了。但是能夠讀MOLDEN文件的程序很少,更何況振動(dòng)模式的顯示效果不好。
3,需要用腳本批量產(chǎn)生一堆結(jié)構(gòu)圖(可能幾十個(gè)甚至上百個(gè)),比如做動(dòng)畫。如果用鼠標(biāo)逐個(gè)去操作,會(huì)累死人的。
4,產(chǎn)生真3D的PDF文件。用免費(fèi)程序Jamberoo/VMD/Pymol也可以做。
經(jīng)過幾天的學(xué)習(xí),以及參考別人的例子,上面的問題用Asymptote很快就得到解決。
(一)Asymptote的安裝
在Windows下安裝
Asymptote需要大量的Latex編譯工具和宏包支持。如果你對(duì)此不太了解,比較省事的一種辦法,是去下載最新的CTeX
http://www.ctex.org/CTeXDownload
然后安裝CTeX。
由于CTeX已經(jīng)兩年多沒有升級(jí),有些宏包和最新的Asymptote有沖突,需要升級(jí)到最新版(在下一個(gè)CTeX發(fā)布版可能就不需要這一步了):打開CTeX中的WinEdt程序,在TeX菜單中找到MiKTeX/Update Wizard,找到以下幾個(gè)宏包,把它們升級(jí)到最新:babel,media9,l3experimental(第一個(gè)字符是字母,不是數(shù)字。琹3kernel,l3packages。注意:第一次升級(jí)可能會(huì)安裝一些重要的宏包,用戶指定的那些宏包會(huì)被忽略,因此可能要多次進(jìn)行升級(jí)操作。
接下來(lái)到Asymptote主頁(yè)http://asymptote.sourceforge.net/
下載并安裝最新版Asymptote,然后就可以用了。
在Linux下安裝
最好在版本比較新的主流Linux系統(tǒng),并且自己有管理員權(quán)限的計(jì)算機(jī)上安裝。大型服務(wù)器不是庫(kù)函數(shù)版本低就是缺東西,盡量別在上面裝。我用的是Ubuntu,運(yùn)行以下命令
sudo apt-get install asymptote
然后輸入密碼,接下來(lái)等著系統(tǒng)自動(dòng)下載和安裝Asymptote。
在MacOSX下安裝
目前不提供二進(jìn)制的可執(zhí)行程序。需要編譯源代碼,很簡(jiǎn)單。
(二)Asymptote學(xué)習(xí)資料
除了Asymptote主頁(yè)上的使用手冊(cè)外,有以下中文資料可以參考:
三個(gè)比較早的教程
https://code.google.com/p/asy4cn/
莫圖寫的Asymptote 作圖指南,時(shí)間也比較早了
http://bbs.ctex.org/forum.php?mod=viewthread&tid=44559&extra=page%3D1
asymptote 經(jīng)驗(yàn)筆記
http://bbs.ctex.org/forum.php?mod=viewthread&tid=76552&extra=page%3D1
遇到問題,除了在Asymptote的英文官方論壇求助外,也可以去ctex.org的TeX 圖形技術(shù)版去討論:
http://bbs.ctex.org/forum.php?mod=forumdisplay&fid=51&page=1
(三)一個(gè)Asymptote程序
Asymptote的語(yǔ)法和格式有點(diǎn)類似于c或c++程序。
以下是一些用到的命令: 調(diào)用3D模塊 調(diào)用顏色庫(kù)模塊 定義一個(gè)實(shí)變量。 Rbond是自己起的名字,設(shè)定分子的鍵長(zhǎng)。注意Asymptote并不知道波爾、埃這些長(zhǎng)度單位,而是使用數(shù)據(jù)點(diǎn)單位。我們可以假定206代表了2.06埃。 定義一個(gè)三元數(shù)組。atom1是自己起的名字,表示第一個(gè)原子的直角坐標(biāo)。 定義第二個(gè)原子的坐標(biāo),等于第一個(gè)原子在Z方向做位移。Z是系統(tǒng)變量。 定義一個(gè)球面代表原子,這里是氙。unitsphere函數(shù)定義了系統(tǒng)內(nèi)置的單位球。scale3函數(shù)把球縮放。surface命令表示把這樣的一個(gè)曲面賦值給xe_atm,默認(rèn)有光照效果。 畫一個(gè)xe_atm變量所定義的原子,位置由atom1定義,顏色為淺藍(lán)。lightblue是x11colors模塊內(nèi)定的顏色變量。 畫一條線,連接兩個(gè)點(diǎn)atom1和atom2,用來(lái)表示分子鍵。鍵的顏色是淺灰(mediumgray),linewidth定義鍵的粗細(xì)。為了更好地顯示振動(dòng)模式,這里把分子鍵設(shè)為半透明,用opacity定義。最后一個(gè)參數(shù)currentlight是可選的,用于打開光照效果,draw默認(rèn)沒有光照效果。在3D情況下,Asymptote可以自動(dòng)計(jì)算原子球和分子鍵相交位置的曲線,用戶不用操心。 label命令用于給圖形添加符號(hào)。在引號(hào)中可以使用Latex語(yǔ)法,因此可以在圖中添加復(fù)雜的數(shù)學(xué)公式,這是大多數(shù)分子模型程序做不到的。符號(hào)的位置在atom1。c_align是我們自定義的一個(gè)位移變量,把符號(hào)從atom1移動(dòng)一點(diǎn),否則符號(hào)會(huì)被原子球包住,什么也看不到。 畫一條線(在這里表示箭桿),起始點(diǎn)的位置分別是atom1和atom1+lmod1。red定義了顏色,是可選的。size_shaft是我們自己定義的箭桿粗細(xì)。Arrow3函數(shù)用來(lái)給箭桿的終點(diǎn)添加3D箭頭,所帶的兩個(gè)參數(shù)是可選的,分別定義箭頭的長(zhǎng)度和寬度。currentlight給箭頭、箭桿添加光照效果,是可選的。
完整的代碼如下: 如果經(jīng)常用Asymptote顯示分子,可以把一些常用的命令做成宏,使代碼更簡(jiǎn)短。
把上面的代碼存成一個(gè)文件,擴(kuò)展名為.asy,例如test.asy。用以下命令可以編譯test.asy:
asy test.asy
在Windows下,也可以用鼠標(biāo)直接雙擊test.asy文件。
之后會(huì)跳出一個(gè)圖形窗口,用鼠標(biāo)把分子轉(zhuǎn)動(dòng)到合適的角度,縮放到合適的大小,按一下鍵盤上的“e”,就會(huì)產(chǎn)生eps格式的圖形文件。效果圖如下:
![用Asymptote產(chǎn)生3D PDF格式的分子結(jié)構(gòu)圖-1]()
但是這個(gè)文件僅僅是一個(gè)打印屏幕后的圖片,并不是3D圖。要產(chǎn)生3D PDF文件,可以用以下命令編譯:
asy -f pdf test.asy
用adobe acrobat打開產(chǎn)生的pdf文件,會(huì)發(fā)現(xiàn)里面的分子模型可以用鼠標(biāo)旋轉(zhuǎn)和縮放。見附件。
其他參數(shù):
-noprc:跟-f pdf合用,在保存pdf文件的時(shí)候關(guān)閉3D功能。
-render=n(n=1,2,3,4,...,8):調(diào)分辨率。n=0會(huì)得到2D的投影矢量圖,不過效果很差。
-noV:禁止Asymptote自動(dòng)打開圖形窗口和pdf文件。如果計(jì)算機(jī)太慢,或者用腳本做批量輸出的時(shí)候,可以加上這個(gè)選項(xiàng)。此時(shí)分子的視角是個(gè)問題,需要在程序中用perspective函數(shù)事先設(shè)定,參見上面的代碼。
除了顯示分子模型以外,Asymptote還可以繪制晶體結(jié)構(gòu),輸出3D電子密度和分子軌道,等等。在Asymptote主頁(yè)和中文教程中可以找到這方面的例子。 |