跟 Asymptote 认识了一下
在 2010 年初的某一个寒冷的晚上,一个叫做 Garfileo 的人类打开空调之后,开始考虑学习 Asymptote 的事情。这原本是他计划之外的事情。原来的计划是学习 MathGL,不过当他打开了 MathGL 的源码,看到许多类似下面那样的代码,很快就放弃了。
mreal pp[3*31]; bool tt[31]; //... ... for(v=x;v<10*x;v+=x) if(v>Min.x && v<Max.x) DrawXTick(v,y0,z0,ddy,ddz,1); //... ... bool both = x.nx*x.ny*x.nz==n*m*l && y.nx*y.ny*y.nz==n*m*l && z.nx*z.ny*z.nz==n*m*l;
Garfileo 似乎是比往年有所进步。他开始不满足自己只是一个不问细节只求结果的终端用户,他开始幻想自己也许会偶尔 hack 一些代码,不过只有他认为自己有能力看懂的代码才是值得 hack 的。也许以后能够让他接受的自由/开源软件,必须得是源码干净一些的。子曾经曰过:色恶不食,臭恶不食,失饪不食,不时不食……
阅读过 CTeX 论坛里的矢量图强人 cvgmt 的所写的 asy 教程后, 开始动手搭建 Asymptote + ConTeXt Minimals 这样一个作图环境。之所以是 ConTeXt Minimals,而不是 TeX Live,这纯属个人癖好。对于 Asymptote 而言,ConTeXt Minimals 的作用仅仅是用于 Asymptote 所绘制的图形中的文字标注。
现在选择 ConTeXt Minimals 与 Asymptote 这样的组合,如果是从编译源码来安装 Asymptote,那么最大的痛苦就是不得不事先安装一个满足需求的 LaTeX 环境,因为 Asymptote 源码的编译需要它的支持。当然,这种杯具只是具有一点完美主义倾向的人方能拥有的。如果不那么在意一些无关主题的细节(主要是 Asymptote 文档的编译问题),可以完全不需要 LaTeX 环境。
从 Asymptote 的项目主页上可以下到最新的源码包,在下载过程中,可以顺便瞻仰一下 Asymptote 的画展。获得 Asymptote 源码包之后,先不要急着解包以及 `make && make install`,要先解决 LaTeX 环境的问题。
在 Linux 发行版里,要建立一个较新的 LaTeX 环境,是以尽快删除发行版为你安装的那些 TeX 软件作为见面礼的。我应当告诉大家一个“真相”:那些 Linux 发行版的开发者们是比较轻视 TeX 的,他们往往乐于追随 GNOME 或 KDE 这样的套件的最新版本,却从来也不理睬 TeX 套件的最新版本。像 Ubuntu、Fedora、Suse、Gentoo、Archlinux……这些发行版,在 2010 年的时候,软件仓库里居然还没有收录 TeX Live 2009。或许只有 Debian 例外,在 TeX Live 2009 释出后不久就收录到软件仓库里了。这里应当赞美一下伟大却不哗众取宠的 Debian 开发者!
现在,当你成功的将 Linux 发行版为你安装的 TeX Live 驱逐出境并且永世不再录用它之后,就可以手动安装 TeX Live 2009 了,具体安装方法见这里,郑重推荐采用 "medium scheme" 模式进行安装。装完后,再使用 tlmgr 工具将 movie15 宏包装上。
搭建了 TeX Live 提供的 LaTeX 环境之后,就可以将下载的 Asymptote 包解开,然后使用以下命令进行编译、安装:
$ ./configure --with-context=/opt/context/tex/texmf-local/tex/context/third $ make all $ sudo make install
编译安装后,在 /usr/local/bin 目录里会有 asy 程序,我们用它来编译 .asy 文件,从而产生矢量图形。另外在 /usr/local/share/asymptote 目录中会有一些 asy 库文件,在使用 Asymptote 绘图时,经常需要它们的支持。
安装完后,可通过以下示例验证一下 ConTeXt MkIV 能否与 Asymptote 协同工作。
texpreamble ("\usemodule[zhfonts]"); defaultpen (font ("zhfonts", "ss") + linewidth (1pt)); import three; size (400); currentprojection = orthographic(-2, -2, 1); path[] g = texpath("□□□"); for (path p:g) { draw (path3 (p), red + 1pt); draw (extrude (p, 2Z), yellow); draw (shift (2Z) * path3 (p), red + 1pt); }
使用以下命令编译上述 asy 绘图代码:
$ 开启 ConTeXt Minimals 工作环境 $ asy -noV -noprc -f pdf -tex context -maxtile="(512, 512)" this.asy
编译结果类似下图所示:
http://garfileo.is-programmer.com/user_files/garfileo/Image/some-test/asy.png
示例中的 "\usemodule[zhfonts]" 表示使用我写的一个 ConTeXt 模块——zhfonts,它主要是为了方便在 ConTeXt 中加载中文字体,可从 http://github.com/liyanrui 下载。
有关 ConTeXt 以及 ConTeXt Minimals 的一些知识,可参考:
1. 序幕有点长
2. 这就是 ConTeXt Minimals
3. 不仅仅是为了中文
转载时,希望不要链接文中图片,另外请保留本文原始出处:http://garfileo.is-programmer.com
2010年1月08日 18:58
哈哈哈
看到西朝鲜,大笑三声
latex分支真多啊
2010年1月10日 01:31
Asy don't need latex for compilation.
2010年1月10日 03:31
@Yue Wang: 在编译 Asymptote 文档的阶段,需要 texi2dvi 的支持。Gentoo 里虽然有 texi2dvi 程序,但需要 TeX Live 的 texinfo 包的支持才可以。
2010年1月10日 12:24
那就别编译文档呗⋯⋯
2010年1月10日 17:36
体验过 asy 之后,就没大有兴趣了,主要原因如下:
1. 二维矢量图,我可以用 metafun/metapost,它与 ConTeXt 的结合性更好一些。
2. 三维图形,asy 可以输出 prc 3d 矢量格式,不过意义不是很大,主要是稍微复杂一些的图形,prc 3d 的 pdf 文件太大了,貌似也只有 adobe reader 才支持,而且文档打开的速度极慢。
3. 对于位图格式的三维图形输出,直接用 opengl 或更高级的三维图形库会更强大。
2010年1月12日 04:57
"这些发行版,在 2010 年的时候,软件仓库里居然还没有收录 TeX Live 2009。或许只有 Debian 例外,在 TeX Live 2009 释出后不久就收录到软件仓库里了。这里应当赞美一下伟大却不哗众取宠的 Debian 开发者!"
这可能是有原因的,texlive2008改用了新的包管理系统,所以发行版打包时,构建系统几乎需要完全重写,这就是2008为什么没有进入debian的原因,debian的tex组花了一年多的时间才把构建系统改过来,也许其他发行版也有这样的问题吧。。。。