summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/latex/tree-dvips/tree-dvips91.script
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/doc/latex/tree-dvips/tree-dvips91.script')
-rw-r--r--Master/texmf-dist/doc/latex/tree-dvips/tree-dvips91.script718
1 files changed, 718 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/latex/tree-dvips/tree-dvips91.script b/Master/texmf-dist/doc/latex/tree-dvips/tree-dvips91.script
new file mode 100644
index 00000000000..cc0937f43c8
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/tree-dvips/tree-dvips91.script
@@ -0,0 +1,718 @@
+% grestore
+% special commands for setting up tree macros
+%% version .91 - May 16, 1995
+
+TeXDict begin
+
+% the commands needed to get any of this working. The first section
+% may need to be modified if different dvi to postscript programs are
+% used.
+
+% redefinition of /@beginspec suggested by Gintas Grigelionis
+% (gintas@theophys.kth.se) 5/95. also dropped bop_hook and texpsmatrix
+%
+% /@beginspec {gsave texpsmatrix setmatrix treedict begin} def
+/@beginspec {gsave
+ Resolution 72 div VResolution -72 div scale
+ treedict begin} def
+/@endspec {end grestore} def
+
+% for landscape Landscape=true, letter Landscape=false
+% In dvips 5.5 and later, the matrix in landscape was changed from
+% [0.0 -1.0 1.0 0.0 0.0 0.0] to the current setting of [0.0 1.0 -1.0
+% 0.0 0.0 0.0]. If you are using an earlier version, switch back.
+
+/treedict 200 dict def treedict begin
+
+% num pt num (converts a number in TeX pts (72.27 pts/in) to
+% postscript pts (72pts/in)
+/pt {72 mul 72.07 div} def
+
+% end of first section
+
+% definition of a node as a box containing the following information
+% The x y location of the lower left hand corner of the box
+% the height of the box (h)
+% the width of the box (w)
+% nodemargin is added to all sides to ensure a boundary around the box
+% str w h d node -
+% (nodemargin is defined in the TeX file)
+/nodemargin 2 def
+/nodes 100 dict def
+/node { /dpth exch def
+ /hght exch def
+ /wdth exch def
+ 4 dict dup begin
+ /x /y currentpoint
+ dpth sub nodemargin sub exch 3 1 roll def
+ nodemargin sub def
+ /h hght dpth add nodemargin dup add add def
+ /w wdth nodemargin dup add add def
+ end nodes 3 1 roll put} def
+
+
+% commands to find various locations around the nodebox
+%
+% nodetopleft nodetop nodetopright
+% *--------*--------*
+% | |
+% | |
+% nodeleft * (nodebox) * noderight
+% | |
+% | |
+% *--------*--------*
+% nodebotleft nodebottom nodebotright
+%
+
+
+% all of these take
+% dict nodebottom x1 y1 [dict has x y h w defined]
+/nodebottom {begin
+ x w 2 div add y
+ end} def
+/nodetop {begin
+ x w 2 div add y h add
+ end} def
+/nodeleft {begin
+ x y h 2 div add
+ end} def
+/noderight {begin
+ x w add y h 2 div add
+ end} def
+/nodetopleft {begin
+ x y h add
+ end} def
+/nodetopright {begin
+ x w add y h add
+ end} def
+/nodebottomleft {begin
+ x y
+ end} def
+/nodebottomright {begin
+ x w add y
+ end} def
+
+% some more locations of use
+/farright {begin
+ x w add depth add h 2 div y add
+ end} def
+
+/farleft {begin
+ x depth sub h 2 div y add
+ end} def
+
+/farbottom {begin
+ x w 2 div add y depth sub
+ end} def
+
+/fartop {begin
+ x w 2 div add y h add depth add
+ end} def
+
+/farbottomleft {begin
+ x depth 45 cos mul sub y depth 45 sin mul sub
+ end} def
+
+/farbottomright {begin
+ x w add depth 45 cos mul add y depth 45 sin mul sub
+ end} def
+
+/fartopright {begin
+ x w add depth 45 cos mul add y h add depth 45 sin mul add
+ end} def
+
+/fartopleft {begin
+ x depth 45 cos mul sub y h add depth 45 sin mul add
+ end} def
+
+
+% connects two nodes with a straight line
+% add location information (e.g., whether to go from
+% nodetop to nodeleft ...
+
+% nodename1 loc1 nodename2 loc2 nodeconnect -
+% e.g., a nodetop b nodebottom nodeconnect
+
+% to see if straight lines are indeed straight
+% x1 x2 alignpoint x1' x2' finds out if the two numbers are less than
+% one pixel apart if so make x1'=x2'
+
+/alignpoint {2 copy sub abs 1 le {add 2 div round dup} if} def
+
+% nodelocation nodename getnodepoint x y
+/getnode {nodes exch get} def
+
+% xfrom yfrom xto yto nodeconnect -
+/nodeconnect { gsave
+ transform 4 2 roll
+ transform
+ exch 4 1 roll alignpoint
+ 4 2 roll alignpoint
+ 4 1 roll exch
+ itransform moveto itransform lineto
+ stroke
+ grestore
+ } def
+
+% arrowheads
+% xtail ytail xtip ytip headthickness headlength insetlength arrow -
+
+/arrowdict 15 dict def
+
+arrowdict begin
+ /mtrx matrix def
+end
+
+/arrow {arrowdict begin
+ /insetlength exch def
+ /headlength exch def
+ /halfheadthickness exch 2 div def
+ /tipy exch def /tipx exch def
+ /taily exch def /tailx exch def
+
+ /dx tipx tailx sub def
+ /dy tipy taily sub def
+ /angle dy dx atan def
+
+ /savematrix mtrx currentmatrix def
+ tipx tipy translate
+ angle rotate
+% following is for arrow
+ 0 0 moveto
+ headlength neg halfheadthickness neg lineto
+ headlength insetlength sub neg 0 lineto
+ headlength neg halfheadthickness lineto
+ closepath
+ fill
+ savematrix setmatrix
+ end } def
+
+% does regular filled arrowhead
+/arrowfill {gsave
+ newpath
+ arrowwidth arrowlength arrowinset arrow
+ grestore} def
+
+% draws line for arrow but not arrow head(s)
+% xtail ytail xtip ytip tailfix tipfix arrowline
+/arrowline {arrowdict begin
+ gsave
+ newpath
+ /tipfix exch def
+ /tailfix exch def
+ /tipy exch def /tipx exch def
+ /taily exch def /tailx exch def
+
+ /dx tipx tailx sub def
+ /dy tipy taily sub def
+ /angle dy dx atan def
+
+ /savematrix mtrx currentmatrix def
+ tipx tipy translate
+ angle rotate
+ tipfix neg 0 moveto
+ savematrix setmatrix
+ /savematrix mtrx currentmatrix def
+ tailx taily translate
+ angle rotate
+ tailfix 0 lineto
+ savematrix setmatrix
+ stroke
+ grestore
+ end} def
+
+
+% xfrom yfrom xto yto testcmd -
+% arrownodeconnect
+/arrownodeconnect{ gsave
+ transform 4 2 roll
+ transform
+ exch 4 1 roll alignpoint
+ 4 2 roll alignpoint
+ 4 1 roll exch
+ itransform 4 2 roll itransform
+% line
+ 4 copy
+ 0 arrowdict begin arrowlength arrowinset sub end arrowline
+% arrow
+ gsave
+ newpath
+ arrowfill
+ grestore
+ grestore
+ } def
+
+
+/doublearrownodeconnect{ gsave
+ transform 4 2 roll
+ transform
+ exch 4 1 roll alignpoint
+ 4 2 roll alignpoint
+ 4 1 roll exch
+ itransform 4 2 roll itransform
+% line
+% 4 copy moveto lineto
+% stroke
+ 4 copy
+ arrowdict begin arrowlength arrowinset sub end dup arrowline
+ 4 copy
+% arrow at one end
+ gsave
+ newpath
+ arrowfill
+ grestore
+% arrow at other end
+ gsave
+ newpath
+ 4 2 roll arrowfill
+ grestore
+ grestore
+ } def
+
+
+% connecting with a bar like
+% _______________
+% | |
+% or like
+% _______________
+% | |
+% | node
+% node
+
+% depth fromnode fromloc tonode toloc
+% depth x1 y1 x2 y2 barnodeconnect -
+/barnodeconnect {4 2 roll
+ 2 copy moveto
+ 5 -1 roll add
+ dup 3 1 roll
+ lineto
+ 2 index exch
+ lineto lineto
+ stroke
+ } def
+
+/arrowbarnodeconnect {4 2 roll
+ 2 copy moveto
+ 5 -1 roll add
+ dup 3 1 roll
+ lineto
+ 2 index exch
+ 4 copy lineto lineto
+ gsave
+ newpath
+ 4 2 roll
+ arrowfill
+ fill
+ grestore
+ stroke
+ } def
+
+
+% Takes two nodes and forms a triangle
+% node1
+% /\
+% / \
+% ----
+% nodess
+%
+% fromnodename tonodename nodetriangle -
+/nodetriangle {
+ gsave
+ exch
+ nodes exch get nodebottom moveto
+ dup
+ nodes exch get nodetopleft lineto
+ nodes exch get nodetopright lineto
+ closepath
+ stroke
+ grestore } def
+
+
+% not sure what I am using the following for
+% x y x y slope num
+/slope {/y1 exch def
+ /x1 exch def
+ /y0 exch def
+ /x0 exch def
+ y1 y0 sub x1 x0 sub div
+ } def
+
+% x y x y midpoint x y
+/midpoint {/y1 exch def
+ /x1 exch def
+ /y0 exch def
+ /x0 exch def
+ x1 x0 sub abs
+ x1 x0 ge {x0 add} {x1 add} ifelse
+ y1 y0 sub abs
+ y1 y0 ge {y0 add} {y1 add} ifelse
+ } def
+
+
+% variant of curveto where x1 y1 = x2 y2
+/tancurveto {1 index exch
+ curveto} def
+
+/nodetancurve {/depth exch def
+ /to exch def
+ /from exch def
+ gsave
+ nodes from get noderight moveto
+
+ nodes to get noderight
+ tancurveto
+ stroke
+ grestore } def
+
+
+
+% the node curves draw curves between two points
+%
+% this swaps a dictionary around an angle, pulls out depth, & dismisses
+% the dictionary.
+% node locname farloc angle depth
+
+/getloc {3 -1 roll
+ nodes exch get dup
+ begin depth end
+ 3 1 roll
+ exch cvx exec
+ 4 2 roll} def
+
+% nodename rightcur x1 y1 x2 y2
+/rightcur {0 /noderight getloc} def
+/leftcur {180 /nodeleft getloc } def
+/topcur {90 /nodetop getloc} def
+/bottomcur {270 /nodebottom getloc} def
+/topleftcur {135 /nodetopleft getloc} def
+/toprightcur {45 /nodetopright getloc} def
+/bottomleftcur {225 /nodebottomleft getloc} def
+/bottomrightcur {315 /nodebottomright getloc} def
+
+% (depth predefined) x1 y1 x2 y2 x3 y3 x4 y4 nodecurve -
+% where nodename nodeposition produces x1 y1 x2 y2
+% where x1 y1 are the endpoint, x2 y2 end-control, etc.
+
+% adjustments for arrowheads, etc.
+/arrowfiddledict 10 dict def
+
+% x1 y1 angle depth shift twist arrowfiddle x3 y3 x4 y4
+% where x3 y3 are revised endpoint for arrow-headed bezier curves
+/arrowfiddle {arrowfiddledict begin
+ /twist exch def
+ /shift exch def
+ /shaft exch def
+ /angle exch twist add def
+ /tipy exch def /tipx exch def
+ tipx angle cos shaft mul add
+ tipy angle sin shaft mul add
+ tipx angle cos shift mul add
+ tipy angle sin shift mul add
+ end} def
+
+/nodecurve {gsave
+ 0 fromangle arrowfiddle moveto
+ 6 2 roll
+ 0 toangle arrowfiddle curveto
+ stroke
+ grestore} def
+
+/arrownodecurve {gsave
+ 0 fromangle arrowfiddle % adjust from angle
+ moveto
+ 6 2 roll
+ 4 copy 10 4 roll % prepare arrowhead material
+ arrowlength arrowinset sub %arrowfiddle param.
+ toangle % ditto
+ arrowfiddle
+ curveto
+ 0 toangle arrowfiddle arrowfill
+ stroke
+ grestore} def
+
+/arrow2nodecurve {gsave
+ 4 copy
+ 0 fromangle arrowfiddle arrowfill
+ arrowlength arrowinset sub fromangle arrowfiddle
+ moveto
+ 6 2 roll
+ 4 copy 10 4 roll % prepare arrowhead material
+ arrowlength arrowinset sub %arrowfiddle param.
+ toangle % ditto
+ arrowfiddle
+ curveto
+ 0 toangle arrowfiddle arrowfill
+ stroke
+ grestore} def
+
+
+% commands for doing things along line
+% blong (predefined) xfrom yfrom xto yto delink -
+% need to find halfway point
+/delink { gsave
+ 4 copy newslope
+ 6 2 roll newmidpoint
+ delinkline } def
+
+%% calculated (dx dy xmid ymid) now moveto midpoint
+% moveto dup 0 eq
+%% duplicate dy and check whether line is horizontal
+% {blong 2 div neg 0 rmoveto blong 0 rlineto 2 pop}
+%% line not horizontal so check whether vertical
+% {exch dup 0 eq
+% {0 blong 2 div neg rmoveto 0 blong rlineto 2 pop}
+%% If neither than calculate standard case (dy dx)
+% {div neg dup dup mul 1 add sqrt
+% blong exch div
+% 2 copy mul 2 copy 2 div neg exch 2 div neg exch
+% rmoveto rlineto 1 pop} ifelse} ifelse
+% stroke
+% grestore
+% } def
+
+% actually draws the line
+% dx dy xmid ymid delinkline -
+
+/delinkline { moveto dup 0 eq
+% duplicate dy and check whether line is horizontal
+ {blong 2 div neg 0 rmoveto blong 0 rlineto 2 pop}
+% line not horizontal so check whether vertical
+ {exch dup 0 eq
+ {0 blong 2 div neg rmoveto 0 blong rlineto 2 pop}
+% If neither than calculate standard case (dy dx)
+ {div neg dup dup mul 1 add sqrt
+ blong exch div
+ 2 copy mul 2 copy 2 div neg exch 2 div neg exch
+ rmoveto rlineto 1 pop} ifelse} ifelse
+ stroke
+ grestore
+ } def
+
+
+%
+% delink curve
+% blong (predefined) x0 y0 x1 y1 x2 y2 x3 y3 delinkcurve -
+
+/delinkcurve { 8 copy 8 copy
+ bezslope 10 2 roll % push to back
+ bezmidpoint
+ delinkline
+} def
+
+% x0 y0 x1 y1 x2 y2 x3 y3 xyarrange x0 x1 x2 x3 y0 y1 y2 y3
+ % x0 y0 x1 y1 x2 y2 x3 y3
+/xyarrange { exch % x0 y0 x1 y1 x2 y2 y3 x3
+ 3 1 roll % x0 y0 x1 y1 x2 x3 y2 y3
+ 5 -1 roll % x0 y0 x1 x2 x3 y2 y3 y1
+ 7 -1 roll % x0 x1 x2 x3 y2 y3 y1 y0
+ exch % x0 x1 x2 x3 y2 y3 y0 y1
+ 4 2 roll } def % x0 x1 x2 x3 y0 y1 y2 y3
+
+% x0 x1 x2 x3 calcx xn 8(x3+3x2+3x1+x0)=xn
+/calcx { exch 3 mul
+ 3 -1 roll 3 mul
+ add add add 8 mul} def
+
+% x0 x1 x2 x3 calcx xn x3+x2-x1-x0=xn
+/calcy { add exch sub exch sub } def
+
+
+% x0 y0 x1 y1 x2 y2 x3 y3 bezmidpoint xm ym
+% using the following equations
+% xb=8*(x3+3x2+3x1+x0)
+% yb=8*(y3+3y2+3y1+y0)
+
+/bezmidpoint {xyarrange
+calcx 5 1 roll calcx exch
+} def
+
+
+% x0 y0 x1 y1 x2 y2 x3 y3 bezslope dx dy
+% equations are dx=x3+x2-x1-x0
+% dy=y3+y2-y1-y0
+/bezslope {xyarrange
+calcy 5 1 roll calcy exch
+} def
+
+% finds midpoint between two points xfrom yfrom xto yto newmidpoint xmid ymid
+/newmidpoint { exch
+ 4 -1 roll
+ add 2 div
+ 3 1 roll
+ add 2 div
+ } def
+
+% finds slope between two points: xfrom yfrom xto yto newslope dx dy
+/newslope { 4 -1 roll
+ exch
+ 4 1 roll
+ sub 3 1 roll sub exch
+ } def
+
+
+%% commands for drawing things around nodes
+% nodename nodebox -
+/nodebox {nodes exch get begin
+ gsave
+ newpath
+ x y moveto
+ h w dobox
+ cleanup
+ stroke
+ grestore
+ end} def
+
+
+% nodename nodecircle -
+% would be nice to have a parameter that adjusts diameter of circle
+% depth nodename nodecircle -
+/nodecircle {nodes exch get begin
+ gsave
+ newpath
+ w 2 div x add h 2 div y add
+ w w mul h h mul add sqrt 2 div 4 -1 roll add
+ 360 0 arcn
+ cleanup
+ stroke
+ grestore
+ end} def
+
+% no cleanup
+/nodecircletrans {nodes exch get begin
+ gsave
+ newpath
+ w 2 div x add h 2 div y add
+ w w mul h h mul add sqrt 2 div 4 -1 roll add
+ 360 0 arcn
+ stroke
+ grestore
+ end} def
+
+% nodename nodeoval -
+/nodeoval {nodes exch get begin
+ gsave
+ newpath
+ x 2 sub y 2 sub moveto
+ h 4 add w 4 add dooval
+ cleanup
+ stroke
+ grestore
+ end } def
+
+% ratio depth nodename testnodeoval -
+% ratio should be between 0 and 1
+/testnodeoval {nodes exch get begin
+ gsave
+ newpath
+ h h mul w w mul add sqrt div dup dup dup
+ w mul neg x add exch
+ h mul neg y add
+ moveto
+ dup
+ h mul 2 mul h add exch
+ w mul 2 mul w add
+ testdooval
+ stroke
+ grestore
+ end } def
+
+
+/cleanup{gsave
+ x y moveto
+ h nodemargin sub .5 add w nodemargin sub .5 add doccbox
+ 1 setgray fill grestore
+}def
+
+/boxdict 4 dict def
+boxdict /mtrx matrix put
+
+/dobox{boxdict begin
+ /w exch def
+ /h exch def
+ /savematrix mtrx currentmatrix def
+ 0 h rlineto
+ w 0 rlineto
+ 0 h neg rlineto
+ closepath
+ savematrix setmatrix
+ end} def
+
+% do box in counterclockwise fashion
+/doccbox{boxdict begin
+ /w exch def
+ /h exch def
+ /savematrix mtrx currentmatrix def
+ w 0 rlineto
+ 0 h rlineto
+ w neg 0 rlineto
+ closepath
+ savematrix setmatrix
+ end} def
+
+
+/ovaldict 6 dict def
+ovaldict /mtrx matrix put
+
+% h w ovaldict -
+/dooval{ovaldict begin
+ /w exch def
+ /h exch def
+ /savematrix mtrx currentmatrix def
+ 0 h 2 div rmoveto
+ 0 h 2 div nodemargin sub
+ nodemargin h 2 div
+ w 2 div h 2 div
+ rcurveto
+ w 2 div nodemargin sub 0
+ w 2 div nodemargin neg
+ w 2 div h 2 div neg
+ rcurveto
+ 0 h 2 div neg nodemargin add
+ nodemargin neg h 2 div neg
+ w 2 div neg h 2 div neg
+ rcurveto
+ w 2 div neg nodemargin add 0
+ w 2 div neg nodemargin
+ w 2 div neg h 2 div
+ rcurveto
+ savematrix setmatrix
+ end} def
+
+% give height and width of a box and the lower left hand point
+% produce a curve that will enclose the box.
+% initial point already defined
+% ratio h w testdooval -
+/testdooval{ovaldict begin
+ /w exch def
+ /h exch def
+ /r exch def
+ h 2 div neg r mul dup
+ h 2 div dup
+ r mul 3 1 roll
+ 2 r sub mul
+ 0 h
+ rcurveto
+ w 2 div dup
+ r mul exch
+ 2 r sub mul
+ w 2 div r mul dup 3 1 roll
+ w 0
+ rcurveto
+ h 2 div r mul dup
+ h 2 div neg dup
+ r mul 3 1 roll
+ 2 r sub mul
+ 0 h neg
+ rcurveto
+ w 2 div neg dup
+ r mul exch
+ 2 r sub mul
+ w 2 div neg r mul dup 3 1 roll
+ w neg 0
+ rcurveto
+ end} def
+
+end % of treedict
+
+end % of TeXdict
+% gsave