diff options
author | Karl Berry <karl@freefriends.org> | 2006-01-12 23:51:54 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2006-01-12 23:51:54 +0000 |
commit | 5a275789faf2cac524744b203794259d7b974c36 (patch) | |
tree | 9f8fb2c5fb5badff5c185d0d164bead31ca8fb65 /Master | |
parent | c11a98e10de0410a50337e5ab4e3b63b210eec13 (diff) |
barr
git-svn-id: svn://tug.org/texlive/trunk@693 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master')
-rw-r--r-- | Master/texmf-dist/tex/latex/barr/diagram.tex | 1048 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/barr/diagxy.tex | 952 |
2 files changed, 2000 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/barr/diagram.tex b/Master/texmf-dist/tex/latex/barr/diagram.tex new file mode 100644 index 00000000000..2a322759d3b --- /dev/null +++ b/Master/texmf-dist/tex/latex/barr/diagram.tex @@ -0,0 +1,1048 @@ +% 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 diff --git a/Master/texmf-dist/tex/latex/barr/diagxy.tex b/Master/texmf-dist/tex/latex/barr/diagxy.tex new file mode 100644 index 00000000000..5fc36e7cf54 --- /dev/null +++ b/Master/texmf-dist/tex/latex/barr/diagxy.tex @@ -0,0 +1,952 @@ + \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. + +\input xy +\xyoption{arrow} + +\newdir{ >}{{ }*!/-9pt/@{>}} +\newdir{ (}{{ }*!/-5pt/@{(}} +\newdir^{ (}{{ }*!/-5pt/@^{(}} +\newdir{< }{!/9pt/@{<}*{ }} + +\newbox\Label% +\newdimen\high% +\newdimen\deep% +\newdimen\ul% +\newcount\deltax% +\newcount\deltay% +\newcount\deltaX% +\newcount\deltaY% + +\newdimen\wdth +\newcount\xend% +\newcount\yend% +\newcount\Xend +\newcount\Yend +\newcount\xpos% +\newcount\ypos% +\newcount\default \default=500% +\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 + \@tempc\@ifnch}% +\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\:{\@xifnch} \expandafter\def\: {\futurelet\@tempc\@ifnch}% +\else +\let\ifnextchar\@ifnextchar +\fi +\ul=.01em% +\X@xbase =.01em% +\Y@ybase =.01em% +\def\scalefactor#1{\ul=#1\ul \X@xbase=#1\X@xbase \Y@ybase=#1\Y@ybase}% +\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 +\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} + +\let\bfig\xy% +\let\efig\endxy% + +\def\car#1#2\nil{#1}% + +\def\morphism{\ifnextchar({\morphismp}{\morphismp(0,0)}}% +\def\morphismp(#1){\ifnextchar|{\morphismpp(#1)}{\morphismpp(#1)|a|}}% +\def\morphismpp(#1)|#2|{\ifnextchar/{\morphismppp(#1)|#2|}% + {\morphismppp(#1)|#2|/>/}}% +\def\morphismppp(#1)|#2|/#3/{% + \ifnextchar<{\morphismpppp(#1)|#2|/#3/}% + {\morphismpppp(#1)|#2|/#3/<\default,0>}}% + +\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]} + +\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 + \if#3l% + \ifnum #6>0% + \POS(#1,#2)*+!!<0ex,.75ex>{#7}\ar#4^-{#9} (\xend,\yend)*+!!<0ex,.75ex>{#8}% + \else% + \POS(#1,#2)*+!!<0ex,.75ex>{#7}\ar#4_-{#9} (\xend,\yend)*+!!<0ex,.75ex>{#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 + \else \if#3r% + \ifnum #6<0% + \POS(#1,#2)*+!!<0ex,.75ex>{#7}\ar#4^-{#9} (\xend,\yend)*+!!<0ex,.75ex>{#8}% + \else% + \POS(#1,#2)*+!!<0ex,.75ex>{#7}\ar#4_-{#9} (\xend,\yend)*+!!<0ex,.75ex>{#8}% + \fi% + \else \if#3a% + \ifnum #5>0% + \POS(#1,#2)*+!!<0ex,.75ex>{#7}\ar#4^-{#9} (\xend,\yend)*+!!<0ex,.75ex>{#8}% + \else% + \POS(#1,#2)*+!!<0ex,.75ex>{#7}\ar#4_-{#9} (\xend,\yend)*+!!<0ex,.75ex>{#8}% + \fi% + \else \if#3b% + \ifnum #5<0% + \POS(#1,#2)*+!!<0ex,.75ex>{#7}\ar#4^-{#9} (\xend,\yend)*+!!<0ex,.75ex>{#8}% + \else% + \POS(#1,#2)*+!!<0ex,.75ex>{#7}\ar#4_-{#9} (\xend,\yend)*+!!<0ex,.75ex>{#8}% + \fi% + \else + \POS(#1,#2)*+!!<0ex,.75ex>{#7}\ar#4 (\xend,\yend)*+!!<0ex,.75ex>{#8}% + \fi\fi\fi\fi\fi% +\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% + \ifnum #6>0% + \POS(#1,#2)*+!!<0ex,.75ex>{#7}\ar@{#4}^-{#9} (\xend,\yend)*+!!<0ex,.75ex>{#8}% + \else% + \POS(#1,#2)*+!!<0ex,.75ex>{#7}\ar@{#4}_-{#9} (\xend,\yend)*+!!<0ex,.75ex>{#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 + \else \if#3r% + \ifnum #6<0% + \POS(#1,#2)*+!!<0ex,.75ex>{#7}\ar@{#4}^-{#9} (\xend,\yend)*+!!<0ex,.75ex>{#8}% + \else% + \POS(#1,#2)*+!!<0ex,.75ex>{#7}\ar@{#4}_-{#9} (\xend,\yend)*+!!<0ex,.75ex>{#8}% + \fi% + \else \if#3a% + \ifnum #5>0% + \POS(#1,#2)*+!!<0ex,.75ex>{#7}\ar@{#4}^-{#9} (\xend,\yend)*+!!<0ex,.75ex>{#8}% + \else% + \POS(#1,#2)*+!!<0ex,.75ex>{#7}\ar@{#4}_-{#9} (\xend,\yend)*+!!<0ex,.75ex>{#8}% + \fi% + \else \if#3b% + \ifnum #5<0% + \POS(#1,#2)*+!!<0ex,.75ex>{#7}\ar@{#4}^-{#9} (\xend,\yend)*+!!<0ex,.75ex>{#8}% + \else% + \POS(#1,#2)*+!!<0ex,.75ex>{#7}\ar@{#4}_-{#9} (\xend,\yend)*+!!<0ex,.75ex>{#8}% + \fi% + \else + \POS(#1,#2)*+!!<0ex,.75ex>{#7}\ar@{#4} (\xend,\yend)*+!!<0ex,.75ex>{#8}% + \fi\fi\fi\fi\fi\fi\fi% +\fi\ignorespaces}% + +\def\squarepppp(#1,#2)|#3|/#4`#5`#6`#7/<#8>[#9]{% +\xpos#1\ypos#2% +\def\next|##1##2##3##4|{% + \def\xa{##1}\def\xb{##2}\def\xc{##3}\def\xd{##4}\ignorespaces}% +\next|#3|% +\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}% +\next<#8>% +\def\next[##1`##2`##3`##4;##5`##6`##7`##8]{% + \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}\def\noded{##4}% + \def\labela{##5}\def\labelb{##6}\def\labelc{##7}\def\labeld{##8}\ignorespaces}% +\next[#9]% +\morphism(\xpos,\ypos)|\xd|/{#7}/<\deltax,0>[\nodec`\noded;\labeld]% +\advance \ypos by \deltay% +\morphism(\xpos,\ypos)|\xb|/{#5}/<0,-\deltay>[\nodea`\nodec;\labelb]% +\morphism(\xpos,\ypos)|\xa|/{#4}/<\deltax,0>[\nodea`\nodeb;\labela]% + \advance \xpos by \deltax% +\morphism(\xpos,\ypos)|\xc|/{#6}/<0,-\deltay>[\nodeb`\noded;\labelc]% +\ignorespaces}% + +\def\square{\ifnextchar({\squarep}{\squarep(0,0)}}% +\def\squarep(#1){\ifnextchar|{\squarepp(#1)}{\squarepp(#1)|alrb|}}% +\def\squarepp(#1)|#2|{\ifnextchar/{\squareppp(#1)|#2|}% + {\squareppp(#1)|#2|/>`>`>`>/}}% +\def\squareppp(#1)|#2|/#3`#4`#5`#6/{% + \ifnextchar<{\squarepppp(#1)|#2|/#3`#4`#5`#6/}% + {\squarepppp(#1)|#2|/#3`#4`#5`#6/<\default,\default>}}% + +\def\ptrianglepppp(#1,#2)|#3|/#4`#5`#6/<#7>[#8]{% +\xpos#1\ypos#2% +\def\next|##1##2##3|{\def\xa{##1}\def\xb{##2}\def\xc{##3}}% +\next|#3|% +\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}% +\next<#7>% +\def\next[##1`##2`##3;##4`##5`##6]{% + \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}% + \def\labela{##4}\def\labelb{##5}\def\labelc{##6}}% +\next[#8]% +\advance\ypos by \deltay% +\morphism(\xpos,\ypos)|\xa|/{#4}/<\deltax,0>[\nodea`\nodeb;\labela]% +\morphism(\xpos,\ypos)|\xb|/{#5}/<0,-\deltay>[\nodea`\nodec;\labelb]% +\advance\xpos by \deltax% +\morphism(\xpos,\ypos)|\xc|/{#6}/<-\deltax,-\deltay>[\nodeb`\nodec;\labelc]% +\ignorespaces}% + +\def\qtrianglepppp(#1,#2)|#3|/#4`#5`#6/<#7>[#8]{% +\xpos#1\ypos#2% +\def\next|##1##2##3|{\def\xa{##1}\def\xb{##2}\def\xc{##3}}% +\next|#3|% +\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}% +\next<#7>% +\def\next[##1`##2`##3;##4`##5`##6]{% + \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}% + \def\labela{##4}\def\labelb{##5}\def\labelc{##6}}% +\next[#8]% +\advance\ypos by \deltay% +\morphism(\xpos,\ypos)|\xa|/{#4}/<\deltax,0>[\nodea`\nodeb;\labela]% +\morphism(\xpos,\ypos)|\xb|/{#5}/<\deltax,-\deltay>[\nodea`\nodec;\labelb]% +\advance\xpos by \deltax% +\morphism(\xpos,\ypos)|\xc|/{#6}/<0,-\deltay>[\nodeb`\nodec;\labelc]% +\ignorespaces}% + +\def\dtrianglepppp(#1,#2)|#3|/#4`#5`#6/<#7>[#8]{% +\xpos#1\ypos#2% +\def\next|##1##2##3|{\def\xa{##1}\def\xb{##2}\def\xc{##3}}% +\next|#3|% +\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}% +\next<#7>% +\def\next[##1`##2`##3;##4`##5`##6]{% + \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}% + \def\labela{##4}\def\labelb{##5}\def\labelc{##6}}% +\next[#8]% +\morphism(\xpos,\ypos)|\xc|/{#6}/<\deltax,0>[\nodeb`\nodec;\labelc]% +\advance\ypos by \deltay\advance \xpos by \deltax% +\morphism(\xpos,\ypos)|\xa|/{#4}/<-\deltax,-\deltay>[\nodea`\nodeb;\labela]% +\morphism(\xpos,\ypos)|\xb|/{#5}/<0,-\deltay>[\nodea`\nodec;\labelb]% +\ignorespaces}% + +\def\btrianglepppp(#1,#2)|#3|/#4`#5`#6/<#7>[#8]{% +\xpos#1\ypos#2% +\def\next|##1##2##3|{\def\xa{##1}\def\xb{##2}\def\xc{##3}}% +\next|#3|% +\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}% +\next<#7>% +\def\next[##1`##2`##3;##4`##5`##6]{% + \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}% + \def\labela{##4}\def\labelb{##5}\def\labelc{##6}}% +\next[#8]% +\morphism(\xpos,\ypos)|\xc|/{#6}/<\deltax,0>[\nodeb`\nodec;\labelc]% +\advance\ypos by \deltay% +\morphism(\xpos,\ypos)|\xa|/{#4}/<0,-\deltay>[\nodea`\nodeb;\labela]% +\morphism(\xpos,\ypos)|\xb|/{#5}/<\deltax,-\deltay>[\nodea`\nodec;\labelb]% +\ignorespaces}% + +\def\Atrianglepppp(#1,#2)|#3|/#4`#5`#6/<#7>[#8]{% +\xpos#1\ypos#2% +\def\next|##1##2##3|{\def\xa{##1}\def\xb{##2}\def\xc{##3}}% +\next|#3|% +\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}% +\next<#7>% +\def\next[##1`##2`##3;##4`##5`##6]{% + \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}% + \def\labela{##4}\def\labelb{##5}\def\labelc{##6}}% +\next[#8]% +\multiply\deltax by 2% +\morphism(\xpos,\ypos)|\xc|/{#6}/<\deltax,0>[\nodeb`\nodec;\labelc]% +\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]% +\ignorespaces}% + +\def\Vtrianglepppp(#1,#2)|#3|/#4`#5`#6/<#7>[#8]{% +\xpos#1\ypos#2% +\def\next|##1##2##3|{\def\xa{##1}\def\xb{##2}\def\xc{##3}}% +\next|#3|% +\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}% +\next<#7>% +\def\next[##1`##2`##3;##4`##5`##6]{% + \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}% + \def\labela{##4}\def\labelb{##5}\def\labelc{##6}}% +\next[#8]% +\advance\ypos by \deltay% +\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 +\morphism(\xpos,\ypos)|\xc|/{#6}/<-\deltax,-\deltay>[\nodeb`\nodec;\labelc]% +\ignorespaces}% + +\def\Ctrianglepppp(#1,#2)|#3|/#4`#5`#6/<#7>[#8]{% +\xpos#1\ypos#2% +\def\next|##1##2##3|{\def\xa{##1}\def\xb{##2}\def\xc{##3}}% +\next|#3|% +\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}% +\next<#7>% +\def\next[##1`##2`##3;##4`##5`##6]{% + \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}% + \def\labela{##4}\def\labelb{##5}\def\labelc{##6}}% +\next[#8]% +\advance \ypos by \deltay% +\morphism(\xpos,\ypos)|\xc|/{#6}/<\deltax,-\deltay>[\nodeb`\nodec;\labelc]% +\advance\ypos by \deltay \advance \xpos by \deltax% +\morphism(\xpos,\ypos)|\xa|/{#4}/<-\deltax,-\deltay>[\nodea`\nodeb;\labela]% +\multiply\deltay by 2% +\morphism(\xpos,\ypos)|\xb|/{#5}/<0,-\deltay>[\nodea`\nodec;\labelb]% +\ignorespaces}% + +\def\Dtrianglepppp(#1,#2)|#3|/#4`#5`#6/<#7>[#8]{% +\xpos#1\ypos#2% +\def\next|##1##2##3|{\def\xa{##1}\def\xb{##2}\def\xc{##3}}% +\next|#3|% +\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}% +\next<#7>% +\def\next[##1`##2`##3;##4`##5`##6]{% + \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}% + \def\labela{##4}\def\labelb{##5}\def\labelc{##6}}% +\next[#8]% +\advance\xpos by \deltax \advance\ypos by \deltay% +\morphism(\xpos,\ypos)|\xc|/{#6}/<-\deltax,-\deltay>[\nodeb`\nodec;\labelc]% +\advance\xpos by -\deltax \advance\ypos by \deltay% +\morphism(\xpos,\ypos)|\xb|/{#5}/<\deltax,-\deltay>[\nodea`\nodeb;\labelb]% +\multiply \deltay by 2% +\morphism(\xpos,\ypos)|\xa|/{#4}/<0,-\deltay>[\nodea`\nodec;\labela]% +\ignorespaces}% + +\def\ptriangle{\ifnextchar({\ptrianglep}{\ptrianglep(0,0)}}% +\def\ptrianglep(#1){\ifnextchar|{\ptrianglepp(#1)}{\ptrianglepp(#1)|alr|}}% +\def\ptrianglepp(#1)|#2|{\ifnextchar/{\ptriangleppp(#1)|#2|}% + {\ptriangleppp(#1)|#2|/>`>`>/}}% +\def\ptriangleppp(#1)|#2|/#3`#4`#5/{% + \ifnextchar<{\ptrianglepppp(#1)|#2|/#3`#4`#5/}% + {\ptrianglepppp(#1)|#2|/#3`#4`#5/<\default,\default>}}% + +\def\qtriangle{\ifnextchar({\qtrianglep}{\qtrianglep(0,0)}}% +\def\qtrianglep(#1){\ifnextchar|{\qtrianglepp(#1)}{\qtrianglepp(#1)|alr|}}% +\def\qtrianglepp(#1)|#2|{\ifnextchar/{\qtriangleppp(#1)|#2|}% + {\qtriangleppp(#1)|#2|/>`>`>/}}% +\def\qtriangleppp(#1)|#2|/#3`#4`#5/{% + \ifnextchar<{\qtrianglepppp(#1)|#2|/#3`#4`#5/}% + {\qtrianglepppp(#1)|#2|/#3`#4`#5/<\default,\default>}}% + +\def\dtriangle{\ifnextchar({\dtrianglep}{\dtrianglep(0,0)}}% +\def\dtrianglep(#1){\ifnextchar|{\dtrianglepp(#1)}{\dtrianglepp(#1)|lrb|}}% +\def\dtrianglepp(#1)|#2|{\ifnextchar/{\dtriangleppp(#1)|#2|}% + {\dtriangleppp(#1)|#2|/>`>`>/}}% +\def\dtriangleppp(#1)|#2|/#3`#4`#5/{% + \ifnextchar<{\dtrianglepppp(#1)|#2|/#3`#4`#5/}% + {\dtrianglepppp(#1)|#2|/#3`#4`#5/<\default,\default>}}% + +\def\btriangle{\ifnextchar({\btrianglep}{\btrianglep(0,0)}}% +\def\btrianglep(#1){\ifnextchar|{\btrianglepp(#1)}{\btrianglepp(#1)|lrb|}}% +\def\btrianglepp(#1)|#2|{\ifnextchar/{\btriangleppp(#1)|#2|}% + {\btriangleppp(#1)|#2|/>`>`>/}}% +\def\btriangleppp(#1)|#2|/#3`#4`#5/{% + \ifnextchar<{\btrianglepppp(#1)|#2|/#3`#4`#5/}% + {\btrianglepppp(#1)|#2|/#3`#4`#5/<\default,\default>}}% + +\def\Atriangle{\ifnextchar({\Atrianglep}{\Atrianglep(0,0)}}% +\def\Atrianglep(#1){\ifnextchar|{\Atrianglepp(#1)}{\Atrianglepp(#1)|lrb|}}% +\def\Atrianglepp(#1)|#2|{\ifnextchar/{\Atriangleppp(#1)|#2|}% + {\Atriangleppp(#1)|#2|/>`>`>/}}% +\def\Atriangleppp(#1)|#2|/#3`#4`#5/{% + \ifnextchar<{\Atrianglepppp(#1)|#2|/#3`#4`#5/}% + {\Atrianglepppp(#1)|#2|/#3`#4`#5/<\default,\default>}}% + +\def\Vtriangle{\ifnextchar({\Vtrianglep}{\Vtrianglep(0,0)}}% +\def\Vtrianglep(#1){\ifnextchar|{\Vtrianglepp(#1)}{\Vtrianglepp(#1)|alb|}}% +\def\Vtrianglepp(#1)|#2|{\ifnextchar/{\Vtriangleppp(#1)|#2|}% + {\Vtriangleppp(#1)|#2|/>`>`>/}}% +\def\Vtriangleppp(#1)|#2|/#3`#4`#5/{% + \ifnextchar<{\Vtrianglepppp(#1)|#2|/#3`#4`#5/}% + {\Vtrianglepppp(#1)|#2|/#3`#4`#5/<\default,\default>}}% + +\def\Ctriangle{\ifnextchar({\Ctrianglep}{\Ctrianglep(0,0)}}% +\def\Ctrianglep(#1){\ifnextchar|{\Ctrianglepp(#1)}{\Ctrianglepp(#1)|arb|}}% +\def\Ctrianglepp(#1)|#2|{\ifnextchar/{\Ctriangleppp(#1)|#2|}% + {\Ctriangleppp(#1)|#2|/>`>`>/}}% +\def\Ctriangleppp(#1)|#2|/#3`#4`#5/{% + \ifnextchar<{\Ctrianglepppp(#1)|#2|/#3`#4`#5/}% + {\Ctrianglepppp(#1)|#2|/#3`#4`#5/<\default,\default>}}% + +\def\Dtriangle{\ifnextchar({\Dtrianglep}{\Dtrianglep(0,0)}}% +\def\Dtrianglep(#1){\ifnextchar|{\Dtrianglepp(#1)}{\Dtrianglepp(#1)|alb|}}% +\def\Dtrianglepp(#1)|#2|{\ifnextchar/{\Dtriangleppp(#1)|#2|}% + {\Dtriangleppp(#1)|#2|/>`>`>/}}% +\def\Dtriangleppp(#1)|#2|/#3`#4`#5/{% + \ifnextchar<{\Dtrianglepppp(#1)|#2|/#3`#4`#5/}% + {\Dtrianglepppp(#1)|#2|/#3`#4`#5/<\default,\default>}}% + + +\def\Atrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/<#8>[#9]{% +\def\next(##1,##2){\xpos##1\ypos##2}% +\next(#1)% +\def\next|##1##2##3##4##5|{\def\xa{##1}\def\xb{##2}% +\def\xc{##3}\def\xd{##4}\def\xe{##5}}% +\next|#2|% +\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}% +\next<#8>% +\def\next[##1`##2`##3`##4;##5`##6`##7`##8`##9]{% + \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}\def\noded{##4}% + \def\labela{##5}\def\labelb{##6}\def\labelc{##7}\def\labeld{##8}\def\labele{##9}}% +\next[#9]% +\morphism(\xpos,\ypos)|\xd|/{#6}/<\deltax,0>[\nodeb`\nodec;\labeld]% +\advance\xpos by \deltax% +\morphism(\xpos,\ypos)|\xe|/{#7}/<\deltax,0>[\nodec`\noded;\labele]% +\advance\ypos by \deltay% +\morphism(\xpos,\ypos)|\xa|/{#3}/<-\deltax,-\deltay>[\nodea`\nodeb;\labela]% +\morphism(\xpos,\ypos)|\xb|/{#4}/<0,-\deltay>[\nodea`\nodec;\labelb]% +\morphism(\xpos,\ypos)|\xc|/{#5}/<\deltax,-\deltay>[\nodea`\noded;\labelc]% +\ignorespaces}% + +\def\Vtrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/<#8>[#9]{% +\def\next(##1,##2){\xpos##1\ypos##2}% +\next(#1)% +\def\next|##1##2##3##4##5|{\def\xa{##1}\def\xb{##2}% +\def\xc{##3}\def\xd{##4}\def\xe{##5}}% +\next|#2|% +\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}% +\next<#8>% +\def\next[##1`##2`##3`##4;##5`##6`##7`##8`##9]{% + \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}\def\noded{##4}% + \def\labela{##5}\def\labelb{##6}\def\labelc{##7}\def\labeld{##8}\def\labele{##9}}% +\next[#9]% +\advance\ypos by \deltay% +\morphism(\xpos,\ypos)|\xa|/{#3}/<\deltax,0>[\nodea`\nodeb;\labela]% +\morphism(\xpos,\ypos)|\xc|/{#5}/<\deltax,-\deltay>[\nodea`\noded;\labelc]% +\advance\xpos by \deltax% +\morphism(\xpos,\ypos)|\xb|/{#4}/<\deltax,0>[\nodeb`\nodec;\labelb]% +\morphism(\xpos,\ypos)|\xd|/{#6}/<0,-\deltay>[\nodeb`\noded;\labeld]% +\advance\xpos by \deltax% +\morphism(\xpos,\ypos)|\xe|/{#7}/<-\deltax,-\deltay>[\nodec`\noded;\labele]% +\ignorespaces}% + +\def\Ctrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/<#8>[#9]{% +\def\next(##1,##2){\xpos##1\ypos##2}% +\next(#1)% +\def\next|##1##2##3##4##5|{\def\xa{##1}\def\xb{##2}% +\def\xc{##3}\def\xd{##4}\def\xe{##5}}% +\next|#2|% +\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}% +\next<#8>% +\def\next[##1`##2`##3`##4;##5`##6`##7`##8`##9]{% + \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}\def\noded{##4}% + \def\labela{##5}\def\labelb{##6}\def\labelc{##7}\def\labeld{##8}\def\labele{##9}}% +\next[#9]% +\advance\ypos by \deltay% +\morphism(\xpos,\ypos)|\xe|/{#7}/<0,-\deltay>[\nodec`\noded;\labele]% +\advance\xpos by -\deltax% +\morphism(\xpos,\ypos)|\xc|/{#5}/<\deltax,0>[\nodeb`\nodec;\labelc]% +\morphism(\xpos,\ypos)|\xd|/{#6}/<\deltax,-\deltay>[\nodeb`\noded;\labeld]% +\advance\ypos by \deltay% +\advance\xpos by \deltax% +\morphism(\xpos,\ypos)|\xa|/{#3}/<-\deltax,-\deltay>[\nodea`\nodeb;\labela]% +\morphism(\xpos,\ypos)|\xb|/{#4}/<0,-\deltay>[\nodea`\nodec;\labelb]% +\ignorespaces}% + +\def\Dtrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/<#8>[#9]{% +\def\next(##1,##2){\xpos##1\ypos##2}% +\next(#1)% +\def\next|##1##2##3##4##5|{\def\xa{##1}\def\xb{##2}% +\def\xc{##3}\def\xd{##4}\def\xe{##5}}% +\next|#2|% +\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}% +\next<#8>% +\def\next[##1`##2`##3`##4;##5`##6`##7`##8`##9]{% + \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}\def\noded{##4}% + \def\labela{##5}\def\labelb{##6}\def\labelc{##7}\def\labeld{##8}\def\labele{##9}}% +\next[#9]% +\advance\ypos by \deltay% +\morphism(\xpos,\ypos)|\xc|/{#5}/<\deltax,0>[\nodeb`\nodec;\labelc]% +\morphism(\xpos,\ypos)|\xd|/{#6}/<0,-\deltay>[\nodeb`\noded;\labeld]% +\advance\ypos by \deltay% +\morphism(\xpos,\ypos)|\xa|/{#3}/<0,-\deltay>[\nodea`\nodeb;\labela]% +\morphism(\xpos,\ypos)|\xb|/{#4}/<\deltax,-\deltay>[\nodea`\nodec;\labelb]% +\advance\ypos by -\deltay% +\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|}}% +\def\Atrianglepairpp(#1)|#2|{\ifnextchar/{\Atrianglepairppp(#1)|#2|}% + {\Atrianglepairppp(#1)|#2|/>`>`>`>`>/}}% +\def\Atrianglepairppp(#1)|#2|/#3`#4`#5`#6`#7/{% + \ifnextchar<{\Atrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/}% + {\Atrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/<\default,\default>}}% + +\def\Vtrianglepair{\ifnextchar({\Vtrianglepairp}{\Vtrianglepairp(0,0)}}% +\def\Vtrianglepairp(#1){\ifnextchar|{\Vtrianglepairpp(#1)}% +{\Vtrianglepairpp(#1)|aalmr|}}% +\def\Vtrianglepairpp(#1)|#2|{\ifnextchar/{\Vtrianglepairppp(#1)|#2|}% + {\Vtrianglepairppp(#1)|#2|/>`>`>`>`>/}}% +\def\Vtrianglepairppp(#1)|#2|/#3`#4`#5`#6`#7/{% + \ifnextchar<{\Vtrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/}% + {\Vtrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/<\default,\default>}}% + +\def\Ctrianglepair{\ifnextchar({\Ctrianglepairp}{\Ctrianglepairp(0,0)}}% +\def\Ctrianglepairp(#1){\ifnextchar|{\Ctrianglepairpp(#1)}% +{\Ctrianglepairpp(#1)|lrmlr|}}% +\def\Ctrianglepairpp(#1)|#2|{\ifnextchar/{\Ctrianglepairppp(#1)|#2|}% + {\Ctrianglepairppp(#1)|#2|/>`>`>`>`>/}}% +\def\Ctrianglepairppp(#1)|#2|/#3`#4`#5`#6`#7/{% + \ifnextchar<{\Ctrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/}% + {\Ctrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/<\default,\default>}}% + +\def\Dtrianglepair{\ifnextchar({\Dtrianglepairp}{\Dtrianglepairp(0,0)}}% +\def\Dtrianglepairp(#1){\ifnextchar|{\Dtrianglepairpp(#1)}% +{\Dtrianglepairpp(#1)|lrmlr|}}% +\def\Dtrianglepairpp(#1)|#2|{\ifnextchar/{\Dtrianglepairppp(#1)|#2|}% + {\Dtrianglepairppp(#1)|#2|/>`>`>`>`>/}}% +\def\Dtrianglepairppp(#1)|#2|/#3`#4`#5`#6`#7/{% + \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\pullback#1]#2]{\square#1]\trident#2]\ignorespaces}% + +\def\tridentppp|#1#2#3|/#4`#5`#6/<#7,#8>[#9]{% +\def\next[##1;##2`##3`##4]{\def\nodee{##1}\def\labele{##2}% + \def\labelf{##3}\def\labelg{##4}}% +\next[#9]% +\advance \xpos by -\deltax% +\advance \xpos by -#7\advance \ypos by #8% +\advance\deltax by #7% +\morphism(\xpos,\ypos)|#1|/{#4}/<\deltax,-#8>[\nodee`\nodeb;\labele]% +\advance\deltax by -#7% +\morphism(\xpos,\ypos)|#2|/{#5}/<#7,-#8>[\nodee`\nodea;\labelf]% +\advance\deltay by #8% +\morphism(\xpos,\ypos)|#3|/{#6}/<#7,-\deltay>[\nodee`\nodec;\labelg]% +\ignorespaces}% + +\def\trident{\ifnextchar|{\tridentp}{\tridentp|amb|}}% +\def\tridentp|#1|{\ifnextchar/{\tridentpp|#1|}{\tridentpp|#1|/{>}`{>}`{>}/}}% +\def\tridentpp|#1|/#2/{\ifnextchar<{\tridentppp|#1|/#2/}% + {\tridentppp|#1|/#2/<500,500>}}% + +\def\setmorphismwidth#1#2#3#4{% + \setbox0=\hbox{$#1{\labelstyle#3#3}#2$}#4=\wd0% + \divide #4 by 2 \divide #4 by \ul% + \advance #4 by 350 \ratchet{#4}{500}}% + +\def\setSquarewidth[#1`#2`#3`#4;#5`#6`#7`#8]{% + \setmorphismwidth{#1}{#2}{#5}{\topw}% + \setmorphismwidth{#3}{#4}{#8}{\botw}% +\ratchet{\topw}{\botw}}% + +\def\Squarepppp(#1)|#2|/#3/<#4>[#5]{% + \setSquarewidth[#5]% + \squarepppp(#1)|#2|/#3/<\topw,#4>[#5]% +\ignorespaces}% + +\def\Square{\ifnextchar({\Squarep}{\Squarep(0,0)}}% +\def\Squarep(#1){\ifnextchar|{\Squarepp(#1)}{\Squarepp(#1)|alrb|}}% +\def\Squarepp(#1)|#2|{\ifnextchar/{\Squareppp(#1)|#2|}% + {\Squareppp(#1)|#2|/>`>`>`>/}}% +\def\Squareppp(#1)|#2|/#3`#4`#5`#6/{% + \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|% +\deltaY=#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/<\deltaY>% + [\Nodea`\Nodeb`\Noded`\Nodee;\Labela`\Labelc`\Labeld`\Labelf]% + \advance \Xpos by \topw +\Squarepppp(\Xpos,\Ypos)|\Xb\Xd\Xe\Xg|/#2``#5`#7/<\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>}}% + +\def\vSquarespppp(#1,#2)|#3|/#4/<#5,#6>[#7;#8]{% +\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|% +\deltaX=#5% +\deltaY=#6% +\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[#7]% +\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[#8]% +\dovSquares/#4/\ignorespaces}% + +\def\dovSquares/#1`#2`#3`#4`#5`#6`#7/{% +\setmorphismwidth{\Nodea}{\Nodeb}{\Labela}{\topw}% +\setmorphismwidth{\Nodec}{\Noded}{\Labeld}{\botw}% +\ratchet{\topw}{\botw}% +\setmorphismwidth{\Nodee}{\Nodef}{\Labelg}{\botw}% +\ratchet{\topw}{\botw}% +\square(\Xpos,\Ypos)|\Xd\Xe\Xf\Xg|/`#5`#6`#7/<\topw,\deltaX>% + [\Nodec`\Noded`\Nodee`\Nodef;`\Labele`\Labelf`\Labelg]% +\advance \Ypos by \deltaX% +\square(\Xpos,\Ypos)|\Xa\Xb\Xc\Xd|/#1`#2`#3`#4/<\topw,\deltaY>% + [\Nodea`\Nodeb`\Nodec`\Noded;\Labela`\Labelb`\Labelc`\Labeld]% +}% + +\def\vSquares{\ifnextchar({\vSquaresp}{\vSquaresp(0,0)}}% +\def\vSquaresp(#1){\ifnextchar|{\vSquarespp(#1)}{\vSquarespp% +(#1)|alrmlrb|}}% +\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>}}% + +\def\osquarepppp(#1)|#2|/#3`#4`#5`#6/<#7>[#8]{\squarepppp% + (#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} + +\def\cube{\ifnextchar({\osquarep}{\osquarep(0,0)}}% +\def\osquarep(#1){\ifnextchar|{\osquarepp(#1)}{\osquarepp(#1)|alrb|}}% +\def\osquarepp(#1)|#2|{\ifnextchar/{\osquareppp(#1)|#2|}% + {\osquareppp(#1)|#2|/>`>`>`>/}}% +\def\osquareppp(#1)|#2|/#3`#4`#5`#6/{% + \ifnextchar<{\osquarepppp(#1)|#2|/#3`#4`#5`#6/}% + {\osquarepppp(#1)|#2|/#3`#4`#5`#6/<1500,1500>}}% + +\def\isquarepppp(#1)|#2|/#3`#4`#5`#6/<#7>[#8]{% + \squarepppp(#1)|#2|/#3`#4`#5`#6/<#7>[#8]% +\ifnextchar|{\cubep}{\cubep|mmmm|}}% +\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\isquarepp(#1)|#2|{\ifnextchar/{\isquareppp(#1)|#2|}% + {\isquareppp(#1)|#2|/>`>`>`>/}}% +\def\isquareppp(#1)|#2|/#3`#4`#5`#6/{% + \ifnextchar<{\isquarepppp(#1)|#2|/#3`#4`#5`#6/}% + {\isquarepppp(#1)|#2|/#3`#4`#5`#6/<500,500>}}% + +\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 +\domorphism(\Xpos,\Ypos)|#2|/#6/<\Xend,\Yend>[\Nodeb`\nodeb;\Labelb]% +\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 +\domorphism(\Xpos,\Ypos)|#3|/#7/<\Xend,\Yend>[\Nodec`\nodec;\Labelc]% +\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} + +\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 + \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 + by \defaultmargin \ratchet{\deltax}{200}% +\else \deltax#3 \fi +\xy\ar@{#1}@<2.5pt>^{#4}(\deltax,0)% +\ar@{#2}@<-2.5pt>_{#5}(\deltax,0)\endxy\ignorespaces}} + +\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 +\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}|{}}} +\def\threepp/#1`#2`#3/<#4>{\ifnextchar^{\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/>`>`>/}} + + +\def\twoar(#1,#2){{% + \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} + +\def\iiixiiipppppp(#1,#2)|#3|/#4/<#5>#6<#7>[#8;#9]{% + \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}% + \def\xi{##3}\def\xj{##4}\def\xk{##5}\def\xl{##6}}% + \next|#3|% + \def\next<##1,##2>{\deltax##1\deltay##2}% + \next<#5>% + \def\next<##1,##2>{\deltaX##1\deltaY##2}% + \next<#7>% + \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 + \ifodd\topw \def\zi{}\else\def\zi{\relax}\fi \divide\topw by 2 + \ifodd\topw \def\zh{}\else\def\zh{\relax}\fi \divide\topw by 2 + \ifodd\topw \def\zg{}\else\def\zg{\relax}\fi \divide\topw by 2 + \ifodd\topw \def\zf{}\else\def\zf{\relax}\fi \divide\topw by 2 + \ifodd\topw \def\ze{}\else\def\ze{\relax}\fi \divide\topw by 2 + \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\zb{}\else\def\zb{\relax}\fi \divide\topw by 2 + \ifodd\topw \def\za{}\else\def\za{\relax}\fi}% + \next{#6}% + \def\next[##1`##2`##3`##4`##5`##6`##7`##8`##9]{% + \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}% + \def\noded{##4}\def\nodee{##5}\def\nodef{##6}% + \def\nodeg{##7}\def\nodeh{##8}\def\nodei{##9}}% + \next[#8]% + \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}\nextt[##7]}% + \def\nextt[##1`##2`##3`##4`##5`##6]{% + \def\labelg{##1}\def\labelh{##2}\def\labeli{##3}% + \def\labelj{##4}\def\labelk{##5}\def\labell{##6}}% + \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 + \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 + \morphism(\xpos,\ypos)|\xd|/{##4}/<\deltax,0>[\nodee`\nodef;\labeld]% + \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 + \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 + \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 + \nextt/##7/}% + \def\nextt/##1`##2`##3`##4`##5`##6/{% + \morphism(\xpos,\ypos)|\xi|/{##3}/<0,-\deltay>[\nodec`\nodef;\labeli]% + \advance\xpos by -\deltax + \morphism(\xpos,\ypos)|\xh|/{##2}/<0,-\deltay>[\nodeb`\nodee;\labelh]% + \advance\xpos by -\deltax + \morphism(\xpos,\ypos)|\xg|/{##1}/<0,-\deltay>[\nodea`\noded;\labelg]% + \advance\ypos by -\deltay + \morphism(\xpos,\ypos)|\xj|/{##4}/<0,-\deltay>[\noded`\nodeg;\labelj]% + \advance\xpos by \deltax + \morphism(\xpos,\ypos)|\xk|/{##5}/<0,-\deltay>[\nodee`\nodeh;\labelk]% + \advance\xpos by \deltax + \morphism(\xpos,\ypos)|\xl|/{##6}/<0,-\deltay>[\nodef`\nodei;\labell]}% + \next/#4/\ignorespaces} + +\def\iiixiii{\ifnextchar({\iiixiiip}{\iiixiiip(0,0)}}% +\def\iiixiiip(#1){\ifnextchar|{\iiixiiipp(#1)}% + {\iiixiiipp(#1)|aammbblmrlmr|}}% +\def\iiixiiipp(#1)|#2|{\ifnextchar/{\iiixiiippp(#1)|#2|}% + {\iiixiiippp(#1)|#2|/>`>`>`>`>`>`>`>`>`>`>`>/}}% +\def\iiixiiippp(#1)|#2|/#3/{% + \ifnextchar<{\iiixiiipppp(#1)|#2|/#3/}% + {\iiixiiipppp(#1)|#2|/#3/<\default,\default>}}% +\def\iiixiiipppp(#1)|#2|/#3/<#4>{\ifnextchar[{\iiixiiippppp(#1)|#2|/#3/% + <#4>0<0,0>}{\iiixiiippppp(#1)|#2|/#3/<#4>}}% +\def\iiixiiippppp(#1)|#2|/#3/<#4>#5{\ifnextchar<% + {\iiixiiipppppp(#1)|#2|/#3/<#4>{#5}}% + {\iiixiiipppppp(#1)|#2|/#3/<#4>{#5}<400,400>}}% + +\def\iiixiipppppp(#1,#2)|#3|/#4/<#5>#6<#7>[#8;#9]{% + \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|% + \def\next<##1,##2>{\deltax##1\deltay##2}% + \next<#5>% + \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\zb{}\else\def\zb{\relax}\fi \divide\topw by 2 + \ifodd\topw \def\za{}\else\def\za{\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}}% + \next[#8]% + \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[#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 + \morphism(\xpos,\ypos)|\xc|/##3/<\deltax,0>[\noded`\nodee;\labelc]% + \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 \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 + \morphism(\xpos,\ypos)|\xa|/##1/<\deltax,0>[\nodea`\nodeb;\labela]% + \morphism(\xpos,\ypos)|\xe|/##5/<0,-\deltay>[\nodea`\noded;\labele]% + \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 + \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} + + +\def\iiixii{\ifnextchar({\iiixiip}{\iiixiip(0,0)}}% +\def\iiixiip(#1){\ifnextchar|{\iiixiipp(#1)}% + {\iiixiipp(#1)|aabblmr|}}% +\def\iiixiipp(#1)|#2|{\ifnextchar/{\iiixiippp(#1)|#2|}% + {\iiixiippp(#1)|#2|/>`>`>`>`>`>`>/}}% +\def\iiixiippp(#1)|#2|/#3/{% + \ifnextchar<{\iiixiipppp(#1)|#2|/#3/}% + {\iiixiipppp(#1)|#2|/#3/<\default,\default>}}% +\def\iiixiipppp(#1)|#2|/#3/<#4>{\ifnextchar[{\iiixiippppp(#1)|#2|/#3/% + <#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>}}% + +\catcode`\@=\atcode% +\endinput |