2009-09-09 22 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中構建圖像。我發現的一個有用的約定是將對象看作字體中的字形。因此,每個對象都希望將當前點設置在例如左下角,並將當前點留在右下角。你可以把它們放在一個數組中,並通過它:每個對象離開當前點準備下一個。