summaryrefslogtreecommitdiff
path: root/graphics/axodraw/axodraw.sty
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /graphics/axodraw/axodraw.sty
Initial commit
Diffstat (limited to 'graphics/axodraw/axodraw.sty')
-rw-r--r--graphics/axodraw/axodraw.sty1685
1 files changed, 1685 insertions, 0 deletions
diff --git a/graphics/axodraw/axodraw.sty b/graphics/axodraw/axodraw.sty
new file mode 100644
index 0000000000..6a86f24d0a
--- /dev/null
+++ b/graphics/axodraw/axodraw.sty
@@ -0,0 +1,1685 @@
+%
+% Style file for the drawing of Feynman diagrams with LaTeX.
+% It assumes that the dvips that is used is by Radical Eye Software
+% (by Rokicki), because the graphics primitives are given in
+% postscript. If you do not work with a dvi to postscript converter
+% you are out of luck.
+%
+% Made by J.A.M. Vermaseren 14-feb-1994
+%
+% Use:
+% Enter the picture environment with for instance
+% \begin{picture}(width,height)(0,0)
+% statements
+% \end{picture}
+% All statements should be entered inside the picture environment.
+% All coordinates should be in terms of pt (but the pt must be omitted).
+% One may also use the figure environment.
+%
+\input{epsf.sty}
+\openin5=colordvi.sty
+\ifeof5
+ \closein5
+ \def\axocolor{ }
+ \def\SetColor#1{ }
+ \def\Color#1#2{#2}
+ \def\IfColor#1#2{#2 }
+\else
+ \closein5
+ \input{colordvi.sty}
+ \background{White}
+ \textBlack
+ \def\axocolor{Black }
+ \def\SetColor#1{\def\axocolor{#1 }}
+ \def\IfColor#1#2{#1}
+\fi
+%
+% The variables in are:
+% mtrx,num,ampi,x1,y1,x2,y2,dx,dy,dr,speed
+% step,phi,arcend,arcstart,radius
+% theindex,thechar,darc,const,amp1 amp2 amp3
+% gcolor,xx,name,name1,name2,xx1,xx2
+%
+% NOTE: blank lines are not allowed inside the postscript code!!!!!
+% (LaTeX sneaks \par commands in and the postscript goes boink)
+%
+\special{! /ed{exch def}def /gs{gsave dup scale}def
+/gsw{gs /width ed width setlinewidth}def /p1{/y1 ed /x1 ed}def
+/p2{/y2 ed /x2 ed}def /abox{newpath x1 y1 moveto x1 y2 lineto
+x2 y2 lineto x2 y1 lineto closepath}def }
+%
+%
+\special{! /arrowdown{
+ /nwidth { width 1 add } def
+ newpath
+ 0 nwidth 1.5 mul neg moveto % Arrow is a triangle
+ nwidth 1.2 mul nwidth 3 mul rlineto
+ nwidth 2.4 mul neg 0 rlineto
+ nwidth 1.2 mul nwidth 3 mul neg rlineto
+ closepath fill % and it is filled
+} def }
+%
+%
+\special{! /arrowup{
+ /nwidth { width 1 add } def
+ newpath
+ 0 nwidth 1.5 mul moveto % Arrow is a triangle
+ nwidth 1.2 mul nwidth 3 mul neg rlineto
+ nwidth 2.4 mul neg 0 rlineto
+ nwidth 1.2 mul nwidth 3 mul rlineto
+ closepath fill % and it is filled
+} def }
+%
+%
+\special{! /arrowright{
+ /nwidth { width 1 add } def
+ newpath
+ nwidth 1.5 mul 0 moveto % Arrow is a triangle
+ nwidth 3 mul neg nwidth 1.2 mul rlineto
+ 0 nwidth 2.4 mul neg rlineto
+ nwidth 3 mul nwidth 1.2 mul rlineto
+ closepath fill % and it is filled
+} def }
+%
+%
+\special{! /gluon{
+ gsw /num ed /ampi ed /dy ed /dx ed p1
+ /dy dy y1 sub def /dx dx x1 sub def
+%
+% We have a 'head' and a 'tail' and inbetween the 'body'
+% The head + tail is 2 windings. The body is num-1 windings.
+%
+ /dr dx dx mul dy dy mul add sqrt def
+%
+ x1 y1 translate dy dx atan rotate
+%
+ /num num 0.5 sub round def
+ /inc dr num 2 mul 2 add div def % increment per half winding
+ /amp8 ampi 0.9 mul def
+ amp8 0 lt {/amp8 amp8 neg def} if
+%
+ /x1 inc 2 mul def
+%
+ newpath
+ 0 0 moveto
+ inc 0.1 mul ampi 0.5 mul inc 0.5 mul ampi inc 1.4 mul ampi curveto
+ x1 amp8 add dup ampi exch ampi neg dup x1 exch curveto
+%
+ 2 1 num {
+ pop
+ x1 amp8 sub dup ampi neg exch ampi dup x1 inc add exch curveto
+ /x1 x1 inc dup add add def
+ x1 amp8 add dup ampi exch ampi neg dup x1 exch curveto
+ } for
+%
+ x1 amp8 sub dup ampi neg exch ampi dup x1 inc 0.6 mul add exch curveto
+ x1 inc 1.5 mul add ampi dr inc 0.1 mul sub ampi 0.5 mul dr 0 curveto
+ stroke
+%
+ grestore
+} def }
+%
+%
+\special{! /photon{
+%
+% Draws a photon from x1,y1 to x2,y2 with amplitude A and n wiggles
+%
+ gsw /num ed /ampi ed p2 p1
+ /dy y2 y1 sub def /dx x2 x1 sub def
+ /dr dx dx mul dy dy mul add sqrt def
+%
+ x1 y1 translate
+ dy dx atan rotate
+ /num num 2 mul 0.5 sub round def
+ /x2 dr num div def
+ /pi 3.141592 def
+ /sign 1 def
+ 1 1 num {
+ pop
+ newpath
+ 0 0 moveto
+ 4 3 div x2 mul pi div dup neg x2 add
+ 4 3 div ampi sign mul mul dup 3 1 roll
+ x2 0 curveto
+ stroke
+ /sign sign neg def
+ x2 0 translate
+ } for
+%
+ grestore
+} def }
+%
+%
+\special{! /zigzag{
+%
+% Draws a zigzag line from x1,y1 to x2,y2 with amplitude A and n zigzags
+%
+ gsw /num ed /ampi ed p2 p1
+ /dy y2 y1 sub def /dx x2 x1 sub def
+ /dr dx dx mul dy dy mul add sqrt def
+%
+ x1 y1 translate
+ dy dx atan rotate
+ /num num 2 mul 0.5 sub round def
+ /x2 dr num div def
+ /pi 3.141592 def
+ /sign 1 def
+ 1 1 num {
+ pop
+ newpath
+ 0 0 moveto
+ x2 2 div ampi sign mul lineto
+ x2 0 lineto
+ stroke
+ /sign sign neg def
+ x2 0 translate
+ } for
+%
+ grestore
+} def }
+%
+%
+\special{! /photonarc{
+%
+% Draws a photonarc center at x1,y1, radius arcstart,arcend, amplitude
+% number of wiggles, width, scale
+%
+ gsw /num ed /ampli ed /arcend ed /arcstart ed /radius ed
+%
+ translate % The center of the circle is now the origin
+%
+ /num num 2 mul round def % number of half wiggles
+ arcend arcstart lt { /arcend arcend 360 add def } if
+ /arcend arcend arcstart sub num div def % phi
+ arcstart rotate
+ /arcstart arcend 2 div def % phi/2
+ /cp arcend cos def
+ /sp arcend sin def
+ /cp2 arcstart cos def
+ /sp2 arcstart sin def
+%
+ newpath
+ 1 1 num {
+ pop
+ radius 0 moveto
+ /beta radius arcend mul 180 ampli mul div def
+ /tt sp cp beta mul sub cp sp beta mul add div def
+ /amp1 radius ampli add 8 mul beta cp2 mul sp2 sub mul beta 4 cp add mul
+ tt cp mul 3 mul sp 4 mul sub add radius mul sub
+ beta tt sub 3 mul div def % this is x2
+ radius ampli add 8 mul cp2 mul 1 cp add radius mul sub 3 div amp1 sub
+ dup radius sub beta mul % x1,y1
+ amp1 dup radius cp mul sub tt mul radius sp mul add % x2,y2
+ radius cp mul radius sp mul % x3 y3
+ curveto
+ /ampli ampli neg def
+ arcend rotate
+ } for
+ stroke
+%
+ grestore
+} def }
+%
+%
+\special{! /gluearc{
+%
+% Draws a gluon on an arcsegment
+% x_center,y_center,radius,stat_angle,end_angle,gluon_radius,num
+% in which num is the number of windings of the gluon.
+% Method:
+% 1: compute length of arc.
+% 2: generate gluon in x and y as if the arc is a straight line
+% 3: x' = (radius+y)*cos(x*const)
+% y' = (radius+y)*sin(x*const)
+%
+ gsw /num ed /ampi ed /arcend ed /arcstart ed /radius ed
+%
+ translate % move to center of circle
+ arcstart rotate % segment starts at zero
+ /darc arcend arcstart sub def % argsegment
+ /dr darc 180 div 3.141592 mul radius mul def % length of segment.
+ /const darc dr div def % conversion constant
+%
+ /num num 0.5 sub round def
+ /inc dr num 2 mul 2 add div def % increment per half winding
+%
+ /amp8 ampi 0.9 mul def
+ /amp1 radius ampi add def
+ /amp2 radius ampi sub def
+ /amp3 radius ampi 2 div add def
+ /amp4 amp1 inc amp8 add const mul cos div def
+ /amp5 amp2 amp8 const mul cos div def
+ /amp6 amp1 inc 0.6 mul amp8 add const mul cos div def
+ /amp7 amp1 inc 0.9 mul const mul cos div def
+ amp8 0 lt {/amp8 amp8 neg def} if
+%
+ /x1 inc 2 mul def
+%
+ newpath
+ radius 0 moveto
+%
+ inc 0.1 mul const mul dup cos amp3 mul exch sin amp3 mul
+ inc 0.5 mul const mul dup cos amp7 mul exch sin amp7 mul
+ inc 1.4 mul const mul dup cos amp1 mul exch sin amp1 mul
+ curveto
+ x1 amp8 add const mul dup cos amp6 mul exch sin amp6 mul
+ x1 amp8 add const mul dup cos amp5 mul exch sin amp5 mul
+ x1 const mul dup cos amp2 mul exch sin amp2 mul
+ curveto
+%
+ 2 1 num {
+ pop
+ x1 amp8 sub const mul dup cos amp5 mul exch sin amp5 mul
+ x1 amp8 sub const mul dup cos amp4 mul exch sin amp4 mul
+ x1 inc add const mul dup cos amp1 mul exch sin amp1 mul
+ curveto
+ /x1 x1 inc dup add add def
+ x1 amp8 add const mul dup cos amp4 mul exch sin amp4 mul
+ x1 amp8 add const mul dup cos amp5 mul exch sin amp5 mul
+ x1 const mul dup cos amp2 mul exch sin amp2 mul
+ curveto
+ } for
+%
+ x1 amp8 sub const mul dup cos amp5 mul exch sin amp5 mul
+ x1 amp8 sub const mul dup cos amp6 mul exch sin amp6 mul
+ x1 inc 0.6 mul add const mul dup cos amp1 mul exch sin amp1 mul
+ curveto
+ x1 inc 1.5 mul add const mul dup cos amp7 mul exch sin amp7 mul
+ dr inc 0.1 mul sub const mul dup cos amp3 mul exch sin amp3 mul
+ dr const mul dup cos radius mul exch sin radius mul
+ curveto
+ stroke
+%
+ grestore
+} def }
+%
+%
+\special{! /arrowarc{
+%
+% Draws an anticlockwise arc with an arrow in the middle
+% The arc is x_center, y_center, radius, start_angle, end_angle
+%
+ gsw /arcend ed /arcstart ed /radius ed
+%
+ translate % x and y are still on stack
+ newpath 0 0 radius arcstart arcend arc stroke
+ arcstart arcend gt {
+ /arcend arcend 360 add def } if
+ arcstart arcend add 2 div rotate % middle of arc
+ radius 0 translate % move to it
+ arrowup
+ grestore
+} def }
+%
+%
+\special{! /longarrowarc{
+%
+% Draws an anticlockwise arc with an arrow at the end
+% The arc is x_center, y_center, radius, start_angle, end_angle
+%
+ gsw /arcend ed /arcstart ed /radius ed
+%
+ translate % x and y are still on stack
+ arcstart arcend gt {
+ /arcend arcend 360 add def } if
+ /arcmid 540 width 1 add mul 3.14159 div radius div def
+ % discount for arrow
+ newpath 0 0 radius arcstart arcend arcmid sub arc stroke
+ arcend arcmid 2 div sub rotate % middle of arrow
+ radius 0 translate % move to it
+ arrowup
+ grestore
+} def }
+%
+%
+\special{! /dasharrowarc{
+%
+% Draws a dashed anticlockwise arc with an arrow in the middle
+% The arc is x_center, y_center, radius, start_angle, end_angle dsize
+%
+ gsw /dsize ed /arcend1 ed /arcstart1 ed /radius ed
+%
+ translate % x and y are still on stack
+%
+ arcend1 arcstart1 lt { /arcend1 arcend1 360 add def } if
+ /arcmid1 arcend1 arcstart1 add 2 div def
+%
+ 0 0 radius arcstart1 arcmid1 dsize width 1 dashcarc
+ 0 0 radius arcmid1 arcend1 dsize width 1 dashcarc
+ arcmid1 rotate
+ radius 0 translate
+ arrowup
+ grestore
+} def }
+%
+%
+\special{! /arrowarcn{
+%
+% Draws a clockwise arc with an arrow in the middle
+% The arc is x_center, y_center, radius, start_angle, end_angle
+%
+ gsw /arcend ed /arcstart ed /radius ed
+%
+ translate % x and y are still on stack
+ newpath 0 0 radius arcstart arcend arcn stroke
+ arcstart arcend lt {
+ /arcstart arcstart 360 add def } if
+ arcstart arcend add 2 div rotate % middle of arc
+ radius 0 translate % move to it
+ arrowdown
+ grestore
+} def }
+%
+%
+\special{! /longarrowarcn{
+%
+% Draws a clockwise arc with an arrow in the end
+% The arc is x_center, y_center, radius, start_angle, end_angle
+%
+ gsw /arcend ed /arcstart ed /radius ed
+%
+ translate % x and y are still on stack
+ arcstart arcend lt {
+ /arcstart arcstart 360 add def } if
+ /arcmid 540 width 1 add mul 3.14159 div radius div def
+ % correction for arrow
+ newpath 0 0 radius arcstart arcend arcmid add arcn stroke
+ arcend arcmid 2 div add rotate % middle of arrow
+ radius 0 translate % move to it
+ arrowdown
+ grestore
+} def }
+%
+%
+\special{! /dasharrowarcn{
+%
+% Draws a dashed clockwise arc with an arrow in the middle
+% The arc is x_center, y_center, radius, start_angle, end_angle
+%
+ gsw /dsize ed /arcend1 ed /arcstart1 ed /radius ed
+%
+ translate % x and y are still on stack
+ arcstart1 arcend1 lt {
+ /arcstart1 arcstart1 360 add def } if
+ /arcmid1 arcstart1 arcend1 add 2 div def
+ 0 0 radius arcmid1 arcstart1 dsize width 1 dashcarc
+ 0 0 radius arcend1 arcmid1 dsize width 1 dashcarc
+ arcmid1 rotate
+ radius 0 translate
+ arrowdown
+ grestore
+} def }
+%
+%
+\special{! /arrowline{
+%
+% Draws a straight line with an arrow in the middle
+% x1,y1,x2,y2
+%
+ gsw p2 p1
+ /dx x2 x1 sub def /dy y2 y1 sub def
+ /dr dx dx mul dy dy mul add sqrt def
+%
+ x1 y1 translate
+ newpath
+ 0 0 moveto
+ dx dy rlineto
+ stroke
+ dy dx atan rotate
+ dr 2.0 div 0 translate
+ arrowright
+ grestore
+} def }
+%
+%
+\special{! /longarrow{
+%
+% Draws a straight line with an arrow at the end
+% x1,y1,x2,y2
+%
+ gsw p2 p1
+ /dx x2 x1 sub def /dy y2 y1 sub def
+ /dr dx dx mul dy dy mul add sqrt def
+%
+ x1 y1 translate
+ dy dx atan rotate
+ newpath
+ 0 0 moveto
+ dr width 3 mul sub 0 rlineto
+ stroke
+ dr width 1.5 mul sub 0 translate
+ arrowright
+ grestore
+} def }
+%
+%
+\special{! /dasharrowline{
+%
+% Draws a straight dashed line with an arrow in the middle
+% x1,y1,x2,y2
+%
+% The pattern is ideally [dsize dsize] 0 setdash
+% but we want to have (2*n+1)/2 patterns, so dsize must be rounded
+% Actually we want the center to be black too so that the arrow
+% fits in nice. This means that n must be odd. So
+% r = dsize*(4*m+3)
+%
+ gsw /dsize ed p2 p1
+ /dx x2 x1 sub def /dy y2 y1 sub def
+ /dr dx dx mul dy dy mul add sqrt 2 div def
+%
+ x1 y1 translate
+ dy dx atan rotate
+%
+ 0 0 dr 0 dsize width 1 dashline
+ dr 0 translate
+ 0 0 dr 0 dsize width 1 dashline
+ arrowright
+ grestore
+} def }
+%
+%
+\special{! /line{
+%
+% Draws a straight line: x1,y1,x2,y2
+%
+ gsw p2 p1
+%
+ newpath
+ x1 y1 moveto
+ x2 y2 lineto
+ stroke
+ grestore
+} def }
+%
+%
+\special{! /dashline{
+%
+% Draws a straight dashed line: x1,y1,x2,y2,dsize
+%
+% The pattern is ideally [dsize dsize] 0 setdash
+% but we want to have (2*n+1)/2 patterns, so dsize must be rounded
+%
+ gsw /dsize ed p2 p1
+ /r y2 y1 sub dup mul x2 x1 sub dup mul add sqrt def
+ /dsize r dsize 2 mul div 0.5 sub round dup 0 le { pop 0 } if 2 mul 1 add
+ r exch div def
+ [dsize dsize] 0 setdash
+%
+ newpath
+ x1 y1 moveto
+ x2 y2 lineto
+ stroke
+ grestore
+} def }
+%
+%
+\special{! /carc{
+%
+% Draws an anti-clockwise arc segment:
+% x_center, y_center, radius, start_angle, end_angle
+%
+ gsw /arcend ed /arcstart ed /radius ed
+%
+ translate % x and y are still on stack
+ newpath 0 0 radius arcstart arcend arc stroke
+ grestore
+} def }
+%
+%
+\special{! /dashcarc{
+%
+% Draws an anti-clockwise arc segment:
+% x_center, y_center, radius, start_angle, end_angle, dsize
+%
+ gsw /dsize ed /arcend ed /arcstart ed /radius ed
+%
+ translate % x and y are still on stack
+%
+% Compute the length of the line
+%
+ /dr arcend arcstart sub dup 0 lt { 360 add } if
+ 3.14159 mul 180 div radius mul def
+ /dsize dr dsize 2 mul div 0.5 sub round dup 0 le { pop 0 } if 2 mul 1 add
+ dr exch div def
+ [dsize dsize] 0 setdash
+%
+ newpath 0 0 radius arcstart arcend arc stroke
+ grestore
+} def }
+%
+%
+\special{! /vertex{
+%
+% Puts a fat dot at x,y size is the radius of the dot
+%
+ gs
+ /dotsize ed
+ translate
+ newpath
+ 0 0 dotsize 0 360 arc
+ fill stroke
+ grestore
+} def }
+%
+%
+\special{! /bcirc{
+%
+% Draws an anti-clockwise blanked circle:
+% x_center, y_center, radius
+%
+ gsw /radius ed
+%
+ translate % x and y are still on stack
+%
+ gsave
+ 1 setgray
+ newpath 0 0 radius 0 360 arc fill
+ grestore
+ newpath 0 0 radius 0 360 arc stroke
+ grestore
+} def }
+%
+%
+\special{! /gcirc{
+%
+% Draws an anti-clockwise blanked gray circle:
+% x_center, y_center, radius, grayscale
+%
+ gsw /gcolor ed /radius ed
+%
+ translate % x and y are still on stack
+%
+ 1 setgray
+ newpath 0 0 radius 0 360 arc fill
+ gcolor setgray
+ newpath 0 0 radius 0 360 arc fill
+ 0 setgray
+ newpath 0 0 radius 0 360 arc stroke
+ grestore
+} def }
+%
+%
+\special{! /ccirc1{
+%
+% Draws an anti-clockwise circle :
+% x_center, y_center, radius
+% Part 1: the contents in background color
+%
+ gsw /radius ed
+%
+ translate % x and y are still on stack
+%
+ newpath 0 0 radius 0 360 arc fill
+ grestore
+} def }
+%
+%
+\special{! /ccirc2{
+%
+% Draws an anti-clockwise circle :
+% x_center, y_center, radius
+% Part 1: the contents in background color
+%
+ gsw /radius ed
+%
+ translate % x and y are still on stack
+%
+ newpath 0 0 radius 0 360 arc stroke
+ grestore
+} def }
+%
+%
+\special{! /box{
+%
+% Draws a box x1,y1,x2,y2
+%
+ gsw p2 p1
+ abox stroke
+ grestore
+} def }
+%
+%
+\special{! /bbox{
+%
+% Draws a blanked out box x1,y1,x2,y2
+%
+ gsw p2 p1
+ gsave
+ 1 setgray abox fill
+ grestore
+ abox stroke
+ grestore
+} def }
+%
+%
+\special{! /gbox{
+%
+% Draws a blanked out gray box x1,y1,x2,y2,color
+%
+ gsw /gcolor ed p2 p1
+ 1 setgray abox fill
+ gcolor setgray abox fill
+ 0 setgray abox stroke
+ grestore
+} def }
+%
+%
+\special{! /cbox1{
+%
+% Draws a blanked out colored box x1,y1,x2,y2
+% Part 1: the background
+%
+ gsw p2 p1
+ abox fill
+ grestore
+} def }
+%
+%
+\special{! /cbox2{
+%
+% Draws a blanked out colored box x1,y1,x2,y2
+% Part 1: the box
+%
+ gsw p2 p1
+ abox stroke
+ grestore
+} def }
+%
+%
+\special{! /btext{
+%
+% Makes a box that has the text centered in it
+% The center of the box is at x,y and the box is just large enough
+% for the text.
+% x,y,text,fontsize,linewidth,scale
+%
+ gsw /fsize ed /thetext ed translate
+ /hsize thetext stringwidth pop def
+ /x1 hsize fsize add 2 div neg def
+ /y1 fsize 2 mul 3 div neg def
+ /x2 x1 neg def /y2 y1 neg def
+ gsave 1 setgray abox fill grestore
+ abox stroke
+ hsize 2 div neg fsize 3 div neg moveto thetext show
+ grestore
+} def }
+%
+%
+\special{! /b2text{
+%
+% Makes a box that has two lines of text centered in it
+% The center of the box is at x,y and the box is just large enough
+% for the text.
+% x,y,text1,text2,fontsize,linewidth,scale
+%
+ gsw /fsize ed /text2 ed /text1 ed translate
+ /hsize1 text1 stringwidth pop def
+ /hsize2 text2 stringwidth pop def
+ hsize1 hsize2 lt { /hsize hsize2 def } { /hsize hsize1 def } ifelse
+ /x1 hsize fsize add 2 div neg def
+ /y1 fsize neg 7 mul 6 div def
+ /x2 x1 neg def /y2 y1 neg def
+ gsave 1 setgray abox fill grestore
+ abox stroke
+ hsize1 2 div neg fsize 6 div moveto text1 show
+ hsize2 2 div neg fsize 5 mul 6 div neg moveto text2 show
+ grestore
+} def }
+%
+%
+\special{! /gtext{
+%
+% Makes a gray box that has the text centered in it
+% The center of the box is at x,y and the box is just large enough
+% for the text.
+% x,y,gray,text,fontsize,linewidth,scale
+%
+ gsw /fsize ed /thetext ed /graysc ed translate
+ /hsize thetext stringwidth pop def
+ /x1 hsize fsize add 2 div neg def
+ /y1 fsize 2 mul 3 div neg def
+ /x2 x1 neg def /y2 y1 neg def
+ graysc setgray abox fill 0 setgray abox stroke
+ hsize 2 div neg fsize 3 div neg moveto thetext show
+ grestore
+} def }
+%
+%
+\special{! /ctext1{
+%
+% Makes a colored box that has the text centered in it
+% The center of the box is at x,y and the box is just large enough
+% for the text.
+% x,y,text,fontsize,linewidth,scale
+% Part 1: the background
+%
+ gsw /fsize ed /thetext ed translate
+ /hsize thetext stringwidth pop def
+ /x1 hsize fsize add 2 div neg def
+ /y1 fsize 2 mul 3 div neg def
+ /x2 x1 neg def /y2 y1 neg def
+ abox fill
+ grestore
+} def }
+%
+%
+\special{! /ctext2{
+%
+% Makes a colored box that has the text centered in it
+% The center of the box is at x,y and the box is just large enough
+% for the text.
+% x,y,text,fontsize,linewidth,scale
+% Part 2: the box and the text
+%
+ gsw /fsize ed /thetext ed translate
+ /hsize thetext stringwidth pop def
+ /x1 hsize fsize add 2 div neg def
+ /y1 fsize 2 mul 3 div neg def
+ /x2 x1 neg def /y2 y1 neg def
+ abox stroke
+ hsize 2 div neg fsize 3 div neg moveto thetext show
+ grestore
+} def }
+%
+%
+\special{! /g2text{
+%
+% Makes a gray box that has two lines of text centered in it
+% The center of the box is at x,y and the box is just large enough
+% for the text.
+% x,y,gray,text1,text2,fontsize,linewidth,scale
+%
+ gsw /fsize ed /text2 ed /text1 ed /graysc ed translate
+ /hsize1 text1 stringwidth pop def
+ /hsize2 text2 stringwidth pop def
+ hsize1 hsize2 lt { /hsize hsize2 def } { /hsize hsize1 def } ifelse
+ /x1 hsize fsize add 2 div neg def
+ /y1 fsize neg 7 mul 6 div def
+ /x2 x1 neg def /y2 y1 neg def
+ graysc setgray abox fill 0 setgray abox stroke
+ hsize1 2 div neg fsize 6 div moveto text1 show
+ hsize2 2 div neg fsize 5 mul 6 div neg moveto text2 show
+ grestore
+} def }
+%
+%
+\special{! /c2text1{
+%
+% Makes a colored box that has two lines of text centered in it
+% The center of the box is at x,y and the box is just large enough
+% for the text.
+% x,y,text1,text2,fontsize,linewidth,scale
+% Part 1: the background
+%
+ gsw /fsize ed /text2 ed /text1 ed translate
+ /hsize1 text1 stringwidth pop def
+ /hsize2 text2 stringwidth pop def
+ hsize1 hsize2 lt { /hsize hsize2 def } { /hsize hsize1 def } ifelse
+ /x1 hsize fsize add 2 div neg def
+ /y1 fsize neg 7 mul 6 div def
+ /x2 x1 neg def /y2 y1 neg def
+ abox fill
+ grestore
+} def }
+%
+%
+\special{! /c2text2{
+%
+% Makes a colored box that has two lines of text centered in it
+% The center of the box is at x,y and the box is just large enough
+% for the text.
+% x,y,text1,text2,fontsize,linewidth,scale
+% Part 2, box and text
+%
+ gsw /fsize ed /text2 ed /text1 ed translate
+ /hsize1 text1 stringwidth pop def
+ /hsize2 text2 stringwidth pop def
+ hsize1 hsize2 lt { /hsize hsize2 def } { /hsize hsize1 def } ifelse
+ /x1 hsize fsize add 2 div neg def
+ /y1 fsize neg 7 mul 6 div def
+ /x2 x1 neg def /y2 y1 neg def
+ abox stroke
+ hsize1 2 div neg fsize 6 div moveto text1 show
+ hsize2 2 div neg fsize 5 mul 6 div neg moveto text2 show
+ grestore
+} def }
+%
+%
+\special{! /ptext{
+%
+% Puts a text at x,y (focal point)
+% phi is a rotation angle
+% Mode tells how the text should be w.r.t. the focal point.
+% fsize is the fontsize
+% Then the text is given.
+% Finally the scale factor should be there
+%
+ gs
+ /text ed
+ /fsize ed
+ /mode ed
+ 3 1 roll
+ translate rotate % We are at the focus and have the proper orientation
+ mode 3 lt { 0 fsize neg translate } {
+ mode 6 lt { /mode mode 3 sub def 0 fsize 2 div neg translate }
+ { /mode mode 6 sub def } ifelse } ifelse
+ /fsize text stringwidth pop def
+ mode 1 eq { fsize 2 div neg 0 translate } {
+ mode 2 eq { fsize neg 0 translate } if } ifelse
+ 0 0 moveto
+ text show
+ grestore
+} def }
+%
+%
+\special{! /goval{
+%
+% Draws a colored oval that overwrites whatever was there.
+% x_center y_center height width rotation color linewidth scale
+%
+ gsw /gcolor ed /x1 ed /x2 ed /radius ed
+%
+ translate % x and y are still on stack
+ x1 rotate
+ x2 radius div 1.0 scale
+ 1 setgray newpath 0 0 radius 0 360 arc fill
+ gcolor setgray newpath 0 0 radius 0 360 arc fill
+ 0 setgray newpath 0 0 radius 0 360 arc stroke
+ grestore
+} def }
+%
+%
+\special{! /coval1{
+%
+% Draws a oval that overwrites whatever was there.
+% x_center y_center height width rotation linewidth scale
+%
+ gsw /x1 ed /x2 ed /radius ed
+%
+ translate % x and y are still on stack
+ x1 rotate
+ x2 radius div 1.0 scale
+ newpath 0 0 radius 0 360 arc fill
+ grestore
+} def }
+%
+%
+\special{! /coval2{
+%
+% Draws a oval that overwrites whatever was there.
+% x_center y_center height width rotation linewidth scale
+%
+ gsw /x1 ed /x2 ed /radius ed
+%
+ translate % x and y are still on stack
+ x1 rotate
+ x2 radius div 1.0 scale
+ newpath 0 0 radius 0 360 arc stroke
+ grestore
+} def }
+%
+%
+\special{! /oval{
+%
+% Draws an oval that does not overwrite whatever was there.
+% x_center y_center height width rotation linewidth scale
+%
+ gsw /x1 ed /x2 ed /radius ed
+%
+ translate % x and y are still on stack
+ x1 rotate
+ x2 radius div 1.0 scale
+%
+ newpath 0 0 radius 0 360 arc stroke
+ grestore
+} def }
+%
+%
+\special{! /docurve{
+ x1 2 mul x2 add 3 div
+ y1 y0 sub x1 x0 sub div x2 x0 sub mul
+ y2 y0 sub x2 x0 sub div x1 x0 sub mul add
+ y1 add y0 2 mul add 3 div
+ x1 x2 2 mul add 3 div
+ y2 y3 sub x2 x3 sub div x1 x3 sub mul
+ y1 y3 sub x1 x3 sub div x2 x3 sub mul add
+ y2 add y3 2 mul add 3 div
+ x2 y2 curveto
+} def }
+%
+\special{! /makecurve{
+%
+% Incoming stack:
+% [array of x,y pairs] width scale
+%
+ gsw /points ed
+ /ss points length 2 idiv 2 mul def
+ newpath
+ ss 4 gt {
+ /x1 points 0 get def
+ /y1 points 1 get def
+ /x2 points 2 get def
+ /y2 points 3 get def
+ /x3 points 4 get def
+ /y3 points 5 get def
+ /x0 x1 2 mul x2 sub def
+ /y0 y3 y2 sub x3 x2 sub div y2 y1 sub x2 x1 sub div sub 2 mul
+ x2 x1 sub dup mul x3 x1 sub div mul
+ y1 2 mul add y2 sub def
+ x1 y1 moveto
+ docurve
+ 0 2 ss 8 sub { /ii ed
+ /x0 points ii get def
+ /y0 points ii 1 add get def
+ /x1 points ii 2 add get def
+ /y1 points ii 3 add get def
+ /x2 points ii 4 add get def
+ /y2 points ii 5 add get def
+ /x3 points ii 6 add get def
+ /y3 points ii 7 add get def
+ docurve
+ } for
+ /x0 points ss 6 sub get def
+ /y0 points ss 5 sub get def
+ /x1 points ss 4 sub get def
+ /y1 points ss 3 sub get def
+ /x2 points ss 2 sub get def
+ /y2 points ss 1 sub get def
+ /x3 x2 2 mul x1 sub def
+ /y3 y2 y1 sub x2 x1 sub div y1 y0 sub x1 x0 sub div sub 2 mul
+ x2 x1 sub dup mul x2 x0 sub div mul
+ y2 2 mul add y1 sub def
+ docurve
+ } {
+ ss 4 eq {
+ points 0 get points 1 get moveto
+ points 2 get points 3 get lineto
+ } if
+ } ifelse
+ stroke
+ grestore
+} def }
+%
+%
+\special{! /makedashcurve{
+%
+% Incoming stack:
+% [array of x,y pairs] dashsize width scale
+%
+ gsw /dsize ed /points ed
+ /ss points length 2 idiv 2 mul def
+ newpath
+ ss 4 gt {
+ /x1 points 0 get def
+ /y1 points 1 get def
+ /x2 points 2 get def
+ /y2 points 3 get def
+ /x3 points 4 get def
+ /y3 points 5 get def
+ /x0 x1 2 mul x2 sub def
+ /y0 y3 y2 sub x3 x2 sub div y2 y1 sub x2 x1 sub div sub 2 mul
+ x2 x1 sub dup mul x3 x1 sub div mul
+ y1 2 mul add y2 sub def
+ x1 y1 moveto
+ docurve
+ 0 2 ss 8 sub { /ii ed
+ /x0 points ii get def
+ /y0 points ii 1 add get def
+ /x1 points ii 2 add get def
+ /y1 points ii 3 add get def
+ /x2 points ii 4 add get def
+ /y2 points ii 5 add get def
+ /x3 points ii 6 add get def
+ /y3 points ii 7 add get def
+ docurve
+ } for
+ /x0 points ss 6 sub get def
+ /y0 points ss 5 sub get def
+ /x1 points ss 4 sub get def
+ /y1 points ss 3 sub get def
+ /x2 points ss 2 sub get def
+ /y2 points ss 1 sub get def
+ /x3 x2 2 mul x1 sub def
+ /y3 y2 y1 sub x2 x1 sub div y1 y0 sub x1 x0 sub div sub 2 mul
+ x2 x1 sub dup mul x2 x0 sub div mul
+ y2 2 mul add y1 sub def
+ docurve
+ } {
+ ss 4 eq {
+ points 0 get points 1 get moveto
+ points 2 get points 3 get lineto
+ } if
+ } ifelse
+ centerdash
+ stroke
+ grestore
+} def }
+%
+\special{! /pathlength{
+ flattenpath
+ /dist 0 def
+ { /yfirst ed /xfirst ed /ymoveto yfirst def /xmoveto xfirst def }
+ { /ynext ed /xnext ed /dist dist ynext yfirst sub dup mul
+ xnext xfirst sub dup mul add sqrt add def
+ /yfirst ynext def /xfirst xnext def }
+ {}
+ {/ynext ymoveto def /xnext xmoveto def
+ /dist ynext yfirst sub dup mul
+ xnext xfirst sub dup mul add sqrt add def
+ /yfirst ynext def /xfirst xnext def }
+ pathforall
+ dist
+} def }
+%
+\special{! /centerdash{
+ /pathlen pathlength def
+ /jj pathlen dsize div 2.0 div cvi def
+ /ddsize pathlen jj 2.0 mul div def
+ [ddsize] ddsize 2 div setdash
+} def }
+%
+%
+\special{! /logaxis{
+%
+% Draws an axis from x1,y1 to x2,y2 with nl log divisions
+% size of the hashes hs, offset F
+% and width W. The stack looks like
+% x1,y1,x2,y2,nl,hs,F,W,scale
+% After the rotation the hash marks are on top if nl is positive and
+% on the bottom if nl is negative
+%
+ gsw /offset ed /hashsize ed /nlogs ed p2 p1
+ x1 y1 translate
+ /y2 y2 y1 sub def /x2 x2 x1 sub def
+ y2 x2 atan rotate
+ /rr x2 dup mul y2 dup mul add sqrt def
+ offset 0 ne { /offset offset ln 10 ln div def } if
+ /offset offset dup cvi sub def
+ newpath
+ 0 0 moveto
+ rr 0 lineto
+ /lsize rr nlogs div def
+ 0 1 nlogs { /x2 ed
+ x2 offset ge {
+ /y2 x2 offset sub lsize mul def
+ y2 rr le {
+ y2 0 moveto
+ y2 hashsize 1.2 mul lineto
+ } if
+ } if
+ } for
+ stroke
+ width 0.6 mul setlinewidth
+ newpath
+ 0 1 nlogs { /x2 ed
+ 2 1 9 {
+ ln 10 ln div x2 add
+ /xx2 ed
+ xx2 offset ge {
+ /y2 xx2 offset sub lsize mul def
+ y2 rr le {
+ y2 0 moveto
+ y2 hashsize 0.8 mul lineto
+ } if
+ } if
+ } for
+ } for
+ stroke
+ grestore
+} def }
+%
+%
+\special{! /linaxis{
+%
+% x1,y1,x2,y2,num_decs,per_dec,hashsize,offset,width,scale
+%
+ gsw /offset ed /hashsize ed /perdec ed /numdec ed p2 p1
+ x1 y1 translate
+ /y2 y2 y1 sub def /x2 x2 x1 sub def
+ y2 x2 atan rotate
+ /rr x2 dup mul y2 dup mul add sqrt def
+ newpath
+ 0 0 moveto
+ rr 0 lineto
+ /x1 rr numdec perdec mul div def
+ /y1 rr numdec div def
+ /offset offset x1 mul def
+ 0 1 numdec { y1 mul offset sub
+ dup 0 ge {
+ dup rr le {
+ dup 0 moveto
+ hashsize 1.2 mul lineto
+ } if
+ } if
+ } for
+ stroke
+ width 0.6 mul setlinewidth
+ newpath
+ offset cvi 1 numdec perdec mul offset add {
+ x1 mul offset sub
+ dup 0 ge {
+ dup rr le {
+ dup 0 moveto
+ hashsize 0.8 mul lineto
+ } if
+ } if
+ } for
+ stroke
+ grestore
+} def }
+%
+\def\axowidth{0.5 }
+\def\axoscale{1.0 }
+\def\axoxoff{0 }
+\def\axoyoff{0 }
+\def\axoxo{0 }
+\def\axoyo{0 }
+\def\firstcall{1}
+%
+\def\Gluon(#1,#2)(#3,#4)#5#6{
+%
+% Draws a gluon from (x1,y1) to (x2,y2) with amplitude and number of windings
+%
+\put(\axoxoff,\axoyoff){\special{"\axocolor #1 \axoxo add #2 \axoyo add #3
+ \axoxo add #4 \axoyo add #5 #6 \axowidth \axoscale gluon showpage}}
+}
+%
+\def\Photon(#1,#2)(#3,#4)#5#6{
+%
+% Draws a photon from (x1,y1) to (x2,y2) with amplitude and number of windings
+%
+\put(\axoxoff,\axoyoff){\special{"\axocolor #1 \axoxo add #2 \axoyo add #3
+ \axoxo add #4 \axoyo add #5 #6 \axowidth \axoscale photon showpage}}
+}
+%
+\def\ZigZag(#1,#2)(#3,#4)#5#6{
+%
+% Draws a zigzag from (x1,y1) to (x2,y2) with amplitude and number of zigzags
+%
+\put(\axoxoff,\axoyoff){\special{"\axocolor #1 \axoxo add #2 \axoyo add #3
+ \axoxo add #4 \axoyo add #5 #6 \axowidth \axoscale zigzag showpage}}
+}
+%
+\def\PhotonArc(#1,#2)(#3,#4,#5)#6#7{
+%
+% Draws a photon on an arc segment. The center of the curve is at (1,2)
+% The radius, start angle and target angle are (#3,#4,#5), 6 is the
+% amplitude of the gluon, and 7 is the number of wiggles.
+%
+\put(\axoxoff,\axoyoff){\special{"\axocolor #1 \axoxo add #2 \axoyo add #3
+ #4 #5 #6 #7 \axowidth \axoscale photonarc showpage}}
+}
+%
+\def\GlueArc(#1,#2)(#3,#4,#5)#6#7{
+%
+% Draws a gluon on aa arc segment. The center of the curve is at (1,2)
+% The radius, start angle and target angle are (#3,#4,#5), 6 is the
+% amplitude of the gluon, and 7 is the number of windings.
+%
+\put(\axoxoff,\axoyoff){\special{"\axocolor #1 \axoxo add #2 \axoyo add #3
+ #4 #5 #6 #7 \axowidth \axoscale gluearc showpage}}
+}
+%
+\def\ArrowArc(#1,#2)(#3,#4,#5){
+%
+% Draws an arc segment with an arrow in it. The center of the curve
+% is at (1,2).
+% The radius, start angle and target angle are (#3,#4,#5).
+% The arc segment runs anticlockwise
+%
+\put(\axoxoff,\axoyoff){\special{"\axocolor #1 \axoxo add #2 \axoyo add #3
+ #4 #5 \axowidth \axoscale arrowarc showpage}}
+}
+%
+\def\LongArrowArc(#1,#2)(#3,#4,#5){
+%
+% Draws an arc segment with an arrow at its end. The center of the curve
+% is at (1,2).
+% The radius, start angle and target angle are (#3,#4,#5).
+% The arc segment runs anticlockwise
+%
+\put(\axoxoff,\axoyoff){\special{"\axocolor #1 \axoxo add #2 \axoyo add #3
+ #4 #5 \axowidth \axoscale longarrowarc showpage}}
+}
+%
+\def\DashArrowArc(#1,#2)(#3,#4,#5)#6{
+%
+% Draws a dashed arc segment with an arrow in it. The center of the curve
+% is at (1,2).
+% The radius, start angle and target angle are (#3,#4,#5).
+% The arc segment runs anticlockwise
+%
+\put(\axoxoff,\axoyoff){\special{"\axocolor #1 \axoxo add #2 \axoyo add #3
+ #4 #5 #6 \axowidth \axoscale dasharrowarc showpage}}
+}
+%
+\def\ArrowArcn(#1,#2)(#3,#4,#5){
+%
+% Draws an arc segment with an arrow in it. The center of the curve
+% is at (1,2).
+% The radius, start angle and target angle are (#3,#4,#5).
+% The arc segment runs clockwise
+%
+\put(\axoxoff,\axoyoff){\special{"\axocolor #1 \axoxo add #2 \axoyo add #3
+ #4 #5 \axowidth \axoscale arrowarcn showpage}}
+}
+%
+\def\LongArrowArcn(#1,#2)(#3,#4,#5){
+%
+% Draws an arc segment with an arrow at the end. The center of the curve
+% is at (1,2).
+% The radius, start angle and target angle are (#3,#4,#5).
+% The arc segment runs clockwise
+%
+\put(\axoxoff,\axoyoff){\special{"\axocolor #1 \axoxo add #2 \axoyo add #3
+ #4 #5 \axowidth \axoscale longarrowarcn showpage}}
+}
+%
+\def\DashArrowArcn(#1,#2)(#3,#4,#5)#6{
+%
+% Draws a dashed arc segment with an arrow in it. The center of the curve
+% is at (1,2).
+% The radius, start angle and target angle are (#3,#4,#5).
+% The arc segment runs clockwise
+%
+\put(\axoxoff,\axoyoff){\special{"\axocolor #1 \axoxo add #2 \axoyo add #3
+ #4 #5 #6 \axowidth \axoscale dasharrowarcn showpage}}
+}
+%
+\def\ArrowLine(#1,#2)(#3,#4){
+%
+% Draws a line with an arrow in it from (x1,y1) to (x2,y2)
+%
+\put(\axoxoff,\axoyoff){\special{"\axocolor #1 \axoxo add #2 \axoyo add #3
+ \axoxo add #4 \axoyo add \axowidth \axoscale arrowline showpage}}
+}
+%
+\def\LongArrow(#1,#2)(#3,#4){
+%
+% Draws a line with an arrow at the end from (x1,y1) to (x2,y2)
+%
+\put(\axoxoff,\axoyoff){\special{"\axocolor #1 \axoxo add #2 \axoyo add #3
+ \axoxo add #4 \axoyo add \axowidth \axoscale longarrow showpage}}
+}
+%
+\def\DashArrowLine(#1,#2)(#3,#4)#5{
+%
+% Draws a dashed line with an arrow in it from (x1,y1) to (x2,y2)
+% The size of the dashes is given by the fifth argument.
+%
+\put(\axoxoff,\axoyoff){\special{"\axocolor #1 \axoxo add #2 \axoyo add #3
+ \axoxo add #4 \axoyo add #5 \axowidth \axoscale dasharrowline showpage}}
+}
+%
+\def\Line(#1,#2)(#3,#4){
+%
+% Draws a line from (x1,y1) to (x2,y2)
+%
+\put(\axoxoff,\axoyoff){\special{"\axocolor #1 \axoxo add #2 \axoyo add #3
+ \axoxo add #4 \axoyo add \axowidth \axoscale line showpage}}
+}
+%
+\def\DashLine(#1,#2)(#3,#4)#5{
+%
+% Draws a line from (x1,y1) to (x2,y2) with a dash pattern of which the
+% alternating black and white pieces are approximately {5} points long
+%
+\put(\axoxoff,\axoyoff){\special{"\axocolor #1 \axoxo add #2 \axoyo add #3
+ \axoxo add #4 \axoyo add #5 \axowidth \axoscale dashline showpage}}
+}
+%
+\def\CArc(#1,#2)(#3,#4,#5){
+%
+% Draws an arc segment. The center of the curve
+% is at (1,2).
+% The radius, start angle and target angle are (#3,#4,#5).
+% The arc segment runs anticlockwise
+%
+\put(\axoxoff,\axoyoff){\special{"\axocolor #1 \axoxo add #2 \axoyo add #3
+ #4 #5 \axowidth \axoscale carc showpage}}
+}
+%
+\def\DashCArc(#1,#2)(#3,#4,#5)#6{
+%
+% Draws a dashed arc segment. The center of the curve
+% is at (1,2).
+% The radius, start angle and target angle are (#3,#4,#5).
+% The arc segment runs anticlockwise
+% dsize (6) is the dashsize. this is rounded to make things come
+% out right.
+%
+\put(\axoxoff,\axoyoff){\special{"\axocolor #1 \axoxo add #2 \axoyo add #3
+ #4 #5 #6 \axowidth \axoscale dashcarc showpage}}
+}
+%
+\def\Vertex(#1,#2)#3{
+%
+% Draws a fat dot at (1,2). The radius of the dot is given by 3.
+%
+\put(\axoxoff,\axoyoff){\special{"\axocolor #1 \axoxo add #2 \axoyo add #3
+ \axoscale vertex showpage}}
+}
+%
+\def\Text(#1,#2)[#3]#4{
+%
+% Draws text at (1,2). Argument 3 is l,r or c indicating whether
+% the text is left adjusted, right adjusted or centered.
+% 4 is of course the text.
+%
+\dimen0=\axoxoff \unitlength
+\dimen1=\axoyoff \unitlength
+\advance\dimen0 by #1 \unitlength
+\advance\dimen1 by #2 \unitlength
+\makeatletter
+\@killglue\raise\dimen1\hbox to\z@{\kern\dimen0 \makebox(0,0)[#3]{#4}\hss}
+\ignorespaces
+\makeatother
+}
+%
+\def\BCirc(#1,#2)#3{
+%
+% Draws a circle at (1,2) and radius 3 that is blanked out.
+%
+\put(\axoxoff,\axoyoff){\special{"\axocolor #1 \axoxo add #2 \axoyo add #3
+ \axowidth \axoscale bcirc showpage}}
+}
+%
+\def\GCirc(#1,#2)#3#4{
+%
+% Draws a circle at (1,2) and radius 3 that is blanked out.
+% Then it fills the circle with a gray scale 4 (0 = black, 1 is white)
+%
+\put(\axoxoff,\axoyoff){\special{"#1 \axoxo add #2 \axoyo add #3
+ #4 \axowidth \axoscale gcirc showpage}}
+}
+%
+\def\CCirc(#1,#2)#3#4#5{
+%
+% Draws a circle at (1,2) and radius 3 that is blanked out.
+% #4 is the color of the circle, #5 the color of the contents
+%
+\put(\axoxoff,\axoyoff){\special{"#5 #1 \axoxo add #2 \axoyo add #3
+ \axowidth \axoscale ccirc1 showpage}}
+\put(\axoxoff,\axoyoff){\special{"#4 #1 \axoxo add #2 \axoyo add #3
+ \axowidth \axoscale ccirc2 showpage}}
+}
+%
+\def\EBox(#1,#2)(#3,#4){
+%
+% Draws a box with the left bottom at (x1,y1) and the right top
+% at (x2,y2).
+%
+\put(\axoxoff,\axoyoff){\special{"\axocolor #1 \axoxo add #2 \axoyo add #3
+ \axoxo add #4 \axoyo add \axowidth \axoscale box showpage}}
+}
+%
+\def\BBox(#1,#2)(#3,#4){
+%
+% Draws a box with the left bottom at (x1,y1) and the right top
+% at (x2,y2). The box is blanked out.
+%
+\put(\axoxoff,\axoyoff){\special{"\axocolor #1 \axoxo add #2 \axoyo add #3
+ \axoxo add #4 \axoyo add \axowidth \axoscale bbox showpage}}
+}
+%
+\def\GBox(#1,#2)(#3,#4)#5{
+%
+% Draws a box with the left bottom at (x1,y1) and the right top
+% at (x2,y2). The box is blanked out and then filled with gray 5
+% (0 is black, 1 is white)
+%
+\put(\axoxoff,\axoyoff){\special{"#1 \axoxo add #2 \axoyo add #3
+ \axoxo add #4 \axoyo add #5 \axowidth \axoscale gbox showpage}}
+}
+%
+\def\CBox(#1,#2)(#3,#4)#5#6{
+%
+% Draws a box with the left bottom at (x1,y1) and the right top
+% at (x2,y2). The color of the box is #5, the background is #6
+%
+\put(\axoxoff,\axoyoff){\special{"#6 #1 \axoxo add #2 \axoyo add #3
+ \axoxo add #4 \axoyo add \axowidth \axoscale cbox1 showpage}}
+\put(\axoxoff,\axoyoff){\special{"#5 #1 \axoxo add #2 \axoyo add #3
+ \axoxo add #4 \axoyo add \axowidth \axoscale cbox2 showpage}}
+}
+%
+\def\Boxc(#1,#2)(#3,#4){
+%
+% Draws a box with the center at (x1,y1).
+% The width and height are (3,4).
+%
+\put(\axoxoff,\axoyoff){\special{"\axocolor #1 \axoxo add #3 2 div sub #2 \axoyo add
+ #4 2 div sub #1 \axoxo add #3 2 div add #2 \axoyo add #4 2 div add
+ \axowidth \axoscale box showpage}}
+}
+%
+\def\BBoxc(#1,#2)(#3,#4){
+%
+% Draws a box with the center at (x1,y1).
+% The width and height are (3,4). The contents are blanked out
+%
+\put(\axoxoff,\axoyoff){\special{"\axocolor #1 \axoxo add #3 2 div sub #2 \axoyo add
+ #4 2 div sub #1 \axoxo add #3 2 div add #2 \axoyo add #4 2 div add
+ \axowidth \axoscale bbox showpage}}
+}
+%
+\def\GBoxc(#1,#2)(#3,#4)#5{
+%
+% Draws a box with the center at (x1,y1).
+% The width and height are (3,4). The contents are blanked out
+% Then the contents are filled with gray 5 (0 is black, 1 is white)
+%
+\put(\axoxoff,\axoyoff){\special{"#1 \axoxo add #3 2 div sub #2 \axoyo add
+ #4 2 div sub #1 \axoxo add #3 2 div add #2 \axoyo add #4 2 div add
+ #5 \axowidth \axoscale gbox showpage}}
+}
+%
+\def\CBoxc(#1,#2)(#3,#4)#5#6{
+%
+% Draws a box with the center at (x1,y1).
+% The width and height are (3,4). The contents are blanked out
+% The color of the box is #5, the background is #6
+%
+\put(\axoxoff,\axoyoff){\special{"#6 #1 \axoxo add #3 2 div sub #2 \axoyo add
+ #4 2 div sub #1 \axoxo add #3 2 div add #2 \axoyo add #4 2 div add
+ \axowidth \axoscale cbox1 showpage}}
+\put(\axoxoff,\axoyoff){\special{"#5 #1 \axoxo add #3 2 div sub #2 \axoyo add
+ #4 2 div sub #1 \axoxo add #3 2 div add #2 \axoyo add #4 2 div add
+ \axowidth \axoscale cbox2 showpage}}
+}
+%
+\def\SetWidth#1{\def\axowidth{#1 }}
+\def\SetScale#1{\def\axoscale{#1 }}
+\def\SetOffset(#1,#2){\def\axoxoff{#1 } \def\axoyoff{#2 }}
+\def\SetScaledOffset(#1,#2){\def\axoxo{#1 } \def\axoyo{#2 }}
+%
+\def\pfont{Times-Roman }
+\def\fsize{10 }
+%
+\def\SetPFont#1#2{\def\pfont{#1 } \def\fsize{#2 }}
+%
+% Now some definitions to sort out the lt etc type of options in PText
+%
+\makeatletter
+\def\fmode{4 }
+\def\@l@{l} \def\@r@{r} \def\@t@{t} \def\@b@{b}
+\def\mymodetest#1{\ifx#1\end \let\next=\relax \else {
+\if#1\@r@\global\def\fmodeh{1 }\fi
+\if#1\@l@\global\def\fmodeh{-1 }\fi
+\if#1\@b@\global\def\fmodev{3 }\fi
+\if#1\@t@\global\def\fmodev{-3 }\fi
+} \let\next=\mymodetest\fi \next}
+\makeatother
+%
+\def\PText(#1,#2)(#3)[#4]#5{
+%
+% Draws a postscript text in a postscript font.
+% Focal point is (1,2), rotation angle is 3, 4 is the mode (as in text)
+% and 5 is the text.
+%
+\def\fmodev{0 }
+\def\fmodeh{0 }
+\mymodetest#4\end
+\put(\axoxoff,\axoyoff){\makebox(0,0)[]{\special{"/\pfont findfont \fsize
+ scalefont setfont \axocolor #1 \axoxo add #2 \axoyo add #3
+\fmode \fmodev add \fmodeh add \fsize (#5) \axoscale ptext }}}
+}
+%
+\def\GOval(#1,#2)(#3,#4)(#5)#6{
+%
+% Draws a colored oval that overwrites whatever was there.
+% Oval(x_center,y_center)(height,width)(rotation)(color)
+%
+\put(\axoxoff,\axoyoff){\special{"#1 \axoxo add #2 \axoyo add #3 #4 #5 #6
+\axowidth \axoscale goval showpage}}
+}
+%
+\def\COval(#1,#2)(#3,#4)(#5)#6#7{
+%
+% Draws a colored oval that overwrites whatever was there.
+% Oval(x_center,y_center)(height,width)(rotation){color1}{color2}
+%
+\put(\axoxoff,\axoyoff){\special{"#7 #1 \axoxo add #2 \axoyo add #3 #4 #5
+\axowidth \axoscale coval1 showpage}}
+\put(\axoxoff,\axoyoff){\special{"#6 #1 \axoxo add #2 \axoyo add #3 #4 #5
+\axowidth \axoscale coval2 showpage}}
+}
+%
+\def\Oval(#1,#2)(#3,#4)(#5){
+%
+% Draws an oval that does not overwrite whatever was there.
+% Oval(x_center,y_center)(height,width)(rotation)
+%
+\put(\axoxoff,\axoyoff){\special{"\axocolor #1 \axoxo add #2 \axoyo add #3 #4 #5
+\axowidth \axoscale oval showpage}}
+}
+%
+\let\eind=]
+\def\DashCurve#1#2{\put(\axoxoff,\axoyoff){\special{"\axocolor [ \kromme#1] #2
+\axowidth \axoscale makedashcurve showpage}}}
+\def\Curve#1{\put(\axoxoff,\axoyoff){\special{"\axocolor [ \kromme#1] \axowidth
+\axoscale makecurve showpage}}}
+\def\kromme(#1,#2)#3{#1 \axoxo add #2 \axoyo add \ifx #3\eind\else
+\expandafter\kromme\fi#3}
+%
+\def\LogAxis(#1,#2)(#3,#4)(#5,#6,#7,#8){
+%
+% Draws a line with logarithmic hash marks along it.
+% LogAxis(x1,y1)(x2,y2)(num_logs,hashsize,offset,width)
+% The line is from (x1,y1) to (x2,y2) and the marks are on the left side
+% when hashsize is positive, and right when it is negative.
+% num_logs is the number of orders of magnitude and offset is the number
+% at which one starts at (x1,y1) (like if offset=2 we start at 2)
+% When offset is 0 we start at 1. Width is the linewidth.
+%
+\put(\axoxoff,\axoyoff){\special{"\axocolor #1 \axoxo add #2 \axoyo add #3
+ \axoxo add #4 \axoyo add #5 #6 #7 #8 \axoscale logaxis showpage}}
+}
+%
+\def\LinAxis(#1,#2)(#3,#4)(#5,#6,#7,#8,#9){
+%
+% Draws a line with linear hash marks along it.
+% LinAxis(x1,y1)(x2,y2)(num_decs,per_dec,hashsize,offset,width)
+% The line is from (x1,y1) to (x2,y2) and the marks are on the left side
+% when hashsize is positive, and right when it is negative.
+% num_decs is the number of accented marks, per_dec the number of
+% divisions between them and offset is the number
+% at which one starts at (x1,y1) (like if offset=2 we start at the second
+% small mark) Width is the linewidth.
+%
+\put(\axoxoff,\axoyoff){\special{"\axocolor #1 \axoxo add #2 \axoyo add #3
+ \axoxo add #4 \axoyo add #5 #6 #7 #8 #9 \axoscale linaxis showpage}}
+}
+%
+\input rotate.tex
+\makeatletter
+%
+\def\rText(#1,#2)[#3][#4]#5{
+%
+% Draws rotated text at (1,2). Argument 3 is l,r or c indicating whether
+% the text is left adjusted, right adjusted or centered.
+% 4 is the rotation angle and 5 is of course the text.
+%
+\ifnum\firstcall=1\global\def\firstcall{0}\rText(-10000,#2)[#3][]{#5}\fi
+\dimen2=\axoxoff \unitlength
+\dimen3=\axoyoff \unitlength
+\advance\dimen2 by #1 \unitlength
+\advance\dimen3 by #2 \unitlength
+\@killglue\raise\dimen3\hbox to \z@{\kern\dimen2
+\makebox(0,0)[#3]{
+\ifx#4l{\setbox3=\hbox{#5}\rotl{3}}\else{
+\ifx#4r{\setbox3=\hbox{#5}\rotr{3}}\else{
+\ifx#4u{\setbox3=\hbox{#5}\rotu{3}}\else{#5}\fi}\fi}\fi}\hss}
+\ignorespaces
+}
+\makeatother
+%
+\def\BText(#1,#2)#3{
+%
+% Draws a box with the center at (x1,y1) and postscript text in it.
+%
+\put(\axoxoff,\axoyoff){\special{"/\pfont findfont \fsize
+ scalefont setfont \axocolor #1 \axoxo add #2 \axoyo add (#3)
+ \fsize \axowidth \axoscale btext showpage}}
+}
+%
+\def\GText(#1,#2)#3#4{
+%
+% Draws a box with the center at (x1,y1) and postscript(#4) text in it.
+% The grayness of the box is given by #3
+%
+\put(\axoxoff,\axoyoff){\special{"/\pfont findfont \fsize
+ scalefont setfont #1 \axoxo add #2 \axoyo add #3 (#4)
+ \fsize \axowidth \axoscale gtext showpage}}
+}
+%
+\def\CText(#1,#2)#3#4#5{
+%
+% Draws a box with the center at (x1,y1) and postscript(#5) text in it.
+% The color of box and text is in #3
+% The color of the background is in #4
+%
+\put(\axoxoff,\axoyoff){\special{"/\pfont findfont \fsize
+ scalefont setfont #4 #1 \axoxo add #2 \axoyo add (#5)
+ \fsize \axowidth \axoscale ctext1 showpage}}
+\put(\axoxoff,\axoyoff){\special{"/\pfont findfont \fsize
+ scalefont setfont #3 #1 \axoxo add #2 \axoyo add (#5)
+ \fsize \axowidth \axoscale ctext2 showpage}}
+}
+%
+\def\B2Text(#1,#2)#3#4{
+%
+% Draws a box with the center at (x1,y1) and two lines of postscript
+% text in it.
+%
+\put(\axoxoff,\axoyoff){\special{"/\pfont findfont \fsize
+ scalefont setfont \axocolor #1 \axoxo add #2 \axoyo add (#3) (#4)
+ \fsize \axowidth \axoscale b2text showpage}}
+}
+%
+\def\G2Text(#1,#2)#3#4#5{
+%
+% Draws a box with the center at (x1,y1) and two lines of postscript
+% text (#4 and #5) in it.
+% The grayness of the box is given by #3
+%
+\put(\axoxoff,\axoyoff){\special{"/\pfont findfont \fsize
+ scalefont setfont #1 \axoxo add #2 \axoyo add #3 (#4) (#5)
+ \fsize \axowidth \axoscale g2text showpage}}
+}
+%
+\def\C2Text(#1,#2)#3#4#5#6{
+%
+% Draws a box with the center at (x1,y1) and two lines of postscript
+% text (#5 and #6) in it.
+% The color of the box and the text is given by #3
+% The background color is given by #4
+%
+\put(\axoxoff,\axoyoff){\special{"/\pfont findfont \fsize
+ scalefont setfont #4 #1 \axoxo add #2 \axoyo add (#5) (#6)
+ \fsize \axowidth \axoscale c2text1 showpage}}
+\put(\axoxoff,\axoyoff){\special{"/\pfont findfont \fsize
+ scalefont setfont #3 #1 \axoxo add #2 \axoyo add (#5) (#6)
+ \fsize \axowidth \axoscale c2text2 showpage}}
+}