2017-08-14 37 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

相关问题