summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2007-12-26 00:46:06 +0000
committerKarl Berry <karl@freefriends.org>2007-12-26 00:46:06 +0000
commit09c2e34333852c976a2bfb988393426be3139ea5 (patch)
tree39fa7de8c6977e71c7da74c78cc463b0a7b8463d /Master/texmf-dist/tex
parent8622f0261b07f52a9363d670b16759eb4b3523e1 (diff)
barr update (2005-12-13)
git-svn-id: svn://tug.org/texlive/trunk@5911 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex')
-rw-r--r--Master/texmf-dist/tex/generic/barr/diagxy.tex (renamed from Master/texmf-dist/tex/latex/barr/diagxy.tex)659
-rw-r--r--Master/texmf-dist/tex/latex/barr/diagram.tex1048
2 files changed, 428 insertions, 1279 deletions
diff --git a/Master/texmf-dist/tex/latex/barr/diagxy.tex b/Master/texmf-dist/tex/generic/barr/diagxy.tex
index 5fc36e7cf54..b71b70e50bf 100644
--- a/Master/texmf-dist/tex/latex/barr/diagxy.tex
+++ b/Master/texmf-dist/tex/generic/barr/diagxy.tex
@@ -1,61 +1,70 @@
- \def\dated#1{\def\thedate{#1}}
- \dated{2001-10-14}
- % This is a package of commutative diagram macros built on top of Xy-pic
- % by Michael Barr (email: barr@barrs.org). Its use is unrestricted. It
- % may be freely distributed, unchanged, for non-commercial or commercial
- % use. If changed, it must be renamed. Inclusion in a commercial
- % software package is also permitted, but I would appreciate receiving a
- % free copy for my personal examination and use. There are no guarantees
- % that this package is good for anything. I have tested it with LaTeX 2e,
- % LaTeX 2.09 and Plain TeX. Although I know of no reason it will not work
- % with AMSTeX, I have not tested it.
+ \def\dated#1{\def\thedate{#1}}%
+ \dated{2004-12-08}%
+ % This is a package of commutative diagram macros built on top of Xy-pic%
+ % by Michael Barr (email: barr@barrs.org). Its use is unrestricted. It%
+ % may be freely distributed, unchanged, for non-commercial or commercial%
+ % use. If changed, it must be renamed. Inclusion in a commercial%
+ % software package is also permitted, but I would appreciate receiving a%
+ % free copy for my personal examination and use. There are no guarantees%
+ % that this package is good for anything. I have tested it with LaTeX 2e,%
+ % LaTeX 2.09 and Plain TeX. Although I know of no reason it will not work%
+ % with AMSTeX, I have not tested it.%
+ % Added 2003-05-10: I now know that the only clash is with \square in%
+ % amssymb, which should therefore be loaded first. If the amssymb%
+ % \square is required, you can \let\box\square and use \box instead.%
+\newcount\atcode \atcode=\catcode`\@%
+\catcode`\@=12%
\input xy
\xyoption{arrow}
+\xyoption{curve}
-\newdir{ >}{{ }*!/-9pt/@{>}}
-\newdir{ (}{{ }*!/-5pt/@{(}}
-\newdir^{ (}{{ }*!/-5pt/@^{(}}
-\newdir{< }{!/9pt/@{<}*{ }}
+\newdir{ >}{{ }*!/-.9em/@{>}}%
+\newdir{ (}{{ }*!/-.5em/@{(}}%
+\newdir^{ (}{{ }*!/-.5em/@^{(}}%
+\newdir{< }{!/.9em/@{<}*{ }}%
-\newbox\Label%
\newdimen\high%
-\newdimen\deep%
\newdimen\ul%
\newcount\deltax%
\newcount\deltay%
\newcount\deltaX%
+\newcount\deltaXprime%
\newcount\deltaY%
+\newcount\deltaYprime%
-\newdimen\wdth
+\newdimen\wdth%
\newcount\xend%
\newcount\yend%
-\newcount\Xend
-\newcount\Yend
+\newcount\Xend%
+\newcount\Yend%
\newcount\xpos%
\newcount\ypos%
\newcount\default \default=500%
-\newcount\defaultmargin \defaultmargin=150
+\newcount\defaultmargin \defaultmargin=150%
\newcount\topw%
\newcount\botw%
\newcount\Xpos%
\newcount\Ypos%
\def\ratchet#1#2{\ifnum#1<#2\global #1=#2\fi}%
-\newcount\atcode \atcode=\catcode`\@%
-\catcode`\@=11
-\expandafter\ifx\csname @ifnextchar\endcsname\relax
-\def\ifnextchar#1#2#3{\let\@tempe
-#1\def\@tempa{#2}\def\@tempb{#3}\futurelet
+\catcode`\@=11%
+\expandafter\ifx\csname @ifnextchar\endcsname\relax%
+\def\ifnextchar#1#2#3{\let\@tempe%
+#1\def\@tempa{#2}\def\@tempb{#3}\futurelet%
\@tempc\@ifnch}%
-\def\@ifnch{\ifx \@tempc \@sptoken \let\@tempd\@xifnch
- \else \ifx \@tempc \@tempe\let\@tempd\@tempa\else\let\@tempd\@tempb\fi
+\def\@ifnch{\ifx \@tempc \@sptoken \let\@tempd\@xifnch%
+ \else \ifx \@tempc \@tempe\let\@tempd\@tempa\else\let\@tempd\@tempb\fi%
\fi \@tempd}%
-\def\:{\let\@sptoken= } \: % this makes \@sptoken a space token
+\def\:{\let\@sptoken= } \: % this makes \@sptoken a space token%
\def\:{\@xifnch} \expandafter\def\: {\futurelet\@tempc\@ifnch}%
-\else
-\let\ifnextchar\@ifnextchar
-\fi
+\else%
+\let\ifnextchar\@ifnextchar%
+\fi%
+\ifx\check@mathfonts\undefined%
+\else \check@mathfonts%
+\fi%
+\newdimen\axis \axis=\fontdimen22\textfont2%
\ul=.01em%
\X@xbase =.01em%
\Y@ybase =.01em%
@@ -63,22 +72,22 @@
\catcode`\@=12%
\def\fontscale#1{%
-\if#1h\relax
-\font\xydashfont=xydash10 scaled \magstephalf
-\font\xyatipfont=xyatip10 scaled \magstephalf
-\font\xybtipfont=xybtip10 scaled \magstephalf
-\font\xybsqlfont=xybsql10 scaled \magstephalf
-\font\xycircfont=xycirc10 scaled \magstephalf
-\else
+\if#1h\relax%
+\font\xydashfont=xydash10 scaled \magstephalf%
+\font\xyatipfont=xyatip10 scaled \magstephalf%
+\font\xybtipfont=xybtip10 scaled \magstephalf%
+\font\xybsqlfont=xybsql10 scaled \magstephalf%
+\font\xycircfont=xycirc10 scaled \magstephalf%
+\else%
\font\xydashfont=xydash10 scaled \magstep#1%
\font\xyatipfont=xyatip10 scaled \magstep#1%
\font\xybtipfont=xybtip10 scaled \magstep#1%
\font\xybsqlfont=xybsql10 scaled \magstep#1%
\font\xycircfont=xycirc10 scaled \magstep#1%
-\fi}
+\fi}%
-\let\bfig\xy%
-\let\efig\endxy%
+\def\bfig{\vcenter\bgroup\xy}%
+\def\efig{\endxy\egroup}%
\def\car#1#2\nil{#1}%
@@ -93,97 +102,91 @@
\def\morphismpppp(#1,#2)|#3|/#4/<#5,#6>[#7`#8;#9]{%
\xend#1\advance \xend by #5%
\yend#2\advance \yend by #6%
-\domorphism(#1,#2)|#3|/#4/<#5,#6>[#7`#8;#9]}
+\domorphism(#1,#2)|#3|/#4/<#5,#6>[{#7}`{#8};{#9}]}%
+
\def\domorphism(#1,#2)|#3|/#4/<#5,#6>[#7`#8;#9]{%
-\edef\next{#4}%
-\ifx\next\empty\relax
- \POS(#1,#2)*+!!<0ex,.75ex>{#7}\ar@{} (\xend,\yend)*+!!<0ex,.75ex>{#8}%
-\else \def\next{\car#4\nil}\fi
-\if@\next\relax
+ % Check if arrow arg has an @; then don't add it.%
+\def\next{\car#4.\nil}%
+\if@\next\relax%
\if#3l%
\ifnum #6>0%
- \POS(#1,#2)*+!!<0ex,.75ex>{#7}\ar#4^-{#9} (\xend,\yend)*+!!<0ex,.75ex>{#8}%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar#4^-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}%
\else%
- \POS(#1,#2)*+!!<0ex,.75ex>{#7}\ar#4_-{#9} (\xend,\yend)*+!!<0ex,.75ex>{#8}%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar#4_-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}%
\fi%
\else \if#3m%
\setbox0\hbox{$#9$}%
- \ifdim \wd0=0pt
- \POS(#1,#2)*+!!<0ex,.75ex>{#7}\ar#4 (\xend,\yend)*+!!<0ex,.75ex>{#8}%
- \else
- \setbox\Label=\hbox{\kern .5pt $\labelstyle #9$\kern .5pt}%
- \high=\ht\Label \advance\high by 2pt \ht\Label=\high%
- \deep=\dp\Label \advance\deep by 2pt \dp\Label=\deep%
- \POS(#1,#2)*+!!<0ex,.75ex>{#7}\ar#4|-{\box\Label} (\xend,\yend)*+!!<0ex,.75ex>{#8}%
- \fi
+ \ifdim \wd0=0pt%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar#4 (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \else%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar#4|-*+<1pt,4pt>{\labelstyle#9}%
+ (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \fi%
\else \if#3r%
\ifnum #6<0%
- \POS(#1,#2)*+!!<0ex,.75ex>{#7}\ar#4^-{#9} (\xend,\yend)*+!!<0ex,.75ex>{#8}%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar#4^-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}%
\else%
- \POS(#1,#2)*+!!<0ex,.75ex>{#7}\ar#4_-{#9} (\xend,\yend)*+!!<0ex,.75ex>{#8}%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar#4_-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}%
\fi%
\else \if#3a%
\ifnum #5>0%
- \POS(#1,#2)*+!!<0ex,.75ex>{#7}\ar#4^-{#9} (\xend,\yend)*+!!<0ex,.75ex>{#8}%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar#4^-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}%
\else%
- \POS(#1,#2)*+!!<0ex,.75ex>{#7}\ar#4_-{#9} (\xend,\yend)*+!!<0ex,.75ex>{#8}%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar#4_-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}%
\fi%
\else \if#3b%
\ifnum #5<0%
- \POS(#1,#2)*+!!<0ex,.75ex>{#7}\ar#4^-{#9} (\xend,\yend)*+!!<0ex,.75ex>{#8}%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar#4^-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}%
\else%
- \POS(#1,#2)*+!!<0ex,.75ex>{#7}\ar#4_-{#9} (\xend,\yend)*+!!<0ex,.75ex>{#8}%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar#4_-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}%
\fi%
- \else
- \POS(#1,#2)*+!!<0ex,.75ex>{#7}\ar#4 (\xend,\yend)*+!!<0ex,.75ex>{#8}%
+ \else%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar#4 (\xend,\yend)*+!!<0ex,\axis>{#8}%
\fi\fi\fi\fi\fi%
+ %% Otherwise, have to add @{..}%
\else%
-\edef\next{#4}%
- \ifx\next\empty\relax
- \POS(#1,#2)*+!!<0ex,.75ex>{#7}; (\xend,\yend)*+!!<0ex,.75ex>{#8}%
- \else \edef\next{#4}%
- \ifx\next\empty\relax
- \POS(#1,#2)*+!!<0ex,.75ex>{#7}\ar (\xend,\yend)*+!!<0ex,.75ex>{#8}%
- \else \if#3l%
+ \if#3l%
\ifnum #6>0%
- \POS(#1,#2)*+!!<0ex,.75ex>{#7}\ar@{#4}^-{#9} (\xend,\yend)*+!!<0ex,.75ex>{#8}%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar@{#4}^-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}%
\else%
- \POS(#1,#2)*+!!<0ex,.75ex>{#7}\ar@{#4}_-{#9} (\xend,\yend)*+!!<0ex,.75ex>{#8}%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar@{#4}_-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}%
\fi%
\else \if#3m%
\setbox0\hbox{$#9$}%
- \ifdim \wd0=0pt
- \POS(#1,#2)*+!!<0ex,.75ex>{#7}\ar@{#4} (\xend,\yend)*+!!<0ex,.75ex>{#8}%
- \else
- \setbox\Label=\hbox{\kern .5pt $\labelstyle #9$\kern .5pt}%
- \high=\ht\Label \advance\high by 2pt \ht\Label=\high%
- \deep=\dp\Label \advance\deep by 2pt \dp\Label=\deep%
- \POS(#1,#2)*+!!<0ex,.75ex>{#7}\ar@{#4}|-{\box\Label} (\xend,\yend)*+!!<0ex,.75ex>{#8}%
- \fi
+ \ifdim \wd0=0pt%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar@{#4} (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \else%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar@{#4}|-*+<1pt,4pt>{\labelstyle#9}%
+ (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \fi%
\else \if#3r%
\ifnum #6<0%
- \POS(#1,#2)*+!!<0ex,.75ex>{#7}\ar@{#4}^-{#9} (\xend,\yend)*+!!<0ex,.75ex>{#8}%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar@{#4}^-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}%
\else%
- \POS(#1,#2)*+!!<0ex,.75ex>{#7}\ar@{#4}_-{#9} (\xend,\yend)*+!!<0ex,.75ex>{#8}%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar@{#4}_-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}%
\fi%
\else \if#3a%
\ifnum #5>0%
- \POS(#1,#2)*+!!<0ex,.75ex>{#7}\ar@{#4}^-{#9} (\xend,\yend)*+!!<0ex,.75ex>{#8}%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar@{#4}^-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}%
\else%
- \POS(#1,#2)*+!!<0ex,.75ex>{#7}\ar@{#4}_-{#9} (\xend,\yend)*+!!<0ex,.75ex>{#8}%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar@{#4}_-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}%
\fi%
\else \if#3b%
\ifnum #5<0%
- \POS(#1,#2)*+!!<0ex,.75ex>{#7}\ar@{#4}^-{#9} (\xend,\yend)*+!!<0ex,.75ex>{#8}%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar@{#4}^-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}%
\else%
- \POS(#1,#2)*+!!<0ex,.75ex>{#7}\ar@{#4}_-{#9} (\xend,\yend)*+!!<0ex,.75ex>{#8}%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar@{#4}_-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}%
\fi%
- \else
- \POS(#1,#2)*+!!<0ex,.75ex>{#7}\ar@{#4} (\xend,\yend)*+!!<0ex,.75ex>{#8}%
- \fi\fi\fi\fi\fi\fi\fi%
+ \else%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar@{#4} (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \fi\fi\fi\fi\fi%
\fi\ignorespaces}%
+\def\vect(#1,#2)/#3/<#4,#5>{%
+ \xend#1 \yend#2 \advance\xend by #4 \advance\yend by #5%
+ \POS(#1,#2)\ar#3 (\xend,\yend)}%
+
\def\squarepppp(#1,#2)|#3|/#4`#5`#6`#7/<#8>[#9]{%
\xpos#1\ypos#2%
\def\next|##1##2##3##4|{%
@@ -289,7 +292,7 @@
\next[#8]%
\multiply\deltax by 2%
\morphism(\xpos,\ypos)|\xc|/{#6}/<\deltax,0>[\nodeb`\nodec;\labelc]%
-\divide\deltax by 2
+\divide\deltax by 2%
\advance\ypos by \deltay\advance\xpos by \deltax%
\morphism(\xpos,\ypos)|\xa|/{#4}/<-\deltax,-\deltay>[\nodea`\nodeb;\labela]%
\morphism(\xpos,\ypos)|\xb|/{#5}/<\deltax,-\deltay>[\nodea`\nodec;\labelb]%
@@ -309,7 +312,7 @@
\morphism(\xpos,\ypos)|\xb|/{#5}/<\deltax,-\deltay>[\nodea`\nodec;\labelb]%
\multiply\deltax by 2%
\morphism(\xpos,\ypos)|\xa|/{#4}/<\deltax,0>[\nodea`\nodeb;\labela]%
-\advance\xpos by \deltax \divide \deltax by 2
+\advance\xpos by \deltax \divide \deltax by 2%
\morphism(\xpos,\ypos)|\xc|/{#6}/<-\deltax,-\deltay>[\nodeb`\nodec;\labelc]%
\ignorespaces}%
@@ -502,7 +505,6 @@
\advance\xpos by \deltax%
\morphism(\xpos,\ypos)|\xe|/{#7}/<-\deltax,-\deltay>[\nodec`\noded;\labele]%
\ignorespaces}%
-
\def\Atrianglepair{\ifnextchar({\Atrianglepairp}{\Atrianglepairp(0,0)}}%
\def\Atrianglepairp(#1){\ifnextchar|{\Atrianglepairpp(#1)}%
{\Atrianglepairpp(#1)|lmrbb|}}%
@@ -539,7 +541,9 @@
\ifnextchar<{\Dtrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/}%
{\Dtrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/<\default,\default>}}%
-\def\place(#1,#2)[#3]{\POS(#1,#2)*+!!<0ex,.75ex>{#3}\ignorespaces}%
+\def\pplace[#1](#2,#3)[#4]{\POS(#2,#3)*+!!<0ex,\axis>!#1{#4}\ignorespaces}%
+\def\cplace(#1,#2)[#3]{\POS(#1,#2)*+!!<0ex,\axis>{#3}\ignorespaces}%
+\def\place{\ifnextchar[{\pplace}{\cplace}}%
\def\pullback#1]#2]{\square#1]\trident#2]\ignorespaces}%
@@ -585,6 +589,41 @@
\ifnextchar<{\Squarepppp(#1)|#2|/#3`#4`#5`#6/}%
{\Squarepppp(#1)|#2|/#3`#4`#5`#6/<\default>}}%
+\def\hsquarespppp(#1,#2)|#3|/#4/<#5>[#6;#7]{%
+\Xpos=#1\Ypos=#2%
+\def\next|##1##2##3##4##5##6##7|{%
+ \def\Xa{##1}\def\Xb{##2}\def\Xc{##3}\def\Xd{##4}%
+ \def\Xe{##5}\def\Xf{##6}\def\Xg{##7}}%
+\next|#3|%
+\def\next<##1,##2,##3>{\deltaX=##1\deltaXprime=##2\deltaY=##3}%
+\next<#5>%
+\def\next[##1`##2`##3`##4`##5`##6]{%
+ \def\Nodea{##1}\def\Nodeb{##2}\def\Nodec{##3}%
+ \def\Noded{##4}\def\Nodee{##5}\def\Nodef{##6}}%
+\next[#6]%
+\def\next[##1`##2`##3`##4`##5`##6`##7]{%
+ \def\Labela{##1}\def\Labelb{##2}\def\Labelc{##3}\def\Labeld{##4}%
+ \def\Labele{##5}\def\Labelf{##6}\def\Labelg{##7}}%
+\next[#7]%
+\dohsquares/#4/}%
+
+\def\dohsquares/#1`#2`#3`#4`#5`#6`#7/{%
+\squarepppp(\Xpos,\Ypos)|\Xa\Xc\Xd\Xf|/#1`#3`#4`#6/<\deltaX,\deltaY>%
+ [\Nodea`\Nodeb`\Noded`\Nodee;\Labela`\Labelc`\Labeld`\Labelf]%
+ \advance \Xpos by \deltaX%
+\squarepppp(\Xpos,\Ypos)|\Xb\Xd\Xe\Xg|/#2``#5`#7/<\deltaXprime,\deltaY>%
+[\Nodeb`\Nodec`\Nodee`\Nodef;\Labelb``\Labele`\Labelg]%
+\ignorespaces}%
+
+\def\hsquares{\ifnextchar({\hsquaresp}{\hsquaresp(0,0)}}%
+\def\hsquaresp(#1){\ifnextchar|{\hsquarespp(#1)}{\hsquarespp%
+(#1)|aalmrbb|}}%
+\def\hsquarespp(#1)|#2|{\ifnextchar/{\hsquaresppp(#1)|#2|}%
+ {\hsquaresppp(#1)|#2|/>`>`>`>`>`>`>/}}%
+\def\hsquaresppp(#1)|#2|/#3/{%
+ \ifnextchar<{\hsquarespppp(#1)|#2|/#3/}%
+ {\hsquarespppp(#1)|#2|/#3/<\default,\default,\default>}}%
+
\def\hSquarespppp(#1,#2)|#3|/#4/<#5>[#6;#7]{%
\Xpos=#1\Ypos=#2%
\def\next|##1##2##3##4##5##6##7|{%
@@ -605,7 +644,7 @@
\def\dohSquares/#1`#2`#3`#4`#5`#6`#7/{%
\Squarepppp(\Xpos,\Ypos)|\Xa\Xc\Xd\Xf|/#1`#3`#4`#6/<\deltaY>%
[\Nodea`\Nodeb`\Noded`\Nodee;\Labela`\Labelc`\Labeld`\Labelf]%
- \advance \Xpos by \topw
+ \advance \Xpos by \topw%
\Squarepppp(\Xpos,\Ypos)|\Xb\Xd\Xe\Xg|/#2``#5`#7/<\deltaY>%
[\Nodeb`\Nodec`\Nodee`\Nodef;\Labelb``\Labele`\Labelg]%
\ignorespaces}%
@@ -619,6 +658,42 @@
\ifnextchar<{\hSquarespppp(#1)|#2|/#3/}%
{\hSquarespppp(#1)|#2|/#3/<\default>}}%
+\def\vsquarespppp(#1,#2)|#3|/#4/<#5>[#6;#7]{%
+\Xpos=#1\Ypos=#2%
+\def\next|##1##2##3##4##5##6##7|{%
+ \def\Xa{##1}\def\Xb{##2}\def\Xc{##3}\def\Xd{##4}%
+ \def\Xe{##5}\def\Xf{##6}\def\Xg{##7}}%
+\next|#3|%
+\def\next<##1,##2,##3>{\deltaX=##1\deltaY=##2\deltaYprime=##3}%
+\next<#5>%
+\def\next[##1`##2`##3`##4`##5`##6]{%
+ \def\Nodea{##1}\def\Nodeb{##2}\def\Nodec{##3}%
+ \def\Noded{##4}\def\Nodee{##5}\def\Nodef{##6}}%
+\next[#6]%
+\def\next[##1`##2`##3`##4`##5`##6`##7]{%
+ \def\Labela{##1}\def\Labelb{##2}\def\Labelc{##3}\def\Labeld{##4}%
+ \def\Labele{##5}\def\Labelf{##6}\def\Labelg{##7}}%
+\next[#7]%
+\dovsquares/#4/}%
+
+\def\dovsquares/#1`#2`#3`#4`#5`#6`#7/{%
+\squarepppp(\Xpos,\Ypos)|\Xd\Xe\Xf\Xg|/`#5`#6`#7/<\deltaX,\deltaYprime>%
+[\Nodec`\Noded`\Nodee`\Nodef;`\Labele`\Labelf`\Labelg]%
+ \advance\Ypos by \deltaYprime%
+\squarepppp(\Xpos,\Ypos)|\Xa\Xb\Xc\Xd|/#1`#2`#3`#4/<\deltaX,\deltaY>%
+ [\Nodea`\Nodeb`\Nodec`\Noded;\Labela`\Labelb`\Labelc`\Labeld]%
+\ignorespaces}%
+
+\def\vsquares{\ifnextchar({\vsquaresp}{\vsquaresp(0,0)}}%
+\def\vsquaresp(#1){\ifnextchar|{\vsquarespp(#1)}{\vsquarespp%
+(#1)|aalmrbb|}}%
+\def\vsquarespp(#1)|#2|{\ifnextchar/{\vsquaresppp(#1)|#2|}%
+ {\vsquaresppp(#1)|#2|/>`>`>`>`>`>`>/}}%
+\def\vsquaresppp(#1)|#2|/#3/{%
+ \ifnextchar<{\vsquarespppp(#1)|#2|/#3/}%
+ {\vsquarespppp(#1)|#2|/#3/<\default,\default,\default>}}%
+
+
\def\vSquarespppp(#1,#2)|#3|/#4/<#5,#6>[#7;#8]{%
\Xpos=#1\Ypos=#2%
\def\next|##1##2##3##4##5##6##7|{%
@@ -663,7 +738,7 @@
(#1)|#2|/#3`#4`#5`#6/<#7>[#8]%
\let\Nodea\nodea\let\Nodeb\nodeb%
\let\Nodec\nodec\let\Noded\noded\Xpos=\xpos\Ypos=\ypos%
-\deltaX=\deltax \deltaY=\deltay \isquare}
+\deltaX=\deltax \deltaY=\deltay \isquare}%
\def\cube{\ifnextchar({\osquarep}{\osquarep(0,0)}}%
\def\osquarep(#1){\ifnextchar|{\osquarepp(#1)}{\osquarepp(#1)|alrb|}}%
@@ -679,7 +754,7 @@
\def\cubep|#1|{\ifnextchar/{\cubepp|#1|}{\cubepp|#1|/>`>`>`>/}}%
\def\isquare{\ifnextchar({\isquarep}{\isquarep(\default,\default)}}%
-\def\isquarep(#1){\ifnextchar|{\isquarepp(#1)}{\isquarepp(#1)|alrb|}}
+\def\isquarep(#1){\ifnextchar|{\isquarepp(#1)}{\isquarepp(#1)|alrb|}}%
\def\isquarepp(#1)|#2|{\ifnextchar/{\isquareppp(#1)|#2|}%
{\isquareppp(#1)|#2|/>`>`>`>/}}%
\def\isquareppp(#1)|#2|/#3`#4`#5`#6/{%
@@ -689,114 +764,115 @@
\def\cubepp|#1#2#3#4|/#5`#6`#7`#8/[#9]{%
\def\next[##1`##2`##3`##4]{\gdef\Labela{##1}%
\gdef\Labelb{##2}\gdef\Labelc{##3}\gdef\Labeld{##4}}\next[#9]%
-\xend\xpos \yend\ypos
-\Xend\xend\advance\Xend by -\Xpos
-\Yend\yend\advance\Yend by -\Ypos
+\xend\xpos \yend\ypos%
+\Xend\xend\advance\Xend by -\Xpos%
+\Yend\yend\advance\Yend by -\Ypos%
\domorphism(\Xpos,\Ypos)|#2|/#6/<\Xend,\Yend>[\Nodeb`\nodeb;\Labelb]%
-\advance\Xpos by-\deltaX
-\advance\xend by-\deltax
-\Xend\xend\advance\Xend by -\Xpos
+\advance\Xpos by-\deltaX%
+\advance\xend by-\deltax%
+\Xend\xend\advance\Xend by -\Xpos%
\domorphism(\Xpos,\Ypos)|#1|/#5/<\Xend,\Yend>[\Nodea`\nodea;\Labela]%
-\advance\Ypos by-\deltaY
-\advance\yend by-\deltay
-\Yend\yend\advance\Yend by -\Ypos
+\advance\Ypos by-\deltaY%
+\advance\yend by-\deltay%
+\Yend\yend\advance\Yend by -\Ypos%
\domorphism(\Xpos,\Ypos)|#3|/#7/<\Xend,\Yend>[\Nodec`\nodec;\Labelc]%
-\advance\Xpos by\deltaX
-\advance\xend by\deltax
-\Xend\xend\advance\Xend by -\Xpos
+\advance\Xpos by\deltaX%
+\advance\xend by\deltax%
+\Xend\xend\advance\Xend by -\Xpos%
\domorphism(\Xpos,\Ypos)|#4|/#8/<\Xend,\Yend>[\Noded`\noded;\Labeld]%
-\ignorespaces}
+\ignorespaces}%
-\def\setwdth#1#2{\setbox0\hbox{$\labelstyle#1$}\wdth=\wd0
-\setbox0\hbox{$\labelstyle#2$}\ifnum\wdth<\wd0 \wdth=\wd0 \fi}
+\def\setwdth#1#2{\setbox0\hbox{$\labelstyle#1$}\wdth=\wd0%
+\setbox0\hbox{$\labelstyle#2$}\ifnum\wdth<\wd0 \wdth=\wd0 \fi}%
-\def\topppp/#1/<#2>^#3_#4{\allowbreak\mathrel{%
-\ifnum#2=0
- \setwdth{#3}{#4}\deltax=\wdth \divide \deltax by \ul
+\def\topppp/#1/<#2>^#3_#4{\:%
+\ifnum#2=0%
+ \setwdth{#3}{#4}\deltax=\wdth \divide \deltax by \ul%
\advance \deltax by \defaultmargin \ratchet{\deltax}{200}%
-\else \deltax #2
-\fi
-\xy\ar@{#1}^{#3}_{#4}(\deltax,0) \endxy
-\ignorespaces}}
-
-\def\toppp/#1/<#2>^#3{\ifnextchar_{\topppp/#1/<#2>^{#3}}{\topppp/#1/<#2>^{#3}_{}}}
-\def\topp/#1/<#2>{\ifnextchar^{\toppp/#1/<#2>}{\toppp/#1/<#2>^{}}}
-\def\top/#1/{\ifnextchar<{\topp/#1/}{\topp/#1/<0>}}
-\def\to{\ifnextchar/{\top}{\top/>/}}
-
-\def\mon{\to/ >->/}
-\def\epi{\to/->>/}
-\def\toleft{\to/<-/}
-\def\monleft{\to/<-< /}
-\def\epileft{\to/<<-/}
-
-
-\def\twopppp/#1`#2/<#3>^#4_#5{\allowbreak\mathrel{%
-\ifnum0=#3
- \setwdth{#4}{#5}\deltax=\wdth \divide \deltax by \ul \advance \deltax
+\else \deltax #2%
+\fi%
+\xy\ar@{#1}^{#3}_{#4}(\deltax,0) \endxy%
+\:}%
+
+\def\toppp/#1/<#2>^#3{\ifnextchar_{\topppp/#1/<#2>^{#3}}{\topppp/#1/<#2>^{#3}_{}}}%
+\def\topp/#1/<#2>{\ifnextchar^{\toppp/#1/<#2>}{\toppp/#1/<#2>^{}}}%
+\def\toop/#1/{\ifnextchar<{\topp/#1/}{\topp/#1/<0>}}%
+\def\to{\ifnextchar/{\toop}{\toop/>/}}%
+
+
+\def\mon{\to/ >->/}%
+\def\epi{\to/->>/}%
+\def\toleft{\to/<-/}%
+\def\monleft{\to/<-< /}%
+\def\epileft{\to/<<-/}%
+
+
+\def\twopppp/#1`#2/<#3>^#4_#5{\:%
+\ifnum0=#3%
+ \setwdth{#4}{#5}\deltax=\wdth \divide \deltax by \ul \advance \deltax%
by \defaultmargin \ratchet{\deltax}{200}%
-\else \deltax#3 \fi
+\else \deltax#3 \fi%
\xy\ar@{#1}@<2.5pt>^{#4}(\deltax,0)%
-\ar@{#2}@<-2.5pt>_{#5}(\deltax,0)\endxy\ignorespaces}}
+\ar@{#2}@<-2.5pt>_{#5}(\deltax,0)\endxy\:}%
\def\twoppp/#1`#2/<#3>^#4{\ifnextchar_{\twopppp/#1`#2/<#3>^{#4}}%
- {\twopppp/#1`#2/<#3>^{#4}_{}}}
-\def\twopp/#1`#2/<#3>{\ifnextchar^{\twoppp/#1`#2/<#3>}{\twoppp/#1`#2/<#3>^{}}}
-\def\twop/#1`#2/{\ifnextchar<{\twopp/#1`#2/}{\twopp/#1`#2/<0>}}
-\def\two{\ifnextchar/{\twop}{\twop/>`>/}}
-
-\def\twoleft{\two/<-`<-/}
-
-\def\threeppppp/#1`#2`#3/<#4>^#5|#6_#7{\allowbreak\mathrel{%
-\ifnum0=#4
-\setbox0\hbox{$\labelstyle#5$}\wdth=\wd0
-\setbox0\hbox{$\labelstyle#6$}\ifnum\wdth<\wd0 \wdth=\wd0 \fi
-\setbox0\hbox{$\labelstyle#7$}\ifnum\wdth<\wd0 \wdth=\wd0 \fi
-\deltax=\wdth \divide \deltax by \ul \advance \deltax by
+ {\twopppp/#1`#2/<#3>^{#4}_{}}}%
+\def\twopp/#1`#2/<#3>{\ifnextchar^{\twoppp/#1`#2/<#3>}{\twoppp/#1`#2/<#3>^{}}}%
+\def\twop/#1`#2/{\ifnextchar<{\twopp/#1`#2/}{\twopp/#1`#2/<0>}}%
+\def\two{\ifnextchar/{\twop}{\twop/>`>/}}%
+
+\def\twoleft{\two/<-`<-/}%
+
+\def\threeppppp/#1`#2`#3/<#4>^#5|#6_#7{\:%
+\ifnum0=#4%
+\setbox0\hbox{$\labelstyle#5$}\wdth=\wd0%
+\setbox0\hbox{$\labelstyle#6$}\ifnum\wdth<\wd0 \wdth=\wd0 \fi%
+\setbox0\hbox{$\labelstyle#7$}\ifnum\wdth<\wd0 \wdth=\wd0 \fi%
+\deltax=\wdth \divide \deltax by \ul \advance \deltax by%
\defaultmargin \ratchet{\deltax}{300}%
-\else\deltax#4 \fi
- \xy \ifnum\wd0=0 \ar@{#2}(\deltax,0)
- \else \ar@{#2}|{#6}(\deltax,0)\fi
-\ar@{#1}@<4.5pt>^{#5}(\deltax,0)
-\ar@{#3}@<-4.5pt>_{#7}(\deltax,0)\endxy\ignorespaces}}
-
-\def\threepppp/#1`#2`#3/<#4>^#5|#6{\ifnextchar_{\threeppppp
- /#1`#2`#3/<#4>^{#5}|{#6}}{\threeppppp/#1`#2`#3/<#4>^{#5}|{#6}_{}}}
-\def\threeppp/#1`#2`#3/<#4>^#5{\ifnextchar|{\threepppp
- /#1`#2`#3/<#4>^{#5}}{\threepppp/#1`#2`#3/<#4>^{#5}|{}}}
+\else\deltax#4 \fi%
+ \xy \ifnum\wd0=0 \ar@{#2}(\deltax,0)%
+ \else \ar@{#2}|{#6}(\deltax,0)\fi%
+\ar@{#1}@<4.5pt>^{#5}(\deltax,0)%
+\ar@{#3}@<-4.5pt>_{#7}(\deltax,0)\endxy\:}%
+
+\def\threepppp/#1`#2`#3/<#4>^#5|#6{\ifnextchar_{\threeppppp%
+ /#1`#2`#3/<#4>^{#5}|{#6}}{\threeppppp/#1`#2`#3/<#4>^{#5}|{#6}_{}}}%
+\def\threeppp/#1`#2`#3/<#4>^#5{\ifnextchar|{\threepppp%
+ /#1`#2`#3/<#4>^{#5}}{\threepppp/#1`#2`#3/<#4>^{#5}|{}}}%
\def\threepp/#1`#2`#3/<#4>{\ifnextchar^{\threeppp/#1`#2`#3/<#4>}%
- {\threeppp/#1`#2`#3/<#4>^{}}}
+ {\threeppp/#1`#2`#3/<#4>^{}}}%
\def\threep/#1`#2`#3/{\ifnextchar<{\threepp/#1`#2`#3/}%
- {\threepp/#1`#2`#3/<0>}}
-\def\three{\ifnextchar/{\threep}{\threep/>`>`>/}}
+ {\threepp/#1`#2`#3/<0>}}%
+\def\three{\ifnextchar/{\threep}{\threep/>`>`>/}}%
\def\twoar(#1,#2){{%
- \scalefactor{0.1}
+ \scalefactor{0.1}%
\deltax#1\deltay#2%
- \deltaX=\ifnum\deltax<0-\fi\deltax
- \deltaY=\ifnum\deltay<0-\fi\deltay
- \Xend\deltax \multiply \Xend by \deltax
- \Yend\deltay \multiply \Yend by \deltay
- \advance\Xend by \Yend \multiply \Xend by 3
- \ifnum \deltaX > \deltaY
- \multiply \deltaX by 3 \advance \deltaX by \deltaY
- \else
- \multiply \deltaY by 3 \advance \deltaX by \deltaY
- \fi
- \multiply\deltax by 500
- \multiply\deltay by 500
- \xpos\deltax \multiply \xpos by 3 \divide\xpos by \deltaX
- \Xpos\deltax \multiply \Xpos by \deltaX \divide \Xpos by \Xend
- \advance \xpos by \Xpos
- \ypos\deltay \multiply \ypos by 3 \divide\ypos by \deltaX
- \Ypos\deltay \multiply \Ypos by \deltaX \divide \Ypos by \Xend
- \advance \ypos by \Ypos
- \xy \ar@{=>}(\xpos,\ypos) \endxy
-}\ignorespaces}
+ \deltaX=\ifnum\deltax<0-\fi\deltax%
+ \deltaY=\ifnum\deltay<0-\fi\deltay%
+ \Xend\deltax \multiply \Xend by \deltax%
+ \Yend\deltay \multiply \Yend by \deltay%
+ \advance\Xend by \Yend \multiply \Xend by 3%
+ \ifnum \deltaX > \deltaY%
+ \multiply \deltaX by 3 \advance \deltaX by \deltaY%
+ \else%
+ \multiply \deltaY by 3 \advance \deltaX by \deltaY%
+ \fi%
+ \multiply\deltax by 500%
+ \multiply\deltay by 500%
+ \xpos\deltax \multiply \xpos by 3 \divide\xpos by \deltaX%
+ \Xpos\deltax \multiply \Xpos by \deltaX \divide \Xpos by \Xend%
+ \advance \xpos by \Xpos%
+ \ypos\deltay \multiply \ypos by 3 \divide\ypos by \deltaX%
+ \Ypos\deltay \multiply \Ypos by \deltaX \divide \Ypos by \Xend%
+ \advance \ypos by \Ypos%
+ \xy \ar@{=>}(\xpos,\ypos) \endxy%
+}\ignorespaces}%
\def\iiixiiipppppp(#1,#2)|#3|/#4/<#5>#6<#7>[#8;#9]{%
- \xpos#1\ypos#2\relax
+ \xpos#1\ypos#2\relax%
\def\next|##1##2##3##4##5##6##7|{\def\xa{##1}\def\xb{##2}%
\def\xc{##3}\def\xd{##4}\def\xe{##5}\def\xf{##6}\nextt|##7|}%
\def\nextt|##1##2##3##4##5##6|{\def\xg{##1}\def\xh{##2}%
@@ -806,7 +882,7 @@
\next<#5>%
\def\next<##1,##2>{\deltaX##1\deltaY##2}%
\next<#7>%
- \def\next##1{\topw##1\relax
+ \def\next##1{\topw##1\relax%
\ifodd\topw \def\zl{}\else\def\zl{\relax}\fi \divide\topw by 2
\ifodd\topw \def\zk{}\else\def\zk{\relax}\fi \divide\topw by 2
\ifodd\topw \def\zj{}\else\def\zj{\relax}\fi \divide\topw by 2
@@ -834,45 +910,45 @@
\next[#9]%
\def\next/##1`##2`##3`##4`##5`##6`##7/{%
\morphism(\xpos,\ypos)|\xe|/{##5}/<\deltax,0>[\nodeg`\nodeh;\labele]%
- \ifx\zi\empty\relax \morphism(\xpos,\ypos)||/<-/<-\deltaX,0>[\nodeg`0;]\fi
- \ifx\zd\empty\relax \morphism(\xpos,\ypos)||<0,-\deltaY>[\nodeg`0;]\fi
- \advance\xpos by \deltax
+ \ifx\zi\empty\relax \morphism(\xpos,\ypos)||/<-/<-\deltaX,0>[\nodeg`0;]\fi%
+ \ifx\zd\empty\relax \morphism(\xpos,\ypos)||<0,-\deltaY>[\nodeg`0;]\fi%
+ \advance\xpos by \deltax%
\morphism(\xpos,\ypos)|\xf|/{##6}/<\deltax,0>[\nodeh`\nodei;\labelf]%
- \ifx\ze\empty\relax \morphism(\xpos,\ypos)||<0,-\deltaY>[\nodeh`0;]\fi
- \advance\xpos by \deltax
- \ifx\zf\empty\relax \morphism(\xpos,\ypos)||<0,-\deltaY>[\nodei`0;]\fi
- \ifx\zl\empty\relax \morphism(\xpos,\ypos)||<\deltaX,0>[\nodei`0;]\fi
- \advance\ypos by \deltay
- \ifx\zk\empty\relax \morphism(\xpos,\ypos)||<\deltaX,0>[\nodef`0;]\fi
- \advance\xpos by -\deltax
+ \ifx\ze\empty\relax \morphism(\xpos,\ypos)||<0,-\deltaY>[\nodeh`0;]\fi%
+ \advance\xpos by \deltax%
+ \ifx\zf\empty\relax \morphism(\xpos,\ypos)||<0,-\deltaY>[\nodei`0;]\fi%
+ \ifx\zl\empty\relax \morphism(\xpos,\ypos)||<\deltaX,0>[\nodei`0;]\fi%
+ \advance\ypos by \deltay%
+ \ifx\zk\empty\relax \morphism(\xpos,\ypos)||<\deltaX,0>[\nodef`0;]\fi%
+ \advance\xpos by -\deltax%
\morphism(\xpos,\ypos)|\xd|/{##4}/<\deltax,0>[\nodee`\nodef;\labeld]%
- \advance\xpos by -\deltax
+ \advance\xpos by -\deltax%
\morphism(\xpos,\ypos)|\xc|/{##3}/<\deltax,0>[\noded`\nodee;\labelc]%
- \ifx\zh\empty\relax \morphism(\xpos,\ypos)||/<-/<-\deltaX,0>[\noded`0;]\fi
- \advance\ypos by \deltay
+ \ifx\zh\empty\relax \morphism(\xpos,\ypos)||/<-/<-\deltaX,0>[\noded`0;]\fi%
+ \advance\ypos by \deltay%
\morphism(\xpos,\ypos)|\xa|/{##1}/<\deltax,0>[\nodea`\nodeb;\labela]%
- \ifx\zg\empty\relax \morphism(\xpos,\ypos)||/<-/<-\deltaX,0>[\nodea`0;]\fi
- \ifx\za\empty\relax \morphism(\xpos,\ypos)||/<-/<0,\deltaY>[\nodea`0;]\fi
- \advance\xpos by \deltax
+ \ifx\zg\empty\relax \morphism(\xpos,\ypos)||/<-/<-\deltaX,0>[\nodea`0;]\fi%
+ \ifx\za\empty\relax \morphism(\xpos,\ypos)||/<-/<0,\deltaY>[\nodea`0;]\fi%
+ \advance\xpos by \deltax%
\morphism(\xpos,\ypos)|\xb|/{##2}/<\deltax,0>[\nodeb`\nodec;\labelb]%
- \ifx\zb\empty\relax \morphism(\xpos,\ypos)||/<-/<0,\deltaY>[\nodeb`0;]\fi
- \advance\xpos by \deltax
- \ifx\zc\empty\relax \morphism(\xpos,\ypos)||/<-/<0,\deltaY>[\nodec`0;]\fi
- \ifx\zj\empty\relax \morphism(\xpos,\ypos)||<\deltaX,0>[\nodec`0;]\fi
+ \ifx\zb\empty\relax \morphism(\xpos,\ypos)||/<-/<0,\deltaY>[\nodeb`0;]\fi%
+ \advance\xpos by \deltax%
+ \ifx\zc\empty\relax \morphism(\xpos,\ypos)||/<-/<0,\deltaY>[\nodec`0;]\fi%
+ \ifx\zj\empty\relax \morphism(\xpos,\ypos)||<\deltaX,0>[\nodec`0;]\fi%
\nextt/##7/}%
\def\nextt/##1`##2`##3`##4`##5`##6/{%
\morphism(\xpos,\ypos)|\xi|/{##3}/<0,-\deltay>[\nodec`\nodef;\labeli]%
- \advance\xpos by -\deltax
+ \advance\xpos by -\deltax%
\morphism(\xpos,\ypos)|\xh|/{##2}/<0,-\deltay>[\nodeb`\nodee;\labelh]%
- \advance\xpos by -\deltax
+ \advance\xpos by -\deltax%
\morphism(\xpos,\ypos)|\xg|/{##1}/<0,-\deltay>[\nodea`\noded;\labelg]%
- \advance\ypos by -\deltay
+ \advance\ypos by -\deltay%
\morphism(\xpos,\ypos)|\xj|/{##4}/<0,-\deltay>[\noded`\nodeg;\labelj]%
- \advance\xpos by \deltax
+ \advance\xpos by \deltax%
\morphism(\xpos,\ypos)|\xk|/{##5}/<0,-\deltay>[\nodee`\nodeh;\labelk]%
- \advance\xpos by \deltax
+ \advance\xpos by \deltax%
\morphism(\xpos,\ypos)|\xl|/{##6}/<0,-\deltay>[\nodef`\nodei;\labell]}%
- \next/#4/\ignorespaces}
+ \next/#4/\ignorespaces}%
\def\iiixiii{\ifnextchar({\iiixiiip}{\iiixiiip(0,0)}}%
\def\iiixiiip(#1){\ifnextchar|{\iiixiiipp(#1)}%
@@ -889,7 +965,7 @@
{\iiixiiipppppp(#1)|#2|/#3/<#4>{#5}<400,400>}}%
\def\iiixiipppppp(#1,#2)|#3|/#4/<#5>#6<#7>[#8;#9]{%
- \xpos#1\ypos#2\relax
+ \xpos#1\ypos#2\relax%
\def\next|##1##2##3##4##5##6##7|{\def\xa{##1}\def\xb{##2}%
\def\xc{##3}\def\xd{##4}\def\xe{##5}\def\xf{##6}\def\xg{##7}}%
\next|#3|%
@@ -898,11 +974,11 @@
\deltaX#7
\topw#6
\def\next{%
- \ifodd\topw \def\zd{}\else\def\zd{\relax}\fi \divide\topw by 2
- \ifodd\topw \def\zc{}\else\def\zc{\relax}\fi \divide\topw by 2
+ \ifodd\topw \def\za{}\else\def\za{\relax}\fi \divide\topw by 2
\ifodd\topw \def\zb{}\else\def\zb{\relax}\fi \divide\topw by 2
- \ifodd\topw \def\za{}\else\def\za{\relax}\fi}%
- \next
+ \ifodd\topw \def\zc{}\else\def\zc{\relax}\fi \divide\topw by 2
+ \ifodd\topw \def\zd{}\else\def\zd{\relax}\fi}%
+ \next%
\def\next[##1`##2`##3`##4`##5`##6]{%
\def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}%
\def\noded{##4}\def\nodee{##5}\def\nodef{##6}}%
@@ -912,26 +988,26 @@
\def\labeld{##4}\def\labele{##5}\def\labelf{##6}\def\labelg{##7}}%
\next[#9]%
\def\next/##1`##2`##3`##4`##5`##6`##7/{%
- \ifx\zc\empty\relax\morphism(\xpos,\ypos)<\deltaX,0>[0`\noded;]\fi
- \advance\xpos by\deltaX
+ \ifx\zc\empty\relax\morphism(\xpos,\ypos)<\deltaX,0>[0`\noded;]\fi%
+ \advance\xpos by\deltaX%
\morphism(\xpos,\ypos)|\xc|/##3/<\deltax,0>[\noded`\nodee;\labelc]%
- \advance\xpos by \deltax
+ \advance\xpos by \deltax%
\morphism(\xpos,\ypos)|\xd|/##4/<\deltax,0>[\nodee`\nodef;\labeld]%
- \advance\xpos by \deltax
- \ifx\zd\empty\relax \morphism(\xpos,\ypos)<\deltaX,0>[\nodef`0;]\fi
+ \advance\xpos by \deltax%
+ \ifx\zd\empty\relax \morphism(\xpos,\ypos)<\deltaX,0>[\nodef`0;]\fi%
\advance\xpos by -\deltaX \advance\xpos by -\deltax
\advance\xpos by -\deltax \advance\ypos by \deltay
- \ifx\za\empty\relax\morphism(\xpos,\ypos)<\deltaX,0>[0`\nodea;]\fi
- \advance\xpos by\deltaX
+ \ifx\za\empty\relax\morphism(\xpos,\ypos)<\deltaX,0>[0`\nodea;]\fi%
+ \advance\xpos by\deltaX%
\morphism(\xpos,\ypos)|\xa|/##1/<\deltax,0>[\nodea`\nodeb;\labela]%
\morphism(\xpos,\ypos)|\xe|/##5/<0,-\deltay>[\nodea`\noded;\labele]%
- \advance\xpos by \deltax
+ \advance\xpos by \deltax%
\morphism(\xpos,\ypos)|\xb|/##2/<\deltax,0>[\nodeb`\nodec;\labelb]%
\morphism(\xpos,\ypos)|\xf|/##6/<0,-\deltay>[\nodeb`\nodee;\labelf]%
- \advance\xpos by \deltax
+ \advance\xpos by \deltax%
\morphism(\xpos,\ypos)|\xg|/##7/<0,-\deltay>[\nodec`\nodef;\labelg]%
\ifx\zb\empty\relax \morphism(\xpos,\ypos)<\deltaX,0>[\nodec`0;]\fi}%
- \next/#4/\ignorespaces}
+ \next/#4/\ignorespaces}%
\def\iiixii{\ifnextchar({\iiixiip}{\iiixiip(0,0)}}%
@@ -946,7 +1022,128 @@
<#4>{0}<0>}{\iiixiippppp(#1)|#2|/#3/<#4>}}%
\def\iiixiippppp(#1)|#2|/#3/<#4>#5{\ifnextchar<%
{\iiixiipppppp(#1)|#2|/#3/<#4>{#5}}%
- {\iiixiipppppp(#1)|#2|/#3/<#4>{#5}<0>}}%
+ {\iiixiipppppp(#1)|#2|/#3/<#4>{#5}<400>}}%
+
+\def\node#1(#2,#3)[#4]{%
+\expandafter\gdef\csname x@#1\endcsname{#2}%
+\expandafter\gdef\csname y@#1\endcsname{#3}%
+\expandafter\gdef\csname ob@#1\endcsname{#4}%
+\ignorespaces}%
+
+\newcount\xfinish%
+\newcount\yfinish%
+\def\arrow{\ifnextchar|{\arrowp}{\arrowp|a|}}%
+\def\arrowp|#1|{\ifnextchar/{\arrowpp|#1|}{\arrowpp|#1|/>/}}%
+\def\arrowpp|#1|/#2/[#3`#4;#5]{%
+\xfinish=\csname x@#4\endcsname%
+\yfinish=\csname y@#4\endcsname%
+\advance\xfinish by -\csname x@#3\endcsname%
+\advance\yfinish by -\csname y@#3\endcsname%
+\morphism(\csname x@#3\endcsname,\csname y@#3\endcsname)|#1|/{#2}/%
+<\xfinish,\yfinish>[\csname ob@#3\endcsname`\csname ob@#4\endcsname;#5]%
+}%
+
+
+\def\Loop(#1,#2)#3(#4,#5){\POS(#1,#2)*+!!<0ex,\axis>{#3}\ar@(#4,#5)}%
+\def\iloop#1(#2,#3){\xy\Loop(0,0)#1(#2,#3)\endxy}%
+
\catcode`\@=\atcode%
-\endinput
+\endinput%
+\entrymodifiers={+!!<0pt,\fontdimen22\textfont2>}%
+
+
+
+ the \xybox does not allow control over *where*,%
+inside the <object> that it builds,%
+the reference point is to be located.%
+
+Accordingly, I've just devised a variant that builds%
+the same kind of compound <object>, but also sets%
+its reference-point to be at the <coord> of the%
+last <POS> within the box; i.e., the <coord> for%
+the <object> that has been built is at the current%
+<POS> when the Xy-pic parsing has been completed.%
+The LRUD extents are the size of the complete box;%
+i.e., *not* the extents of the final <POS>.%
+
+Here is coding that should go in your document's%
+preamble -- eventually it should be added to xy.tex%
+
+
+
+--------- start of new Xy-pic definitions -------%
+
+
+> \makeatletter % adjust the \catcode of @%
+
+ this is a better definition for the new \xyobjbox%
+
+ \xydef@\xyobjbox#1{\xy%
+ \let \PATHafterPOS\PATHafterPOS@default%
+ \let \arsavedPATHafterPOS@@\relax%
+ \let\afterar@@\relax%
+ \POS#1\endxyobj\Edge@c={\rectangleEdge}\computeLeftUpness@}%
+
+> \xydef@\endxyobj{\if\inxy@\else\xyerror@{Unexpected \string\endxy}{}\fi%
+> \relax%
+> \dimen@=\Y@max \advance\dimen@-\Y@min%
+> \ifdim\dimen@<\z@ \dimen@=\z@ \Y@min=\z@ \Y@max=\z@ \fi%
+> \dimen@=\X@max \advance\dimen@-\X@min%
+> \ifdim\dimen@<\z@ \dimen@=\z@ \X@min=\z@ \X@max=\z@ \fi%
+> \edef\tmp@{\egroup%
+> \setboxz@h{\kern-\the\X@min \boxz@}%
+> \ht\z@=\the\Y@max \dp\z@=-\the\Y@min \wdz@=\the\dimen@%
+> \noexpand\maybeunraise@ \raise\dimen@\boxz@%
+> \noexpand\recoverXyStyle@ \egroup \noexpand\xy@end%
+> \U@c=\the\Y@max \advance\U@c-\the\Y@c%
+> \D@c=-\the\Y@min \advance\D@c\the\Y@c%
+> \L@c=-\the\X@min \advance\L@c\the\X@c%
+> \R@c=\the\X@max \advance\R@c-\the\X@c%
+> }\tmp@}%
+>%
+> \makeatother % revert \catcode of @%
+>%
+> --------- end of new Xy-pic definitions -------%
+\makeatletter%
+\gdef\xymerge@MinMax{}%
+\xydef@\twocell{\hbox\bgroup\xysave@MinMax\@twocell}%
+\xydef@\uppertwocell{\hbox\bgroup\xysave@MinMax\@uppertwocell}%
+\xydef@\lowertwocell{\hbox\bgroup\xysave@MinMax\@lowertwocell}%
+\xydef@\compositemap{\hbox\bgroup\xysave@MinMax\@compositemap}%
+\xydef@\twocelll#1#{\hbox\bgroup\xysave@MinMax\xy@\save\save@\@twocelll{%
+#1}}%
+
+\xydef@\xysave@MinMax{\xdef\xymerge@MinMax{%
+ \noexpand\ifdim\X@max<\the\X@max \X@max=\the\X@max\noexpand\fi%
+ \noexpand\ifdim\X@min>\the\X@min \X@min=\the\X@min\noexpand\fi%
+ \noexpand\ifdim\Y@max<\the\Y@max \Y@max=\the\Y@max\noexpand\fi%
+ \noexpand\ifdim\Y@min>\the\Y@min \Y@min=\the\Y@min\noexpand\fi%
+ }}%
+\xydef@\drop@Twocell{\boxz@ \xymerge@MinMax}%
+
+
+\xydef@\twocell@DONE{%
+ \edef\tmp@{\egroup%
+ \X@min=\the\X@min \X@max=\the\X@max%
+ \Y@min=\the\Y@min \Y@max=\the\Y@max}\tmp@%
+ \L@c=\X@c \advance\L@c-\X@min \R@c=\X@max \advance\R@c-\X@c%
+ \D@c=\Y@c \advance\D@c-\Y@min \U@c=\Y@max \advance\U@c-\Y@c%
+ \ht\z@=\U@c \dp\z@=\D@c \dimen@=\L@c \advance\dimen@\R@c \wdz@=\dimen@%
+ \computeLeftUpness@%
+ \setboxz@h{\kern-\X@p \raise-\Y@c\boxz@ }%
+ \dimen@=\L@c \advance\dimen@\R@c \wdz@=\dimen@ \ht\z@=\U@c \dp\z@=\D@c%
+ \Edge@c={\rectangleEdge}\Invisible@false \Hidden@false%
+ \edef\Drop@@{\noexpand\drop@Twocell%
+ \noexpand\def\noexpand\Leftness@{\Leftness@}%
+ \noexpand\def\noexpand\Upness@{\Upness@}}%
+ \edef\Connect@@{\noexpand\connect@Twocell%
+ \noexpand\ifdim\X@max<\the\X@max \X@max=\the\X@max\noexpand\fi%
+ \noexpand\ifdim\X@min>\the\X@min \X@min=\the\X@min\noexpand\fi%
+ \noexpand\ifdim\Y@max<\the\Y@max \Y@max=\the\Y@max\noexpand\fi%
+ \noexpand\ifdim\Y@min>\the\Y@min \Y@min=\the\Y@min\noexpand\fi }%
+ \xymerge@MinMax%
+}%
+\makeatother%
+
+
diff --git a/Master/texmf-dist/tex/latex/barr/diagram.tex b/Master/texmf-dist/tex/latex/barr/diagram.tex
deleted file mode 100644
index 2a322759d3b..00000000000
--- a/Master/texmf-dist/tex/latex/barr/diagram.tex
+++ /dev/null
@@ -1,1048 +0,0 @@
-% This should appear in a file named diagram.tex
-% Copyright 1988,1989 Michael Barr
-% Department of Mathematics and Statistics
-% McGill University
-% 805 Sherbrooke St., W
-% Montreal, Quebec, Canada
-% H3P 1S4
-%
-% barr@triples.math.mcgill.ca
-%
-% All commercial rights reserved. May be freely distributed
-% and used with the following exceptions:
-% 1. No commercial use without explicit permission.
-% 2. It may not be used by any employee of a telephone
-% company.
-% 3. It may not be distributed without this notice.
-%
-% Last revised 91-05-04
-
-% Ascii character test:
-% 32: 33: ! 34: " 35: # 36: $ 37: % 38: & 39: '
-% 40: ( 41: ) 42: * 43: + 44: , 45: - 46: . 47: /
-% 48: 0 49: 1 50: 2 51: 3 52: 4 53: 5 54: 6 55: 7
-% 56: 8 57: 9 58: : 59: ; 60: < 61: = 62: > 63: ?
-% 64: @ 65: A 66: B 67: C 68: D 69: E 70: F 71: G
-% 72: H 73: I 74: J 75: K 76: L 77: M 78: N 79: O
-% 80: P 81: Q 82: R 83: S 84: T 85: U 86: V 87: W
-% 88: X 89: Y 90: Z 91: [ 92: \ 93: ] 94: ^ 95: _
-% 96: ` 97: a 98: b 99: c 100: d 101: e 102: f 103: g
-% 104: h 105: i 106: j 107: k 108: l 109: m 110: n 111: o
-% 112: p 113: q 114: r 115: s 116: t 117: u 118: v 119: w
-% 120: x 121: y 122: z 123: { 124: | 125: } 126: ~
-
-
-\makeatletter
-
-\def\diagram{\m@th\leftwidth=\z@ \rightwidth=\z@ \topheight=\z@
-\botheight=\z@ \setbox\@picbox\hbox\bgroup}
-
-\def\enddiagram{\egroup\wd\@picbox\rightwidth\unitlength
-\ht\@picbox\topheight\unitlength \dp\@picbox\botheight\unitlength
-\hskip\leftwidth\unitlength\box\@picbox}
-
-\def\bfig{\begin{diagram}}
-\def\efig{\end{diagram}}
-\newcount\wideness \newcount\leftwidth \newcount\rightwidth
-\newcount\highness \newcount\topheight \newcount\botheight
-
-\def\ratchet#1#2{\ifnum#1<#2 \global #1=#2 \fi}
-
-\def\putbox(#1,#2)#3{%
-\horsize{\wideness}{#3} \divide\wideness by 2
-{\advance\wideness by #1 \ratchet{\rightwidth}{\wideness}}
-{\advance\wideness by -#1 \ratchet{\leftwidth}{\wideness}}
-\vertsize{\highness}{#3} \divide\highness by 2
-{\advance\highness by #2 \ratchet{\topheight}{\highness}}
-{\advance\highness by -#2 \ratchet{\botheight}{\highness}}
-\put(#1,#2){\makebox(0,0){$#3$}}}
-
-\def\putlbox(#1,#2)#3{%
-\horsize{\wideness}{#3}
-{\advance\wideness by #1 \ratchet{\rightwidth}{\wideness}}
-{\ratchet{\leftwidth}{-#1}}
-\vertsize{\highness}{#3} \divide\highness by 2
-{\advance\highness by #2 \ratchet{\topheight}{\highness}}
-{\advance\highness by -#2 \ratchet{\botheight}{\highness}}
-\put(#1,#2){\makebox(0,0)[l]{$#3$}}}
-
-\def\putrbox(#1,#2)#3{%
-\horsize{\wideness}{#3}
-{\ratchet{\rightwidth}{#1}}
-{\advance\wideness by -#1 \ratchet{\leftwidth}{\wideness}}
-\vertsize{\highness}{#3} \divide\highness by 2
-{\advance\highness by #2 \ratchet{\topheight}{\highness}}
-{\advance\highness by -#2 \ratchet{\botheight}{\highness}}
-\put(#1,#2){\makebox(0,0)[r]{$#3$}}}
-
-
-\def\adjust[#1]{} % For compatibility
-
-\newcount \coefa
-\newcount \coefb
-\newcount \coefc
-\newcount\tempcounta
-\newcount\tempcountb
-\newcount\tempcountc
-\newcount\tempcountd
-\newcount\xext
-\newcount\yext
-\newcount\xoff
-\newcount\yoff
-\newcount\gap%
-\newcount\arrowtypea
-\newcount\arrowtypeb
-\newcount\arrowtypec
-\newcount\arrowtyped
-\newcount\arrowtypee
-\newcount\height
-\newcount\width
-\newcount\xpos
-\newcount\ypos
-\newcount\run
-\newcount\rise
-\newcount\arrowlength
-\newcount\halflength
-\newcount\arrowtype
-\newdimen\tempdimen
-\newdimen\xlen
-\newdimen\ylen
-\newsavebox{\tempboxa}%
-\newsavebox{\tempboxb}%
-\newsavebox{\tempboxc}%
-
-\newdimen\w@dth
-
-\def\setw@dth#1#2{\setbox\z@\hbox{\m@th$#1$}\w@dth=\wd\z@
-\setbox\@ne\hbox{\m@th$#2$}\ifnum\w@dth<\wd\@ne \w@dth=\wd\@ne \fi
-\advance\w@dth by 1.2em}
-
-%The definitions below look more elaborate than they need to be.
-%The reason is that an empty asscript will still cause extra vertical
-%spacing and the only way to avoid ugly extra space seems to be using
-%some such method as this.
-
-\def\t@^#1_#2{\allowbreak\def\n@one{#1}\def\n@two{#2}\mathrel
-{\setw@dth{#1}{#2}
-\mathop{\hbox to \w@dth{\rightarrowfill}}\limits
-\ifx\n@one\empty\else ^{\box\z@}\fi
-\ifx\n@two\empty\else _{\box\@ne}\fi}}
-%\def\t@^#1_#2{\mathrel{\mathop{\hbox{\rightarrowfill}}\limits
-%^{\mkern12mu#1\mkern12mu}_{\mkern12mu#2\mkern12mu}}}
-\def\t@@^#1{\@ifnextchar_{\t@^{#1}}{\t@^{#1}_{}}}
-\def\to{\@ifnextchar^{\t@@}{\t@@^{}}}
-
-\def\t@left^#1_#2{\def\n@one{#1}\def\n@two{#2}\mathrel{\setw@dth{#1}{#2}
-\mathop{\hbox to \w@dth{\leftarrowfill}}\limits
-\ifx\n@one\empty\else ^{\box\z@}\fi
-\ifx\n@two\empty\else _{\box\@ne}\fi}}
-%\def\t@left^#1_#2{\mathrel{\mathop{\hbox{\leftarrowfill}}\limits
-%^{\mkern12mu#1\mkern12mu}_{\mkern12mu#2\mkern12mu}}}
-\def\t@@left^#1{\@ifnextchar_{\t@left^{#1}}{\t@left^{#1}_{}}}
-\def\toleft{\@ifnextchar^{\t@@left}{\t@@left^{}}}
-
-\def\two@^#1_#2{\allowbreak
-\def\n@one{#1}\def\n@two{#2}\mathrel{\setw@dth{#1}{#2}
-\mathop{\vcenter{\lineskip\z@\baselineskip\z@
- \hbox to \w@dth{\rightarrowfill}%
- \hbox to \w@dth{\rightarrowfill}}%
- }\limits
-\ifx\n@one\empty\else ^{\box\z@}\fi
-\ifx\n@two\empty\else _{\box\@ne}\fi}}
-\def\tw@@^#1{\@ifnextchar _{\two@^{#1}}{\two@^{#1}_{}}}
-\def\two{\@ifnextchar ^{\tw@@}{\tw@@^{}}}
-
-\def\tofr@^#1_#2{\def\n@one{#1}\def\n@two{#2}\mathrel{\setw@dth{#1}{#2}
-\mathop{\vcenter{\hbox to \w@dth{\rightarrowfill}\kern-1.7ex
- \hbox to \w@dth{\leftarrowfill}}%
- }\limits
-\ifx\n@one\empty\else ^{\box\z@}\fi
-\ifx\n@two\empty\else _{\box\@ne}\fi}}
-\def\t@fr@^#1{\@ifnextchar_ {\tofr@^{#1}}{\tofr@^{#1}_{}}}
-\def\tofro{\@ifnextchar^ {\t@fr@}{\t@fr@^{}}}
-
-\def\epi{\mathop{\mathchar"221\mkern -12mu\mathchar"221}\limits}
-\def\leftepi{\mathop{\mathchar"220\mkern -12mu\mathchar"220}\limits}
-\def\mon{\mathop{\m@th\hbox to
- 14.6\P@{\lasyb\char'51\hskip-2.1\P@$\arrext$\hss
-$\mathord\rightarrow$}}\limits} % width of \epi
-\def\leftmono{\mathrel{\m@th\hbox to
-14.6\P@{$\mathord\leftarrow$\hss$\arrext$\hskip-2.1\P@\lasyb\char'50%
-}}\limits} % width of \epi
-\mathchardef\arrext="0200 % amr minus for arrow extension (see \into)
-
-
-\setlength{\unitlength}{.01em}%
-\def\settypes(#1,#2,#3){\arrowtypea#1 \arrowtypeb#2 \arrowtypec#3}
-\def\settoheight#1#2{\setbox\@tempboxa\hbox{#2}#1\ht\@tempboxa\relax}%
-\def\settodepth#1#2{\setbox\@tempboxa\hbox{#2}#1\dp\@tempboxa\relax}%
-\def\settokens`#1`#2`#3`#4`{%
- \def\tokena{#1}\def\tokenb{#2}\def\tokenc{#3}\def\tokend{#4}}
-\def\setsqparms[#1`#2`#3`#4;#5`#6]{%
-\arrowtypea #1
-\arrowtypeb #2
-\arrowtypec #3
-\arrowtyped #4
-\width #5
-\height #6
-}
-\def\setpos(#1,#2){\xpos=#1 \ypos#2}
-
-
-
-\def\settriparms[#1`#2`#3;#4]{\settripairparms[#1`#2`#3`1`1;#4]}%
-
-\def\settripairparms[#1`#2`#3`#4`#5;#6]{%
-\arrowtypea #1
-\arrowtypeb #2
-\arrowtypec #3
-\arrowtyped #4
-\arrowtypee #5
-\width #6
-\height #6
-}
-
-\def\resetparms{\settripairparms[1`1`1`1`1;500]\width 500}%default values%
-
-\resetparms
-
-\def\mvector(#1,#2)#3{%%
-\put(0,0){\vector(#1,#2){#3}}%
-\put(0,0){\vector(#1,#2){26}}%
-}
-\def\evector(#1,#2)#3{{%%
-\arrowlength #3
-\put(0,0){\vector(#1,#2){\arrowlength}}%
-\advance \arrowlength by-30
-\put(0,0){\vector(#1,#2){\arrowlength}}%
-}}
-
-\def\horsize#1#2{%
-\settowidth{\tempdimen}{$#2$}%
-#1=\tempdimen
-\divide #1 by\unitlength
-}
-
-\def\vertsize#1#2{%
-\settoheight{\tempdimen}{$#2$}%
-#1=\tempdimen
-\settodepth{\tempdimen}{$#2$}%
-\advance #1 by\tempdimen
-\divide #1 by\unitlength
-}
-
-\def\putvector(#1,#2)(#3,#4)#5#6{{%
-\ifnum3<\arrowtype
-\putdashvector(#1,#2)(#3,#4)#5\arrowtype
-\else
-\ifnum\arrowtype<-3
-\putdashvector(#1,#2)(#3,#4)#5\arrowtype
-\else
-\xpos=#1
-\ypos=#2
-\run=#3
-\rise=#4
-\arrowlength=#5
-\ifnum \arrowtype<0
- \ifnum \run=0
- \advance \ypos by-\arrowlength
- \else
- \tempcounta \arrowlength
- \multiply \tempcounta by\rise
- \divide \tempcounta by\run
- \ifnum\run>0
- \advance \xpos by\arrowlength
- \advance \ypos by\tempcounta
- \else
- \advance \xpos by-\arrowlength
- \advance \ypos by-\tempcounta
- \fi
- \fi
- \multiply \arrowtype by-1
- \multiply \rise by-1
- \multiply \run by-1
-\fi
-\ifcase \arrowtype
-\or \put(\xpos,\ypos){\vector(\run,\rise){\arrowlength}}%
-\or \put(\xpos,\ypos){\mvector(\run,\rise)\arrowlength}%
-\or \put(\xpos,\ypos){\evector(\run,\rise){\arrowlength}}%
-\fi\fi\fi
-}}
-
-\def\putsplitvector(#1,#2)#3#4{%%
-\xpos #1
-\ypos #2
-\arrowtype #4
-\halflength #3
-\arrowlength #3
-\gap 140
-\advance \halflength by-\gap
-\divide \halflength by2
-\ifnum\arrowtype>0
- \ifcase \arrowtype
- \or \put(\xpos,\ypos){\line(0,-1){\halflength}}%
- \advance\ypos by-\halflength
- \advance\ypos by-\gap
- \put(\xpos,\ypos){\vector(0,-1){\halflength}}%
- \or \put(\xpos,\ypos){\line(0,-1)\halflength}%
- \put(\xpos,\ypos){\vector(0,-1)3}%
- \advance\ypos by-\halflength
- \advance\ypos by-\gap
- \put(\xpos,\ypos){\vector(0,-1){\halflength}}%
- \or \put(\xpos,\ypos){\line(0,-1)\halflength}%
- \advance\ypos by-\halflength
- \advance\ypos by-\gap
- \put(\xpos,\ypos){\evector(0,-1){\halflength}}%
- \fi
-\else \arrowtype=-\arrowtype
- \ifcase\arrowtype
- \or \advance \ypos by-\arrowlength
- \put(\xpos,\ypos){\line(0,1){\halflength}}%
- \advance\ypos by\halflength
- \advance\ypos by\gap
- \put(\xpos,\ypos){\vector(0,1){\halflength}}%
- \or \advance \ypos by-\arrowlength
- \put(\xpos,\ypos){\line(0,1)\halflength}%
- \put(\xpos,\ypos){\vector(0,1)3}%
- \advance\ypos by\halflength
- \advance\ypos by\gap
- \put(\xpos,\ypos){\vector(0,1){\halflength}}%
- \or \advance \ypos by-\arrowlength
- \put(\xpos,\ypos){\line(0,1)\halflength}%
- \advance\ypos by\halflength
- \advance\ypos by\gap
- \put(\xpos,\ypos){\evector(0,1){\halflength}}%
- \fi
-\fi
-}
-
-\def\putmorphism(#1)(#2,#3)[#4`#5`#6]#7#8#9{{%
-\run #2
-\rise #3
-\ifnum\rise=0
- \puthmorphism(#1)[#4`#5`#6]{#7}{#8}#9%
-\else\ifnum\run=0
- \putvmorphism(#1)[#4`#5`#6]{#7}{#8}#9%
-\else
-\setpos(#1)%
-\arrowlength #7
-\arrowtype #8
-\ifnum\run=0
-\else\ifnum\rise=0
-\else
-\ifnum\run>0
- \coefa=1
-\else
- \coefa=-1
-\fi
-\ifnum\arrowtype>0
- \coefb=0
- \coefc=-1
-\else
- \coefb=\coefa
- \coefc=1
- \arrowtype=-\arrowtype
-\fi
-\width=2
-\multiply \width by\run
-\divide \width by\rise
-\ifnum \width<0 \width=-\width\fi
-\advance\width by60
-\if l#9 \width=-\width\fi
-\putbox(\xpos,\ypos){#4}% %node 1
-{\multiply \coefa by\arrowlength% %node 2
-\advance\xpos by\coefa
-\multiply \coefa by\rise
-\divide \coefa by\run
-\advance \ypos by\coefa
-\putbox(\xpos,\ypos){#5} }%
-{\multiply \coefa by\arrowlength% %label
-\divide \coefa by2
-\advance \xpos by\coefa
-\advance \xpos by\width
-\multiply \coefa by\rise
-\divide \coefa by\run
-\advance \ypos by\coefa
-\if l#9%
- \putrbox(\xpos,\ypos){#6}%
-\else\if r#9%
- \putlbox(\xpos,\ypos){#6}%
-\fi\fi }%
-{\multiply \rise by-\coefc% %arrow
-\multiply \run by-\coefc
-\multiply \coefb by\arrowlength
-\advance \xpos by\coefb
-\multiply \coefb by\rise
-\divide \coefb by\run
-\advance \ypos by\coefb
-\multiply \coefc by70
-\advance \ypos by\coefc
-\multiply \coefc by\run
-\divide \coefc by\rise
-\advance \xpos by\coefc
-\multiply \coefa by140
-\multiply \coefa by\run
-\divide \coefa by\rise
-\advance \arrowlength by\coefa
-\ifcase\arrowtype
-\or \put(\xpos,\ypos){\vector(\run,\rise){\arrowlength}}%
-\or \put(\xpos,\ypos){\mvector(\run,\rise){\arrowlength}}%
-\or \put(\xpos,\ypos){\evector(\run,\rise){\arrowlength}}%
-\fi}\fi\fi\fi\fi}}
-
-
-\newcount\numbdashes \newcount\lengthdash \newcount\increment
-
-\def\howmanydashes{% Actually returns both number and length
-\numbdashes=\arrowlength \lengthdash=40
-\divide\numbdashes by \lengthdash
-\lengthdash=\arrowlength
-\divide\lengthdash by \numbdashes
-%This futzing around is to minimize round-off error.
-\increment=\lengthdash
-\multiply\lengthdash by 3
-\divide\lengthdash by 5
-}
-
-\def\putdashvector(#1)(#2,#3)#4#5{%
-\ifnum#3=0 \putdashhvector(#1){#4}#5
-\else
-\ifnum#2=0
-\putdashvvector(#1){#4}#5\fi\fi}
-
-\def\putdashhvector(#1,#2)#3#4{{%
-\arrowlength=#3 \howmanydashes
-\multiput(#1,#2)(\increment,0){\numbdashes}%
-{\vrule height .4pt width \lengthdash\unitlength}
-\arrowtype=#4 \xpos=#1
-\ifnum\arrowtype<0 \advance\arrowtype by 7 \fi
-\ifcase\arrowtype
-\or \advance\xpos by 10
- \put(\xpos,#2){\vector(-1,0){\lengthdash}}
- \advance\xpos by 40
- \put(\xpos,#2){\vector(-1,0){\lengthdash}}
-\or \advance \xpos by 10
- \put(\xpos,#2){\vector(-1,0){\lengthdash}}
- \advance\xpos by \arrowlength
- \advance\xpos by -50
- \put(\xpos,#2){\vector(-1,0){\lengthdash}}
-\or \advance\xpos by 10
- \put(\xpos,#2){\vector(-1,0){\lengthdash}}
-\or \advance\xpos by \arrowlength
- \advance\xpos by -\lengthdash
- \put(\xpos,#2){\vector(1,0){\lengthdash}}
-\or {\advance\xpos by 10
- \put(\xpos,#2){\vector(1,0){\lengthdash}}}
- \advance\xpos by \arrowlength
- \advance\xpos by -\lengthdash
- \put(\xpos,#2){\vector(1,0){\lengthdash}}
-\or \advance\xpos by \arrowlength
- \advance\xpos by -\lengthdash
- \put(\xpos,#2){\vector(1,0){\lengthdash}}
- \advance\xpos by -40
- \put(\xpos,#2){\vector(1,0){\lengthdash}}
- \fi
-}}
-
-\def\putdashvvector(#1,#2)#3#4{{%
-\arrowlength=#3 \howmanydashes
-\ypos=#2 \advance\ypos by -\arrowlength
-\multiput(#1,#2)(0,\increment){\numbdashes}%
- {\vrule width .4pt height \lengthdash\unitlength}
-\arrowtype=#4 \ypos=#2
-\ifnum\arrowtype<0 \advance\arrowtype by 7 \fi
-\ifcase\arrowtype
-\or \advance\ypos by \arrowlength \advance\ypos by -40
- \put(#1,\ypos){\vector(0,1){\lengthdash}}
- \advance\ypos by -40
- \put(#1,\ypos){\vector(0,1){\lengthdash}}
-\or \advance\ypos by 10
- \put(#1,\ypos){\vector(0,1){\lengthdash}}
- \advance\ypos by \arrowlength \advance\ypos by -40
- \put(#1,\ypos){\vector(0,1){\lengthdash}}
-\or \advance\ypos by \arrowlength \advance\ypos by -40
- \put(#1,\ypos){\vector(0,1){\lengthdash}}
-\or \advance\ypos by 10
- \put(#1,\ypos){\vector(0,-1){\lengthdash}}
-\or \advance\ypos by 10
- \put(#1,\ypos){\vector(0,-1){\lengthdash}}
- \advance\ypos by \arrowlength \advance\ypos by -40
- \put(#1,\ypos){\vector(0,-1){\lengthdash}}
-\or \advance\ypos by 10
- \put(#1,\ypos){\vector(0,-1){\lengthdash}}
- \advance\ypos by 40
- \put(#1,\ypos){\vector(0,-1){\lengthdash}}
-\fi
-}}
-
-\def\puthmorphism(#1,#2)[#3`#4`#5]#6#7#8{{%
-\xpos #1
-\ypos #2
-\width #6
-\arrowlength #6
-\arrowtype=#7
-\putbox(\xpos,\ypos){#3\vphantom{#4}}%
-{\advance \xpos by\arrowlength
-\putbox(\xpos,\ypos){\vphantom{#3}#4}}%
-\horsize{\tempcounta}{#3}%
-\horsize{\tempcountb}{#4}%
-\divide \tempcounta by2
-\divide \tempcountb by2
-\advance \tempcounta by30
-\advance \tempcountb by30
-\advance \xpos by\tempcounta
-\advance \arrowlength by-\tempcounta
-\advance \arrowlength by-\tempcountb
-\putvector(\xpos,\ypos)(1,0)\arrowlength\arrowtype
-\divide \arrowlength by2
-\advance \xpos by\arrowlength
-\vertsize{\tempcounta}{#5}%
-\divide\tempcounta by2
-\advance \tempcounta by20
-\if a#8 %
- \advance \ypos by\tempcounta
- \putbox(\xpos,\ypos){#5}%
-\else
- \advance \ypos by-\tempcounta
- \putbox(\xpos,\ypos){#5}%
-\fi}}
-
-\def\putvmorphism(#1,#2)[#3`#4`#5]#6#7#8{{%
-\xpos #1
-\ypos #2
-\arrowlength #6
-\arrowtype #7
-\settowidth{\xlen}{$#5$}%
-\putbox(\xpos,\ypos){#3}%
-{\advance \ypos by-\arrowlength
-\putbox(\xpos,\ypos){#4}}%
-{\advance\arrowlength by-140
-\advance \ypos by-70
-\ifdim\xlen>0pt
- \if m#8%
- \putsplitvector(\xpos,\ypos)\arrowlength\arrowtype
- \else
- \putvector(\xpos,\ypos)(0,-1)\arrowlength\arrowtype
- \fi
-\else
- \putvector(\xpos,\ypos)(0,-1)\arrowlength\arrowtype
-\fi}%
-\ifdim\xlen>0pt
- \divide \arrowlength by2
- \advance\ypos by-\arrowlength
- \if l#8%
- \advance \xpos by-40
- \putrbox(\xpos,\ypos){#5}%
- \else\if r#8%
- \advance \xpos by40
- \putlbox(\xpos,\ypos){#5}%
- \else
- \putbox(\xpos,\ypos){#5}%
- \fi\fi
-\fi
-}}
-
-\def\putsquarep<#1>(#2)[#3;#4`#5`#6`#7]{{%
-\setsqparms[#1]%
-\setpos(#2)%
-\settokens`#3`%
-\puthmorphism(\xpos,\ypos)[\tokenc`\tokend`{#7}]{\width}{\arrowtyped}b%
-\advance\ypos by \height
-\puthmorphism(\xpos,\ypos)[\tokena`\tokenb`{#4}]{\width}{\arrowtypea}a%
-\putvmorphism(\xpos,\ypos)[``{#5}]{\height}{\arrowtypeb}l%
-\advance\xpos by \width
-\putvmorphism(\xpos,\ypos)[``{#6}]{\height}{\arrowtypec}r%
-}}
-
-\def\putsquare{\@ifnextchar <{\putsquarep}{\putsquarep%
- <\arrowtypea`\arrowtypeb`\arrowtypec`\arrowtyped;\width`\height>}}
-\def\square{\@ifnextchar< {\squarep}{\squarep
- <\arrowtypea`\arrowtypeb`\arrowtypec`\arrowtyped;\width`\height>}}
- % #6
-\def\squarep<#1>[#2`#3`#4`#5;#6`#7`#8`#9]{{% % #2------>#3
-\setsqparms[#1]% % | |
-\diagram% % | |
-\putsquarep<\arrowtypea`\arrowtypeb`\arrowtypec`% % #7| |#8
-\arrowtyped;\width`\height>% % | |
-(0,0)[#2`#3`#4`{#5};#6`#7`#8`{#9}]% % | |
-\enddiagram% % v v
-}} % #4------>#5
- % #9
-\def\putptrianglep<#1>(#2,#3)[#4`#5`#6;#7`#8`#9]{{%
-\settriparms[#1]%
-\xpos=#2 \ypos=#3
-\advance\ypos by \height
-\puthmorphism(\xpos,\ypos)[#4`#5`{#7}]{\height}{\arrowtypea}a%
-\putvmorphism(\xpos,\ypos)[`#6`{#8}]{\height}{\arrowtypeb}l%
-\advance\xpos by\height
-\putmorphism(\xpos,\ypos)(-1,-1)[``{#9}]{\height}{\arrowtypec}r%
-}}
-
-\def\putptriangle{\@ifnextchar <{\putptrianglep}{\putptrianglep
- <\arrowtypea`\arrowtypeb`\arrowtypec;\height>}}
-\def\ptriangle{\@ifnextchar <{\ptrianglep}{\ptrianglep
- <\arrowtypea`\arrowtypeb`\arrowtypec;\height>}}
- % #5
-\def\ptrianglep<#1>[#2`#3`#4;#5`#6`#7]{{%% % #2----->#3
-\settriparms[#1]% % | /
-\diagram% % | /
-\putptrianglep<\arrowtypea`\arrowtypeb`% % #6| /#7
-\arrowtypec;\height>% % | /
-(0,0)[#2`#3`#4;#5`#6`{#7}]% % | /
-\enddiagram%% % v v
-}} % #4
-
-\def\putqtrianglep<#1>(#2,#3)[#4`#5`#6;#7`#8`#9]{{%
-\settriparms[#1]%
-\xpos=#2 \ypos=#3
-\advance\ypos by\height
-\puthmorphism(\xpos,\ypos)[#4`#5`{#7}]{\height}{\arrowtypea}a%
-\putmorphism(\xpos,\ypos)(1,-1)[``{#8}]{\height}{\arrowtypeb}l%
-\advance\xpos by\height
-\putvmorphism(\xpos,\ypos)[`#6`{#9}]{\height}{\arrowtypec}r%
-}}
-
-\def\putqtriangle{\@ifnextchar <{\putqtrianglep}{\putqtrianglep
- <\arrowtypea`\arrowtypeb`\arrowtypec;\height>}}
-\def\qtriangle{\@ifnextchar <{\qtrianglep}{\qtrianglep
- <\arrowtypea`\arrowtypeb`\arrowtypec;\height>}}
- % #5
-\def\qtrianglep<#1>[#2`#3`#4;#5`#6`#7]{{%% % #2----->#3
-\settriparms[#1]% % \ |
-\width=\height % \ |
-\diagram% % #6\ |#7
-\putqtrianglep<\arrowtypea`\arrowtypeb`% % \ |
-\arrowtypec;\height>% % \ |
-(0,0)[#2`#3`#4;#5`#6`{#7}]% % v v
-\enddiagram%% % #4
-}}
-
-\def\putdtrianglep<#1>(#2,#3)[#4`#5`#6;#7`#8`#9]{{%
-\settriparms[#1]%
-\xpos=#2 \ypos=#3
-\puthmorphism(\xpos,\ypos)[#5`#6`{#9}]{\height}{\arrowtypec}b%
-\advance\xpos by \height \advance\ypos by\height
-\putmorphism(\xpos,\ypos)(-1,-1)[``{#7}]{\height}{\arrowtypea}l%
-\putvmorphism(\xpos,\ypos)[#4``{#8}]{\height}{\arrowtypeb}r%
-}}
-
-\def\putdtriangle{\@ifnextchar <{\putdtrianglep}{\putdtrianglep
- <\arrowtypea`\arrowtypeb`\arrowtypec;\height>}}
-\def\dtriangle{\@ifnextchar <{\dtrianglep}{\dtrianglep
- <\arrowtypea`\arrowtypeb`\arrowtypec;\height>}}
- % #2
-\def\dtrianglep<#1>[#2`#3`#4;#5`#6`#7]{{%% % / |
-\settriparms[#1]% % / |
-\width=\height % #5/ |#6
-\diagram% % / |
-\putdtrianglep<\arrowtypea`\arrowtypeb`% % / |
-\arrowtypec;\height>% % v v
-(0,0)[#2`#3`#4;#5`#6`{#7}]% % #3----->#4
-\enddiagram%% % #7
-}}
-
-\def\putbtrianglep<#1>(#2,#3)[#4`#5`#6;#7`#8`#9]{{%
-\settriparms[#1]%
-\xpos=#2 \ypos=#3
-\puthmorphism(\xpos,\ypos)[#5`#6`{#9}]{\height}{\arrowtypec}b%
-\advance\ypos by\height
-\putmorphism(\xpos,\ypos)(1,-1)[``{#8}]{\height}{\arrowtypeb}r%
-\putvmorphism(\xpos,\ypos)[#4``{#7}]{\height}{\arrowtypea}l%
-}}
-
-\def\putbtriangle{\@ifnextchar <{\putbtrianglep}{\putbtrianglep
- <\arrowtypea`\arrowtypeb`\arrowtypec;\height>}}
-\def\btriangle{\@ifnextchar <{\btrianglep}{\btrianglep
- <\arrowtypea`\arrowtypeb`\arrowtypec;\height>}}
- % #2
-\def\btrianglep<#1>[#2`#3`#4;#5`#6`#7]{{%% % | \
-\settriparms[#1]% % | \
-\width=\height % #5| \#6
-\diagram% % | \
-\putbtrianglep<\arrowtypea`\arrowtypeb`% % | \
-\arrowtypec;\height>% % v v
-(0,0)[#2`#3`#4;#5`#6`{#7}]% % #3----->#4
-\enddiagram%% % #7
-}}
-
-\def\putAtrianglep<#1>(#2,#3)[#4`#5`#6;#7`#8`#9]{{%
-\settriparms[#1]%
-\xpos=#2 \ypos=#3
-{\multiply \height by2
-\puthmorphism(\xpos,\ypos)[#5`#6`{#9}]{\height}{\arrowtypec}b}%
-\advance\xpos by\height \advance\ypos by\height
-\putmorphism(\xpos,\ypos)(-1,-1)[#4``{#7}]{\height}{\arrowtypea}l%
-\putmorphism(\xpos,\ypos)(1,-1)[``{#8}]{\height}{\arrowtypeb}r%
-}}
-
-\def\putAtriangle{\@ifnextchar <{\putAtrianglep}{\putAtrianglep
- <\arrowtypea`\arrowtypeb`\arrowtypec;\height>}}
-\def\Atriangle{\@ifnextchar <{\Atrianglep}{\Atrianglep
- <\arrowtypea`\arrowtypeb`\arrowtypec;\height>}}
- % #2
-\def\Atrianglep<#1>[#2`#3`#4;#5`#6`#7]{{%% % / \
-\settriparms[#1]% % / \
-\width=\height % #5/ \#6
-\diagram% % / \
-\putAtrianglep<\arrowtypea`\arrowtypeb`% % / \
-\arrowtypec;\height>% % v v
-(0,0)[#2`#3`#4;#5`#6`{#7}]% % #3------------>#4
-\enddiagram%% % #7
-}}
-
-\def\putAtrianglepairp<#1>(#2)[#3;#4`#5`#6`#7`#8]{{%
-\settripairparms[#1]%
-\setpos(#2)%
-\settokens`#3`%
-\puthmorphism(\xpos,\ypos)[\tokenb`\tokenc`{#7}]{\height}{\arrowtyped}b%
-\advance\xpos by\height
-\puthmorphism(\xpos,\ypos)[\phantom{\tokenc}`\tokend`{#8}]%
-{\height}{\arrowtypee}b%
-\advance\ypos by\height
-\putmorphism(\xpos,\ypos)(-1,-1)[\tokena``{#4}]{\height}{\arrowtypea}l%
-\putvmorphism(\xpos,\ypos)[``{#5}]{\height}{\arrowtypeb}m%
-\putmorphism(\xpos,\ypos)(1,-1)[``{#6}]{\height}{\arrowtypec}r%
-}}
-
-\def\putAtrianglepair{\@ifnextchar <{\putAtrianglepairp}{\putAtrianglepairp%
- <\arrowtypea`\arrowtypeb`\arrowtypec`\arrowtyped`\arrowtypee;\height>}}
-\def\Atrianglepair{\@ifnextchar <{\Atrianglepairp}{\Atrianglepairp%
- <\arrowtypea`\arrowtypeb`\arrowtypec`\arrowtyped`\arrowtypee;\height>}}
-
-\def\Atrianglepairp<#1>[#2;#3`#4`#5`#6`#7]{{% % #2a
-\settripairparms[#1]% % / | \
-\settokens`#2`% % / | \
-\width=\height % #3/ #4 \#5
-\diagram% % / | \
-\putAtrianglepairp % / | \
-<\arrowtypea`\arrowtypeb`\arrowtypec`% % v v v
-\arrowtyped`\arrowtypee;\height>% % #2b---->#2c---->#2d
-(0,0)[{#2};#3`#4`#5`#6`{#7}]% % #6 #7
-\enddiagram%%
-}}
-
-\def\putVtrianglep<#1>(#2,#3)[#4`#5`#6;#7`#8`#9]{{%
-\settriparms[#1]%
-\xpos=#2 \ypos=#3
-\advance\ypos by\height
-{\multiply\height by2
-\puthmorphism(\xpos,\ypos)[#4`#5`{#7}]{\height}{\arrowtypea}a}%
-\putmorphism(\xpos,\ypos)(1,-1)[`#6`{#8}]{\height}{\arrowtypeb}l%
-\advance\xpos by\height
-\advance\xpos by\height
-\putmorphism(\xpos,\ypos)(-1,-1)[``{#9}]{\height}{\arrowtypec}r%
-}}
-
-\def\putVtriangle{\@ifnextchar <{\putVtrianglep}{\putVtrianglep
- <\arrowtypea`\arrowtypeb`\arrowtypec;\height>}}
-\def\Vtriangle{\@ifnextchar <{\Vtrianglep}{\Vtrianglep
- <\arrowtypea`\arrowtypeb`\arrowtypec;\height>}}
- % #5
-\def\Vtrianglep<#1>[#2`#3`#4;#5`#6`#7]{{%% % #2------------->#3
-\settriparms[#1]% % \ /
-\width=\height % \ /
-\diagram% % #6\ /#7
-\putVtrianglep<\arrowtypea`\arrowtypeb`% % \ /
-\arrowtypec;\height>% % \ /
-(0,0)[#2`#3`#4;#5`#6`{#7}]% % v v
-\enddiagram%% % #4
-}}
-
-\def\putVtrianglepairp<#1>(#2)[#3;#4`#5`#6`#7`#8]{{
-\settripairparms[#1]%
-\setpos(#2)%
-\settokens`#3`%
-\advance\ypos by\height
-\putmorphism(\xpos,\ypos)(1,-1)[`\tokend`{#6}]{\height}{\arrowtypec}l%
-\puthmorphism(\xpos,\ypos)[\tokena`\tokenb`{#4}]{\height}{\arrowtypea}a%
-\advance\xpos by\height
-\puthmorphism(\xpos,\ypos)[\phantom{\tokenb}`\tokenc`{#5}]%
-{\height}{\arrowtypeb}a%
-\putvmorphism(\xpos,\ypos)[``{#7}]{\height}{\arrowtyped}m%
-\advance\xpos by\height
-\putmorphism(\xpos,\ypos)(-1,-1)[``{#8}]{\height}{\arrowtypee}r%
-}}
-
-\def\putVtrianglepair{\@ifnextchar <{\putVtrianglepairp}{\putVtrianglepairp%
- <\arrowtypea`\arrowtypeb`\arrowtypec`\arrowtyped`\arrowtypee;\height>}}
-\def\Vtrianglepair{\@ifnextchar <{\Vtrianglepairp}{\Vtrianglepairp%
- <\arrowtypea`\arrowtypeb`\arrowtypec`\arrowtyped`\arrowtypee;\height>}}
- % #3 #4
-\def\Vtrianglepairp<#1>[#2;#3`#4`#5`#6`#7]{{% % #2a---->#2b---->#2c
-\settripairparms[#1]% % \ | /
-\settokens`#2`% % \ | /
-\diagram% % #5\ #6 /#7
-\putVtrianglepairp % \ | /
-<\arrowtypea`\arrowtypeb`\arrowtypec`% % \ | /
-\arrowtyped`\arrowtypee;\height>% % v v v
-(0,0)[{#2};#3`#4`#5`#6`{#7}]% % #2d
-\enddiagram%%
-}}
-
-
-\def\putCtrianglep<#1>(#2,#3)[#4`#5`#6;#7`#8`#9]{{%
-\settriparms[#1]%
-\xpos=#2 \ypos=#3
-\advance\ypos by\height
-\putmorphism(\xpos,\ypos)(1,-1)[``{#9}]{\height}{\arrowtypec}l%
-\advance\xpos by\height
-\advance\ypos by\height
-\putmorphism(\xpos,\ypos)(-1,-1)[#4`#5`{#7}]{\height}{\arrowtypea}l%
-{\multiply\height by 2
-\putvmorphism(\xpos,\ypos)[`#6`{#8}]{\height}{\arrowtypeb}r}%
-}}
-
-\def\putCtriangle{\@ifnextchar <{\putCtrianglep}{\putCtrianglep
- <\arrowtypea`\arrowtypeb`\arrowtypec;\height>}}
-\def\Ctriangle{\@ifnextchar <{\Ctrianglep}{\Ctrianglep
- <\arrowtypea`\arrowtypeb`\arrowtypec;\height>}}
- % #2
-\def\Ctrianglep<#1>[#2`#3`#4;#5`#6`#7]{{%% % / |
-\settriparms[#1]% % #5/ |
-\width=\height % / |
-\diagram% % v |
-\putCtrianglep<\arrowtypea`\arrowtypeb`% % #3 |#6
-\arrowtypec;\height>% % \ |
-(0,0)[#2`#3`#4;#5`#6`{#7}]% % #7\ |
-\enddiagram%% % \ |
-}} % v v
- % #4
-\def\putDtrianglep<#1>(#2,#3)[#4`#5`#6;#7`#8`#9]{{%
-\settriparms[#1]%
-\xpos=#2 \ypos=#3
-\advance\xpos by\height \advance\ypos by\height
-\putmorphism(\xpos,\ypos)(-1,-1)[``{#9}]{\height}{\arrowtypec}r%
-\advance\xpos by-\height \advance\ypos by\height
-\putmorphism(\xpos,\ypos)(1,-1)[`#5`{#8}]{\height}{\arrowtypeb}r%
-{\multiply\height by 2
-\putvmorphism(\xpos,\ypos)[#4`#6`{#7}]{\height}{\arrowtypea}l}%
-}}
-
-\def\putDtriangle{\@ifnextchar <{\putDtrianglep}{\putDtrianglep
- <\arrowtypea`\arrowtypeb`\arrowtypec;\height>}}
-\def\Dtriangle{\@ifnextchar <{\Dtrianglep}{\Dtrianglep
- <\arrowtypea`\arrowtypeb`\arrowtypec;\height>}}
- % #2
-\def\Dtrianglep<#1>[#2`#3`#4;#5`#6`#7]{{%% % | \
-\settriparms[#1]% % | \#6
-\width=\height % | \
-\diagram% % | v
-\putDtrianglep<\arrowtypea`\arrowtypeb`% % #5| #3
-\arrowtypec;\height>% % | /
-(0,0)[#2`#3`#4;#5`#6`{#7}]% % | /#7
-\enddiagram%% % | /
-}} % v v
- % #4
-\def\setrecparms[#1`#2]{\width=#1 \height=#2}%
-% #4
-% #3b<-------#3a x #3b
-% ^ | |
-% / | |
-% #5/ | |
-% / | |
-% / | |
-% / | |
-% #3c |#6 |#3a x #5
-% \ | |
-% \ | |
-% #8\ | |
-% \ | |
-% \ | |
-% v v v
-% #3d<-------#3a x #3d
-% #8
-
-\def\recursep<#1`#2>[#3;#4`#5`#6`#7`#8]{{\m@th
-\width=#1 \height=#2
-\settokens`#3`
-\settowidth{\tempdimen}{$\tokena$}
-\ifdim\tempdimen=0pt
- \savebox{\tempboxa}{\hbox{$\tokenb$}}%
- \savebox{\tempboxb}{\hbox{$\tokend$}}%
- \savebox{\tempboxc}{\hbox{$#6$}}%
-\else
- \savebox{\tempboxa}{\hbox{$\hbox{$\tokena$}\times\hbox{$\tokenb$}$}}%
- \savebox{\tempboxb}{\hbox{$\hbox{$\tokena$}\times\hbox{$\tokend$}$}}%
- \savebox{\tempboxc}{\hbox{$\hbox{$\tokena$}\times\hbox{$#6$}$}}%
-\fi
-\ypos=\height
-\divide\ypos by 2
-\xpos=\ypos
-\advance\xpos by \width
-\bfig
-\putCtrianglep<-1`1`1;\ypos>(0,0)[`\tokenc`;#5`#6`{#7}]%
-\puthmorphism(\ypos,0)[\tokend`\usebox{\tempboxb}`{#8}]{\width}{-1}b%
-\puthmorphism(\ypos,\height)[\tokenb`\usebox{\tempboxa}`{#4}]{\width}{-1}a%
-\advance\ypos by \width
-\putvmorphism(\ypos,\height)[``\usebox{\tempboxc}]{\height}1r%
-\efig
-}}
-
-\def\recurse{\@ifnextchar <{\recursep}{\recursep<\width`\height>}}
-
-\def\puttwohmorphisms(#1,#2)[#3`#4;#5`#6]#7#8#9{{%
-% 1 and 2 are position, 3 and 4 are the nodes, 5 and 6 the labels,
-% 7 the distance between node centers and 8 & 9 are the arrow types.
-% #5
-% #3 ===========> #4
-% #6
-%
-\puthmorphism(#1,#2)[#3`#4`]{#7}0a
-\ypos=#2
-\advance\ypos by 20
-\puthmorphism(#1,\ypos)[\phantom{#3}`\phantom{#4}`#5]{#7}{#8}a
-\advance\ypos by -40
-\puthmorphism(#1,\ypos)[\phantom{#3}`\phantom{#4}`#6]{#7}{#9}b
-}}
-
-\def\puttwovmorphisms(#1,#2)[#3`#4;#5`#6]#7#8#9{{%
-% 1 and 2 are position, 3 and 4 are the nodes, 5 and 6 the labels,
-% 7 the distance between node centers and 8 & 9 are the arrow types.
-%
-% #3
-% ||
-% ||
-% #5 || #6
-% ||
-% ||
-% vv
-% #4
-%
-\putvmorphism(#1,#2)[#3`#4`]{#7}0a
-\xpos=#1
-\advance\xpos by -20
-\putvmorphism(\xpos,#2)[\phantom{#3}`\phantom{#4}`#5]{#7}{#8}l
-\advance\xpos by 40
-\putvmorphism(\xpos,#2)[\phantom{#3}`\phantom{#4}`#6]{#7}{#9}r
-}}
-
-\def\puthcoequalizer(#1)[#2`#3`#4;#5`#6`#7]#8#9{{%
-% #1 is (\xpos,\ypos), the next 6 are the nodes and arrow labels
-% #8 is the distance between each pair of nodes and #9 is the pos of #7
-% either a (above) or b (below)
-% #5 #7
-% #2 ===========> #3 --------> #4
-% #6
-%
-\setpos(#1)%
-\puttwohmorphisms(\xpos,\ypos)[#2`#3;#5`#6]{#8}11%
-\advance\xpos by #8
-\puthmorphism(\xpos,\ypos)[\phantom{#3}`#4`#7]{#8}1{#9}
-}}
-
-\def\putvcoequalizer(#1)[#2`#3`#4;#5`#6`#7]#8#9{{%
-% #1 is (\xpos,\ypos), the next 6 are the nodes and arrow labels
-% #8 is the distance between each pair of nodes and #9 is the pos of #7
-% either l (left) or r (right)
-%
-% #2
-% | |
-% | |
-% #5 | | #6
-% | |
-% | |
-% v v
-% #3
-% |
-% |
-% #7 |
-% |
-% v
-% #4
-%
-\setpos(#1)%
-\puttwovmorphisms(\xpos,\ypos)[#2`#3;#5`#6]{#8}11%
-\advance\ypos by -#8
-\putvmorphism(\xpos,\ypos)[\phantom{#3}`#4`#7]{#8}1{#9}
-}}
-
-\def\putthreehmorphisms(#1)[#2`#3;#4`#5`#6]#7(#8)#9{{%
-% Use: \putthreehmorphisms(xpos,ypos)[lnode`rnode;toplabel`midlabel%
-% botlabel]{distance}(toparrowtype,midarrowtype,botarrowtype){position}
-\setpos(#1) \settypes(#8)
-\if a#9 %
- \vertsize{\tempcounta}{#5}%
- \vertsize{\tempcountb}{#6}%
- \ifnum \tempcounta<\tempcountb \tempcounta=\tempcountb \fi
-\else
- \vertsize{\tempcounta}{#4}%
- \vertsize{\tempcountb}{#5}%
- \ifnum \tempcounta<\tempcountb \tempcounta=\tempcountb \fi
-\fi
-\advance \tempcounta by 60
-\puthmorphism(\xpos,\ypos)[#2`#3`#5]{#7}{\arrowtypeb}{#9}
-\advance\ypos by \tempcounta
-\puthmorphism(\xpos,\ypos)[\phantom{#2}`\phantom{#3}`#4]{#7}{\arrowtypea}{#9}
-\advance\ypos by -\tempcounta \advance\ypos by -\tempcounta
-\puthmorphism(\xpos,\ypos)[\phantom{#2}`\phantom{#3}`#6]{#7}{\arrowtypec}{#9}
-}}
-
-\def\setarrowtoks[#1`#2`#3`#4`#5`#6]{%
-\def\toka{#1}
-\def\tokb{#2}
-\def\tokc{#3}
-\def\tokd{#4}
-\def\toke{#5}
-\def\tokf{#6}
-}
-\def\hex{\@ifnextchar <{\hexp}{\hexp<1000`400>}}
-\def\hexp<#1`#2>[#3`#4`#5`#6`#7`#8;#9]{%
-\setarrowtoks[#9]
-\yext=#2 \advance \yext by #2
-\xext=#1 \advance\xext by \yext
-\bfig
-\putCtriangle<-1`0`1;#2>(0,0)[`#5`;\tokb``\tokd]
-\xext=#1 \yext=#2 \advance \yext by #2
-\putsquare<1`0`0`1;\xext`\yext>(#2,0)[#3`#4`#7`#8;\toka```\tokf]
-\advance \xext by #2
-\putDtriangle<0`1`-1;#2>(\xext,0)[`#6`;`\tokc`\toke]
-\efig
-}
-%\def\doublecomplex[#1`#2`#3`#4`#5`#6`#7`#8`#9]{%
-%\bfig
-%\putsquare<0`0`1`1;500`500>(0,1700)[`\vdots`\cdots`{#1};```]
-%\puthmorphism(500,1700)[\ph{#1}`\cdots`]{500}1a
-%\puthmorphism(1000,1700)[\ph{\cdots}`\ph{#2}`]{500}1a
-%\putsquare<0`1`1`1;700`500>(1500,1700)[\vdots`\vdots`{#2}`{#3};```]
-%\puthmorphism(2200,1700)[\ph{#3}`0`]{500}1a
-%\putvmorphism(500,1700)[`\vdots`]{400}1a \putvmorphism(500,1300)[``]{400}1a
-%\putvmorphism(1500,1700)[`\vdots`]{400}1a \putvmorphism(1500,1300)[``]{400}1a
-%\putvmorphism(2200,1700)[`\vdots`]{400}1a \putvmorphism(2200,1300)[``]{400}1a
-%\putsquare<1`0`1`1;500`500>(0,400)[\cdots`{#4}`\cdots`{#7};```]
-%\puthmorphism(500,900)[\ph{#1}`\cdots`]{500}1a
-%\puthmorphism(1000,900)[\ph{\cdots}`\ph{#2}`]{500}1a
-%\puthmorphism(500,400)[\ph{#1}`\cdots`]{500}1a
-%\puthmorphism(1000,400)[\ph{\cdots}`\ph{#2}`]{500}1a
-%\putsquare<1`1`1`1;700`500>(1500,400)[{#5}`{#6}`{#8}`{#9};```]
-%\puthmorphism(2200,900)[\ph{#6}`0`]{500}1a
-%\puthmorphism(2200,400)[\ph{#9}`0`]{500}1a
-%\putvmorphism(500,400)[`0`]{400}1a
-%\putvmorphism(1500,400)[`0`]{400}1a
-%\putvmorphism(2200,400)[`0`]{400}1a
-%\efig
-%}
-%
-%\def\doublecocomplex[#1`#2`#3`#4`#5`#6`#7`#8`#9]{%
-%\bfig
-%\putsquare<0`0`-1`-1;500`500>(0,1700)[`\vdots`\cdots`{#1};```]
-%\puthmorphism(500,1700)[\ph{#1}`\cdots`]{500}{-1}a
-%\puthmorphism(1000,1700)[\ph{\cdots}`\ph{#2}`]{500}{-1}a
-%\putsquare<0`-1`-1`-1;500`500>(1500,1700)[\vdots`\vdots`{#2}`{#3};```]
-%\puthmorphism(2000,1700)[\ph{#3}`0`]{500}{-1}a
-%\putvmorphism(500,1700)[`\vdots`]{400}{-1}a \putvmorphism(500,1300)[``]{400}{-1}a
-%\putvmorphism(1500,1700)[`\vdots`]{400}{-1}a \putvmorphism(1500,1300)[``]{400}{-1}a
-%\putvmorphism(2000,1700)[`\vdots`]{400}{-1}a \putvmorphism(2000,1300)[``]{400}{-1}a
-%\putsquare<-1`0`-1`-1;500`500>(0,400)[\cdots`{#4}`\cdots`{#7};```]
-%\puthmorphism(500,900)[\ph{#1}`\cdots`]{500}{-1}a
-%\puthmorphism(1000,900)[\ph{\cdots}`\ph{#2}`]{500}{-1}a
-%\puthmorphism(500,400)[\ph{#1}`\cdots`]{500}{-1}a
-%\puthmorphism(1000,400)[\ph{\cdots}`\ph{#2}`]{500}{-1}a
-%\putsquare<-1`-1`-1`-1;500`500>(1500,400)[{#5}`{#6}`{#8}`{#9};```]
-%\puthmorphism(2000,900)[\ph{#6}`0`]{500}{-1}a
-%\puthmorphism(2000,400)[\ph{#9}`0`]{500}{-1}a
-%\putvmorphism(500,400)[`0`]{400}{-1}a
-%\putvmorphism(1500,400)[`0`]{400}{-1}a
-%\putvmorphism(2000,400)[`0`]{400}{-1}a
-%\efig
-%}
-\makeatother