工具有两种,“所见即所得”和“所想即所得”。前者比如Viso/Word,后者比如pic/LaTeX。pic和Viso都是画图软件,我和pic的缘分始于陈硕先生的著作——《Linux多线程服务端编程》。看完这本书我有个小小的疑问:作者用的画图工具是什么?后来得知是pic。其实dmr和Brian W. Kernighan所写的那本传世名著<The C Programming Language>中的插图就是用的pic,Unix环境高级编程中的插图也是用pic做出来的。pic也是贝尔实验室开发的。 这两本经典书籍都是用troff出版的,关于troff有兴趣的读者可以去自己挖掘。
其实某种程度上书籍的排版工具可以反映这本书的质量,由troff和LaTeX出版的几乎都是好书。不信你看,下面列出的书籍都是troff出版的。
- Unix环境高级编程
- Unix网络编程
- C程序设计语言
- 计算机网络-第三版
- TCP/IP协议系列
- 程序设计实践
这个网站上列出了用troff出版的书籍:传送门
关于PIC其实不不需要我介绍太多,因为这个东西本身也很简单。其实更重要的原因是Kernighan已经写了一篇manual来教大家如何使用pic,Eric Raymond(《Unix编程艺术》的作者)也写了一篇tutorial。我在这里给出这两篇文章的链接,有兴趣的同学自己去看去尝试吧。我向您保证,2个小时绝对能看完。
大家还记得C圣经里面的这幅插图吗?
这个图表就是用pic画出的。它的pic代码如下:
.PS
define ndblock { box wid boxwid/2 ht boxht/2 down; box same with .t at bottom of last box; box same } boxht = .2; boxwid = .3; circlerad = .3; dx = 0.05 down; box; box; box; box ht 3*boxht "." "." "." L: box; box; box invis wid 2*boxwid "hashtab:" with .e at 1st box .w right Start: box wid .5 with .sw at 1st box.ne + (.4,.2) "..." N1: box wid .2 "n1"; D1: box wid .3 "d1" N3: box wid .4 "n3"; D3: box wid .3 "d3" box wid .4 "..." N2: box wid .5 "n2"; D2: box wid .2 "d2" arrow right from 2nd box ndblock spline -> right .2 from 3rd last box then to N1.sw + (dx,0) spline -> right .3 from 2nd last box then to D1.sw + (dx,0) arrow right from last box ndblock spline -> right .2 from 3rd last box to N2.sw-(dx,.2) to N2.sw+(dx,0) spline -> right .3 from 2nd last box to D2.sw-(dx,.2) to D2.sw+(dx,0) arrow right 2*linewid from L ndblock spline -> right .2 from 3rd last box to N3.sw + (dx,0) spline -> right .3 from 2nd last box to D3.sw + (dx,0) circlerad = .3 circle invis "ndblock" at last box.e + (1.2,.2) arrow dashed from last circle.w to last box chop 0 chop .3 box invis wid 2*boxwid "ndtable:" with .e at Start.w
.PE
编译这个程序的步骤也很简单
pic hashtab.pic | groff | ps2eps > hashtab.eps epstopdf hashtab.eps
如此就生成了pdf,再把pdf转成图片就OK了。
请确定pic,groff,pstoeps,epstopdf已经安装。没有的话请自行安装。groff是troff的变种,其他的都是LaTeX的套件。