有哪些好用的后置绘图库?

5

我需要为我的LaTeX文档绘制一些图片,发现手工制作的PostScript似乎很适合(我想以编程方式完成,需要数学函数等)。 我也尝试过TikZ,但那似乎过于复杂和难以使用。

然而,使用普通标准的PostScript有点麻烦,因为没有真正用于绘制形状的标准函数(例如甚至没有矩形)。

是否有任何包含常见形状函数并使生活更轻松的PostScript库? 对我来说,这个问题应该相当普遍。

还是我应该跳过PostScript并转向某些更优秀的系统?哪一个?


在我看来,PGF/TikZ非常易于使用,并且具有出色的库,使您只需几行代码即可创建出色的绘图。 - f3lix
7个回答

6

有些人和很多PostScript驱动程序定义了自己的一组绘制形状的过程。一个PostScript驱动程序可能会输出以下快捷方式:

/bd{bind def} bind def
/cp{closepath}bd
/gs{gsave}bd
/gr{grestore}bd
/m{moveto}bd
/rm{rmoveto}bd
/l{lineto}bd
/rl(rlineto}bd
/s{stroke}bd
/f{fill}bd
/sf{gs s gr f}bd
/xx{exch}bd

/rect {4 2 roll m 1 index 0 rl 0 xx rl neg 0 rl cp} bd

然后,会画出一个矩形,如下所示:
0 0 100 100 rect sf

PostScript的繁琐性使其特别难以处理。MetaPost可能更适合于您的图形是通过编程/数学生成的情况。 MetaPost生成封装的PostScript(您可以将其包含在LaTeX文档中),但它更适合使用代数定义绘制图像。


是的,定义我自己的形状函数就是我所做的。但我有一种不好的预感,我正在重复造轮子,因为现在可能有成千上万种不同的矩形实现方式。某个人打包他自己的函数并向其他人提供它们是有意义的。感谢您关于MetaPost的提示。看起来非常有趣,让我发现了Asymptote,它似乎是MetaPost的现代化版本。 - pafcu

1
我在直接使用PostScript构建图像方面取得了良好的结果。我发现一个有用的约定是将对象视为字体中的字形。因此,每个对象都期望当前点设置在左下角,并将当前点留在右下角。然后,您可以将它们放入数组中并进行循环:每个对象都会使当前点准备好下一个对象。

1

我曾经使用Asymptote(用于绘制图形),但我发现学习另一种自定义语言很烦人。如果您熟悉Python,可以尝试使用PyX。它的功能集与Asymptote类似。例如,它也可以使用LaTeX排版文本/数学公式。

另一个选择是Enthought Enable,但可能不太适合。


1

我喜欢使用matplotlib。它可以直接生成postscript和PDF,它是用Python编写的,并且还可以制作相当复杂的图表(因此得名)。如果您想直接操作PostScript,则可以在LaTeX中使用psticks,但您需要通过dvi2ps和ps2pdf运行所有内容以生成PDF。您真的想要PostScript还是PDF?我认为您想要PDF,对吧?


是的,PDF 是我的最终目标。我使用 PostScript 的唯一原因是它很好地结合了绘图和数学。我不确定 matplotlib 是否符合我的要求,因为我想要绘制仅部分由数学生成的图形。我需要框和箭头,可能还有难以通过旨在绘制函数的库实现的任意形状?此外,Python 代码往往相当冗长。尽管如此,我也会更仔细地研究 matplotlib。 - pafcu
如果您只需要盒子、箭头和任意形状,您应该使用Graphviz并获得自动布局。 - vy32
我需要手动布局。Graphviz正如其名称所示,是用于绘制图形的。我想要绘制一般性的图形。 - pafcu

1

好的,我已经决定渐近线是自从切片面包以来最好的东西了。它能很好地处理绘制图形和任意图形,并且有大量的扩展模块(包括如果你关心的话MetaPost兼容性)。此外,它使用LaTeX排版文本,这非常酷。作为额外的奖励,它甚至可以直接输出PDF(或EPS)。

我仍然认为没有好的例程库适用于老式的PostScript,这有点可悲。



0

生成SVG,然后使用类似iText和/或Inkscape的工具进行编程转换为PDF / PS。我就是这样构建了一个出版堆栈,并且效果非常好。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接