From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Mon, 2 Sep 2019 13:46:59 +0900 Subject: Initial commit --- usergrps/uktug/baskervi/3_1/diag.sty | 895 +++++++++++++++++++++++++++++++++++ 1 file changed, 895 insertions(+) create mode 100644 usergrps/uktug/baskervi/3_1/diag.sty (limited to 'usergrps/uktug/baskervi/3_1/diag.sty') diff --git a/usergrps/uktug/baskervi/3_1/diag.sty b/usergrps/uktug/baskervi/3_1/diag.sty new file mode 100644 index 0000000000..dbc3d9b4bb --- /dev/null +++ b/usergrps/uktug/baskervi/3_1/diag.sty @@ -0,0 +1,895 @@ +% This is diagram.sty, intended for drawing commuting diagrams as PS \specials +% in LaTeX. Original author Sean Bechhofer. +% Improved, modified to use Rokiki's dvips 5.4.7 and generally crapped around with +% by David Murphy. +% This is version 1.0\beta + +% diagram.sty and associated files is copyright (c) 1991 David Murphy and Sean +% Bechhofer. Please note the following conditions: +% +% 1. You can compile, use, copy and distribute this software without fee +% provided that this copyright notice and permissions are preserved. +% +% 2. You can modify this software provided (a) you make no deletions; (b) +% you mark all changes clearly (including the version number message); and +% (c) if you distribute it, you change the name. +% +% 3. This software is provided for free, on an "as-is" basis, without +% express or implied warranty. + +% The intention of (2) is to prevent a proliferation of incompatable +% versions with the same name. Commenting out code does not count as a +% deletion. If you have improvements or bug fixes, please forward them to +% me rather than distributing a new version. +\message{This is not Paul Taylor's commuting diagrams package;} +\message{please do not acknowledge him. Version 1.0, 1991.} + +% This file depends on pspicture.ps and pspicture-dvips.sty. +% The latter follows in this version. + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% pspicture.sty Version 2.0 +% +% Originally by D. P. Carlisle (carlisle@uk.ac.man.cs) +% Computer Science Department, Manchester University +% Heavily modified by David Murphy (david@gmdzi.gmd.de) +% +% A style file to redefine picture mode commands to use +% postscript \special's rather than the circle and line fonts. +% The \put and \multiput commands are not changed, ie +% picture objects are positioned by TeX not by PS moveto. +% The \framebox \makebox and \shortstack commands are unchanged. +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +%\circle and \circle*. +% Use as in LaTeX book but with no maximum diameter. +% The thickness of the circle is altered by the \linethickness command. +% +%\oval. +% Use as in LaTeX book, but as there is no maximum diameter for +% the circular arcs, the oval (in the absence of the optional [tr] etc) +% always consists of two semi-circular arcs joined by a pair of parallel +% lines. To obtain a `rectangle with rounded corners' the oval command +% has a second optional argument (given first pspicmac). +% \oval[20](100,200)[t] +% Produces the top half of an oval with quarter circles of radius +% 20*unitlength. +% If unitlength = 1pt then this is equivalent to the standard oval command. +% In general \oval[R](x,y) uses circular arcs of radius max(R,min(x/2,y/2)). +% +%\line and \vector. +% Use as in LaTeX book but with no restriction on the available slopes. +% The thickness of a sloping line is altered by the \linethickness command. +% +%\Line and \Vector. +% New forms of the line and vector commands. +% \put(x1,y1){\Line(x2,y2)} +% produces a line from (x1,y1) to (x1+x2,y1+y2) and similarly for \Vector. +% +%\Curve +% Like \Line except that it produce a curve pspicmac +% \put(x1,y1){\Curve(x2,y2){m}} +% produces a curve from (x1,y1) to (x1+x2,y1+y2). the amount of curvature +% is controlled by m but try 1 or -1 first. m does not have to be an integer. +% negative numbers curve the opposite way to positive numbers. +% +%\thinlines, \thicklines and \linethickness. +% These commands alter the thickness of ALL lines including +% slanted lines and circular arcs. +% +%\arrowlength. +% A new command which specifies the size of the arrowhead drawn by the +% \vector and \Vector commands. Like \linethickness it does not get +% multiplied by \unitlength. At present the arrowhead is triangular. +% If a head with curved sides more like the standard LaTeX head is required +% the definition of pspicmacA in pspicture.ps should be altered. +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% if for dashes +\newif\ifdashed \dashedfalse + +% strip the final `pt' off string returned by \the +{\catcode`t=12\catcode`p=12\gdef\noPT#1pt{#1}} +\def\strippt#1{\expandafter\noPT\the#1\space} + +\def\@circle#1{% + \@tempdimb #1\unitlength + \special{" + \strippt\@wholewidth + \strippt\@tempdimb + pspicmacC}} + +\def\@dot#1{% + \@tempdimb #1\unitlength + \special{" + \strippt\@tempdimb + pspicmacD}} + +\def\line(#1,#2)#3{\ifdashed + \@linelen=#3\unitlength + \special{" + \strippt\@wholewidth + #1 + #2 + \strippt\@linelen + pspicmacdL}\else + \@linelen=#3\unitlength + \special{" + \strippt\@wholewidth + #1 + #2 + \strippt\@linelen + pspicmacL}\fi} + +\def\vector(#1,#2)#3{\ifdashed + \@linelen=#3\unitlength + \special{" + \strippt\@arrowlength + \strippt\@wholewidth + #1 + #2 + \strippt\@linelen + pspicmacdV}\else + \@linelen=#3\unitlength + \special{" + \strippt\@arrowlength + \strippt\@wholewidth + #1 + #2 + \strippt\@linelen + pspicmacV}\fi} + +\def\@FlArrow(#1,#2)(#3,#4)(#5,#6)(#7,#8){% + \@headlen=0.06\unitlength + \@headwid=0.03\unitlength + \@xa=#1\unitlength \@ya=#2\unitlength + \@xb=#3\unitlength \@yb=#4\unitlength + \@dxa=#5\unitlength \@dya=#6\unitlength + \@dxb=#7\unitlength \@dyb=#8\unitlength + \special{" + \strippt\@dxa + \strippt\@dya + \strippt\@dxb + \strippt\@dyb + \strippt\@xa + \strippt\@ya + \strippt\@xb + \strippt\@yb + \strippt\@wholewidth + \strippt\@headwid + \strippt\@headlen + arrowfl}} + +\def\oval{\@ifnextchar[{\@ov@l}% + {\count@=\maxdimen \divide\count@ by \unitlength \@ov@l[\count@]}}% +\def\@ov@l[#1](#2,#3){\@ifnextchar[{\@oval[#1](#2,#3)}{\@oval[#1](#2,#3)[]}}% +\def\@oval[#1](#2,#3)[#4]{\begingroup + \@tempdimb #1\unitlength + \@ovxx #2\unitlength + \@ovyy #3\unitlength + \def\r{\def\TL{0 }\def\BL{0 }}% + \def\l{\def\TR{0 }\def\BR{0 }}% + \def\t{\def\BL{0 }\def\BR{0 }}% + \def\b{\def\TL{0 }\def\TR{0 }}% + \def\TL{1 }\def\BL{1 }\def\TR{1 }\def\BR{1 }% + \@tfor\@tempa :=#4\do{\csname\@tempa\endcsname}% + \special{" + \BR\BL\TR\TL + \strippt\@wholewidth + \strippt\@tempdimb + \strippt\@ovxx + \strippt\@ovyy + pspicmacO}% + \endgroup} + +\def\Line(#1,#2){% + \@ovxx #1\unitlength + \@ovyy #2\unitlength + \special{" + \strippt\@wholewidth + \strippt\@ovxx + \strippt\@ovyy + pspicmacL2}} + +\def\Curve(#1,#2)#3{\ifdashed + \@ovxx #1\unitlength + \@ovyy #2\unitlength + \special{" + \strippt\@wholewidth + \strippt\@ovxx + \strippt\@ovyy + #3 + pspicmacdC2}\else + \@ovxx #1\unitlength + \@ovyy #2\unitlength + \special{" + \strippt\@wholewidth + \strippt\@ovxx + \strippt\@ovyy + #3 + pspicmacC2}\fi} + +\def\Vector(#1,#2){% + \@ovxx #1\unitlength + \@ovyy #2\unitlength + \special{" + \strippt\@arrowlength + \strippt\@wholewidth + \strippt\@ovxx + \strippt\@ovyy + pspicmacV2}} + +\newdimen\@arrowlength +\def\arrowlength#1{\@arrowlength #1} +\arrowlength{4pt} + +% A few dimensions that count... +\newdimen\@headwid \newdimen\@headlen +\newdimen\@xa \newdimen\@ya \newdimen\@xb \newdimen\@yb +\newdimen\@dxa \newdimen\@dya \newdimen\@dxb \newdimen\@dyb +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%% Top level environments. +% First, set-up a length to keep the external value of \unitlength in it. +\newlength{\externalunitlength} +\newdimen\diagramcellsize +\diagramcellsize=8em + +% Now deal with diagrams with numbering. +\newcounter{diagram} +\def\thediagram{\arabic{diagram}} +\newsavebox{\diagramlabel} + +% Now the unnumbered version +\newenvironment{diagram*}{\refstepcounter{diagram}% + \savebox{\diagramlabel}[0pt]{}\@diagram}{\end@diagram} +\newenvironment{diagram}{\refstepcounter{diagram}% + \savebox{\diagramlabel}{\hbox{\rm (\thediagram)}}\@diagram}{\end@diagram} + +\def\@diagram{\[ + \unitlength\diagramcellsize% + \vcenter\bgroup\hbox to \displaywidth\bgroup\hfil\picture} +\def\end@diagram{\endpicture\hfil\egroup\egroup\llap{\usebox{\diagramlabel}}\]} + +%%%%%%%%% Directions +\def\north{0} +\def\neast{1} +\def\east{2} +\def\seast{3} +\def\south{4} +\def\swest{5} +\def\west{6} +\def\nwest{7} +\def\nneast{8} +\def\eneast{9} +\def\eseast{10} +\def\sseast{11} +\def\sswest{12} +\def\wswest{13} +\def\wnwest{14} +\def\nnwest{15} +\def\po{0} +\def\st{1} + +\def\clock{0} +\def\anti{1} + +\def\near{0} +\def\far{1} + +%%%%%%%%% Positioning +% Command to position an object; puts #3 in math mode at coords. (#1,#2). +\def\object(#1,#2)#3{\put(#1,#2){\makebox(0,0){$#3$}}} + +% !!! This use of absolute coordinates is dreadful. We should work in +% multiples of \unitlength (DVJM). +\def\leftobject(#1,#2)#3{\put(#1,#2){\makebox(0,0) + {\makebox(0.3,0)[r]{$#3$}}}} +\def\rightobject(#1,#2)#3{\put(#1,#2){\makebox(0,0) + {\makebox(0.3,0)[l]{$#3$}}}} + +%%%%%%%%% Short Arrows +% Drawing short arrow bodies for tailed arrows; +\def\arrshbdne{\put ( 0.15, 0.15){\line( 1, 1){0.75}}} +\def\arrshbdnw{\put (-0.15, 0.15){\line(-1, 1){0.75}}} +\def\arrshbdse{\put ( 0.15,-0.15){\line( 1,-1){0.75}}} +\def\arrshbdsw{\put (-0.15,-0.15){\line(-1,-1){0.75}}} +\def\arrshbdn{\put ( 0, 0.15){\line( 0, 1){0.75}}} +\def\arrshbde{\put ( 0.25, 0 ){\line( 1, 0){0.55}}} +\def\arrshbds{\put ( 0, -0.15){\line( 0,-1){0.75}}} +\def\arrshbdw{\put (-0.25, 0 ){\line(-1, 0){0.55}}} + +% Drawing normal sized arrow bodies; +\def\arrbdne{\put ( 0.1, 0.1){\line( 1, 1){0.8}}} +\def\arrbdse{\put ( 0.1,-0.1){\line( 1,-1){0.8}}} +\def\arrbdnw{\put (-0.1, 0.1){\line(-1, 1){0.8}}} +\def\arrbdsw{\put (-0.1,-0.1){\line(-1,-1){0.8}}} +\def\arrbdn{\put ( 0, 0.1){\line( 0, 1){0.8}}} +\def\arrbde{\put ( 0.2, 0 ){\line( 1, 0){0.6}}} +\def\arrbds{\put ( 0, -0.1){\line( 0,-1){0.8}}} +\def\arrbdw{\put (-0.2, 0 ){\line(-1, 0){0.6}}} + +% !!! This bit's a special that might need further touching up (SB) +\def\arrbdnne{\put ( 0.05, 0.1 ){\line( 1, 2){0.4}}} +\def\arrbdene{\put ( 0.15, 0.075){\line( 2, 1){0.7}}} +\def\arrbdese{\put ( 0.15,-0.075){\line( 2,-1){0.7}}} +\def\arrbdsse{\put ( 0.05,-0.1 ){\line( 1,-2){0.4}}} +\def\arrbdssw{\put (-0.05,-0.1 ){\line(-1,-2){0.4}}} +\def\arrbdwsw{\put (-0.15,-0.075){\line(-2,-1){0.7}}} +\def\arrbdwnw{\put (-0.15, 0.075){\line(-2, 1){0.7}}} +\def\arrbdnnw{\put (-0.05, 0.11 ){\line(-1, 2){0.4}}} + +\def\arrhdnne(#1,#2){\put(#1,#2){\line(0,-1){0.056}}\put(#1,#2){\line(-3,-2){0.046}}} +\def\arrhdene(#1,#2){\put(#1,#2){\line(-1,0){0.056}}\put(#1,#2){\line(-2,-3){0.031}}} +\def\arrhdese(#1,#2){\put(#1,#2){\line(-1,0){0.056}}\put(#1,#2){\line(-2, 3){0.031}}} +\def\arrhdsse(#1,#2){\put(#1,#2){\line( 0,1){0.056}}\put(#1,#2){\line(-3, 2){0.046}}} +\def\arrhdssw(#1,#2){\put(#1,#2){\line( 0,1){0.056}}\put(#1,#2){\line( 3, 2){0.046}}} +\def\arrhdwsw(#1,#2){\put(#1,#2){\line( 1,0){0.056}}\put(#1,#2){\line( 2, 3){0.031}}} +\def\arrhdwnw(#1,#2){\put(#1,#2){\line( 1,0){0.056}}\put(#1,#2){\line( 2,-3){0.031}}} +\def\arrhdnnw(#1,#2){\put(#1,#2){\line(0,-1){0.056}}\put(#1,#2){\line( 3,-2){0.046}}} + +%%%%%%%%% Long arrows +\def\longarrbdne{\put( 0.1, 0.1){\line( 1, 1){1.8}}} +\def\longarrbdse{\put( 0.1,-0.1){\line( 1,-1){1.8}}} +\def\longarrbdnw{\put(-0.1, 0.1){\line(-1, 1){1.8}}} +\def\longarrbdsw{\put(-0.1,-0.1){\line(-1,-1){1.8}}} +\def\longarrbdn{\put( 0, 0.1){\line( 0, 1){1.8}}} +\def\longarrbde{\put( 0.2, 0 ){\line( 1, 0){1.6}}} +\def\longarrbds{\put( 0, -0.1){\line( 0,-1){1.8}}} +\def\longarrbdw{\put(-0.2, 0 ){\line(-1, 0){1.6}}} + +\def\longarrbdnne{\put( 0.05, 0.1 ){\line( 1, 2){0.9}}} +\def\longarrbdene{\put( 0.15, 0.075){\line( 2, 1){1.7}}} +\def\longarrbdese{\put( 0.15,-0.075){\line( 2,-1){1.7}}} +\def\longarrbdsse{\put( 0.05,-0.1 ){\line( 1,-2){0.9}}} +\def\longarrbdssw{\put(-0.05,-0.1 ){\line(-1,-2){0.9}}} +\def\longarrbdwsw{\put(-0.15,-0.075){\line(-2,-1){1.7}}} +\def\longarrbdwnw{\put(-0.15, 0.075){\line(-2, 1){1.7}}} +\def\longarrbdnnw{\put(-0.05, 0.11 ){\line(-1, 2){0.9}}} + +%%%%%%%%% Dotted Arrows +\def\arrddbdne{\multiput( 0.15, 0.15)( 0.1, 0.1){8}{\line( 1, 1){0.05}}} +\def\arrddbdse{\multiput( 0.15,-0.15)( 0.1,-0.1){8}{\line( 1,-1){0.05}}} +\def\arrddbdnw{\multiput(-0.15, 0.15)(-0.1, 0.1){8}{\line(-1, 1){0.05}}} +\def\arrddbdsw{\multiput(-0.15,-0.15)(-0.1,-0.1){8}{\line(-1,-1){0.05}}} +\def\arrddbdn{\multiput( 0, 0.15)( 0, 0.1){8}{\line( 0, 1){0.05}}} +\def\arrddbde{\multiput( 0.2, 0 )( 0.1, 0 ){6}{\line( 1, 0){0.05}}} +\def\arrddbds{\multiput( 0, -0.15)( 0, -0.1){8}{\line( 0,-1){0.05}}} +\def\arrddbdw{\multiput( -0.2, 0 )(-0.1, 0 ){6}{\line(-1, 0){0.05}}} + +%%%%%%%%% Heads and tails. +% Heads; the argument determines where the apex of the arrow head lies. +\def\arrhdne(#1,#2){\put(#1,#2){\line(-1,-2){0.025}}\put(#1,#2){\line(-2,-1){0.05 }}} +\def\arrhdse(#1,#2){\put(#1,#2){\line(-1, 2){0.025}}\put(#1,#2){\line(-2, 1){0.05 }}} +\def\arrhdnw(#1,#2){\put(#1,#2){\line( 2,-1){0.05 }}\put(#1,#2){\line( 1,-2){0.025}}} +\def\arrhdsw(#1,#2){\put(#1,#2){\line( 2, 1){0.05 }}\put(#1,#2){\line( 1, 2){0.025}}} +\def\arrhdn(#1,#2){\put(#1,#2){\line( -1,-2){0.025}}\put(#1,#2){\line( 1,-2){0.025}}} +\def\arrhde(#1,#2){\put(#1,#2){\line( -2, 1){0.05 }}\put(#1,#2){\line(-2,-1){0.05 }}} +\def\arrhds(#1,#2){\put(#1,#2){\line( -1, 2){0.025}}\put(#1,#2){\line( 1, 2){0.025}}} +\def\arrhdw(#1,#2){\put(#1,#2){\line( 2, 1){0.05 }}\put(#1,#2){\line( 2,-1){0.05 }}} + +% Drawing inclusion tails +\def\intaile{\put ( 0.2, 0.015){\oval(0.03,0.03)[l]}} +\def\intailn{\put (-0.015, 0.1 ){\oval(0.03,0.03)[b]}} +\def\intails{\put ( 0.015,-0.1 ){\oval(0.03,0.03)[t]}} +\def\intailw{\put (-0.2, 0.015){\oval(0.03,0.03)[r]}} + +%%%%%%%%% Arrow Bodies, Heads and Tails +% The arguments are position (of the object from which to draw the arrow +% and the direction. + +\def\body(#1,#2)#3{\put(#1,#2){\ifcase #3 {\arrbdn} + \or {\arrbdne} \or {\arrbde} \or {\arrbdse} + \or {\arrbds} \or {\arrbdsw} \or {\arrbdw} + \or {\arrbdnw} \or {\arrbdnne} \or {\arrbdene} + \or {\arrbdese} \or {\arrbdsse} \or {\arrbdssw} + \or {\arrbdwsw} \or {\arrbdwnw} \or {\arrbdnnw} \fi}} + +% General long arrow body command. The arguments are as above. +\def\longbody(#1,#2)#3{\put(#1,#2){\ifcase #3 {\longarrbdn} + \or {\longarrbdne} \or {\longarrbde} \or {\longarrbdse} + \or {\longarrbds} \or {\longarrbdsw} \or {\longarrbdw} + \or {\longarrbdnw} \or {\longarrbdnne} \or {\longarrbdene} + \or {\longarrbdese} \or {\longarrbdsse} \or {\longarrbdssw} + \or {\longarrbdwsw} \or {\longarrbdwnw} \or {\longarrbdnnw} \fi}} + +% General short body. Arguments as above. +\def\shbody(#1,#2)#3{\put(#1,#2){\ifcase #3 {\arrshbdn} + \or {\arrshbdne} \or {\arrshbde} \or {\arrshbdse} + \or {\arrshbds} \or {\arrshbdsw} \or {\arrshbdw} + \or {\arrshbdnw} \fi}} + +% General dotted body. +\def\ddbody(#1,#2)#3{\put(#1,#2){\ifcase #3 {\arrddbdn} + \or {\arrddbdne} \or {\arrddbde} \or {\arrddbdse} + \or {\arrddbds} \or {\arrddbdsw} \or {\arrddbdw} + \or {\arrddbdnw} \fi}} + +% General plain head. Two arguments, postion and direction. The position is +% the object position from which the arrow emanates. +\def\plhead(#1,#2)#3{\put(#1,#2){\ifcase #3 {\arrhdn(0,0.9)} + \or {\arrhdne(0.9,0.9)} \or {\arrhde(0.8,0)} + \or {\arrhdse(0.9,-0.9)} \or {\arrhds(0,-0.9)} + \or {\arrhdsw(-0.9,-0.9)} \or {\arrhdw(-0.8,0)} + \or {\arrhdnw(-0.9,0.9)} \or {\arrhdnne(0.45,0.9)} + \or {\arrhdene(0.85,0.425)} \or {\arrhdese(0.85,-0.425)} + \or {\arrhdsse(0.45,-0.9)} \or {\arrhdssw(-0.45,-0.9)} + \or {\arrhdwsw(-0.85,-0.425)} \or {\arrhdwnw(-0.85,0.425)} + \or {\arrhdnnw(-0.45,0.9)} \fi}} + +% General long head. Two arguments, postion and direction. The position is +% the object position from which the arrow emanates. +\def\longplhead(#1,#2)#3{\put(#1,#2){\ifcase #3 {\arrhdn(0,1.9)} + \or {\arrhdne(1.9,1.9)} \or {\arrhde (1.8,0)} + \or {\arrhdse(1.9,-1.9)} \or {\arrhds(0,-1.9)} + \or {\arrhdsw(-1.9,-1.9)} \or {\arrhdw(-1.8,0)} + \or {\arrhdnw(-1.9,1.9)} \or {\arrhdnne(0.95,1.9)} + \or {\arrhdene(1.85,0.925)} \or {\arrhdese(1.85,-0.925)} + \or {\arrhdsse(0.95,-1.9)} \or {\arrhdssw(-0.95,-1.9)} + \or {\arrhdwsw(-1.85,-0.925)} \or {\arrhdwnw(-1.85,0.925)} + \or {\arrhdnnw(-0.95,1.9)} \fi}} + +% General double head. Arguments as above. +\def\dbhead(#1,#2)#3{\put(#1,#2){\ifcase #3 {\arrhdn(0,0.85)} + \or {\arrhdne(0.85,0.85)} \or {\arrhde(0.75,0)} + \or {\arrhdse(0.85,-0.85)} \or {\arrhds(0,-0.85)} + \or {\arrhdsw(-0.85,-0.85)} \or {\arrhdw(-0.75,0)} + \or {\arrhdnw(-0.85,0.85)} \fi}\plhead(#1,#2)#3} + +% General tail. Arguments as above. +\def\tail(#1,#2)#3{\put(#1,#2){\ifcase #3 {\arrhdn(0,0.15)} + \or {\arrhdne(0.15,0.15)} \or {\arrhde(0.25,0)} + \or {\arrhdse(0.15,-0.15)} \or {\arrhds(0,-0.15)} + \or {\arrhdsw(-0.15,-0.15)} \or {\arrhdw(-0.25,0)} + \or {\arrhdnw(-0.15,0.15)} \fi}} + +% !!! What the fuck is going on here ? (DVJM) +% General inclusion tail. Arguments as above. +\def\intail(#1,#2)#3{\put(#1,#2){\ifcase #3 {\intailn} + \or \or {\intaile} + \or \or {\intails} + \or \or {\intailw} \fi}} + +%%%%%%%%% Arrow labels. +% General "right hand" arrow labelling. Arguments are position, direction and label. +\def\arrlabelr(#1,#2)#3#4{\put(#1,#2){\ifcase #3 + {\put ( 0.05, 0.5 ){\makebox (0,0)[l]{$#4$}}} + \or {\put ( 0.5, 0.4 ){\makebox (0,0)[l]{$#4$}}} + \or {\put ( 0.5, -0.1 ){\makebox (0,0){$#4$}}} + \or {\put ( 0.4, -0.5 ){\makebox (0,0)[r]{$#4$}}} + \or {\put (-0.05,-0.5 ){\makebox (0,0)[r]{$#4$}}} + \or {\put (-0.5,- 0.4 ){\makebox (0,0)[r]{$#4$}}} + \or {\put (-0.5, 0.1 ){\makebox (0,0){$#4$}}} + \or {\put (-0.4, 0.5 ){\makebox(0,0)[l]{$#4$}}} + \or {\put ( 0.3, 0.5 ){\makebox (0,0)[l]{$#4$}}} + \or {\put ( 0.55, 0.175){\makebox (0,0)[l]{$#4$}}} + \or {\put ( 0.5, -0.325){\makebox (0,0)[r]{$#4$}}} + \or {\put ( 0.15,-0.55 ){\makebox (0,0)[r]{$#4$}}} + \or {\put (-0.3, -0.525){\makebox (0,0)[r]{$#4$}}} + \or {\put (-0.55,-0.175){\makebox (0,0)[r]{$#4$}}} + \or {\put (-0.5, 0.3 ){\makebox (0,0)[l]{$#4$}}} + \or {\put (-0.15, 0.55 ){\makebox (0,0)[l]{$#4$}}} \fi}} + +% General "left hand" arrow labelling. Arguments are position, direction +% and label. +\def\arrlabell(#1,#2)#3#4{\put(#1,#2){\ifcase #3 + {\put (-0.05, 0.5 ){\makebox (0,0)[r]{$#4$}}} + \or {\put ( 0.4, 0.5 ){\makebox (0,0)[r]{$#4$}}} + \or {\put ( 0.5, 0.1 ){\makebox (0,0){$#4$}}} + \or {\put ( 0.5, -0.4 ){\makebox (0,0)[l]{$#4$}}} + \or {\put ( 0.05,-0.5 ){\makebox (0,0)[l]{$#4$}}} + \or {\put (-0.4, -0.5 ){\makebox (0,0)[l]{$#4$}}} + \or {\put (-0.5, -0.1 ){\makebox (0,0){$#4$}}} + \or {\put (-0.5, 0.4 ){\makebox (0,0)[r]{$#4$}}} + \or {\put ( 0.15, 0.55 ){\makebox (0,0)[r]{$#4$}}} + \or {\put ( 0.5, 0.325){\makebox (0,0)[r]{$#4$}}} + \or {\put ( 0.55,-0.175){\makebox (0,0)[l]{$#4$}}} + \or {\put ( 0.3, -0.5 ){\makebox (0,0)[l]{$#4$}}} + \or {\put (-0.15,-0.575){\makebox (0,0)[l]{$#4$}}} + \or {\put (-0.5, -0.325){\makebox (0,0)[l]{$#4$}}} + \or {\put (-0.55, 0.15 ){\makebox (0,0)[r]{$#4$}}} + \or {\put (-0.3, 0.5 ){\makebox (0,0)[r]{$#4$}}} \fi}} + +% General "right hand" long arrow labelling. +\def\longarrlabelr(#1,#2)#3#4{\put(#1,#2){\ifcase #3 + {\put ( 0.05, 1 ){\makebox (0,0)[l]{$#4$}}} + \or {\put ( 1.1, 1 ){\makebox (0,0)[l]{$#4$}}} + \or {\put ( 1, -0.1 ){\makebox (0,0){$#4$}}} + \or {\put ( 0.9, -1 ){\makebox (0,0)[r]{$#4$}}} + \or {\put (-0.05,-1 ){\makebox (0,0)[r]{$#4$}}} + \or {\put (-1, -0.9 ){\makebox (0,0)[r]{$#4$}}} + \or {\put (-1, 0.1 ){\makebox (0,0){$#4$}}} + \or {\put (-0.9, 1 ){\makebox (0,0)[l]{$#4$}}} + \or {\put ( 0.55, 1 ){\makebox (0,0)[l]{$#4$}}} + \or {\put ( 1.05, 0.4 ){\makebox (0,0)[l]{$#4$}}} + \or {\put ( 1, -0.55){\makebox (0,0)[r]{$#4$}}} + \or {\put ( 0.4, -1.05){\makebox (0,0)[r]{$#4$}}} + \or {\put (-0.55,-1 ){\makebox (0,0)[r]{$#4$}}} + \or {\put (-1.05,-0.4 ){\makebox (0,0)[r]{$#4$}}} + \or {\put (-1, 0.55){\makebox (0,0)[l]{$#4$}}} + \or {\put (-0.4, 1.05){\makebox (0,0)[l]{$#4$}}} \fi}} + +% General "left hand" long arrow labelling. +\def\longarrlabell(#1,#2)#3#4{\put(#1,#2){\ifcase #3 + {\put (-0.05, 1 ){\makebox (0,0)[r]{$#4$}}} + \or {\put ( 0.9, 1 ){\makebox (0,0)[r]{$#4$}}} + \or {\put ( 1, 0.1 ){\makebox (0,0){$#4$}}} + \or {\put ( 1, -0.9 ){\makebox (0,0)[l]{$#4$}}} + \or {\put ( 0.05,-1 ){\makebox (0,0)[l]{$#4$}}} + \or {\put (-0.9, -1 ){\makebox (0,0)[l]{$#4$}}} + \or {\put (-1, -0.1 ){\makebox (0,0){$#4$}}} + \or {\put (-1, 0.9 ){\makebox (0,0)[r]{$#4$}}} + \or {\put ( 0.4, 1.05){\makebox (0,0)[r]{$#4$}}} + \or {\put ( 1, 0.55){\makebox (0,0)[r]{$#4$}}} + \or {\put ( 1.05,-0.4 ){\makebox (0,0)[l]{$#4$}}} + \or {\put ( 0.55,-1 ){\makebox (0,0)[l]{$#4$}}} + \or {\put (-0.4, -1.05){\makebox (0,0)[l]{$#4$}}} + \or {\put (-1, -0.55){\makebox (0,0)[l]{$#4$}}} + \or {\put (-1.05, 0.4 ){\makebox (0,0)[r]{$#4$}}} + \or {\put (-0.55, 1 ){\makebox (0,0)[r]{$#4$}}} \fi}} + +%%%%%%%%% Parallel and Antiparallel Arrows. +\def\prarrowe(#1,#2)#3#4{\put(#1,#2){\@plarrow( 0, 0.05){\east}[#3][\po] + \@plarrow( 0, -0.05){\east}[#4][\st]}} +\def\prarrown(#1,#2)#3#4{\put(#1,#2){\@plarrow(-0.05, 0 ){\north}[#3][\po] + \@plarrow( 0.05, 0 ){\north}[#4][\st]}} +\def\prarroww(#1,#2)#3#4{\put(#1,#2){\@plarrow( 0, -0.55){\west}[#3][\po] + \@plarrow( 0, 0.55){\west}[#4][\st]}} +\def\prarrows(#1,#2)#3#4{\put(#1,#2){\@plarrow( 0.05, 0 ){\south}[#3][\po] + \@plarrow(-0.05, 0 ){\south}[#4][\st]}} + +\def\prarrone(#1,#2)#3#4{\put(#1,#2){\@plarrow(-0.03, 0.03){\neast}[#3][\po] + \@plarrow( 0.03,-0.03){\neast}[#4][\st]}} +\def\prarronw(#1,#2)#3#4{\put(#1,#2){\@plarrow(-0.03,-0.03){\nwest}[#3][\po] + \@plarrow( 0.03, 0.03){\nwest}[#4][\st]}} +\def\prarrose(#1,#2)#3#4{\put(#1,#2){\@plarrow( 0.03, 0.03){\seast}[#3][\po] + \@plarrow(-0.03,-0.03){\seast}[#4][\st]}} +\def\prarrosw(#1,#2)#3#4{\put(#1,#2){\@plarrow( 0.03,-0.03){\swest}[#3][\po] + \@plarrow(-0.03, 0.03){\swest}[#4][\st]}} + +% Command for anti-parallel arrows. Arguments are position and labels. +\def\anprarrowe(#1,#2)#3#4{\put(#1,#2){\@plarrow( 0, 0.05){\east}[#3][\po] + \@plarrow( 1, -0.05){\west}[#4][\po]}} +\def\anprarrown(#1,#2)#3#4{\put(#1,#2){\@plarrow(-0.05, 0 ){\north}[#3][\po] + \@plarrow( 0.05, 1 ){\south}[#4][\po]}} +\def\anprarroww(#1,#2)#3#4{\put(#1,#2){\@plarrow( 0, -0.55){\west}[#3][\po] + \@plarrow(-1, 0.55){\east}[#4][\po]}} +\def\anprarrows(#1,#2)#3#4{\put(#1,#2){\@plarrow( 0.05, 0 ){\south}[#3][\po] + \@plarrow(-0.05,-1 ){\north}[#4][\po]}} + +\def\prarrone(#1,#2)#3#4{\put(#1,#2){\@plarrow(-0.03, 0.03){\neast}[#3][\po] + \@plarrow( 0.03,-0.03){\neast}[#4][\po]}} +\def\prarronw(#1,#2)#3#4{\put(#1,#2){\@plarrow(-0.03,-0.03){\nwest}[#3][\po] + \@plarrow( 0.03, 0.03){\nwest}[#4][\po]}} +\def\prarrose(#1,#2)#3#4{\put(#1,#2){\@plarrow( 0.03, 0.03){\seast}[#3][\po] + \@plarrow(-0.03,-0.03){\seast}[#4][\po]}} +\def\prarrosw(#1,#2)#3#4{\put(#1,#2){\@plarrow( 0.03,-0.03){\swest}[#3][\po] + \@plarrow(-0.03, 0.03){\swest}[#4][\po]}} +% Main arrow drawing commands. +\def\plarrow(#1,#2)#3{\@ifnextchar[{\@plarrow(#1,#2){#3}}% + {\@plarrow(#1,#2){#3}[][\po]}} +\def\@plarrow(#1,#2)#3[#4][#5]{\body(#1,#2){#3}\plhead(#1,#2){#3} + {\ifodd #5 {\arrlabelr(#1,#2){#3}{#4}} + \else {\arrlabell(#1,#2){#3}{#4}}\fi}} + +\def\longplarrow(#1,#2)#3{\@ifnextchar[{\@longplarrow(#1,#2){#3}}% + {\@longplarrow(#1,#2){#3}[][\po]}} +\def\@longplarrow(#1,#2)#3[#4][#5]{\longbody(#1,#2){#3}\longplhead(#1,#2){#3} + {\ifodd #5 {\longarrlabelr(#1,#2){#3}{#4}} + \else {\longarrlabell(#1,#2){#3}{#4}}\fi}} + +\def\sharr(#1,#2)#3{\@ifnextchar[{\@sharr(#1,#2){#3}}% + {\@sharr(#1,#2){#3}[][\po]}} +\def\@sharr(#1,#2)#3[#4][#5]{\shbody(#1,#2){#3}\plhead(#1,#2){#3} + {\ifodd #5 {\arrlabelr(#1,#2){#3}{#4}} + \else {\arrlabell(#1,#2){#3}{#4}}\fi}} + +\def\tlarrow(#1,#2)#3{\@ifnextchar[{\@tlarrow(#1,#2){#3}}% + {\@tlarrow(#1,#2){#3}[][\po]}} +\def\@tlarrow(#1,#2)#3[#4][#5]{\shbody(#1,#2){#3}\plhead(#1,#2){#3}\tail(#1,#2){#3} + {\ifodd #5 {\arrlabelr(#1,#2){#3}{#4}} + \else {\arrlabell(#1,#2){#3}{#4}}\fi}} + +\def\dbarrow(#1,#2)#3{\@ifnextchar[{\@dbarrow(#1,#2){#3}}% + {\@dbarrow(#1,#2){#3}[][\po]}} +\def\@dbarrow(#1,#2)#3[#4][#5]{\body(#1,#2){#3}\dbhead(#1,#2){#3} + {\ifodd #5 {\arrlabelr(#1,#2){#3}{#4}} + \else {\arrlabell(#1,#2){#3}{#4}}\fi}} + +\def\ddarrow(#1,#2)#3{\@ifnextchar[{\@ddarrow(#1,#2){#3}}% + {\@ddarrow(#1,#2){#3}[][\po]}} +\def\@ddarrow(#1,#2)#3[#4][#5]{\ddbody(#1,#2){#3}\plhead(#1,#2){#3} + {\ifodd #5 {\arrlabelr(#1,#2){#3}{#4}} + \else {\arrlabell(#1,#2){#3}{#4}}\fi}} + +\def\inarrow(#1,#2)#3{\@ifnextchar[{\@inarrow(#1,#2){#3}}% + {\@inarrow(#1,#2){#3}[][\po]}} +\def\@inarrow(#1,#2)#3[#4][#5]{\body(#1,#2){#3}\plhead(#1,#2){#3}\intail(#1,#2){#3} + {\ifodd #5 {\arrlabelr(#1,#2){#3}{#4}} + \else {\arrlabell(#1,#2){#3}{#4}}\fi}} +\def\prarrow(#1,#2)#3{\@ifnextchar[{\@prarrow(#1,#2){#3}}% + {\@prarrow(#1,#2){#3}[][\po]}} +\def\@prarrow(#1,#2)#3[#4][#5]{\ifcase #3 {\prarrown(#1,#2){#4}{#5}} + \or {\prarrowne(#1,#2){#4}{#5}} \or {\prarrowe(#1,#2){#4}{#5}} + \or {\prarrowse(#1,#2){#4}{#5}} \or {\prarrows(#1,#2){#4}{#5}} + \or {\prarrowsw(#1,#2){#4}{#5}} \or {\prarroww(#1,#2){#4}{#5}} + \or {\prarrownw(#1,#2){#4}{#5}} \fi} + +\def\sharrow(#1,#2)#3{\@ifnextchar[{\@sharrow(#1,#2){#3}}% + {\@sharrow(#1,#2){#3}[][\po]}} +\def\@sharrow(#1,#2)#3[#4][#5]{\ifcase #3 + {\put( 0, -0.05){\sharr(#1,#2){#3}[#4][#5]}} + \or {\put(-0.05,-0.05){\sharr(#1,#2){#3}[#4][#5]}} + \or {\put(-0.05, 0 ){\sharr(#1,#2){#3}[#4][#5]}} + \or {\put(-0.05, 0.05){\sharr(#1,#2){#3}[#4][#5]}} + \or {\put( 0, 0.05){\sharr(#1,#2){#3}[#4][#5]}} + \or {\put( 0.05, 0.05){\sharr(#1,#2){#3}[#4][#5]}} + \or {\put( 0.05, 0 ){\sharr(#1,#2){#3}[#4][#5]}} + \or {\put( 0.05,-0.05){\sharr(#1,#2){#3}[#4][#5]}} \fi} + +\def\anprarrow(#1,#2)#3{\@ifnextchar[{\@anprarrow(#1,#2){#3}}% + {\@anprarrow(#1,#2){#3}[][]}} +\def\@anprarrow(#1,#2)#3[#4][#5]{\ifcase #3 {\anprarrown(#1,#2){#4}{#5}} + \or {\@warning{Arrow style not available}} + \or {\anprarrowe(#1,#2){#4}{#5}} + \or {\@warning{Arrow style not available}} + \or {\anprarrows(#1,#2){#4}{#5}} + \or {\@warning{Arrow style not available}} + \or {\anprarroww(#1,#2){#4}{#5}} + \or {\@warning{Arrow style not available}} \fi} + +%%%%%%%%% Curved arrow bodies and labels +\def\curvepoarrbdn#1{\put(-0.1, 0.1 ){\Curve(0,0.8){-5}} + \put(-0.3, 0.5 ){\makebox(0,0)[r]{$#1$}}} +\def\curvestarrbdn#1{\put( 0.1, 0.1 ){\Curve(0,0.8){5}} + \put( 0.3, 0.5 ){\makebox(0,0)[l]{$#1$}}} +\def\curvepoarrbde#1{\put( 0.2, 0.1 ){\Curve(0.6,0){-5}} + \put( 0.5, 0.3 ){\makebox(0,0.1){$#1$}}} +\def\curvestarrbde#1{\put( 0.2,-0.1 ){\Curve(0.6,0){5}} + \put( 0.5,-0.35){\makebox(0,0){$#1$}}} + +\def\curvepoarrbds#1{\put( 0.1,-0.1){\Curve(0,-0.8){-5}} + \put( 0.3,-0.5){\makebox(0,0)[l]{$#1$}}} +\def\curvestarrbds#1{\put(-0.1,-0.1){\Curve(0,-0.8){5}} + \put(-0.3,-0.5){\makebox(0,0)[r]{$#1$}}} +\def\curvestarrbdw#1{\put(-0.2, 0.1){\Curve(-0.6,0){5}} + \put(-0.5, 0.3){\makebox(0,0.1){$#1$}}} +\def\curvepoarrbdw#1{\put(-0.2,-0.1){\Curve(-0.6,0){-5}} + \put(-0.5,-0.35){\makebox(0,0){$#1$}}} + +% Long curved arrow bodies +\def\longcurvepoarrbdn#1{\put(-0.1, 0.1 ){\Curve(0,1.8){-5}} + \put(-0.6, 1 ){\makebox(0,0)[r]{$#1$}}} +\def\longcurvestarrbdn#1{\put( 0.1, 0.1 ){\Curve(0,1.8){5}} + \put( 0.6, 1 ){\makebox(0,0)[l]{$#1$}}} +\def\longcurvepoarrbde#1{\put( 0.2, 0.1 ){\Curve(1.6,0){-5}} + \put( 1, 0.55){\makebox(0,0){$#1$}}} +\def\longcurvestarrbde#1{\put( 0.2,-0.1 ){\Curve(1.6,0){5}} + \put( 1, -0.6 ){\makebox(0,0){$#1$}}} +\def\longcurvepoarrbds#1{\put( 0.1,-0.1 ){\Curve(0,-1.8){-5}} + \put( 0.6,-1 ){\makebox(0,0)[l]{$#1$}}} +\def\longcurvestarrbds#1{\put(-0.1,-0.1 ){\Curve(0,-1.8){5}} + \put(-0.6,-1 ){\makebox(0,0)[r]{$#1$}}} +\def\longcurvestarrbdw#1{\put(-0.2, 0.1 ){\Curve(-1.6,0){5}} + \put(-1, 0.55){\makebox(0,0){$#1$}}} +\def\longcurvepoarrbdw#1{\put(-0.2,-0.1 ){\Curve(-1.6,0){-5}} + \put(-1., -0.6 ){\makebox(0,0){$#1$}}} + +% Arrow heads for curved arrows +\let\curvepoarrhdn=\arrhdne +\let\curvestarrhdn=\arrhdnw +\let\curvepoarrhde=\arrhdse +\let\curvestarrhde=\arrhdne +\let\curvepoarrhds=\arrhdsw +\let\curvestarrhds=\arrhdse +\let\curvepoarrhdw=\arrhdsw +\let\curvestarrhdw=\arrhdnw + +% General curved body +\def\curvepobody(#1,#2)#3#4{\put(#1,#2){\ifcase #3 {\curvepoarrbdn{#4}} + \or {\@warning{Arrow style not available}} + \or {\curvepoarrbde{#4}} + \or {\@warning{Arrow style not available}} + \or {\curvepoarrbds{#4}} + \or {\@warning{Arrow style not available}} + \or {\curvepoarrbdw{#4}} + \or {\@warning{Arrow style not available}} \fi}} +\def\curvestbody(#1,#2)#3#4{\put(#1,#2){\ifcase #3 {\curvestarrbdn{#4}} + \or {\@warning{Arrow style not available}} + \or {\curvestarrbde{#4}} + \or {\@warning{Arrow style not available}} + \or {\curvestarrbds{#4}} + \or {\@warning{Arrow style not available}} + \or {\curvestarrbdw{#4}} + \or {\@warning{Arrow style not available}} \fi}} +\def\longcurvepobody(#1,#2)#3#4{\put(#1,#2){\ifcase #3 {\longcurvepoarrbdn{#4}} + \or {\@warning{Arrow style not available}} + \or {\longcurvepoarrbde{#4}} + \or {\@warning{Arrow style not available}} + \or {\longcurvepoarrbds{#4}} + \or {\@warning{Arrow style not available}} + \or {\longcurvepoarrbdw{#4}} + \or {\@warning{Arrow style not available}} \fi}} + +\def\longcurvestbody(#1,#2)#3#4{\put(#1,#2){\ifcase #3 {\longcurvestarrbdn{#4}} + \or {\@warning{Arrow style not available}} + \or {\longcurvestarrbde{#4}} + \or {\@warning{Arrow style not available}} + \or {\longcurvestarrbds{#4}} + \or {\@warning{Arrow style not available}} + \or {\longcurvestarrbdw{#4}} + \or {\@warning{Arrow style not available}} \fi}} + +\def\curvepohead(#1,#2)#3{\put(#1,#2) {\ifcase #3 {\curvepoarrhdn(-0.1,0.9)} + \or {\@warning{Arrow style not available}} + \or {\curvepoarrhde(0.8,0.1)} + \or {\@warning{Arrow style not available}} + \or {\curvepoarrhds(0.1,-0.9)} + \or {\@warning{Arrow style not available}} + \or {\curvepoarrhdw(-0.8,-0.1)} + \or {\@warning{Arrow style not available}} \fi}} + +\def\curvesthead(#1,#2)#3{\put(#1,#2) {\ifcase #3 {\curvestarrhdn(0.1,0.9)} + \or {\@warning{Arrow style not available}} + \or {\curvestarrhde(0.8,-0.1)} + \or {\@warning{Arrow style not available}} + \or {\curvestarrhds(-0.1,-0.9)} + \or {\@warning{Arrow style not available}} + \or {\curvestarrhdw(-0.8,0.1)} + \or {\@warning{Arrow style not available}} \fi}} + +\def\longcurvepohead(#1,#2)#3{\put(#1,#2) {\ifcase #3 {\curvepoarrhdn(-0.1,1.9)} + \or {\@warning{Arrow style not available}} + \or {\curvepoarrhde(1.8,0.1)} + \or {\@warning{Arrow style not available}} + \or {\curvepoarrhds(0.1,-1.9)} + \or {\@warning{Arrow style not available}} + \or {\curvepoarrhdw(-1.8,-0.1)} + \or {\@warning{Arrow style not available}} \fi}} + +\def\longcurvesthead(#1,#2)#3{\put(#1,#2) {\ifcase #3 {\curvestarrhdn(0.1,1.9)} + \or {\@warning{Arrow style not available}} + \or {\curvestarrhde(1.8,-0.1)} + \or {\@warning{Arrow style not available}} + \or {\curvestarrhds(-0.1,-1.9)} + \or {\@warning{Arrow style not available}} + \or {\curvestarrhdw(-1.8,0.1)} + \or {\@warning{Arrow style not available}} \fi}} + +\def\curvepoarrow(#1,#2)#3#4{\curvepobody(#1,#2){#3}{#4}\curvepohead(#1,#2){#3}} +\def\curvestarrow(#1,#2)#3#4{\curvestbody(#1,#2){#3}{#4}\curvesthead(#1,#2){#3}} + +\def\longcurvepoarrow(#1,#2)#3#4{\longcurvepobody(#1,#2){#3}{#4}% + \longcurvepohead(#1,#2){#3}} +\def\longcurvestarrow(#1,#2)#3#4{\longcurvestbody(#1,#2){#3}{#4}% + \longcurvesthead(#1,#2){#3}} + +\def\curvearrow(#1,#2)#3{\@ifnextchar[{\@curvearrow(#1,#2){#3}}% + {\@curvearrow(#1,#2){#3}[]}} +\def\@curvearrow(#1,#2)#3[#4]#5{\ifodd #5 {\curvestarrow(#1,#2){#3}{#4}} + \else {\curvepoarrow(#1,#2){#3}{#4}} \fi} + +\def\longcurvearrow(#1,#2)#3{\@ifnextchar[{\@longcurvearrow(#1,#2){#3}}% + {\@longcurvearrow(#1,#2){#3}[]}} +\def\@longcurvearrow(#1,#2)#3[#4]#5{\ifodd #5 {\longcurvestarrow(#1,#2){#3}{#4}} + \else {\longcurveporrow(#1,#2){#3}{#4}} \fi} + +%%%%%%% Two cells +\def\twocellup(#1,#2){\put(#1,#2){{\put( 0.02,-0.1) {\line( 0, 1) {0.16}}} + {\put(-0.02,-0.1) {\line( 0, 1) {0.16}}} + {\put( 0, 0.1) {\line( 1,-2) {0.05}}} + {\put( 0, 0.1) {\line(-1,-2) {0.05}}}}} + +\def\twocelldown(#1,#2){\put(#1,#2){{\put( 0.02, 0.1) {\line( 0,-1) {0.16}}} + {\put(-0.02, 0.1) {\line( 0,-1) {0.16}}} + {\put( 0, -0.1) {\line( 1, 2) {0.05}}} + {\put( 0, -0.1) {\line(-1, 2) {0.05}}}}} + +\def\twocellright(#1,#2){\put(#1,#2){{\put(-0.1, 0.02) {\line( 1, 0){0.16}}} + {\put(-0.1,-0.02) {\line( 1, 0){0.16}}} + {\put( 0.1, 0 ) {\line(-2, 1){0.1 }}} + {\put( 0.1, 0 ) {\line(-2,-1){0.1 }}}}} + +\def\twocellleft(#1,#2){\put(#1,#2){{\put( 0.1,-0.02) {\line(-1, 0) {0.16}}} + {\put( 0.1, 0.02) {\line(-1, 0) {0.16}}} + {\put(-0.1, 0 ) {\line( 2,-1) {0.1 }}} + {\put(-0.1, 0 ) {\line( 2, 1) {0.1 }}}}} + +\def\twocellclock(#1,#2)#3{\put(#1,#2){\ifcase #3 {\twocellright(0, 0.5)} + \or \or {\twocelldown( 0.5, 0 )} + \or \or {\twocellleft( 0, -0.5)} + \or \or {\twocellup( -0.5, 0 )} + \or \or {\twocellright(0.25,0.6)} + \or {\twocelldown( 0.6, 0.25)} + \or {\twocelldown( 0.6, -0.25)} + \or {\twocellleft( 0.25,-0.6 )} + \or {\twocellleft( -0.25,-0.6 )} + \or {\twocellup( -0.6, -0.25)} + \or {\twocellup (-0.6, 0.25)} + \or {\twocellright(-0.25, 0.6 )} \fi}} + +\def\twocellanti(#1,#2)#3{\put(#1,#2){\ifcase #3 {\twocellleft( 0, 0.5)} + \or \or {\twocellup( 0.5, 0 )} + \or \or {\twocellright(0, -0.5)} + \or \or {\twocelldown(-0.5, 0 )} + \or \or {\twocellleft( 0.25,0.6)} + \or {\twocellup( 0.6, 0.25)} + \or {\twocellup( 0.6, -0.25)} + \or {\twocellright( 0.25,-0.6)} + \or {\twocellright(-0.25,-0.6)} + \or {\twocelldown( -0.6, -0.25)} + \or {\twocelldown( -0.6, 0.25)} + \or {\twocellleft( -0.25, 0.6)} \fi}} + +\def\twocelllabelfar(#1,#2)#3#4{\put(#1,#2){\ifcase #3 + {\put( 0, 0.65){\makebox(0,0){$#4$}}} + \or \or {\put( 0.6, 0 ){\makebox(0,0)[l]{$#4$}}} + \or \or {\put( 0, -0.65){\makebox(0,0){$#4$}}} + \or \or {\put(-0.6, 0 ){\makebox(0,0)[r]{$#4$}}} + \or \or {\put( 0.25, 0.75){\makebox(0,0){$#4$}}} + \or {\put( 0.7, 0.25){\makebox(0,0)[l]{$#4$}}} + \or {\put( 0.7, -0.25){\makebox(0,0)[l]{$#4$}}} + \or {\put( 0.25,-0.75){\makebox(0,0){$#4$}}} + \or {\put(-0.25,-0.75){\makebox(0,0){$#4$}}} + \or {\put(-0.7, -0.25){\makebox(0,0)[r]{$#4$}}} + \or {\put(-0.7, 0.25){\makebox(0,0)[r]{$#4$}}} + \or {\put(-0.25, 0.75){\makebox(0,0){$#4$}}} \fi}} + +\def\twocelllabelnear(#1,#2)#3#4{\put(#1,#2){\ifcase #3 + {\put( 0, 0.35){\makebox(0,0){$#4$}}} + \or + \or {\put( 0.4, 0 ){\makebox(0,0)[r]{$#4$}}} + \or + \or {\put( 0, -0.35){\makebox(0,0){$#4$}}} + \or + \or {\put(-0.4, 0 ){\makebox(0,0)[l]{$#4$}}} + \or + \or {\put( 0.25, 0.45){\makebox(0,0){$#4$}}} + \or {\put( 0.5, 0.25){\makebox(0,0)[r]{$#4$}}} + \or {\put( 0.5, -0.25){\makebox(0,0)[r]{$#4$}}} + \or {\put( 0.25,-0.45){\makebox(0,0){$#4$}}} + \or {\put(-0.25,-0.45){\makebox(0,0){$#4$}}} + \or {\put(-0.5, -0.25){\makebox(0,0)[l]{$#4$}}} + \or {\put(-0.5, 0.25){\makebox(0,0)[l]{$#4$}}} + \or {\put(-0.25, 0.45){\makebox(0,0){$#4$}}} \fi}} + +\def\twocell(#1,#2)#3#4{\@ifnextchar[{\@twocell(#1,#2){#3}{#4}}% + {\@twocell(#1,#2){#3}{#4}[][\far]}} +\def\@twocell(#1,#2)#3#4[#5][#6]{{\ifcase #4 {\twocellclock(#1,#2){#3}} + \or {\twocellanti(#1,#2){#3}} \fi} + {\ifcase #6 {\twocelllabelnear(#1,#2){#3}{#5}} + \or {\twocelllabelfar(#1,#2){#3}{#5}} \fi}} + + +%%%%%%% The flexi--arrow routines +\def\Farrow(#1,#2)(#3,#4){\@ifnextchar[{\@Garrow(#1,#2)(#3,#4)}% + {\@Farrow(#1,#2)(#3,#4)[][\po]}} + +% Note (1) that the \put(0,0) really is necessary, and (2) that +% the overhead of doing the trig. means it really is worth avoiding for G +\def\@Farrow(#1,#2)(#3,#4)[#5][#6]{\put(0,0){\@GenLab{#1}{#2}{#3}{#4}{#5}{#6}} + \put(0,0){\@FlArrow(#1,#2)(#3,#4)(0.15,0.15)(0.15,0.15)}} +\def\@Garrow(#1,#2)(#3,#4)[#5][#6]{% + \put(0,0){\@FlArrow(#1,#2)(#3,#4)(0.15,0.15)(0.15,0.15)}} +% In the course of time, @GenLab will label an arrow at arbitrary slope. +\def\@GenLab#1#2#3#4#5#6{} +% \dimen0 = #1pt +% \dimen1 = #2pt +% \dimen3 = #3pt +% \dimen4 = #4pt +% \advance \dimen3 by -\dimen1 +% \advance \dimen4 by -\dimen2 + +% Essentially, we need to work out dx + h sin p, dy + h cos p, where dx +% is x1 - x0, dy similarly, p is atan (dy/dx) and h is about 10pt. +% The arguments are: #1 = x0, #2 = y0, #3 = x1, #4 = y1, #5 = label, #6 = direction +% One for \po first. + +% \input ArcTan.tex +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +\endinput +% +% end of diagram.sty -- cgit v1.2.3