2017-08-14 46 views
2

我有一個postscript文件,其中包含由njplot輸出的系統發育樹。它基本上由行尾的行和標籤組成。現在它是黑​​色和白色,但我想標記不同的樹木之間的差異:PS簡單的方法來顏色文字

下面是從我的一個文件只有三個標籤的簡短摘錄。

a)我需要做些什麼來使「B. ovis 25840」以紅色顯示?

二)如何讓一個盒子圍繞「豬B. 23445」和「B湯姆森」(比如,以紀念他們在同一個組?)

/setpacking where {true setpacking} if 
1 setlinecap 1 setlinejoin 1 setlinewidth 0 setgray 
/basefont /Times-Roman findfont 12 scalefont def 
/titlefont /Times-Roman findfont 12 scalefont def 
/setclip {40 40 moveto 560 40 lineto 560 810 lineto 40 810 lineto closepath clip newpath} def 
/title {titlefont setfont 
40 815 moveto (brucella_conc_se_ani.out_nj.outtree Mon Aug 14 14:52:28 2017 
) show ( Page) show show (of 1) show 
} def 
%%EndProlog 
%%Page: ? 1 
(1) title setclip 
0 0 translate 
basefont setfont 
50 50 translate 
0.7 setgray -10 -10 moveto 510 -10 lineto 510 760 lineto -10 760 lineto closepath stroke 0 setgray 
359 8 moveto 
(B. ovis 25840) show 
298 67 moveto 
(B. Thomsen) show 
294 127 moveto 
(B. suis 23445) show 
showpage 
+0

對於B,見https://stackoverflow.com/questions/518837/如何-可以任您得到最高度的度量對的一串式,附言。 – lhf

回答

3

繪製文本(對於類型3以外的字體中的文本)使用當前顏色。所以如果你在繪製文本之前改變當前的顏色,那麼它將以不同的顏色繪製。

PostScript中有許多顏色運算符,最簡單的是setgray,setrgbcolor和setcmykcolor運算符。 setgray取1(白色)和0(黑色)之間的值,並將當前顏色設置爲該灰色百分比。對於R,G和B中的每一個,setrgbcolor在01和1之間取3個參數,而setcmykcolor與CMYK組件相同。

所以要回答放在文本行前面的問題'a'1 0 0 setrgbcolor,會導致文本被繪製爲紅色。

請注意,所有後續操作將呈紅色,所以我們現在應該考慮gsave和grestore操作。 gsave保存圖形狀態的副本,並且grestore(驚喜!)從最近保存的版本恢復圖形狀態。

您可以使用它來限制圖形狀態更改的效果。例如:

gsave 
1 0 0 setrgbcolor 
(B. ovis 25840) show 
grestore 

將呈現文本爲紅色,但後面的文本會在力的顏色gsave,想必黑了。

請注意,頁面上的當前點是gstate的一部分!因此:

gsave 
1 0 0 setrgbcolor 
359 8 moveto 
(B. ovis 25840) show 
298 67 moveto 
grestore 
(B. Thomsen) show 

會導致第二個「顯示」發生在與第一個相同的位置,覆蓋它。

您不'繪製框',PostScript沒有這樣的圖形基元。你所做的是構建一個路徑,然後對其進行描邊(你可以填充它,而不是填充矩形)。

例如:

0 0 moveto 
0 100 lineto 
100 100 lineto 
100 0 liento 
closepath 
stroke 

將建立在0,0其左下角的矩形路徑將是100個單位寬和高(所以爲正方形)。 'stroke'操作符然後使用當前線寬和當前顏色來繪製路徑。

如果您想深入瞭解PostScript,那麼您需要PostScript語言參考手冊的副本,該手冊可以從Adobe網站以PDF格式在線獲得。

你可能還喜歡看的「藍皮書」,這也可以有作爲「PostScript語言教程和食譜」

+0

「rectstroke」不是繪製盒子的原始圖片嗎? – lhf

+0

是的,並rectfill,但我試圖成爲一般。 – KenS

+0

謝謝你的詳細解答。適合我的目的 – FlyingTeller

相關問題