From: hackbard Date: Wed, 6 Jul 2005 20:41:37 +0000 (+0000) Subject: completly removed graphs stuff X-Git-Url: https://hackdaworld.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c3e8c89985ba4a6e470a4494a743731df4b758ed;p=lectures%2Flatex.git completly removed graphs stuff --- diff --git a/nlsop/graphs.header b/nlsop/graphs.header deleted file mode 100644 index 64fa43f..0000000 --- a/nlsop/graphs.header +++ /dev/null @@ -1,620 +0,0 @@ -% Postscript header file for version 1.53 of graphs.sty. Frank Drewes, 19.12.2000 -% Small bug in psdirbowoncircle and psdirbowonrectangle removed on 8. Dec. 97 -% (hopefully) - -/psloadcolour % [ r g b ] colour array -{ aload pop setrgbcolor } def - -/psrectangle % width, height, interior color, linecolour, linewidth, linedash -{/filled exch def -0 setdash -/lwidth exch def -/lcolour exch def -/colour exch def -/height exch def -/width exch def -width lwidth gt - {/width width lwidth sub def} - {/width 0 def} -ifelse -height lwidth gt - {/height height lwidth sub def} - {/height 0 def} -ifelse -newpath -width 2 div neg height 2 div neg moveto -width 0 rlineto -0 height rlineto -width neg 0 rlineto -closepath -filled { - colour psloadcolour - gsave - fill - grestore -} if -lcolour psloadcolour -lwidth setlinewidth -stroke} def - -%-----------------------------------------------------------------------------% - -/pscircle % diameter, interior color, line colour, line width, line dash -{/filled exch def -0 setdash -/lwidth exch def -/lcolour exch def -/colour exch def -/diam exch def -diam lwidth gt - {/diam diam lwidth sub def} - {/diam 0 def} -ifelse -newpath -diam 2 div 0 moveto -0 0 diam 2 div 0 360 arc -closepath -filled { - colour psloadcolour - gsave - fill - grestore -} if -lcolour psloadcolour -lwidth setlinewidth -stroke} def - -%-----------------------------------------------------------------------------% - -/psline % end x, end y, line width, line colour, line dash -{0 setdash -psloadcolour -setlinewidth -/endy exch def -/endx exch def -newpath -0 0 moveto -endx endy lineto -stroke} def - -%-----------------------------------------------------------------------------% - -/psloop % from (#1,#2) to (#3,#4), line colour, line width, line dash -{0 setdash -setlinewidth -psloadcolour -/varw exch def -/varv exch def -/vary exch def -/varx exch def -newpath 0 0 moveto -varx vary lineto -/varxb varx 2 mul def -/varyb vary 2 mul def -/varvb varv 2 mul def -/varwb varw 2 mul def -varxb varyb varvb varwb varv varw curveto -closepath -stroke} def - -%-----------------------------------------------------------------------------% - -/psloopbyangle % angle #1, axis (#2,#3), line colour, line width, line dash -{/axisY exch def -/axisX exch def -/alpha exch def -/len axisX dup mul axisY dup mul add sqrt def -/betaA axisY axisX atan alpha 2 div sub def -/betaB betaA alpha add def -len betaA cos mul len betaA sin mul -len betaB cos mul len betaB sin mul} def - -%-----------------------------------------------------------------------------% - -/pslooparrowonrectangle % (#1,#2), (#3,#4), width, height, line colour, - % line width, line dash, arrow length, arrow width -{/atype exch def -/awid exch def -/len exch def -0 setdash -setlinewidth -psloadcolour -/height exch def -/width exch def -/varw exch def -/varv exch def -/vary exch def -/varx exch def -newpath 0 0 moveto -varx vary lineto -/varxb varx 2 mul def -/varyb vary 2 mul def -/varvb varv 2 mul def -/varwb varw 2 mul def -varxb varyb varvb varwb varv varw curveto -varv varw translate -/varv varv neg def /varw varw neg def -varv abs varw abs -varv abs varw abs gt { exch } if -div dup mul 1 add width height mul mul sqrt 2 div /dist exch def -/getlen { - /size exch def - abs exch abs exch - div dup mul 1 add size dup mul mul sqrt 2 div -} def -varv 0 eq - {/dist height 2 div def} - {varw 0 eq - {/dist width 2 div def} - { - /fstdist varv varw height getlen def - /snddist varw varv width getlen def - fstdist snddist lt - {/dist fstdist def} {/dist snddist def} ifelse - } ifelse - } ifelse -varw varv atan rotate -/pos varv dup mul varw dup mul add sqrt dist sub def -pos len sub 0 lineto -stroke -pos len awid atype psdrawarrow -} def - -%-----------------------------------------------------------------------------% - -/pslooparrowoncircle % (#1,#2), (#3,#4), diameter, line colour, line width, - % line dash, arrow length, arrow width -{/atype exch def -/awid exch def -/len exch def -0 setdash -setlinewidth -psloadcolour -/diam exch def -/varw exch def -/varv exch def -/vary exch def -/varx exch def -newpath 0 0 moveto -varx vary lineto -/varxb varx 2 mul def -/varyb vary 2 mul def -/varvb varv 2 mul def -/varwb varw 2 mul def -varxb varyb varvb varwb varv varw curveto -varv varw translate -/varv varv neg def /varw varw neg def -varw varv atan rotate -/pos varv dup mul varw dup mul add sqrt diam 2 div sub def -pos len sub 0 lineto -stroke -pos len awid atype psdrawarrow -} def - -%-----------------------------------------------------------------------------% - -/psdeletebox % width, height -{/height exch def -/width exch def -newpath -width 2 div neg height 2 div neg moveto -width 0 rlineto -0 height rlineto -width neg 0 rlineto -closepath -1 setgray -fill} def - -%-----------------------------------------------------------------------------% - -/psarrowonrectangle % x, y, width, height, arrow length, arrow width, - % line colour, line width, dash array -{0 setdash -setlinewidth -psloadcolour -/atype exch def -/awid exch def -/len exch def -/height exch def -/width exch def -/ypos exch def -/xpos exch def -/getlen { - /size exch def - abs exch abs exch - div dup mul 1 add size dup mul mul sqrt 2 div -} def -xpos 0 eq - {/dist height 2 div def} - {ypos 0 eq - {/dist width 2 div def} - { - /fstdist xpos ypos height getlen def - /snddist ypos xpos width getlen def - fstdist snddist lt - {/dist fstdist def} {/dist snddist def} ifelse - } ifelse - } ifelse -ypos xpos atan rotate -/pos xpos dup mul ypos dup mul add sqrt dist sub def -pos len awid atype psdrawarrow -0 0 moveto -pos len sub 0 lineto -stroke} def - -%-----------------------------------------------------------------------------% - -/psarrowoncircle -{0 setdash -setlinewidth -psloadcolour -/atype exch def -/awid exch def -/len exch def -/diam exch def -/ypos exch def -/xpos exch def -ypos xpos atan rotate -/pos xpos dup mul ypos dup mul add sqrt diam 2 div sub def -pos len awid atype psdrawarrow -0 0 moveto -pos len sub 0 lineto -stroke} def - -%-----------------------------------------------------------------------------% - -/pspath -{/fillyes exch def -/fillcolour exch def -0 setdash -psloadcolour -setlinewidth -/curry exch def -/currx exch def -/sqr { dup mul } def -/mtrx matrix currentmatrix def -newpath currx curry moveto -counttomark 3 idiv -{ /displace exch def - displace abs 0 gt - { currx curry translate - dup curry sub /ypos exch def /curry exch def - dup currx sub /xpos exch def /currx exch def - /len xpos sqr ypos sqr add sqrt def - /displace displace len mul def - ypos xpos atan rotate - /db len 2 div def - /rad displace db sqr displace div add 2 div def - /radb rad displace sub def - /anglea radb db atan def - /angleb 180 anglea sub def - displace 0 gt - { db radb neg rad angleb anglea arcn } - { db radb neg rad 360 anglea sub angleb neg arc } - ifelse - mtrx setmatrix - } - { /curry exch def - /currx exch def - currx curry lineto - } - ifelse -} -repeat -pop -fillyes {gsave fillcolour psloadcolour fill grestore} if -0 setlinecap -0 setlinejoin -stroke -} def - -%-----------------------------------------------------------------------------% - -/pscurve -{/fillyes exch def -/fillcolour exch def -0 setdash -psloadcolour -setlinewidth -/currx exch def -/curry exch def -/angle exch def -/factora exch def -/factorb exch def -newpath currx curry moveto -counttomark 5 idiv -{ /newx exch def - /newy exch def - /len newx currx sub dup mul newy curry sub dup mul add sqrt def - /firstx len factora mul angle cos mul currx add def - /firsty len factora mul angle sin mul curry add def - /currx newx def - /curry newy def - /angle exch def - firstx - firsty - len factorb mul angle cos mul neg currx add - len factorb mul angle sin mul neg curry add - currx - curry - curveto - /factora exch def - /factorb exch def -} -repeat -pop -fillyes {gsave fillcolour psloadcolour fill grestore} if -0 setlinecap -0 setlinejoin -stroke -} def - -%-----------------------------------------------------------------------------% - -/psbubble -{/fillyes exch def -/fillcolour exch def -0 setdash -psloadcolour -setlinewidth -/lenfactor exch def -/fetch {/arg exch def dup arg exch def counttomark 1 roll} def -/compangle { - /firstangle exch def - /scndangle exch def - firstangle sin scndangle sin add 2 div - firstangle cos scndangle cos add 2 div - atan -} def -/currax fetch -/curray fetch -counttomark 2 idiv -{ -/currbx exch def -/currby exch def -currax currbx ne curray currby ne or - {currby currbx /currax fetch /curray fetch} -if -} -repeat -/lastx fetch -/lasty fetch -/currax fetch -/curray fetch -/currbx fetch -/currby fetch -newpath currax curray moveto -counttomark 2 idiv -{ /nextx fetch - /nexty fetch - /fstangle - curray lasty sub currax lastx sub atan - currby curray sub currbx currax sub atan - compangle - def - /sndangle - currby curray sub currbx currax sub atan - nexty currby sub nextx currbx sub atan - compangle - def - /len currax currbx sub dup mul curray currby sub dup mul add sqrt lenfactor mul def - fstangle cos len mul currax add - fstangle sin len mul curray add - currbx sndangle cos len mul sub - currby sndangle sin len mul sub - currbx currby - curveto - /lastx currax def - /lasty curray def - /currax currbx def - /curray currby def - /currbx nextx def - /currby nexty def -} -repeat -pop -fillyes {gsave fillcolour psloadcolour fill grestore} if -0 setlinecap -0 setlinejoin -stroke -} def - -%-----------------------------------------------------------------------------% - -/psdrawarrow -{gsave -/type exch def -/wid exch def -/len exch def -0 translate -1 1 scale -newpath 0 0 moveto -type 1 eq -{ len len wid 2 div mul lineto - 0 len wid neg mul rlineto} -{ /mid len 2 div def - 0 0 - mid 0 - len len wid 2 div mul curveto - len len wid -2 div mul lineto - mid 0 - 0 0 - 0 0 curveto -} ifelse -closepath -fill -grestore -} def - -%-----------------------------------------------------------------------------% - -/psdirbowoncircle -{0 setdash -psloadcolour -setlinewidth -/atype exch def -/awid exch def -/arrowlen exch def -2 div /targetradius exch def -/displace exch def -/othery exch def -/otherx exch def -/curry exch def -/currx exch def -/sqr { dup mul } def - -currx curry translate -othery curry sub /othery exch def -otherx currx sub /otherx exch def -/angle otherx neg othery atan def -/distance otherx sqr othery sqr add sqrt def -/displace displace distance mul def -/radius displace distance 2 div sqr displace div add 2 div def -/centerx angle cos radius displace sub mul otherx 2 div add def -/centery angle sin radius displace sub mul othery 2 div add def -displace 0 gt -{ /anglea othery centery sub otherx centerx sub atan def - /angleb centery neg centerx neg atan def - angleb anglea lt - { /anglea anglea 360 sub def } - if -} -{ /anglea centery othery sub centerx otherx sub atan def - /angleb centery centerx atan def - angleb anglea gt - { /anglea anglea 360 add def } - if -} -ifelse - -anglea angleb targetradius pscomputeposoncircle -/tipy exch def /tipx exch def -anglea angleb targetradius arrowlen add pscomputeposoncircle -/taily exch def /tailx exch def - -newpath 0 0 moveto -0 setlinecap -0 setlinejoin -displace 0 gt -{ centerx centery radius angleb taily centery sub tailx centerx sub atan arcn } -{ centerx centery radius angleb centery taily sub centerx tailx sub atan arc } -ifelse -stroke - -tailx taily translate -/tipx tipx tailx sub def -/tipy tipy taily sub def -tipy tipx atan rotate -arrowlen arrowlen awid atype psdrawarrow -} def - -/pscomputeposoncircle -{/otherr exch def -/beta exch def -/alpha exch def -{ - /currangle alpha beta add 2 div def - /xpos currangle cos radius mul centerx add def - /ypos currangle sin radius mul centery add def - otherx xpos sub sqr othery ypos sub sqr add sqrt - /newdist exch def - newdist otherr sub abs .001 le - {exit} - if - newdist otherr le - {/alpha currangle def} - {/beta currangle def} - ifelse -} loop -currangle cos radius mul centerx add -currangle sin radius mul centery add -} def - - -%-----------------------------------------------------------------------------% - -/psdirbowonrectangle -{0 setdash -psloadcolour -setlinewidth -/atype exch def -/awid exch def -/arrowlen exch def -2 div /sizey exch def -2 div /sizex exch def -/displace exch def -/othery exch def -/otherx exch def -/curry exch def -/currx exch def -/sqr { dup mul } def - -currx curry translate -othery curry sub /othery exch def -otherx currx sub /otherx exch def -/angle otherx neg othery atan def -/distance otherx sqr othery sqr add sqrt def -/displace displace distance mul def -/radius displace distance 2 div sqr displace div add 2 div def -/centerx angle cos radius displace sub mul otherx 2 div add def -/centery angle sin radius displace sub mul othery 2 div add def -displace 0 gt -{ /anglea othery centery sub otherx centerx sub atan def - /angleb centery neg centerx neg atan def - angleb anglea lt - { /anglea anglea 360 sub def } - if -} -{ /anglea centery othery sub centerx otherx sub atan def - /angleb centery centerx atan def - angleb anglea gt - { /anglea anglea 360 add def } - if -} -ifelse - -anglea angleb pscomputeposonrectangle /tipy exch def /tipx exch def -/targetradius otherx tipx sub sqr othery tipy sub sqr add sqrt def -anglea angleb targetradius arrowlen add pscomputeposoncircle -/taily exch def /tailx exch def - -newpath 0 0 moveto -0 setlinecap -0 setlinejoin -displace 0 gt -{ centerx centery radius angleb taily centery sub tailx centerx sub atan arcn } -{ centerx centery radius angleb centery taily sub centerx tailx sub atan arc } -ifelse -stroke - -tailx taily translate -/tipx tipx tailx sub def -/tipy tipy taily sub def -tipy tipx atan rotate -arrowlen arrowlen awid atype psdrawarrow -} def - -/pscomputeposonrectangle -{/beta exch def -/alpha exch def -/counter 0 def -{ - /currangle alpha beta add 2 div def - /xpos currangle cos radius mul centerx add def - /ypos currangle sin radius mul centery add def - /xdiff xpos otherx sub abs sizex sub def - /ydiff ypos othery sub abs sizey sub def - xdiff abs .001 le ydiff abs .001 le and - xdiff abs .001 le ydiff 0 le and - xdiff 0 le ydiff abs .001 le and - or - {exit} - if - /counter counter 1 add def - xdiff 0 le ydiff 0 le and - {/alpha currangle def} - {/beta currangle def} - ifelse -} loop -currangle cos radius mul centerx add -currangle sin radius mul centery add -} def diff --git a/nlsop/graphs.sty b/nlsop/graphs.sty deleted file mode 100644 index 28d4c65..0000000 --- a/nlsop/graphs.sty +++ /dev/null @@ -1,1335 +0,0 @@ -\ProvidesPackage{graphs}[2000/12/19] -% -% -%_________________________________________________________________%% -% Draw graphs only if this is set to TRUE: -%_________________________________________________________________%% -% -\newif\ifdrawgraphs -\drawgraphstrue - -\DeclareOption{draft}{\drawgraphsfalse} -\ProcessOptions - -\typeout{} -\typeout{LaTeX2e package `graphs', version 1.53} -\typeout{Frank Drewes, University of Bremen, 19.12.2000} -\typeout{} - -% -% \input the low-level commands that produce PostScript \special's. -% -\input{graphs_ps} -% -% \input the local configuration. -% -\input{graphs_config} -% -% -%_________________________________________________________________%% -% Initial value of \unitlength: -% -\newdimen\g@oldunitlength -\unitlength=1cm -% -% -%_________________________________________________________________%% -% Global settings and macros to change them (all lengths are numbers -% interpreted as multiples of \unitlength, except for the ones in -% \graphlinedash): -% -% - \graphlinewidth define the width of lines (relevant -% for nodes and edges) -% - \graphlinedash define the dash style of lines; the argument -% is a sequence of natural numbers delimited by -% blanks (relevant for nodes and edges). Is -% taken as input to the postscript setdash -% command. -% - \graphnodesize define the size (= diameter) of nodes -% - \graphnodecolour define the interior shading of nodes (a -% number between 0 (= black) and 1 (= white)) -% - \fillednodestrue -% \fillednodesfalse determine whether the interior of nodes shall be -% filled or not -% - \graphlinecolour define the `colour' of edges; similar to -% \graphnodecolour -% - \grapharrowlength define the length from tip to basis of a -% directed edge's arrow head -% - \grapharrowwidth define the width of the basis of a -% directed edge's arrow head (in multiples of -% \grapharrowlength) -% - \grapharrowtype define the type of the arrow heads (argument -% should be 1 or 2) -% - \autodistance define the factor that defines the distance -% of automatically placed text boxes from the -% centre of a node (1 means "placed on the -% edge"). -% - \enlargeboxes define the length that is added to -% text boxes (in x and y direction) in order -% to determine the size of the necessary -% white area underlying it. -% - \opaquetexttrue -% \opaquetextfalse determine whether text boxes shall be considered -% opaque or transparent (In the latter case -% \enlargeboxes doesn't have a (visible) -% effect.) Its initial value is true except -% for \autonodetext, which always has it set -% to false if it's not changed explicitely -% through the optional parameter. -% - \filledareastrue -% \filledareasfalse determine whether areas shall be filled or not -% -% - \graphfillcolour define the fill colour of areas (if filled -% at all). -% -%_________________________________________________________________%% -% -\def\g@defrel#1*#2{\edef#1{#1\ps@s #2 0 ge {#2 mul} if}} -\def\g@defplus#1+#2{\edef#1{ - #1\ps@s - #2 1 gt - {1 exch sub #2 div 1 exch sub} - {#2 0 ge {#2 mul} if} - ifelse}} -\def\g@defcolplus#1+#2{\edef#1{ - #1 - 3 { - 3 1 roll - #2 1 gt - {1 exch sub #2 div 1 exch sub} - {#2 0 ge {#2 mul} if} - ifelse - } - repeat -}} -\def\g@defabs#1#2#3{\def#1{#3}\def#2{}} -\def\g@defcolabs#1#2{% - \@ifnextchar({\g@defcolabsrgb{#1}{#2}}{\g@defcolabsbw{#1}{#2}}% -} -\def\g@defcolabsbw#1#2#3{\def#1{#3\ps@s #3\ps@s #3}\def#2{}} -\def\g@defcolabsrgb#1#2(#3,#4,#5){\def#1{#3\ps@s #4\ps@s #5}\def#2{}} -% -\def\graphlinewidth{% - \@ifnextchar*{\g@defrel{\g@lwidthmod}}% - {\g@defabs{\g@lwidth}{\g@lwidthmod}}} -\graphlinewidth{.02} -% -\def\graphlinedash#1{\def\g@ldash{[ #1 ]}} -\graphlinedash{} -% -\def\graphnodesize#1{\def\g@nsize{#1}} -\graphnodesize{.2} -% -\def\graphnodecolour{% - \@ifnextchar+{\g@defcolplus{\g@ncolourmod}}% - {\g@defcolabs{\g@ncolour}{\g@ncolourmod}}} -\graphnodecolour{0} -% -\newif\iffillednodes\fillednodestrue -% -\def\graphlinecolour{% - \@ifnextchar+{\g@defcolplus{\g@lcolourmod}}% - {\g@defcolabs{\g@lcolour}{\g@lcolourmod}}} -\graphlinecolour{0} -% -\def\grapharrowlength{% - \@ifnextchar*{\g@defrel{\g@alengthmod}}% - {\g@defabs{\g@alength}{\g@alengthmod}}} -\grapharrowlength{.3} -% -\def\grapharrowwidth{% - \@ifnextchar*{\g@defrel{\g@awidthmod}}% - {\g@defabs{\g@awidth}{\g@awidthmod}}} -\grapharrowwidth{.5} -% -\def\grapharrowtype#1{\def\g@atype{#1}} -\grapharrowtype{1} -% -\def\autodistance#1{\def\g@autodistance{#1}} -\autodistance{1.3} -% -\def\enlargeboxes#1{\def\g@eboxes{#1}} -\enlargeboxes{.1} -% -\newif\ifopaquetext\opaquetexttrue -% -\newif\iffilledareas\filledareastrue -% -\def\graphfillcolour{% - \@ifnextchar+{\g@defcolplus{\g@fcolourmod}}% - {\g@defcolabs{\g@fcolour}{\g@fcolourmod}}} -\graphfillcolour{.5} -% -% -%_________________________________________________________________%% -% Issue a warning if a command name defined in graphs.sty already has -% a meaning. -%_________________________________________________________________%% -% -\def\g@test#1{ - \@ifundefined{#1}{}{ - \typeout{} - \typeout{Warning: command name `#1' already used; - redefined in graphs.sty!} - \typeout{} - } -} -% -% -%_________________________________________________________________%% -% This is the environment in which the macros above can be used. -% -% Arguments: -% -% As for the LaTeX picture environment, i.e., it starts with -% \begin{graph}(x,y)(dx,dy) (where the second pair is optional) and -% ends with \end{graph}. -% -% Remark: -% -% The graph enviroment is imlemented on the basis of the picture -% environment. As a result, all commands allowed in pictures may be -% used (in addition to the graph commands). The picture commands' -% effects will always take place first, so subsequent AS WELL AS -% PRECEEDING graph commands will overlay the ordinary LaTeX -% picture. (This is one reason why a command like \freetext is NOT -% useless: its effect takes place after nodes and edges have been -% drawn.) -%_________________________________________________________________%% -% -\g@test{graph}\g@test{framegraph} -\def\framegraph(#1){\@ifnextchar({\g@graph f(#1)}{\g@graph f(#1)(0,0)}} -\def\graph(#1){\@ifnextchar({\g@graph n(#1)}{\g@graph n(#1)(0,0)}} -\def\g@graph#1(#2)(#3){% - \begin{picture}(#2)(#3)% - \if #1f% - \put(#3){\framebox(#2){}}% - \fi% - \ifdrawgraphs\else% - \put(#3){\framebox(#2){graph}}% - \fi% - \def\g@nodeinfo{}\def\g@specialeffects{}\def\g@nodes{}\def\g@texts{}% - \def\g@edges{}% -} -\def\endgraph{% - \ifdrawgraphs - \g@nodeinfo\g@specialeffects\g@edges\g@nodes\g@texts% - \fi% - \end{picture}% -} -\def\endframegraph{\endgraph} -% -% -%_________________________________________________________________%% -% Types of nodes -%_________________________________________________________________%% -% -\def\g@circletype{0} -\def\g@rectangletype{1} -% -% -%_________________________________________________________________%% -% Definition of square nodes: -% -% Arguments: -% -% Nodename (a character sequence like abc) -% Position (x,y) = a pair of numbers -%_________________________________________________________________%% -% -\g@test{squarenode} -\def\squarenode#1(#2,#3){ - \@ifnextchar[{\g@squarenode{#1}(#2,#3)}{\g@squarenode{#1}(#2,#3)[]} -} -% -\def\g@squarenode#1(#2,#3)[#4]{ - \g@extendlist\g@nodeinfo{\g@node{#1}{\g@rectangletype}(#2,#3)[#4]} - \g@extendlist\g@nodes{\g@drawsquarenode{#1}(#2,#3)[#4]} -} -% -% The actual drawing routine: -% -\def\g@drawsquarenode#1(#2,#3)[#4]{% - \edef\g@size{\g@thenodesize{#1}}% - {#4% - \put(#2,#3){\expandafter\ps@rectangle\g@size}% - }% -} -% -% -%_________________________________________________________________%% -% Definition of round nodes: -% -% Arguments: -% -% Nodename (a character sequence like abc) -% Position (x,y) = a pair of numbers -%_________________________________________________________________%% -% -\g@test{roundnode} -\def\roundnode#1(#2,#3){ - \@ifnextchar[{\g@roundnode{#1}(#2,#3)}{\g@roundnode{#1}(#2,#3)[]} -} -% -\def\g@roundnode#1(#2,#3)[#4]{ - \g@extendlist\g@nodeinfo{\g@node{#1}{\g@circletype}(#2,#3)[#4]} - \g@extendlist\g@nodes{\g@drawroundnode{#1}(#2,#3)[#4]} -} -% -% The actual drawing routine: -% -\def\g@drawroundnode#1(#2,#3)[#4]{% - \edef\g@size{\g@thenodesize{#1}}% - {#4%% - \put(#2,#3){\expandafter\ps@circle\g@size}% - }% -} -% -% -%_________________________________________________________________%% -% Definition of rectangular nodes: -% -% Arguments: -% -% Nodename (a character sequence like abc) -% Size [width,height] (in multiples of \unitlength) -% Position (x,y) = a pair of numbers -%_________________________________________________________________%% -% -\g@test{rectnode} -\def\rectnode#1[#2,#3](#4,#5){ - \@ifnextchar[{\g@rectnode{#1}[#2,#3](#4,#5)}% - {\g@rectnode{#1}[#2,#3](#4,#5)[]} -} -% -\def\g@rectnode#1[#2,#3](#4,#5)[#6]{ - \g@extendlist\g@nodeinfo{\g@noderect{#1}[#2,#3](#4,#5)} - \g@extendlist\g@nodes{\g@drawrectnode{#1}[#6]} -} -% -% The actual drawing routine: -% -\def\g@drawrectnode#1[#2]{% - \edef\g@size{\g@thenodesize{#1}}% - \edef\g@coords{\g@nodecoords{#1}}% - {#2% - \expandafter\put\g@coords{\expandafter\ps@rectangle\g@size}% - }% -} -% -% -%_________________________________________________________________%% -% Definition of text nodes (rectangular nodes whose dimension is -% determined by the given text): -% -% Arguments: -% -% Nodename (a character sequence like abc) -% Position (x,y) = a pair of numbers -% Text (=anything that may occur as a \put argument in a picture -% environment, i.e., even lines, vectors, and so on.) -%_________________________________________________________________%% -% -\g@test{textnode} -\def\textnode#1(#2,#3)#4{ - \@ifnextchar[{\g@textnode{#1}(#2,#3){#4}}% - {\g@textnode{#1}(#2,#3){#4}[]} -} -% -\def\g@textnode#1(#2,#3)#4[#5]{ - \autonodetext{#1}{#4}[#5] - \g@extendlist\g@nodeinfo{\g@nodebytext{#1}(#2,#3){#4}[#5]} - \g@extendlist\g@nodes{\g@drawrectnode{#1}% - [\graphnodecolour{1}#5]} -} -% -% -%_________________________________________________________________%% -% Definition of an edge: -% -% Arguments: -% -% The two incident nodes -%_________________________________________________________________%% -% -\g@test{edge} -\def\edge#1#2{ - \@ifnextchar[{\g@edge{#1}{#2}}{\g@edge{#1}{#2}[]} -} -% -\def\g@edge#1#2[#3]{ - \g@extendlist\g@edges{\g@drawedge{#1}{#2}[#3]} -} -% -% The actual drawing routine: -% -\def\g@drawedge#1#2[#3]{% - \g@testname{#1}\g@testname{#2}% - \g@differentpositions{#1}{#2}{\edge{#1}{#2}}% - \edef\g@firstcoords{\g@nodecoords{#1}}% - \edef\g@secondcoords{\g@nodecoords{#2}}% - \g@defcoorddiff{\g@diffcoords}{\g@firstcoords}{\g@secondcoords}% - {#3% - \expandafter\put\g@firstcoords{\expandafter\ps@line\g@diffcoords}% - }% -} -% -% -%_________________________________________________________________%% -% Definition of a directed edge: -% -% Arguments (same as for \edge): -% -% The two incident nodes (order indicates direction of the arrow) -%_________________________________________________________________%% -% -\g@test{diredge} -\def\diredge#1#2{ - \@ifnextchar[{\g@diredge{#1}{#2}}{\g@diredge{#1}{#2}[]} -} -% -\def\g@diredge#1#2[#3]{ - \g@extendlist\g@edges{\g@drawdiredge{#1}{#2}[#3]} -} -% -% The actual drawing routine: -% -\def\g@drawdiredge#1#2[#3]{% - \g@testname{#1}\g@testname{#2}% - \g@differentpositions{#1}{#2}{\diredge{#1}{#2}}% - \edef\g@firstcoords{\g@nodecoords{#1}}% - \edef\g@secondcoords{\g@nodecoords{#2}}% - \g@defcoorddiff{\g@diffcoords}{\g@firstcoords}{\g@secondcoords}% - % - % Choose the right drawing procedure, according to the node's type: - % - \edef\g@type{\g@nodetype{#2}}% - \ifnum\g@circletype=\g@type% - \let\g@draw=\ps@arrowoncircle% - \else% - \let\g@draw=\ps@arrowonrectangle% - \ifnum\g@rectangletype=\g@type% - \else% - \typeout{}% - \typeout{Error in \string\g@drawdiredge: unrecognized node type}% - \fi% - \fi% - % - % and draw it: - % - \edef\g@diffcoordsandsize{\g@diffcoords\g@thenodesize{#2}}% - {#3% - \expandafter\put\g@firstcoords{\expandafter\g@draw\g@diffcoordsandsize}% - }% -} -% -% -%_________________________________________________________________%% -% Definition of a `bow' (a curved edge): -% -% Arguments: -% -% The two incident nodes -% The displacement factor of the midpoint relative to the distance. -% of both nodes. A positive number means the bow extends -% to the left (if one looks in the direction of the edge). -%_________________________________________________________________%% -% -\g@test{bow} -\def\bow#1#2#3{ - \@ifnextchar[{\g@bow{#1}{#2}{#3}}{\g@bow{#1}{#2}{#3}[]} -} -% -\def\g@bow#1#2#3[#4]{ - \g@extendlist\g@edges{\g@drawbow{#1}{#2}{#3}[#4]} -} -% -% The actual drawing routine: -% -\def\g@drawbow#1#2#3[#4]{% - \g@testname{#1}\g@testname{#2}% - \g@differentpositions{#1}{#2}{\bow{#1}{#2}...}% - \edef\g@firstcoords{\g@nodecoords{#1}}% - \edef\g@secondcoords{\g@nodecoords{#2}}% - \expandafter\g@bowcombine\g@secondcoords{#3}% - {#4% - \filledareasfalse% - \put(0,0){\expandafter\ps@path\g@combineresult}% - }% -} -% -% Macro used above to combine coordinates of nodes and displacement: -\def\g@bowcombine(#1,#2)#3{ - \edef\g@combineresult{\g@firstcoords{(#1,#2,#3)}} -} -% -% -%_________________________________________________________________%% -% Definition of a `directed bow' (a curved arrow): -% -% Arguments (same as for \bow): -% -% The two incident nodes -% The displacement factor of the midpoint relative to the distance. -% of both nodes. A positive number means the bow extends -% to the left (if one looks in the direction of the edge). -%_________________________________________________________________%% -% -\g@test{dirbow} -\def\dirbow#1#2#3{ - \@ifnextchar[{\g@dirbow{#1}{#2}{#3}}{\g@dirbow{#1}{#2}{#3}[]} -} -% -\def\g@dirbow#1#2#3[#4]{ - \g@extendlist\g@edges{\g@drawdirbow{#1}{#2}{#3}[#4]} -} -% -% The actual drawing routine: -% -\def\g@drawdirbow#1#2#3[#4]{ - \g@testname{#1}\g@testname{#2}% - \g@differentpositions{#1}{#2}{\dirbow{#1}{#2}...}% - \edef\g@firstcoords{\g@nodecoords{#1}}% - \edef\g@secondcoordsandsize{\g@nodecoords{#2}\g@thenodesize{#2}}% - \expandafter\g@dirbowcombine\g@secondcoordsandsize{#3}% - % - % Choose the right drawing procedure, according to the node's type: - % - \edef\g@type{\g@nodetype{#2}}% - \ifnum\g@circletype=\g@type% - \let\g@draw=\ps@dirbowoncircle% - \else% - \let\g@draw=\ps@dirbowonrectangle% - \ifnum\g@rectangletype=\g@type% - \else% - \typeout{}% - \typeout{Error in \string\g@drawdirbow: unrecognized node type}% - \fi% - \fi% - % - % and draw it: - % - {#4% - \filledareasfalse% - \put(0,0){\expandafter\g@draw\g@combineresult}% - }% -} -% -% Macro used above to combine coordinates of nodes and displacement: -\def\g@dirbowcombine(#1,#2)[#3]#4{ - \edef\g@combineresult{\g@firstcoords(#1,#2,#4)[#3]} -} -% -% -%_________________________________________________________________%% -% Definition of a loop. There're two ways to provide this macro -% with the necessary arguments. Here's the -% first: -% -% Arguments: -% -% Node that carries the loop -% Two relative coordinates (x1,y1) (x2,y2) indicating the lines from -% the incident node to (x1,y1) and (x2,y2) that form the loop -% together with a curve connecting (x1,y1) and (x2,y2). -%_________________________________________________________________%% -% -\g@test{loopedge} -\def\loopedge#1{ - \@ifnextchar({\g@loopedgeA{#1}}{\g@loopedgeB{#1}} -} -% -\def\g@loopedgeA#1(#2,#3)(#4,#5){ - \@ifnextchar[{\g@loopedgeAa{#1}(#2,#3)(#4,#5)}% - {\g@loopedgeAa{#1}(#2,#3)(#4,#5)[]} -} -% -\def\g@loopedgeAa#1(#2,#3)(#4,#5)[#6]{ - \g@extendlist\g@edges{\g@drawloopedgeA{#1}(#2,#3)(#4,#5)[#6]} -} -% -% The actual drawing routine: -% -\def\g@drawloopedgeA#1(#2,#3)(#4,#5)[#6]{% - \g@testname{#1}% - \edef\g@coords{\g@nodecoords{#1}}% - {#6% - \expandafter\put\g@coords{%% - \ps@loopA(#2,#3)(#4,#5)}% - }% -} -% -% -%_________________________________________________________________%% -% Definition of a loop - the second form: -% -% Arguments: -% -% Node that carries the loop -% Angle the two lines defining the loop build -% Coordinates (x,y) that give the axis along which the loop is -% to be drawn and its length (ie, the length of the two lines -% defining the loop). -%_________________________________________________________________%% -% -\def\g@loopedgeB#1#2(#3,#4){ - \@ifnextchar[{\g@loopedgeBa{#1}{#2}(#3,#4)}% - {\g@loopedgeBa{#1}{#2}(#3,#4)[]} -} -% -\def\g@loopedgeBa#1#2(#3,#4)[#5]{ - \g@extendlist\g@edges{\g@drawloopedgeB{#1}{#2}(#3,#4)[#5]} -} -% -% The actual drawing routine: -% -\def\g@drawloopedgeB#1#2(#3,#4)[#5]{% - \g@testname{#1}% - \edef\g@coords{\g@nodecoords{#1}}% - {#5% - \expandafter\put\g@coords{%% - \ps@loopB{#2}(#3,#4)}% - }% -} -% -% -%_________________________________________________________________%% -% Definition of a directed loop. There're two ways to provide -% this macro with the necessary arguments. Here's the first: -% -% Arguments: -% -% Node that carries the loop -% Two relative coordinates (x1,y1) (x2,y2) indicating the lines from -% the incident node to (x1,y1) and (x2,y2) that form the loop -% together with a curve connecting (x1,y1) and (x2,y2). -%_________________________________________________________________%% -% -\g@test{dirloopedge} -\def\dirloopedge#1{ - \@ifnextchar({\g@dirloopedgeA{#1}}{\g@dirloopedgeB{#1}} -} -% -\def\g@dirloopedgeA#1(#2,#3)(#4,#5){ - \@ifnextchar[{\g@dirloopedgeAa{#1}(#2,#3)(#4,#5)}% - {\g@dirloopedgeAa{#1}(#2,#3)(#4,#5)[]} -} -% -\def\g@dirloopedgeAa#1(#2,#3)(#4,#5)[#6]{ - \g@extendlist\g@edges{\g@drawdirloopedgeA{#1}(#2,#3)(#4,#5)[#6]} -} -% -% The actual drawing routine: -% -\def\g@drawdirloopedgeA#1(#2,#3)(#4,#5)[#6]{% - \g@testname{#1}% - \edef\g@coords{\g@nodecoords{#1}}% - % - % Choose the drawing procedure for the arrow according - % to the node's type: - % - \edef\g@type{\g@nodetype{#1}}% - \ifnum\g@circletype=\g@type% - \let\g@draw=\ps@looparrowoncircleA% - \else% - \let\g@draw=\ps@looparrowonrectangleA% - \ifnum\g@rectangletype=\g@type% - \else% - \typeout{}% - \typeout{Error in \string\g@drawdirloopedge: unrecognized node type}%% - \fi% - \fi% - \edef\g@args{(#2,#3)(#4,#5)\g@thenodesize{#1}}% - % - % and draw it: - % - {#6% - \expandafter\put\g@coords{\expandafter\g@draw\g@args}% - }% -} -% -% -%_________________________________________________________________%% -% Definition of a directed loop - the second form: -% -% Arguments: -% -% Node that carries the loop -% Angle the two lines defining the loop build -% Coordinates (x,y) that give the axis along which the loop is -% to be drawn and its length (ie, the length of the two lines -% defining the loop). -%_________________________________________________________________%% -% -\def\g@dirloopedgeB#1#2(#3,#4){ - \@ifnextchar[{\g@dirloopedgeBa{#1}{#2}(#3,#4)}% - {\g@dirloopedgeBa{#1}{#2}(#3,#4)[]} -} -% -\def\g@dirloopedgeBa#1#2(#3,#4)[#5]{ - \g@extendlist\g@edges{\g@drawdirloopedgeB{#1}{#2}(#3,#4)[#5]} -} -% -% The actual drawing routine: -% -\def\g@drawdirloopedgeB#1#2(#3,#4)[#5]{% - \g@testname{#1}% - \edef\g@coords{\g@nodecoords{#1}}% - % - % Choose the drawing procedure for the arrow according - % to the node's type: - % - \edef\g@type{\g@nodetype{#1}}% - \ifnum\g@circletype=\g@type% - \let\g@draw=\ps@looparrowoncircleB% - \else% - \let\g@draw=\ps@looparrowonrectangleB% - \ifnum\g@rectangletype=\g@type% - \else% - \typeout{}% - \typeout{Error in \string\g@drawdirloopedge: unrecognized node type}%% - \fi% - \fi% - \edef\g@args{{#2}(#3,#4)\g@thenodesize{#1}}% - % - % and draw it: - % - {#5% - \expandafter\put\g@coords{\expandafter\g@draw\g@args}% - }% -} -% -% -%_________________________________________________________________%% -% Automatic positioning of a node's text -% (This one sets \opaquetextfalse if it's not enforced by the optional -% parameter!): -% -% Arguments: -% -% Node -% Optional (surrounded by []): n, s, e, w, ne, nw, se, sw (for north, -% south, east, west, ...) indicating the position of the text -% with respect to the node. If omitted, the text is centered -% inside the node. -% Text (=anything that may occur as a \put argument in a picture -% environment, i.e., even lines, vectors, and so on.) -%_________________________________________________________________%% -% -\g@test{autonodetext} -\def\autonodetext#1{ - \@ifnextchar[{\g@autonodetext{#1}}{\g@autonodetext{#1}[]} -} -% -\def\g@autonodetext#1[#2]#3{ - \@ifnextchar[{\g@autonodetextopt{#1}{#3}[#2]}% - {\g@autonodetextopt{#1}{#3}[#2][]} -} -% -\def\g@rootofahalf{.70710678}% square root of 0.5 -% -\def\g@autonodetextopt#1#2[#3][#4]{ - \def\g@doit##1##2##3;{ - \def\g@xdisplace{0}\def\g@ydisplace{0}\def\g@torb{,0]}\def\g@lorr{[0} - \def\g@xdisplacec{0}\def\g@ydisplacec{0} - \if##2. - \if##1s\def\g@ydisplace{-1}\def\g@torb{,-1]}\else - \if##1n\def\g@ydisplace{1}\def\g@torb{,1]}\else - \if##1e\def\g@xdisplace{1}\def\g@lorr{[1}\else - \if##1w\def\g@xdisplace{-1}\def\g@lorr{[-1}\fi\fi\fi\fi - \edef\g@xdisplacec{\g@xdisplace}\edef\g@ydisplacec{\g@ydisplace} - \else - \if##1s\def\g@ydisplace{-1}\def\g@torb{,-1]} - \def\g@ydisplacec{-\g@rootofahalf}\else - \if##1n\def\g@ydisplace{1}\def\g@torb{,1]} - \def\g@ydisplacec{\g@rootofahalf}\else - \if##1e\def\g@xdisplace{1}\def\g@lorr{[1} - \def\g@xdisplacec{\g@rootofahalf}\else - \if##1w\def\g@xdisplace{-1}\def\g@lorr{[-1} - \def\g@xdisplacec{-\g@rootofahalf}\fi\fi\fi\fi - \if##2e\def\g@xdisplace{1}\def\g@lorr{[1} - \def\g@xdisplacec{\g@rootofahalf}\else - \if##2w\def\g@xdisplace{-1}\def\g@lorr{[-1} - \def\g@xdisplacec{-\g@rootofahalf} - \fi\fi - \fi - \edef\g@values{% - {(\g@xdisplacec,\g@ydisplacec)}{\g@lorr\g@torb}{% - (\g@xdisplace,\g@ydisplace)}% - } - \expandafter\g@extendtextsauto\g@values{#1}{#2}[#4]} - \g@doit#3...;} -% -% -\def\g@extendtextsauto#1#2#3#4#5[#6]{ - \g@extendlist\g@texts{\g@putautotext{#1}{#2}{#3}{#4}{#5}[#6]} -} -% -% The actual drawing routine: -% -\def\g@putautotext#1#2#3#4#5[#6]{% - \g@testname{#4}% - \edef\g@coords{\g@nodecoords{#4}}% - \edef\g@type{\g@nodetype{#4}}% - \edef\g@size{\g@thenodesize{#4}}% - \ifnum\g@circletype=\g@type% - \def\g@draw{\g@xyput#1}% - \expandafter\g@getcirclexy\g@size% - \else% - \def\g@draw{\g@xyput#3}% - \expandafter\g@getrectanglexy\g@size% - \ifnum\g@rectangletype=\g@type% - \else% - \typeout{}% - \typeout{Error in \string\putautotext: unrecognized node type}% - \fi% - \fi% - \expandafter\put\g@coords{% - \opaquetextfalse #6% - \g@textsize{#5}% - \g@xunitlength=\g@autodistance\g@xunitlength\divide\g@xunitlength by 2% - \g@yunitlength=\g@autodistance\g@yunitlength\divide\g@yunitlength by 2% - \ifopaquetext% - \g@draw{\expandafter\g@makeautotext\g@thetextsize% - #2{\expandafter\ps@deletebox\g@thetextsize}}% - \fi% - \g@draw{\expandafter\g@makeautotext\g@thetextsize% - #2{\makebox(0,0){#5}}}% - }% -}% -% -\def\g@getcirclexy[#1]{ - \g@xunitlength=#1\unitlength\relax - \g@yunitlength=\g@xunitlength\relax -} -% -\def\g@getrectanglexy[#1,#2]{ - \g@xunitlength=#1\unitlength\relax - \g@yunitlength=#2\unitlength\relax -} -% -\newcount\g@xpos -\newcount\g@ypos -\def\g@makeautotext(#1,#2)[#3,#4]#5{% - \g@oldunitlength=\unitlength% - \g@xpos=#1\divide\g@xpos by 2\multiply\g@xpos by #3\relax% - \g@ypos=#2\divide\g@ypos by 2\multiply\g@ypos by #4\relax% - \unitlength=1sp% - \edef\g@positions{(\number\g@xpos,\number\g@ypos)}% - \expandafter\put\g@positions{\unitlength=\g@oldunitlength{#5}}% -}% -% -% -%_________________________________________________________________%% -% Definition of a node's text: -% -% Arguments: -% -% Node -% Relative coordinates of the text (optional). -% Text is centered horizontally and vertically at this position. -% (Use a \makebox(0,0)[...]{Text} construction to disable the -% centering if necessary.) -% Omitting the optinal argument means the same as (0,0). -% Text (=anything that may occur as a \put argument in a picture -% environment, i.e., even lines, vectors, and so on.) -%_________________________________________________________________%% -% -\g@test{nodetext} -\def\nodetext#1{ - \@ifnextchar({\g@nodetext{#1}}{\g@nodetext{#1}(0,0)} -} -\def\g@nodetext#1(#2,#3)#4{ - \@ifnextchar[{\g@nodetextb{#1}(#2,#3){#4}}% - {\g@nodetextb{#1}(#2,#3){#4}[]} -} -% -\def\g@nodetextb#1(#2,#3)#4[#5]{ - \g@extendlist\g@texts{\g@putnodetext{#1}(#2,#3){#4}[#5]} -} -% -% The actual drawing routine: -% -\def\g@putnodetext#1(#2,#3)#4[#5]{% - \g@testname{#1}% - \edef\g@coords{\g@nodecoords{#1}}% - \expandafter\put\g@coords{% - #5% - \ifopaquetext% - \g@textsize{#4}% - \put(#2,#3){\expandafter\ps@deletebox\g@thetextsize}% - \fi% - \put(#2,#3){\makebox(0,0){#4}}% - }% -} -% -% -%_________________________________________________________________%% -% Definition of an edge's text (for straight edges only): -% -% Arguments: -% -% Both nodes incident with the edge in question -% Text (=anything that may occur as a \put argument in a picture -% environment, i.e., even lines, vectors, and so on.) -%_________________________________________________________________%% -% -\g@test{edgetext} -\def\edgetext#1#2#3{ - \@ifnextchar[{\g@edgetext{#1}{#2}{#3}}% - {\g@edgetext{#1}{#2}{#3}[]} -} -% -\def\g@edgetext#1#2#3[#4]{ - \g@extendlist\g@texts{\g@putedgetext{#1}{#2}{#3}[#4]} -} -% -% The actual drawing routine: -% -\def\g@putedgetext#1#2#3[#4]{% - \g@testname{#1}\g@testname{#2}% - \g@differentpositions{#1}{#2}{\edgetext{#1}{#2}...}% - \edef\g@firstcoords{\g@nodecoords{#1}}% - \edef\g@secondcoords{\g@nodecoords{#2}}% - {% - #4% - \g@textsize{#3}% - \g@oldunitlength=\unitlength% - \divide\unitlength by 2% - \expandafter\put\g@firstcoords{% - \ifopaquetext% - \expandafter\put\g@secondcoords{% - \expandafter\ps@deletebox\g@thetextsize% - }% - \fi% - \expandafter\put\g@secondcoords{% - \unitlength=\g@oldunitlength% - \makebox(0,0){#3}% - }% - }% - }% -} -% -% -%_________________________________________________________________%% -% Definition of a bow's text: -% -% Arguments: -% -% Both nodes and displacement factor defining the bow in question -% Text (=anything that may occur as a \put argument in a picture -% environment, i.e., even lines, vectors, and so on.) -%_________________________________________________________________%% -% -\g@test{bowtext} -\def\bowtext#1#2#3#4{ - \@ifnextchar[{\g@bowtext{#1}{#2}{#3}{#4}}% - {\g@bowtext{#1}{#2}{#3}{#4}[]} -} -% -\def\g@bowtext#1#2#3#4[#5]{ - \g@extendlist\g@texts{\g@putbowtext{#1}{#2}{#3}{#4}[#5]} -} -% -% The actual drawing routine: -% -\newdimen\g@x -\newdimen\g@y -\newdimen\g@aux -\def\g@putbowtext#1#2#3#4[#5]{% - \g@testname{#1}\g@testname{#2}% - \g@differentpositions{#1}{#2}{\bowtext{#1}{#2}...}% - \def\g@doit(##1,##2)(##3,##4){% - {#5% - \g@textsize{#4}% - \g@oldunitlength=\unitlength% - \unitlength=.5\unitlength% - % - % Compute the difference of coordinates: - % - \g@x=##3\g@oldunitlength\g@aux=##1\g@oldunitlength% - \advance\g@x by -\g@aux\g@x=#3\g@x% - \g@y=##4\g@oldunitlength\g@aux=##2\g@oldunitlength% - \advance\g@y by -\g@aux\g@y=#3\g@y% - \g@y=-\g@y% - \edef\g@thirdcoords{(\number\g@y,\number\g@x)}% - \put(##1,##2){% - \ifopaquetext% - \put(##3,##4){% - \unitlength=1sp% - \expandafter\put\g@thirdcoords{% - \expandafter\ps@deletebox\g@thetextsize% - }% - }% - \fi% - \put(##3,##4){% - \unitlength=1sp% - \expandafter\put\g@thirdcoords{% - \unitlength=\g@oldunitlength% - \makebox(0,0){#4}% - }% - }% - }}% - }% - \edef\g@firstcoords{\g@nodecoords{#1}}% - \edef\g@secondcoords{\g@nodecoords{#2}}% - % - % Expand both arguments before executing \g@doit: - % - \expandafter\expandafter\expandafter% - \g@doit\expandafter\g@firstcoords\g@secondcoords% -} -% -% -%_________________________________________________________________%% -% Definition of free text: -% -% Arguments: -% -% Absolute coordinates of the text. (Text is centered horizontally -% and vertically at this position. Use a -% \makebox(0,0)[...]{Text} construction to disable the -% centering if necessary.) -% Text (=anything that may occur as a \put argument in a picture -% environment, i.e., even lines, vectors, and so on.) -%_________________________________________________________________%% -% -\g@test{freetext} -\def\freetext(#1,#2)#3{ - \@ifnextchar[{\g@freetext(#1,#2){#3}}% - {\g@freetext(#1,#2){#3}[]} -} -% -\def\g@freetext(#1,#2)#3[#4]{ - \g@extendlist\g@texts{\g@putfreetext(#1,#2){#3}[#4]} -} -% -% The actual drawing routine: -% -\def\g@putfreetext(#1,#2)#3[#4]{% - {#4% - \ifopaquetext% - \g@textsize{#3}% - \put(#1,#2){\expandafter\ps@deletebox\g@thetextsize}% - \fi% - \put(#1,#2){\makebox(0,0){#3}}% - }% -} -% -% -%_________________________________________________________________%% -% Definition of a (perhaps filled) area: -% -% Arguments: -% -% Absolute coordinates of the starting point -% Sequence of pairs (x_i,y_i) or triples (x_i,y_i,d_i) where the -% (x_i,y_i) are absolute coordinates of the next segment's -% end point and d_i is the displacement factor of the midpoint -% relative to the length of the segment. A positive number -% means the segment extends to the left. -%_________________________________________________________________%% -% -\g@test{area} -\def\area(#1,#2)#3{ - \@ifnextchar[{\g@area(#1,#2){#3}}% - {\g@area(#1,#2){#3}[]} -} -% -\def\g@area(#1,#2)#3[#4]{ - \g@extendlist\g@specialeffects{\g@putarea(#1,#2){#3}[#4]} -} -% -% The actual drawing routine: -% -\def\g@putarea(#1,#2)#3[#4]{% - {#4% - \put(0,0){\ps@path(#1,#2){#3}}% - }% -} -% -% For reasons of compatibility with older versions: -\g@test{filledarea}\def\filledarea{\area} -% -% -%_________________________________________________________________%% -% Definition of a (perhaps filled) Bezier curve: -% -% Arguments: -% -% Normal distance of control points from points of the curve, -% in multiples of the segment length. -% Sequence of triples (x_i,y_i,alpha_i), and and optional -% [factora_i,factorb_i]) after each of the triples: -% (x_i,y_i) is a point on the curve, alpha_i is the angle -% between the x-axis and the line through (x_i,y_i) and the -% next control point (the previous control point lies opposite), -% and factora_i (factorb_i) is overwrites the first argument -% for the two control points between two points. -%_________________________________________________________________%% -% -\g@test{curve} -\def\curve#1#2{ - \@ifnextchar[{\g@curve{#1}{#2}}% - {\g@curve{#1}{#2}[]} -} -% -\def\g@curve#1#2[#3]{ - \g@extendlist\g@specialeffects{\g@putcurve{#1}{#2}[#3]} -} -% -% The actual drawing routine: -% -\def\g@putcurve#1#2[#3]{% - {#3% - \put(0,0){\ps@curve{#1}{#2}}% - }% -} -% -% -%_________________________________________________________________%% -% Definition of a (perhaps filled) Bezier ``bubble'': -% -% Arguments: -% -% Normal distance (in multiples of unitlength) of control points -% in multiples of segment length. -% Sequence of points (x_i,y_i). -%_________________________________________________________________%% -% -\g@test{bubble} -\def\bubble#1#2{ - \@ifnextchar[{\g@bubble{#1}{#2}}% - {\g@bubble{#1}{#2}[]} -} -% -\def\g@bubble#1#2[#3]{ - \g@extendlist\g@specialeffects{\g@putbubble{#1}{#2}[#3]} -} -% -% The actual drawing routine: -% -\def\g@putbubble#1#2[#3]{% - {#3% - \put(0,0){\ps@bubble{#1}{#2}}% - }% -} -% -% -% -% -% -%_________________________________________________________________%% -%_________________________________________________________________%% -%_________________________________________________________________%% -% The rest consists of auxiliary macros used above: -%_________________________________________________________________%% -%_________________________________________________________________%% -%_________________________________________________________________%% -% -% -% -%_________________________________________________________________%% -% Globally extend a list by another item. -% -% Replaces the definition of the macro #1 by the expansion of #1 -% immediately followed by #2. -%_________________________________________________________________%% -% -\def\g@extendlist#1#2{ - \expandafter\def\expandafter#1\expandafter{#1#2} -} -% -% -%_________________________________________________________________%% -% Give the different attributes of a node. -%_________________________________________________________________%% -% -\def\g@nodecoords#1{% - \csname g@xy@#1\endcsname% -} -\def\g@nodetype#1{% - \csname g@type@#1\endcsname% -} -\def\g@thenodesize#1{% - \csname g@size@#1\endcsname% -} -\def\g@testname#1{% - \@ifundefined{g@name@#1}{% - \typeout{}% - \typeout{! Graph package error: node #1 undefined!}% - \typeout{}% - \errmessage{}% - }{}% -} -% -% -%_________________________________________________________________%% -% Give the difference between coordinate pairs the second and -% third argument expand to and define the first as the result. -%_________________________________________________________________%% -% -\def\g@defcoorddiff#1#2#3{ - \edef#1{% Expand both arguments before expanding \g@coorddiff: - \expandafter\expandafter\expandafter\g@coorddiff\expandafter#2#3} -} -% -\def\g@coorddiff(#1,#2)(#3,#4){(#3 #1 sub, #4 #2 sub) -} -% -% -%_________________________________________________________________%% -% Find out the size of a box and add \g@eboxes. -%_________________________________________________________________%% -% -\newdimen\g@heightplusdepth -\newdimen\g@width -\def\g@textsize#1{ - \setbox0=\hbox{#1} - \g@heightplusdepth=\ht0 - \advance\g@heightplusdepth by\dp0 - \advance\g@heightplusdepth by\g@eboxes\unitlength - \g@width=\wd0 - \advance\g@width by\g@eboxes\unitlength - \edef\g@thetextsize{% - (\number\g@width,\number\g@heightplusdepth)% - } -} -% -% -%_________________________________________________________________%% -% Save the information about a node in appropriate macros -% (one macro to treat round and square nodes, one for -% rectangular nodes, and one for text nodes): -%_________________________________________________________________%% -% -\def\g@node#1#2(#3,#4)[#5]{ - \g@nodedef{g@name@#1}{} - { - #5 - \xdef\g@auxnodesize{\g@nsize} - } - \g@nodedef{g@xy@#1}{(#3,#4)} - \g@nodedef{g@type@#1}{#2} - \ifx\g@rectangletype#2 - \g@nodedef{g@size@#1}{[\g@auxnodesize,\g@auxnodesize]} - \else - \g@nodedef{g@size@#1}{[\g@auxnodesize]} - \fi -} -% -\def\g@noderect#1[#2,#3](#4,#5){ - \g@nodedef{g@name@#1}{} - \g@nodedef{g@xy@#1}{(#4,#5)} - \g@nodedef{g@type@#1}{\g@rectangletype} - \g@nodedef{g@size@#1}{[#2,#3]} -} -% -\def\g@nodebytext#1(#2,#3)#4[#5]{ - \g@nodedef{g@name@#1}{} - \g@nodedef{g@xy@#1}{(#2,#3)} - \g@nodedef{g@type@#1}{\g@rectangletype} - {#5 - \g@textsize{#4} - \expandafter\g@findsize\g@thetextsize - } - \g@nodedef{g@size@#1}{\g@auxtextsize} -} -% -\def\g@nodedef#1#2{\expandafter\edef\csname #1\endcsname{#2}} -% -% -% -%_________________________________________________________________%% -% Compare the coordinates of nodes and give an error message if they -% coincide. (Used to prevent the definition of edges of length 0.) -%_________________________________________________________________%% -% -% -\def\g@differentpositions#1#2#3{% - \edef\g@firstname{#1}% - \edef\g@secondname{#2}% - \ifx\g@firstname\g@secondname% - \typeout{}% - \typeout{! Graph package error: Node #1 used twice - in \string#3.}% - \typeout{}% - \errmessage{} - \else - \edef\g@firstposition{\g@nodecoords{#1}}% - \edef\g@secondposition{\g@nodecoords{#2}}% - \ifx\g@firstposition\g@secondposition% - \typeout{}% - \typeout{! Graph package error: Coordinates of nodes - #1 and #2 in}% - \typeout{\string#3 coincide.}% - \typeout{}% - \errmessage{} - \fi% - \fi% -} -% -% -% -%_________________________________________________________________%% -% Nasty procedure to compute the necessary size of the node. We need -% something that computes -% textdimension / \unitlength + 2 * \g@lwidth -% with high precision. So we can't simply use the \divide macro of -% TeX (yielding an integer value), but must explicitely construct a -% number showing some (I chose three) digits after the period. -% (I don't know whether there's a more elegant way of doing this. -% Sorry to anybody who might be bothered.) -%_________________________________________________________________%% -% -% -\newcount\g@xsizeA -\newcount\g@xsizeB -\newcount\g@ysizeA -\newcount\g@ysizeB -\newcount\g@help -\newdimen\g@helpB -\def\g@findsize(#1,#2){ - \g@xsizeA=#1\relax - \g@helpB=\g@lwidth\unitlength\multiply\g@helpB by 2\relax - \advance\g@xsizeA by \g@helpB\relax - \g@xsizeB=\g@xsizeA - \divide\g@xsizeA by\unitlength\relax - \g@help=\unitlength\multiply\g@help by -\g@xsizeA\relax - \advance\g@xsizeB by \g@help\relax - \g@help=\unitlength\advance\g@help by 999\divide\g@help by 1000 - \multiply\g@help by 1000 - \advance\g@xsizeB by \g@help\relax - \divide\g@help by 1000 - \divide\g@xsizeB by \g@help - % - \g@ysizeA=#2\relax - \advance\g@ysizeA by \g@helpB\relax - \g@ysizeB=\g@ysizeA - \divide\g@ysizeA by\unitlength\relax - \g@help=\unitlength\multiply\g@help by -\g@ysizeA\relax - \advance\g@ysizeB by \g@help\relax - \g@help=\unitlength\advance\g@help by 999\divide\g@help by 1000 - \multiply\g@help by 1000 - \advance\g@ysizeB by \g@help\relax - \divide\g@help by 1000 - \divide\g@ysizeB by \g@help - \xdef\g@auxtextsize{% - [\expandafter\g@mkpoint\number\g@xsizeB;{\number\g@xsizeA},% - \expandafter\g@mkpoint\number\g@ysizeB;{\number\g@ysizeA}]} -} -% -\def\g@mkpoint#1#2;#3{ - #3.#2 -} -% -% -%_________________________________________________________________%% -% \put with separated x- and y-\unitlengths -% (modified definition from LaTeX): -%_________________________________________________________________%% -% -\newdimen\g@xunitlength\g@xunitlength=\unitlength -\newdimen\g@yunitlength\g@yunitlength=\unitlength -\long\def\g@xyput(#1,#2)#3{\@killglue\raise#2\g@yunitlength\hbox to\z@{\kern -#1\g@xunitlength #3\hss}\ignorespaces}