PS简单的文字颜色方式

时间:2017-08-14 14:26:35

标签: bioinformatics postscript

我有一个postscript文件,其中包含njplot输出的系统发育树。它基本上由行尾的行和标签组成。现在它是黑​​白的,但我想标记不同树木之间的差异:

以下是我的一个文件的简短摘录,只有三个标签。

a)我需要做些什么来制作,例如“B. ovis 25840”显示为红色?

b)如何在“B. suis 23445”和“B. Thomsen”周围制作一个方框(例如标记它们属于同一组?)

/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

1 个答案:

答案 0 :(得分: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(surprise!)从最近保存的版本恢复图形状态。

您可以使用它来限制图形状态更改的效果。例如:

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个单位宽和高(所以是正方形)。中风'然后,运算符使用当前线宽和当前颜色来描绘路径。

如果您想深入了解PostScript,那么您需要一份PostScript语言参考手册的副本,该手册可从Adobe网站以PDF格式在线获取。

你可能也想看一下蓝皮书'这里也提供了PostScript语言教程和食谱'