postscritp£~°ò¥»¤Jªù
§@ªÌ:csc  (2003/2/17)
(¥» ¤å°Ñ¦Ò:blue book(tutorial and cookbook)adobe¥Xª©ªº¤ÎA first guide to postscript)
Postscript ¬O¤@ºØ­¶­±ªº´y­z»y¨¥(¤@ºØ¤å¥ó®æ¦¡),Ãþ¦ü²{¦b³Ì¬y¦æªºPDFÀÉ®×,³£¬O¬°¤F³Ì¨Î¤Æ¦C¦L©ÎÅã¥Ü©Î¥iÄâ©Ê(¤£¦P¹q¸£¶¡ªº¥æ´«),¥¦³Ì¦­¥X²{¦bApple Laser Writer ¦Lªí¾÷¤W,²³æªº»¡¦b¥ô¦ó¹q¸£¤W²£¥ÍªºpsÀÉ®×,³£¥i¥Hª½±µ¥á¨ì¥i¥H±µ¨üpsªº¦Lªí¾÷¤W¦C¦L,¦Ó¤£¥ÎºÞ­n¿é¥X¦b¨º¤@ºØ¦Lªí¾÷¤W,¨ä¦C¦Lµ²ªG³£¤£·|®t¤Ó¦h, (¨ä¹ê¤£¦P¼t°Óªº¦Lªí¾÷,¦³¤£¦Pªº¦Lªí¾÷¦C¦L»y¨¥,¥Î¨Ó´y­z±ý¦C¦Lªº¸ê®Æ,¦p¦ó¦b¦Lªí¾÷¤¤¦C¦L,¨Ò¦p:HPªº¦Lªí¾÷¤@¯ë¬O¨Ï¥Îhp pcl(page control language),¦Óepson ¬O¨Ï¥ÎESC»y¨¥[¦³ÂIÃþ¦üdos¤U¨Ï¥Î¦b­Ê¤Ñªº¦Lªí±±¨î»y¨¥], ³q±`¤@¯ëªº¦Lªí¾÷»y¨¥,³£¦³¨âºØ¼Ò¦¡,¤@¬°¸ê®Æ,¥t¤@¬°±±¨î,¦Ó±±¨î¼Ò¦¡³£·|¨Ï¥Î¤@¸õ²æ²Å¸¹,µM«á«á­±±µµÛ±±¨î«ü¥O)¡C

Ps¬O¤@ºØÃþ¦üfortan(¥¦¬O¤@ºØ¥Î¦b¤uµ{­pºâªºµ{¦¡»y¨¥) ªº¤@ºØ»y¨¥,¥¦¬O¨ã³Æµ{¦¡»y¨¥ªº¥\¯à,§Ú­Ì¥i¥H¨Ï¥ÎPs¼gµ{¦¡,¦Ó¥¦".Ps"ÀÉ¥»¨­´N¬O¤@ºØµ{¦¡,¬°¤F­n¼ô±x¥¦ªº»yªk,§Ú­Ì§K¶O¤U¸üGnu ghostscript¨Ã¦w¸Ë¥¦,¥¦¥iª½±µ¼ÒÀÀPS¦Lªí¾÷,¨Ã¤UPsªº«ü¥Oµ¹¥¦¨Ã©M¥¦¤¬°Ê¡C

§Ú­Ì²¤¹L¦w¸Ë:¦b¦w¸Ë§¹²¦«á¥¦·|¦b§Aªº¦w¸Ë¥Ø¿ý¤U²£¥Ígsx.xxªº ¥Ø¿ý(x.xx¬Oª©¥»¦p7.05),¦bwindwosª©¥»¦³¤GºØ°õ¦æÀÉgswin32.exe ¤Îgswin32c.exe(¤@­Ó¬O¦bwindows¤U°õ¦æ,¥t¤@­Ó¬O¦bconsle,dos©R¥O¦C¤U),ºÝ¬Ý§A­n¦bµøµ¡©Î¬O©R¥O¦C¤U°õ¦æ
¨ä¥~Æ[¦p¤U(µøµ¡):



#GS>¬O´£¥Ü²Å¸¹,§A¥i¥H¦b³oùØ¿é¤J©R¥O
#¦b´£¥Ü²Å¸¹¿é¤J©R¥O®É·|¦b¥kÃä¥[¤Jµù¸Ñ:
 <- ¥Nªí§Aªº¿é¤J
 -> ¥Nªíµ{¦¡¦^À³
 ¦Óµù¸Ñªº²Å¸¹¬°%
 ¦³¨Ç³¡¥÷ªºµ{¦¡¦^À³·|²¤¹L,¦b§A¼ô±x¤§«á,¤]´N¬O¤ñ¸û«á­±ªº³¡ ¥÷,¤@«ß¤£¼Ð¥Ü

 µ{¦¡ªº°ò¥»Æ[©À
1.µ{¦¡¬O¥Hstack(°ïÅ|)ªº¼Ò¦¡¤U¨Ó¾Þ§@(¦³ÂI¹³CPUªº¹Bºâ¤è¦¡¦³¤@°ï¼È¦s¾¹¨Ó¦s­È)
GS>5
GS<1>
GS<1>6
GS<2>
% <-
% ->
% <-
% ->

§A¥i¯àµoı¬°¤°»ò·|¦³GS<1>,GS<2>©O?
¥¦¥Nªí§Aªº°ïÅ|¤¤ªº­Ó¼Æ
GS>5 6
GS<2>
% <-
% ->

°ïÅ|¦³¨â­Ó5¤Î6

GS>5 6 add      % <-
³oùجO¨Ï¥Î¨ì¹Bºâ¤ladd(¥[ªk),¨ä­ì²z¦p¤U:¦@¥|­Ó¨BÆJ

5
6
5
-
-

11

->stack 2
->stack 1

¥ý±À¤J5,¦A±À¤J6,¦Ó add«h¨ú¥X5¤Î6,¥[Á`¬°11«á¦A±À¦^11
¦P²z¥[´î­¼°£(add,sub,mul,div,idiv(°£¨ú¾ã¼Æ),mod(¬Û°£¨ú¾l¼Æ))(ª`·N:¬°¤p¼g)
GS>5 6 add
GS<1>7 3 sub
GS<2>
% <-
% <-
% ->


¦p¦ó¨ú¥X©Î¬O¥á±ó©O?
pstack(¨q¥X©Ò¦³ªº°ïÅ|ªº¸ê®Æ)©Î stack
#(abc)¬°¦r¦ê,¦r¦ê¦b¨Ï¥Î¬A¸¹¬A°_¨Ó
GS>5 6 7 (abc)
GS<4>
GS<4>pstack
abc
7
6
5
% <-
% ->
% <-
% ->
pop(¨ú¥X°ïÅ|³Ì¤W¼h(¤£Åã¥Ü)¨Ã¥á±ó)
GS>5 6 add
GS<1>pop
GS>
% <-
% <-
% ->
==(Åã¥Ü°ïÅ|³Ì¤W¼h¨Ã¥á±ó,¸Õ¹L¤@­Ó"="¤] ¥i¥H)
GS>5 6 add
GS<1>=
11
% <-
% <-
% ->
clear(²M°£°ïÅ|ªº©Ò¦³¤º®e)
GS>5 6 add
GS<1>
GS<1>7 8 sub
GS<2>clear
GS>
% <-
% ->
% <-
% <-
% ->
¥æ´«°ïÅ|(exch)
GS>5 6
GS<2>exch
% <-
% ->
­ì¨Ó¬O6,5(°ïÅ|¶¶§Ç(top-> bottom)),°õ¦æexch
Åܬ°5,6
­«½Æ°ïÅ|(dup)
GS>5 dup
GS<2>
¦P
GS>5 5
GS<2>
% <-
% ->

% <-
% ->

roll(¦ì²¾)
GS> 1 2 3 4 5 6 3 1 roll     
°O¦í:rollªº«e­±¨â­Ó¼Æ¦r,«e­±3¬O«ü6 5 4 3 2 1 (¨Ì¦¸¼Æ¨Ó²Ä3­Ó,´N¬O4)
     ¦Ü©óroll«e­±ªº1¬O¦V¥k²¾1­Ó,¦pªG¦³-¥Nªí¦V¥ª²¾
     ¨Ò:1 2 3 4 5 6 3 1  roll   
      ¥Ñ6©¹«e¼Æ3­Ó¬°  4 5 6 ->¦V¥k²¾¤@¦ì 6 4 5          
     µ²ªG:
      1 2 3 6 4 5
      
     ¨Ò:1 2 3 4 5 6 3 -1 roll   
       ¦P¤W 4 5 6 ->¦V¥ª²¾¤@¦ì5 6 4   
     µ²ªG:
        1 2 3 5 6 4

2.¦r¦ê¡BÅܼơB°}¦C©M¨ç¦¡
(1)¦r¦ê¬O¥Î¤p¬A¸¹¬A°_¨Ó(abcd)
   GS>(abcd)         
   GS<1>=            
   abcd              
(2)ÅܼÆ
    /abc 15 def
   ©w¸qÅܼÆabc=15,­n©w¸qÅܼƫe­±°Oªº­n¥[/¤Ï±×½u,¦Ó«á­±­n¥[def
    /aaa (this is a test) def
   #¤Þ¥Î­n¨Ï¥Î aaa´N¦n¤F,/¥u¦³¦b©w¸q®É¤~­n
   #ª`·N³oùب䣬O°ïÅ|¦b¥ý«eoperand¤¤¦Ó¬O¥t¤@­Ó¥s?,¦]¦¹¤£·|Åã¥Ü¦b¥X¨Ó,¦Ó³o­Óstack¬O¥H¦WºÙ¤Î    ­È,¤@¹ï¨Ó°ïÅ|
(3)°}¦C
    [1 12 45],¤T­Ó¼Æ¦rªº°}¦C
    [1 12 (this is a test)] ,¨â­Ó¼Æ¦r¤@­Ó¦r¦êªº°}¦C
(4)¨ç¦¡
    /func {y y mul} def
    ¨ç¦¡¦WºÙfunc,¦Ó¨ç¦¡¤º®e¨Ï¥Î¤j¬A¸¹¬A°_¨Ó,³Ì«á¦A¥[def
(5)«O¯d¦r\,()[]¯S®í²Å¸¹\n,\s,\w .........)
   ¦pªG­n¦b¦r¦ê¤¤ªí¥Ü\©Î¬O()[],½Ð¥[\,¤]´N¬O\\,©Î\(¡B\)¡B\[¡B\]
(6)±`¨£»~¥Î:
   ¨Ò¦p: x=x+1
   /x 2 def
   /x  x 1 add def        ->³o¬O¿ùªº,¦]¬°µLªk­«½Æ¨Ï¥Î,¥¦¬OÅܼƫD¨ç¦¡
  



3.±ø¥ó±±¨î(if,ifelse)
¤ñ¸û¹Bºâ¦¡
²Å¸¹
¤j©ó
gt
¤j©óµ¥©ó
ge
¤p©ó
lt
¤p©óµ¥©ó
le
µ¥©ó
eq
¤£µ¥©ó
ne
±ø¥ó {op1} if
±ø¥ó¦pªG¬°true «h§@¤j¬A¸¹¤ºªº°Ê§@
±ø¥ó {op1} {op2} ifelse
¦pªG±ø¥ó¦¨¥ß,°õ¦æ¡aop1} §_«h°õ¦æ¡aop2}
¨Ò¦p¡G¦pªG2>1¦L¥Xgreate
2 1 gt {(greate)} if
2 1 gt {(greate)}{(little)} ifelse


4.°j°é(for,repeat,loop,exit)
    °_©l­È  ¶¡¹j   µ²§À­È { §A­n°µªº¨Æ } for
     12      40    300   { 750 moveto (test) show} for
   §@:12  750 moveto  (test) show
      52  750 moveto  (test) show
        ..
      292 750 moveto (test) show
     °õ¦æ¦¸¼Æ { ­n°µªº¨Æ} repeat
     {­n°µªº¨Æ} loop


  
5.­¶­±°t¸m
  ¨Ï¥Îªº®y¼Ð¨t,¨ä­ìÂI¦b¥ª¤U¨¤
y
    x
  ¤@¯ë±`¥Î­¶­±¬°A4(210mmx297mm)©Î(8.5x11­^¦T),¨C­^¦T¬°72ÂI,¤]´N¬O612X792ÂI,¦pªG¬O¥H12ÂIªº¦r,²Ä¤@
  ­Ó¦rªº¦ì¸m¦b0,780¡C¥Ñ©óps¬O¥HÂI¨Ó©w¦ì¸m,¦]¦¹¨Ã¨S¦³«ö¦æªº²Å¸¹,¦]¦¹­n¦Û¤v©w¸q¨ç¦¡¨Ó°µ´«¦æ¹Bºâ,¦Ü  ©ó¾î¦V¦C¦L,­n¨Ï¥Î¨ìÅÜ«¬,½Ð°Ñ¦Ò6,§A¥i¥H¨Ï¥Îcurrentpoint

