2009-09-09 38 views
5

我需要为我的LaTeX文档绘制一些图片,并且我发现手工制作的PostScript似乎很适合(我想以编程方式做东西,需要数学函数等)。我也尝试过TikZ,但看起来过于复杂且很难使用。任何好的postscript绘图库?

但是,使用普通标准PostScript会有点痛苦,因为没有任何绘制图形的标准函数(例如,甚至不是矩形)。

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

或者我应该跳过PostScript并转向一些上级系统?哪一个?

+0

PGF/TikZ是恕我直言,很容易使用,具有很大的图书馆,使您能够创建一个只大图几行。 – f3lix 2009-11-29 17:04:54

回答

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文档中),但它更适合用代数定义绘制图像。

+0

是的,定义我自己的形状函数是我所做的。由于现在必须有成千上万个不同的矩形实现,所以我只是重新发明了轮子。有人会打包自己的功能并将它们提供给其他人是有道理的。 感谢MetaPost上的提示。看起来很有趣,把我引向了Asymptote,它似乎是MetaPost的一个现代版本。 – pafcu 2009-09-11 12:05:10

1

我喜欢用matplotlib。它可以直接生成postscript和PDF,它是用python编写的,它也可以完成复杂的绘图(因此它的名字)。如果你想直接破解PostScript,你可以在LaTeX中使用psticks,但是你需要通过dvi2ps然后ps2pdf来运行所有的东西来制作PDF文件。你真的想要PostScript或PDF吗?我认为你需要PDF,对吧?

+0

是的,PDF是我的最终目标。我使用PostScript的唯一原因是它是绘图和数学的完美结合。我不确定matplotlib是我在找什么,因为我想要做的是绘制仅部分数学生成的数字。我需要盒子和箭头以及可能任意形状,这可能很难做到用于绘制功能的图书馆?另外,Python代码往往很冗长。不过,我也会仔细看看matplotlib。 – pafcu 2009-09-11 12:09:55

+0

如果你只需要盒子和箭头以及任意形状,你应该使用graphviz并获得自动布局。 – vy32 2009-09-13 01:32:49

+0

我特别需要手动布局。正如其名称所暗示的,Graphviz用于图形。我想画一般的数字。 – pafcu 2009-09-13 12:21:22

1

好吧,我决定Asymptote是自切片面包以来最好的事情。处理图形和任意图形的处理非常好,并且具有大量的扩展模块(如果您关心的话,包括MetaPost兼容性)。此外,它使用LaTeX排版文本,这非常酷。作为额外的奖励,它甚至直接输出到PDF(或EPS)。

我仍然认为这有点让人难过,尽管如此,仍然没有良好的“PostScript”例程库。

0

生成SVG,然后使用类似iText和/或Inkscape以编程方式转换为PDF/PS。我用这种方式构建了一个发布栈,结果非常好。

1

我已经使用Asymptote(虽然图),但我发现它学习另一种自定义语言令人厌烦。如果你熟悉Python,你可以试试PyX。其功能集与Asymptote相似。例如,它也可以使用LaTeX来排版文本/数学。

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

1

我已经有了很好的结果直接在postscript中构建图像。我发现的一个有用的约定是将对象看作字体中的字形。因此,每个对象都希望将当前点设置在例如左下角,并将当前点留在右下角。你可以把它们放在一个数组中,并通过它:每个对象离开当前点准备下一个。