代码之家  ›  专栏  ›  技术社区  ›  FlyingTeller AEgo

PS文本上色的简易方法

  •  2
  • FlyingTeller AEgo  · 技术社区  · 7 年前

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

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

    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 回复  |  直到 7 年前
        1
  •  3
  •   KenS    7 年前

    使用当前颜色绘制文本(对于非类型3字体的文本)。因此,如果在绘制文本之前更改当前颜色,那么它将以不同的颜色绘制。

    所以要回答问题“a” 1 0 0 setrgbcolor

    请注意,所有后续操作都将 而且 以红色呈现,因此我们现在应该考虑gsave和grestore运算符。gsave保存图形状态的副本,并存储(惊喜!)从最近保存的版本恢复图形状态。

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

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

    请注意,页面上的当前点是gstate的一部分!因此:

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

    将导致第二个“显示”在与第一个相同的位置发生,并覆盖它。

    例如:

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

    如果您想深入研究PostScript,则需要一份PostScript语言参考手册,该手册以PDF格式从Adobe网站在线提供。