6.¦C¦L¤å¦r
  ¨BÆJ¦p¤U:
  1.³]©w­n¨Ï¥Îªº¦r«¬   findfont
  2.³]©w¦r«¬¤j¤p(ÂI¼Æ) scalefont
  3.³]©w¦r«¬           setfont
  4.¿é¤J­nÅã¥Üªº¦r¦ê   show
  /Courier findfont
  12 scalefont
  setfont
  (test) show
  showpage         ->·í§Ú­Ì­nÅã¥Ü¤@¾ã­¶¤§«á¥¦·|ÄÀ©ñ¥ý«eªº³]©w,¦pªG¨Ï¥Îcopypage«h·|ªu¥Î¥ý«eªº³]©w
                     ¦pªG­n±N¹Ï­±Åܬ°¥Õ¦â½Ð¥Îerasepage

  

7.µe¹Ï
  ¨BÆJ¦p¤U:
  1.©w¸qpath(¹Ï®|) (newpath)
  2.²¾¨ì«ü©wªº¦ì¸m  (moveto,rmoveto)
  3.¨Ï¥Î¤£¦Pµe¹Ï¤u¨ã (arcto,lineto,curvto,rlineto,rarcto,rcurvto)
  4.©w¸q½u¼e¤ÎÃC¦â (setlinewidth,setrgbcolor,setgray)
  5.µe¹Ï(fill,eofill,stroke,¦pªG¬Ofill½Ðª`·N¥²¶·¬O¤@­Ó«Ê³¬ªºpath)
 

8.ÅÜ«¬
    ¥D­n¦³¤T­Ó«ü¥O(translate,scale,rotate)
   1.translate:Âà´«®y¼Ð,x-coord y-coord translate (§A¥i¥H·Q¦¨§â¤@­ÓªF¦è²¾°Ê(x,y)¶ZÂ÷)
   2.scale:ÁY©ñ
   3.rotate:±ÛÂà  angle rotate(¨¤«×¦pªG¬O¥¿­È¬O¤Ï®ÉÄÁ¤è¦V±ÛÂà,­tªº«h¬°¶¶®ÉÄÁ¤è¦V±ÛÂà)
     ¥H¤U»¡©ú¦p¦ó±ÛÂà¤å¦r(90«×)
     ¦]¬°®y¼Ð±ÛÂà¦]¦¹­¶­±ªº°_©lÂI¬°(0,0),¦Óªø¤Î¼e¹ï½Õ,¦]¦¹Åܬ°792X612
         y                             x
      -x + x  =>90«×±ÛÂà(¤Ï®ÉÄÁ)     y + -y
        -y                            -x
     ¦Ó¥iÅã¥Üªº°Ï°ì¤´¦b²Ä¤@¶H­­,¦]¦¹y ¬O­tªº
     90 rotate
     12 -12 moveto
     (test) show


9.°ïÅ|¦¡»y¨¥ªº¯SÂI
  °ïÅ|¦¡»y¨¥¦³¤@­Ó«Ü¤jªº¯SÂI´N¬Oª½±µ§Q¥Î°ïÅ|¨Ó¥æ´«ÅܼÆ,¤]´N¬O»¡§Ú¥i¥H¥ý±NÅܼƩñ¦b°ïÅ|¤¤,
  µy«á¦A¥Ñ¥t¤@­Óµ{§Ç¨ú¥X¥[¥H¹B¥Î,¦ý¬O¬Y¨Ç¸ê®Æ¬O§Ú­Ì¤£»Ý­n,©Î¬O¶¶§Ç¤£¹ï,¦]¦¹§Ú­Ì¥i¥H¥Î
  pop exch ©Îroll ¥[¥H¹B¥Î
  ¨Ò¦p:¦³¤@­Ó®y¼Ð¬Ox1,y1 ,§Ú­Ì­ny1¦Ó¤£­nx1
       x1,y1
       exch
       pop
       ¦p¦¹°ïÅ|¤¤´N³Ñ¤Uy1
  ¦P¤@­Ó¦WºÙ§A¥i¯à¨Ï¥Î/a {a 15 add } def
  ¦p¦¹¬O¥i¥H©w¸q¦ý¤£¬O§A·Q¹³ªºa=a+15 ,ªì©l­È20
   /a 20 def
   /a {a 15 add }def
   ·|²£¥Í°j°é
   ¸Ñªk:
   /y 20 def
   /x {y 15 add /y exch def y} def  
   ¬°¤F­n¦b¨Ï¥Î¦bxªº¨ç¦¡¤¤­«·s©w¸q¦]¦¹y 15 add ¹Bºâ¤§«áÅܬ°35  /y  exch ,Åܬ°/y 35 ,¥[def
   *¦ý¬O§Ú­Ì­n¦b°ïÅ|¤¤¨ú±o­È¦]¦¹­«½Æy
   ¹ï©ó³æ¤@ÅÜ¼Æ¨ç¼Æ¦p(x2+2x)
   ³£¥i®M¥Î¤U¦C­ì«h:¥u­n¦b¥ô¦ó¹Bºâµ²§ô¤§«á¥[ /ÅܼƦWºÙ exch def ÅܼƦWºÙ
    /y 2 def
    /x { y dup mul y 2 mul add /y exch def y } def
   (¥ý±NyÅܦ¨¨â­Óy dup ,¦A¬Û­¼mul,¦p¦¹°ïÅ|¤¤¦³¤@­Ó­Èy*y ,§Ú­Ì¦A³]©wy 2 uml , µ²ªG°ïÅ|¤¤¦³¨â­Ó­È,§Ú­Ì¨ú¥X¨Ó¬Û    ¥[add,±µ¤U¨Ó´N¬O¤W­z­ì«h


10.¦p¦ó«Ø¥ß´«¦æ¤Î´«­¶©Ò¦ó³]©w(ª½¦¡)?
  ­¶­±°ò¥»ªº³]©w(¤WÃä¬É¡B¤UÃä¬É¡B¥ªÃä¬É¡B¥kÃä¬É¡B­¶ªø¡B¦r«¬¤j¤p)
´«¦æ:
    1. ÅܼƦp¥k:top,left,line_space,pagesize ,y(y¶b©Ò¦b¦ì¸m),(¤UÃä¬É¥æµ¹¼g¤Jµ{¦¡)
    2. y=pagesize-top
    3. x,y¦ì¸m:left,y
    4. ¦ìÓ_ªº²¾°Ê: (left,y-line_space),¦ý¬O¤£¥i¥H¤p©ó0
    
µ{¦¡:/top 10 def
     /left 10 def
     /pagesize 792 def
     /line_space 12 def
     /y  pagesize top sub line_space sub def
     /newline { y line_space sub  0 lt {/y  pagesize top sub line_space sub def}
                {/y y line_space sub def}¡@ifelse left y moveto¡@¡bdef


´«­¶:­«¸my ¤£­n¨Ï¥Îshowpage ,³Ì¦n¨Ï¥Îcopypage,·|«O¯d¤§«eªº³]©w
      /y pagesize top sub line_space sub def
      copypage

11.¾î¦V¦C¦L:
   °Ñ¦Ò±ÛÂ઺¥\¯àrotate
   §Ú­Ì§â­¶­±A4©T©w¦b²Ä¤@¶H­­,¦Ó®y¼Ð¶b°f®ÉÄÁ¤è¦VÂà90«×,©Ò¥H(x,y)¥Ñ(612,792)Åܬ°(792,-612)
   ©Ò¥H(x=0 ¦Ü 792),(y=0 ¦Ü -612)
   ,¥Ñ¦¹¥i¥H·Q¹³¨ä¥¦¨¤«×ªº¹Bºâ´N¤ñ¸ûÃø¤F,¦]¦¹¤@¯ëªº¹Bºâ§Ú³£·|Âର­ì¨Óªº¨¤«×,¦Ó¤@¯ëªºµe½uµ¥µe¹Ï¥\
   ¯à³£¦b¤£±ÛÂ઺ª¬ªp¤W³]©w

12.Æ^¤J¨ä¥¦ªºpsÀÉ
   §AÀ³¸Óª¾¹Dps¥i¥H¥]§t¤å¦r¤Î¹Ï,¦ý¬O¦pªG§A¦³¤@­ÓPSÀÉ®×­n¥]§t¥t¤@­Ó¦³¹Ï©Î¤å¦rªºPSÀɸӫç»ò¿ì,¦pªG¦³³o­Ó»Ý¨D­n¨Ï¥Î¨ìEncapsulated PostScript(eps),¬ÛÃö³W®æ¦bhttp://partners.adobe.com/asn/developer/pdfs/tn/5002.EPSF_Spec.pdf
   §A¤]¥i¥H°Ñ¦Ò§Úªº¥t¤@½s¤å³¹EPSÀɮ׸ѪR
13.PSÀɮתº±`¥ÎÀÉÀY
   ²Ä¤@¦æ±a¥Xª©¥»,¦pªG¨S¦³µ¹¤]¥i¥H¦ý¬O³Ì¦n¬Oµ¹
   %!PS-Adobe-3.0
   ¨ä¥¦:
%!PS-Adobe-3.0
%%Title: (Untitled2) ©ïÀY
%%Creator: (Microsoft Word: LaserWriter 8 8.4.2) «Ø¥ßµ{¦¡
%%CreationDate: (3:40 PM Friday, May 9, 1997) «Ø¥ß¤é´Á
%%For: (dubois) §@ªÌ
%%Routing: (mailto:\000dubois@primate.wisc.edu)
%%Pages: 157 Á`­¶¼Æ
%%PageOrder: Ascend ­¶­±±Æ¤è¦¡
%%Orientation: Portrait ¾î¦V©Îª½¦V
%%DocumentMedia: Default 612 792 0 () ()
­¶­±¤j¤p
%%EndComments µ²§ôµù¸Ñ
14.¯B¤ô¦L(watermark)
¯B¤ô¦L¬O¤@ºØ¦L¦b¤å¥ó¤Wªº¤ñ¸û²Hªº¤å¦r,¦bps ¤¤­n¥[¦b
%%Page:»¡©ú      --¤§«á
¥H¤U¬OA first guide to postscript©Ò´£¨Ñªº°Ñ¦Òµ{¦¡            
 
gsave
.75 setgray
/Helvetica-Bold findfont 72 scalefont setfont
80 80 800
{ 306 exch moveto                  % move to the center of the line
(Draft) dup
stringwidth pop 2 div neg 0 rmoveto % Center the text horizontally
show                                % Show the text
} for                               % and keep doinging it grestore

§A¥i¥H­×§ï¤å¦rDraft¬°§Oªº¦r¤Î¨ä¥¦