diff options
Diffstat (limited to 'macros/generic/diagrams/taylor')
-rw-r--r-- | macros/generic/diagrams/taylor/Borceux-to-Taylor.tex | 796 | ||||
-rw-r--r-- | macros/generic/diagrams/taylor/V3,90.tex | 1908 | ||||
-rw-r--r-- | macros/generic/diagrams/taylor/V3,91.tex | 1917 | ||||
-rw-r--r-- | macros/generic/diagrams/taylor/V3,93.tex | 1912 | ||||
l--------- | macros/generic/diagrams/taylor/diagrams.sty | 1 | ||||
l--------- | macros/generic/diagrams/taylor/diagrams.tex | 1 | ||||
-rw-r--r-- | macros/generic/diagrams/taylor/index.html | 599 | ||||
-rw-r--r-- | macros/generic/diagrams/taylor/manual.bklt.gz | bin | 0 -> 259169 bytes | |||
-rw-r--r-- | macros/generic/diagrams/taylor/manual.dvi | bin | 0 -> 151084 bytes | |||
-rw-r--r-- | macros/generic/diagrams/taylor/manual.pdf | bin | 0 -> 344003 bytes | |||
-rw-r--r-- | macros/generic/diagrams/taylor/manual.ps.gz | bin | 0 -> 258884 bytes | |||
-rw-r--r-- | macros/generic/diagrams/taylor/manual.tex | 2695 | ||||
-rw-r--r-- | macros/generic/diagrams/taylor/msg1992.html | 236 |
13 files changed, 10065 insertions, 0 deletions
diff --git a/macros/generic/diagrams/taylor/Borceux-to-Taylor.tex b/macros/generic/diagrams/taylor/Borceux-to-Taylor.tex new file mode 100644 index 0000000000..d48eef3845 --- /dev/null +++ b/macros/generic/diagrams/taylor/Borceux-to-Taylor.tex @@ -0,0 +1,796 @@ +\message{Partial emulation of Francis Borceux's diagrams using...............} +% you need Paul Taylor's commutative diagrams package loaded as well. +\input diagrams +\message{<Emulation (PT) version 0.21, 16 June 1994>} + +% The macro names have been taken from Francis Borceux's "diagram.tex" +% and replaced with equivalent commands in Paul Taylor's package. + +% The "ternary" (4x2), curved, multiple and free arrows have not yet +% been implemented. To do so requires an option to be added to PT's +% diagrams which, it is intended, will be in the next version. + +% Some of these commands can of course be implemented essentially by +% copying FB's macros. You can do this if you want to, but I shall not +% do it myself, distribute your code or guarantee that it will work +% in future. + +% If you want to add commands which do have translations, please send +% them to me, accompanied by a test file which exercises them. Please +% test it with both FB's macros and the emulation. Your contributions +% will then be included in this file, with acknowledgement. + +% The commands below are terminated with "\relax". This is to ensure +% that anything that follows is printed afterwards instead of being +% interpreted as a label or optional argument. DO NOT MAKE A HABIT OF +% PUTTING \relax AFTER ARROW COMMANDS. If anything follows a horizontal +% arrow within a cell, the "through" feature is disabled, so the filler +% is printed in two parts instead of one. When the filler is made from +% repeated components, such as those with double shafts, this may result +% in gaps if the arrow is too short. + +% In this version all size parameters are ignored. We ought to save the +% size specified in \DIAGV, and convert that in sized diagonals to cells. + +% If you think this emulation was worth the effort, please tell me! +% (Otherwise I shaln't bother to maintain it.) + +%*************************************************************************** + +%% crossed LaTeX arrowheads +\def\lhxla{\lhla\mkern-3mu\scriptaxis+}%% +\def\rhxla{\scriptaxis+\mkern-2mu\rhla}%% +\def\uhxla{\hbox{\uhla\raise-1.5ex\hbox to0pt{\hss$\scriptstyle+$\hss}}}%% +\def\dhxla{\hbox{\dhla\lower-1ex\hbox to0pt{\hss$\scriptstyle+$\hss}}}%% +\newarrowhead{+la}\rhxla\lhxla\dhxla\uhxla + +\newarrowtail+++++ + +\newarrow{Into}+---> +\newarrow{Bi}+---{+la} +\newarrow{Onto}----{+la} + +%\newarrow{To}----> +%\newarrow{Dotsto}....> +%\newarrow{Eq}===== +%\newarrow{Mono} +%\newarrow{ar}----> +%\newarrow{dotar}....> +%\newarrow{mono}+---> +%\newarrow{epi}----{+>} +%\newarrow{bimo}+---{+la} +%\newarrow{iso}--{iso}-> + +% It would be better to define \newarrow's with names like FBar, FBmono, etc + +% nohcheck allows arrows in text (ie not maths) mode, amongst other things. +% The assumption is that you start off with a correct FB diagram; in this +% case you don't want extra &s being inserted! +% 2620000sp is approx 40pt (4em at 10pt size) +\diagramstyle[heads=LaTeX,nohcheck,size=2620000sp] + +% This was for debugging, to list the commands as they're defined. +%\let\ddef\def +%\ddef\zdef#1{\message{\string#1^^J}\ddef#1} +%\let\def\zdef + +% The begin/end diagram commands. +\def\DIAG#1{\begin{diagram}[]\relax#1\relax} +\def\DIAGV#1#2{\dimen0=#1\DiagramCellHeight\CellSize=.01\dimen0 + \begin{diagram}[]\relax#2\relax} +\def\diag{\relax\end{diagram}} + +% \diagv{t}{l}{b} prints the last item of the diagram and +% adds a t points extra space at the top of the diagram +% adds a l points extra space at the left of the diagram +% adds a b points extra space at the bottom of the diagram +\def\diagv#1#2#3{\relax\end{diagram}}% currently ignored. + +% Overprint, next cell & next line commands +\def\n#1{} +\def\nn#1{\\#1} +\def\cross#1#2{\relax#1\relax#2\relax} + +% Make the next arrow bold. +\def\B{\csname diagramstyle\endcsname[thick]} + +% Not implemented. +\def\movename#1#2#3{#1} +\def\com{} + +% commutative diagram symbol +%\newcommand{\com}{\begin{picture}(12,8)% +%\put(6,4){\oval(8,8)[b]}\put(6,4){\oval(8,8)[r]}% +%\put(6,8){\vector(-1,0){2}}\end{picture}}% + +\def\adj{\mbox{$\dashv$}} + +% Natural transformations +\def\nat{\pile{\rTo\\\Downarrow\\\rTo}} + +\def\Nat#1#2#3{\pile{\rTo^{#1\qquad}\\ + \Downarrow{\scriptstyle#2}\\ + \rTo^{#3\quad}}} + +\def\binat{\pile{\rTo\\\Downarrow\\\rTo\\\Downarrow\\\rTo}} + +\def\Binat#1#2#3#4#5{\pile{\rTo^{#1\qquad}\\ + \Downarrow{\scriptstyle#2}\\ + \rTo^{#3\quad}\\ + \Downarrow{\scriptstyle#2}\\ + \rTo^{#3\quad}}} + +%*************************************************************************** +% PRIMARY ARROW COMMANDS - FULLY TESTED +%*************************************************************************** + +% right-ward in-text arrows +\def\ar {\rTo\relax} +\def\dotar{\rDotsto\relax} +\def\mono {\rInto\relax} +\def\epi {\rOnto\relax} +\def\bimo {\rBi\relax} +\def\iso {\rTo^{\cong}\relax} +\def\biar {\pile{\rTo\\\rTo}\relax} +\def\eql {\rEq\relax} +\def\adjar{\pile{\lTo\\\rTo}\relax} + +% labelled right-ward in-text arrows +\def\Ar #1{\rTo^{#1}\relax} +\def\Dotar#1{\rDotsto^{#1}\relax} +\def\Mono #1{\rInto^{#1}\relax} +\def\Epi #1{\rOnto^{#1}\relax} +\def\Bimo #1{\rBi^{#1}\relax} +\def\Iso #1{\rTo^{{\cong}{#1}}\relax} +\def\Biar #1#2{\pile{\rTo^{#1}\\\rTo_{#2}}\relax} +%\def\Eql #1{\rEq^{#1}\relax} +\def\Adjar#1#2{\pile{\lTo^{#1}\\\rTo_{#2}}\relax} + +% left-ward in-text arrows +\def\bkar {\lTo\relax} +\def\bkdotar{\lDotsto\relax} +\def\bkmono {\lInto\relax} +\def\bkepi {\lOnto\relax} +\def\bkbimo {\lBi\relax} +\def\bkiso {\lTo^{\cong}\relax} +\def\bkbiar {\pile{\lTo\\\lTo}\relax} +\def\bkeql {\lEq\relax} +\def\bkadjar{\pile{\rTo\\\lTo}\relax} + +% labelled left-ward in-text arrows +\def\Bkar #1{\lTo^{#1}\relax} +\def\Bkdotar#1{\lDotsto^{#1}\relax} +\def\Bkmono #1{\lInto^{#1}\relax} +\def\Bkepi #1{\lOnto^{#1}\relax} +\def\Bkbimo #1{\lBi^{#1}\relax} +\def\Bkiso #1{\lTo^{{\cong}{#1}}\relax} +\def\Bkbiar #1#2{\pile{\lTo^{#1}\\\lTo_{#2}}\relax} +%\def\Bkeql #1{\lEq^{#1}\relax} +\def\Bkadjar#1#2{\pile{\rTo^{#1}\\\lTo_{#2}}\relax} + +% east-ward diagram arrows +\def\ear {\rTo\relax} +\def\edotar{\rDotsto\relax} +\def\emono {\rInto\relax} +\def\eepi {\rOnto\relax} +\def\ebimo {\rBi\relax} +\def\eiso {\rTo^{\cong}\relax} +\def\ebiar {\pile{\rTo\\\rTo}\relax} +\def\eeql {\rEq\relax} +\def\eadjar{\pile{\lTo\\\rTo}\relax} + +% labelled east-ward diagram arrows +\def\Ear #1{\rTo^{#1}\relax} +\def\Edotar#1{\rDotsto^{#1}\relax} +\def\Emono #1{\rInto^{#1}\relax} +\def\Eepi #1{\rOnto^{#1}\relax} +\def\Ebimo #1{\rBi^{#1}\relax} +\def\Eiso #1{\rTo^{{\cong}{#1}}\relax} +\def\Ebiar #1#2{\pile{\rTo^{#1}\\\rTo_{#2}}\relax} +%\def\Eeql #1{\rEq^{#1}\relax} +\def\Eadjar#1#2{\pile{\lTo^{#1}\\\rTo_{#2}}\relax} + +% labelled east-ward diagram arrows +\def\eaR #1{\rTo_{#1}\relax} +\def\edotaR#1{\rDotsto_{#1}\relax} +\def\emonO #1{\rInto_{#1}\relax} +\def\eepI #1{\rOnto_{#1}\relax} +\def\ebimO #1{\rBi_{#1}\relax} +\def\eisO #1{\rTo_{{\cong}{#1}}\relax} +%\def\ebiaR #1#2{\pile{\rTo_{#1}\\\rTo_{#2}}\relax} +%\def\eeqL #1{\rEq_{#1}\relax} +%\def\eadjaR#1#2{\pile{\lTo_{#1}\\\rTo_{#2}}\relax} + + +% west-ward diagram arrows +\def\war {\lTo\relax} +\def\wdotar{\lDotsto\relax} +\def\wmono {\lInto\relax} +\def\wepi {\lOnto\relax} +\def\wbimo {\lBi\relax} +\def\wiso {\lTo^{\cong}\relax} +\def\wbiar {\pile{\lTo\\\lTo}\relax} +\def\weql {\lEq\relax} +\def\wadjar{\pile{\rTo\\\lTo}\relax} + +% labelled west-ward diagram arrows +\def\War #1{\lTo^{#1}\relax} +\def\Wdotar#1{\lDotsto^{#1}\relax} +\def\Wmono #1{\lInto^{#1}\relax} +\def\Wepi #1{\lOnto^{#1}\relax} +\def\Wbimo #1{\lBi^{#1}\relax} +%\def\Wiso #1{\lTo^{{\cong}{#1}}\relax}%%%%%%% FB's has no \cong!!!!!!!! +\def\Wiso #1{\lTo^{{#1}}\relax} +\def\Wbiar #1#2{\pile{\lTo^{#1}\\\lTo_{#2}}\relax} +%\def\Weql #1{\lEq^{#1}\relax} +\def\Wadjar#1#2{\pile{\rTo^{#1}\\\lTo_{#2}}\relax} + +% labelled west-ward diagram arrows +\def\waR #1{\lTo_{#1}\relax} +\def\wdotaR#1{\lDotsto_{#1}\relax} +\def\wmonO #1{\lInto_{#1}\relax} +\def\wepI #1{\lOnto_{#1}\relax} +\def\wbimO #1{\lBi_{#1}\relax} +%\def\wisO #1{\lTo_{{\cong}{#1}}\relax}%%%%%%%%%%%%% FB's has no \cong!!!!!!! +\def\wisO #1{\lTo_{{#1}}\relax} +%\def\wbiaR #1#2{\pile{\lTo_{#1}\\\lTo_{#2}}\relax} +%\def\weqL #1{\lEq_{#1}\relax} +%\def\wadjaR#1#2{\pile{\rTo_{#1}\\\lTo_{#2}}\relax} + + +% north-ward diagram arrows +\def\nar {\uTo\relax} +\def\ndotar{\uDotsto\relax} +\def\nmono {\uInto\relax} +\def\nepi {\uOnto\relax} +\def\nbimo {\uBi\relax} +\def\niso {\uTo>{\cong}\relax} +\def\nbiar {\uTo\uTo\relax} +\def\neql {\uEq\relax} +\def\nadjar{\uTo\dTo\relax} + +% labelled north-ward diagram arrows +\def\Nar #1{\uTo^{#1}\relax} +\def\Ndotar#1{\uDotsto^{#1}\relax} +\def\Nmono #1{\uInto^{#1}\relax} +\def\Nepi #1{\uOnto^{#1}\relax} +\def\Nbimo #1{\uBi^{#1}\relax} +\def\Niso #1{\uTo<{#1}>{\cong}\relax} +\def\Nbiar #1#2{uTo^{#1}\uTo_{#2}\relax} +%\def\Neql #1{\uEq^{#1}\relax} +\def\Nadjar#1#2{\uTo^{#1}\dTo_{#2}\relax} + +% labelled north-ward diagram arrows +\def\naR #1{\uTo_{#1}\relax} +\def\ndotaR#1{\uDotsto_{#1}\relax} +\def\nmonO #1{\uInto_{#1}\relax} +\def\nepI #1{\uOnto_{#1}\relax} +\def\nbimO #1{\uBi_{#1}\relax} +%\def\nisO #1{\uTo_{{\cong}{#1}}\relax} +%\def\nbiaR #1#2{uTo_{#1}\\\uTo_{#2}\relax} +%\def\neqL #1{\uEq_{#1}\relax} +%\def\nadjaR#1#2{\uTo_{#1}\dTo_{#2}\relax} + + +% south-ward diagram arrows +\def\sar {\dTo\relax} +\def\sdotar{\dDotsto\relax} +\def\smono {\dInto\relax} +\def\sepi {\dOnto\relax} +\def\sbimo {\dBi\relax} +\def\siso {\dTo>{\cong}\relax} +\def\sbiar {\dTo\dTo\relax} +\def\seql {\dEq\relax} +\def\sadjar{\dTo\uTo\relax} + +% labelled south-ward diagram arrows +\def\Sar #1{\dTo^{#1}\relax} +\def\Sdotar#1{\dDotsto^{#1}\relax} +\def\Smono #1{\dInto^{#1}\relax} +\def\Sepi #1{\dOnto^{#1}\relax} +\def\Sbimo #1{\dBi^{#1}\relax} +\def\Siso #1{\dTo<{#1}>{\cong}\relax} +\def\Sbiar #1#2{\dTo^{#1}\dTo_{#2}\relax} +%\def\Seql #1{\dEq^{#1}\relax} +\def\Sadjar#1#2{\dTo^{#1}\uTo_{#2}\relax} + +% labelled south-ward diagram arrows +\def\saR #1{\dTo_{#1}\relax} +\def\sdotaR#1{\dDotsto_{#1}\relax} +\def\smonO #1{\dInto_{#1}\relax} +\def\sepI #1{\dOnto_{#1}\relax} +\def\sbimO #1{\dBi_{#1}\relax} +%\def\sisO #1{\dTo_{{\cong}{#1}}\relax} +%\def\sbiaR #1#2{\dTo_{#1}\dTo_{#2}\relax} +%\def\seqL #1{\dEq_{#1}\relax} +%\def\sadjaR#1#2{\dTo_{#1}\uTo_{#2}\relax} + +% east-ward variable-length diagram arrows +\def\earv #1{\rTo\relax} +\def\edotarv#1{\rDotsto\relax} +\def\emonov #1{\rInto\relax} +\def\eepiv #1{\rOnto\relax} +\def\ebimov #1{\rBi\relax} +\def\eisov #1{\rTo^{\cong}\relax} +\def\ebiarv #1{\pile{\rTo\\\rTo}\relax} +\def\eeqlv #1{\rEq\relax} +\def\eadjarv#1{\pile{\lTo\\\rTo}\relax} + +% labelled east-ward variable-length diagram arrows +\def\Earv #1#2{\rTo^{#1}\relax} +\def\Edotarv#1#2{\rDotsto^{#1}\relax} +\def\Emonov #1#2{\rInto^{#1}\relax} +\def\Eepiv #1#2{\rOnto^{#1}\relax} +\def\Ebimov #1#2{\rBi^{#1}\relax} +\def\Eisov #1#2{\rTo^{{\cong}{#1}}\relax} +\def\Ebiarv #1#2#3{\pile{\rTo^{#1}\\\rTo_{#2}}\relax} +%\def\Eeqlv #1#2{\rEq^{#1}\relax} +\def\Eadjarv#1#2#3{\pile{\lTo^{#1}\\\rTo_{#2}}\relax} + +% labelled east-ward variable-length diagram arrows +\def\eaRv #1#2{\rTo_{#1}\relax} +\def\edotaRv#1#2{\rDotsto_{#1}\relax} +\def\emonOv #1#2{\rInto_{#1}\relax} +\def\eepIv #1#2{\rOnto_{#1}\relax} +\def\ebimOv #1#2{\rBi_{#1}\relax} +\def\eisOv #1#2{\rTo_{{\cong}{#1}}\relax} +%\def\ebiaRv #1#2#3{\pile{\rTo_{#1}\\\rTo_{#2}}\relax} +%\def\eeqLv #1#2{\rEq_{#1}\relax} +%\def\eadjaRv#1#2#3{\pile{\lTo_{#1}\\\rTo_{#2}}\relax} + + +% west-ward variable-length diagram arrows +\def\warv #1{\lTo\relax} +\def\wdotarv#1{\lDotsto\relax} +\def\wmonov #1{\lInto\relax} +\def\wepiv #1{\lOnto\relax} +\def\wbimov #1{\lBi\relax} +\def\wisov #1{\lTo^{\cong}\relax} +\def\wbiarv #1{\pile{\lTo\\\lTo}\relax} +\def\weqlv #1{\lEq\relax} +\def\wadjarv#1{\pile{\rTo\\\lTo}\relax} + +% labelled west-ward variable-length diagram arrows +\def\Warv #1#2{\lTo^{#1}\relax} +\def\Wdotarv#1#2{\lDotsto^{#1}\relax} +\def\Wmonov #1#2{\lInto^{#1}\relax} +\def\Wepiv #1#2{\lOnto^{#1}\relax} +\def\Wbimov #1#2{\lBi^{#1}\relax} +\def\Wisov #1#2{\lTo^{{\cong}{#1}}\relax} +\def\Wbiarv #1#2#3{\pile{\lTo^{#1}\\\lTo_{#2}}\relax} +%\def\Weqlv #1#2{\lEq^{#1}\relax} +\def\Wadjarv#1#2#3{\pile{\rTo^{#1}\\\lTo_{#2}}\relax} + +% labelled west-ward variable-length diagram arrows +\def\waRv #1#2{\lTo_{#1}\relax} +\def\wdotaRv#1#2{\lDotsto_{#1}\relax} +\def\wmonOv #1#2{\lInto_{#1}\relax} +\def\wepIv #1#2{\lOnto_{#1}\relax} +\def\wbimOv #1#2{\lBi_{#1}\relax} +\def\wisOv #1#2{\lTo_{{\cong}{#1}}\relax} +%\def\wbiaRv #1#2#3{\pile{\lTo_{#1}\\\lTo_{#2}}\relax} +%\def\weqLv #1#2{\lEq_{#1}\relax} +%\def\wadjaRv#1#2#3{\pile{\rTo_{#1}\\\lTo_{#2}}\relax} + + +% north-ward variable-length diagram arrows +\def\narv #1{\uTo\relax} +\def\ndotarv#1{\uDotsto\relax} +\def\nmonov #1{\uInto\relax} +\def\nepiv #1{\uOnto\relax} +\def\nbimov #1{\uBi\relax} +\def\nisov #1{\uTo>{\cong}\relax} +\def\nbiarv #1{\uTo\uTo\relax} +\def\neqlv #1{\uEq\relax} +\def\nadjarv#1{\uTo\dTo\relax} + +% labelled north-ward variable-length diagram arrows +\def\Narv #1#2{\uTo^{#1}\relax} +\def\Ndotarv#1#2{\uDotsto^{#1}\relax} +\def\Nmonov #1#2{\uInto^{#1}\relax} +\def\Nepiv #1#2{\uOnto^{#1}\relax} +\def\Nbimov #1#2{\uBi^{#1}\relax} +\def\Nisov #1#2{\uTo<{#1}>{\cong}\relax} +\def\Nbiarv #1#2#3{\uTo^{#1}\uTo_{#2}\relax} +%\def\Neqlv #1#2{\uEq^{#1}\relax} +\def\Nadjarv#1#2#3{\uTo^{#1}\dTo_{#2}\relax} + +% labelled north-ward variable-length diagram arrows +\def\naRv #1#2{\uTo_{#1}\relax} +\def\ndotaRv#1#2{\uDotsto_{#1}\relax} +\def\nmonOv #1#2{\uInto_{#1}\relax} +\def\nepIv #1#2{\uOnto_{#1}\relax} +\def\nbimOv #1#2{\uBi_{#1}\relax} +%\def\nisOv #1#2{\uTo_{{\cong}{#1}}\relax} +%\def\nbiaRv #1#2#3{\uTo_{#1}\uTo_{#2}\relax} +%\def\neqLv #1#2{\uEq_{#1}\relax} +%\def\nadjaRv#1#2#3{\uTo_{#1}\dTo_{#2}\relax} + + +% south-ward variable-length diagram arrows +\def\sarv #1{\dTo\relax} +\def\sdotarv#1{\dDotsto\relax} +\def\smonov #1{\dInto\relax} +\def\sepiv #1{\dOnto\relax} +\def\sbimov #1{\dBi\relax} +\def\sisov #1{\dTo>{\cong}\relax} +\def\sbiarv #1{\dTo\dTo\relax} +\def\seqlv #1{\dEq\relax} +\def\sadjarv#1{\dTo\uTo\relax} + +% labelled south-ward variable-length diagram arrows +\def\Sarv #1#2{\dTo^{#1}\relax} +\def\Sdotarv#1#2{\dDotsto^{#1}\relax} +\def\Smonov #1#2{\dInto^{#1}\relax} +\def\Sepiv #1#2{\dOnto^{#1}\relax} +\def\Sbimov #1#2{\dBi^{#1}\relax} +\def\Sisov #1#2{\dTo<{#1}>{\cong}\relax} +\def\Sbiarv #1#2#3{\dTo^{#1}\dTo_{#2}\relax} +%\def\Seqlv #1#2{\dEq^{#1}\relax} +\def\Sadjarv#1#2#3{\dTo^{#1}\uTo_{#2}\relax} + +% labelled south-ward variable-length diagram arrows +\def\saRv #1#2{\dTo_{#1}\relax} +\def\sdotaRv#1#2{\dDotsto_{#1}\relax} +\def\smonOv #1#2{\dInto_{#1}\relax} +\def\sepIv #1#2{\dOnto_{#1}\relax} +\def\sbimOv #1#2{\dBi_{#1}\relax} +%\def\sisOv #1#2{\dTo_{{\cong}{#1}}\relax} +%\def\sbiaRv #1#2#3{\dTo_{#1}\dTo_{#2}\relax} +%\def\seqLv #1#2{\dEq_{#1}\relax} +%\def\sadjaRv#1#2#3{\dTo_{#1}\uTo_{#2}\relax} + +%*************************************************************************** +% THE SECONDARY ARROWS NEED THOROUGH TESTING! +%*************************************************************************** + +% north-east-ward diagram arrows +\def\near {\ruTo\relax} +\def\nedotar{\ruDotsto\relax} +\def\nemono {\ruInto\relax} +\def\neepi {\ruOnto\relax} +\def\nebimo {\ruBi\relax} +\def\neiso {\ruTo^{\cong}\relax} +\def\nebiar {\ruTo\ruTo\relax} +\def\neeql {\ruEq\relax} +\def\neadjar{\ldTo\ruTo\relax} + +% labelled north-east-ward diagram arrows +\def\Near #1{\ruTo^{#1}\relax} +\def\Nedotar#1{\ruDotsto^{#1}\relax} +\def\Nemono #1{\ruInto^{#1}\relax} +\def\Neepi #1{\ruOnto^{#1}\relax} +\def\Nebimo #1{\ruBi^{#1}\relax} +\def\Neiso #1{\ruTo^{{\cong}{#1}}\relax} +\def\Nebiar #1#2{\ruTo^{#1}\ruTo_{#2}\relax} +%\def\Neeql #1{\ruEq^{#1}\relax} +\def\Neadjar#1#2{\ldTo^{#1}\ruTo_{#2}\relax} + +% labelled north-east-ward diagram arrows +\def\neaR #1{\ruTo_{#1}\relax} +\def\nedotaR#1{\ruDotsto_{#1}\relax} +\def\nemonO #1{\ruInto_{#1}\relax} +\def\neepI #1{\ruOnto_{#1}\relax} +\def\nebimO #1{\ruBi_{#1}\relax} +%\def\neisO #1{\ruTo_{{\cong}{#1}}\relax} +%\def\nebiaR #1#2{\ruTo_{#1}\ruTo_{#2}\relax} +%\def\neeqL #1{\ruEq_{#1}\relax} +%\def\neadjaR#1#2{\ldTo_{#1}\ruTo_{#2}\relax} + + +% north-west-ward diagram arrows +\def\nwar {\luTo\relax} +\def\nwdotar{\luDotsto\relax} +\def\nwmono {\luInto\relax} +\def\nwepi {\luOnto\relax} +\def\nwbimo {\luBi\relax} +\def\nwiso {\luTo^{\cong}\relax} +\def\nwbiar {\luTo\luTo\relax} +\def\nweql {\luEq\relax} +\def\nwadjar{\luTo\rdTo\relax} + +% labelled north-west-ward diagram arrows +\def\Nwar #1{\luTo^{#1}\relax} +\def\Nwdotar#1{\luDotsto^{#1}\relax} +\def\Nwmono #1{\luInto^{#1}\relax} +\def\Nwepi #1{\luOnto^{#1}\relax} +\def\Nwbimo #1{\luBi^{#1}\relax} +\def\Nwiso #1{\luTo^{{\cong}{#1}}\relax} +\def\Nwbiar #1#2{\luTo^{#1}\luTo_{#2}\relax} +%\def\Nweql #1{\luEq^{#1}\relax} +\def\Nwadjar#1#2{\luTo^{#1}\rdTo_{#2}\relax} + +% labelled north-west-ward diagram arrows +\def\nwaR #1{\luTo_{#1}\relax} +\def\nwdotaR#1{\luDotsto_{#1}\relax} +\def\nwmonO #1{\luInto_{#1}\relax} +\def\nwepI #1{\luOnto_{#1}\relax} +\def\nwbimO #1{\luBi_{#1}\relax} +%\def\nwisO #1{\luTo_{{\cong}{#1}}\relax} +%\def\nwbiaR #1#2{\luTo_{#1}\luTo_{#2}\relax} +%\def\nweqL #1{\luEq_{#1}\relax} +%\def\nwadjaR#1#2{\luTo_{#1}\rdTo_{#2}\relax} + + +% south-east-ward diagram arrows +\def\sear {\rdTo\relax} +\def\sedotar{\rdDotsto\relax} +\def\semono {\rdInto\relax} +\def\seepi {\rdOnto\relax} +\def\sebimo {\rdBi\relax} +\def\seiso {\rdTo^{\cong}\relax} +\def\sebiar {\rdTo\rdTo\relax} +\def\seeql {\rdEq\relax} +\def\seadjar{\rdTo\luTo\relax} + +% labelled south-east-ward diagram arrows +\def\Sear #1{\rdTo^{#1}\relax} +\def\Sedotar#1{\rdDotsto^{#1}\relax} +\def\Semono #1{\rdInto^{#1}\relax} +\def\Seepi #1{\rdOnto^{#1}\relax} +\def\Sebimo #1{\rdBi^{#1}\relax} +\def\Seiso #1{\rdTo^{{\cong}{#1}}\relax} +\def\Sebiar #1#2{\rdTo^{#1}\rdTo_{#2}\relax} +%\def\Seeql #1{\rdEq^{#1}\relax} +\def\Seadjar#1#2{\rdTo^{#1}\luTo_{#2}\relax} + +% labelled south-east-ward diagram arrows +\def\seaR #1{\rdTo_{#1}\relax} +\def\sedotaR#1{\rdDotsto_{#1}\relax} +\def\semonO #1{\rdInto_{#1}\relax} +\def\seepI #1{\rdOnto_{#1}\relax} +\def\sebimO #1{\rdBi_{#1}\relax} +%\def\seisO #1{\rdTo_{{\cong}{#1}}\relax} +%\def\sebiaR #1#2{\rdTo_{#1}\rdTo_{#2}\relax} +%\def\seeqL #1{\rdEq_{#1}\relax} +%\def\seadjaR#1#2{\rdTo_{#1}\luTo_{#2}\relax} + + +% south-west-ward diagram arrows +\def\swar {\ldTo\relax} +\def\swdotar{\ldDotsto\relax} +\def\swmono {\ldInto\relax} +\def\swepi {\ldOnto\relax} +\def\swbimo {\ldBi\relax} +\def\swiso {\ldTo^{\cong}\relax} +\def\swbiar {\ldTo\ldTo\relax} +\def\sweql {\ldEq\relax} +\def\swadjar{\ruTo\ldTo\relax}% ? + +% labelled south-west-ward diagram arrows +\def\Swar #1{\ldTo^{#1}\relax} +\def\Swdotar#1{\ldDotsto^{#1}\relax} +\def\Swmono #1{\ldInto^{#1}\relax} +\def\Swepi #1{\ldOnto^{#1}\relax} +\def\Swbimo #1{\ldBi^{#1}\relax} +\def\Swiso #1{\ldTo^{{\cong}{#1}}\relax} +\def\Swbiar #1#2{\ldTo^{#1}\ldTo_{#2}\relax} +%\def\Sweql #1{\ldEq^{#1}\relax} +\def\Swadjar#1#2{\ruTo^{#1}\ldTo_{#2}\relax}% ? + +% labelled south-west-ward diagram arrows +\def\swaR #1{\ldTo_{#1}\relax} +\def\swdotaR#1{\ldDotsto_{#1}\relax} +\def\swmonO #1{\ldInto_{#1}\relax} +\def\swepI #1{\ldOnto_{#1}\relax} +\def\swbimO #1{\ldBi_{#1}\relax} +%\def\swisO #1{\ldTo_{{\cong}{#1}}\relax} +%\def\swbiaR #1#2{\ldTo_{#1}\ldTo_{#2}\relax} +%\def\sweqL #1{\ldEq_{#1}\relax} +%\def\swadjaR#1#2{\ruTo_{#1}\ldTo_{#2}\relax}% ? + +% secondary variable-length diagram arrows +\def\nwarv#1{\luTo\relax}% +\def\nearv#1{\ruTo\relax}% +\def\swarv#1{\ldTo\relax}% +\def\searv#1{\rdTo\relax}% + +% labelled secondary variable-length diagram arrows +\def\nwaRv#1#2{\luTo^{#1}\relax}% +\def\neaRv#1#2{\ruTo^{#1}\relax}% +\def\swaRv#1#2{\ldTo^{#1}\relax}% +\def\seaRv#1#2{\rdTo^{#1}\relax}% +\def\Nwarv#1#2{\luTo^{#1}\relax}% +\def\Nearv#1#2{\ruTo^{#1}\relax}% +\def\Swarv#1#2{\ldTo^{#1}\relax}% +\def\Searv#1#2{\rdTo^{#1}\relax}% + +% curved arrows second argument is length +\def\Necurve#1#2{\uTo^{#1}\relax} +\def\Nwcurve#1#2{\uTo^{#1}\relax} +\def\Securve#1#2{\dTo^{#1}\relax} +\def\Swcurve#1#2{\dTo^{#1}\relax} +\def\Encurve#1#2{\rTo^{#1}\relax} +\def\Escurve#1#2{\rTo^{#1}\relax} +\def\Wncurve#1#2{\lTo^{#1}\relax} +\def\Wscurve#1#2{\lTo^{#1}\relax} + +%*************************************************************************** +% THE TERNARY ARROWS ARE NOT CORRECTLY PLACED! +%*************************************************************************** + +% ternary arrows --- MISPLACED! +\def\nnwar{\luTo[diagonalbase=(1,2)](2,4)\relax} +\def\nnear{\ruTo[diagonalbase=(1,2)](2,4)\relax} +\def\wnwar{\luTo[diagonalbase=(2,1)](4,2)\relax} +\def\enear{\ruTo[diagonalbase=(2,1)](4,2)\relax} +\def\sswar{\ldTo[diagonalbase=(1,2)](2,4)\relax} +\def\ssear{\rdTo[diagonalbase=(1,2)](2,4)\relax} +\def\wswar{\ldTo[diagonalbase=(2,1)](4,2)\relax} +\def\esear{\rdTo[diagonalbase=(2,1)](4,2)\relax} + +% labelled ternary arrows --- MISPLACED! +\def\Nnwar#1{\luTo[diagonalbase=(1,2)](2,4)^{#1}\relax} +\def\Nnear#1{\ruTo[diagonalbase=(1,2)](2,4)^{#1}\relax} +\def\Wnwar#1{\luTo[diagonalbase=(2,1)](4,2)^{#1}\relax} +\def\Enear#1{\ruTo[diagonalbase=(2,1)](4,2)^{#1}\relax} +\def\Sswar#1{\ldTo[diagonalbase=(1,2)](2,4)^{#1}\relax} +\def\Ssear#1{\rdTo[diagonalbase=(1,2)](2,4)^{#1}\relax} +\def\Wswar#1{\ldTo[diagonalbase=(2,1)](4,2)^{#1}\relax} +\def\Esear#1{\rdTo[diagonalbase=(2,1)](4,2)^{#1}\relax} + +% labelled ternary arrows --- MISPLACED! +\def\nnwaR#1{\luTo[diagonalbase=(1,2)](2,4)_{#1}\relax} +\def\nneaR#1{\ruTo[diagonalbase=(1,2)](2,4)_{#1}\relax} +\def\wnwaR#1{\luTo[diagonalbase=(2,1)](4,2)_{#1}\relax} +\def\eneaR#1{\ruTo[diagonalbase=(2,1)](4,2)_{#1}\relax} +\def\sswaR#1{\ldTo[diagonalbase=(1,2)](2,4)_{#1}\relax} +\def\sseaR#1{\rdTo[diagonalbase=(1,2)](2,4)_{#1}\relax} +\def\wswaR#1{\ldTo[diagonalbase=(2,1)](4,2)_{#1}\relax} +\def\eseaR#1{\rdTo[diagonalbase=(2,1)](4,2)_{#1}\relax} + +%*************************************************************************** +% THE CURVED ARROWS ARE NOT SUPPORTED! +%*************************************************************************** + +% curved arrows +\def\necurve#1{\uTo^{#1}\relax} +\def\nwcurve#1{\uTo^{#1}\relax} +\def\securve#1{\dTo^{#1}\relax} +\def\swcurve#1{\dTo^{#1}\relax} +\def\encurve#1{\rTo^{#1}\relax} +\def\escurve#1{\rTo^{#1}\relax} +\def\wncurve#1{\lTo^{#1}\relax} +\def\wscurve#1{\lTo^{#1}\relax} + +% The remainder of this file is included so that the original +% and emulated versions appear to have the same commands in them. +% +% missing commands +%\def\ADJAR#1{}% draws a pair of adjoint arrows of length n units +%\def\AR#1{}% draws an arrow of length n units +%\def\BIAR#1{}% draws a pair of arrows of length n units +%\def\BIMO#1{}% draws a bimorphism of length n units +%\def\BKADJAR#1{}% draws a pair of adjoint arrows of length n units +%\def\BKAR#1{}% draws a pointing back arrow of length n units +%\def\BKBIAR#1{}% draws a pair of pointing back arrows of length n units +%\def\BKBIMO#1{}% draws a pointing back bimorphism of length n units +%\def\BKDOTAR#1{}% draws a backward dotted arrow +%\def\BKEPI#1{}% draws a pointing back epimorphism of length n units +%\def\BKMONO#1{}% draws a pointing back monomorphism of length n units +%\def\DOTAR#1{}% draws a dotted arrow of length n units +%\def\EADJAR#1{}% draws an east pair of adjoint arrows of length n +%\def\EAR#1{}% draws an east arrow of length n units +%\def\EBIAR#1{}% draws an east pair of arrows of length n units +%\def\EBIMO#1{}% draws an east bimorphism of length n units +%\def\EDOTAR{}% draws a dotted arrow of length n units +%\def\EEPI#1{}% draws an east epimorphism of length n units +%\def\EEQL#1{}% draws an east equality of length n units +%\def\EMONO#1{}% draws an east monomorphism of length n units +%\def\ENEAR{f}{g}{}% draws a east-north-east arrow with names f, g +%\def\EPI#1{}% draws an epimorphism of length n units +%\def\EQL#1{}% draws an equality of length n units +%\def\ESEAR{f}{g}% draws an east-south-east arrow with names f, g +%\def\MONO{}% +%\def\NADJAR#1{}% draws a pair of vertical adjoint arrows of length n pt +%\def\NAR#1{}% draws a north arrow of length n pt +%\def\NBIAR#1{}% draws a pair of north arrows of length n pt +%\def\NBIMO#1{}% draws a north bimorphism of length n pt +%\def\NDOTAR#1{}% draws a north dotted arrow of length n units +%\def\NEADJAR{}% draws a north-east pair of adjoint arrows +%\def\NEAR{}% draws a north-east arrow +%\def\NEARV#1{}% draws a north-east arrow of length nx100 units +%\def\NEBIAR{}% draws a pair of north-east arrows +%\def\NEBIMO{}% draws a north-east bimorphism +%\def\NEDOTAR{}% draws a north-east dotted arrow +%\def\NEEPI{}% draws a north-east epimorphism +%\def\NEEQL{}% draws a north-east equality +%\def\NEMONO{}% draws a north-east monomorphism +%\def\NEPI#1{}% draws a north epimorphism of length n pt +%\def\NMONO#1{}% draws a north monomorphism of length n pt +%\def\NNEAR{f}{g}{}% draws a north-north-east arrow with names f, g +%\def\NNWAR{f}{g}{}% draws a north-north-west arrow with names f, g +%\def\NWADJAR{}% draws a north-west pair of adjoint arrows +%\def\NWAR{}% draws a north-west arrow +%\def\NWARV#1{}% draws a north-west arrow of length nx100 units +%\def\NWBIAR{}% draws a pair of north-west arrows +%\def\NWBIMO{}% draws a north-west bimorphism +%\def\NWDOTAR{}% draws a north-west dotted arrow +%\def\NWEPI{}% draws a north-west epimorphism +%\def\NWMONO{}% draws a north-west monomorphism +%\def\SADJAR#1{}% draws a pair of vertical adjoint arrows of length n units +%\def\SAR#1{}% draws a south arrow of length n units +%\def\SBIAR#1{}% draws a pair of south arrows of length n units +%\def\SBIMO#1{}% draws a south bimorphism of length n units +%\def\SDOTAR#1{}% draws a south dotted arrow of length n units +%\def\SEADJAR{}% draws a south-east pair of adjoint arrows +%\def\SEAR{}% draws a south-east arrow +%\def\SEARV#1{}% draws a south-east arrow of length nx100 units +%\def\SEBIAR{}% draws a pair of south-east arrows +%\def\SEBIMO{}% draws a south-east bimorphism +%\def\SEDOTAR{}% draws a south-east dotted arrow +%\def\SEEPI{}% draws a south-east epimorphism +%\def\SEEQL{}% draws a south-east equality +%\def\SEMONO{}% draws a south-east monomorphism +%\def\SEPI#1{}% draws a south epimorphism of length n units +%\def\SEQL#1{}% draws a vertical equality of length n units +%\def\SMONO#1{}% draws a south monomorphism of length n units +%\def\SSEAR{f}{g}{}% draws a south-south-east arrow with names f, g +%\def\SSWAR{f}{g}{}% draws a south-south-west arrow with names f, g +%\def\SWADJAR{}% draws a south-west pair of adjoint arrows +%\def\SWAR{}% draws a south-west arrow +%\def\SWARV#1{}% draws a south-west arrow of length nx100 units +%\def\SWBIAR{}% draws a pair of south-west arrows +%\def\SWBIMO{}% draws a south-west bimorphism +%\def\SWDOTAR{}% draws a south-west dotted arrow +%\def\SWEPI{}% draws a south-west epimorphism +%\def\SWMONO{}% draws a south-west monomorphism +%\def\WADJAR#1{}% draws a pair of adjoint arrows of length n units +%\def\WAR#1{}% draws a pointing back arrow of length n units +%\def\WBIAR#1{}% draws a pair of pointing back arrows of length n units +%\def\WBIMO#1{}% draws a pointing back bimorphism of length n units +%\def\WDOTAR{}% draws a dotted arrow of length n units +%\def\WEPI#1{}% draws a pointing back epimorphism of length n units +%\def\WMONO#1{}% draws a pointing back monomorphism of length n units +%\def\WNWAR{f}{g}% draws a west-north-west arrow with names f, g +%\def\WSWAR{f}{g}% draws a west-south-west arrow with names f, g +% +%\newcount\ARROW{}% +%\newcount\ARROWLENGTH{}% +%\newcount\COLUMN{}% +%\newcount\LINE{}% +%\newcount\NUMBER{}% +%\newcount\NUMBEROFDOTS{}% +%\newcount\SCALE{}% +%\newcount\SOURCE{}% +%\newcount\TARGET +%\newcount\WIDTH +%\newskip\firstitem +%\newskip\itemlength +%\newskip\seconditem +% +%\def\Freear{}% +%\def\Hbicase{}% +%\def\Hcase{}% +%\def\N{}% +%\def\Tbicase{}% +%\def\Tcase{}% +%\def\Vbicase{}% +%\def\Vcase{}% +%\def\changecounters{}% +%\def\conclude{}% +%\def\crosslength{}% +%\def\fdbicase{}% +%\def\fdcase{}% +%\def\freear{}% +%\def\hbicase{}% +%\def\hcasE{}% +%\def\hcase{}% +%\def\initialize{}% +%\def\lowername{}% +%\def\movearrow{}% +%\def\movevertex{}% +%\def\sdbicase{}% +%\def\sdcase{}% +%\def\tbicase{}% +%\def\tcase{}% +%\def\tlowername{}% +%\def\truex{}% +%\def\truey{}% +%\def\truez{}% +%\def\vbicase{}% +%\def\vcasE{}% +%\def\vcase{}% +% +% +%\let\def\ddef\bye
\ No newline at end of file diff --git a/macros/generic/diagrams/taylor/V3,90.tex b/macros/generic/diagrams/taylor/V3,90.tex new file mode 100644 index 0000000000..b5b5223039 --- /dev/null +++ b/macros/generic/diagrams/taylor/V3,90.tex @@ -0,0 +1,1908 @@ +% mangletex (24 Nov 1995) run at 16:49 BST Sunday 11 April 2004 +\message{<Paul Taylor's commutative diagrams, version 3.90, 11 April 2004>}% +%% +\message{#===============================================================#}% +\message{........PostScript mode (dvips) is now the default...............}% +\message{(DVI mode has not been supported since 1992 and produces inferior}% +\message{results which are completely unsuitable for publication. However,}% +\message{if you really still need it, read the manual for how to get it.)}% +\message{#===============================================================#}% +%% +%% This code runs the LaTeX \ProvidesPackage command iff it is defined. +%% included at the request of Michael Downes <mjd@ams.org> March 2002. +%% Put \listfiles in your LaTeX preamble to see the effect. +\expandafter\ifx\csname ProvidesPackage\endcsname\relax\toks0=\expandafter{% +\fi\ProvidesPackage{diagrams}[2004/04/11 v3.90 Paul Taylor's commutative +diagrams]%% +\toks0=\bgroup}%% +%%======================================================================% +%% TeX macros for drawing category-theoretic diagrams % +%% % +%% Paul Taylor % +%% % +%% www.ctan.org/tex-archive/macros/generic/diagrams/taylor % +%% www.cs.man.ac.uk/~pt/diagrams % +%% % +%% PLEASE READ THE MANUAL! % +%% % +%% Please ensure that you are registered with me as a user so that % +%% you can be informed of future releases. Any electronic mail % +%% message with "commutative" or "diagram" in the subject line % +%% (such as your request for the package, a question about it, or % +%% even an otherwise blank message) automatically registers you. % +%% % +%% % +%% CONTENTS: % +%% (O) corruption-sensitive hacks (to approx line 328) % +%% Arrow components & commands - starts approx line 1240 % +%% (22) auxillary macros for adjustment of components % +%% (23) bits of arrows (\rhvee etc) % +%% (24) arrow commands (\rTo etc) % +%% (25) miscellaneous % +%% Apart from these five sections, the rest is intended to be totally % +%% meaningless in the undocumented version, which is approximately % +%% 1910 lines long. Please do not waste trees by printing it out. % +%% % +%% COPYRIGHT NOTICE: % +%% This package may be copied and used freely for any academic % +%% (not commercial or military) purpose, on condition that it % +%% is not altered in any way, and that an acknowledgement is % +%% included in any published work making substantial use of it. % +%% % +%% IT IS SUPPLIED "AS IS", WITHOUT WARRANTY, EXPRESS OR IMPLIED. % +%% % +%% If you are doing something where mistakes cost money (or where % +%% success brings financial profit) then you must use commercial % +%% software, not this package. In any case, please remember to % +%% keep several backup copies of all files, and check everything % +%% visually before sending final copy to the publishers. % +%% % +%% You may use this package as a (substantial) aid to writing an % +%% academic research or text book on condition that % +%% (i) you contact me at a suitable time to ensure that you have % +%% an up-to-date version (and any infelicities can be fixed), % +%% (ii) you send me a copy of the book when it's published. % +%% % +%% HISTORY % +%% 3.90 Released 11 April 2004 % +%% use PostScript=Rokicki not pure DVI by default % +%% 3.89 Released 7 July 2002 % +%% Added support for pdftex, which is recognised automatically. % +%% 3.88 Released 1 September 2000 % +%% Square hook tail: \newarrow{SquareInto}{sqhook}---> % +%% 3.87 Released 1 September 1999 % +%% This version was used for the final 1200dpi PS copy of my book % +%% ``Practical Foundations of Mathematics'' (Cambridge Univ Press) % +%% see http://www.dcs.qmw.ac.uk/~pt/Practical_Foundations % +%% 3.86 Released 1 September 1998 % +%% New options hug and nohug in PostScript mode: [PS,nohug] uses % +%% PS for the arrows without rotating the labels, but the way of % +%% calculating the actual position of these horizontal labels on % +%% will remain subject to alteration for some period of time --- % +%% please send me examples if you feel that adjustment is needed. % +%% % +%% Suppress indentation of following text (due to LaTeX change) % +%% Mangle \left@label and \right@label (conflict with Elsevier). % +%% midvshaft and snake for vertical arrows % +%% New option [gap=width] (default=shortfall) to use instead of % +%% ~{\;} on horizontals and PS diagonals, as this caused ^ and _ % +%% labels to be moved too far away from the shaft. % +%% Added >-> and <-< heads and tails, same as >> and << but the % +%% shaft goes *through* the extra arrowhead. % +%% 3.85 Released 20 August 1997 % +%% New option [crab=distance] shifts horizontals and PS diagonals % +%% transversally by the specified distance (positive=upward). % +%% New option [snake=distance] shifts midshaft horizontals and % +%% PS diagonals longitudinally by the specified distance. % +%% New option [leftflush], like [flushleft] but reckons alignment % +%% from multiple verticals, or from text if there's no vertical. % +%% Most of the history has been suppressed from the user version. % +%% 3.83 Released 18 May 1995 % +%% "dotted" option (set dot filler on maps) % +%% Parallel maps (\pile) outside diagrams stretch correctly. % +%% Option "LaTeXeqno" uses LaTeX's equation number and style % +%% for "eqno"; LaTeX's \label command picks this up. % +%% Suppress warnings & 2nd pass errors with "silent" option. % +%% 3.81 Second alpha release 18 July 1994 % +%% \overprint{text} sets text in maths and overprints it in the % +%% current cell, centered in the column irrespective of other stuff% +%% "repositionpullbacks" option uses this for \SEpbk etc % +%% \newdiagramgrid declaration, grid option and pentagon grid. % +%% 3.80 Alpha release for adjusted diagonals 15 July 1994. % +%% Introduced landscape and portrait options. % +%% Diagonals adjusted to meet their endpoints, at last!!!! % +%% 3.28 Released 30 November 1993 % +%% Peter Freyd's \puncture symbol provided. % +%% 3.25 Released 30 January 1993 % +%% LaTeX heads made default (unless \tenln undefined, when vee) % +%% Circle, cross, little vee, little black triangle heads. % +%% First-use warning when defaulted diagonal components are used. % +%% AMSTEX emulation - works at least when amstex not present. % +%% 3.24 Release 7 Sept 1992 advertised to users. % +%% PostScript option introduced: % +%% LaTeX, vee, curlyvee, triangle & blacktriangle heads & tails % +%% TPIC option introduced as an alternative to \LaTeX@make@line. % +%% Postscript arrows (basic code). % +%% Implemented \newarrow \newarrowhead etc. % +%% Horizontal arrows outside diagram can stretch by wordspacing. % +%% Added < and > for labels on left and right of arrow; % +%% 3.16 (20.7.90) as mass mailed; only have mangled version % +%% -- all following version numbers are post-facto -- % +%% 3 (Jan 90) stretching vertical arrows % +%% 2 (Sept 89) horizontals stretch to objects; "superscript" labels % +%% 1 (1987) horizontal arrows stretch to edge of cell % +%% 0 (1986) implementation of Knuth's TeXercise 18.46 for my thesis % +%%======================================================================% + +%%======================================================================% +%% % +%% (1) CORRUPTION-SENSITIVE HACKS % +%% % +%%======================================================================% + +%% CORRUPTION & \catcode WARNING + +%% BITNET (IBM) machines may corrupt certain important characters +%% in transmission by electronic mail: +%% 0123456789=digits, abcdefghijklmnopqrstuvwxyz=lowers, +%% ABCDEFGHIJKLMNOPQRSTUVWXYZ=uppers, @=at (internal names), +%% {}=curly braces (grouping), \=backslash (keywords), +%% %=percent (comment), #=hash/sharp (argument), +=plus, -=minus, +%% <>=angle brackets (relations \ifnum,\ifdim), ==equals, +%% ,=comma, .=dot, :=colon, ;=semicolon, =space +%% $=dollar (maths) is only used in the "bits of maps" section + +%% The following characters are marked by a comment including the word "ASCII", +%% except in comments and messages: +%% &=and (alignment), ~=tilde, |=vertical, []=square brackets, +%% ^=caret (superscript), _=underline (subscript), +%% `=grave/backquote (catcodes), '=acute/single quote (octal), +%% "=double quote (hex), ()=round brackets, +%% /=slash, ?=query, !=pling/bang, + +%% The \catcode's marked * are assumed for reading this file: +%% \=0* {=1* }=2* $=3 &=4 return=5* #=6 ^=7 _=8 ignored=9* +%% space=10* letter=11* other=12 active=13 %=14* invalid=15 +%% If you want to load this package inside Stallman's "texinfo", you must do +%%% @catcode`@\=0 \catcode`\%=14 \input diagrams \catcode`\%=12 \catcode`\\=13 +%% and then use @diagram @rTo @\ @enddiagram etc. (braces {} stay the same). +%% Also need @catcode`@&=4. + +%%*** You *MUST NOT* use the internal commands (with names beginning \CD@)**** +%% don't load me twice! +\ifx\diagram\undefined\else\message{WARNING: the \string\diagram\space command +is already defined and will not be loaded again}\expandafter\endinput\fi + +%% make @ letter, saving its old code to restore at the end of this file +%%% look for this on the last line of the file if you think something's missing! +%% the other \catcode assignments are to make it work with texinfo. +\edef\cdrestoreat{%% +\noexpand\catcode\lq\noexpand\@=\the\catcode\lq\@%% +\noexpand\catcode\lq\noexpand\#=\the\catcode\lq\#%% +\noexpand\catcode\lq\noexpand\$=\the\catcode\lq\$%% +\noexpand\catcode\lq\noexpand\<=\the\catcode\lq\<%% +\noexpand\catcode\lq\noexpand\>=\the\catcode\lq\>%% +\noexpand\catcode\lq\noexpand\:=\the\catcode\lq\:%% Johannes L. Braams's +\noexpand\catcode\lq\noexpand\;=\the\catcode\lq\;%% Babel languages package +\noexpand\catcode\lq\noexpand\!=\the\catcode\lq\!%% makes these \active. +\noexpand\catcode\lq\noexpand\?=\the\catcode\lq\?%% +\noexpand\catcode\lq\noexpand\+=\the\catcode\rq53% +%% texinfo @+ is @outer@active +}\catcode\lq\@=11 \catcode\lq\#=6 \catcode\lq\<=12 \catcode\lq\>=12 \catcode +\rq53=12 \catcode\lq\:=12 \catcode\lq\;=12 \catcode\lq\!=12 \catcode\lq\?=12 + +%% Change y to n if pool_size in your implementation of TeX is small. +%% This is reasonable if you have a small ("personal") computer, but if you +%%% have a sun, dec, hp, ... workstation or a mainframe, complain to your local +%% system manager and get him/her to install a version of TeX with bigger +%% parameters. The "hash size" (number of command names) gets you next. +\ifx\diagram@help@messages\undefined\let\diagram@help@messages y\fi + +%% The following macro is used to include literal PostScript commands in the +%% DVI file for rotation, etc. Since this goes beyond standard TeX, it is +%%% dependent on the convention used by your local DVI-to-PostScript translator. +%% Choose whichever line applies to the program used at your site, or, if +%% yours is not listed, consult the manual, experiment with this macro and +%% (please) tell me what is needed to make it work. +%% +%% +%%% dvips (Tomas Rokicki, Radical Eye) labrea.stanford.edu /pub/dvips9999.tar.Z +%% CTAN: dviware/dvips +\def\cdps@Rokicki#1{\special{ps:#1}}\let\cdps@dvips\cdps@Rokicki\let +\cdps@RadicalEye\cdps@Rokicki\let\CD@IK\cdps@Rokicki\let\CD@HB\cdps@Rokicki +%% +%% I'm not sure that the rest work. +%% +%% dvitps (Stephan Bechtolsheim, Integrated Computer Systems) +%% arthur.cs.purdue.edu /pub/TeXPS-9.99.tar.Z +\def\cdps@Bechtolsheim#1{\special{dvitps: Literal "#1"}}% +%% ASCII two dbl quotes +\let\cdps@dvitps\cdps@Bechtolsheim\let\cdps@IntegratedComputerSystems +\cdps@Bechtolsheim%% +%% dvitops (James Clark) +%% CTAN: dviware/dvitops +\def\cdps@Clark#1{\special{dvitops: inline #1}}%% +\let\cdps@dvitops\cdps@Clark%% +%% OzTeX (Andrew Trevorrow) cannot be used +\let\cdps@OzTeX\empty\let\cdps@oztex\empty\let\cdps@Trevorrow\empty%% +%% dvi3ps (Kevin Coombes) +%% CTAN: dviware/dvi2ps/dvi3ps +\def\cdps@Coombes#1{\special{ps-string #1}}%% +%% psprint (Trevorrow) CTAN: dviware/psprint +%% dvi2ps (Senn) CTAN: dviware/dvi2ps +%% psdvi (Elwell) CTAN: dviware/dvi2ps/psdvi + +\count@=\year\multiply\count@12 \advance\count@\month%% +\ifnum\count@>24080 %% (August 2006) +\message{***********************************************************}%%ascii +\message{! YOU HAVE AN OUT OF DATE VERSION OF COMMUTATIVE DIAGRAMS! *}%% +\message{! it expired in December 2004 and is time-bombed for January *}%% +\message{! You may get an up to date version of this package from *}%%ascii +\message{! ftp://ftp.dcs.qmw.ac.uk/pub/tex/contrib/pt/diagrams/ *}%% +\message{***********************************************************}%%ascii +\ifnum\count@>24083 %% (November 2006) +\errhelp{You may press RETURN and carry on for the time being.}\message{! It +is embarrassing to see papers in conference proceedings}\message{! and +journals containing bugs which I had fixed years before.}\message{! It is easy +to obtain and install a new version, which will}\errmessage{! remain +compatible with your files. Please get it NOW.}\fi\fi + +\def\CD@DE{\global\let}\def\CD@RH{\outer\def} + +%% safe names for braces, tab (&) and maths ($), as commands and for messages +{\escapechar\m@ne\xdef\CD@o{\string\{}\xdef\CD@yC{\string\}}%% +%% +%% three ASCII ampersands (ands) (&&&) appear on the next line +\catcode\lq\&=4 \CD@DE\CD@Q=&\xdef\CD@S{\string\&}%%ascii three ands +%% +%% ASCII ^ and _ each appear twice on next line +%% six ASCII dollars ($$$$$$) appear on the next two lines. +\catcode\lq\$=3 \CD@DE\CD@k=$\CD@DE\CD@ND=$%%ascii three dollars +\xdef\CD@nC{\string\$}\gdef\CD@LG{$$}%%ascii three dollars +%% +%% two ASCII underlines (__) appear on the next line. +\catcode\lq\_=8 \CD@DE\CD@lJ=_%%ascii two underlines +%% +%% eight ASCII carets (^^^^^^^^) appear on the next three lines. +\obeylines\catcode\lq\^=7 \CD@DE\@super=^%%ascii two carets +\ifnum\newlinechar=10 \gdef\CD@uG{^^J}%%ascii two carets +\else\ifnum\newlinechar=13 \gdef\CD@uG{^^M}%%ascii two carets +\else\ifnum\newlinechar=-1 \gdef\CD@uG{^^J}%%ascii two carets +\else\CD@DE\CD@uG\space\expandafter\message{! input error: \noexpand +\newlinechar\space is ASCII \the\newlinechar, not LF=10 or CR=13.}%% +\fi\fi\fi}%% + +%% avoid using <> (because I personally re-define them to mean \langle\rangle) +\mathchardef\lessthan=\rq30474 \mathchardef\greaterthan=\rq30476 + +%% LaTeX line and arrowhead font +%% the "hit return" comments show up if the font is missing. +\ifx\tenln\undefined%% +\font\tenln=line10\relax%% Hit return - who needs diagonals? +\fi\ifx\tenlnw\undefined\ifx\tenln\nullfont\let\tenlnw\nullfont\else%% +\font\tenlnw=linew10\relax%% Hit return - who needs diagonals? +\fi\fi%% + +%% report line numbers in TeX3 only +\ifx\inputlineno\undefined\csname newcount\endcsname\inputlineno\inputlineno +\m@ne\message{***************************************************}\message{! +Obsolete TeX (version 2). You should upgrade to *}\message{! version 3, which +has been available since 1990. *}\message{***********************************% +****************}\fi + +\def\cd@shouldnt#1{\CD@KB{* THIS (#1) SHOULD NEVER HAPPEN! *}} + +%% turn round- and square-bracketed arguments into curly-bracketed +\def\get@round@pair#1(#2,#3){#1{#2}{#3}}%%ascii round brackets () +\def\get@square@arg#1[#2]{#1{#2}}%%ascii square brackets [] +\def\CD@AE#1{\CD@PK\let\CD@DH\CD@@E\CD@@E#1,],}%%ascii sq brackets +\def\CD@m{[}\def\CD@RD{]}\def\commdiag#1{{\let\enddiagram\relax\diagram[]#1% +\enddiagram}} + +%% ASCII open square bracket occurs on next line +\def\CD@BF{{\ifx\CD@EH[\aftergroup\get@square@arg\aftergroup\CD@YH\else +\aftergroup\CD@JH\fi}}%% +\def\CD@CF#1#2{\def\CD@YH{#1}\def\CD@JH{#2}\futurelet\CD@EH\CD@BF} + +%% ASCII vertical bar (|) occurs on the next line +\def\CD@KK{|} + +\def\CD@PB{%% arguments to maps inside diagrams +\tokcase\CD@DD:\CD@y\break@args;\catcase\@super:\upper@label;\catcase\CD@lJ:% +\lower@label;\tokcase{~}:\middle@label;%%ascii tilde +\tokcase<:\CD@iF;%%ascii less-than +\tokcase>:\CD@iI;%%ascii greater-than +\tokcase(:\CD@BC;%%)%ascii open round bracket +\tokcase[:\optional@;%%]%ascii open square bracket +\tokcase.:\CD@JJ;%%ascii dot 12.7.94 +\catcase\space:\eat@space;\catcase\bgroup:\positional@;\default:\CD@@A +\break@args;\endswitch} + +\def\switch@arg{%% arguments to horizontal maps outside diagrams +\catcase\@super:\upper@label;\catcase\CD@lJ:\lower@label;\tokcase[:\optional@ +;%%]%ascii open square bracket +\tokcase.:\CD@JJ;%%ascii dot 12.7.94 % ; was : before 15.6.97 +\catcase\space:\eat@space;\catcase\bgroup:\positional@;\tokcase{~}:% +\middle@label;%%ascii tilde (questionable!) +\default:\CD@y\break@args;\endswitch} + +%% That's as much as you get to read "in clear" - the rest is private! + +\let\CD@tJ\relax\ifx\protect\undefined\let\protect\relax\fi\ifx\AtEndDocument +\undefined\def\CD@PG{\CD@gB}\def\CD@GF#1#2{}\else\def\CD@PG#1{\edef\CD@CH{#1}% +\expandafter\CD@oC\CD@CH\CD@OD}\def\CD@oC#1\CD@OD{\AtEndDocument{\typeout{% +\CD@tA: #1}}}\def\CD@GF#1#2{\gdef#1{#2}\AtEndDocument{#1}}\fi\def\CD@ZA#1#2{% +\def#1{\CD@PG{#2\CD@mD\CD@W}\CD@DE#1\relax}}\def\CD@uF#1\repeat{\def\CD@p{#1}% +\CD@OF}\def\CD@OF{\CD@p\relax\expandafter\CD@OF\fi}\def\CD@sF#1\repeat{\def +\CD@q{#1}\CD@PF}\def\CD@PF{\CD@q\relax\expandafter\CD@PF\fi}\def\CD@tF#1% +\repeat{\def\CD@r{#1}\CD@QF}\def\CD@QF{\CD@r\relax\expandafter\CD@QF\fi}\def +\CD@tG#1#2#3{\def#2{\let#1\iftrue}\def#3{\let#1\iffalse}#3}\if y% +\diagram@help@messages\def\CD@rG#1#2{\csname newtoks\endcsname#1#1=% +\expandafter{\csname#2\endcsname}}\else\csname newtoks\endcsname\no@cd@help +\no@cd@help{See the manual}\def\CD@rG#1#2{\let#1\no@cd@help}\fi\chardef\CD@lF +=1 \chardef\CD@lI=2 \chardef\CD@MH=5 \chardef\CD@tH=6 \chardef\CD@sH=7 +\chardef\CD@PC=9 \dimendef\CD@hI=2 \dimendef\CD@hF=3 \dimendef\CD@mF=4 +\dimendef\CD@mI=5 \dimendef\CD@wJ=6 \dimendef\CD@tI=8 \dimendef\CD@sI=9 +\skipdef\CD@uB=1 \skipdef\CD@NF=2 \skipdef\CD@tB=3 \skipdef\CD@ZE=4 \skipdef +\CD@JK=5 \skipdef\CD@kI=6 \skipdef\CD@kF=7 \skipdef\CD@qI=8 \skipdef\CD@pI=9 +\countdef\CD@JC=9 \countdef\CD@gD=8 \countdef\CD@A=7 \def\sdef#1#2{\def#1{#2}% +}\def\CD@L#1{\expandafter\aftergroup\csname#1\endcsname}\def\CD@RC#1{% +\expandafter\def\csname#1\endcsname}\def\CD@sD#1{\expandafter\gdef\csname#1% +\endcsname}\def\CD@vC#1{\expandafter\edef\csname#1\endcsname}\def\CD@nF#1#2{% +\expandafter\let\csname#1\expandafter\endcsname\csname#2\endcsname}\def\CD@EE +#1#2{\expandafter\CD@DE\csname#1\expandafter\endcsname\csname#2\endcsname}% +\def\CD@AK#1{\csname#1\endcsname}\def\CD@XJ#1{\expandafter\show\csname#1% +\endcsname}\def\CD@ZJ#1{\expandafter\showthe\csname#1\endcsname}\def\CD@WJ#1{% +\expandafter\showbox\csname#1\endcsname}\def\CD@tA{Commutative Diagram}\edef +\CD@kH{\string\par}\edef\CD@dC{\string\diagram}\edef\CD@HD{\string\enddiagram +}\edef\CD@EC{\string\\}\def\CD@eF{LaTeX}\ifx\@ignoretrue\undefined +\expandafter\CD@tG\csname if@ignore\endcsname\ignore@true\ignore@false\def +\@ignoretrue{\global\ignore@true}\def\@ignorefalse{\global\ignore@false}\fi + +\def\CD@g{{\ifnum0=\lq}\fi}\def\CD@wC{\ifnum0=\lq{\fi}}\def\catcase#1:{\ifcat +\noexpand\CD@EH#1\CD@tJ\expandafter\CD@kC\else\expandafter\CD@dJ\fi}\def +\tokcase#1:{\ifx\CD@EH#1\CD@tJ\expandafter\CD@kC\else\expandafter\CD@dJ\fi}% +\def\CD@kC#1;#2\endswitch{#1}\def\CD@dJ#1;{}\let\endswitch\relax\def\default:% +#1;#2\endswitch{#1}\ifx\at@\undefined\def\at@{@}\fi\edef\CD@P{\CD@o pt\CD@yC}% +\CD@RC{\CD@P>}#1>#2>{\CD@z\rTo\sp{#1}\sb{#2}\CD@z}\CD@RC{\CD@P<}#1<#2<{\CD@z +\lTo\sp{#1}\sb{#2}\CD@z}\CD@RC{\CD@P)}#1)#2){\CD@z\rTo\sp{#1}\sb{#2}\CD@z}% +%%ascii round +\CD@RC{\CD@P(}#1(#2({\CD@z\lTo\sp{#1}\sb{#2}\CD@z}%%ascii brack +\def\CD@O{\def\endCD{\enddiagram}\CD@RC{\CD@P A}##1A##2A{\uTo<{##1}>{##2}% +\CD@z\CD@z}\CD@RC{\CD@P V}##1V##2V{\dTo<{##1}>{##2}\CD@z\CD@z}\CD@RC{\CD@P=}{% +\CD@z\hEq\CD@z}\CD@RC{\CD@P\CD@KK}{\vEq\CD@z\CD@z}\CD@RC{\CD@P\string\vert}{% +\vEq\CD@z\CD@z}\CD@RC{\CD@P.}{\CD@z\CD@z}\let\CD@z\CD@Q}\def\CD@IE{\let\tmp +\CD@JE\ifcat A\noexpand\CD@CH\else\ifcat=\noexpand\CD@CH\else\ifcat\relax +\noexpand\CD@CH\else\let\tmp\at@\fi\fi\fi\tmp}\def\CD@JE#1{\CD@nF{tmp}{\CD@P +\string#1}\ifx\tmp\relax\def\tmp{\at@#1}\fi\tmp}\def\CD@z{}\begingroup +\aftergroup\def\aftergroup\CD@T\aftergroup{\aftergroup\def\catcode\lq\@% +\active\aftergroup @\endgroup{\futurelet\CD@CH\CD@IE}}\newcount\CD@uA +\newcount\CD@vA\newcount\CD@wA\newcount\CD@xA\newdimen\CD@OA\newdimen\CD@PA +\CD@tG\CD@gE\CD@@A\CD@y\CD@tG\CD@hE\CD@EA\CD@BA\newdimen\CD@RA\newdimen\CD@SA +\newcount\CD@yA\newcount\CD@zA\newdimen\CD@QA\newbox\CD@DA\CD@tG\CD@lE\CD@dA +\CD@bA\newcount\CD@LH\newcount\CD@TC\def\CD@V#1#2{\ifdim#1<#2\relax#1=#2% +\relax\fi}\def\CD@X#1#2{\ifdim#1>#2\relax#1=#2\relax\fi}\newdimen\CD@XH\CD@XH +=1sp \newdimen\CD@zC\CD@zC\z@\def\CD@cJ{\ifdim\CD@zC=1em\else\CD@nJ\fi}\def +\CD@nJ{\CD@zC1em\def\CD@NC{\fontdimen8\textfont3 }\CD@@J\CD@NJ\setbox0=\vbox{% +\CD@t\noindent\CD@k\null\penalty-9993\null\CD@ND\null\endgraf\setbox0=% +\lastbox\unskip\unpenalty\setbox1=\lastbox\global\setbox\CD@IG=\hbox{\unhbox0% +\unskip\unskip\unpenalty\setbox0=\lastbox}\global\setbox\CD@KG=\hbox{\unhbox1% +\unskip\unpenalty\setbox1=\lastbox}}}\newdimen\CD@@I\CD@@I=1true in \divide +\CD@@I300 \def\CD@zH#1{\multiply#1\tw@\advance#1\ifnum#1<\z@-\else+\fi\CD@@I +\divide#1\tw@\divide#1\CD@@I\multiply#1\CD@@I}\def\MapBreadth{% +\afterassignment\CD@gI\CD@LF}\newdimen\CD@LF\newdimen\CD@oI\def\CD@gI{\CD@oI +\CD@LF\CD@V\CD@@I{4\CD@XH}\CD@X\CD@@I\p@\CD@zH\CD@oI\ifdim\CD@LF>\z@\CD@V +\CD@oI\CD@@I\fi\CD@cJ}\def\CD@RJ#1{\CD@zD\count@\CD@@I#1\ifnum\count@>\z@ +\divide\CD@@I\count@\fi\CD@gI\CD@NJ}\def\CD@NJ{\dimen@\CD@QC\count@\dimen@ +\divide\count@5\divide\count@\CD@@I\edef\CD@OC{\the\count@}}\def\CD@AJ{\CD@QJ +\z@}\def\CD@QJ#1{\CD@tI\axisheight\advance\CD@tI#1\relax\advance\CD@tI-.5% +\CD@oI\CD@zH\CD@tI\CD@sI-\CD@tI\advance\CD@tI\CD@LF}\newdimen\CD@DC\CD@DC\z@ +\newdimen\CD@eJ\CD@eJ\z@\def\CD@CJ#1{\CD@sI#1\relax\CD@tI\CD@sI\advance\CD@tI +\CD@LF\relax}\def\horizhtdp{height\CD@tI depth\CD@sI}\def\axisheight{% +\fontdimen22\the\textfont\tw@}\def\script@axisheight{\fontdimen22\the +\scriptfont\tw@}\def\ss@axisheight{\fontdimen22\the\scriptscriptfont\tw@}\def +\CD@NC{0.4pt}\def\CD@VK{\fontdimen3\textfont\z@}\def\CD@UK{\fontdimen3% +\textfont\z@}\newdimen\PileSpacing\newdimen\CD@nA\CD@nA\z@\def\CD@RG{% +\ifincommdiag1.3em\else2em\fi}\newdimen\CD@YB\def\CellSize{\afterassignment +\CD@kB\DiagramCellHeight}\newdimen\DiagramCellHeight\DiagramCellHeight-% +\maxdimen\newdimen\DiagramCellWidth\DiagramCellWidth-\maxdimen\def\CD@kB{% +\DiagramCellWidth\DiagramCellHeight}\def\CD@QC{3em}\newdimen\MapShortFall\def +\MapsAbut{\MapShortFall\z@\objectheight\z@\objectwidth\z@}\newdimen\CD@iA +\CD@iA\z@\def\newarrowhead{\CD@mG h\CD@BG\CD@GG>}\def\newarrowtail{\CD@mG t% +\CD@BG\CD@GG>}\def\newarrowmiddle{\CD@mG m\CD@BG\hbox@maths\empty}\def +\newarrowfiller{\CD@mG f\CD@bE\CD@MK-}\def\CD@mG#1#2#3#4#5#6#7#8#9{\CD@RC{r#1% +:#5}{#2{#6}}\CD@RC{l#1:#5}{#2{#7}}\CD@RC{d#1:#5}{#3{#8}}\CD@RC{u#1:#5}{#3{#9}% +}\CD@vC{-#1:#5}{\expandafter\noexpand\csname-#1:#4\endcsname\noexpand\CD@MC}% +\CD@vC{+#1:#5}{\expandafter\noexpand\csname+#1:#4\endcsname\noexpand\CD@MC}}% +\CD@ZA\CD@MC{\CD@eF\space diagonals are used unless PostScript is set}\def +\defaultarrowhead#1{\edef\CD@sJ{#1}\CD@@J}\def\CD@@J{\CD@IJ\CD@sJ<>ht\CD@IJ +\CD@sJ<>th}\def\CD@IJ#1#2#3#4#5{\CD@HJ{r#4}{#3}{l#5}{#2}{r#4:#1}\CD@HJ{r#5}{#% +2}{l#4}{#3}{l#4:#1}\CD@HJ{d#4}{#3}{u#5}{#2}{d#4:#1}\CD@HJ{d#5}{#2}{u#4}{#3}{u% +#4:#1}}\def\CD@HJ#1#2#3#4#5{\begingroup\aftergroup\CD@GJ\CD@L{#1+:#2}\CD@L{#1% +:#2}\CD@L{#3:#4}\CD@L{#5}\endgroup}\def\CD@GJ#1#2#3#4{\csname newbox% +\endcsname#1\def#2{\copy#1}\def#3{\copy#1}\setbox#1=\box\voidb@x}\def\CD@sJ{}% +\CD@@J\def\CD@GJ#1#2#3#4{\setbox#1=#4}\ifx\tenln\nullfont\def\CD@sJ{vee}\else +\let\CD@sJ\CD@eF\fi\def\CD@xF#1#2#3{\begingroup\aftergroup\CD@wF\CD@L{#1#2:#3% +#3}\CD@L{#1#2:#3}\aftergroup\CD@yF\CD@L{#1#2:#3-#3}\CD@L{#1#2:#3}\endgroup}% +\def\CD@wF#1#2{\def#1{\hbox{\rlap{#2}\kern.4\CD@zC#2}}}\def\CD@yF#1#2{\def#1{% +\hbox{\rlap{#2}\kern.4\CD@zC#2\kern-.4\CD@zC}}}\CD@xF lh>\CD@xF rt>\CD@xF rh<% +\CD@xF rt<\def\CD@yF#1#2{\def#1{\hbox{\kern-.4\CD@zC\rlap{#2}\kern.4\CD@zC#2}% +}}\CD@xF rh>\CD@xF lh<\CD@xF lt>\CD@xF lt<\def\CD@wF#1#2{\def#1{\vbox{\vbox to% +\z@{#2\vss}\nointerlineskip\kern.4\CD@zC#2}}}\def\CD@yF#1#2{\def#1{\vbox{% +\vbox to\z@{#2\vss}\nointerlineskip\kern.4\CD@zC#2\kern-.4\CD@zC}}}\CD@xF uh>% +\CD@xF dt>\CD@xF dh<\CD@xF dt<\def\CD@yF#1#2{\def#1{\vbox{\kern-.4\CD@zC\vbox +to\z@{#2\vss}\nointerlineskip\kern.4\CD@zC#2}}}\CD@xF dh>\CD@xF ut>\CD@xF uh<% +\CD@xF ut<\def\CD@BG#1{\hbox{\mathsurround\z@\offinterlineskip\CD@k\mkern-1.5% +mu{#1}\mkern-1.5mu\CD@ND}}\def\hbox@maths#1{\hbox{\CD@k#1\CD@ND}}\def\CD@GG#1% +{\hbox to\CD@LF{\setbox0=\hbox{\offinterlineskip\mathsurround\z@\CD@k{#1}% +\CD@ND}\dimen0.5\wd0\advance\dimen0-.5\CD@oI\CD@zH{\dimen0}\kern-\dimen0% +\unhbox0\hss}}\def\CD@sB#1{\hbox to2\CD@LF{\hss\offinterlineskip\mathsurround +\z@\CD@k{#1}\CD@ND\hss}}\def\CD@vF#1{\hbox{\mathsurround\z@\CD@k{#1}\CD@ND}}% +\def\CD@bE#1{\hbox{\kern-.15\CD@zC\CD@k{#1}\CD@ND\kern-.15\CD@zC}}\def\CD@MK#% +1{\vbox{\offinterlineskip\kern-.2ex\CD@GG{#1}\kern-.2ex}}\def\@fillh{% +\xleaders\vrule\horizhtdp}\def\@fillv{\xleaders\hrule width\CD@LF}\CD@nF{rf:-% +}{@fillh}\CD@nF{lf:-}{@fillh}\CD@nF{df:-}{@fillv}\CD@nF{uf:-}{@fillv}\CD@nF{% +rh:}{null}\CD@nF{rm:}{null}\CD@nF{rt:}{null}\CD@nF{lh:}{null}\CD@nF{lm:}{null% +}\CD@nF{lt:}{null}\CD@nF{dh:}{null}\CD@nF{dm:}{null}\CD@nF{dt:}{null}\CD@nF{% +uh:}{null}\CD@nF{um:}{null}\CD@nF{ut:}{null}\CD@nF{+h:}{null}\CD@nF{+m:}{null% +}\CD@nF{+t:}{null}\CD@nF{-h:}{null}\CD@nF{-m:}{null}\CD@nF{-t:}{null}\def +\CD@@D{\hbox{\vrule height 1pt depth-1pt width 1pt}}\CD@RC{rf:}{\CD@@D}\CD@nF +{lf:}{rf:}\CD@nF{+f:}{rf:}\CD@RC{df:}{\CD@@D}\CD@nF{uf:}{df:}\CD@nF{-f:}{df:}% +\def\CD@BD{\CD@U\null\CD@@D\null\CD@@D\null}\edef\CD@lG{\string\newarrow}\def +\newarrow#1#2#3#4#5#6{\begingroup\edef\@name{#1}\edef\CD@oJ{#2}\edef\CD@iD{#3% +}\edef\CD@QG{#4}\edef\CD@jD{#5}\edef\CD@LE{#6}\let\CD@HE\CD@sG\let\CD@FK +\CD@BH\let\@x\CD@AH\ifx\CD@oJ\CD@iD\let\CD@oJ\empty\fi\ifx\CD@LE\CD@jD\let +\CD@LE\empty\fi\def\CD@LI{r}\def\CD@SF{l}\def\CD@IC{d}\def\CD@yJ{u}\def\CD@gH +{+}\def\@m{-}\ifx\CD@iD\CD@jD\ifx\CD@QG\CD@iD\let\CD@QG\empty\fi\ifx\CD@LE +\empty\ifx\CD@iD\CD@aE\let\@x\CD@yG\else\let\@x\CD@zG\fi\fi\else\edef\CD@a{% +\CD@iD\CD@oJ}\ifx\CD@a\empty\ifx\CD@QG\CD@jD\let\CD@QG\empty\fi\fi\fi\ifmmode +\aftergroup\CD@kG\else\CD@@A\CD@oB rh{head\space\space}\CD@LE\CD@oB rf{filler% +}\CD@iD\CD@oB rm{middle}\CD@QG\ifx\CD@jD\CD@iD\else\CD@oB rf{filler}\CD@jD\fi +\CD@oB rt{tail\space\space}\CD@oJ\CD@gE\CD@HE\CD@FK\@x\CD@nG l-2+2{lu}{nw}% +\NorthWest\CD@nG r+2+2{ru}{ne}\NorthEast\CD@nG l-2-2{ld}{sw}\SouthWest\CD@nG r% ++2-2{rd}{se}\SouthEast\else\aftergroup\CD@b\CD@L{r\@name}\fi\fi\endgroup}\def +\CD@sG{\CD@vG\CD@LI\CD@SF rl\Horizontal@Map}\def\CD@BH{\CD@vG\CD@IC\CD@yJ du% +\Vertical@Map}\def\CD@AH{\CD@vG\CD@gH\@m+-\Vector@Map}\def\CD@yG{\CD@vG\CD@gH +\@m+-\Slant@Map}\def\CD@zG{\CD@vG\CD@gH\@m+-\Slope@Map}\catcode\lq\/=\active +\def\CD@vG#1#2#3#4#5{\CD@jG#1#3#5t:\CD@oJ/f:\CD@iD/m:\CD@QG/f:\CD@jD/h:\CD@LE +//\CD@jG#2#4#5h:\CD@LE/f:\CD@jD/m:\CD@QG/f:\CD@iD/t:\CD@oJ//}\def\CD@jG#1#2#3% +#4//{\edef\CD@fG{#2}\aftergroup\sdef\CD@L{#1\@name}\aftergroup{\aftergroup#3% +\CD@M#4//\aftergroup}}\def\CD@M#1/{\edef\CD@EH{#1}\ifx\CD@EH\empty\else\CD@L{% +\CD@fG#1}\expandafter\CD@M\fi}\catcode\lq\/=12 \def\CD@nG#1#2#3#4#5#6#7#8{% +\aftergroup\sdef\CD@L{#6\@name}\aftergroup{\CD@L{#2\@name}\if#2#4\aftergroup +\CD@CI\else\aftergroup\CD@BI\fi\CD@L{#1\@name}% +%% ASCII round brackets and comma (,) appear on the next line +\aftergroup(\aftergroup#3\aftergroup,\aftergroup#5\aftergroup)\aftergroup}}% +\def\CD@oB#1#2#3#4{\expandafter\ifx\csname#1#2:#4\endcsname\relax\CD@y\CD@gB{% +arrow#3 "#4" undefined}\fi}\CD@rG\CD@VE{All five components must be defined +before an arrow.}\CD@rG\CD@SE{\CD@lG, unlike \string\HorizontalMap, is a +declaration.}\def\CD@b#1{\CD@YA{Arrows \string#1 etc could not be defined}% +\CD@VE}\def\CD@kG{\CD@YA{misplaced \CD@lG}\CD@SE}\def\newdiagramgrid#1#2#3{% +\CD@RC{cdgh@#1}{#2,],}%% ASCII close square bracket +\CD@RC{cdgv@#1}{#3,],}}%% ASCII close square bracket +\CD@tG\ifincommdiag\incommdiagtrue\incommdiagfalse\CD@tG\CD@@F\CD@IF\CD@HF +\newcount\CD@VA\CD@VA=0 \def\CD@yH{\CD@VA6 }\def\CD@OB{\CD@VA1 \global\CD@yA1 +\CD@DE\CD@YF\empty}\def\CD@YF{}\def\CD@nB#1{\relax\CD@MD\edef\CD@vJ{#1}% +\begingroup\CD@rE\else\ifcase\CD@VA\ifmmode\else\CD@YG\CD@E0\fi\or\CD@cE5\or +\CD@YG\CD@F5\or\CD@YG\CD@B5\or\CD@YG\CD@B5\or\CD@YG\CD@C5\or\CD@cE7\or\CD@YG +\CD@D7\fi\fi\endgroup\xdef\CD@YF{#1}}\def\CD@pB#1#2#3#4#5{\relax\CD@MD\xdef +\CD@vJ{#4}\begingroup\ifnum\CD@VA<#1 \expandafter\CD@cE\ifcase\CD@VA0\or#2\or +#3\else#2\fi\else\ifnum\CD@VA<6 \CD@tJ\CD@YG\CD@B#2\else\CD@YG\CD@G#2\fi\fi +\endgroup\CD@DE\CD@YF\CD@vJ\ifincommdiag\let\CD@ZD#5\else\let\CD@ZD\CD@LK\fi}% +\def\CD@yI{\global\CD@yA=\ifnum\CD@VA<5 1\else2\fi\relax}\def\CD@OI{\CD@VA +\CD@yA}\def\CD@cE#1{\aftergroup\CD@VA\aftergroup#1\aftergroup\relax}\def +\CD@HH{\def\CD@nB##1{\relax}\let\CD@pB\CD@FH\let\CD@yH\relax\let\CD@OB\relax +\let\CD@yI\relax\let\CD@OI\relax}\def\CD@FH#1#2#3#4#5{\ifincommdiag\let\CD@ZD +#5\else\xdef\CD@vJ{#4}\let\CD@ZD\CD@LK\fi}\def\CD@YG#1{\aftergroup#1% +\aftergroup\relax\CD@cE}\def\CD@B{\CD@YE\CD@S\CD@ME\CD@Q}\def\CD@G{\CD@YE{% +\CD@yC\CD@S}\CD@XE\CD@QD\CD@Q}\def\CD@F{\CD@YE{*\CD@S}\CD@RE\clubsuit\CD@Q}% +\def\CD@C{\CD@YE{\CD@S*\CD@S}\CD@RE\CD@Q\clubsuit\CD@Q}\def\CD@D{\CD@YE\CD@EC +\CD@TE\\}\def\CD@E{\CD@YE\CD@nC\CD@QE\CD@k}\def\CD@LK{\CD@YA{\CD@vJ\space +ignored \CD@dH}\CD@WE}\def\CD@FE{}\def\CD@d{\CD@YA{maps must never be enclosed +in braces}\CD@OE}\def\CD@dH{outside diagram}\def\CD@FC{\string\HonV, \string +\VonH\space and \string\HmeetV}\CD@rG\CD@ME{The way that horizontal and +vertical arrows are terminated implicitly means\CD@uG that they cannot be +mixed with each other or with \CD@FC.}\CD@rG\CD@XE{\string\pile\space is for +parallel horizontal arrows; verticals can just be put together in\CD@uG a cell% +. \CD@FC\space are not meaningful in a \string\pile.}\CD@rG\CD@RE{The +horizontal maps must point to an object, not each other (I've put in\CD@uG one +which you're unlikely to want). Use \string\pile\space if you want them +parallel.}\CD@rG\CD@TE{Parallel horizontal arrows must be in separate layers +of a \string\pile.}\CD@rG\CD@QE{Horizontal arrows may be used \CD@dH s, but +must still be in maths.}\CD@rG\CD@WE{Vertical arrows, \CD@FC\space\CD@dH s don% +'t know where\CD@uG where to terminate.}\CD@rG\CD@OE{This prevents them from +stretching correctly.}\def\CD@YE#1{\CD@YA{"#1" inserted \ifx\CD@YF\empty +before \CD@vJ\else between \CD@YF\ifx\CD@YF\CD@vJ s\else\space and \CD@vJ\fi +\fi}}\count@=\year\multiply\count@12 \advance\count@\month\ifnum\count@>24087 +\message{because this one expired in December 2006!}\expandafter\endinput\fi +\def\Horizontal@Map{\CD@nB{horizontal map}\CD@LC\CD@TJ\CD@qD}\def\CD@TJ{% +\CD@GB-9999 \let\CD@ZD\CD@XD\ifincommdiag\else\CD@cJ\ifinpile\else\skip2\z@ +plus 1.5\CD@VK minus .5\CD@UK\skip4\skip2 \fi\fi\let\CD@kD\@fillh\CD@nF{% +fill@dot}{rf:.}}\def\Vector@Map{\CD@HK4}\def\Slant@Map{\CD@HK{\CD@EF255\else6% +\fi}}\def\Slope@Map{\CD@HK\CD@OC}\def\CD@HK#1#2#3#4#5#6{\CD@LC\def\CD@WK{2}% +\def\CD@aK{2}\def\CD@ZK{1}\def\CD@bK{1}\let\Horizontal@Map\CD@nI\def\CD@OG{#1% +}\def\CD@NI{\CD@U#2#3#4#5#6}}\def\CD@nI{\CD@TJ\CD@JB\let\CD@ZD\CD@TD\CD@qD}% +\CD@tG\CD@pE\CD@rA\CD@qA\CD@rA\def\cds@missives{\CD@rA}\def\CD@TD{\CD@vE\let +\CD@OG\CD@OC\CD@x\CD@zE\CD@WF\fi\setbox0\hbox{\incommdiagfalse\CD@HI}\CD@pE +\CD@aD\else\global\CD@YC\CD@bD\fi\ifvoid6 \ifvoid7 \CD@eE\fi\fi\CD@zE\else +\CD@BD\global\CD@YC\let\CD@CG\CD@IH\CD@YD\fi\else\CD@NI\CD@MI\global\CD@YC +\CD@YD\fi}\def\CD@LC{\begingroup\dimen1=\MapShortFall\dimen2=\CD@RG\dimen5=% +\MapShortFall\setbox3=\box\voidb@x\setbox6=\box\voidb@x\setbox7=\box\voidb@x +\CD@pD\mathsurround\z@\skip2\z@ plus1fill minus 1000pt\skip4\skip2 \CD@TB}% +\CD@tG\CD@tE\CD@UB\CD@TB\def\CD@U#1#2#3#4#5{\let\CD@oJ#1\let\CD@iD#2\let +\CD@QG#3\let\CD@jD#4\let\CD@LE#5\CD@TB\ifx\CD@iD\CD@jD\CD@UB\fi}\def\CD@qD#1#% +2#3#4#5{\CD@U#1#2#3#4#5\CD@tD}\def\Vertical@Map{\CD@pB433{vertical map}\CD@cD +\CD@LC\CD@GB-9995 \let\CD@kD\@fillv\CD@nF{fill@dot}{df:.}\CD@qD}\def +\break@args{\def\CD@tD{\CD@ZD}\CD@ZD\endgroup\aftergroup\CD@FE}\def\CD@MJ{% +\setbox1=\CD@oJ\setbox5=\CD@LE\ifvoid3 \ifx\CD@QG\null\else\setbox3=\CD@QG\fi +\fi\CD@@G2\CD@iD\CD@@G4\CD@jD}\def\CD@pF#1{\ifvoid1\else\CD@oF1#1\fi\ifvoid2% +\else\CD@oF2#1\fi\ifvoid3\else\CD@oF3#1\fi\ifvoid4\else\CD@oF4#1\fi\ifvoid5% +\else\CD@oF5#1\fi} \def\CD@oF#1#2{\setbox#1\vbox{\offinterlineskip\box#1% +\dimen@\prevdepth\advance\dimen@-#2\relax\setbox0\null\dp0\dimen@\ht0-\dimen@ +\box0}}\def\CD@@G#1#2{\ifx#2\CD@kD\setbox#1=\box\voidb@x\else\setbox#1=#2\def +#2{\xleaders\box#1}\fi}\CD@ZA\CD@BK{\string\HorizontalMap, \string +\VerticalMap\space and \string\DiagonalMap\CD@uG are obsolete - use \CD@lG +\space to pre-define maps}\def\HorizontalMap#1#2#3#4#5{\CD@BK\CD@nB{old +horizontal map}\CD@LC\CD@TJ\def\CD@oJ{\CD@UH{#1}}\CD@SH\CD@iD{#2}\def\CD@QG{% +\CD@UH{#3}}\CD@SH\CD@jD{#4}\def\CD@LE{\CD@UH{#5}}\CD@tD}\def\VerticalMap#1#2#% +3#4#5{\CD@BK\CD@pB433{vertical map}\CD@cD\CD@LC\CD@GB-9995 \let\CD@kD\@fillv +\def\CD@oJ{\CD@GG{#1}}\CD@VH\CD@iD{#2}\def\CD@QG{\CD@GG{#3}}\CD@VH\CD@jD{#4}% +\def\CD@LE{\CD@GG{#5}}\CD@tD}\def\DiagonalMap#1#2#3#4#5{\CD@BK\CD@LC\def +\CD@OG{4}\let\CD@kD\undefined\let\CD@ZD\CD@YD\def\CD@WK{2}\def\CD@aK{2}\def +\CD@ZK{1}\def\CD@bK{1}\def\CD@QG{\CD@vF{#3}}\ifPositiveGradient\let\mv\raise +\def\CD@oJ{\CD@vF{#5}}\def\CD@iD{\CD@vF{#4}}\def\CD@jD{\CD@vF{#2}}\def\CD@LE{% +\CD@vF{#1}}\else\let\mv\lower\def\CD@oJ{\CD@vF{#1}}\def\CD@iD{\CD@vF{#2}}\def +\CD@jD{\CD@vF{#4}}\def\CD@LE{\CD@vF{#5}}\fi\CD@tD}\def\CD@aE{-}\def\CD@AD{% +\empty}\def\CD@SH{\CD@EG\CD@bE\CD@aE\@fillh}\def\CD@VH{\CD@EG\CD@MK\CD@KK +\@fillv}\def\CD@EG#1#2#3#4#5{\def\CD@CH{#5}\ifx\CD@CH#2\let#4#3\else\let#4% +\null\ifx\CD@CH\empty\else\ifx\CD@CH\CD@AD\else\let#4\CD@CH\fi\fi\fi}\def +\CD@UH#1{\hbox{\mathsurround\z@\offinterlineskip\def\CD@CH{#1}\ifx\CD@CH +\empty\else\ifx\CD@CH\CD@AD\else\CD@k\mkern-1.5mu{\CD@CH}\mkern-1.5mu\CD@ND +\fi\fi}}\def\CD@yD#1#2{\setbox#1=\hbox\bgroup\setbox0=\hbox{\CD@k\labelstyle(% +)\CD@ND}%% ASCII round brackets +\setbox1=\null\ht1\ht0\dp1\dp0\box1 \kern.1\CD@zC\CD@k\bgroup\labelstyle +\aftergroup\CD@LD\CD@xD}\def\CD@LD{\CD@ND\kern.1\CD@zC\egroup\CD@tD}\def +\CD@xD{\futurelet\CD@EH\CD@mJ}\def\CD@mJ{%% qualifiers on label arguments +\catcase\bgroup:\CD@v;\catcase\egroup:\missing@label;\catcase\space:\CD@TF;% +\tokcase[:\CD@XF;%%]%ascii close square bracket +\default:\CD@zJ;\endswitch}\def\CD@v{\let\CD@MD\CD@c\let\CD@CH}\def\CD@zJ#1{% +\let\CD@UF\egroup{\let\actually@braces@missing@around@macro@in@label\CD@ZH +\let\CD@MD\CD@xC\let\CD@UF\CD@VF#1% +\actually@braces@missing@around@macro@in@label}\CD@UF}\def +\actually@braces@missing@around@macro@in@label{\let\CD@CH=}\def\missing@label +{\egroup\CD@YA{missing label}\CD@PE}\def\CD@xC{\egroup\missing@label}\outer +\def\CD@ZH{}\def\CD@UF{}\def\CD@VF{\CD@wC\CD@UF}\def\CD@MD{}\def\CD@XF{\let +\CD@N\CD@xD\get@square@arg\CD@AE}\CD@rG\CD@PE{The text which has just been +read is not allowed within map labels.}\def\CD@c{\egroup\CD@YA{missing \CD@yC +\space inserted after label}\CD@PE}\def\upper@label{\CD@oD\CD@yD6}\def +\lower@label{\def\positional@{\CD@@A\break@args}\CD@yD7}\def\middle@label{% +\CD@yD3}\CD@tG\CD@yE\CD@pD\CD@oD\def\CD@iF{\ifPositiveGradient\CD@tJ +\expandafter\upper@label\else\expandafter\lower@label\fi}\def\CD@iI{% +\ifPositiveGradient\CD@tJ\expandafter\lower@label\else\expandafter +\upper@label\fi}\def\positional@{\CD@gB{labels as positional arguments are +obsolete}\CD@yE\CD@tJ\expandafter\upper@label\else\expandafter\lower@label\fi +-}\def\CD@tD{\futurelet\CD@EH\switch@arg}\def\eat@space{\afterassignment +\CD@tD\let\CD@EH= }\def\CD@TF{\afterassignment\CD@xD\let\CD@EH= }\def\CD@BC{% +\get@round@pair\CD@uD}\def\CD@uD#1#2{\def\CD@WK{#1}\def\CD@aK{#2}\CD@tD}\def +\optional@{\let\CD@N\CD@tD\get@square@arg\CD@AE}\def\CD@JJ.{\CD@sC\CD@tD}\def +\CD@sC{\let\CD@iD\fill@dot\let\CD@jD\fill@dot\def\CD@MI{\let\CD@iD\dfdot\let +\CD@jD\dfdot}}\def\CD@MI{}\def\CD@@E#1,{\CD@nH#1,\begingroup\ifx\@name\CD@RD +\CD@FF\aftergroup\CD@e\fi\aftergroup\CD@jC\else\expandafter\def\expandafter +\CD@RF\expandafter{\csname\@name\endcsname}\expandafter\CD@vD\CD@RF\CD@KD\ifx +\CD@RF\empty\aftergroup\CD@pC\expandafter\aftergroup\csname\CD@FB\@name +\endcsname\expandafter\aftergroup\csname\CD@FB @\@name\endcsname\else\gdef +\CD@GE{#1}\CD@gB{\string\relax\space inserted before `[\CD@GE'}\message{(I was +trying to read this as a \CD@tA\ option.)}\aftergroup\CD@H\fi\fi\endgroup}% +\def\CD@vD#1#2\CD@KD{\def\CD@RF{#2}}\def\CD@jC{\let\CD@CH\CD@N\let\CD@N\relax +\CD@CH}\def\CD@H#1],{%% ASCII close square bracket +\CD@jC\relax\def\CD@RF{#1}\ifx\CD@RF\empty\def\CD@RF{[\CD@GE]}% +%% ASCII open and close square bracket +\else\def\CD@RF{[\CD@GE,#1]}%% ASCII open and close square bracket +\fi\CD@RF}\def\CD@pC#1#2{\ifx#2\undefined\ifx#1\undefined\CD@gB{option `% +\@name' undefined}\else#1\fi\else\CD@FF\expandafter#2\CD@GK\CD@PK\else\CD@QK +\fi\fi\CD@DH}\CD@tG\CD@FF\CD@QK\CD@PK\def\CD@nH#1,{\CD@FF\ifx\CD@GK\undefined +\CD@e\else\expandafter\CD@oH\CD@GK,#1,(,),(,)[]% +%%ASCII 5commas two pairs round, pair square +\fi\fi\CD@FF\else\CD@mH#1==,\fi}\def\CD@e{\CD@gB{option `\@name' needs (x,y) +value}\CD@PK\let\@name\empty}\def\CD@mH#1=#2=#3,{\def\@name{#1}\def\CD@GK{#2}% +\def\CD@RF{#3}\ifx\CD@RF\empty\let\CD@GK\undefined\fi}% +%% ASCII 2commas 2pair round, pair square on next line +\def\CD@oH#1(#2,#3)#4,(#5,#6)#7[]{\def\CD@GK{{#2}{#3}}\def\CD@RF{#1#4#5#6}% +\ifx\CD@RF\empty\def\CD@RF{#7}\ifx\CD@RF\empty\CD@e\fi\else\CD@e\fi}\def +\CD@FB{cds@}\let\CD@N\relax\def\CD@zD#1{\ifx\CD@GK\undefined\CD@gB{option `% +\@name' needs a value}\else#1\CD@GK\relax\fi}\def\CD@BE#1#2{\ifx\CD@GK +\undefined#1#2\relax\else#1\CD@GK\relax\fi}\def\cds@@showpair#1#2{\message{x=% +#1,y=#2}}\def\cds@@diagonalbase#1#2{\edef\CD@ZK{#1}\edef\CD@bK{#2}}\def\CD@DI +#1{\CD@nF{@x}{cdps@#1}\ifx\@x\relax\CD@f{#1}{unknown}\else\ifx\@x\empty\CD@f{% +#1}{cannot be used}\else\let\CD@IK\@x\fi\fi}\def\CD@f#1#2{\CD@gB{PostScript +translator `#1' #2}\CD@ZB\let\cds@PS\empty\let\cds@noPS\empty}\def\CD@PH{}% +\def\CD@PJ{\CD@fA\edef\CD@PH{\noexpand\CD@KB{\@name\space ignored within maths% +}}}\def\diagramstyle{\CD@cJ\let\CD@N\relax\CD@CF\CD@AE\CD@AE}\let +\diagramsstyle\diagramstyle\CD@tG\CD@sE\CD@SB\CD@RB\CD@tG\CD@qE\CD@EB\CD@DB +\CD@tG\CD@oE\CD@pA\CD@oA\CD@tG\CD@iE\CD@HA\CD@GA\CD@HA\CD@tG\CD@jE\CD@JA +\CD@IA\CD@tG\CD@kE\CD@LA\CD@KA\CD@tG\CD@vE\CD@aB\CD@ZB\CD@tG\CD@EF\CD@DK +\CD@CK\CD@tG\CD@rE\CD@JB\CD@IB\CD@tG\CD@mE\CD@gA\CD@fA\CD@tG\CD@nE\CD@kA +\CD@jA\CD@tG\CD@AF\CD@iG\CD@hG\CD@RC{cds@ }{}\CD@RC{cds@}{}\CD@RC{cds@1em}{% +\CellSize1\CD@zC}\CD@RC{cds@1.5em}{\CellSize1.5\CD@zC}\CD@RC{cds@2em}{% +\CellSize2\CD@zC}\CD@RC{cds@2.5em}{\CellSize2.5\CD@zC}\CD@RC{cds@3em}{% +\CellSize3\CD@zC}\CD@RC{cds@3.5em}{\CellSize3.5\CD@zC}\CD@RC{cds@4em}{% +\CellSize4\CD@zC}\CD@RC{cds@4.5em}{\CellSize4.5\CD@zC}\CD@RC{cds@5em}{% +\CellSize5\CD@zC}\CD@RC{cds@6em}{\CellSize6\CD@zC}\CD@RC{cds@7em}{\CellSize7% +\CD@zC}\CD@RC{cds@8em}{\CellSize8\CD@zC}\def\cds@abut{\MapsAbut\dimen1\z@ +\dimen5\z@}\def\cds@alignlabels{\CD@IA\CD@KA}\def\cds@amstex{\ifincommdiag +\CD@O\else\def\CD{\diagram[amstex]}%%ascii square brackets [] +\fi\CD@T\catcode\lq\@\active}\def\cds@b{\let\CD@dB\CD@bB}\def\cds@balance{% +\let\CD@hA\CD@AA}\let\cds@bottom\cds@b\def\cds@center{\cds@vcentre +\cds@nobalance}\let\cds@centre\cds@center\def\cds@centerdisplay{\CD@HA\CD@PJ +\cds@balance}\let\cds@centredisplay\cds@centerdisplay\def\cds@crab{\CD@BE +\CD@DC{.5\PileSpacing}}\CD@RC{cds@crab-}{\CD@DC-.5\PileSpacing}\CD@RC{% +cds@crab+}{\CD@DC.5\PileSpacing}\CD@RC{cds@crab++}{\CD@DC1.5\PileSpacing}% +\CD@RC{cds@crab--}{\CD@DC-1.5\PileSpacing}\def\cds@defaultsize{\CD@BE{\let +\CD@QC}{3em}\CD@NJ}\def\cds@displayoneliner{\CD@DB}\let\cds@dotted\CD@sC\def +\cds@dpi{\CD@RJ{1truein}}\def\cds@dpm{\CD@RJ{100truecm}}\let\CD@XA\undefined +\def\cds@eqno{\let\CD@XA\CD@GK\let\CD@EJ\empty}\def\cds@fixed{\CD@qA}\CD@tG +\CD@fE\CD@J\CD@I\def\cds@flushleft{\CD@I\CD@GA\CD@PJ\cds@nobalance\CD@BE +\CD@nA\CD@nA}\def\cds@gap{\CD@AJ\setbox3=\null\ht3=\CD@tI\dp3=\CD@sI\CD@BE{% +\wd3=}\MapShortFall} \def\cds@grid{\ifx\CD@GK\undefined\let\h@grid\relax\let +\v@grid\relax\else\CD@nF{h@grid}{cdgh@\CD@GK}\CD@nF{v@grid}{cdgv@\CD@GK}\ifx +\h@grid\relax\CD@gB{unknown grid `\CD@GK'}\else\CD@WB\fi\fi}\let\h@grid\relax +\let\v@grid\relax\def\cds@gridx{\ifx\CD@GK\undefined\else\cds@grid\fi\let +\CD@CH\h@grid\let\h@grid\v@grid\let\v@grid\CD@CH}\def\cds@h{\CD@zD +\DiagramCellHeight}\def\cds@hcenter{\let\CD@hA\CD@aA}\let\cds@hcentre +\cds@hcenter\def\cds@heads{\CD@BE{\let\CD@sJ}\CD@sJ\CD@@J\CD@vE\else\ifx +\CD@sJ\CD@eF\else\CD@MC\fi\fi}\let\cds@height\cds@h\let\cds@hmiddle +\cds@balance\def\cds@htriangleheight{\CD@BE\DiagramCellHeight +\DiagramCellHeight\DiagramCellWidth1.73205\DiagramCellHeight}\def +\cds@htrianglewidth{\CD@BE\DiagramCellWidth\DiagramCellWidth +\DiagramCellHeight.57735\DiagramCellWidth}\CD@tG\CD@zE\CD@eE\CD@dE\CD@eE\def +\cds@hug{\CD@eE} \def\cds@inline{\CD@gA\let\CD@PH\empty}\def +\cds@inlineoneliner{\CD@EB}\CD@RC{cds@l>}{\CD@zD{\let\CD@RG}\dimen2=\CD@RG}% +\def\cds@labelstyle{\CD@zD{\let\labelstyle}}\def\cds@landscape{\CD@kA}\def +\cds@large{\CellSize5\CD@zC}\let\CD@EJ\empty\def\CD@FJ{\refstepcounter{% +equation}\def\CD@XA{\hbox{\@eqnnum}}}\def\cds@LaTeXeqno{\let\CD@EJ\CD@FJ}\def +\cds@lefteqno{\CD@pA}\def\cds@leftflush{\cds@flushleft\CD@J}\def +\cds@leftshortfall{\CD@zD{\dimen1 }}\def\cds@lowershortfall{% +\ifPositiveGradient\cds@leftshortfall\else\cds@rightshortfall\fi}\def +\cds@loose{\CD@VB}\def\cds@midhshaft{\CD@JA}\def\cds@midshaft{\CD@JA}\def +\cds@midvshaft{\CD@LA}\def\cds@moreoptions{\CD@@A}\let\cds@nobalance +\cds@hcenter\def\cds@nohcheck{\CD@HH}\def\cds@nohug{\CD@dE} \def +\cds@nooptions{\def\CD@aC{\CD@WD}}\let\cds@noorigin\cds@nobalance\def +\cds@nopixel{\CD@@I4\CD@XH\CD@cJ}\def\cds@noPostScript{\global\let\CD@n\empty +\CD@BE\CD@DI\empty\CD@ZB\let\cds@PS\empty\let\cds@noPS\empty}\def\cds@noPS{% +\CD@ZB\global\let\CD@n\empty}\def\cds@notextflow{\CD@RB}\def\cds@noTPIC{% +\CD@CK}\def\cds@objectstyle{\CD@zD{\let\objectstyle}}\def\cds@origin{\let +\CD@hA\CD@iB}\def\cds@p{\CD@zD\PileSpacing}\CD@tG\CD@hK\CD@dK\CD@cK\CD@cK\let +\cds@pilespacing\cds@p\def\cds@pixelsize{\CD@zD\CD@@I\CD@gI}\def\cds@portrait +{\CD@jA}\def\cds@PostScript{\CD@aB\global\let\CD@n\empty\let\cds@PS\CD@aB\let +\cds@noPS\CD@ZB\CD@BE\CD@DI\empty}\def\cds@PS{\CD@aB\global\let\CD@n\empty}% +\CD@GF\CD@n{\typeout{\CD@tA: try the PostScript option for better results}}% +\def\cds@repositionpullbacks{\let\make@pbk\CD@fH\let\CD@qH\CD@pH}\def +\cds@righteqno{\CD@oA}\def\cds@rightshortfall{\CD@zD{\dimen5 }}\def +\cds@ruleaxis{\CD@zD{\let\axisheight}}\def\cds@cmex{\let\CD@GG\CD@sB\let +\CD@QJ\CD@CJ}\def\cds@s{\cds@height\DiagramCellWidth\DiagramCellHeight}\def +\cds@scriptlabels{\let\labelstyle\scriptstyle}\def\cds@shortfall{\CD@zD +\MapShortFall\dimen1\MapShortFall\dimen5\MapShortFall}\def\cds@showfirstpass{% +\CD@BE{\let\CD@nD}\z@}\def\cds@silent{\def\CD@KB##1{}\def\CD@gB##1{}}\let +\cds@size\cds@s\def\cds@small{\CellSize2\CD@zC}\def\cds@snake{\CD@BE\CD@eJ\z@ +}\def\cds@t{\let\CD@dB\CD@fB}\def\cds@textflow{\CD@SB\CD@PJ}\def\cds@thick{% +\let\CD@rF\tenlnw\CD@LF\CD@NC\CD@BE\MapBreadth{2\CD@LF}\CD@@J}\def\cds@thin{% +\let\CD@rF\tenln\CD@BE\MapBreadth{\CD@NC}\CD@@J}\def\cds@tight{\CD@WB}\let +\cds@top\cds@t\def\cds@TPIC{\CD@DK}\def\cds@uppershortfall{% +\ifPositiveGradient\cds@rightshortfall\else\cds@leftshortfall\fi}\def +\cds@vcenter{\let\CD@dB\CD@cB}\let\cds@vcentre\cds@vcenter\def +\cds@vtriangleheight{\CD@BE\DiagramCellHeight\DiagramCellHeight +\DiagramCellWidth.577035\DiagramCellHeight}\def\cds@vtrianglewidth{\CD@BE +\DiagramCellWidth\DiagramCellWidth\DiagramCellHeight1.73205\DiagramCellWidth}% +\def\cds@vmiddle{\let\CD@dB\CD@eB}\def\cds@w{\CD@zD\DiagramCellWidth}\let +\cds@width\cds@w\def\diagram{\relax\protect\CD@bC}\def\enddiagram{\protect +\CD@SG}\def\CD@bC{\CD@g\CD@uI\incommdiagtrue\edef\CD@wI{\the\CD@NB}\global +\CD@NB\z@\boxmaxdepth\maxdimen\everycr{}\ifx\pdfoutput\undefined\else\ifx +\pdfoutput\relax\else\ifnum\pdfoutput>\z@\CD@dK\CD@aB\global\let\CD@n\empty +\fi\fi\fi\CD@aC}\def\CD@aC{\CD@y\let\CD@N\CD@ZC\CD@CF\CD@AE\CD@WD}\def\CD@ZC{% +\CD@gE\expandafter\CD@aC\else\expandafter\CD@WD\fi}\def\CD@WD{\let\CD@EH +\relax\CD@nE\CD@vE\else\CD@hK\else\CD@KB{landscape ignored without PostScript% +}\CD@jA\fi\fi\fi\CD@EJ\setbox2=\vbox\bgroup\CD@JF\CD@VD}\def\CD@cH{\CD@nE +\CD@fB\else\CD@dB\fi\CD@hA\nointerlineskip\setbox0=\null\ht0-\CD@pI\dp0\CD@pI +\wd0\CD@kI\box0 \global\CD@QA\CD@kF\global\CD@yA\CD@XB\ifx\CD@NK\undefined +\global\CD@RA\CD@kF\else\global\CD@RA\CD@NK\fi\egroup\CD@zF\CD@nE\setbox2=% +\hbox to\dp2{\vrule height\wd2 depth\CD@QA width\z@\global\CD@QA\ht2\ht2\z@ +\dp2\z@\wd2\z@\CD@hK\pdfliteral{q 0 1 -1 0 0 0 cm}\else\global\CD@iG\CD@IK{0 1 +bturn}\fi\box2\CD@gK\hss}\CD@DB\fi\ifnum\CD@yA=1 \else\CD@DB\fi\global +\@ignorefalse\CD@mE\leavevmode\fi\ifvmode\CD@TA\else\ifmmode\CD@PH\CD@GI\else +\CD@qE\CD@gA\fi\ifinner\CD@gA\fi\CD@mE\CD@GI\else\CD@sE\CD@QB\else\CD@TA\fi +\fi\fi\fi\CD@dD}\def\CD@dD{\global\CD@NB\CD@wI\relax\CD@xE\global\CD@ID\else +\aftergroup\CD@mC\fi\if@ignore\aftergroup\ignorespaces\fi\CD@wC\ignorespaces}% +\def\CD@fB{\advance\CD@pI\dimen1\relax}\def\CD@eB{\advance\CD@pI.5\dimen1% +\relax}\def\CD@bB{}\def\CD@cB{\CD@fB\advance\CD@pI\CD@YB\divide\CD@pI2 +\advance\CD@pI-\axisheight\relax}\def\CD@aA{}\def\CD@iB{\CD@kF\z@}\def\CD@AA{% +\ifdim\dimen2>\CD@kF\CD@kF\dimen2 \else\dimen2\CD@kF\CD@kI\dimen0 \advance +\CD@kI\dimen2 \fi}\def\CD@QB{\skip0\z@\relax\loop\skip1\lastskip\ifdim\skip1>% +\z@\unskip\advance\skip0\skip1 \repeat\vadjust{\prevdepth\dp\strutbox\penalty +\predisplaypenalty\vskip\abovedisplayskip\CD@UA\penalty\postdisplaypenalty +\vskip\belowdisplayskip}\ifdim\skip0=\z@\else\hskip\skip0 \global\@ignoretrue +\fi}\def\CD@TA{\CD@LG\kern-\displayindent\CD@UA\CD@LG\global\@ignoretrue}\def +\CD@UA{\hbox to\hsize{\CD@fE\ifdim\CD@RA=\z@\else\advance\CD@QA-\CD@RA\setbox +2=\hbox{\kern\CD@RA\box2}\fi\fi\setbox1=\hbox{\ifx\CD@XA\undefined\else\CD@k +\CD@XA\CD@ND\fi}\CD@oE\CD@iE\else\advance\CD@QA\wd1 \fi\wd1\z@\box1 \fi\dimen +0\wd2 \advance\dimen0\wd1 \advance\dimen0-\hsize\ifdim\dimen0>-\CD@nA\CD@HA +\fi\advance\dimen0\CD@QA\ifdim\dimen0>\z@\CD@KB{wider than the page by \the +\dimen0 }\CD@HA\fi\CD@iE\hss\else\CD@V\CD@QA\CD@nA\fi\CD@GI\hss\kern-\wd1\box +1 }}\def\CD@GI{\CD@AF\CD@@F\else\CD@SC\global\CD@hG\fi\fi\kern\CD@QA\box2 }% +\CD@tG\CD@wE\CD@YC\CD@XC\def\CD@JF{\CD@cJ\ifdim\DiagramCellHeight=-\maxdimen +\DiagramCellHeight\CD@QC\fi\ifdim\DiagramCellWidth=-\maxdimen +\DiagramCellWidth\CD@QC\fi\global\CD@XC\CD@IF\let\CD@FE\empty\let\CD@z\CD@Q +\let\overprint\CD@eH\let\CD@s\CD@rJ\let\enddiagram\CD@ED\let\\\CD@cC\let\par +\CD@jH\let\CD@MD\empty\let\switch@arg\CD@PB\let\shift\CD@iA\baselineskip +\DiagramCellHeight\lineskip\z@\lineskiplimit\z@\mathsurround\z@\tabskip\z@ +\CD@OB}\def\CD@VD{\penalty-123 \begingroup\CD@jA\aftergroup\CD@K\halign +\bgroup\global\advance\CD@NB1 \vadjust{\penalty1}\global\CD@FA\z@\CD@OB\CD@j#% +#\CD@DD\CD@Q\CD@Q\CD@OI\CD@j##\CD@DD\cr}\def\CD@ED{\CD@MD\CD@GD\crcr\egroup +\global\CD@JD\endgroup}\def\CD@j{\global\advance\CD@FA1 \futurelet\CD@EH\CD@i +}\def\CD@i{\ifx\CD@EH\CD@DD\CD@tJ\hskip1sp plus 1fil \relax\let\CD@DD\relax +\CD@vI\else\hfil\CD@k\objectstyle\let\CD@FE\CD@d\fi}\def\CD@DD{\CD@MD\relax +\CD@yI\CD@vI\global\CD@QA\CD@iA\penalty-9993 \CD@ND\hfil\null\kern-2\CD@QA +\null}\def\CD@cC{\cr}\def\across#1{\span\omit\mscount=#1 \global\advance +\CD@FA\mscount\global\advance\CD@FA\m@ne\CD@sF\ifnum\mscount>2 \CD@fJ\repeat +\ignorespaces}\def\CD@fJ{\relax\span\omit\advance\mscount\m@ne}\def\CD@qJ{% +\ifincommdiag\ifx\CD@iD\@fillh\ifx\CD@jD\@fillh\ifdim\dimen3>\z@\else\ifdim +\dimen2>93\CD@@I\ifdim\dimen2>18\p@\ifdim\CD@LF>\z@\count@\CD@bJ\advance +\count@\m@ne\ifnum\count@<\z@\count@20\let\CD@aJ\CD@uJ\fi\xdef\CD@bJ{\the +\count@}\fi\fi\fi\fi\fi\fi\fi}\def\CD@cG#1{\vrule\horizhtdp width#1\dimen@ +\kern2\dimen@}\def\CD@uJ{\rlap{\dimen@\CD@@I\CD@V\dimen@{.182\p@}\CD@zH +\dimen@\advance\CD@tI\dimen@\CD@cG0\CD@cG0\CD@cG2\CD@cG6\CD@cG6\CD@cG2\CD@cG0% +\CD@cG0\CD@cG2\CD@cG6\CD@cG0\CD@cG0\CD@cG2\CD@cG2\CD@cG6\CD@cG0\CD@cG0\CD@cG2% +\CD@cG6\CD@cG2\CD@cG2\CD@cG0\CD@cG0}}\def\CD@bJ{10}\def\CD@aJ{}\def\CD@XD{% +\CD@gE\CD@TB\fi\CD@x\CD@WF\CD@HI}\def\CD@x{\CD@QJ\CD@DC\CD@MJ\ifdim\CD@DC=\z@ +\else\CD@pF\CD@DC\fi\ifvoid3 \setbox3=\null\ht3\CD@tI\dp3\CD@sI\else\CD@V{\ht +3}\CD@tI\CD@V{\dp3}\CD@sI\fi\dimen3=.5\wd3 \ifdim\dimen3=\z@\CD@tE\else\dimen +3-\CD@XH\fi\else\CD@TB\fi\CD@V{\dimen2}{\wd7}\CD@V{\dimen2}{\wd6}\CD@qJ +\advance\dimen2-2\dimen3 \dimen4.5\dimen2 \dimen2\dimen4 \advance\dimen2% +\CD@eJ\advance\dimen4-\CD@eJ\advance\dimen2-\wd1 \advance\dimen4-\wd5 \ifvoid +2 \else\CD@V{\ht3}{\ht2}\CD@V{\dp3}{\dp2}\CD@V{\dimen2}{\wd2}\fi\ifvoid4 \else +\CD@V{\ht3}{\ht4}\CD@V{\dp3}{\dp4}\CD@V{\dimen4}{\wd4}\fi\advance\skip2\dimen +2 \advance\skip4\dimen4 \CD@tE\advance\skip2\skip4 \dimen0\dimen5 \advance +\dimen0\wd5 \skip3-\skip4 \advance\skip3-\dimen0 \let\CD@jD\empty\else\skip3% +\z@\relax\dimen0\z@\fi}\def\CD@WF{\offinterlineskip\lineskip.2\CD@zC\ifvoid6 +\else\setbox3=\vbox{\hbox to2\dimen3{\hss\box6\hss}\box3}\fi\ifvoid7 \else +\setbox3=\vtop{\box3 \hbox to2\dimen3{\hss\box7\hss}}\fi}\def\CD@HI{\kern +\dimen1 \box1 \CD@aJ\CD@iD\hskip\skip2 \kern\dimen0 \ifincommdiag\CD@jE +\penalty1\fi\kern\dimen3 \penalty\CD@GB\hskip\skip3 \null\kern-\dimen3 \else +\hskip\skip3 \fi\box3 \CD@jD\hskip\skip4 \box5 \kern\dimen5}\def\CD@MF{\ifnum +\CD@LH>\CD@TC\CD@V{\dimen1}\objectheight\CD@V{\dimen5}\objectheight\else\CD@V +{\dimen1}\objectwidth\CD@V{\dimen5}\objectwidth\fi}\def\CD@Y{\begingroup +\ifdim\dimen7=\z@\kern\dimen8 \else\ifdim\dimen6=\z@\kern\dimen9 \else\dimen5% +\dimen6 \dimen6\dimen9 \CD@KJ\dimen4\dimen2 \CD@dG{\dimen4}\dimen6\dimen5 +\dimen7\dimen8 \CD@KJ\CD@iC{\dimen2}\ifdim\dimen2<\dimen4 \kern\dimen2 \else +\kern\dimen4 \fi\fi\fi\endgroup}\def\CD@jJ{\CD@JI\setbox\z@\hbox{\lower +\axisheight\hbox to\dimen2{\CD@DF\ifPositiveGradient\dimen8\ht\CD@MH\dimen9% +\CD@mI\else\dimen8\dp3 \dimen9\dimen1 \fi\else\dimen8 \ifPositiveGradient +\objectheight\else\z@\fi\dimen9\objectwidth\fi\advance\dimen8 +\ifPositiveGradient-\fi\axisheight\CD@Y\unhbox\z@\CD@DF\ifPositiveGradient +\dimen8\dp3 \dimen9\dimen0 \else\dimen8\ht\CD@MH\dimen9\CD@mF\fi\else\dimen8 +\ifPositiveGradient\z@\else\objectheight\fi\dimen9\objectwidth\fi\advance +\dimen8 \ifPositiveGradient\else-\fi\axisheight\CD@Y}}}\def\CD@bD{\dimen6 +\CD@aK\DiagramCellHeight\dimen7 \CD@WK\DiagramCellWidth\CD@jJ +\ifPositiveGradient\advance\dimen7-\CD@ZK\DiagramCellWidth\else\dimen7 \CD@ZK +\DiagramCellWidth\dimen6\z@\fi\advance\dimen6-\CD@bK\DiagramCellHeight\CD@mK +\setbox0=\rlap{\kern-\dimen7 \lower\dimen6\box\z@}\ht0\z@\dp0\z@\raise +\axisheight\box0 }\def\CD@mK{\setbox0\hbox{\ht\z@\z@\dp\z@\z@\wd\z@\z@\CD@hK +\expandafter\pdfliteral{q \CD@eK\space\CD@lK\space\CD@kK\space\CD@eK\space0 0 +cm}\else\global\CD@iG\CD@eD{\the\CD@TC\space\ifPositiveGradient\else-\fi\the +\CD@LH\space bturn}\fi\box\z@\CD@gK}}\def\CD@vB{\advance\CD@hF-\CD@mI\CD@wJ +\CD@hF\advance\CD@wJ\CD@hI\ifvoid\CD@sH\ifdim\CD@wJ<.1em\ifnum\CD@gD=\@m\else +\CD@aG h\CD@wJ<.1em:objects overprint:\CD@FA\CD@gD\fi\fi\else\ifhbox\CD@sH +\CD@SK\else\CD@TK\fi\advance\CD@wJ\CD@mI\CD@bH{-\CD@mI}{\box\CD@sH}{\CD@wJ}% +\z@\fi\CD@hF-\CD@mF\CD@gD\CD@FA\CD@hI\z@}\def\CD@SK{\setbox\CD@sH=\hbox{% +\unhbox\CD@sH\unskip\unpenalty}\setbox\CD@tH=\hbox{\unhbox\CD@tH\unskip +\unpenalty}\setbox\CD@sH=\hbox to\CD@wJ{\CD@OA\wd\CD@sH\unhbox\CD@sH\CD@PA +\lastkern\unkern\ifdim\CD@PA=\z@\CD@UB\advance\CD@OA-\wd\CD@tH\else\CD@TB\fi +\ifnum\lastpenalty=\z@\else\CD@JA\unpenalty\fi\kern\CD@PA\ifdim\CD@hF<\CD@OA +\CD@JA\fi\ifdim\CD@hI<\wd\CD@tH\CD@JA\fi\CD@jE\CD@hI\CD@wJ\advance\CD@hI-% +\CD@OA\advance\CD@hI\wd\CD@tH\ifdim\CD@hI<2\wd\CD@tH\CD@aG h\CD@hI<2\wd\CD@tH +:arrow too short:\CD@FA\CD@gD\fi\divide\CD@hI\tw@\CD@hF\CD@wJ\advance\CD@hF-% +\CD@hI\fi\CD@tE\kern-\CD@hI\fi\hbox to\CD@hI{\unhbox\CD@tH}\CD@HG}}\CD@tG +\ifinpile\inpiletrue\inpilefalse\inpilefalse\def\pile{\protect\CD@UJ\protect +\CD@uH}\def\CD@uH#1{\CD@l#1\CD@QD}\def\CD@UJ{\CD@nB{pile}\setbox0=\vtop +\bgroup\aftergroup\CD@lD\inpiletrue\let\CD@FE\empty\let\pile\CD@KF\let\CD@QD +\CD@PD\let\CD@GD\CD@FD\CD@yH\baselineskip.5\PileSpacing\lineskip.1\CD@zC +\relax\lineskiplimit\lineskip\mathsurround\z@\tabskip\z@\let\\\CD@wH}\def +\CD@l{\CD@DE\CD@YF\empty\halign\bgroup\hfil\CD@k\let\CD@FE\CD@d\let\\\CD@vH##% +\CD@MD\CD@ND\hfil\CD@Q\CD@R##\cr}\CD@rG\CD@NE{pile only allows one column.}% +\CD@rG\CD@UE{you left it out!}\def\CD@R{\CD@QD\CD@Q\relax\CD@YA{missing \CD@yC +\space inserted after \string\pile}\CD@NE}\def\CD@PD{\CD@MD\crcr\egroup +\egroup}\def\CD@GD{\CD@MD}\def\CD@FD{\CD@MD\relax\CD@QD\CD@YA{missing \CD@yC +\space inserted between \string\pile\space and \CD@HD}\CD@UE}\def\CD@QD{% +\CD@MD}\def\CD@lD{\vbox{\dimen1\dp0 \unvbox0 \setbox0=\lastbox\advance\dimen1% +\dp0 \nointerlineskip\box0 \nointerlineskip\setbox0=\null\dp0.5\dimen1\ht0-% +\dp0 \box0}\ifincommdiag\CD@tJ\penalty-9998 \fi\xdef\CD@YF{pile}}\def\CD@vH{% +\cr}\def\CD@wH{\noalign{\skip@\prevdepth\advance\skip@-\baselineskip +\prevdepth\skip@}}\def\CD@KF#1{#1}\def\CD@TK{\setbox\CD@sH=\vbox{\unvbox +\CD@sH\setbox1=\lastbox\setbox0=\box\voidb@x\CD@tF\setbox\CD@sH=\lastbox +\ifhbox\CD@sH\CD@rC\repeat\unvbox0 \global\CD@QA\CD@ZE}\CD@ZE\CD@QA}\def +\CD@rC{\CD@jE\setbox\CD@sH=\hbox{\unhbox\CD@sH\unskip\setbox\CD@sH=\lastbox +\unskip\unhbox\CD@sH}\ifdim\CD@wJ<\wd\CD@sH\CD@aG h\CD@wJ<\wd\CD@sH:arrow in +pile too short:\CD@FA\CD@gD\else\setbox\CD@sH=\hbox to\CD@wJ{\unhbox\CD@sH}% +\fi\else\CD@gJ\fi\setbox0=\vbox{\box\CD@sH\nointerlineskip\ifvoid0 \CD@tJ\box +1 \else\vskip\skip0 \unvbox0 \fi}\skip0=\lastskip\unskip}\def\CD@gJ{\penalty7 +\noindent\unhbox\CD@sH\unskip\setbox\CD@sH=\lastbox\unskip\unhbox\CD@sH +\endgraf\setbox\CD@tH=\lastbox\unskip\setbox\CD@tH=\hbox{\CD@JG\unhbox\CD@tH +\unskip\unskip\unpenalty}\ifcase\prevgraf\cd@shouldnt P\or\ifdim\CD@wJ<\wd +\CD@tH\CD@aG h\CD@wJ<\wd\CD@sH:object in pile too wide:\CD@FA\CD@gD\setbox +\CD@sH=\hbox to\CD@wJ{\hss\unhbox\CD@tH\hss}\else\setbox\CD@sH=\hbox to\CD@wJ +{\hss\kern\CD@hF\unhbox\CD@tH\kern\CD@hI\hss}\fi\or\setbox\CD@sH=\lastbox +\unskip\CD@SK\else\cd@shouldnt Q\fi\unskip\unpenalty}\def\CD@cD{\CD@MJ\ifvoid +3 \setbox3=\null\ht3\axisheight\dp3-\ht3 \dimen3.5\CD@LF\else\dimen4\dp3 +\dimen3.5\wd3 \setbox3=\CD@GG{\box3}\dp3\dimen4 \ifdim\ht3=-\dp3 \else\CD@TB +\fi\fi\dimen0\dimen3 \advance\dimen0-.5\CD@LF\setbox0\null\ht0\ht3\dp0\dp3\wd +0\wd3 \ifvoid6\else\setbox6\hbox{\unhbox6\kern\dimen0\kern2pt}\dimen0\wd6 \fi +\ifvoid7\else\setbox7\hbox{\kern2pt\kern\dimen3\unhbox7}\dimen3\wd7 \fi +\setbox3\hbox{\ifvoid6\else\kern-\dimen0\unhbox6\fi\unhbox3 \ifvoid7\else +\unhbox7\kern-\dimen3\fi}\ht3\ht0\dp3\dp0\wd3\wd0 \CD@tE\dimen4=\ht\CD@MH +\advance\dimen4\dp5 \advance\dimen4\dimen1 \let\CD@jD\empty\else\dimen4\ht3 +\fi\setbox0\null\ht0\dimen4 \offinterlineskip\setbox8=\vbox spread2ex{\kern +\dimen5 \box1 \CD@iD\vfill\CD@tE\else\kern\CD@eJ\fi\box0}\ht8=\z@\setbox9=% +\vtop spread2ex{\kern-\ht3 \kern-\CD@eJ\box3 \CD@jD\vfill\box5 \kern\dimen1}% +\dp9=\z@\hskip\dimen0plus.0001fil \box9 \kern-\CD@LF\box8 \CD@kE\penalty2 \fi +\CD@tE\penalty1 \fi\kern\PileSpacing\kern-\PileSpacing\kern-.5\CD@LF\penalty +\CD@GB\null\kern\dimen3}\def\CD@cI{\ifhbox\CD@VA\CD@KB{clashing verticals}\ht +\CD@MH.5\dp\CD@VA\dp\CD@MH-\ht5 \CD@yB\ht\CD@MH\z@\dp\CD@MH\z@\fi\dimen1\dp +\CD@VA\CD@xA\prevgraf\unvbox\CD@VA\CD@wA\lastpenalty\unpenalty\setbox\CD@VA=% +\null\setbox\CD@lI=\hbox{\CD@JG\unhbox\CD@lI\unskip\unpenalty\dimen0\lastkern +\unkern\unkern\unkern\kern\dimen0 \CD@HG}\setbox\CD@lF=\hbox{\unhbox\CD@lF +\dimen0\lastkern\unkern\unkern\global\CD@QA\lastkern\unkern\kern\dimen0 }% +\CD@tF\ifnum\CD@xA>4 \CD@zI\repeat\unskip\unskip\advance\CD@mF.5\wd\CD@VA +\advance\CD@mF\wd\CD@lF\advance\CD@mI.5\wd\CD@VA\advance\CD@mI\wd\CD@lI\ifnum +\CD@FA=\CD@lA\CD@OA.5\wd\CD@VA\edef\CD@NK{\the\CD@OA}\fi\setbox\CD@VA=\hbox{% +\kern-\CD@mF\box\CD@lF\unhbox\CD@VA\box\CD@lI\kern-\CD@mI\penalty\CD@wA +\penalty\CD@NB}\ht\CD@VA\dimen1 \dp\CD@VA\z@\wd\CD@VA\CD@tB\CD@vB}\def\CD@zI{% +\ifdim\wd\CD@lF<\CD@QA\setbox\CD@lF=\hbox to\CD@QA{\CD@JG\unhbox\CD@lF}\fi +\advance\CD@xA\m@ne\setbox\CD@VA=\hbox{\box\CD@lF\unhbox\CD@VA}\unskip\setbox +\CD@lF=\lastbox\setbox\CD@lF=\hbox{\unhbox\CD@lF\unskip\unpenalty\dimen0% +\lastkern\unkern\unkern\global\CD@QA\lastkern\unkern\kern\dimen0 }}\def\CD@yB +{\dimen1\dp\CD@VA\ifhbox\CD@VA\CD@xB\else\CD@zB\fi\setbox\CD@VA=\vbox{% +\penalty\CD@NB}\dp\CD@VA-\dp\CD@MH\wd\CD@VA\CD@tB}\def\CD@zB{\unvbox\CD@VA +\CD@wA\lastpenalty\unpenalty\ifdim\dimen1<\ht\CD@MH\CD@aG v\dimen1<\ht\CD@MH:% +rows overprint:\CD@NB\CD@wA\fi}\def\CD@xB{\dimen0=\ht\CD@VA\setbox\CD@VA=% +\hbox\bgroup\advance\dimen1-\ht\CD@MH\unhbox\CD@VA\CD@xA\lastpenalty +\unpenalty\CD@wA\lastpenalty\unpenalty\global\CD@RA-\lastkern\unkern\setbox0=% +\lastbox\CD@tF\setbox\CD@VA=\hbox{\box0\unhbox\CD@VA}\setbox0=\lastbox\ifhbox +0 \CD@kJ\repeat\global\CD@SA-\lastkern\unkern\global\CD@QA\CD@JK\unhbox\CD@VA +\egroup\CD@JK\CD@QA\CD@bH{\CD@SA}{\box\CD@VA}{\CD@RA}{\dimen1}}\def\CD@kJ{% +\setbox0=\hbox to\wd0\bgroup\unhbox0 \unskip\unpenalty\dimen7\lastkern\unkern +\ifnum\lastpenalty=1 \unpenalty\CD@UB\else\CD@TB\fi\ifnum\lastpenalty=2 +\unpenalty\dimen2.5\dimen0\advance\dimen2-.5\dimen1\advance\dimen2-% +\axisheight\else\dimen2\z@\fi\setbox0=\lastbox\dimen6\lastkern\unkern\setbox1% +=\lastbox\setbox0=\vbox{\unvbox0 \CD@tE\kern-\dimen1 \else\ifdim\dimen2=\z@ +\else\kern\dimen2 \fi\fi}\ifdim\dimen0<\ht0 \CD@aG v\dimen0<\ht0:upper part of +vertical too short:{\CD@tE\CD@NB\else\CD@wA\fi}\CD@xA\else\setbox0=\vbox to% +\dimen0{\unvbox0}\fi\setbox1=\vtop{\unvbox1}\ifdim\dimen1<\dp1 \CD@aG v\dimen +1<\dp1:lower part of vertical too short:\CD@NB\CD@wA\else\setbox1=\vtop to% +\dimen1{\ifdim\dimen2=\z@\else\kern-\dimen2 \fi\unvbox1 }\fi\box1 \kern\dimen +6 \box0 \kern\dimen7 \CD@HG\global\CD@QA\CD@JK\egroup\CD@JK\CD@QA\relax}% +\countdef\CD@u=14 \newcount\CD@CA\newcount\CD@XB\newcount\CD@NB\let\CD@LB +\insc@unt\newcount\CD@FA\newcount\CD@lA\let\CD@mA\CD@XB\newcount\CD@MB\CD@tG +\CD@DF\CD@bI\CD@aI\CD@aI\def\CD@nD{-1}\def\CD@K{\ifnum\CD@nD<\z@\else +\begingroup\scrollmode\showboxdepth\CD@nD\showboxbreadth\maxdimen\showlists +\endgroup\fi\CD@bI\CD@zF\CD@CA=\CD@u\advance\CD@CA1 \CD@XB=\CD@CA\ifnum\CD@NB +=1 \CD@JA\fi\advance\CD@XB\CD@NB\dimen1\z@\skip0\z@\count@=\insc@unt\advance +\count@\CD@u\divide\count@2 \ifnum\CD@XB>\count@\CD@KB{The diagram has too +many rows! It can't be reformatted.}\else\CD@NG\CD@WI\fi\CD@cH}\def\CD@NG{% +\CD@NB\CD@CA\CD@uF\ifnum\CD@NB<\CD@XB\setbox\CD@NB\box\voidb@x\advance\CD@NB1% +\relax\repeat\CD@NB\CD@CA\skip\z@\z@\CD@uF\CD@GB\lastpenalty\unpenalty\ifnum +\CD@GB>\z@\CD@KE\repeat\ifnum\CD@GB=-123 \CD@tJ\unpenalty\else\cd@shouldnt D% +\fi\ifx\v@grid\relax\else\CD@NB\CD@XB\advance\CD@NB\m@ne\expandafter\CD@VJ +\v@grid\fi\CD@MB\CD@mA\CD@tB\z@\CD@XG\ifx\h@grid\relax\else\expandafter\CD@LJ +\h@grid\fi\count@\CD@XB\advance\count@\m@ne\CD@YB\ht\count@}\def\CD@KE{% +\ifcase\CD@GB\or\CD@MG\else\CD@uA-\lastpenalty\unpenalty\CD@vA\lastpenalty +\unpenalty\setbox0=\lastbox\CD@WG\fi\CD@wD}\def\CD@wD{\skip1\lastskip\unskip +\advance\skip0\skip1 \ifdim\skip1=\z@\else\expandafter\CD@wD\fi}\def\CD@MG{% +\setbox0=\lastbox\CD@pI\dp0 \advance\CD@pI\skip\z@\skip\z@\z@\advance\CD@NF +\CD@pI\CD@uE\ifnum\CD@NB>\CD@CA\CD@NF\DiagramCellHeight\CD@pI\CD@NF\advance +\CD@pI-\CD@qI\fi\fi\CD@qI\ht0 \CD@NF\CD@qI\setbox\CD@NB\hbox{\unhbox\CD@NB +\unhbox0}\dp\CD@NB\CD@pI\ht\CD@NB\CD@qI\advance\CD@NB1 }\def\CD@WG{\ifnum +\CD@uA<\z@\advance\CD@uA\CD@XB\ifnum\CD@uA<\CD@CA\CD@UG\else\CD@OA\dp\CD@uA +\CD@PA\ht\CD@uA\setbox\CD@uA\hbox{\box\z@\penalty\CD@vA\penalty\CD@GB\unhbox +\CD@uA}\dp\CD@uA\CD@OA\ht\CD@uA\CD@PA\fi\else\CD@UG\fi}\def\CD@UG{\CD@KB{% +diagonal goes outside diagram (lost)}}\def\CD@fI{\advance\CD@uA\CD@XB\ifnum +\CD@uA<\CD@CA\CD@UG\else\ifnum\CD@uA=\CD@NB\CD@VG\else\ifnum\CD@uA>\CD@NB +\cd@shouldnt M\else\CD@OA\dp\CD@uA\CD@PA\ht\CD@uA\setbox\CD@uA\hbox{\box\z@ +\penalty\CD@vA\penalty\CD@GB\unhbox\CD@uA}\dp\CD@uA\CD@OA\ht\CD@uA\CD@PA\fi +\fi\fi}\def\CD@WI{\CD@t\CD@AJ\setbox\CD@PC=\hbox{\CD@k A\@super f\CD@lJ f% +\CD@ND}\CD@ZE\z@\CD@JK\z@\CD@kI\z@\CD@kF\z@\CD@NB=\CD@XB\CD@NF\z@\CD@uB\z@ +\CD@uF\ifnum\CD@NB>\CD@CA\advance\CD@NB\m@ne\CD@qI\ht\CD@NB\CD@pI\dp\CD@NB +\advance\CD@NF\CD@qI\CD@rI\advance\CD@uB\CD@NF\CD@KC\CD@ZI\CD@w\ht\CD@NB +\CD@qI\dp\CD@NB\CD@pI\nointerlineskip\box\CD@NB\CD@NF\CD@pI\setbox\CD@NB\null +\ht\CD@NB\CD@uB\repeat\CD@wB\nointerlineskip\box\CD@NB\CD@gG\CD@ZE +\DiagramCellWidth{width}\CD@gG\CD@JK\DiagramCellHeight{height}\CD@VA\CD@LB +\advance\CD@VA-\CD@lA\advance\CD@VA\m@ne\advance\CD@VA\CD@mA\dimen0\wd\CD@VA +\CD@tI\axisheight\dimen1\CD@uB\advance\dimen1-\CD@YB\dimen2\CD@kI\advance +\dimen2-\dimen0 \advance\CD@XB-\CD@CA\advance\CD@LB-\CD@lA}\count@\year +\multiply\count@12 \advance\count@\month\ifnum\count@>24090 \loop\iftrue +\message{gone October 2007!}\repeat\fi\def\CD@wB{\CD@qI-\CD@NF\CD@pI\CD@NF +\setbox\CD@MH=\null\dp\CD@MH\CD@NF\ht\CD@MH-\CD@NF\CD@mF\z@\CD@mI\z@\CD@lA +\CD@LB\advance\CD@lA-\CD@MB\advance\CD@lA\CD@mA\CD@FA\CD@LB\CD@VA\CD@MB\CD@sF +\ifnum\CD@FA>\CD@lA\advance\CD@FA\m@ne\advance\CD@VA\m@ne\CD@tB\wd\CD@VA +\setbox\CD@FA=\box\voidb@x\CD@yB\repeat\CD@w\ht\CD@NB\CD@qI\dp\CD@NB\CD@pI}% +\def\CD@gG#1#2#3{\ifdim#1>.01\CD@zC\CD@PA#2\relax\advance\CD@PA#1\relax +\advance\CD@PA.99\CD@zC\count@\CD@PA\divide\count@\CD@zC\CD@KB{increase cell #% +3 to \the\count@ em}\fi}\def\CD@rI{\CD@FA=\CD@LB\penalty4 \noindent\unhbox +\CD@NB\CD@sF\unskip\setbox0=\lastbox\ifhbox0 \advance\CD@FA\m@ne\setbox\CD@FA +\hbox to\wd0{\null\penalty-9990\null\unhbox0}\repeat\CD@lA\CD@FA\advance +\CD@FA\CD@MB\advance\CD@FA-\CD@mA\ifnum\CD@FA<\CD@LB\count@\CD@FA\advance +\count@\m@ne\dimen0=\wd\count@\count@\CD@MB\advance\count@\m@ne\CD@tB\wd +\count@\CD@sF\ifnum\CD@FA<\CD@LB\CD@DJ\CD@XG\dimen0\wd\CD@FA\advance\CD@FA1 +\repeat\fi\CD@sF\CD@GB\lastpenalty\unpenalty\ifnum\CD@GB>\z@\CD@vA +\lastpenalty\unpenalty\CD@VG\repeat\endgraf\unskip\ifnum\lastpenalty=4 +\unpenalty\else\cd@shouldnt S\fi}\def\CD@VG{\advance\CD@vA\CD@lA\advance +\CD@vA\m@ne\setbox0=\lastbox\ifnum\CD@vA<\CD@LB\setbox\CD@vA\hbox{\box0% +\penalty\CD@GB\unhbox\CD@vA}\else\CD@UG\fi}\def\CD@bG{}\CD@tG\CD@uE\CD@WB +\CD@VB\def\CD@DJ{\advance\dimen0\wd\CD@FA\divide\dimen0\tw@\CD@uE\dimen0% +\DiagramCellWidth\else\CD@V{\dimen0}\DiagramCellWidth\CD@pJ\fi\advance\CD@tB +\dimen0 }\def\CD@XG{\setbox\CD@MB=\vbox{}\dp\CD@MB=\CD@uB\wd\CD@MB\CD@tB +\advance\CD@MB1 }\def\CD@LJ#1,{\def\CD@GK{#1}\ifx\CD@GK\CD@RD\else\advance +\CD@tB\CD@GK\DiagramCellWidth\CD@XG\expandafter\CD@LJ\fi}\def\CD@VJ#1,{\def +\CD@GK{#1}\ifx\CD@GK\CD@RD\else\ifnum\CD@NB>\CD@CA\CD@NF\CD@GK +\DiagramCellHeight\advance\CD@NF-\dp\CD@NB\advance\CD@NB\m@ne\ht\CD@NB\CD@NF +\fi\expandafter\CD@VJ\fi}\def\CD@pJ{\CD@wE\CD@OA\dimen0 \advance\CD@OA-% +\DiagramCellWidth\ifdim\CD@OA>2\MapShortFall\CD@KB{badly drawn diagonals (see +manual)}\let\CD@pJ\empty\fi\else\let\CD@pJ\empty\fi}\def\CD@KC{\CD@VA\CD@mA +\CD@sF\ifnum\CD@VA<\CD@MB\dimen0\dp\CD@VA\advance\dimen0\CD@NF\dp\CD@VA\dimen +0 \advance\CD@VA1 \repeat}\def\CD@bH#1#2#3#4{\ifnum\CD@FA<\CD@LB\CD@OA=#1% +\relax\setbox\CD@FA=\hbox{\setbox0=#2\dimen7=#4\relax\dimen8=#3\relax\ifhbox +\CD@FA\unhbox\CD@FA\advance\CD@OA-\lastkern\unkern\fi\ifdim\CD@OA=\z@\else +\kern-\CD@OA\fi\raise\dimen7\box0 \kern-\dimen8 }\ifnum\CD@FA=\CD@lA\CD@V +\CD@kF\CD@OA\fi\else\cd@shouldnt O\fi}\def\CD@w{\setbox\CD@NB=\hbox{\CD@FA +\CD@lA\CD@VA\CD@mA\CD@PA\z@\relax\CD@sF\ifnum\CD@FA<\CD@LB\CD@tB\wd\CD@VA +\relax\CD@eI\advance\CD@FA1 \advance\CD@VA1 \repeat}\CD@V\CD@kI{\wd\CD@NB}\wd +\CD@NB\z@}\def\CD@eI{\ifhbox\CD@FA\CD@OA\CD@tB\relax\advance\CD@OA-\CD@PA +\relax\ifdim\CD@OA=\z@\else\kern\CD@OA\fi\CD@PA\CD@tB\advance\CD@PA\wd\CD@FA +\relax\unhbox\CD@FA\advance\CD@PA-\lastkern\unkern\fi}\def\CD@ZI{\setbox +\CD@sH=\box\voidb@x\CD@VA=\CD@MB\CD@FA\CD@LB\CD@VA\CD@mA\advance\CD@VA\CD@FA +\advance\CD@VA-\CD@lA\advance\CD@VA\m@ne\CD@tB\wd\CD@VA\count@\CD@LB\advance +\count@\m@ne\CD@hF.5\wd\count@\advance\CD@hF\CD@tB\CD@A\m@ne\CD@gD\@m\CD@sF +\ifnum\CD@FA>\CD@lA\advance\CD@FA\m@ne\advance\CD@hF-\CD@tB\CD@PI\wd\CD@VA +\CD@tB\advance\CD@hF\CD@tB\advance\CD@VA\m@ne\CD@tB\wd\CD@VA\repeat\CD@mF +\CD@kF\CD@mI-\CD@mF\CD@vB}\newcount\CD@GB\def\CD@s{}\def\CD@t{\mathsurround +\z@\hsize\z@\rightskip\z@ plus1fil minus\maxdimen\parfillskip\z@\linepenalty +9000 \looseness0 \hfuzz\maxdimen\hbadness10000 \clubpenalty0 \widowpenalty0 +\displaywidowpenalty0 \interlinepenalty0 \predisplaypenalty0 +\postdisplaypenalty0 \interdisplaylinepenalty0 \interfootnotelinepenalty0 +\floatingpenalty0 \brokenpenalty0 \everypar{}\leftskip\z@\parskip\z@ +\parindent\z@\pretolerance10000 \tolerance10000 \hyphenpenalty10000 +\exhyphenpenalty10000 \binoppenalty10000 \relpenalty10000 \adjdemerits0 +\doublehyphendemerits0 \finalhyphendemerits0 \CD@IA\prevdepth\z@}\newbox +\CD@KG\newbox\CD@IG\def\CD@JG{\unhcopy\CD@KG}\def\CD@HG{\unhcopy\CD@IG}\def +\CD@iJ{\hbox{}\penalty1\nointerlineskip}\def\CD@PI{\penalty5 \noindent\setbox +\CD@MH=\null\CD@mF\z@\CD@mI\z@\ifnum\CD@FA<\CD@LB\ht\CD@MH\ht\CD@FA\dp\CD@MH +\dp\CD@FA\unhbox\CD@FA\skip0=\lastskip\unskip\else\CD@OK\skip0=\z@\fi\endgraf +\ifcase\prevgraf\cd@shouldnt Y \or\cd@shouldnt Z \or\CD@RI\or\CD@XI\else +\CD@QI\fi\unskip\setbox0=\lastbox\unskip\unskip\unpenalty\noindent\unhbox0% +\setbox0\lastbox\unpenalty\unskip\unskip\unpenalty\setbox0\lastbox\CD@tF +\CD@GB\lastpenalty\unpenalty\ifnum\CD@GB>\z@\setbox\z@\lastbox\CD@lB\repeat +\endgraf\unskip\unskip\unpenalty}\def\CD@YJ{\CD@uA\CD@XB\advance\CD@uA-\CD@NB +\CD@vA\CD@FA\advance\CD@vA-\CD@lA\advance\CD@vA1 \expandafter\message{% +prevgraf=\the\prevgraf at (\the\CD@uA,\the\CD@vA)}}\def\CD@XI{\CD@CE\setbox +\CD@lI=\lastbox\setbox\CD@lI=\hbox{\unhbox\CD@lI\unskip\unpenalty}\unskip +\ifdim\ht\CD@lI>\ht\CD@PC\setbox\CD@MH=\copy\CD@lI\else\ifdim\dp\CD@lI>\dp +\CD@PC\setbox\CD@MH=\copy\CD@lI\else\CD@FG\CD@lI\fi\fi\advance\CD@mF.5\wd +\CD@lI\advance\CD@mI.5\wd\CD@lI\setbox\CD@lI=\hbox{\unhbox\CD@lI\CD@HG}\CD@bH +\CD@mF{\box\CD@lI}\CD@mI\z@\CD@yB\CD@vB}\def\CD@CE{\ifnum\CD@A>0 \advance +\dimen0-\CD@tB\CD@iA-.5\dimen0 \CD@A-\CD@A\else\CD@A0 \CD@iA\z@\fi\setbox +\CD@MH=\lastbox\setbox\CD@MH=\hbox{\unhbox\CD@MH\unskip\unskip\unpenalty +\setbox0=\lastbox\global\CD@QA\lastkern\unkern}\advance\CD@iA-.5\CD@QA\unskip +\setbox\CD@MH=\null\CD@mI\CD@iA\CD@mF-\CD@iA}\def\CD@Z{\ht\CD@MH\CD@tI\dp +\CD@MH\CD@sI}\def\CD@FG#1{\setbox\CD@MH=\hbox{\CD@V{\ht\CD@MH}{\ht#1}\CD@V{% +\dp\CD@MH}{\dp#1}\CD@V{\wd\CD@MH}{\wd#1}\vrule height\ht\CD@MH depth\dp\CD@MH +width\wd\CD@MH}}\def\CD@QI{\CD@CE\CD@Z\setbox\CD@lI=\lastbox\unskip\setbox +\CD@lF=\lastbox\unskip\setbox\CD@lF=\hbox{\unhbox\CD@lF\unskip\global\CD@yA +\lastpenalty\unpenalty}\advance\CD@yA9999 \ifcase\CD@yA\CD@VI\or\CD@YI\or +\CD@TI\or\CD@dI\or\CD@cI\or\CD@SI\else\cd@shouldnt9\fi}\def\CD@VI{\CD@FG +\CD@lI\CD@UI\setbox\CD@sH=\box\CD@lF\setbox\CD@tH=\box\CD@lI}\def\CD@YI{% +\CD@FG\CD@lF\setbox\CD@lI\hbox{\penalty8 \unhbox\CD@lI\unskip\unpenalty\ifnum +\lastpenalty=8 \else\CD@xH\fi}\CD@UI\setbox\CD@lF=\hbox{\unhbox\CD@lF\unskip +\unpenalty\global\setbox\CD@DA=\lastbox}\ifdim\wd\CD@lF=\z@\else\CD@xH\fi +\setbox\CD@sH=\box\CD@DA}\def\CD@xH{\CD@KB{extra material in \string\pile +\space cell (lost)}}\def\CD@UI{\CD@yB\ifvoid\CD@sH\else\CD@KB{Clashing +horizontal arrows}\CD@mI.5\CD@hF\CD@mF-\CD@mI\CD@vB\CD@mI\z@\CD@mF\z@\fi +\CD@hI\CD@hF\advance\CD@hI-\CD@mI\CD@hF-\CD@mF\CD@JC\CD@FA}\def\CD@RI{\setbox +0\lastbox\unskip\CD@iA\z@\CD@Z\ifdim\skip0>\z@\CD@tJ\CD@A0 \else\ifnum\CD@A<1 +\CD@A0 \dimen0\CD@tB\fi\advance\CD@A1 \fi}\def\VonH{\CD@MA46\VonH{.5\CD@LF}}% +\def\HonV{\CD@MA57\HonV{.5\CD@LF}}\def\HmeetV{\CD@MA44\HmeetV{-\MapShortFall}% +}\def\CD@MA#1#2#3#4{\CD@pB34#1{\string#3}\CD@SD\CD@GB-999#2 \dimen0=#4\CD@tI +\dimen0\advance\CD@tI\axisheight\CD@sI\dimen0\advance\CD@sI-\axisheight\CD@CF +\CD@HC\CD@ZD}\def\CD@HC#1{\setbox0=\hbox{\CD@k#1\CD@ND}\dimen0.5\wd0 \CD@tI +\ht0 \CD@sI\dp0 \CD@ZD}\def\CD@SD{\setbox0=\null\ht0=\CD@tI\dp0=\CD@sI\wd0=% +\dimen0 \copy0\penalty\CD@GB\box0 }\def\CD@TI{\CD@GC\CD@yB}\def\CD@dI{\CD@GC +\CD@vB}\def\CD@SI{\CD@GC\CD@yB\CD@vB}\def\CD@GC{\setbox\CD@lI=\hbox{\unhbox +\CD@lI}\setbox\CD@lF=\hbox{\unhbox\CD@lF\global\setbox\CD@DA=\lastbox}\ht +\CD@MH\ht\CD@DA\dp\CD@MH\dp\CD@DA\advance\CD@mF\wd\CD@DA\advance\CD@mI\wd +\CD@lI}\CD@tG\ifPositiveGradient\CD@CI\CD@BI\CD@CI\CD@tG\ifClimbing\CD@rB +\CD@qB\CD@rB\newcount\DiagonalChoice\DiagonalChoice\m@ne\ifx\tenln\nullfont +\CD@tJ\def\CD@qF{\CD@KH\ifPositiveGradient/\else\CD@k\backslash\CD@ND\fi}% +\else\def\CD@qF{\CD@rF\char\count@}\fi\let\CD@rF\tenln\def\Use@line@char#1{% +\hbox{#1\CD@rF\ifPositiveGradient\else\advance\count@64 \fi\char\count@}}\def +\CD@cF{\Use@line@char{\count@\CD@TC\multiply\count@8\advance\count@-9\advance +\count@\CD@LH}}\def\CD@ZF{\Use@line@char{\ifcase\DiagonalChoice\CD@gF\or +\CD@fF\or\CD@fF\else\CD@gF\fi}}\def\CD@gF{\ifnum\CD@TC=\z@\count@\rq33 \else +\count@\CD@TC\multiply\count@\sixt@@n\advance\count@-9\advance\count@\CD@LH +\advance\count@\CD@LH\fi}\def\CD@fF{\count@\rq\ifcase\CD@LH55\or\ifcase\CD@TC +66\or22\or52\or61\or72\fi\or\ifcase\CD@TC66\or25\or22\or63\or52\fi\or\ifcase +\CD@TC66\or16\or36\or22\or76\fi\or\ifcase\CD@TC66\or27\or25\or67\or22\fi\fi +\relax}\def\CD@uC#1{\hbox{#1\setbox0=\Use@line@char{#1}\ifPositiveGradient +\else\raise.3\ht0\fi\copy0 \kern-.7\wd0 \ifPositiveGradient\raise.3\ht0\fi +\box0}}\def\CD@jF#1{\hbox{\setbox0=#1\kern-.75\wd0 \vbox to.25\ht0{% +\ifPositiveGradient\else\vss\fi\box0 \ifPositiveGradient\vss\fi}}}\def\CD@jI#% +1{\hbox{\setbox0=#1\dimen0=\wd0 \vbox to.25\ht0{\ifPositiveGradient\vss\fi +\box0 \ifPositiveGradient\else\vss\fi}\kern-.75\dimen0 }}\CD@RC{+h:>}{% +\Use@line@char\CD@fF}\CD@RC{-h:>}{\Use@line@char\CD@gF}\CD@nF{+t:<}{-h:>}% +\CD@nF{-t:<}{+h:>}\CD@RC{+t:>}{\CD@jF{\Use@line@char\CD@fF}}\CD@RC{-t:>}{% +\CD@jI{\Use@line@char\CD@gF}}\CD@nF{+h:<}{-t:>}\CD@nF{-h:<}{+t:>}\CD@RC{+h:>>% +}{\CD@uC\CD@fF}\CD@RC{-h:>>}{\CD@uC\CD@gF}\CD@nF{+t:<<}{-h:>>}\CD@nF{-t:<<}{+% +h:>>}\CD@nF{+h:>->}{+h:>>}\CD@nF{-h:>->}{-h:>>}\CD@nF{+t:<-<}{-h:>>}\CD@nF{-t% +:<-<}{+h:>>}\CD@RC{+t:>>}{\CD@jF{\CD@uC\CD@fF}}\CD@RC{-t:>>}{\CD@jI{\CD@uC +\CD@gF}}\CD@nF{+h:<<}{-t:>>}\CD@nF{-h:<<}{+t:>>}\CD@nF{+t:>->}{+t:>>}\CD@nF{-% +t:>->}{-t:>>}\CD@nF{+h:<-<}{-t:>>}\CD@nF{-h:<-<}{+t:>>}\CD@RC{+f:-}{\CD@EF +\null\else\CD@cF\fi}\CD@nF{-f:-}{+f:-}\def\CD@tC#1#2{\vbox to#1{\vss\hbox to#% +2{\hss.\hss}\vss}}\def\hfdot{\CD@tC{2\axisheight}{.5em}}% +%% % .7em until 29.7.98 +\def\vfdot{\CD@tC{1ex}\z@}%% % 1.46ex until 29.7.98 +\def\CD@bF{\hbox{\dimen0=.3\CD@zC\dimen1\dimen0 \ifnum\CD@LH>\CD@TC\CD@iC{% +\dimen1}\else\CD@dG{\dimen0}\fi\CD@tC{\dimen0}{\dimen1}}}\newarrowfiller{.}% +\hfdot\hfdot\vfdot\vfdot\def\dfdot{\CD@bF\CD@CK}\CD@RC{+f:.}{\dfdot}\CD@RC{-f% +:.}{\dfdot}\def\CD@@K#1{\hbox\bgroup\def\CD@CH{#1\egroup}\afterassignment +\CD@CH%% +\count@=\rq}\def\lnchar{\CD@@K\CD@qF}\let\laf\lnchar\let\lah\lnchar\def\lad{% +\CD@@K\xlad}\def\xlad{\setbox2=\hbox{\CD@qF}\setbox0=\hbox to.3\wd2{\hss.\hss +}\dimen0=\ht0 \advance\dimen0-\dp0 \dimen1=.3\ht2 \advance\dimen1-\dimen0 \dp +0=.5\dimen1 \dimen1=.3\ht2 \advance\dimen1\dimen0 \ht0=.5\dimen1 \raise\dp0% +\box0}\def\lahh{\CD@@K\xlahh}\def\lat{\CD@@K\xlat}\def\xlat{\setbox0=\hbox{% +\CD@qF}\dimen0=\ht0 \setbox1=\hbox to.25\wd0{\ifcase\DiagonalChoice\box0\hss +\or\hss\box0 \or\hss\box0 \or\box0\hss\fi}\vbox to.25\dimen0{\ifClimbing\box1% +\vss\else\vss\box1\fi\kern\z@}}\def\xlahh{\setbox0=\hbox{\CD@qF}% +\ifPositiveGradient\CD@tJ\copy0 \kern-.7\wd0 \mv.3\ht0\box0 \else\ifClimbing +\CD@tJ\copy0 \kern-.7\wd0 \mv.3\ht0\box0 \else\mv-.3\ht0\copy0 \kern-.7\wd0 +\box0 \fi\fi}\def\CD@dF#1{\setbox#1=\hbox{\dimen5\dimen#1 \setbox8=\box#1 +\dimen1\wd8 \count@\dimen5 \divide\count@\dimen1 \ifnum\count@=0 \box8 \ifdim +\dimen5<.95\dimen1 \CD@gB{diagonal line too short}\fi\else\dimen3=\dimen5 +\advance\dimen3-\dimen1 \divide\dimen3\count@\dimen4\dimen3 \CD@dG{\dimen4}% +\ifPositiveGradient\multiply\dimen4\m@ne\fi\dimen6\dimen1 \advance\dimen6-% +\dimen3 \loop\raise\count@\dimen4\copy8 \ifnum\count@>0 \kern-\dimen6 \advance +\count@\m@ne\repeat\fi}}\def\CD@CG#1{\CD@EF\CD@xJ{#1}\else\CD@dF{#1}\fi}\def +\CD@IH#1{}\newdimen\objectheight\objectheight1.8ex \newdimen\objectwidth +\objectwidth1em \def\CD@YD{\dimen6=\CD@aK\DiagramCellHeight\dimen7=\CD@WK +\DiagramCellWidth\CD@KJ\ifnum\CD@LH>0 \ifnum\CD@TC>0 \CD@aF\else\aftergroup +\CD@VC\fi\else\aftergroup\CD@UC\fi}\def\CD@VC{\CD@YA{diagonal map is nearly +vertical}\CD@NA}\def\CD@UC{\CD@YA{diagonal map is nearly horizontal}\CD@NA}% +\CD@rG\CD@NA{Use an orthogonal map instead}\def\CD@aF{\CD@MJ\dimen3\dimen7% +\dimen7\dimen6\CD@iC{\dimen7}\advance\dimen3-\dimen7 \CD@MF\ifnum\CD@LH>% +\CD@TC\advance\dimen6-\dimen1\advance\dimen6-\dimen5 \CD@iC{\dimen1}\CD@iC{% +\dimen5}\else\dimen0\dimen1\advance\dimen0\dimen5\CD@dG{\dimen0}\advance +\dimen6-\dimen0 \fi\dimen2.5\dimen7\advance\dimen2-\dimen1 \dimen4.5\dimen7% +\advance\dimen4-\dimen5 \ifPositiveGradient\dimen0\dimen5 \advance\dimen1-% +\CD@WK\DiagramCellWidth\advance\dimen1 \CD@ZK\DiagramCellWidth\setbox6=\llap{% +\unhbox6\kern.1\ht2}\setbox7=\rlap{\kern.1\ht2\unhbox7}\else\dimen0\dimen1 +\advance\dimen1-\CD@ZK\DiagramCellWidth\setbox7=\llap{\unhbox7\kern.1\ht2}% +\setbox6=\rlap{\kern.1\ht2\unhbox6}\fi\setbox6=\vbox{\box6\kern.1\wd2}\setbox +7=\vtop{\kern.1\wd2\box7}\CD@dG{\dimen0}\advance\dimen0-\axisheight\advance +\dimen0-\CD@bK\DiagramCellHeight\dimen5-\dimen0 \advance\dimen0\dimen6 +\advance\dimen1.5\dimen3 \ifdim\wd3>\z@\ifdim\ht3>-\dp3\CD@TB\fi\fi\dimen3% +\dimen2 \dimen7\dimen2\advance\dimen7\dimen4 \ifvoid3 \else\CD@tE\else\dimen8% +\ht3\advance\dimen8-\axisheight\CD@iC{\dimen8}\CD@X{\dimen8}{.5\wd3}\dimen9% +\dp3\advance\dimen9\axisheight\CD@iC{\dimen9}\CD@X{\dimen9}{.5\wd3}% +\ifPositiveGradient\advance\dimen2-\dimen9\advance\dimen4-\dimen8 \else +\advance\dimen4-\dimen9\advance\dimen2-\dimen8 \fi\fi\advance\dimen3-.5\wd3 +\fi\dimen9=\CD@aK\DiagramCellHeight\advance\dimen9-2\DiagramCellHeight\CD@tE +\advance\dimen2\dimen4 \CD@CG{2}\dimen2-\dimen0\advance\dimen2\dp2 \else +\CD@CG{2}\CD@CG{4}\ifPositiveGradient\dimen2-\dimen0\advance\dimen2\dp2 \dimen +4\dimen5\advance\dimen4-\ht4 \else\dimen4-\dimen0\advance\dimen4\dp4 \dimen2% +\dimen5\advance\dimen2-\ht2 \fi\fi\setbox0=\hbox to\z@{\kern\dimen1 \ifvoid1 +\else\ifPositiveGradient\advance\dimen0-\dp1 \lower\dimen0 \else\advance +\dimen5-\ht1 \raise\dimen5 \fi\rlap{\unhbox1}\fi\raise\dimen2\rlap{\unhbox2}% +\ifvoid3 \else\lower.5\dimen9\rlap{\kern\dimen3\unhbox3}\fi\kern.5\dimen7 +\lower.5\dimen9\box6 \lower.5\dimen9\box7 \kern.5\dimen7 \CD@tE\else\raise +\dimen4\llap{\unhbox4}\fi\ifvoid5 \else\ifPositiveGradient\advance\dimen5-\ht +5 \raise\dimen5 \else\advance\dimen0-\dp5 \lower\dimen0 \fi\llap{\unhbox5}\fi +\hss}\ht0=\axisheight\dp0=-\ht0\box0 }\def\NorthWest{\CD@BI\CD@rB +\DiagonalChoice0 }\def\NorthEast{\CD@CI\CD@rB\DiagonalChoice1 }\def\SouthWest +{\CD@CI\CD@qB\DiagonalChoice3 }\def\SouthEast{\CD@BI\CD@qB\DiagonalChoice2 }% +\def\CD@aD{\vadjust{\CD@uA\CD@FA\advance\CD@uA\ifPositiveGradient\else-\fi +\CD@ZK\relax\CD@vA\CD@NB\advance\CD@vA-\CD@bK\relax\hbox{\advance\CD@uA +\ifPositiveGradient-\fi\CD@WK\advance\CD@vA\CD@aK\hbox{\box6 \kern\CD@DC\kern +\CD@eJ\penalty1 \box7 \box\z@}\penalty\CD@uA\penalty\CD@vA}\penalty\CD@uA +\penalty\CD@vA\penalty104}}\def\CD@eH#1{\relax\vadjust{\hbox@maths{#1}% +\penalty\CD@FA\penalty\CD@NB\penalty\tw@}}\def\CD@lB{\ifcase\CD@GB\or\or +\CD@bH{.5\wd0}{\box0}{.5\wd0}\z@\or\unhbox\z@\setbox\z@\lastbox\CD@bH{.5\wd0}% +{\box0}{.5\wd0}\z@\unpenalty\unpenalty\setbox\z@\lastbox\or\CD@TG\else +\advance\CD@GB-100 \ifnum\CD@GB<\z@\cd@shouldnt B\fi\setbox\z@\hbox{\kern +\CD@mF\copy\CD@MH\kern\CD@mI\CD@uA\CD@XB\advance\CD@uA-\CD@NB\penalty\CD@uA +\CD@uA\CD@FA\advance\CD@uA-\CD@lA\penalty\CD@uA\unhbox\z@\global\CD@yA +\lastpenalty\unpenalty\global\CD@zA\lastpenalty\unpenalty}\CD@uA-\CD@yA\CD@vA +\CD@zA\CD@fI\fi}\def\CD@TG{\unhbox\z@\setbox\z@\lastbox\CD@uA\lastpenalty +\unpenalty\advance\CD@uA\CD@mA\CD@vA\CD@XB\advance\CD@vA-\lastpenalty +\unpenalty\dimen1\lastkern\unkern\setbox3\lastbox\dimen0\lastkern\unkern +\setbox0=\hbox to\z@{\unhbox0\setbox0\lastbox\setbox7\lastbox\unpenalty\CD@eJ +\lastkern\unkern\CD@DC\lastkern\unkern\setbox6\lastbox\dimen7\CD@tB\advance +\dimen7-\wd\CD@uA\ifdim\dimen7<\z@\CD@CI\multiply\dimen7\m@ne\let\mv\empty +\else\CD@BI\def\mv{\raise\ht1}\kern-\dimen7 \fi\ifnum\CD@vA>\CD@NB\dimen6% +\CD@uB\advance\dimen6-\ht\CD@vA\else\dimen6\z@\fi\CD@jJ\CD@mK\setbox1\null\ht +1\dimen6\wd1\dimen7 \dimen7\dimen2 \dimen6\wd1 \CD@KJ\CD@uA\CD@LH\CD@vA\CD@TC +\dimen6\ht1 \CD@KJ\setbox2\null\divide\dimen2\tw@\advance\dimen2\CD@eJ\CD@eG{% +\dimen2}\wd2\dimen2 \dimen0.5\dimen7 \advance\dimen0\ifPositiveGradient\else-% +\fi\CD@eJ\CD@dG{\dimen0}\advance\dimen0-\axisheight\ht2\dimen0 \dimen0\CD@DC +\CD@eG{\dimen0}\advance\dimen0\ht2\ht2\dimen0 \dimen0\ifPositiveGradient-\fi +\CD@DC\CD@dG{\dimen0}\advance\dimen0\wd2\wd2\dimen0 \setbox4\null\dimen0 .6% +\CD@zC\CD@eG{\dimen0}\ht4\dimen0 \dimen0 .2\CD@zC\CD@dG{\dimen0}\wd4\dimen0 +\dimen0\wd2 \ifvoid6\else\dimen1\ht4 \advance\dimen1\ht2 \CD@CC6+-\raise +\dimen1\rlap{\ifPositiveGradient\advance\dimen0-\wd6\advance\dimen0-\wd4 \else +\advance\dimen0\wd4 \fi\kern\dimen0\box6}\fi\dimen0\wd2 \ifvoid7\else\dimen1% +\ht4 \advance\dimen1-\ht2 \CD@CC7-+\lower\dimen1\rlap{\ifPositiveGradient +\advance\dimen0\wd4 \else\advance\dimen0-\wd7\advance\dimen0-\wd4 \fi\kern +\dimen0\box7}\fi\mv\box0\hss}\ht0\z@\dp0\z@\CD@bH{\z@}{\box\z@}{\z@}{% +\axisheight}}\def\CD@CC#1#2#3{\dimen4.5\wd#1 \ifdim\dimen4>.25\dimen7\dimen4=% +.25\dimen7\fi\ifdim\dimen4>\CD@zC\dimen4.4\dimen4 \advance\dimen4.6\CD@zC\fi +\CD@eG{\dimen4}\dimen5\axisheight\CD@dG{\dimen5}\advance\dimen4-\dimen5 \dimen +5\dimen4\CD@eG{\dimen5}\advance\dimen0\ifPositiveGradient#2\else#3\fi\dimen5 +\CD@dG{\dimen4}\advance\dimen1\dimen4 } \def\CD@eD#1{\expandafter\CD@IK{#1}}% +\CD@ZA\CD@EK{output is PostScript dependent}\def\CD@SC{\CD@IK{/bturn {gsave +currentpoint currentpoint translate 4 2 roll neg exch atan rotate neg exch neg +exch translate } def /eturn {currentpoint grestore moveto} def}}\def\CD@gK{% +\relax\CD@hK\pdfliteral{Q}\else\CD@IK{eturn}\fi} \def\CD@OJ#1{\count@#1\relax +\multiply\count@7\advance\count@16577\divide\count@33154 }\def\CD@fD#1{% +\expandafter\special{#1}} \def\CD@xJ#1{\setbox#1=\hbox{\dimen0\dimen#1\CD@dG{% +\dimen0}\CD@OJ{\dimen0}\setbox0=\null\ifPositiveGradient\count@-\count@\ht0% +\dimen0 \else\dp0\dimen0 \fi\box0 \CD@uA\count@\CD@OJ\CD@LF\CD@fD{pn \the +\count@}\CD@fD{pa 0 0}\CD@OJ{\dimen#1}\CD@fD{pa \the\count@\space\the\CD@uA}% +\CD@fD{fp}\kern\dimen#1}}\def\CD@JI{\CD@KJ\begingroup\ifdim\dimen7<\dimen6 +\dimen2=\dimen6 \dimen6=\dimen7 \dimen7=\dimen2 \count@\CD@LH\CD@LH\CD@TC +\CD@TC\count@\else\dimen2=\dimen7 \fi\ifdim\dimen6>.01\p@\CD@KI\global\CD@QA +\dimen0 \else\global\CD@QA\dimen7 \fi\endgroup\dimen2\CD@QA\CD@iK\CD@lK{% +\ifPositiveGradient\else-\fi\dimen6}\CD@iK\CD@kK{\ifPositiveGradient-\fi +\dimen6}\CD@iK\CD@eK{\dimen7}}\def\CD@KI{\CD@hJ\ifdim\dimen7>1.73\dimen6 +\divide\dimen2 4 \multiply\CD@TC2 \else\dimen2=0.353553\dimen2 \advance\CD@LH +-\CD@TC\multiply\CD@TC4 \fi\dimen0=4\dimen2 \CD@ZG4\CD@ZG{-2}\CD@ZG2\CD@ZG{-2% +.5}}\def\CD@AI{\begingroup\count@\dimen0 \dimen2 45pt \divide\count@\dimen2 +\ifdim\dimen0<\z@\advance\count@\m@ne\fi\ifodd\count@\advance\count@1\CD@@A +\else\CD@y\fi\advance\dimen0-\count@\dimen2 \CD@gE\multiply\dimen0\m@ne\fi +\ifnum\count@<0 \multiply\count@-7 \fi\dimen3\dimen1 \dimen6\dimen0 \dimen7 +3754936sp \ifdim\dimen0<6\p@\def\CD@OG{4000}\fi\CD@KJ\dimen2\dimen3\CD@dG{% +\dimen2}\CD@hJ\multiply\CD@TC-6 \dimen0\dimen2 \CD@ZG1\CD@ZG{0.3}\dimen1% +\dimen0 \dimen2\dimen3 \dimen0\dimen3 \CD@ZG3\CD@ZG{1.5}\CD@ZG{0.3}\divide +\count@2 \CD@gE\multiply\dimen1\m@ne\fi\ifodd\count@\dimen2\dimen1\dimen1% +\dimen0\dimen0-\dimen2 \fi\divide\count@2 \ifodd\count@\multiply\dimen0\m@ne +\multiply\dimen1\m@ne\fi\global\CD@QA\dimen0\global\CD@RA\dimen1\endgroup +\dimen6\CD@QA\dimen7\CD@RA}\def\CD@OC{255}\let\CD@OG\CD@OC\def\CD@KJ{% +\begingroup\ifdim\dimen7<\dimen6 \dimen9\dimen7\dimen7\dimen6\dimen6\dimen9% +\CD@@A\else\CD@y\fi\dimen2\z@\dimen3\CD@XH\dimen4\CD@XH\dimen0\z@\dimen8=% +\CD@OG\CD@XH\CD@lC\global\CD@yA\dimen\CD@gE0\else3\fi\global\CD@zA\dimen +\CD@gE3\else0\fi\endgroup\CD@LH\CD@yA\CD@TC\CD@zA}\def\CD@lC{\count@\dimen6 +\divide\count@\dimen7 \advance\dimen6-\count@\dimen7 \dimen9\dimen4 \advance +\dimen9\count@\dimen0 \ifdim\dimen9>\dimen8 \CD@@C\else\CD@AC\ifdim\dimen6>% +\z@\dimen9\dimen6 \dimen6\dimen7 \dimen7\dimen9 \expandafter\expandafter +\expandafter\CD@lC\fi\fi}\def\CD@@C{\ifdim\dimen0=\z@\ifdim\dimen9<2\dimen8 +\dimen0\dimen8 \fi\else\advance\dimen8-\dimen4 \divide\dimen8\dimen0 \ifdim +\count@\CD@XH<2\dimen8 \count@\dimen8 \dimen9\dimen4 \advance\dimen9\count@ +\dimen0 \CD@AC\fi\fi}\def\CD@AC{\dimen4\dimen0 \dimen0\dimen9 \advance\dimen2% +\count@\dimen3 \dimen9\dimen2 \dimen2\dimen3 \dimen3\dimen9 }\def\CD@ZG#1{% +\CD@dG{\dimen2}\advance\dimen0 #1\dimen2 }\def\CD@dG#1{\divide#1\CD@TC +\multiply#1\CD@LH}\def\CD@eG#1{\divide#1\CD@vA\multiply#1\CD@uA}\def\CD@iC#1{% +\divide#1\CD@LH\multiply#1\CD@TC}\def\CD@hJ{\dimen6\CD@LH\CD@XH\multiply +\dimen6\CD@LH\dimen7\CD@TC\CD@XH\multiply\dimen7\CD@TC\CD@KJ}\def\CD@iK#1#2{% +\begingroup\dimen@#2\relax\loop\ifdim\dimen2<.4\maxdimen\multiply\dimen2\tw@ +\multiply\dimen@\tw@\repeat\divide\dimen2\@cclvi\divide\dimen@\dimen2\relax +\multiply\dimen@\@cclvi\expandafter\CD@jK\the\dimen@\endgroup\let#1\CD@fK}{% +\catcode\lq p=12 \catcode\lq0=12 \catcode\lq.=12 \catcode\lq t=12 \gdef\CD@jK +#1pt{\gdef\CD@fK{#1}}}\ifx\errorcontextlines\undefined\CD@tJ\let\CD@GH\relax +\else\def\CD@GH{\errorcontextlines\m@ne}\fi\ifnum\inputlineno<0 \let\CD@CD +\empty\let\CD@W\empty\let\CD@mD\relax\let\CD@uI\relax\let\CD@vI\relax\let +\CD@zF\relax\message{! Why not upgrade to TeX version 3? (available since 1990% +)}\else\def\CD@W{ at line \number\inputlineno}\def\CD@mD{ - first occurred}% +\def\CD@uI{\edef\CD@h{\the\inputlineno}\global\let\CD@jB\CD@h}\def\CD@h{9999}% +\def\CD@vI{\xdef\CD@jB{\the\inputlineno}}\def\CD@jB{\CD@h}\def\CD@zF{\ifnum +\CD@h<\inputlineno\edef\CD@CD{\space at lines \CD@h--\the\inputlineno}\else +\edef\CD@CD{\CD@W}\fi}\fi\let\CD@CD\empty\def\CD@YA#1#2{\CD@GH\errhelp=#2% +\expandafter\errmessage{\CD@tA: #1}}\def\CD@KB#1{\begingroup\expandafter +\message{! \CD@tA: #1\CD@CD}\ifnum\CD@XB>\CD@NB\ifnum\CD@CA>\CD@NB\else\ifnum +\CD@lA>\CD@FA\else\ifnum\CD@LB>\CD@FA\advance\CD@XB-\CD@NB\advance\CD@FA-% +\CD@lA\advance\CD@FA1\relax\expandafter\message{! (error detected at row \the +\CD@XB, column \the\CD@FA, but probably caused elsewhere)}\fi\fi\fi\fi +\endgroup}\def\CD@gB#1{{\expandafter\message{\CD@tA\space Warning: #1\CD@W}}}% +\def\CD@CB#1#2{\CD@gB{#1 \string#2 is obsolete\CD@mD}}\def\CD@AB#1{\CD@CB{% +Dimension}{#1}\CD@DE#1\CD@BB\CD@BB}\def\CD@BB{\CD@OA=}\def\CD@@B#1{\CD@CB{% +Count}{#1}\CD@DE#1\CD@OH\CD@OH}\def\CD@OH{\count@=}\def\HorizontalMapLength{% +\CD@AB\HorizontalMapLength}\def\VerticalMapHeight{\CD@AB\VerticalMapHeight}% +\def\VerticalMapDepth{\CD@AB\VerticalMapDepth}\def\VerticalMapExtraHeight{% +\CD@AB\VerticalMapExtraHeight}\def\VerticalMapExtraDepth{\CD@AB +\VerticalMapExtraDepth}\def\DiagonalLineSegments{\CD@@B\DiagonalLineSegments}% +\ifx\tenln\nullfont\CD@ZA\CD@KH{\CD@eF\space diagonal line and arrow font not +available}\else\let\CD@KH\relax\fi\def\CD@aG#1#2<#3:#4:#5#6{\begingroup\CD@PA +#3\relax\advance\CD@PA-#2\relax\ifdim.1em<\CD@PA\CD@uA#5\relax\CD@vA#6\relax +\ifnum\CD@uA<\CD@vA\count@\CD@vA\advance\count@-\CD@uA\CD@KB{#4 by \the\CD@PA +}\if#1v\let\CD@CH\CD@JK\edef\tmp{\the\CD@uA--\the\CD@vA,\the\CD@FA}\else +\advance\count@\count@\if#1l\advance\count@-\CD@A\else\if#1r\advance\count@ +\CD@A\fi\fi\advance\CD@PA\CD@PA\let\CD@CH\CD@ZE\edef\tmp{\the\CD@NB,\the +\CD@uA--\the\CD@vA}\fi\divide\CD@PA\count@\ifdim\CD@CH<\CD@PA\global\CD@CH +\CD@PA\fi\fi\fi\endgroup}\CD@tG\CD@xE\CD@JD\CD@ID\CD@rG\CD@xI{See the message +above.}\CD@rG\CD@lH{Perhaps you've forgotten to end the diagram before +resuming the text, in\CD@uG which case some garbage may be added to the +diagram, but we should be ok now.\CD@uG Alternatively you've left a blank line +in the middle - TeX will now complain\CD@uG that the remaining \CD@S s are +misplaced - so please use comments for layout.}\CD@rG\CD@hD{You have already +closed too many brace pairs or environments; an \CD@HD\CD@uG command was (% +over)due.}\CD@rG\CD@hH{\CD@dC\space and \CD@HD\space commands must match.}% +\def\CD@jH{\ifnum\inputlineno=0 \else\expandafter\CD@iH\fi}\def\CD@iH{\CD@MD +\CD@GD\crcr\CD@YA{missing \CD@HD\space inserted before \CD@kH- type "h"}% +\CD@lH\enddiagram\CD@AG\CD@kH\par}\def\CD@AG#1{\edef\enddiagram{\noexpand +\CD@rD{#1\CD@W}}}\def\CD@rD#1{\CD@YA{\CD@HD\space(anticipated by #1) ignored}% +\CD@xI\let\enddiagram\CD@SG}\def\CD@SG{\CD@YA{misplaced \CD@HD\space ignored}% +\CD@hH}\def\CD@mC{\CD@YA{missing \CD@HD\space inserted.}\CD@hD\CD@AG{closing +group}}\ifx\DeclareOption\undefined\else\ifx\DeclareOption\@notprerr\else +\DeclareOption*{\let\CD@N\relax\let\CD@DH\relax\expandafter\CD@@E +\CurrentOption,}\fi\fi +%%======================================================================% +%% % +%% (22) AUXILLARY MACROS FOR ADJUSTMENT OF COMPONENTS % +%% % +%%======================================================================% + +%% NOTE: The recommended way of defining arrow commands is now +%% \newarrow{Name}{tail}{filler}{middle}{filler}{head} +%% which defines \rName, \lName, \dName and \uName using arrow parts which +%% have themselves previously been defined using the commands +%% \newarrowtail, \newarrowfiller, \newarrowmiddle and \newarrowhead. + +%% The components \rhvee etc have been retained for the time being, as an +%% intermediate stage and to continue to support the old \HorizontalMap and +%% \VerticalMap commands, but you should not rely on the continued existence +%% of these macros. + +%% The various components usually need some correction +%% - longitudinally, ie to prevent gaps and overprints with the shaft, +%% - transversally, ie to prevent "steps" in the junction with the shaft. +%% The former can be done safely ad hoc, eg with \mkern1mu. +%% The latter are now done with the macros \scriptaxis, \boldscriptaxis, +%% \shifthook and \raisehook, which include pixel corrections. + +%% Please note that these and the other auxillary macros which follow are +%% interim. When it becomes clear exactly what kinds of adjustments are +%% needed for characters, this job will be done by a suitable extension +%% to the language of \newarrowhead, etc. If you have any other ideas for +%% transformations of general use please tell me. + +%% By all means experiment with other characters for arrowheads, but +%% please, in your own interests, do not rely on macros like \rhvee, +%% send me a copy of your definitions for distribution to other users +%% in this file, and keep track of where your efforts get copied so +%% that they can be replaced with the "official" version when it is +%% incorporated. + +%% ***** DONT use macros with mangled names like \Cd@gH. ***** + +\catcode\lq\$=3 %% make sure that $ means maths-shift +\def\vboxtoz{\vbox to\z@}%% \z@ is in plain TeX and means 0pt + +%% print #1 in \scriptstyle, adjusting for the maths axis height +\def\scriptaxis#1{\@scriptaxis{$\scriptstyle#1$}}%% +\def\ssaxis#1{\@ssaxis{$\scriptscriptstyle#1$}}%% +\def\@scriptaxis#1{\dimen0\axisheight\advance\dimen0-\ss@axisheight\raise +\dimen0\hbox{#1}}\def\@ssaxis#1{\dimen0\axisheight\advance\dimen0-% +\ss@axisheight\raise\dimen0\hbox{#1}} + +%% Some of the characters would look better in bold since they're +%% taken from sub/superscript fonts; we use LaTeX's \boldmath to +%% do this, defining this to do nothing if it doesn't exist. +%% With the old LaTeX font selection at other than 10pt you may still +%% get nothing happenning. Also, PK fonts may be missing. +%% If you have problems, DONT use boldhook or boldlittlevee. +\ifx\boldmath\undefined%% +\let\boldscriptaxis\scriptaxis%% +\def\boldscript#1{\hbox{$\scriptstyle#1$}}%% +\def\boldscriptscript#1{\hbox{$\scriptscriptstyle#1$}}%% +\else\def\boldscriptaxis#1{\@scriptaxis{\boldmath$\scriptstyle#1$}}%% +\def\boldscript#1{\hbox{\boldmath$\scriptstyle#1$}}%% +\def\boldscriptscript#1{\hbox{\boldmath$\scriptscriptstyle#1$}}%% +\fi + +%% #1= {} or \boldmath; #2= + or -; #3=\subset or \supset +\def\raisehook#1#2#3{\hbox{\setbox3=\hbox{#1$\scriptscriptstyle#3$}% +%% the character to use +\dimen0\ss@axisheight%% \scriptscriptstyle axis height +\dimen1\axisheight\advance\dimen1-\dimen0%% difference in axis heights +\dimen2\ht3\advance\dimen2-\dimen0% +%% height of char above axis (half spread) +\advance\dimen2-0.021em\advance\dimen1 #2\dimen2% +%% shift = axis_difference +/- half_spread +\raise\dimen1\box3}}%% print the character +%% Mark Dawson suggested using the width +\def\shifthook#1#2#3{\setbox1=\hbox{#1$\scriptscriptstyle#3$}\dimen0\wd1% +\divide\dimen0 12\CD@zH{\dimen0}%% "u" +\dimen1\wd1\advance\dimen1-2\dimen0 \advance\dimen1-2\CD@oI\CD@zH{\dimen1}% +\kern#2\dimen1\box1}%% print + +%% use the extension font (cmex) for double vertical arrows +\def\@cmex{\mathchar"03}%%ascii double quote + +%% ************* P U L L B A C K S ************ + +%% These will probably be replaced by something less ad hoc +%% in a future version. + +\def\make@pbk#1{\setbox\tw@\hbox to\z@{#1}\ht\tw@\z@\dp\tw@\z@\box\tw@}\def +\CD@fH#1{\overprint{\hbox to\z@{#1}}}\def\CD@qH{\kern0.11em}\def\CD@pH{\kern0% +.35em} + +%% This is a hack for my book ``Practical Foundations of Mathematics'' +%% and WILL NOT BE SUPPORTED --- DO NOT USE IT! +\def\dblvert{\def\CD@rH{\kern.5\PileSpacing}}\def\CD@rH{} + +\def\SEpbk{\make@pbk{\CD@qH\CD@rH\vrule depth 2.87ex height -2.75ex width 0.% +95em \vrule height -0.66ex depth 2.87ex width 0.05em \hss}} + +\def\SWpbk{\make@pbk{\hss\vrule height -0.66ex depth 2.87ex width 0.05em +\vrule depth 2.87ex height -2.75ex width 0.95em \CD@qH\CD@rH}} + +\def\NEpbk{\make@pbk{\CD@qH\CD@rH\vrule depth -3.81ex height 4.00ex width 0.% +95em \vrule height 4.00ex depth -1.72ex width 0.05em \hss}} + +\def\NWpbk{\make@pbk{\hss\vrule height 4.00ex depth -1.72ex width 0.05em +\vrule depth -3.81ex height 4.00ex width 0.95em \CD@qH\CD@rH}} + +%% Freyd & Scedrov puncture symbol for non-commuting polygon +\def\puncture{{\setbox0\hbox{A}\vrule height.53\ht0 depth-.47\ht0 width.35\ht +0 \kern.12\ht0 \vrule height\ht0 depth-.65\ht0 width.06\ht0 \kern-.06\ht0 +\vrule height.35\ht0 depth0pt width.06\ht0 \kern.12\ht0 \vrule height.53\ht0 +depth-.47\ht0 width.35\ht0 }} + +%% 2-cells: (24.11.95) +%%% \NEclck puts a clockwise (ie southeast) arrow to the northwest of cell etc +\def\NEclck{\overprint{\raise2.5ex\rlap{ \CD@rH$\scriptstyle\searrow$}}}%% +\def\NEanti{\overprint{\raise2.5ex\rlap{ \CD@rH$\scriptstyle\nwarrow$}}}%% +\def\NWclck{\overprint{\raise2.5ex\llap{$\scriptstyle\nearrow$ \CD@rH}}}%% +\def\NWanti{\overprint{\raise2.5ex\llap{$\scriptstyle\swarrow$ \CD@rH}}}%% +\def\SEclck{\overprint{\lower1ex\rlap{ \CD@rH$\scriptstyle\swarrow$}}}%% +\def\SEanti{\overprint{\lower1ex\rlap{ \CD@rH$\scriptstyle\nearrow$}}}%% +\def\SWclck{\overprint{\lower1ex\llap{$\scriptstyle\nwarrow$ \CD@rH}}}%% +\def\SWanti{\overprint{\lower1ex\llap{$\scriptstyle\searrow$ \CD@rH}}} + +%%======================================================================% +%% % +%% (23) BITS OF ARROWS % +%% % +%%======================================================================% + +%% ********** H E A D S *********** + +%% \diagramstyle[heads=xxx] defines {>} as {xxx} where xxx +%% has been defined by \newarrowhead{xxx} and \newarrowtail{xxx} + +%% vee head +\def\rhvee{\mkern-10mu\greaterthan}%% +\def\lhvee{\lessthan\mkern-10mu}%% +\def\dhvee{\vboxtoz{\vss\hbox{$\vee$}\kern0pt}}%% +\def\uhvee{\vboxtoz{\hbox{$\wedge$}\vss}}%% +\newarrowhead{vee}\rhvee\lhvee\dhvee\uhvee + +%% little vee head +\def\dhlvee{\vboxtoz{\vss\hbox{$\scriptstyle\vee$}\kern0pt}}%% +\def\uhlvee{\vboxtoz{\hbox{$\scriptstyle\wedge$}\vss}}%% +\newarrowhead{littlevee}{\mkern1mu\scriptaxis\rhvee}{\scriptaxis\lhvee}% +\dhlvee\uhlvee\ifx\boldmath\undefined%% +\newarrowhead{boldlittlevee}{\mkern1mu\scriptaxis\rhvee}{\scriptaxis\lhvee}% +\dhlvee\uhlvee\else%% +\def\dhblvee{\vboxtoz{\vss\boldscript\vee\kern0pt}}%% +\def\uhblvee{\vboxtoz{\boldscript\wedge\vss}}%% +\newarrowhead{boldlittlevee}{\mkern1mu\boldscriptaxis\rhvee}{\boldscriptaxis +\lhvee}\dhblvee\uhblvee%% +\fi + +%% curly vee head (uses AMS symbols fonts) +\def\rhcvee{\mkern-10mu\succ}%% +\def\lhcvee{\prec\mkern-10mu}%% +\def\dhcvee{\vboxtoz{\vss\hbox{$\curlyvee$}\kern0pt}}%% +\def\uhcvee{\vboxtoz{\hbox{$\curlywedge$}\vss}}%% +\newarrowhead{curlyvee}\rhcvee\lhcvee\dhcvee\uhcvee + +%% double vee head %% will probably be withdrawn later +\def\rhvvee{\mkern-13mu\gg}%% 24.8.92 changed 10mu to 13mu +\def\lhvvee{\ll\mkern-13mu}%% to make rule go through +\def\dhvvee{\vboxtoz{\vss\hbox{$\vee$}\kern-.6ex\hbox{$\vee$}\kern0pt}}%% +\def\uhvvee{\vboxtoz{\hbox{$\wedge$}\kern-.6ex \hbox{$\wedge$}\vss}}%% +\newarrowhead{doublevee}\rhvvee\lhvvee\dhvvee\uhvvee + +%% open and closed triangles (uses AMS symbols fonts) +\def\triangleup{{\scriptscriptstyle\bigtriangleup}}%% +\def\littletriangledown{{\scriptscriptstyle\triangledown}}%% AMS +\def\rhtriangle{\triangleright\mkern1.2mu}%% 29.1.93 +\def\lhtriangle{\triangleleft\mkern.8mu}%% +\def\uhtriangle{\vbox{\kern-.2ex \hbox{$\scriptscriptstyle\bigtriangleup$}% +\kern-.25ex}}%% +%% Changed \scriptstyle\triangledown to \scriptscriptstyle\bigtriangledown +%% at the suggestion of Martin Hofmann (25.11.92) to avoid using AMS symbols +%% and also for compatibility with upward arrow. +\def\dhtriangle{\vbox{\kern-.28ex \hbox{$\scriptscriptstyle\bigtriangledown$}% +\kern-.1ex}}%% 15.1.93 from -.25ex +\def\dhblack{\vbox{\kern-.25ex\nointerlineskip\hbox{$\blacktriangledown$}}}% +%% AMS +\def\uhblack{\vbox{\kern-.25ex\nointerlineskip\hbox{$\blacktriangle$}}}% +%% AMS +\def\dhlblack{\vbox{\kern-.25ex\nointerlineskip\hbox{$\scriptstyle +\blacktriangledown$}}}%% AMS +\def\uhlblack{\vbox{\kern-.25ex\nointerlineskip\hbox{$\scriptstyle +\blacktriangle$}}}%% AMS +\newarrowhead{triangle}\rhtriangle\lhtriangle\dhtriangle\uhtriangle +\newarrowhead{blacktriangle}{\mkern-1mu\blacktriangleright\mkern.4mu}{% +\blacktriangleleft}\dhblack\uhblack\newarrowhead{littleblack}{\mkern-1mu% +\scriptaxis\blacktriangleright}{\scriptaxis\blacktriangleleft\mkern-2mu}% +\dhlblack\uhlblack + +%% LaTeX arrowheads +\def\rhla{\hbox{\setbox0=\lnchar55\dimen0=\wd0\kern-.6\dimen0\ht0\z@\raise +\axisheight\box0\kern.1\dimen0}}%% +\def\lhla{\hbox{\setbox0=\lnchar33\dimen0=\wd0\kern.05\dimen0\ht0\z@\raise +\axisheight\box0\kern-.5\dimen0}}%% +\def\dhla{\vboxtoz{\vss\rlap{\lnchar77}}}%% +\def\uhla{\vboxtoz{\setbox0=\lnchar66 \wd0\z@\kern-.15\ht0\box0\vss}}%% 1/93 +\newarrowhead{LaTeX}\rhla\lhla\dhla\uhla + +%% double LaTeX arrowheads %% will probably be withdrawn later +\def\lhlala{\lhla\kern.3em\lhla}%% +\def\rhlala{\rhla\kern.3em\rhla}%% +\def\uhlala{\hbox{\uhla\raise-.6ex\uhla}}%% +\def\dhlala{\hbox{\dhla\lower-.6ex\dhla}}%% +\newarrowhead{doubleLaTeX}\rhlala\lhlala\dhlala\uhlala + +%% circles % \rho is a Greek letter! +\def\hhO{\scriptaxis\bigcirc\mkern.4mu} \def\hho{{\circ}\mkern1.2mu}% +\newarrowhead{o}\hho\hho\circ\circ%% +\newarrowhead{O}\hhO\hhO{\scriptstyle\bigcirc}{\scriptstyle\bigcirc}%% + +%% crosses +\def\rhtimes{\mkern-5mu{\times}\mkern-.8mu}\def\lhtimes{\mkern-.8mu{\times}% +\mkern-5mu}\def\uhtimes{\setbox0=\hbox{$\times$}\ht0\axisheight\dp0-\ht0% +\lower\ht0\box0 }\def\dhtimes{\setbox0=\hbox{$\times$}\ht0\axisheight\box0 }% +\newarrowhead{X}\rhtimes\lhtimes\dhtimes\uhtimes\newarrowhead+++++ + +%% empty head {} is also available + +%% Y from stmaryrd (vertical ones still need large adjustment) +\newarrowhead{Y}{\mkern-3mu\Yright}{\Yleft\mkern-3mu}\Yup\Ydown + +%% ********** H E A D S with S H A F T S *********** + +%% little arrow with shaft +\newarrowhead{->}\rightarrow\leftarrow\downarrow\uparrow + +%% arrow with double shaft +%%\newarrowhead{=>}\Rightarrow\Leftarrow\Downarrow\Uparrow +\newarrowhead{=>}\Rightarrow\Leftarrow{\@cmex7F}{\@cmex7E} + +%% harpoon with shaft (trailing up/left can be changed to down/right) +\newarrowhead{harpoon}\rightharpoonup\leftharpoonup\downharpoonleft +\upharpoonleft + +%% little double-headed arrow with shaft (uses AMS symbols fonts) +\def\twoheaddownarrow{\rlap{$\downarrow$}\raise-.5ex\hbox{$\downarrow$}}%% +\def\twoheaduparrow{\rlap{$\uparrow$}\raise.5ex\hbox{$\uparrow$}}%% +\newarrowhead{->>}\twoheadrightarrow\twoheadleftarrow\twoheaddownarrow +\twoheaduparrow + +%% ********** T A I L S *********** + +%% vee tail +\def\rtvee{\greaterthan}%% +\def\ltvee{\mkern-1mu{\lessthan}\mkern.4mu}%% \mkern added 15.1.93 +\def\dtvee{\vee}%% +\def\utvee{\wedge}%% +\newarrowtail{vee}\greaterthan\ltvee\vee\wedge + +%% little vee tail +\newarrowtail{littlevee}{\scriptaxis\greaterthan}{\mkern-1mu\scriptaxis +\lessthan}{\scriptstyle\vee}{\scriptstyle\wedge}\ifx\boldmath\undefined +\newarrowtail{boldlittlevee}{\scriptaxis\greaterthan}{\mkern-1mu\scriptaxis +\lessthan}{\scriptstyle\vee}{\scriptstyle\wedge}\else\newarrowtail{% +boldlittlevee}{\boldscriptaxis\greaterthan}{\mkern-1mu\boldscriptaxis +\lessthan}{\boldscript\vee}{\boldscript\wedge}\fi + +%% curly vee tail (uses AMS symbols fonts) +\newarrowtail{curlyvee}\succ{\mkern-1mu{\prec}\mkern.4mu}\curlyvee\curlywedge + +%% open and closed triangle tails (uses AMS symbols fonts) +\def\rttriangle{\mkern1.2mu\triangleright}%% 29.1.93 +\newarrowtail{triangle}\rttriangle\lhtriangle\dhtriangle\uhtriangle +\newarrowtail{blacktriangle}\blacktriangleright{\mkern-1mu\blacktriangleleft +\mkern.4mu}\dhblack\uhblack\newarrowtail{littleblack}{\scriptaxis +\blacktriangleright\mkern-2mu}{\mkern-1mu\scriptaxis\blacktriangleleft}% +\dhlblack\uhlblack + +%% LaTeX tails +\def\rtla{\hbox{\setbox0=\lnchar55\dimen0=\wd0\kern-.5\dimen0\ht0\z@\raise +\axisheight\box0\kern-.2\dimen0}}%% +\def\ltla{\hbox{\setbox0=\lnchar33\dimen0=\wd0\kern-.15\dimen0\ht0\z@\raise +\axisheight\box0\kern-.5\dimen0}}%% +\def\dtla{\vbox{\setbox0=\rlap{\lnchar77}\dimen0=\ht0\kern-.7\dimen0\box0% +\kern-.1\dimen0}}%% 15.1.93 from -.6 +\def\utla{\vbox{\setbox0=\rlap{\lnchar66}\dimen0=\ht0\kern-.1\dimen0\box0% +\kern-.6\dimen0}}%% +\newarrowtail{LaTeX}\rtla\ltla\dtla\utla + +%% double vee tail %% will probably be withdrawn later +\def\rtvvee{\gg\mkern-3mu}%% +\def\ltvvee{\mkern-3mu\ll}%% +\def\dtvvee{\vbox{\hbox{$\vee$}\kern-.6ex \hbox{$\vee$}\vss}}%% +\def\utvvee{\vbox{\vss\hbox{$\wedge$}\kern-.6ex \hbox{$\wedge$}\kern\z@}}%% +\newarrowtail{doublevee}\rtvvee\ltvvee\dtvvee\utvvee + +%% double LaTeX tails %% will probably be withdrawn later +\def\ltlala{\ltla\kern.3em\ltla}%% +\def\rtlala{\rtla\kern.3em\rtla}%% +\def\utlala{\hbox{\utla\raise-.6ex\utla}}%% +\def\dtlala{\hbox{\dtla\lower-.6ex\dtla}}%% +\newarrowtail{doubleLaTeX}\rtlala\ltlala\dtlala\utlala + +%% bar (as in \mapsto) +\def\utbar{\vrule height 0.093ex depth0pt width 0.4em}%% +\let\dtbar\utbar%% +\def\rtbar{\mkern1.5mu\vrule height 1.1ex depth.06ex width .04em\mkern1.5mu}% +%% +\let\ltbar\rtbar%% +\newarrowtail{mapsto}\rtbar\ltbar\dtbar\utbar%% +\newarrowtail{|}\rtbar\ltbar\dtbar\utbar%%ascii vertical bar (|) + +%% hooks (as in \into): choice of after/above and before/below + +\def\rthooka{\raisehook{}+\subset\mkern-1mu}%% +\def\lthooka{\mkern-1mu\raisehook{}+\supset}%% +\def\rthookb{\raisehook{}-\subset\mkern-2mu}%% +\def\lthookb{\mkern-1mu\raisehook{}-\supset}%% + +\def\dthooka{\shifthook{}+\cap}%% +\def\dthookb{\shifthook{}-\cap}%% +\def\uthooka{\shifthook{}+\cup}%% +\def\uthookb{\shifthook{}-\cup}%% + +\newarrowtail{hooka}\rthooka\lthooka\dthooka\uthooka\newarrowtail{hookb}% +\rthookb\lthookb\dthookb\uthookb + +\ifx\boldmath\undefined\newarrowtail{boldhooka}\rthooka\lthooka\dthooka +\uthooka\newarrowtail{boldhookb}\rthookb\lthookb\dthookb\uthookb\newarrowtail +{boldhook}\rthooka\lthooka\dthookb\uthooka\else\def\rtbhooka{\raisehook +\boldmath+\subset\mkern-1mu}%% +\def\ltbhooka{\mkern-1mu\raisehook\boldmath+\supset}%% +\def\rtbhookb{\raisehook\boldmath-\subset\mkern-2mu}%% +\def\ltbhookb{\mkern-1mu\raisehook\boldmath-\supset}%% +\def\dtbhooka{\shifthook\boldmath+\cap}%% +\def\dtbhookb{\shifthook\boldmath-\cap}%% +\def\utbhooka{\shifthook\boldmath+\cup}%% +\def\utbhookb{\shifthook\boldmath-\cup}%% +\newarrowtail{boldhooka}\rtbhooka\ltbhooka\dtbhooka\utbhooka\newarrowtail{% +boldhookb}\rtbhookb\ltbhookb\dtbhookb\utbhookb\newarrowtail{boldhook}% +\rtbhooka\ltbhooka\dtbhooka\utbhooka\fi + +%% square-ended hooks (used for closed subsets in ``lifting and gluing'') +\def\dtsqhooka{\shifthook{}+\sqcap}%% +\def\dtsqhookb{\shifthook{}-\sqcap}%% +\def\ltsqhooka{\mkern-1mu\raisehook{}+\sqsupset}%% +\def\ltsqhookb{\mkern-1mu\raisehook{}-\sqsupset}%% +\def\rtsqhooka{\raisehook{}+\sqsubset\mkern-1mu}%% +\def\rtsqhookb{\raisehook{}-\sqsubset\mkern-2mu}%% +\def\utsqhooka{\shifthook{}+\sqcup}%% +\def\utsqhookb{\shifthook{}-\sqcup}%% +\newarrowtail{sqhook}\rtsqhooka\ltsqhooka\dtsqhooka\utsqhooka + +%% the following seem the better choices at 10pt & 300dpi +\newarrowtail{hook}\rthooka\lthookb\dthooka\uthooka\newarrowtail{C}\rthooka +\lthookb\dthooka\uthooka + +%% circles +\newarrowtail{o}\hho\hho\circ\circ%% +\newarrowtail{O}\hhO\hhO{\scriptstyle\bigcirc}{\scriptstyle\bigcirc}%% + +%% crosses +\newarrowtail{X}\lhtimes\rhtimes\uhtimes\dhtimes\newarrowtail+++++ + +%% empty tail {} is also available + +%% Y from stmaryrd (vertical ones still need adjustment) +\newarrowtail{Y}\Yright\Yleft\Yup\Ydown + +%% harpoon with shaft (trailing up/left can be changed to down/right) +\newarrowtail{harpoon}\leftharpoondown\rightharpoondown\upharpoonright +\downharpoonright + +%% ********** F I L L E R S *********** + +%% shortening is up to 0.15em=2.7mu horiz and 0.35ex vertically at each end. + +%% dot {.}, single rule {-} and empty {} fillers are also available + +%% double and triple lines +%%\newarrowfiller{=}==\Vert\Vert%% +\newarrowfiller{=}=={\@cmex77}{\@cmex77}%% 16.1.93 +\def\vfthree{\mid\!\!\!\mid\!\!\!\mid}%%ascii +\newarrowfiller{3}\equiv\equiv\vfthree\vfthree + +%% dashed line +\def\vfdashstrut{\vrule width0pt height1.3ex depth0.7ex}%% +\def\vfthedash{\vrule width\CD@LF height0.6ex depth 0pt}%% +\def\hfthedash{\CD@AJ\vrule\horizhtdp width 0.26em}%% +\def\hfdash{\mkern5.5mu\hfthedash\mkern5.5mu}%% +\def\vfdash{\vfdashstrut\vfthedash}%% +\newarrowfiller{dash}\hfdash\hfdash\vfdash\vfdash + +%% ************* M I D D L E S ************ + +%% plus +\newarrowmiddle+++++ + +%% ************* D I A G O N A L S ************ + +%% simple arrow heads +%%\def\nwhTO{\nwarrow\mkern-1mu}%% +%%\def\nehTO{\mkern-.1mu\nearrow}%% +%%\def\sehTO{\searrow\mkern-.02mu}%% +%%\def\swhTO{\mkern-.8mu\swarrow}%% + +%%======================================================================% +%% % +%% (24) ARROW COMMANDS % +%% % +%%======================================================================% + +%% change to \iftrue to get mixed heads +\iffalse%% +\newarrow{To}----{vee}%% +\newarrow{Arr}----{LaTeX}%% +\newarrow{Dotsto}....{vee}%% +\newarrow{Dotsarr}....{LaTeX}%% +\newarrow{Dashto}{}{dash}{}{dash}{vee}%% +\newarrow{Dasharr}{}{dash}{}{dash}{LaTeX}%% +\newarrow{Mapsto}{mapsto}---{vee}%% +\newarrow{Mapsarr}{mapsto}---{LaTeX}%% +\newarrow{IntoA}{hooka}---{vee}%% +\newarrow{IntoB}{hookb}---{vee}%% +\newarrow{Embed}{vee}---{vee}%% +\newarrow{Emarr}{LaTeX}---{LaTeX}%% +\newarrow{Onto}----{doublevee}%% +\newarrow{Dotsonarr}....{doubleLaTeX}%% +\newarrow{Dotsonto}....{doublevee}%% +\newarrow{Dotsonarr}....{doubleLaTeX}%% +\else%% +\newarrow{To}---->%% +\newarrow{Arr}---->%% +\newarrow{Dotsto}....>%% +\newarrow{Dotsarr}....>%% +\newarrow{Dashto}{}{dash}{}{dash}>%% +\newarrow{Dasharr}{}{dash}{}{dash}>%% +\newarrow{Mapsto}{mapsto}--->%% +\newarrow{Mapsarr}{mapsto}--->%% +\newarrow{IntoA}{hooka}--->%% +\newarrow{IntoB}{hookb}--->%% +\newarrow{Embed}>--->%% +\newarrow{Emarr}>--->%% +\newarrow{Onto}----{>>}%% +\newarrow{Dotsonarr}....{>>}%% +\newarrow{Dotsonto}....{>>}%% +\newarrow{Dotsonarr}....{>>}%% +\fi%% + +\newarrow{Implies}===={=>}%% minimum cell height 9.5pt +\newarrow{Project}----{triangle}%% +\newarrow{Pto}----{harpoon}%% partial function +\newarrow{Relto}{harpoon}---{harpoon}%% binary relation + +\newarrow{Eq}=====%% +\newarrow{Line}-----%% +\newarrow{Dots}.....%% +\newarrow{Dashes}{}{dash}{}{dash}{}%% + +%% square hooked arrow (used in my ``gluing and lifting'' paper) +\newarrow{SquareInto}{sqhook}---> + +%% braces and parentheses +%% \newarrow gives inappropriate directions, so we change the names +%% the vertical filler is too far to the right; horizontal too high +%% the vertical middles are too low with midvshaft +%% maybe we'll add square brackets and the integral sign one day +\newarrowhead{cmexbra}{\@cmex7B}{\@cmex7C}{\@cmex3B}{\@cmex38}%% +\newarrowtail{cmexbra}{\@cmex7A}{\@cmex7D}{\@cmex39}{\@cmex3A}%% +\newarrowmiddle{cmexbra}{\braceru\bracelu}{\bracerd\braceld}{\vcenter{% +\hbox@maths{\@cmex3D\mkern-2mu}}}%% right +{\vcenter{\hbox@maths{\mkern2mu\@cmex3C}}}%% left +\newarrow{@brace}{cmexbra}-{cmexbra}-{cmexbra}%% braces +\newarrow{@parenth}{cmexbra}---{cmexbra}%% straight parentheses +\def\rightBrace{\d@brace[thick,cmex]}%%ASCII square brackets [] +\def\leftBrace{\u@brace[thick,cmex]}%%ASCII square brackets [] +\def\upperBrace{\r@brace[thick,cmex]}%%ASCII square brackets [] +\def\lowerBrace{\l@brace[thick,cmex]}%%ASCII square brackets [] +\def\rightParenth{\d@parenth[thick,cmex]}%%ASCII square brackets [] +\def\leftParenth{\u@parenth[thick,cmex]}%%ASCII square brackets [] +\def\upperParenth{\r@parenth[thick,cmex]}%%ASCII square brackets [] +\def\lowerParenth{\l@parenth[thick,cmex]}%%ASCII square brackets [] + +%% synonyms for reverse compatibility + +\let\uFrom\uTo%% +\let\lFrom\lTo%% +\let\uDotsfrom\uDotsto%% +\let\lDotsfrom\lDotsto%% +\let\uDashfrom\uDashto%% +\let\lDashfrom\lDashto%% +\let\uImpliedby\uImplies%% +\let\lImpliedby\lImplies%% +\let\uMapsfrom\uMapsto%% +\let\lMapsfrom\lMapsto%% +\let\lOnfrom\lOnto%% +\let\uOnfrom\uOnto%% +\let\lPfrom\lPto%% +\let\uPfrom\uPto%% + +\let\uInfromA\uIntoA%% +\let\uInfromB\uIntoB%% +\let\lInfromA\lIntoA%% +\let\lInfromB\lIntoB%% +\let\rInto\rIntoA%% +\let\lInto\lIntoA%% +\let\dInto\dIntoB%% +\let\uInto\uIntoA%% +\let\ruInto\ruIntoA%% +\let\luInto\luIntoA%% +\let\rdInto\rdIntoA%% +\let\ldInto\ldIntoA%% +%% +\let\hEq\rEq%% +\let\vEq\uEq%% +\let\hLine\rLine%% +\let\vLine\uLine%% +\let\hDots\rDots%% +\let\vDots\uDots%% +\let\hDashes\rDashes%% +\let\vDashes\uDashes%% + +%%=========================================================================% +%% The following are included for reverse compatibility only. +%%=========================================================================% +\let\NW\luTo\let\NE\ruTo\let\SW\ldTo\let\SE\rdTo\def\nNW{\luTo(2,3)}\def\nNE{% +\ruTo(2,3)}%%ascii +\def\sSW{\ldTo(2,3)}\def\sSE{\rdTo(2,3)}%%ascii +\def\wNW{\luTo(3,2)}\def\eNE{\ruTo(3,2)}%%ascii +\def\wSW{\ldTo(3,2)}\def\eSE{\rdTo(3,2)}%%ascii +\def\NNW{\luTo(2,4)}\def\NNE{\ruTo(2,4)}%%ascii +\def\SSW{\ldTo(2,4)}\def\SSE{\rdTo(2,4)}%%ascii +\def\WNW{\luTo(4,2)}\def\ENE{\ruTo(4,2)}%%ascii +\def\WSW{\ldTo(4,2)}\def\ESE{\rdTo(4,2)}%%ascii +\def\NNNW{\luTo(2,6)}\def\NNNE{\ruTo(2,6)}%%ascii +\def\SSSW{\ldTo(2,6)}\def\SSSE{\rdTo(2,6)}%%ascii +\def\WWNW{\luTo(6,2)}\def\EENE{\ruTo(6,2)}%%ascii +\def\WWSW{\ldTo(6,2)}\def\EESE{\rdTo(6,2)}%%ascii + +\let\NWd\luDotsto\let\NEd\ruDotsto\let\SWd\ldDotsto\let\SEd\rdDotsto\def\nNWd +{\luDotsto(2,3)}\def\nNEd{\ruDotsto(2,3)}%%ascii +\def\sSWd{\ldDotsto(2,3)}\def\sSEd{\rdDotsto(2,3)}%%ascii +\def\wNWd{\luDotsto(3,2)}\def\eNEd{\ruDotsto(3,2)}%%ascii +\def\wSWd{\ldDotsto(3,2)}\def\eSEd{\rdDotsto(3,2)}%%ascii +\def\NNWd{\luDotsto(2,4)}\def\NNEd{\ruDotsto(2,4)}%%ascii +\def\SSWd{\ldDotsto(2,4)}\def\SSEd{\rdDotsto(2,4)}%%ascii +\def\WNWd{\luDotsto(4,2)}\def\ENEd{\ruDotsto(4,2)}%%ascii +\def\WSWd{\ldDotsto(4,2)}\def\ESEd{\rdDotsto(4,2)}%%ascii +\def\NNNWd{\luDotsto(2,6)}\def\NNNEd{\ruDotsto(2,6)}%%ascii +\def\SSSWd{\ldDotsto(2,6)}\def\SSSEd{\rdDotsto(2,6)}%%ascii +\def\WWNWd{\luDotsto(6,2)}\def\EENEd{\ruDotsto(6,2)}%%ascii +\def\WWSWd{\ldDotsto(6,2)}\def\EESEd{\rdDotsto(6,2)}%%ascii + +\let\NWl\luLine\let\NEl\ruLine\let\SWl\ldLine\let\SEl\rdLine\def\nNWl{\luLine +(2,3)}\def\nNEl{\ruLine(2,3)}%%ascii +\def\sSWl{\ldLine(2,3)}\def\sSEl{\rdLine(2,3)}%%ascii +\def\wNWl{\luLine(3,2)}\def\eNEl{\ruLine(3,2)}%%ascii +\def\wSWl{\ldLine(3,2)}\def\eSEl{\rdLine(3,2)}%%ascii +\def\NNWl{\luLine(2,4)}\def\NNEl{\ruLine(2,4)}%%ascii +\def\SSWl{\ldLine(2,4)}\def\SSEl{\rdLine(2,4)}%%ascii +\def\WNWl{\luLine(4,2)}\def\ENEl{\ruLine(4,2)}%%ascii +\def\WSWl{\ldLine(4,2)}\def\ESEl{\rdLine(4,2)}%%ascii +\def\NNNWl{\luLine(2,6)}\def\NNNEl{\ruLine(2,6)}%%ascii +\def\SSSWl{\ldLine(2,6)}\def\SSSEl{\rdLine(2,6)}%%ascii +\def\WWNWl{\luLine(6,2)}\def\EENEl{\ruLine(6,2)}%%ascii +\def\WWSWl{\ldLine(6,2)}\def\EESEl{\rdLine(6,2)}%%ascii + +\let\NWld\luDots\let\NEld\ruDots\let\SWld\ldDots\let\SEld\rdDots\def\nNWld{% +\luDots(2,3)}\def\nNEld{\ruDots(2,3)}%%ascii +\def\sSWld{\ldDots(2,3)}\def\sSEld{\rdDots(2,3)}%%ascii +\def\wNWld{\luDots(3,2)}\def\eNEld{\ruDots(3,2)}%%ascii +\def\wSWld{\ldDots(3,2)}\def\eSEld{\rdDots(3,2)}%%ascii +\def\NNWld{\luDots(2,4)}\def\NNEld{\ruDots(2,4)}%%ascii +\def\SSWld{\ldDots(2,4)}\def\SSEld{\rdDots(2,4)}%%ascii +\def\WNWld{\luDots(4,2)}\def\ENEld{\ruDots(4,2)}%%ascii +\def\WSWld{\ldDots(4,2)}\def\ESEld{\rdDots(4,2)}%%ascii +\def\NNNWld{\luDots(2,6)}\def\NNNEld{\ruDots(2,6)}%%ascii +\def\SSSWld{\ldDots(2,6)}\def\SSSEld{\rdDots(2,6)}%%ascii +\def\WWNWld{\luDots(6,2)}\def\EENEld{\ruDots(6,2)}%%ascii +\def\WWSWld{\ldDots(6,2)}\def\EESEld{\rdDots(6,2)}%%ascii + +\let\NWe\luEmbed\let\NEe\ruEmbed\let\SWe\ldEmbed\let\SEe\rdEmbed\def\nNWe{% +\luEmbed(2,3)}\def\nNEe{\ruEmbed(2,3)}%%ascii +\def\sSWe{\ldEmbed(2,3)}\def\sSEe{\rdEmbed(2,3)}%%ascii +\def\wNWe{\luEmbed(3,2)}\def\eNEe{\ruEmbed(3,2)}%%ascii +\def\wSWe{\ldEmbed(3,2)}\def\eSEe{\rdEmbed(3,2)}%%ascii +\def\NNWe{\luEmbed(2,4)}\def\NNEe{\ruEmbed(2,4)}%%ascii +\def\SSWe{\ldEmbed(2,4)}\def\SSEe{\rdEmbed(2,4)}%%ascii +\def\WNWe{\luEmbed(4,2)}\def\ENEe{\ruEmbed(4,2)}%%ascii +\def\WSWe{\ldEmbed(4,2)}\def\ESEe{\rdEmbed(4,2)}%%ascii +\def\NNNWe{\luEmbed(2,6)}\def\NNNEe{\ruEmbed(2,6)}%%ascii +\def\SSSWe{\ldEmbed(2,6)}\def\SSSEe{\rdEmbed(2,6)}%%ascii +\def\WWNWe{\luEmbed(6,2)}\def\EENEe{\ruEmbed(6,2)}%%ascii +\def\WWSWe{\ldEmbed(6,2)}\def\EESEe{\rdEmbed(6,2)}%%ascii + +\let\NWo\luOnto\let\NEo\ruOnto\let\SWo\ldOnto\let\SEo\rdOnto\def\nNWo{\luOnto +(2,3)}\def\nNEo{\ruOnto(2,3)}%%ascii +\def\sSWo{\ldOnto(2,3)}\def\sSEo{\rdOnto(2,3)}%%ascii +\def\wNWo{\luOnto(3,2)}\def\eNEo{\ruOnto(3,2)}%%ascii +\def\wSWo{\ldOnto(3,2)}\def\eSEo{\rdOnto(3,2)}%%ascii +\def\NNWo{\luOnto(2,4)}\def\NNEo{\ruOnto(2,4)}%%ascii +\def\SSWo{\ldOnto(2,4)}\def\SSEo{\rdOnto(2,4)}%%ascii +\def\WNWo{\luOnto(4,2)}\def\ENEo{\ruOnto(4,2)}%%ascii +\def\WSWo{\ldOnto(4,2)}\def\ESEo{\rdOnto(4,2)}%%ascii +\def\NNNWo{\luOnto(2,6)}\def\NNNEo{\ruOnto(2,6)}%%ascii +\def\SSSWo{\ldOnto(2,6)}\def\SSSEo{\rdOnto(2,6)}%%ascii +\def\WWNWo{\luOnto(6,2)}\def\EENEo{\ruOnto(6,2)}%%ascii +\def\WWSWo{\ldOnto(6,2)}\def\EESEo{\rdOnto(6,2)}%%ascii + +\let\NWod\luDotsonto\let\NEod\ruDotsonto\let\SWod\ldDotsonto\let\SEod +\rdDotsonto\def\nNWod{\luDotsonto(2,3)}\def\nNEod{\ruDotsonto(2,3)}%%ascii +\def\sSWod{\ldDotsonto(2,3)}\def\sSEod{\rdDotsonto(2,3)}%%ascii +\def\wNWod{\luDotsonto(3,2)}\def\eNEod{\ruDotsonto(3,2)}%%ascii +\def\wSWod{\ldDotsonto(3,2)}\def\eSEod{\rdDotsonto(3,2)}%%ascii +\def\NNWod{\luDotsonto(2,4)}\def\NNEod{\ruDotsonto(2,4)}%%ascii +\def\SSWod{\ldDotsonto(2,4)}\def\SSEod{\rdDotsonto(2,4)}%%ascii +\def\WNWod{\luDotsonto(4,2)}\def\ENEod{\ruDotsonto(4,2)}%%ascii +\def\WSWod{\ldDotsonto(4,2)}\def\ESEod{\rdDotsonto(4,2)}%%ascii +\def\NNNWod{\luDotsonto(2,6)}\def\NNNEod{\ruDotsonto(2,6)}%%ascii +\def\SSSWod{\ldDotsonto(2,6)}\def\SSSEod{\rdDotsonto(2,6)}%%ascii +\def\WWNWod{\luDotsonto(6,2)}\def\EENEod{\ruDotsonto(6,2)}%%ascii +\def\WWSWod{\ldDotsonto(6,2)}\def\EESEod{\rdDotsonto(6,2)}%%ascii + +%%======================================================================% +%% % +%% (25) MISCELLANEOUS % +%% % +%%======================================================================% + +\def\labelstyle{%% +\ifincommdiag%% +\textstyle%% +\else%% +\scriptstyle%% +\fi}%% +\let\objectstyle\displaystyle + +\newdiagramgrid{pentagon}{0.618034,0.618034,1,1,1,1,0.618034,0.618034}{1.% +17557,1.17557,1.902113,1.902113} + +\newdiagramgrid{perspective}{0.75,0.75,1.1,1.1,0.9,0.9,0.95,0.95,0.75,0.75}{0% +.75,0.75,1.1,1.1,0.9,0.9} + +\diagramstyle[%%ascii open square bracket +dpi=300,%% office laserwriters are usually 300 dots per inch +vmiddle,nobalance,%% vertical and horizontal positioning +loose,%% allow rows and columns to stretch +thin,%% line10 arrows; default rule thickness (TeXbook p447) +pilespacing=10pt,% +%% parallel vertical separation (horizontals: half this) +shortfall=4pt,%% distance between arrowheads and their targets +PostScript=Rokicki,%% default to PostScript not pure DVI +%% The following are defaulted on entry to the diagram itself. +%% l>=2em minimum length of horizontal arrow shafts in text +%% l>=1em ditto in diagrams +%% size=3em cell size +%% heads=LaTeX arrowheads +]%%ascii close square bracket + +%% process options to LaTeX2e's \usepackage[options]{diagrams} +\ifx\ProcessOptions\undefined\else\CD@PK\ProcessOptions\relax\CD@FF\CD@e\fi +\fi + +\cdrestoreat%% restore old category code for @ etc +%%============================== THE END ============================== + +\dimen0 200pt \dimen1 210pt \dimen2 220pt \dimen3 230pt \dimen4 240pt \dimen5 +250pt \dimen6 260pt \dimen7 270pt \dimen8 280pt \dimen9 290pt + +%% This is the end of Paul Taylor's commutative diagrams package. + diff --git a/macros/generic/diagrams/taylor/V3,91.tex b/macros/generic/diagrams/taylor/V3,91.tex new file mode 100644 index 0000000000..c5c6ce2f11 --- /dev/null +++ b/macros/generic/diagrams/taylor/V3,91.tex @@ -0,0 +1,1917 @@ +% mangletex (24 Nov 1995) run at 17:43 BST Friday 01 September 2006 +\message{===================================================================}% +\message{< Paul Taylor's commutative diagrams - version 3.91, August 2006 > }% +%% +%% +%% This code runs the LaTeX \ProvidesPackage command iff it is defined. +%% included at the request of Michael Downes <mjd@ams.org> March 2002. +%% Put \listfiles in your LaTeX preamble to see what this is for. +\expandafter\ifx\csname ProvidesPackage\endcsname\relax\toks0=\expandafter{% +\fi\ProvidesPackage{diagrams}[2006/08/31 v3.91 Paul Taylor's commutative +diagrams]%% +\toks0=\bgroup}%% +%%======================================================================% +%% TeX macros for drawing category-theoretic diagrams % +%% % +%% Paul Taylor % +%% % +%% www.ctan.org or www.cs.man.ac.uk/~pt/diagrams % +%% % +%% PLEASE READ THE MANUAL! % +%% % +%% Please ensure that you are registered with me as a user so that % +%% you can be informed of future releases. Any electronic mail % +%% message with "commutative" or "diagram" in the subject line % +%% (such as your request for the package, a question about it, or % +%% even an otherwise blank message) automatically registers you. % +%% % +%% % +%% CONTENTS: % +%% (O) corruption-sensitive hacks (to approx line 328) % +%% Arrow components & commands - starts approx line 1240 % +%% (22) auxillary macros for adjustment of components % +%% (23) bits of arrows (\rhvee etc) % +%% (24) arrow commands (\rTo etc) % +%% (25) miscellaneous % +%% Apart from these five sections, the rest is intended to be totally % +%% meaningless in the undocumented version, which is approximately % +%% 1910 lines long. Please do not waste trees by printing it out. % +%% % +%% COPYRIGHT NOTICE: % +%% This package may be copied and used freely for any academic % +%% (not commercial or military) purpose, on condition that it % +%% is not altered in any way, and that an acknowledgement is % +%% included in any published work making substantial use of it. % +%% % +%% IT IS SUPPLIED "AS IS", WITHOUT WARRANTY, EXPRESS OR IMPLIED. % +%% % +%% If you are doing something where mistakes cost money (or where % +%% success brings financial profit) then you must use commercial % +%% software, not this package. In any case, please remember to % +%% keep several backup copies of all files, and check everything % +%% visually before sending final copy to the publishers. % +%% % +%% You may use this package as a (substantial) aid to writing an % +%% academic research or text book on condition that % +%% (i) you contact me at a suitable time to ensure that you have % +%% an up-to-date version (and any infelicities can be fixed), % +%% (ii) you send me a copy of the book when it's published. % +%% % +%% HISTORY % +%% 3.91 Released 31 August 2006 % +%% Renamed "noPostScript" option as "UglyObsolete". % +%% 3.90 Released 11 April 2004 % +%% use PostScript=Rokicki not pure DVI by default % +%% 3.89 Released 7 July 2002 % +%% Added support for pdftex, which is recognised automatically. % +%% 3.88 Released 1 September 2000 % +%% Square hook tail: \newarrow{SquareInto}{sqhook}---> % +%% 3.87 Released 1 September 1999 % +%% This version was used for the final 1200dpi PS copy of my book % +%% ``Practical Foundations of Mathematics'' (Cambridge Univ Press) % +%% see http://www.cs.man.ac.uk/~pt/Practical_Foundations % +%% 3.86 Released 1 September 1998 % +%% New options hug and nohug in PostScript mode: [PS,nohug] uses % +%% PS for the arrows without rotating the labels, but the way of % +%% calculating the actual position of these horizontal labels on % +%% will remain subject to alteration for some period of time --- % +%% please send me examples if you feel that adjustment is needed. % +%% % +%% Suppress indentation of following text (due to LaTeX change) % +%% Mangle \left@label and \right@label (conflict with Elsevier). % +%% midvshaft and snake for vertical arrows % +%% New option [gap=width] (default=shortfall) to use instead of % +%% ~{\;} on horizontals and PS diagonals, as this caused ^ and _ % +%% labels to be moved too far away from the shaft. % +%% Added >-> and <-< heads and tails, same as >> and << but the % +%% shaft goes *through* the extra arrowhead. % +%% 3.85 Released 20 August 1997 % +%% New option [crab=distance] shifts horizontals and PS diagonals % +%% transversally by the specified distance (positive=upward). % +%% New option [snake=distance] shifts midshaft horizontals and % +%% PS diagonals longitudinally by the specified distance. % +%% New option [leftflush], like [flushleft] but reckons alignment % +%% from multiple verticals, or from text if there's no vertical. % +%% Most of the history has been suppressed from the user version. % +%% 3.83 Released 18 May 1995 % +%% "dotted" option (set dot filler on maps) % +%% Parallel maps (\pile) outside diagrams stretch correctly. % +%% Option "LaTeXeqno" uses LaTeX's equation number and style % +%% for "eqno"; LaTeX's \label command picks this up. % +%% Suppress warnings & 2nd pass errors with "silent" option. % +%% 3.81 Second alpha release 18 July 1994 % +%% \overprint{text} sets text in maths and overprints it in the % +%% current cell, centered in the column irrespective of other stuff% +%% "repositionpullbacks" option uses this for \SEpbk etc % +%% \newdiagramgrid declaration, grid option and pentagon grid. % +%% 3.80 Alpha release for adjusted diagonals 15 July 1994. % +%% Introduced landscape and portrait options. % +%% Diagonals adjusted to meet their endpoints, at last!!!! % +%% 3.28 Released 30 November 1993 % +%% Peter Freyd's \puncture symbol provided. % +%% 3.25 Released 30 January 1993 % +%% LaTeX heads made default (unless \tenln undefined, when vee) % +%% Circle, cross, little vee, little black triangle heads. % +%% First-use warning when defaulted diagonal components are used. % +%% AMSTEX emulation - works at least when amstex not present. % +%% 3.24 Release 7 Sept 1992 advertised to users. % +%% PostScript option introduced: % +%% LaTeX, vee, curlyvee, triangle & blacktriangle heads & tails % +%% TPIC option introduced as an alternative to \LaTeX@make@line. % +%% Postscript arrows (basic code). % +%% Implemented \newarrow \newarrowhead etc. % +%% Horizontal arrows outside diagram can stretch by wordspacing. % +%% Added < and > for labels on left and right of arrow; % +%% 3.16 (20.7.90) as mass mailed; only have mangled version % +%% -- all following version numbers are post-facto -- % +%% 3 (Jan 90) stretching vertical arrows % +%% 2 (Sept 89) horizontals stretch to objects; "superscript" labels % +%% 1 (1987) horizontal arrows stretch to edge of cell % +%% 0 (1986) implementation of Knuth's TeXercise 18.46 for my thesis % +%%======================================================================% + +%%======================================================================% +%% % +%% (1) CORRUPTION-SENSITIVE HACKS % +%% % +%%======================================================================% + +%% CORRUPTION & \catcode WARNING + +%% BITNET (IBM) machines may corrupt certain important characters +%% in transmission by electronic mail: +%% 0123456789=digits, abcdefghijklmnopqrstuvwxyz=lowers, +%% ABCDEFGHIJKLMNOPQRSTUVWXYZ=uppers, @=at (internal names), +%% {}=curly braces (grouping), \=backslash (keywords), +%% %=percent (comment), #=hash/sharp (argument), +=plus, -=minus, +%% <>=angle brackets (relations \ifnum,\ifdim), ==equals, +%% ,=comma, .=dot, :=colon, ;=semicolon, =space +%% $=dollar (maths) is only used in the "bits of maps" section + +%% The following characters are marked by a comment including the word "ASCII", +%% except in comments and messages: +%% &=and (alignment), ~=tilde, |=vertical, []=square brackets, +%% ^=caret (superscript), _=underline (subscript), +%% `=grave/backquote (catcodes), '=acute/single quote (octal), +%% "=double quote (hex), ()=round brackets, +%% /=slash, ?=query, !=pling/bang, + +%% The \catcode's marked * are assumed for reading this file: +%% \=0* {=1* }=2* $=3 &=4 return=5* #=6 ^=7 _=8 ignored=9* +%% space=10* letter=11* other=12 active=13 %=14* invalid=15 +%% If you want to load this package inside Stallman's "texinfo", you must do +%%% @catcode`@\=0 \catcode`\%=14 \input diagrams \catcode`\%=12 \catcode`\\=13 +%% and then use @diagram @rTo @\ @enddiagram etc. (braces {} stay the same). +%% Also need @catcode`@&=4. + +%%*** You *MUST NOT* use the internal commands (with names beginning \CD@)**** + +%% don't load me twice! +\ifx\diagram\CD@qK\else\message{WARNING: the \string\diagram\space command is +already defined and will not be loaded again}\expandafter\endinput\fi + +%% make @ letter, saving its old code to restore at the end of this file +%%% look for this on the last line of the file if you think something's missing! +%% the other \catcode assignments are to make it work with texinfo. +\edef\cdrestoreat{%% +\noexpand\catcode\lq\noexpand\@=\the\catcode\lq\@%% +\noexpand\catcode\lq\noexpand\#=\the\catcode\lq\#%% +\noexpand\catcode\lq\noexpand\$=\the\catcode\lq\$%% +\noexpand\catcode\lq\noexpand\<=\the\catcode\lq\<%% +\noexpand\catcode\lq\noexpand\>=\the\catcode\lq\>%% +\noexpand\catcode\lq\noexpand\:=\the\catcode\lq\:%% Johannes L. Braams's +\noexpand\catcode\lq\noexpand\;=\the\catcode\lq\;%% Babel languages package +\noexpand\catcode\lq\noexpand\!=\the\catcode\lq\!%% makes these \active. +\noexpand\catcode\lq\noexpand\?=\the\catcode\lq\?%% +\noexpand\catcode\lq\noexpand\+=\the\catcode\rq53% +%% texinfo @+ is @outer@active +}\catcode\lq\@=11 \catcode\lq\#=6 \catcode\lq\<=12 \catcode\lq\>=12 \catcode +\rq53=12 \catcode\lq\:=12 \catcode\lq\;=12 \catcode\lq\!=12 \catcode\lq\?=12 + +%% Change y to n if pool_size in your implementation of TeX is small. +%% This is reasonable if you have a small ("personal") computer, but if you +%%% have a sun, dec, hp, ... workstation or a mainframe, complain to your local +%% system manager and get him/her to install a version of TeX with bigger +%% parameters. The "hash size" (number of command names) gets you next. +\ifx\diagram@help@messages\CD@qK\let\diagram@help@messages y\fi + +%% The following macro is used to include literal PostScript commands in the +%% DVI file for rotation, etc. Since this goes beyond standard TeX, it is +%%% dependent on the convention used by your local DVI-to-PostScript translator. +%% Choose whichever line applies to the program used at your site, or, if +%% yours is not listed, consult the manual, experiment with this macro and +%% (please) tell me what is needed to make it work. +%% +%% +%%% dvips (Tomas Rokicki, Radical Eye) labrea.stanford.edu /pub/dvips9999.tar.Z +%% CTAN: dviware/dvips +\def\cdps@Rokicki#1{\special{ps:#1}}\let\cdps@dvips\cdps@Rokicki\let +\cdps@RadicalEye\cdps@Rokicki\let\CD@HB\cdps@Rokicki\let\CD@IK\cdps@Rokicki +\let\CD@HB\cdps@Rokicki%% +%% I'm not sure that the rest work. +%% +%% dvitps (Stephan Bechtolsheim, Integrated Computer Systems) +%% arthur.cs.purdue.edu /pub/TeXPS-9.99.tar.Z +\def\cdps@Bechtolsheim#1{\special{dvitps: Literal "#1"}}% +%% ASCII two dbl quotes +\let\cdps@dvitps\cdps@Bechtolsheim\let\cdps@IntegratedComputerSystems +\cdps@Bechtolsheim%% +%% dvitops (James Clark) +%% CTAN: dviware/dvitops +\def\cdps@Clark#1{\special{dvitops: inline #1}}%% +\let\cdps@dvitops\cdps@Clark%% +%% OzTeX (Andrew Trevorrow) cannot be used +\let\cdps@OzTeX\empty\let\cdps@oztex\empty\let\cdps@Trevorrow\empty%% +%% dvi3ps (Kevin Coombes) +%% CTAN: dviware/dvi2ps/dvi3ps +\def\cdps@Coombes#1{\special{ps-string #1}}%% +%% psprint (Trevorrow) CTAN: dviware/psprint +%% dvi2ps (Senn) CTAN: dviware/dvi2ps +%% psdvi (Elwell) CTAN: dviware/dvi2ps/psdvi + +\count@=\year\multiply\count@12 \advance\count@\month%% +\ifnum\count@>24096 %% (December 2007) +\message{***********************************************************}%%ascii +\message{! YOU HAVE AN OUT OF DATE VERSION OF COMMUTATIVE DIAGRAMS! *}%% +\message{! it expired in December 2007 and is time-bombed for April *}%% +\message{! You may get an up to date version of this package from *}%%ascii +\message{! either www.ctan.org or www.cs.man.ac.uk/~pt/diagrams/ *}%% +\message{***********************************************************}%%ascii +\ifnum\count@>24099 %% (March 2008) +\errhelp{You may press RETURN and carry on for the time being.}\message{! It +is embarrassing to see papers in conference proceedings}\message{! and +journals containing bugs which I had fixed years before.}\message{! It is easy +to obtain and install a new version, which will}\errmessage{! remain +compatible with your files. Please get it NOW.}\fi\fi + +\def\CD@DE{\global\let}\def\CD@RH{\outer\def} + +%% safe names for braces, tab (&) and maths ($), as commands and for messages +{\escapechar\m@ne\xdef\CD@o{\string\{}\xdef\CD@yC{\string\}}%% +%% +%% three ASCII ampersands (ands) (&&&) appear on the next line +\catcode\lq\&=4 \CD@DE\CD@Q=&\xdef\CD@S{\string\&}%%ascii three ands +%% +%% ASCII ^ and _ each appear twice on next line +%% six ASCII dollars ($$$$$$) appear on the next two lines. +\catcode\lq\$=3 \CD@DE\CD@k=$\CD@DE\CD@ND=$%%ascii three dollars +\xdef\CD@nC{\string\$}\gdef\CD@LG{$$}%%ascii three dollars +%% +%% two ASCII underlines (__) appear on the next line. +\catcode\lq\_=8 \CD@DE\CD@lJ=_%%ascii two underlines +%% +%% eight ASCII carets (^^^^^^^^) appear on the next three lines. +\obeylines\catcode\lq\^=7 \CD@DE\@super=^%%ascii two carets +\ifnum\newlinechar=10 \gdef\CD@uG{^^J}%%ascii two carets +\else\ifnum\newlinechar=13 \gdef\CD@uG{^^M}%%ascii two carets +\else\ifnum\newlinechar=-1 \gdef\CD@uG{^^J}%%ascii two carets +\else\CD@DE\CD@uG\space\expandafter\message{! input error: \noexpand +\newlinechar\space is ASCII \the\newlinechar, not LF=10 or CR=13.}%% +\fi\fi\fi}%% + +%% avoid using <> (because I personally re-define them to mean \langle\rangle) +\mathchardef\lessthan=\rq30474 \mathchardef\greaterthan=\rq30476 + +%% LaTeX line and arrowhead font +%% the "hit return" comments show up if the font is missing. +\ifx\tenln\CD@qK%% +\font\tenln=line10\relax%% Hit return - who needs diagonals? +\fi\ifx\tenlnw\CD@qK\ifx\tenln\nullfont\let\tenlnw\nullfont\else%% +\font\tenlnw=linew10\relax%% Hit return - who needs diagonals? +\fi\fi%% + +%% report line numbers in TeX3 only +\ifx\inputlineno\CD@qK\csname newcount\endcsname\inputlineno\inputlineno\m@ne +\message{***************************************************}\message{! +Obsolete TeX (version 2). You should upgrade to *}\message{! version 3, which +has been available since 1990. *}\message{***********************************% +****************}\fi + +\def\cd@shouldnt#1{\CD@KB{* THIS (#1) SHOULD NEVER HAPPEN! *}} + +%% turn round- and square-bracketed arguments into curly-bracketed +\def\get@round@pair#1(#2,#3){#1{#2}{#3}}%%ascii round brackets () +\def\get@square@arg#1[#2]{#1{#2}}%%ascii square brackets [] +\def\CD@AE#1{\CD@PK\let\CD@DH\CD@@E\CD@@E#1,],}%%ascii sq brackets +\def\CD@m{[}\def\CD@RD{]}\def\commdiag#1{{\let\enddiagram\relax\diagram[]#1% +\enddiagram}} + +%% ASCII open square bracket occurs on next line +\def\CD@BF{{\ifx\CD@EH[\aftergroup\get@square@arg\aftergroup\CD@YH\else +\aftergroup\CD@JH\fi}}%% +\def\CD@CF#1#2{\def\CD@YH{#1}\def\CD@JH{#2}\futurelet\CD@EH\CD@BF} + +%% ASCII vertical bar (|) occurs on the next line +\def\CD@KK{|} + +\def\CD@PB{%% arguments to maps inside diagrams +\tokcase\CD@DD:\CD@y\break@args;\catcase\@super:\upper@label;\catcase\CD@lJ:% +\lower@label;\tokcase{~}:\middle@label;%%ascii tilde +\tokcase<:\CD@iF;%%ascii less-than +\tokcase>:\CD@iI;%%ascii greater-than +\tokcase(:\CD@BC;%%)%ascii open round bracket +\tokcase[:\optional@;%%]%ascii open square bracket +\tokcase.:\CD@JJ;%%ascii dot 12.7.94 +\catcase\space:\eat@space;\catcase\bgroup:\positional@;\default:\CD@@A +\break@args;\endswitch} + +\def\switch@arg{%% arguments to horizontal maps outside diagrams +\catcase\@super:\upper@label;\catcase\CD@lJ:\lower@label;\tokcase[:\optional@ +;%%]%ascii open square bracket +\tokcase.:\CD@JJ;%%ascii dot 12.7.94 % ; was : before 15.6.97 +\catcase\space:\eat@space;\catcase\bgroup:\positional@;\tokcase{~}:% +\middle@label;%%ascii tilde (questionable!) +\default:\CD@y\break@args;\endswitch} + +%% That's as much as you get to read "in clear" - the rest is private! + +\let\CD@tJ\relax\ifx\protect\CD@qK\let\protect\relax\fi\ifx\AtEndDocument +\CD@qK\def\CD@PG{\CD@gB}\def\CD@GF#1#2{}\else\def\CD@PG#1{\edef\CD@CH{#1}% +\expandafter\CD@oC\CD@CH\CD@OD}\def\CD@oC#1\CD@OD{\AtEndDocument{\typeout{% +\CD@tA: #1}}}\def\CD@GF#1#2{\gdef#1{#2}\AtEndDocument{#1}}\fi\def\CD@ZA#1#2{% +\def#1{\CD@PG{#2\CD@mD\CD@W}\CD@DE#1\relax}}\def\CD@uF#1\repeat{\def\CD@p{#1}% +\CD@OF}\def\CD@OF{\CD@p\relax\expandafter\CD@OF\fi}\def\CD@sF#1\repeat{\def +\CD@q{#1}\CD@PF}\def\CD@PF{\CD@q\relax\expandafter\CD@PF\fi}\def\CD@tF#1% +\repeat{\def\CD@r{#1}\CD@QF}\def\CD@QF{\CD@r\relax\expandafter\CD@QF\fi}\def +\CD@tG#1#2#3{\def#2{\let#1\iftrue}\def#3{\let#1\iffalse}#3}\if y% +\diagram@help@messages\def\CD@rG#1#2{\csname newtoks\endcsname#1#1=% +\expandafter{\csname#2\endcsname}}\else\csname newtoks\endcsname\no@cd@help +\no@cd@help{See the manual}\def\CD@rG#1#2{\let#1\no@cd@help}\fi\chardef\CD@lF +=1 \chardef\CD@lI=2 \chardef\CD@MH=5 \chardef\CD@tH=6 \chardef\CD@sH=7 +\chardef\CD@PC=9 \dimendef\CD@hI=2 \dimendef\CD@hF=3 \dimendef\CD@mF=4 +\dimendef\CD@mI=5 \dimendef\CD@wJ=6 \dimendef\CD@tI=8 \dimendef\CD@sI=9 +\skipdef\CD@uB=1 \skipdef\CD@NF=2 \skipdef\CD@tB=3 \skipdef\CD@ZE=4 \skipdef +\CD@JK=5 \skipdef\CD@kI=6 \skipdef\CD@kF=7 \skipdef\CD@qI=8 \skipdef\CD@pI=9 +\countdef\CD@JC=9 \countdef\CD@gD=8 \countdef\CD@A=7 \def\sdef#1#2{\def#1{#2}% +}\def\CD@L#1{\expandafter\aftergroup\csname#1\endcsname}\def\CD@RC#1{% +\expandafter\def\csname#1\endcsname}\def\CD@sD#1{\expandafter\gdef\csname#1% +\endcsname}\def\CD@vC#1{\expandafter\edef\csname#1\endcsname}\def\CD@nF#1#2{% +\expandafter\let\csname#1\expandafter\endcsname\csname#2\endcsname}\def\CD@EE +#1#2{\expandafter\CD@DE\csname#1\expandafter\endcsname\csname#2\endcsname}% +\def\CD@AK#1{\csname#1\endcsname}\def\CD@XJ#1{\expandafter\show\csname#1% +\endcsname}\def\CD@ZJ#1{\expandafter\showthe\csname#1\endcsname}\def\CD@WJ#1{% +\expandafter\showbox\csname#1\endcsname}\def\CD@tA{Commutative Diagram}\edef +\CD@kH{\string\par}\edef\CD@dC{\string\diagram}\edef\CD@HD{\string\enddiagram +}\edef\CD@EC{\string\\}\def\CD@eF{LaTeX}\ifx\@ignoretrue\CD@qK\expandafter +\CD@tG\csname if@ignore\endcsname\ignore@true\ignore@false\def\@ignoretrue{% +\global\ignore@true}\def\@ignorefalse{\global\ignore@false}\fi + +\def\CD@g{{\ifnum0=\lq}\fi}\def\CD@wC{\ifnum0=\lq{\fi}}\def\catcase#1:{\ifcat +\noexpand\CD@EH#1\CD@tJ\expandafter\CD@kC\else\expandafter\CD@dJ\fi}\def +\tokcase#1:{\ifx\CD@EH#1\CD@tJ\expandafter\CD@kC\else\expandafter\CD@dJ\fi}% +\def\CD@kC#1;#2\endswitch{#1}\def\CD@dJ#1;{}\let\endswitch\relax\def\default:% +#1;#2\endswitch{#1}\ifx\at@\CD@qK\def\at@{@}\fi\edef\CD@P{\CD@o pt\CD@yC}% +\CD@RC{\CD@P>}#1>#2>{\CD@z\rTo\sp{#1}\sb{#2}\CD@z}\CD@RC{\CD@P<}#1<#2<{\CD@z +\lTo\sp{#1}\sb{#2}\CD@z}\CD@RC{\CD@P)}#1)#2){\CD@z\rTo\sp{#1}\sb{#2}\CD@z}% +%%ascii round +\CD@RC{\CD@P(}#1(#2({\CD@z\lTo\sp{#1}\sb{#2}\CD@z}%%ascii brack +\def\CD@O{\def\endCD{\enddiagram}\CD@RC{\CD@P A}##1A##2A{\uTo<{##1}>{##2}% +\CD@z\CD@z}\CD@RC{\CD@P V}##1V##2V{\dTo<{##1}>{##2}\CD@z\CD@z}\CD@RC{\CD@P=}{% +\CD@z\hEq\CD@z}\CD@RC{\CD@P\CD@KK}{\vEq\CD@z\CD@z}\CD@RC{\CD@P\string\vert}{% +\vEq\CD@z\CD@z}\CD@RC{\CD@P.}{\CD@z\CD@z}\let\CD@z\CD@Q}\def\CD@IE{\let\tmp +\CD@JE\ifcat A\noexpand\CD@CH\else\ifcat=\noexpand\CD@CH\else\ifcat\relax +\noexpand\CD@CH\else\let\tmp\at@\fi\fi\fi\tmp}\def\CD@JE#1{\CD@nF{tmp}{\CD@P +\string#1}\ifx\tmp\relax\def\tmp{\at@#1}\fi\tmp}\def\CD@z{}\begingroup +\aftergroup\def\aftergroup\CD@T\aftergroup{\aftergroup\def\catcode\lq\@% +\active\aftergroup @\endgroup{\futurelet\CD@CH\CD@IE}}\newcount\CD@uA +\newcount\CD@vA\newcount\CD@wA\newcount\CD@xA\newdimen\CD@OA\newdimen\CD@PA +\CD@tG\CD@gE\CD@@A\CD@y\CD@tG\CD@hE\CD@EA\CD@BA\newdimen\CD@RA\newdimen\CD@SA +\newcount\CD@yA\newcount\CD@zA\newdimen\CD@QA\newbox\CD@DA\CD@tG\CD@lE\CD@dA +\CD@bA\newcount\CD@LH\newcount\CD@TC\def\CD@V#1#2{\ifdim#1<#2\relax#1=#2% +\relax\fi}\def\CD@X#1#2{\ifdim#1>#2\relax#1=#2\relax\fi}\newdimen\CD@XH\CD@XH +=1sp \newdimen\CD@zC\CD@zC\z@\def\CD@cJ{\ifdim\CD@zC=1em\else\CD@nJ\fi}\def +\CD@nJ{\CD@zC1em\def\CD@NC{\fontdimen8\textfont3 }\CD@@J\CD@NJ\setbox0=\vbox{% +\CD@t\noindent\CD@k\null\penalty-9993\null\CD@ND\null\endgraf\setbox0=% +\lastbox\unskip\unpenalty\setbox1=\lastbox\global\setbox\CD@IG=\hbox{\unhbox0% +\unskip\unskip\unpenalty\setbox0=\lastbox}\global\setbox\CD@KG=\hbox{\unhbox1% +\unskip\unpenalty\setbox1=\lastbox}}}\newdimen\CD@@I\CD@@I=1true in \divide +\CD@@I300 \def\CD@zH#1{\multiply#1\tw@\advance#1\ifnum#1<\z@-\else+\fi\CD@@I +\divide#1\tw@\divide#1\CD@@I\multiply#1\CD@@I}\def\MapBreadth{% +\afterassignment\CD@gI\CD@LF}\newdimen\CD@LF\newdimen\CD@oI\def\CD@gI{\CD@oI +\CD@LF\CD@V\CD@@I{4\CD@XH}\CD@X\CD@@I\p@\CD@zH\CD@oI\ifdim\CD@LF>\z@\CD@V +\CD@oI\CD@@I\fi\CD@cJ}\def\CD@RJ#1{\CD@zD\count@\CD@@I#1\ifnum\count@>\z@ +\divide\CD@@I\count@\fi\CD@gI\CD@NJ}\def\CD@NJ{\dimen@\CD@QC\count@\dimen@ +\divide\count@5\divide\count@\CD@@I\edef\CD@OC{\the\count@}}\def\CD@AJ{\CD@QJ +\z@}\def\CD@QJ#1{\CD@tI\axisheight\advance\CD@tI#1\relax\advance\CD@tI-.5% +\CD@oI\CD@zH\CD@tI\CD@sI-\CD@tI\advance\CD@tI\CD@LF}\newdimen\CD@DC\CD@DC\z@ +\newdimen\CD@eJ\CD@eJ\z@\def\CD@CJ#1{\CD@sI#1\relax\CD@tI\CD@sI\advance\CD@tI +\CD@LF\relax}\def\horizhtdp{height\CD@tI depth\CD@sI}\def\axisheight{% +\fontdimen22\the\textfont\tw@}\def\script@axisheight{\fontdimen22\the +\scriptfont\tw@}\def\ss@axisheight{\fontdimen22\the\scriptscriptfont\tw@}\def +\CD@NC{0.4pt}\def\CD@VK{\fontdimen3\textfont\z@}\def\CD@UK{\fontdimen3% +\textfont\z@}\newdimen\PileSpacing\newdimen\CD@nA\CD@nA\z@\def\CD@RG{% +\ifincommdiag1.3em\else2em\fi}\newdimen\CD@YB\def\CellSize{\afterassignment +\CD@kB\DiagramCellHeight}\newdimen\DiagramCellHeight\DiagramCellHeight-% +\maxdimen\newdimen\DiagramCellWidth\DiagramCellWidth-\maxdimen\def\CD@kB{% +\DiagramCellWidth\DiagramCellHeight}\def\CD@QC{3em}\newdimen\MapShortFall\def +\MapsAbut{\MapShortFall\z@\objectheight\z@\objectwidth\z@}\newdimen\CD@iA +\CD@iA\z@\CD@tG\CD@vE\CD@aB\CD@ZB\expandafter\ifx\expandafter\iftrue\csname +ifUglyObsoleteDiagrams\endcsname\CD@ZB\else\CD@aB\fi\CD@nF{% +ifUglyObsoleteDiagrams}{relax}\newif\ifUglyObsoleteDiagrams\def\CD@nK{\CD@aB +\UglyObsoleteDiagramsfalse}\def\CD@oK{\CD@ZB\UglyObsoleteDiagramstrue}\CD@vE +\CD@nK\else\CD@oK\fi\CD@tG\CD@hK\CD@dK\CD@cK\CD@cK\def\CD@pK{\global\CD@dK +\global\CD@aB\global\UglyObsoleteDiagramsfalse\global\let\CD@n\empty\global +\let\CD@oK\relax}\def\newarrowhead{\CD@mG h\CD@BG\CD@GG>}\def\newarrowtail{% +\CD@mG t\CD@BG\CD@GG>}\def\newarrowmiddle{\CD@mG m\CD@BG\hbox@maths\empty}% +\def\newarrowfiller{\CD@mG f\CD@bE\CD@MK-}\def\CD@mG#1#2#3#4#5#6#7#8#9{\CD@RC +{r#1:#5}{#2{#6}}\CD@RC{l#1:#5}{#2{#7}}\CD@RC{d#1:#5}{#3{#8}}\CD@RC{u#1:#5}{#3% +{#9}}\CD@vC{-#1:#5}{\expandafter\noexpand\csname-#1:#4\endcsname\noexpand +\CD@MC}\CD@vC{+#1:#5}{\expandafter\noexpand\csname+#1:#4\endcsname\noexpand +\CD@MC}}\CD@ZA\CD@MC{\CD@eF\space diagonals are used unless PostScript is set% +}\def\defaultarrowhead#1{\edef\CD@sJ{#1}\CD@@J}\def\CD@@J{\CD@IJ\CD@sJ<>ht% +\CD@IJ\CD@sJ<>th}\def\CD@IJ#1#2#3#4#5{\CD@HJ{r#4}{#3}{l#5}{#2}{r#4:#1}\CD@HJ{% +r#5}{#2}{l#4}{#3}{l#4:#1}\CD@HJ{d#4}{#3}{u#5}{#2}{d#4:#1}\CD@HJ{d#5}{#2}{u#4}% +{#3}{u#4:#1}}\def\CD@HJ#1#2#3#4#5{\begingroup\aftergroup\CD@GJ\CD@L{#1+:#2}% +\CD@L{#1:#2}\CD@L{#3:#4}\CD@L{#5}\endgroup}\def\CD@GJ#1#2#3#4{\csname newbox% +\endcsname#1\def#2{\copy#1}\def#3{\copy#1}\setbox#1=\box\voidb@x}\def\CD@sJ{}% +\CD@@J\def\CD@GJ#1#2#3#4{\setbox#1=#4}\ifx\tenln\nullfont\def\CD@sJ{vee}\else +\let\CD@sJ\CD@eF\fi\def\CD@xF#1#2#3{\begingroup\aftergroup\CD@wF\CD@L{#1#2:#3% +#3}\CD@L{#1#2:#3}\aftergroup\CD@yF\CD@L{#1#2:#3-#3}\CD@L{#1#2:#3}\endgroup}% +\def\CD@wF#1#2{\def#1{\hbox{\rlap{#2}\kern.4\CD@zC#2}}}\def\CD@yF#1#2{\def#1{% +\hbox{\rlap{#2}\kern.4\CD@zC#2\kern-.4\CD@zC}}}\CD@xF lh>\CD@xF rt>\CD@xF rh<% +\CD@xF rt<\def\CD@yF#1#2{\def#1{\hbox{\kern-.4\CD@zC\rlap{#2}\kern.4\CD@zC#2}% +}}\CD@xF rh>\CD@xF lh<\CD@xF lt>\CD@xF lt<\def\CD@wF#1#2{\def#1{\vbox{\vbox to% +\z@{#2\vss}\nointerlineskip\kern.4\CD@zC#2}}}\def\CD@yF#1#2{\def#1{\vbox{% +\vbox to\z@{#2\vss}\nointerlineskip\kern.4\CD@zC#2\kern-.4\CD@zC}}}\CD@xF uh>% +\CD@xF dt>\CD@xF dh<\CD@xF dt<\def\CD@yF#1#2{\def#1{\vbox{\kern-.4\CD@zC\vbox +to\z@{#2\vss}\nointerlineskip\kern.4\CD@zC#2}}}\CD@xF dh>\CD@xF ut>\CD@xF uh<% +\CD@xF ut<\def\CD@BG#1{\hbox{\mathsurround\z@\offinterlineskip\CD@k\mkern-1.5% +mu{#1}\mkern-1.5mu\CD@ND}}\def\hbox@maths#1{\hbox{\CD@k#1\CD@ND}}\def\CD@GG#1% +{\hbox to\CD@LF{\setbox0=\hbox{\offinterlineskip\mathsurround\z@\CD@k{#1}% +\CD@ND}\dimen0.5\wd0\advance\dimen0-.5\CD@oI\CD@zH{\dimen0}\kern-\dimen0% +\unhbox0\hss}}\def\CD@sB#1{\hbox to2\CD@LF{\hss\offinterlineskip\mathsurround +\z@\CD@k{#1}\CD@ND\hss}}\def\CD@vF#1{\hbox{\mathsurround\z@\CD@k{#1}\CD@ND}}% +\def\CD@bE#1{\hbox{\kern-.15\CD@zC\CD@k{#1}\CD@ND\kern-.15\CD@zC}}\def\CD@MK#% +1{\vbox{\offinterlineskip\kern-.2ex\CD@GG{#1}\kern-.2ex}}\def\@fillh{% +\xleaders\vrule\horizhtdp}\def\@fillv{\xleaders\hrule width\CD@LF}\CD@nF{rf:-% +}{@fillh}\CD@nF{lf:-}{@fillh}\CD@nF{df:-}{@fillv}\CD@nF{uf:-}{@fillv}\CD@nF{% +rh:}{null}\CD@nF{rm:}{null}\CD@nF{rt:}{null}\CD@nF{lh:}{null}\CD@nF{lm:}{null% +}\CD@nF{lt:}{null}\CD@nF{dh:}{null}\CD@nF{dm:}{null}\CD@nF{dt:}{null}\CD@nF{% +uh:}{null}\CD@nF{um:}{null}\CD@nF{ut:}{null}\CD@nF{+h:}{null}\CD@nF{+m:}{null% +}\CD@nF{+t:}{null}\CD@nF{-h:}{null}\CD@nF{-m:}{null}\CD@nF{-t:}{null}\def +\CD@@D{\hbox{\vrule height 1pt depth-1pt width 1pt}}\CD@RC{rf:}{\CD@@D}\CD@nF +{lf:}{rf:}\CD@nF{+f:}{rf:}\CD@RC{df:}{\CD@@D}\CD@nF{uf:}{df:}\CD@nF{-f:}{df:}% +\def\CD@BD{\CD@U\null\CD@@D\null\CD@@D\null}\edef\CD@lG{\string\newarrow}\def +\newarrow#1#2#3#4#5#6{\begingroup\edef\@name{#1}\edef\CD@oJ{#2}\edef\CD@iD{#3% +}\edef\CD@QG{#4}\edef\CD@jD{#5}\edef\CD@LE{#6}\let\CD@HE\CD@sG\let\CD@FK +\CD@BH\let\@x\CD@AH\ifx\CD@oJ\CD@iD\let\CD@oJ\empty\fi\ifx\CD@LE\CD@jD\let +\CD@LE\empty\fi\def\CD@LI{r}\def\CD@SF{l}\def\CD@IC{d}\def\CD@yJ{u}\def\CD@gH +{+}\def\@m{-}\ifx\CD@iD\CD@jD\ifx\CD@QG\CD@iD\let\CD@QG\empty\fi\ifx\CD@LE +\empty\ifx\CD@iD\CD@aE\let\@x\CD@yG\else\let\@x\CD@zG\fi\fi\else\edef\CD@a{% +\CD@iD\CD@oJ}\ifx\CD@a\empty\ifx\CD@QG\CD@jD\let\CD@QG\empty\fi\fi\fi\ifmmode +\aftergroup\CD@kG\else\CD@@A\CD@oB rh{head\space\space}\CD@LE\CD@oB rf{filler% +}\CD@iD\CD@oB rm{middle}\CD@QG\ifx\CD@jD\CD@iD\else\CD@oB rf{filler}\CD@jD\fi +\CD@oB rt{tail\space\space}\CD@oJ\CD@gE\CD@HE\CD@FK\@x\CD@nG l-2+2{lu}{nw}% +\NorthWest\CD@nG r+2+2{ru}{ne}\NorthEast\CD@nG l-2-2{ld}{sw}\SouthWest\CD@nG r% ++2-2{rd}{se}\SouthEast\else\aftergroup\CD@b\CD@L{r\@name}\fi\fi\endgroup}\def +\CD@sG{\CD@vG\CD@LI\CD@SF rl\Horizontal@Map}\def\CD@BH{\CD@vG\CD@IC\CD@yJ du% +\Vertical@Map}\def\CD@AH{\CD@vG\CD@gH\@m+-\Vector@Map}\def\CD@yG{\CD@vG\CD@gH +\@m+-\Slant@Map}\def\CD@zG{\CD@vG\CD@gH\@m+-\Slope@Map}\catcode\lq\/=\active +\def\CD@vG#1#2#3#4#5{\CD@jG#1#3#5t:\CD@oJ/f:\CD@iD/m:\CD@QG/f:\CD@jD/h:\CD@LE +//\CD@jG#2#4#5h:\CD@LE/f:\CD@jD/m:\CD@QG/f:\CD@iD/t:\CD@oJ//}\def\CD@jG#1#2#3% +#4//{\edef\CD@fG{#2}\aftergroup\sdef\CD@L{#1\@name}\aftergroup{\aftergroup#3% +\CD@M#4//\aftergroup}}\def\CD@M#1/{\edef\CD@EH{#1}\ifx\CD@EH\empty\else\CD@L{% +\CD@fG#1}\expandafter\CD@M\fi}\catcode\lq\/=12 \def\CD@nG#1#2#3#4#5#6#7#8{% +\aftergroup\sdef\CD@L{#6\@name}\aftergroup{\CD@L{#2\@name}\if#2#4\aftergroup +\CD@CI\else\aftergroup\CD@BI\fi\CD@L{#1\@name}% +%% ASCII round brackets and comma (,) appear on the next line +\aftergroup(\aftergroup#3\aftergroup,\aftergroup#5\aftergroup)\aftergroup}}% +\def\CD@oB#1#2#3#4{\expandafter\ifx\csname#1#2:#4\endcsname\relax\CD@y\CD@gB{% +arrow#3 "#4" undefined}\fi}\CD@rG\CD@VE{All five components must be defined +before an arrow.}\CD@rG\CD@SE{\CD@lG, unlike \string\HorizontalMap, is a +declaration.}\def\CD@b#1{\CD@YA{Arrows \string#1 etc could not be defined}% +\CD@VE}\def\CD@kG{\CD@YA{misplaced \CD@lG}\CD@SE}\def\newdiagramgrid#1#2#3{% +\CD@RC{cdgh@#1}{#2,],}%% ASCII close square bracket +\CD@RC{cdgv@#1}{#3,],}}%% ASCII close square bracket +\CD@tG\ifincommdiag\incommdiagtrue\incommdiagfalse\CD@tG\CD@@F\CD@IF\CD@HF +\newcount\CD@VA\CD@VA=0 \def\CD@yH{\CD@VA6 }\def\CD@OB{\CD@VA1 \global\CD@yA1 +\CD@DE\CD@YF\empty}\def\CD@YF{}\def\CD@nB#1{\relax\CD@MD\edef\CD@vJ{#1}% +\begingroup\CD@rE\else\ifcase\CD@VA\ifmmode\else\CD@YG\CD@E0\fi\or\CD@cE5\or +\CD@YG\CD@F5\or\CD@YG\CD@B5\or\CD@YG\CD@B5\or\CD@YG\CD@C5\or\CD@cE7\or\CD@YG +\CD@D7\fi\fi\endgroup\xdef\CD@YF{#1}}\def\CD@pB#1#2#3#4#5{\relax\CD@MD\xdef +\CD@vJ{#4}\begingroup\ifnum\CD@VA<#1 \expandafter\CD@cE\ifcase\CD@VA0\or#2\or +#3\else#2\fi\else\ifnum\CD@VA<6 \CD@tJ\CD@YG\CD@B#2\else\CD@YG\CD@G#2\fi\fi +\endgroup\CD@DE\CD@YF\CD@vJ\ifincommdiag\let\CD@ZD#5\else\let\CD@ZD\CD@LK\fi}% +\def\CD@yI{\global\CD@yA=\ifnum\CD@VA<5 1\else2\fi\relax}\def\CD@OI{\CD@VA +\CD@yA}\def\CD@cE#1{\aftergroup\CD@VA\aftergroup#1\aftergroup\relax}\def +\CD@HH{\def\CD@nB##1{\relax}\let\CD@pB\CD@FH\let\CD@yH\relax\let\CD@OB\relax +\let\CD@yI\relax\let\CD@OI\relax}\def\CD@FH#1#2#3#4#5{\ifincommdiag\let\CD@ZD +#5\else\xdef\CD@vJ{#4}\let\CD@ZD\CD@LK\fi}\def\CD@YG#1{\aftergroup#1% +\aftergroup\relax\CD@cE}\def\CD@B{\CD@YE\CD@S\CD@ME\CD@Q}\def\CD@G{\CD@YE{% +\CD@yC\CD@S}\CD@XE\CD@QD\CD@Q}\def\CD@F{\CD@YE{*\CD@S}\CD@RE\clubsuit\CD@Q}% +\def\CD@C{\CD@YE{\CD@S*\CD@S}\CD@RE\CD@Q\clubsuit\CD@Q}\def\CD@D{\CD@YE\CD@EC +\CD@TE\\}\def\CD@E{\CD@YE\CD@nC\CD@QE\CD@k}\def\CD@LK{\CD@YA{\CD@vJ\space +ignored \CD@dH}\CD@WE}\def\CD@FE{}\def\CD@d{\CD@YA{maps must never be enclosed +in braces}\CD@OE}\def\CD@dH{outside diagram}\def\CD@FC{\string\HonV, \string +\VonH\space and \string\HmeetV}\CD@rG\CD@ME{The way that horizontal and +vertical arrows are terminated implicitly means\CD@uG that they cannot be +mixed with each other or with \CD@FC.}\CD@rG\CD@XE{\string\pile\space is for +parallel horizontal arrows; verticals can just be put together in\CD@uG a cell% +. \CD@FC\space are not meaningful in a \string\pile.}\CD@rG\CD@RE{The +horizontal maps must point to an object, not each other (I've put in\CD@uG one +which you're unlikely to want). Use \string\pile\space if you want them +parallel.}\CD@rG\CD@TE{Parallel horizontal arrows must be in separate layers +of a \string\pile.}\CD@rG\CD@QE{Horizontal arrows may be used \CD@dH s, but +must still be in maths.}\CD@rG\CD@WE{Vertical arrows, \CD@FC\space\CD@dH s don% +'t know where\CD@uG where to terminate.}\CD@rG\CD@OE{This prevents them from +stretching correctly.}\def\CD@YE#1{\CD@YA{"#1" inserted \ifx\CD@YF\empty +before \CD@vJ\else between \CD@YF\ifx\CD@YF\CD@vJ s\else\space and \CD@vJ\fi +\fi}}\count@=\year\multiply\count@12 \advance\count@\month\ifnum\count@>24103 +\message{because this one expired in July 2008!}\expandafter\endinput\fi\def +\Horizontal@Map{\CD@nB{horizontal map}\CD@LC\CD@TJ\CD@qD}\def\CD@TJ{\CD@GB-% +9999 \let\CD@ZD\CD@XD\ifincommdiag\else\CD@cJ\ifinpile\else\skip2\z@ plus 1.5% +\CD@VK minus .5\CD@UK\skip4\skip2 \fi\fi\let\CD@kD\@fillh\CD@nF{fill@dot}{rf:% +.}}\def\Vector@Map{\CD@HK4}\def\Slant@Map{\CD@HK{\CD@EF255\else6\fi}}\def +\Slope@Map{\CD@HK\CD@OC}\def\CD@HK#1#2#3#4#5#6{\CD@LC\def\CD@WK{2}\def\CD@aK{% +2}\def\CD@ZK{1}\def\CD@bK{1}\let\Horizontal@Map\CD@nI\def\CD@OG{#1}\def\CD@NI +{\CD@U#2#3#4#5#6}}\def\CD@nI{\CD@TJ\CD@JB\let\CD@ZD\CD@TD\CD@qD}\CD@tG\CD@pE +\CD@rA\CD@qA\CD@rA\def\cds@missives{\CD@rA}\def\CD@TD{\CD@vE\let\CD@OG\CD@OC +\CD@x\CD@zE\CD@WF\fi\setbox0\hbox{\incommdiagfalse\CD@HI}\CD@pE\CD@aD\else +\global\CD@YC\CD@bD\fi\ifvoid6 \ifvoid7 \CD@eE\fi\fi\CD@zE\else\CD@BD\global +\CD@YC\let\CD@CG\CD@IH\CD@YD\fi\else\CD@NI\CD@MI\global\CD@YC\CD@YD\fi}\def +\CD@LC{\begingroup\dimen1=\MapShortFall\dimen2=\CD@RG\dimen5=\MapShortFall +\setbox3=\box\voidb@x\setbox6=\box\voidb@x\setbox7=\box\voidb@x\CD@pD +\mathsurround\z@\skip2\z@ plus1fill minus 1000pt\skip4\skip2 \CD@TB}\CD@tG +\CD@tE\CD@UB\CD@TB\def\CD@U#1#2#3#4#5{\let\CD@oJ#1\let\CD@iD#2\let\CD@QG#3% +\let\CD@jD#4\let\CD@LE#5\CD@TB\ifx\CD@iD\CD@jD\CD@UB\fi}\def\CD@qD#1#2#3#4#5{% +\CD@U#1#2#3#4#5\CD@tD}\def\Vertical@Map{\CD@pB433{vertical map}\CD@cD\CD@LC +\CD@GB-9995 \let\CD@kD\@fillv\CD@nF{fill@dot}{df:.}\CD@qD}\def\break@args{% +\def\CD@tD{\CD@ZD}\CD@ZD\endgroup\aftergroup\CD@FE}\def\CD@MJ{\setbox1=\CD@oJ +\setbox5=\CD@LE\ifvoid3 \ifx\CD@QG\null\else\setbox3=\CD@QG\fi\fi\CD@@G2% +\CD@iD\CD@@G4\CD@jD}\def\CD@pF#1{\ifvoid1\else\CD@oF1#1\fi\ifvoid2\else\CD@oF +2#1\fi\ifvoid3\else\CD@oF3#1\fi\ifvoid4\else\CD@oF4#1\fi\ifvoid5\else\CD@oF5#% +1\fi} \def\CD@oF#1#2{\setbox#1\vbox{\offinterlineskip\box#1\dimen@\prevdepth +\advance\dimen@-#2\relax\setbox0\null\dp0\dimen@\ht0-\dimen@\box0}}\def\CD@@G +#1#2{\ifx#2\CD@kD\setbox#1=\box\voidb@x\else\setbox#1=#2\def#2{\xleaders\box#% +1}\fi}\CD@ZA\CD@BK{\string\HorizontalMap, \string\VerticalMap\space and +\string\DiagonalMap\CD@uG are obsolete - use \CD@lG\space to pre-define maps}% +\def\HorizontalMap#1#2#3#4#5{\CD@BK\CD@nB{old horizontal map}\CD@LC\CD@TJ\def +\CD@oJ{\CD@UH{#1}}\CD@SH\CD@iD{#2}\def\CD@QG{\CD@UH{#3}}\CD@SH\CD@jD{#4}\def +\CD@LE{\CD@UH{#5}}\CD@tD}\def\VerticalMap#1#2#3#4#5{\CD@BK\CD@pB433{vertical +map}\CD@cD\CD@LC\CD@GB-9995 \let\CD@kD\@fillv\def\CD@oJ{\CD@GG{#1}}\CD@VH +\CD@iD{#2}\def\CD@QG{\CD@GG{#3}}\CD@VH\CD@jD{#4}\def\CD@LE{\CD@GG{#5}}\CD@tD}% +\def\DiagonalMap#1#2#3#4#5{\CD@BK\CD@LC\def\CD@OG{4}\let\CD@kD\CD@qK\let +\CD@ZD\CD@YD\def\CD@WK{2}\def\CD@aK{2}\def\CD@ZK{1}\def\CD@bK{1}\def\CD@QG{% +\CD@vF{#3}}\ifPositiveGradient\let\mv\raise\def\CD@oJ{\CD@vF{#5}}\def\CD@iD{% +\CD@vF{#4}}\def\CD@jD{\CD@vF{#2}}\def\CD@LE{\CD@vF{#1}}\else\let\mv\lower\def +\CD@oJ{\CD@vF{#1}}\def\CD@iD{\CD@vF{#2}}\def\CD@jD{\CD@vF{#4}}\def\CD@LE{% +\CD@vF{#5}}\fi\CD@tD}\def\CD@aE{-}\def\CD@AD{\empty}\def\CD@SH{\CD@EG\CD@bE +\CD@aE\@fillh}\def\CD@VH{\CD@EG\CD@MK\CD@KK\@fillv}\def\CD@EG#1#2#3#4#5{\def +\CD@CH{#5}\ifx\CD@CH#2\let#4#3\else\let#4\null\ifx\CD@CH\empty\else\ifx\CD@CH +\CD@AD\else\let#4\CD@CH\fi\fi\fi}\def\CD@UH#1{\hbox{\mathsurround\z@ +\offinterlineskip\def\CD@CH{#1}\ifx\CD@CH\empty\else\ifx\CD@CH\CD@AD\else +\CD@k\mkern-1.5mu{\CD@CH}\mkern-1.5mu\CD@ND\fi\fi}}\def\CD@yD#1#2{\setbox#1=% +\hbox\bgroup\setbox0=\hbox{\CD@k\labelstyle()\CD@ND}%% ASCII round brackets +\setbox1=\null\ht1\ht0\dp1\dp0\box1 \kern.1\CD@zC\CD@k\bgroup\labelstyle +\aftergroup\CD@LD\CD@xD}\def\CD@LD{\CD@ND\kern.1\CD@zC\egroup\CD@tD}\def +\CD@xD{\futurelet\CD@EH\CD@mJ}\def\CD@mJ{%% qualifiers on label arguments +\catcase\bgroup:\CD@v;\catcase\egroup:\missing@label;\catcase\space:\CD@TF;% +\tokcase[:\CD@XF;%%]%ascii close square bracket +\default:\CD@zJ;\endswitch}\def\CD@v{\let\CD@MD\CD@c\let\CD@CH}\def\CD@zJ#1{% +\let\CD@UF\egroup{\let\actually@braces@missing@around@macro@in@label\CD@ZH +\let\CD@MD\CD@xC\let\CD@UF\CD@VF#1% +\actually@braces@missing@around@macro@in@label}\CD@UF}\def +\actually@braces@missing@around@macro@in@label{\let\CD@CH=}\def\missing@label +{\egroup\CD@YA{missing label}\CD@PE}\def\CD@xC{\egroup\missing@label}\outer +\def\CD@ZH{}\def\CD@UF{}\def\CD@VF{\CD@wC\CD@UF}\def\CD@MD{}\def\CD@XF{\let +\CD@N\CD@xD\get@square@arg\CD@AE}\CD@rG\CD@PE{The text which has just been +read is not allowed within map labels.}\def\CD@c{\egroup\CD@YA{missing \CD@yC +\space inserted after label}\CD@PE}\def\upper@label{\CD@oD\CD@yD6}\def +\lower@label{\def\positional@{\CD@@A\break@args}\CD@yD7}\def\middle@label{% +\CD@yD3}\CD@tG\CD@yE\CD@pD\CD@oD\def\CD@iF{\ifPositiveGradient\CD@tJ +\expandafter\upper@label\else\expandafter\lower@label\fi}\def\CD@iI{% +\ifPositiveGradient\CD@tJ\expandafter\lower@label\else\expandafter +\upper@label\fi}\def\positional@{\CD@gB{labels as positional arguments are +obsolete}\CD@yE\CD@tJ\expandafter\upper@label\else\expandafter\lower@label\fi +-}\def\CD@tD{\futurelet\CD@EH\switch@arg}\def\eat@space{\afterassignment +\CD@tD\let\CD@EH= }\def\CD@TF{\afterassignment\CD@xD\let\CD@EH= }\def\CD@BC{% +\get@round@pair\CD@uD}\def\CD@uD#1#2{\def\CD@WK{#1}\def\CD@aK{#2}\CD@tD}\def +\optional@{\let\CD@N\CD@tD\get@square@arg\CD@AE}\def\CD@JJ.{\CD@sC\CD@tD}\def +\CD@sC{\let\CD@iD\fill@dot\let\CD@jD\fill@dot\def\CD@MI{\let\CD@iD\dfdot\let +\CD@jD\dfdot}}\def\CD@MI{}\def\CD@@E#1,{\CD@nH#1,\begingroup\ifx\@name\CD@RD +\CD@FF\aftergroup\CD@e\fi\aftergroup\CD@jC\else\expandafter\def\expandafter +\CD@RF\expandafter{\csname\@name\endcsname}\expandafter\CD@vD\CD@RF\CD@KD\ifx +\CD@RF\empty\aftergroup\CD@pC\expandafter\aftergroup\csname\CD@FB\@name +\endcsname\expandafter\aftergroup\csname\CD@FB @\@name\endcsname\else\gdef +\CD@GE{#1}\CD@gB{\string\relax\space inserted before `[\CD@GE'}\message{(I was +trying to read this as a \CD@tA\ option.)}\aftergroup\CD@H\fi\fi\endgroup}% +\def\CD@vD#1#2\CD@KD{\def\CD@RF{#2}}\def\CD@jC{\let\CD@CH\CD@N\let\CD@N\relax +\CD@CH}\def\CD@H#1],{%% ASCII close square bracket +\CD@jC\relax\def\CD@RF{#1}\ifx\CD@RF\empty\def\CD@RF{[\CD@GE]}% +%% ASCII open and close square bracket +\else\def\CD@RF{[\CD@GE,#1]}%% ASCII open and close square bracket +\fi\CD@RF}\def\CD@pC#1#2{\ifx#2\CD@qK\ifx#1\CD@qK\CD@gB{option `\@name' +undefined}\else#1\fi\else\CD@FF\expandafter#2\CD@GK\CD@PK\else\CD@QK\fi\fi +\CD@DH}\CD@tG\CD@FF\CD@QK\CD@PK\def\CD@nH#1,{\CD@FF\ifx\CD@GK\CD@qK\CD@e\else +\expandafter\CD@oH\CD@GK,#1,(,),(,)[]% +%%ASCII 5commas two pairs round, pair square +\fi\fi\CD@FF\else\CD@mH#1==,\fi}\def\CD@e{\CD@gB{option `\@name' needs (x,y) +value}\CD@PK\let\@name\empty}\def\CD@mH#1=#2=#3,{\def\@name{#1}\def\CD@GK{#2}% +\def\CD@RF{#3}\ifx\CD@RF\empty\let\CD@GK\CD@qK\fi}% +%% ASCII 2commas 2pair round, pair square on next line +\def\CD@oH#1(#2,#3)#4,(#5,#6)#7[]{\def\CD@GK{{#2}{#3}}\def\CD@RF{#1#4#5#6}% +\ifx\CD@RF\empty\def\CD@RF{#7}\ifx\CD@RF\empty\CD@e\fi\else\CD@e\fi}\def +\CD@FB{cds@}\let\CD@N\relax\def\CD@zD#1{\ifx\CD@GK\CD@qK\CD@gB{option `\@name +' needs a value}\else#1\CD@GK\relax\fi}\def\CD@BE#1#2{\ifx\CD@GK\CD@qK#1#2% +\relax\else#1\CD@GK\relax\fi}\def\cds@@showpair#1#2{\message{x=#1,y=#2}}\def +\cds@@diagonalbase#1#2{\edef\CD@ZK{#1}\edef\CD@bK{#2}}\def\CD@DI#1{\def\CD@CH +{#1}\CD@nF{@x}{cdps@#1}\ifx\CD@CH\empty\CD@f\CD@CH{cannot be used}\else\ifx +\CD@CH\relax\CD@f\CD@CH{unknown}\else\let\CD@IK\@x\fi\fi}\def\CD@f#1#2{\CD@gB +{PostScript translator `#1' #2}\CD@oK\let\cds@PS\empty\let\cds@noPS\empty}% +\def\CD@PH{}\def\CD@PJ{\CD@fA\edef\CD@PH{\noexpand\CD@KB{\@name\space ignored +within maths}}}\def\diagramstyle{\CD@cJ\let\CD@N\relax\CD@CF\CD@AE\CD@AE}\let +\diagramsstyle\diagramstyle\CD@tG\CD@sE\CD@SB\CD@RB\CD@tG\CD@qE\CD@EB\CD@DB +\CD@tG\CD@oE\CD@pA\CD@oA\CD@tG\CD@iE\CD@HA\CD@GA\CD@HA\CD@tG\CD@jE\CD@JA +\CD@IA\CD@tG\CD@kE\CD@LA\CD@KA\CD@tG\CD@EF\CD@DK\CD@CK\CD@tG\CD@rE\CD@JB +\CD@IB\CD@tG\CD@mE\CD@gA\CD@fA\CD@tG\CD@nE\CD@kA\CD@jA\CD@tG\CD@AF\CD@iG +\CD@hG\CD@RC{cds@ }{}\CD@RC{cds@}{}\CD@RC{cds@1em}{\CellSize1\CD@zC}\CD@RC{% +cds@1.5em}{\CellSize1.5\CD@zC}\CD@RC{cds@2em}{\CellSize2\CD@zC}\CD@RC{cds@2.5% +em}{\CellSize2.5\CD@zC}\CD@RC{cds@3em}{\CellSize3\CD@zC}\CD@RC{cds@3.5em}{% +\CellSize3.5\CD@zC}\CD@RC{cds@4em}{\CellSize4\CD@zC}\CD@RC{cds@4.5em}{% +\CellSize4.5\CD@zC}\CD@RC{cds@5em}{\CellSize5\CD@zC}\CD@RC{cds@6em}{\CellSize +6\CD@zC}\CD@RC{cds@7em}{\CellSize7\CD@zC}\CD@RC{cds@8em}{\CellSize8\CD@zC}% +\def\cds@abut{\MapsAbut\dimen1\z@\dimen5\z@}\def\cds@alignlabels{\CD@IA\CD@KA +}\def\cds@amstex{\ifincommdiag\CD@O\else\def\CD{\diagram[amstex]}% +%%ascii square brackets [] +\fi\CD@T\catcode\lq\@\active}\def\cds@b{\let\CD@dB\CD@bB}\def\cds@balance{% +\let\CD@hA\CD@AA}\let\cds@bottom\cds@b\def\cds@center{\cds@vcentre +\cds@nobalance}\let\cds@centre\cds@center\def\cds@centerdisplay{\CD@HA\CD@PJ +\cds@balance}\let\cds@centredisplay\cds@centerdisplay\def\cds@crab{\CD@BE +\CD@DC{.5\PileSpacing}}\CD@RC{cds@crab-}{\CD@DC-.5\PileSpacing}\CD@RC{% +cds@crab+}{\CD@DC.5\PileSpacing}\CD@RC{cds@crab++}{\CD@DC1.5\PileSpacing}% +\CD@RC{cds@crab--}{\CD@DC-1.5\PileSpacing}\def\cds@defaultsize{\CD@BE{\let +\CD@QC}{3em}\CD@NJ}\def\cds@displayoneliner{\CD@DB}\let\cds@dotted\CD@sC\def +\cds@dpi{\CD@RJ{1truein}}\def\cds@dpm{\CD@RJ{100truecm}}\let\CD@XA\CD@qK\def +\cds@eqno{\let\CD@XA\CD@GK\let\CD@EJ\empty}\def\cds@fixed{\CD@qA}\CD@tG\CD@fE +\CD@J\CD@I\def\cds@flushleft{\CD@I\CD@GA\CD@PJ\cds@nobalance\CD@BE\CD@nA +\CD@nA}\def\cds@gap{\CD@AJ\setbox3=\null\ht3=\CD@tI\dp3=\CD@sI\CD@BE{\wd3=}% +\MapShortFall} \def\cds@grid{\ifx\CD@GK\CD@qK\let\h@grid\relax\let\v@grid +\relax\else\CD@nF{h@grid}{cdgh@\CD@GK}\CD@nF{v@grid}{cdgv@\CD@GK}\ifx\h@grid +\relax\CD@gB{unknown grid `\CD@GK'}\else\CD@WB\fi\fi}\let\h@grid\relax\let +\v@grid\relax\def\cds@gridx{\ifx\CD@GK\CD@qK\else\cds@grid\fi\let\CD@CH +\h@grid\let\h@grid\v@grid\let\v@grid\CD@CH}\def\cds@h{\CD@zD +\DiagramCellHeight}\def\cds@hcenter{\let\CD@hA\CD@aA}\let\cds@hcentre +\cds@hcenter\def\cds@heads{\CD@BE{\let\CD@sJ}\CD@sJ\CD@@J\CD@vE\else\ifx +\CD@sJ\CD@eF\else\CD@MC\fi\fi}\let\cds@height\cds@h\let\cds@hmiddle +\cds@balance\def\cds@htriangleheight{\CD@BE\DiagramCellHeight +\DiagramCellHeight\DiagramCellWidth1.73205\DiagramCellHeight}\def +\cds@htrianglewidth{\CD@BE\DiagramCellWidth\DiagramCellWidth +\DiagramCellHeight.57735\DiagramCellWidth}\CD@tG\CD@zE\CD@eE\CD@dE\CD@eE\def +\cds@hug{\CD@eE} \def\cds@inline{\CD@gA\let\CD@PH\empty}\def +\cds@inlineoneliner{\CD@EB}\CD@RC{cds@l>}{\CD@zD{\let\CD@RG}\dimen2=\CD@RG}% +\def\cds@labelstyle{\CD@zD{\let\labelstyle}}\def\cds@landscape{\CD@kA}\def +\cds@large{\CellSize5\CD@zC}\let\CD@EJ\empty\def\CD@FJ{\refstepcounter{% +equation}\def\CD@XA{\hbox{\@eqnnum}}}\def\cds@LaTeXeqno{\let\CD@EJ\CD@FJ}\def +\cds@lefteqno{\CD@pA}\def\cds@leftflush{\cds@flushleft\CD@J}\def +\cds@leftshortfall{\CD@zD{\dimen1 }}\def\cds@lowershortfall{% +\ifPositiveGradient\cds@leftshortfall\else\cds@rightshortfall\fi}\def +\cds@loose{\CD@VB}\def\cds@midhshaft{\CD@JA}\def\cds@midshaft{\CD@JA}\def +\cds@midvshaft{\CD@LA}\def\cds@moreoptions{\CD@@A}\let\cds@nobalance +\cds@hcenter\def\cds@nohcheck{\CD@HH}\def\cds@nohug{\CD@dE} \def +\cds@nooptions{\def\CD@aC{\CD@WD}}\let\cds@noorigin\cds@nobalance\def +\cds@nopixel{\CD@@I4\CD@XH\CD@cJ}\def\cds@UO{\CD@oK\global\let\CD@n\empty}% +\def\cds@UglyObsolete{\cds@UO\let\cds@PS\empty\let\cds@noPS\empty}\ifnum\year +<2008 \let\cds@noPostScript\UglyObsolete\let\cds@noPS\cds@UO\else\def +\cds@noPS{\CD@gB{option `noPS' no longer recognised}}\def\cds@noPS{\CD@gB{% +option `noPostScript' no longer recognised}}\fi\def\cds@notextflow{\CD@RB}% +\def\cds@noPS{\CD@oK\global\let\CD@n\empty}\def\cds@noTPIC{\CD@CK}\def +\cds@objectstyle{\CD@zD{\let\objectstyle}}\def\cds@origin{\let\CD@hA\CD@iB}% +\def\cds@p{\CD@zD\PileSpacing}\let\cds@pilespacing\cds@p\def\cds@pixelsize{% +\CD@zD\CD@@I\CD@gI}\def\cds@portrait{\CD@jA}\def\cds@PostScript{\CD@nK\global +\let\CD@n\empty\CD@BE\CD@DI\empty}\def\cds@PS{\CD@nK\global\let\CD@n\empty}% +\CD@GF\CD@n{\typeout{\CD@tA: try the PostScript option for better results}}% +\def\cds@repositionpullbacks{\let\make@pbk\CD@fH\let\CD@qH\CD@pH}\def +\cds@righteqno{\CD@oA}\def\cds@rightshortfall{\CD@zD{\dimen5 }}\def +\cds@ruleaxis{\CD@zD{\let\axisheight}}\def\cds@cmex{\let\CD@GG\CD@sB\let +\CD@QJ\CD@CJ}\def\cds@s{\cds@height\DiagramCellWidth\DiagramCellHeight}\def +\cds@scriptlabels{\let\labelstyle\scriptstyle}\def\cds@shortfall{\CD@zD +\MapShortFall\dimen1\MapShortFall\dimen5\MapShortFall}\def\cds@showfirstpass{% +\CD@BE{\let\CD@nD}\z@}\def\cds@silent{\def\CD@KB##1{}\def\CD@gB##1{}}\let +\cds@size\cds@s\def\cds@small{\CellSize2\CD@zC}\def\cds@snake{\CD@BE\CD@eJ\z@ +}\def\cds@t{\let\CD@dB\CD@fB}\def\cds@textflow{\CD@SB\CD@PJ}\def\cds@thick{% +\let\CD@rF\tenlnw\CD@LF\CD@NC\CD@BE\MapBreadth{2\CD@LF}\CD@@J}\def\cds@thin{% +\let\CD@rF\tenln\CD@BE\MapBreadth{\CD@NC}\CD@@J}\def\cds@tight{\CD@WB}\let +\cds@top\cds@t\def\cds@TPIC{\CD@DK}\def\cds@uppershortfall{% +\ifPositiveGradient\cds@rightshortfall\else\cds@leftshortfall\fi}\def +\cds@vcenter{\let\CD@dB\CD@cB}\let\cds@vcentre\cds@vcenter\def +\cds@vtriangleheight{\CD@BE\DiagramCellHeight\DiagramCellHeight +\DiagramCellWidth.577035\DiagramCellHeight}\def\cds@vtrianglewidth{\CD@BE +\DiagramCellWidth\DiagramCellWidth\DiagramCellHeight1.73205\DiagramCellWidth}% +\def\cds@vmiddle{\let\CD@dB\CD@eB}\def\cds@w{\CD@zD\DiagramCellWidth}\let +\cds@width\cds@w\def\diagram{\relax\protect\CD@bC}\def\enddiagram{\protect +\CD@SG}\def\CD@bC{\CD@g\CD@uI\incommdiagtrue\edef\CD@wI{\the\CD@NB}\global +\CD@NB\z@\boxmaxdepth\maxdimen\everycr{}\everymath{}\everyhbox{}\ifx +\pdfoutput\CD@qK\else\ifx\pdfoutput\relax\else\ifnum\pdfoutput>\z@\CD@pK\fi +\fi\fi\CD@aC}\def\CD@aC{\CD@y\let\CD@N\CD@ZC\CD@CF\CD@AE\CD@WD}\def\CD@ZC{% +\CD@gE\expandafter\CD@aC\else\expandafter\CD@WD\fi}\def\CD@WD{\let\CD@EH +\relax\CD@nE\CD@vE\else\CD@hK\else\CD@KB{landscape ignored without PostScript% +}\CD@jA\fi\fi\fi\CD@EJ\setbox2=\vbox\bgroup\CD@JF\CD@VD}\def\CD@cH{\CD@nE +\CD@fB\else\CD@dB\fi\CD@hA\nointerlineskip\setbox0=\null\ht0-\CD@pI\dp0\CD@pI +\wd0\CD@kI\box0 \global\CD@QA\CD@kF\global\CD@yA\CD@XB\ifx\CD@NK\CD@qK\global +\CD@RA\CD@kF\else\global\CD@RA\CD@NK\fi\egroup\CD@zF\CD@nE\setbox2=\hbox to% +\dp2{\vrule height\wd2 depth\CD@QA width\z@\global\CD@QA\ht2\ht2\z@\dp2\z@\wd +2\z@\CD@hK\pdfliteral{q 0 1 -1 0 0 0 cm}\else\global\CD@iG\CD@IK{0 1 bturn}% +\fi\box2\CD@gK\hss}\CD@DB\fi\ifnum\CD@yA=1 \else\CD@DB\fi\global\@ignorefalse +\CD@mE\leavevmode\fi\ifvmode\CD@TA\else\ifmmode\CD@PH\CD@GI\else\CD@qE\CD@gA +\fi\ifinner\CD@gA\fi\CD@mE\CD@GI\else\CD@sE\CD@QB\else\CD@TA\fi\fi\fi\fi +\CD@dD}\def\CD@dD{\global\CD@NB\CD@wI\relax\CD@xE\global\CD@ID\else +\aftergroup\CD@mC\fi\if@ignore\aftergroup\ignorespaces\fi\CD@wC\ignorespaces}% +\def\CD@fB{\advance\CD@pI\dimen1\relax}\def\CD@eB{\advance\CD@pI.5\dimen1% +\relax}\def\CD@bB{}\def\CD@cB{\CD@fB\advance\CD@pI\CD@YB\divide\CD@pI2 +\advance\CD@pI-\axisheight\relax}\def\CD@aA{}\def\CD@iB{\CD@kF\z@}\def\CD@AA{% +\ifdim\dimen2>\CD@kF\CD@kF\dimen2 \else\dimen2\CD@kF\CD@kI\dimen0 \advance +\CD@kI\dimen2 \fi}\def\CD@QB{\skip0\z@\relax\loop\skip1\lastskip\ifdim\skip1>% +\z@\unskip\advance\skip0\skip1 \repeat\vadjust{\prevdepth\dp\strutbox\penalty +\predisplaypenalty\vskip\abovedisplayskip\CD@UA\penalty\postdisplaypenalty +\vskip\belowdisplayskip}\ifdim\skip0=\z@\else\hskip\skip0 \global\@ignoretrue +\fi}\def\CD@TA{\CD@LG\kern-\displayindent\CD@UA\CD@LG\global\@ignoretrue}\def +\CD@UA{\hbox to\hsize{\CD@fE\ifdim\CD@RA=\z@\else\advance\CD@QA-\CD@RA\setbox +2=\hbox{\kern\CD@RA\box2}\fi\fi\setbox1=\hbox{\ifx\CD@XA\CD@qK\else\CD@k +\CD@XA\CD@ND\fi}\CD@oE\CD@iE\else\advance\CD@QA\wd1 \fi\wd1\z@\box1 \fi\dimen +0\wd2 \advance\dimen0\wd1 \advance\dimen0-\hsize\ifdim\dimen0>-\CD@nA\CD@HA +\fi\advance\dimen0\CD@QA\ifdim\dimen0>\z@\CD@KB{wider than the page by \the +\dimen0 }\CD@HA\fi\CD@iE\hss\else\CD@V\CD@QA\CD@nA\fi\CD@GI\hss\kern-\wd1\box +1 }}\def\CD@GI{\CD@AF\CD@@F\else\CD@SC\global\CD@hG\fi\fi\kern\CD@QA\box2 }% +\CD@tG\CD@wE\CD@YC\CD@XC\def\CD@JF{\CD@cJ\ifdim\DiagramCellHeight=-\maxdimen +\DiagramCellHeight\CD@QC\fi\ifdim\DiagramCellWidth=-\maxdimen +\DiagramCellWidth\CD@QC\fi\global\CD@XC\CD@IF\let\CD@FE\empty\let\CD@z\CD@Q +\let\overprint\CD@eH\let\CD@s\CD@rJ\let\enddiagram\CD@ED\let\\\CD@cC\let\par +\CD@jH\let\CD@MD\empty\let\switch@arg\CD@PB\let\shift\CD@iA\baselineskip +\DiagramCellHeight\lineskip\z@\lineskiplimit\z@\mathsurround\z@\tabskip\z@ +\CD@OB}\def\CD@VD{\penalty-123 \begingroup\CD@jA\aftergroup\CD@K\halign +\bgroup\global\advance\CD@NB1 \vadjust{\penalty1}\global\CD@FA\z@\CD@OB\CD@j#% +#\CD@DD\CD@Q\CD@Q\CD@OI\CD@j##\CD@DD\cr}\def\CD@ED{\CD@MD\CD@GD\crcr\egroup +\global\CD@JD\endgroup}\def\CD@j{\global\advance\CD@FA1 \futurelet\CD@EH\CD@i +}\def\CD@i{\ifx\CD@EH\CD@DD\CD@tJ\hskip1sp plus 1fil \relax\let\CD@DD\relax +\CD@vI\else\hfil\CD@k\objectstyle\let\CD@FE\CD@d\fi}\def\CD@DD{\CD@MD\relax +\CD@yI\CD@vI\global\CD@QA\CD@iA\penalty-9993 \CD@ND\hfil\null\kern-2\CD@QA +\null}\def\CD@cC{\cr}\def\across#1{\span\omit\mscount=#1 \global\advance +\CD@FA\mscount\global\advance\CD@FA\m@ne\CD@sF\ifnum\mscount>2 \CD@fJ\repeat +\ignorespaces}\def\CD@fJ{\relax\span\omit\advance\mscount\m@ne}\def\CD@qJ{% +\ifincommdiag\ifx\CD@iD\@fillh\ifx\CD@jD\@fillh\ifdim\dimen3>\z@\else\ifdim +\dimen2>93\CD@@I\ifdim\dimen2>18\p@\ifdim\CD@LF>\z@\count@\CD@bJ\advance +\count@\m@ne\ifnum\count@<\z@\count@20\let\CD@aJ\CD@uJ\fi\xdef\CD@bJ{\the +\count@}\fi\fi\fi\fi\fi\fi\fi}\def\CD@cG#1{\vrule\horizhtdp width#1\dimen@ +\kern2\dimen@}\def\CD@uJ{\rlap{\dimen@\CD@@I\CD@V\dimen@{.182\p@}\CD@zH +\dimen@\advance\CD@tI\dimen@\CD@cG0\CD@cG0\CD@cG2\CD@cG6\CD@cG6\CD@cG2\CD@cG0% +\CD@cG0\CD@cG2\CD@cG6\CD@cG0\CD@cG0\CD@cG2\CD@cG2\CD@cG6\CD@cG0\CD@cG0\CD@cG2% +\CD@cG6\CD@cG2\CD@cG2\CD@cG0\CD@cG0}}\def\CD@bJ{10}\def\CD@aJ{}\def\CD@XD{% +\CD@gE\CD@TB\fi\CD@x\CD@WF\CD@HI}\def\CD@x{\CD@QJ\CD@DC\CD@MJ\ifdim\CD@DC=\z@ +\else\CD@pF\CD@DC\fi\ifvoid3 \setbox3=\null\ht3\CD@tI\dp3\CD@sI\else\CD@V{\ht +3}\CD@tI\CD@V{\dp3}\CD@sI\fi\dimen3=.5\wd3 \ifdim\dimen3=\z@\CD@tE\else\dimen +3-\CD@XH\fi\else\CD@TB\fi\CD@V{\dimen2}{\wd7}\CD@V{\dimen2}{\wd6}\CD@qJ +\advance\dimen2-2\dimen3 \dimen4.5\dimen2 \dimen2\dimen4 \advance\dimen2% +\CD@eJ\advance\dimen4-\CD@eJ\advance\dimen2-\wd1 \advance\dimen4-\wd5 \ifvoid +2 \else\CD@V{\ht3}{\ht2}\CD@V{\dp3}{\dp2}\CD@V{\dimen2}{\wd2}\fi\ifvoid4 \else +\CD@V{\ht3}{\ht4}\CD@V{\dp3}{\dp4}\CD@V{\dimen4}{\wd4}\fi\advance\skip2\dimen +2 \advance\skip4\dimen4 \CD@tE\advance\skip2\skip4 \dimen0\dimen5 \advance +\dimen0\wd5 \skip3-\skip4 \advance\skip3-\dimen0 \let\CD@jD\empty\else\skip3% +\z@\relax\dimen0\z@\fi}\def\CD@WF{\offinterlineskip\lineskip.2\CD@zC\ifvoid6 +\else\setbox3=\vbox{\hbox to2\dimen3{\hss\box6\hss}\box3}\fi\ifvoid7 \else +\setbox3=\vtop{\box3 \hbox to2\dimen3{\hss\box7\hss}}\fi}\def\CD@HI{\kern +\dimen1 \box1 \CD@aJ\CD@iD\hskip\skip2 \kern\dimen0 \ifincommdiag\CD@jE +\penalty1\fi\kern\dimen3 \penalty\CD@GB\hskip\skip3 \null\kern-\dimen3 \else +\hskip\skip3 \fi\box3 \CD@jD\hskip\skip4 \box5 \kern\dimen5}\def\CD@MF{\ifnum +\CD@LH>\CD@TC\CD@V{\dimen1}\objectheight\CD@V{\dimen5}\objectheight\else\CD@V +{\dimen1}\objectwidth\CD@V{\dimen5}\objectwidth\fi}\def\CD@Y{\begingroup +\ifdim\dimen7=\z@\kern\dimen8 \else\ifdim\dimen6=\z@\kern\dimen9 \else\dimen5% +\dimen6 \dimen6\dimen9 \CD@KJ\dimen4\dimen2 \CD@dG{\dimen4}\dimen6\dimen5 +\dimen7\dimen8 \CD@KJ\CD@iC{\dimen2}\ifdim\dimen2<\dimen4 \kern\dimen2 \else +\kern\dimen4 \fi\fi\fi\endgroup}\def\CD@jJ{\CD@JI\setbox\z@\hbox{\lower +\axisheight\hbox to\dimen2{\CD@DF\ifPositiveGradient\dimen8\ht\CD@MH\dimen9% +\CD@mI\else\dimen8\dp3 \dimen9\dimen1 \fi\else\dimen8 \ifPositiveGradient +\objectheight\else\z@\fi\dimen9\objectwidth\fi\advance\dimen8 +\ifPositiveGradient-\fi\axisheight\CD@Y\unhbox\z@\CD@DF\ifPositiveGradient +\dimen8\dp3 \dimen9\dimen0 \else\dimen8\ht\CD@MH\dimen9\CD@mF\fi\else\dimen8 +\ifPositiveGradient\z@\else\objectheight\fi\dimen9\objectwidth\fi\advance +\dimen8 \ifPositiveGradient\else-\fi\axisheight\CD@Y}}}\def\CD@bD{\dimen6 +\CD@aK\DiagramCellHeight\dimen7 \CD@WK\DiagramCellWidth\CD@jJ +\ifPositiveGradient\advance\dimen7-\CD@ZK\DiagramCellWidth\else\dimen7 \CD@ZK +\DiagramCellWidth\dimen6\z@\fi\advance\dimen6-\CD@bK\DiagramCellHeight\CD@mK +\setbox0=\rlap{\kern-\dimen7 \lower\dimen6\box\z@}\ht0\z@\dp0\z@\raise +\axisheight\box0 }\def\CD@mK{\setbox0\hbox{\ht\z@\z@\dp\z@\z@\wd\z@\z@\CD@hK +\expandafter\pdfliteral{q \CD@eK\space\CD@lK\space\CD@kK\space\CD@eK\space0 0 +cm}\else\global\CD@iG\CD@eD{\the\CD@TC\space\ifPositiveGradient\else-\fi\the +\CD@LH\space bturn}\fi\box\z@\CD@gK}}\def\CD@vB{\advance\CD@hF-\CD@mI\CD@wJ +\CD@hF\advance\CD@wJ\CD@hI\ifvoid\CD@sH\ifdim\CD@wJ<.1em\ifnum\CD@gD=\@m\else +\CD@aG h\CD@wJ<.1em:objects overprint:\CD@FA\CD@gD\fi\fi\else\ifhbox\CD@sH +\CD@SK\else\CD@TK\fi\advance\CD@wJ\CD@mI\CD@bH{-\CD@mI}{\box\CD@sH}{\CD@wJ}% +\z@\fi\CD@hF-\CD@mF\CD@gD\CD@FA\CD@hI\z@}\def\CD@SK{\setbox\CD@sH=\hbox{% +\unhbox\CD@sH\unskip\unpenalty}\setbox\CD@tH=\hbox{\unhbox\CD@tH\unskip +\unpenalty}\setbox\CD@sH=\hbox to\CD@wJ{\CD@OA\wd\CD@sH\unhbox\CD@sH\CD@PA +\lastkern\unkern\ifdim\CD@PA=\z@\CD@UB\advance\CD@OA-\wd\CD@tH\else\CD@TB\fi +\ifnum\lastpenalty=\z@\else\CD@JA\unpenalty\fi\kern\CD@PA\ifdim\CD@hF<\CD@OA +\CD@JA\fi\ifdim\CD@hI<\wd\CD@tH\CD@JA\fi\CD@jE\CD@hI\CD@wJ\advance\CD@hI-% +\CD@OA\advance\CD@hI\wd\CD@tH\ifdim\CD@hI<2\wd\CD@tH\CD@aG h\CD@hI<2\wd\CD@tH +:arrow too short:\CD@FA\CD@gD\fi\divide\CD@hI\tw@\CD@hF\CD@wJ\advance\CD@hF-% +\CD@hI\fi\CD@tE\kern-\CD@hI\fi\hbox to\CD@hI{\unhbox\CD@tH}\CD@HG}}\CD@tG +\ifinpile\inpiletrue\inpilefalse\inpilefalse\def\pile{\protect\CD@UJ\protect +\CD@uH}\def\CD@uH#1{\CD@l#1\CD@QD}\def\CD@UJ{\CD@nB{pile}\setbox0=\vtop +\bgroup\aftergroup\CD@lD\inpiletrue\let\CD@FE\empty\let\pile\CD@KF\let\CD@QD +\CD@PD\let\CD@GD\CD@FD\CD@yH\baselineskip.5\PileSpacing\lineskip.1\CD@zC +\relax\lineskiplimit\lineskip\mathsurround\z@\tabskip\z@\let\\\CD@wH}\def +\CD@l{\CD@DE\CD@YF\empty\halign\bgroup\hfil\CD@k\let\CD@FE\CD@d\let\\\CD@vH##% +\CD@MD\CD@ND\hfil\CD@Q\CD@R##\cr}\CD@rG\CD@NE{pile only allows one column.}% +\CD@rG\CD@UE{you left it out!}\def\CD@R{\CD@QD\CD@Q\relax\CD@YA{missing \CD@yC +\space inserted after \string\pile}\CD@NE}\def\CD@PD{\CD@MD\crcr\egroup +\egroup}\def\CD@GD{\CD@MD}\def\CD@FD{\CD@MD\relax\CD@QD\CD@YA{missing \CD@yC +\space inserted between \string\pile\space and \CD@HD}\CD@UE}\def\CD@QD{% +\CD@MD}\def\CD@lD{\vbox{\dimen1\dp0 \unvbox0 \setbox0=\lastbox\advance\dimen1% +\dp0 \nointerlineskip\box0 \nointerlineskip\setbox0=\null\dp0.5\dimen1\ht0-% +\dp0 \box0}\ifincommdiag\CD@tJ\penalty-9998 \fi\xdef\CD@YF{pile}}\def\CD@vH{% +\cr}\def\CD@wH{\noalign{\skip@\prevdepth\advance\skip@-\baselineskip +\prevdepth\skip@}}\def\CD@KF#1{#1}\def\CD@TK{\setbox\CD@sH=\vbox{\unvbox +\CD@sH\setbox1=\lastbox\setbox0=\box\voidb@x\CD@tF\setbox\CD@sH=\lastbox +\ifhbox\CD@sH\CD@rC\repeat\unvbox0 \global\CD@QA\CD@ZE}\CD@ZE\CD@QA}\def +\CD@rC{\CD@jE\setbox\CD@sH=\hbox{\unhbox\CD@sH\unskip\setbox\CD@sH=\lastbox +\unskip\unhbox\CD@sH}\ifdim\CD@wJ<\wd\CD@sH\CD@aG h\CD@wJ<\wd\CD@sH:arrow in +pile too short:\CD@FA\CD@gD\else\setbox\CD@sH=\hbox to\CD@wJ{\unhbox\CD@sH}% +\fi\else\CD@gJ\fi\setbox0=\vbox{\box\CD@sH\nointerlineskip\ifvoid0 \CD@tJ\box +1 \else\vskip\skip0 \unvbox0 \fi}\skip0=\lastskip\unskip}\def\CD@gJ{\penalty7 +\noindent\unhbox\CD@sH\unskip\setbox\CD@sH=\lastbox\unskip\unhbox\CD@sH +\endgraf\setbox\CD@tH=\lastbox\unskip\setbox\CD@tH=\hbox{\CD@JG\unhbox\CD@tH +\unskip\unskip\unpenalty}\ifcase\prevgraf\cd@shouldnt P\or\ifdim\CD@wJ<\wd +\CD@tH\CD@aG h\CD@wJ<\wd\CD@sH:object in pile too wide:\CD@FA\CD@gD\setbox +\CD@sH=\hbox to\CD@wJ{\hss\unhbox\CD@tH\hss}\else\setbox\CD@sH=\hbox to\CD@wJ +{\hss\kern\CD@hF\unhbox\CD@tH\kern\CD@hI\hss}\fi\or\setbox\CD@sH=\lastbox +\unskip\CD@SK\else\cd@shouldnt Q\fi\unskip\unpenalty}\def\CD@cD{\CD@MJ\ifvoid +3 \setbox3=\null\ht3\axisheight\dp3-\ht3 \dimen3.5\CD@LF\else\dimen4\dp3 +\dimen3.5\wd3 \setbox3=\CD@GG{\box3}\dp3\dimen4 \ifdim\ht3=-\dp3 \else\CD@TB +\fi\fi\dimen0\dimen3 \advance\dimen0-.5\CD@LF\setbox0\null\ht0\ht3\dp0\dp3\wd +0\wd3 \ifvoid6\else\setbox6\hbox{\unhbox6\kern\dimen0\kern2pt}\dimen0\wd6 \fi +\ifvoid7\else\setbox7\hbox{\kern2pt\kern\dimen3\unhbox7}\dimen3\wd7 \fi +\setbox3\hbox{\ifvoid6\else\kern-\dimen0\unhbox6\fi\unhbox3 \ifvoid7\else +\unhbox7\kern-\dimen3\fi}\ht3\ht0\dp3\dp0\wd3\wd0 \CD@tE\dimen4=\ht\CD@MH +\advance\dimen4\dp5 \advance\dimen4\dimen1 \let\CD@jD\empty\else\dimen4\ht3 +\fi\setbox0\null\ht0\dimen4 \offinterlineskip\setbox8=\vbox spread2ex{\kern +\dimen5 \box1 \CD@iD\vfill\CD@tE\else\kern\CD@eJ\fi\box0}\ht8=\z@\setbox9=% +\vtop spread2ex{\kern-\ht3 \kern-\CD@eJ\box3 \CD@jD\vfill\box5 \kern\dimen1}% +\dp9=\z@\hskip\dimen0plus.0001fil \box9 \kern-\CD@LF\box8 \CD@kE\penalty2 \fi +\CD@tE\penalty1 \fi\kern\PileSpacing\kern-\PileSpacing\kern-.5\CD@LF\penalty +\CD@GB\null\kern\dimen3}\def\CD@cI{\ifhbox\CD@VA\CD@KB{clashing verticals}\ht +\CD@MH.5\dp\CD@VA\dp\CD@MH-\ht5 \CD@yB\ht\CD@MH\z@\dp\CD@MH\z@\fi\dimen1\dp +\CD@VA\CD@xA\prevgraf\unvbox\CD@VA\CD@wA\lastpenalty\unpenalty\setbox\CD@VA=% +\null\setbox\CD@lI=\hbox{\CD@JG\unhbox\CD@lI\unskip\unpenalty\dimen0\lastkern +\unkern\unkern\unkern\kern\dimen0 \CD@HG}\setbox\CD@lF=\hbox{\unhbox\CD@lF +\dimen0\lastkern\unkern\unkern\global\CD@QA\lastkern\unkern\kern\dimen0 }% +\CD@tF\ifnum\CD@xA>4 \CD@zI\repeat\unskip\unskip\advance\CD@mF.5\wd\CD@VA +\advance\CD@mF\wd\CD@lF\advance\CD@mI.5\wd\CD@VA\advance\CD@mI\wd\CD@lI\ifnum +\CD@FA=\CD@lA\CD@OA.5\wd\CD@VA\edef\CD@NK{\the\CD@OA}\fi\setbox\CD@VA=\hbox{% +\kern-\CD@mF\box\CD@lF\unhbox\CD@VA\box\CD@lI\kern-\CD@mI\penalty\CD@wA +\penalty\CD@NB}\ht\CD@VA\dimen1 \dp\CD@VA\z@\wd\CD@VA\CD@tB\CD@vB}\def\CD@zI{% +\ifdim\wd\CD@lF<\CD@QA\setbox\CD@lF=\hbox to\CD@QA{\CD@JG\unhbox\CD@lF}\fi +\advance\CD@xA\m@ne\setbox\CD@VA=\hbox{\box\CD@lF\unhbox\CD@VA}\unskip\setbox +\CD@lF=\lastbox\setbox\CD@lF=\hbox{\unhbox\CD@lF\unskip\unpenalty\dimen0% +\lastkern\unkern\unkern\global\CD@QA\lastkern\unkern\kern\dimen0 }}\def\CD@yB +{\dimen1\dp\CD@VA\ifhbox\CD@VA\CD@xB\else\CD@zB\fi\setbox\CD@VA=\vbox{% +\penalty\CD@NB}\dp\CD@VA-\dp\CD@MH\wd\CD@VA\CD@tB}\def\CD@zB{\unvbox\CD@VA +\CD@wA\lastpenalty\unpenalty\ifdim\dimen1<\ht\CD@MH\CD@aG v\dimen1<\ht\CD@MH:% +rows overprint:\CD@NB\CD@wA\fi}\def\CD@xB{\dimen0=\ht\CD@VA\setbox\CD@VA=% +\hbox\bgroup\advance\dimen1-\ht\CD@MH\unhbox\CD@VA\CD@xA\lastpenalty +\unpenalty\CD@wA\lastpenalty\unpenalty\global\CD@RA-\lastkern\unkern\setbox0=% +\lastbox\CD@tF\setbox\CD@VA=\hbox{\box0\unhbox\CD@VA}\setbox0=\lastbox\ifhbox +0 \CD@kJ\repeat\global\CD@SA-\lastkern\unkern\global\CD@QA\CD@JK\unhbox\CD@VA +\egroup\CD@JK\CD@QA\CD@bH{\CD@SA}{\box\CD@VA}{\CD@RA}{\dimen1}}\def\CD@kJ{% +\setbox0=\hbox to\wd0\bgroup\unhbox0 \unskip\unpenalty\dimen7\lastkern\unkern +\ifnum\lastpenalty=1 \unpenalty\CD@UB\else\CD@TB\fi\ifnum\lastpenalty=2 +\unpenalty\dimen2.5\dimen0\advance\dimen2-.5\dimen1\advance\dimen2-% +\axisheight\else\dimen2\z@\fi\setbox0=\lastbox\dimen6\lastkern\unkern\setbox1% +=\lastbox\setbox0=\vbox{\unvbox0 \CD@tE\kern-\dimen1 \else\ifdim\dimen2=\z@ +\else\kern\dimen2 \fi\fi}\ifdim\dimen0<\ht0 \CD@aG v\dimen0<\ht0:upper part of +vertical too short:{\CD@tE\CD@NB\else\CD@wA\fi}\CD@xA\else\setbox0=\vbox to% +\dimen0{\unvbox0}\fi\setbox1=\vtop{\unvbox1}\ifdim\dimen1<\dp1 \CD@aG v\dimen +1<\dp1:lower part of vertical too short:\CD@NB\CD@wA\else\setbox1=\vtop to% +\dimen1{\ifdim\dimen2=\z@\else\kern-\dimen2 \fi\unvbox1 }\fi\box1 \kern\dimen +6 \box0 \kern\dimen7 \CD@HG\global\CD@QA\CD@JK\egroup\CD@JK\CD@QA\relax}% +\countdef\CD@u=14 \newcount\CD@CA\newcount\CD@XB\newcount\CD@NB\let\CD@LB +\insc@unt\newcount\CD@FA\newcount\CD@lA\let\CD@mA\CD@XB\newcount\CD@MB\CD@tG +\CD@DF\CD@bI\CD@aI\CD@aI\def\CD@nD{-1}\def\CD@K{\ifnum\CD@nD<\z@\else +\begingroup\scrollmode\showboxdepth\CD@nD\showboxbreadth\maxdimen\showlists +\endgroup\fi\CD@bI\CD@zF\CD@CA=\CD@u\advance\CD@CA1 \CD@XB=\CD@CA\ifnum\CD@NB +=1 \CD@JA\fi\advance\CD@XB\CD@NB\dimen1\z@\skip0\z@\count@=\insc@unt\advance +\count@\CD@u\divide\count@2 \ifnum\CD@XB>\count@\CD@KB{The diagram has too +many rows! It can't be reformatted.}\else\CD@NG\CD@WI\fi\CD@cH}\def\CD@NG{% +\CD@NB\CD@CA\CD@uF\ifnum\CD@NB<\CD@XB\setbox\CD@NB\box\voidb@x\advance\CD@NB1% +\relax\repeat\CD@NB\CD@CA\skip\z@\z@\CD@uF\CD@GB\lastpenalty\unpenalty\ifnum +\CD@GB>\z@\CD@KE\repeat\ifnum\CD@GB=-123 \CD@tJ\unpenalty\else\cd@shouldnt D% +\fi\ifx\v@grid\relax\else\CD@NB\CD@XB\advance\CD@NB\m@ne\expandafter\CD@VJ +\v@grid\fi\CD@MB\CD@mA\CD@tB\z@\CD@XG\ifx\h@grid\relax\else\expandafter\CD@LJ +\h@grid\fi\count@\CD@XB\advance\count@\m@ne\CD@YB\ht\count@}\def\CD@KE{% +\ifcase\CD@GB\or\CD@MG\else\CD@uA-\lastpenalty\unpenalty\CD@vA\lastpenalty +\unpenalty\setbox0=\lastbox\CD@WG\fi\CD@wD}\def\CD@wD{\skip1\lastskip\unskip +\advance\skip0\skip1 \ifdim\skip1=\z@\else\expandafter\CD@wD\fi}\def\CD@MG{% +\setbox0=\lastbox\CD@pI\dp0 \advance\CD@pI\skip\z@\skip\z@\z@\advance\CD@NF +\CD@pI\CD@uE\ifnum\CD@NB>\CD@CA\CD@NF\DiagramCellHeight\CD@pI\CD@NF\advance +\CD@pI-\CD@qI\fi\fi\CD@qI\ht0 \CD@NF\CD@qI\setbox\CD@NB\hbox{\unhbox\CD@NB +\unhbox0}\dp\CD@NB\CD@pI\ht\CD@NB\CD@qI\advance\CD@NB1 }\def\CD@WG{\ifnum +\CD@uA<\z@\advance\CD@uA\CD@XB\ifnum\CD@uA<\CD@CA\CD@UG\else\CD@OA\dp\CD@uA +\CD@PA\ht\CD@uA\setbox\CD@uA\hbox{\box\z@\penalty\CD@vA\penalty\CD@GB\unhbox +\CD@uA}\dp\CD@uA\CD@OA\ht\CD@uA\CD@PA\fi\else\CD@UG\fi}\def\CD@UG{\CD@KB{% +diagonal goes outside diagram (lost)}}\def\CD@fI{\advance\CD@uA\CD@XB\ifnum +\CD@uA<\CD@CA\CD@UG\else\ifnum\CD@uA=\CD@NB\CD@VG\else\ifnum\CD@uA>\CD@NB +\cd@shouldnt M\else\CD@OA\dp\CD@uA\CD@PA\ht\CD@uA\setbox\CD@uA\hbox{\box\z@ +\penalty\CD@vA\penalty\CD@GB\unhbox\CD@uA}\dp\CD@uA\CD@OA\ht\CD@uA\CD@PA\fi +\fi\fi}\def\CD@WI{\CD@t\CD@AJ\setbox\CD@PC=\hbox{\CD@k A\@super f\CD@lJ f% +\CD@ND}\CD@ZE\z@\CD@JK\z@\CD@kI\z@\CD@kF\z@\CD@NB=\CD@XB\CD@NF\z@\CD@uB\z@ +\CD@uF\ifnum\CD@NB>\CD@CA\advance\CD@NB\m@ne\CD@qI\ht\CD@NB\CD@pI\dp\CD@NB +\advance\CD@NF\CD@qI\CD@rI\advance\CD@uB\CD@NF\CD@KC\CD@ZI\CD@w\ht\CD@NB +\CD@qI\dp\CD@NB\CD@pI\nointerlineskip\box\CD@NB\CD@NF\CD@pI\setbox\CD@NB\null +\ht\CD@NB\CD@uB\repeat\CD@wB\nointerlineskip\box\CD@NB\CD@gG\CD@ZE +\DiagramCellWidth{width}\CD@gG\CD@JK\DiagramCellHeight{height}\CD@VA\CD@LB +\advance\CD@VA-\CD@lA\advance\CD@VA\m@ne\advance\CD@VA\CD@mA\dimen0\wd\CD@VA +\CD@tI\axisheight\dimen1\CD@uB\advance\dimen1-\CD@YB\dimen2\CD@kI\advance +\dimen2-\dimen0 \advance\CD@XB-\CD@CA\advance\CD@LB-\CD@lA}\count@\year +\multiply\count@12 \advance\count@\month\ifnum\count@>24110 \loop\iftrue +\message{gone February 2009!}\repeat\fi\def\CD@wB{\CD@qI-\CD@NF\CD@pI\CD@NF +\setbox\CD@MH=\null\dp\CD@MH\CD@NF\ht\CD@MH-\CD@NF\CD@mF\z@\CD@mI\z@\CD@lA +\CD@LB\advance\CD@lA-\CD@MB\advance\CD@lA\CD@mA\CD@FA\CD@LB\CD@VA\CD@MB\CD@sF +\ifnum\CD@FA>\CD@lA\advance\CD@FA\m@ne\advance\CD@VA\m@ne\CD@tB\wd\CD@VA +\setbox\CD@FA=\box\voidb@x\CD@yB\repeat\CD@w\ht\CD@NB\CD@qI\dp\CD@NB\CD@pI}% +\def\CD@gG#1#2#3{\ifdim#1>.01\CD@zC\CD@PA#2\relax\advance\CD@PA#1\relax +\advance\CD@PA.99\CD@zC\count@\CD@PA\divide\count@\CD@zC\CD@KB{increase cell #% +3 to \the\count@ em}\fi}\def\CD@rI{\CD@FA=\CD@LB\penalty4 \noindent\unhbox +\CD@NB\CD@sF\unskip\setbox0=\lastbox\ifhbox0 \advance\CD@FA\m@ne\setbox\CD@FA +\hbox to\wd0{\null\penalty-9990\null\unhbox0}\repeat\CD@lA\CD@FA\advance +\CD@FA\CD@MB\advance\CD@FA-\CD@mA\ifnum\CD@FA<\CD@LB\count@\CD@FA\advance +\count@\m@ne\dimen0=\wd\count@\count@\CD@MB\advance\count@\m@ne\CD@tB\wd +\count@\CD@sF\ifnum\CD@FA<\CD@LB\CD@DJ\CD@XG\dimen0\wd\CD@FA\advance\CD@FA1 +\repeat\fi\CD@sF\CD@GB\lastpenalty\unpenalty\ifnum\CD@GB>\z@\CD@vA +\lastpenalty\unpenalty\CD@VG\repeat\endgraf\unskip\ifnum\lastpenalty=4 +\unpenalty\else\cd@shouldnt S\fi}\def\CD@VG{\advance\CD@vA\CD@lA\advance +\CD@vA\m@ne\setbox0=\lastbox\ifnum\CD@vA<\CD@LB\setbox\CD@vA\hbox{\box0% +\penalty\CD@GB\unhbox\CD@vA}\else\CD@UG\fi}\def\CD@bG{}\CD@tG\CD@uE\CD@WB +\CD@VB\def\CD@DJ{\advance\dimen0\wd\CD@FA\divide\dimen0\tw@\CD@uE\dimen0% +\DiagramCellWidth\else\CD@V{\dimen0}\DiagramCellWidth\CD@pJ\fi\advance\CD@tB +\dimen0 }\def\CD@XG{\setbox\CD@MB=\vbox{}\dp\CD@MB=\CD@uB\wd\CD@MB\CD@tB +\advance\CD@MB1 }\def\CD@LJ#1,{\def\CD@GK{#1}\ifx\CD@GK\CD@RD\else\advance +\CD@tB\CD@GK\DiagramCellWidth\CD@XG\expandafter\CD@LJ\fi}\def\CD@VJ#1,{\def +\CD@GK{#1}\ifx\CD@GK\CD@RD\else\ifnum\CD@NB>\CD@CA\CD@NF\CD@GK +\DiagramCellHeight\advance\CD@NF-\dp\CD@NB\advance\CD@NB\m@ne\ht\CD@NB\CD@NF +\fi\expandafter\CD@VJ\fi}\def\CD@pJ{\CD@wE\CD@OA\dimen0 \advance\CD@OA-% +\DiagramCellWidth\ifdim\CD@OA>2\MapShortFall\CD@KB{badly drawn diagonals (see +manual)}\let\CD@pJ\empty\fi\else\let\CD@pJ\empty\fi}\def\CD@KC{\CD@VA\CD@mA +\CD@sF\ifnum\CD@VA<\CD@MB\dimen0\dp\CD@VA\advance\dimen0\CD@NF\dp\CD@VA\dimen +0 \advance\CD@VA1 \repeat}\def\CD@bH#1#2#3#4{\ifnum\CD@FA<\CD@LB\CD@OA=#1% +\relax\setbox\CD@FA=\hbox{\setbox0=#2\dimen7=#4\relax\dimen8=#3\relax\ifhbox +\CD@FA\unhbox\CD@FA\advance\CD@OA-\lastkern\unkern\fi\ifdim\CD@OA=\z@\else +\kern-\CD@OA\fi\raise\dimen7\box0 \kern-\dimen8 }\ifnum\CD@FA=\CD@lA\CD@V +\CD@kF\CD@OA\fi\else\cd@shouldnt O\fi}\def\CD@w{\setbox\CD@NB=\hbox{\CD@FA +\CD@lA\CD@VA\CD@mA\CD@PA\z@\relax\CD@sF\ifnum\CD@FA<\CD@LB\CD@tB\wd\CD@VA +\relax\CD@eI\advance\CD@FA1 \advance\CD@VA1 \repeat}\CD@V\CD@kI{\wd\CD@NB}\wd +\CD@NB\z@}\def\CD@eI{\ifhbox\CD@FA\CD@OA\CD@tB\relax\advance\CD@OA-\CD@PA +\relax\ifdim\CD@OA=\z@\else\kern\CD@OA\fi\CD@PA\CD@tB\advance\CD@PA\wd\CD@FA +\relax\unhbox\CD@FA\advance\CD@PA-\lastkern\unkern\fi}\def\CD@ZI{\setbox +\CD@sH=\box\voidb@x\CD@VA=\CD@MB\CD@FA\CD@LB\CD@VA\CD@mA\advance\CD@VA\CD@FA +\advance\CD@VA-\CD@lA\advance\CD@VA\m@ne\CD@tB\wd\CD@VA\count@\CD@LB\advance +\count@\m@ne\CD@hF.5\wd\count@\advance\CD@hF\CD@tB\CD@A\m@ne\CD@gD\@m\CD@sF +\ifnum\CD@FA>\CD@lA\advance\CD@FA\m@ne\advance\CD@hF-\CD@tB\CD@PI\wd\CD@VA +\CD@tB\advance\CD@hF\CD@tB\advance\CD@VA\m@ne\CD@tB\wd\CD@VA\repeat\CD@mF +\CD@kF\CD@mI-\CD@mF\CD@vB}\newcount\CD@GB\def\CD@s{}\def\CD@t{\mathsurround +\z@\hsize\z@\rightskip\z@ plus1fil minus\maxdimen\parfillskip\z@\linepenalty +9000 \looseness0 \hfuzz\maxdimen\hbadness10000 \clubpenalty0 \widowpenalty0 +\displaywidowpenalty0 \interlinepenalty0 \predisplaypenalty0 +\postdisplaypenalty0 \interdisplaylinepenalty0 \interfootnotelinepenalty0 +\floatingpenalty0 \brokenpenalty0 \everypar{}\leftskip\z@\parskip\z@ +\parindent\z@\pretolerance10000 \tolerance10000 \hyphenpenalty10000 +\exhyphenpenalty10000 \binoppenalty10000 \relpenalty10000 \adjdemerits0 +\doublehyphendemerits0 \finalhyphendemerits0 \CD@IA\prevdepth\z@}\newbox +\CD@KG\newbox\CD@IG\def\CD@JG{\unhcopy\CD@KG}\def\CD@HG{\unhcopy\CD@IG}\def +\CD@iJ{\hbox{}\penalty1\nointerlineskip}\def\CD@PI{\penalty5 \noindent\setbox +\CD@MH=\null\CD@mF\z@\CD@mI\z@\ifnum\CD@FA<\CD@LB\ht\CD@MH\ht\CD@FA\dp\CD@MH +\dp\CD@FA\unhbox\CD@FA\skip0=\lastskip\unskip\else\CD@OK\skip0=\z@\fi\endgraf +\ifcase\prevgraf\cd@shouldnt Y \or\cd@shouldnt Z \or\CD@RI\or\CD@XI\else +\CD@QI\fi\unskip\setbox0=\lastbox\unskip\unskip\unpenalty\noindent\unhbox0% +\setbox0\lastbox\unpenalty\unskip\unskip\unpenalty\setbox0\lastbox\CD@tF +\CD@GB\lastpenalty\unpenalty\ifnum\CD@GB>\z@\setbox\z@\lastbox\CD@lB\repeat +\endgraf\unskip\unskip\unpenalty}\def\CD@YJ{\CD@uA\CD@XB\advance\CD@uA-\CD@NB +\CD@vA\CD@FA\advance\CD@vA-\CD@lA\advance\CD@vA1 \expandafter\message{% +prevgraf=\the\prevgraf at (\the\CD@uA,\the\CD@vA)}}\def\CD@XI{\CD@CE\setbox +\CD@lI=\lastbox\setbox\CD@lI=\hbox{\unhbox\CD@lI\unskip\unpenalty}\unskip +\ifdim\ht\CD@lI>\ht\CD@PC\setbox\CD@MH=\copy\CD@lI\else\ifdim\dp\CD@lI>\dp +\CD@PC\setbox\CD@MH=\copy\CD@lI\else\CD@FG\CD@lI\fi\fi\advance\CD@mF.5\wd +\CD@lI\advance\CD@mI.5\wd\CD@lI\setbox\CD@lI=\hbox{\unhbox\CD@lI\CD@HG}\CD@bH +\CD@mF{\box\CD@lI}\CD@mI\z@\CD@yB\CD@vB}\def\CD@CE{\ifnum\CD@A>0 \advance +\dimen0-\CD@tB\CD@iA-.5\dimen0 \CD@A-\CD@A\else\CD@A0 \CD@iA\z@\fi\setbox +\CD@MH=\lastbox\setbox\CD@MH=\hbox{\unhbox\CD@MH\unskip\unskip\unpenalty +\setbox0=\lastbox\global\CD@QA\lastkern\unkern}\advance\CD@iA-.5\CD@QA\unskip +\setbox\CD@MH=\null\CD@mI\CD@iA\CD@mF-\CD@iA}\def\CD@Z{\ht\CD@MH\CD@tI\dp +\CD@MH\CD@sI}\def\CD@FG#1{\setbox\CD@MH=\hbox{\CD@V{\ht\CD@MH}{\ht#1}\CD@V{% +\dp\CD@MH}{\dp#1}\CD@V{\wd\CD@MH}{\wd#1}\vrule height\ht\CD@MH depth\dp\CD@MH +width\wd\CD@MH}}\def\CD@QI{\CD@CE\CD@Z\setbox\CD@lI=\lastbox\unskip\setbox +\CD@lF=\lastbox\unskip\setbox\CD@lF=\hbox{\unhbox\CD@lF\unskip\global\CD@yA +\lastpenalty\unpenalty}\advance\CD@yA9999 \ifcase\CD@yA\CD@VI\or\CD@YI\or +\CD@TI\or\CD@dI\or\CD@cI\or\CD@SI\else\cd@shouldnt9\fi}\def\CD@VI{\CD@FG +\CD@lI\CD@UI\setbox\CD@sH=\box\CD@lF\setbox\CD@tH=\box\CD@lI}\def\CD@YI{% +\CD@FG\CD@lF\setbox\CD@lI\hbox{\penalty8 \unhbox\CD@lI\unskip\unpenalty\ifnum +\lastpenalty=8 \else\CD@xH\fi}\CD@UI\setbox\CD@lF=\hbox{\unhbox\CD@lF\unskip +\unpenalty\global\setbox\CD@DA=\lastbox}\ifdim\wd\CD@lF=\z@\else\CD@xH\fi +\setbox\CD@sH=\box\CD@DA}\def\CD@xH{\CD@KB{extra material in \string\pile +\space cell (lost)}}\def\CD@UI{\CD@yB\ifvoid\CD@sH\else\CD@KB{Clashing +horizontal arrows}\CD@mI.5\CD@hF\CD@mF-\CD@mI\CD@vB\CD@mI\z@\CD@mF\z@\fi +\CD@hI\CD@hF\advance\CD@hI-\CD@mI\CD@hF-\CD@mF\CD@JC\CD@FA}\def\CD@RI{\setbox +0\lastbox\unskip\CD@iA\z@\CD@Z\ifdim\skip0>\z@\CD@tJ\CD@A0 \else\ifnum\CD@A<1 +\CD@A0 \dimen0\CD@tB\fi\advance\CD@A1 \fi}\def\VonH{\CD@MA46\VonH{.5\CD@LF}}% +\def\HonV{\CD@MA57\HonV{.5\CD@LF}}\def\HmeetV{\CD@MA44\HmeetV{-\MapShortFall}% +}\def\CD@MA#1#2#3#4{\CD@pB34#1{\string#3}\CD@SD\CD@GB-999#2 \dimen0=#4\CD@tI +\dimen0\advance\CD@tI\axisheight\CD@sI\dimen0\advance\CD@sI-\axisheight\CD@CF +\CD@HC\CD@ZD}\def\CD@HC#1{\setbox0=\hbox{\CD@k#1\CD@ND}\dimen0.5\wd0 \CD@tI +\ht0 \CD@sI\dp0 \CD@ZD}\def\CD@SD{\setbox0=\null\ht0=\CD@tI\dp0=\CD@sI\wd0=% +\dimen0 \copy0\penalty\CD@GB\box0 }\def\CD@TI{\CD@GC\CD@yB}\def\CD@dI{\CD@GC +\CD@vB}\def\CD@SI{\CD@GC\CD@yB\CD@vB}\def\CD@GC{\setbox\CD@lI=\hbox{\unhbox +\CD@lI}\setbox\CD@lF=\hbox{\unhbox\CD@lF\global\setbox\CD@DA=\lastbox}\ht +\CD@MH\ht\CD@DA\dp\CD@MH\dp\CD@DA\advance\CD@mF\wd\CD@DA\advance\CD@mI\wd +\CD@lI}\CD@tG\ifPositiveGradient\CD@CI\CD@BI\CD@CI\CD@tG\ifClimbing\CD@rB +\CD@qB\CD@rB\newcount\DiagonalChoice\DiagonalChoice\m@ne\ifx\tenln\nullfont +\CD@tJ\def\CD@qF{\CD@KH\ifPositiveGradient/\else\CD@k\backslash\CD@ND\fi}% +\else\def\CD@qF{\CD@rF\char\count@}\fi\let\CD@rF\tenln\def\Use@line@char#1{% +\hbox{#1\CD@rF\ifPositiveGradient\else\advance\count@64 \fi\char\count@}}\def +\CD@cF{\Use@line@char{\count@\CD@TC\multiply\count@8\advance\count@-9\advance +\count@\CD@LH}}\def\CD@ZF{\Use@line@char{\ifcase\DiagonalChoice\CD@gF\or +\CD@fF\or\CD@fF\else\CD@gF\fi}}\def\CD@gF{\ifnum\CD@TC=\z@\count@\rq33 \else +\count@\CD@TC\multiply\count@\sixt@@n\advance\count@-9\advance\count@\CD@LH +\advance\count@\CD@LH\fi}\def\CD@fF{\count@\rq\ifcase\CD@LH55\or\ifcase\CD@TC +66\or22\or52\or61\or72\fi\or\ifcase\CD@TC66\or25\or22\or63\or52\fi\or\ifcase +\CD@TC66\or16\or36\or22\or76\fi\or\ifcase\CD@TC66\or27\or25\or67\or22\fi\fi +\relax}\def\CD@uC#1{\hbox{#1\setbox0=\Use@line@char{#1}\ifPositiveGradient +\else\raise.3\ht0\fi\copy0 \kern-.7\wd0 \ifPositiveGradient\raise.3\ht0\fi +\box0}}\def\CD@jF#1{\hbox{\setbox0=#1\kern-.75\wd0 \vbox to.25\ht0{% +\ifPositiveGradient\else\vss\fi\box0 \ifPositiveGradient\vss\fi}}}\def\CD@jI#% +1{\hbox{\setbox0=#1\dimen0=\wd0 \vbox to.25\ht0{\ifPositiveGradient\vss\fi +\box0 \ifPositiveGradient\else\vss\fi}\kern-.75\dimen0 }}\CD@RC{+h:>}{% +\Use@line@char\CD@fF}\CD@RC{-h:>}{\Use@line@char\CD@gF}\CD@nF{+t:<}{-h:>}% +\CD@nF{-t:<}{+h:>}\CD@RC{+t:>}{\CD@jF{\Use@line@char\CD@fF}}\CD@RC{-t:>}{% +\CD@jI{\Use@line@char\CD@gF}}\CD@nF{+h:<}{-t:>}\CD@nF{-h:<}{+t:>}\CD@RC{+h:>>% +}{\CD@uC\CD@fF}\CD@RC{-h:>>}{\CD@uC\CD@gF}\CD@nF{+t:<<}{-h:>>}\CD@nF{-t:<<}{+% +h:>>}\CD@nF{+h:>->}{+h:>>}\CD@nF{-h:>->}{-h:>>}\CD@nF{+t:<-<}{-h:>>}\CD@nF{-t% +:<-<}{+h:>>}\CD@RC{+t:>>}{\CD@jF{\CD@uC\CD@fF}}\CD@RC{-t:>>}{\CD@jI{\CD@uC +\CD@gF}}\CD@nF{+h:<<}{-t:>>}\CD@nF{-h:<<}{+t:>>}\CD@nF{+t:>->}{+t:>>}\CD@nF{-% +t:>->}{-t:>>}\CD@nF{+h:<-<}{-t:>>}\CD@nF{-h:<-<}{+t:>>}\CD@RC{+f:-}{\CD@EF +\null\else\CD@cF\fi}\CD@nF{-f:-}{+f:-}\def\CD@tC#1#2{\vbox to#1{\vss\hbox to#% +2{\hss.\hss}\vss}}\def\hfdot{\CD@tC{2\axisheight}{.5em}}% +%% % .7em until 29.7.98 +\def\vfdot{\CD@tC{1ex}\z@}%% % 1.46ex until 29.7.98 +\def\CD@bF{\hbox{\dimen0=.3\CD@zC\dimen1\dimen0 \ifnum\CD@LH>\CD@TC\CD@iC{% +\dimen1}\else\CD@dG{\dimen0}\fi\CD@tC{\dimen0}{\dimen1}}}\newarrowfiller{.}% +\hfdot\hfdot\vfdot\vfdot\def\dfdot{\CD@bF\CD@CK}\CD@RC{+f:.}{\dfdot}\CD@RC{-f% +:.}{\dfdot}\def\CD@@K#1{\hbox\bgroup\def\CD@CH{#1\egroup}\afterassignment +\CD@CH%% +\count@=\rq}\def\lnchar{\CD@@K\CD@qF}\let\laf\lnchar\let\lah\lnchar\def\lad{% +\CD@@K\xlad}\def\xlad{\setbox2=\hbox{\CD@qF}\setbox0=\hbox to.3\wd2{\hss.\hss +}\dimen0=\ht0 \advance\dimen0-\dp0 \dimen1=.3\ht2 \advance\dimen1-\dimen0 \dp +0=.5\dimen1 \dimen1=.3\ht2 \advance\dimen1\dimen0 \ht0=.5\dimen1 \raise\dp0% +\box0}\def\lahh{\CD@@K\xlahh}\def\lat{\CD@@K\xlat}\def\xlat{\setbox0=\hbox{% +\CD@qF}\dimen0=\ht0 \setbox1=\hbox to.25\wd0{\ifcase\DiagonalChoice\box0\hss +\or\hss\box0 \or\hss\box0 \or\box0\hss\fi}\vbox to.25\dimen0{\ifClimbing\box1% +\vss\else\vss\box1\fi\kern\z@}}\def\xlahh{\setbox0=\hbox{\CD@qF}% +\ifPositiveGradient\CD@tJ\copy0 \kern-.7\wd0 \mv.3\ht0\box0 \else\ifClimbing +\CD@tJ\copy0 \kern-.7\wd0 \mv.3\ht0\box0 \else\mv-.3\ht0\copy0 \kern-.7\wd0 +\box0 \fi\fi}\def\CD@dF#1{\setbox#1=\hbox{\dimen5\dimen#1 \setbox8=\box#1 +\dimen1\wd8 \count@\dimen5 \divide\count@\dimen1 \ifnum\count@=0 \box8 \ifdim +\dimen5<.95\dimen1 \CD@gB{diagonal line too short}\fi\else\dimen3=\dimen5 +\advance\dimen3-\dimen1 \divide\dimen3\count@\dimen4\dimen3 \CD@dG{\dimen4}% +\ifPositiveGradient\multiply\dimen4\m@ne\fi\dimen6\dimen1 \advance\dimen6-% +\dimen3 \loop\raise\count@\dimen4\copy8 \ifnum\count@>0 \kern-\dimen6 \advance +\count@\m@ne\repeat\fi}}\def\CD@CG#1{\CD@EF\CD@xJ{#1}\else\CD@dF{#1}\fi}\def +\CD@IH#1{}\newdimen\objectheight\objectheight1.8ex \newdimen\objectwidth +\objectwidth1em \def\CD@YD{\dimen6=\CD@aK\DiagramCellHeight\dimen7=\CD@WK +\DiagramCellWidth\CD@KJ\ifnum\CD@LH>0 \ifnum\CD@TC>0 \CD@aF\else\aftergroup +\CD@VC\fi\else\aftergroup\CD@UC\fi}\def\CD@VC{\CD@YA{diagonal map is nearly +vertical}\CD@NA}\def\CD@UC{\CD@YA{diagonal map is nearly horizontal}\CD@NA}% +\CD@rG\CD@NA{Use an orthogonal map instead}\def\CD@aF{\CD@MJ\dimen3\dimen7% +\dimen7\dimen6\CD@iC{\dimen7}\advance\dimen3-\dimen7 \CD@MF\ifnum\CD@LH>% +\CD@TC\advance\dimen6-\dimen1\advance\dimen6-\dimen5 \CD@iC{\dimen1}\CD@iC{% +\dimen5}\else\dimen0\dimen1\advance\dimen0\dimen5\CD@dG{\dimen0}\advance +\dimen6-\dimen0 \fi\dimen2.5\dimen7\advance\dimen2-\dimen1 \dimen4.5\dimen7% +\advance\dimen4-\dimen5 \ifPositiveGradient\dimen0\dimen5 \advance\dimen1-% +\CD@WK\DiagramCellWidth\advance\dimen1 \CD@ZK\DiagramCellWidth\setbox6=\llap{% +\unhbox6\kern.1\ht2}\setbox7=\rlap{\kern.1\ht2\unhbox7}\else\dimen0\dimen1 +\advance\dimen1-\CD@ZK\DiagramCellWidth\setbox7=\llap{\unhbox7\kern.1\ht2}% +\setbox6=\rlap{\kern.1\ht2\unhbox6}\fi\setbox6=\vbox{\box6\kern.1\wd2}\setbox +7=\vtop{\kern.1\wd2\box7}\CD@dG{\dimen0}\advance\dimen0-\axisheight\advance +\dimen0-\CD@bK\DiagramCellHeight\dimen5-\dimen0 \advance\dimen0\dimen6 +\advance\dimen1.5\dimen3 \ifdim\wd3>\z@\ifdim\ht3>-\dp3\CD@TB\fi\fi\dimen3% +\dimen2 \dimen7\dimen2\advance\dimen7\dimen4 \ifvoid3 \else\CD@tE\else\dimen8% +\ht3\advance\dimen8-\axisheight\CD@iC{\dimen8}\CD@X{\dimen8}{.5\wd3}\dimen9% +\dp3\advance\dimen9\axisheight\CD@iC{\dimen9}\CD@X{\dimen9}{.5\wd3}% +\ifPositiveGradient\advance\dimen2-\dimen9\advance\dimen4-\dimen8 \else +\advance\dimen4-\dimen9\advance\dimen2-\dimen8 \fi\fi\advance\dimen3-.5\wd3 +\fi\dimen9=\CD@aK\DiagramCellHeight\advance\dimen9-2\DiagramCellHeight\CD@tE +\advance\dimen2\dimen4 \CD@CG{2}\dimen2-\dimen0\advance\dimen2\dp2 \else +\CD@CG{2}\CD@CG{4}\ifPositiveGradient\dimen2-\dimen0\advance\dimen2\dp2 \dimen +4\dimen5\advance\dimen4-\ht4 \else\dimen4-\dimen0\advance\dimen4\dp4 \dimen2% +\dimen5\advance\dimen2-\ht2 \fi\fi\setbox0=\hbox to\z@{\kern\dimen1 \ifvoid1 +\else\ifPositiveGradient\advance\dimen0-\dp1 \lower\dimen0 \else\advance +\dimen5-\ht1 \raise\dimen5 \fi\rlap{\unhbox1}\fi\raise\dimen2\rlap{\unhbox2}% +\ifvoid3 \else\lower.5\dimen9\rlap{\kern\dimen3\unhbox3}\fi\kern.5\dimen7 +\lower.5\dimen9\box6 \lower.5\dimen9\box7 \kern.5\dimen7 \CD@tE\else\raise +\dimen4\llap{\unhbox4}\fi\ifvoid5 \else\ifPositiveGradient\advance\dimen5-\ht +5 \raise\dimen5 \else\advance\dimen0-\dp5 \lower\dimen0 \fi\llap{\unhbox5}\fi +\hss}\ht0=\axisheight\dp0=-\ht0\box0 }\def\NorthWest{\CD@BI\CD@rB +\DiagonalChoice0 }\def\NorthEast{\CD@CI\CD@rB\DiagonalChoice1 }\def\SouthWest +{\CD@CI\CD@qB\DiagonalChoice3 }\def\SouthEast{\CD@BI\CD@qB\DiagonalChoice2 }% +\def\CD@aD{\vadjust{\CD@uA\CD@FA\advance\CD@uA\ifPositiveGradient\else-\fi +\CD@ZK\relax\CD@vA\CD@NB\advance\CD@vA-\CD@bK\relax\hbox{\advance\CD@uA +\ifPositiveGradient-\fi\CD@WK\advance\CD@vA\CD@aK\hbox{\box6 \kern\CD@DC\kern +\CD@eJ\penalty1 \box7 \box\z@}\penalty\CD@uA\penalty\CD@vA}\penalty\CD@uA +\penalty\CD@vA\penalty104}}\def\CD@eH#1{\relax\vadjust{\hbox@maths{#1}% +\penalty\CD@FA\penalty\CD@NB\penalty\tw@}}\def\CD@lB{\ifcase\CD@GB\or\or +\CD@bH{.5\wd0}{\box0}{.5\wd0}\z@\or\unhbox\z@\setbox\z@\lastbox\CD@bH{.5\wd0}% +{\box0}{.5\wd0}\z@\unpenalty\unpenalty\setbox\z@\lastbox\or\CD@TG\else +\advance\CD@GB-100 \ifnum\CD@GB<\z@\cd@shouldnt B\fi\setbox\z@\hbox{\kern +\CD@mF\copy\CD@MH\kern\CD@mI\CD@uA\CD@XB\advance\CD@uA-\CD@NB\penalty\CD@uA +\CD@uA\CD@FA\advance\CD@uA-\CD@lA\penalty\CD@uA\unhbox\z@\global\CD@yA +\lastpenalty\unpenalty\global\CD@zA\lastpenalty\unpenalty}\CD@uA-\CD@yA\CD@vA +\CD@zA\CD@fI\fi}\def\CD@TG{\unhbox\z@\setbox\z@\lastbox\CD@uA\lastpenalty +\unpenalty\advance\CD@uA\CD@mA\CD@vA\CD@XB\advance\CD@vA-\lastpenalty +\unpenalty\dimen1\lastkern\unkern\setbox3\lastbox\dimen0\lastkern\unkern +\setbox0=\hbox to\z@{\unhbox0\setbox0\lastbox\setbox7\lastbox\unpenalty\CD@eJ +\lastkern\unkern\CD@DC\lastkern\unkern\setbox6\lastbox\dimen7\CD@tB\advance +\dimen7-\wd\CD@uA\ifdim\dimen7<\z@\CD@CI\multiply\dimen7\m@ne\let\mv\empty +\else\CD@BI\def\mv{\raise\ht1}\kern-\dimen7 \fi\ifnum\CD@vA>\CD@NB\dimen6% +\CD@uB\advance\dimen6-\ht\CD@vA\else\dimen6\z@\fi\CD@jJ\CD@mK\setbox1\null\ht +1\dimen6\wd1\dimen7 \dimen7\dimen2 \dimen6\wd1 \CD@KJ\CD@uA\CD@LH\CD@vA\CD@TC +\dimen6\ht1 \CD@KJ\setbox2\null\divide\dimen2\tw@\advance\dimen2\CD@eJ\CD@eG{% +\dimen2}\wd2\dimen2 \dimen0.5\dimen7 \advance\dimen0\ifPositiveGradient\else-% +\fi\CD@eJ\CD@dG{\dimen0}\advance\dimen0-\axisheight\ht2\dimen0 \dimen0\CD@DC +\CD@eG{\dimen0}\advance\dimen0\ht2\ht2\dimen0 \dimen0\ifPositiveGradient-\fi +\CD@DC\CD@dG{\dimen0}\advance\dimen0\wd2\wd2\dimen0 \setbox4\null\dimen0 .6% +\CD@zC\CD@eG{\dimen0}\ht4\dimen0 \dimen0 .2\CD@zC\CD@dG{\dimen0}\wd4\dimen0 +\dimen0\wd2 \ifvoid6\else\dimen1\ht4 \advance\dimen1\ht2 \CD@CC6+-\raise +\dimen1\rlap{\ifPositiveGradient\advance\dimen0-\wd6\advance\dimen0-\wd4 \else +\advance\dimen0\wd4 \fi\kern\dimen0\box6}\fi\dimen0\wd2 \ifvoid7\else\dimen1% +\ht4 \advance\dimen1-\ht2 \CD@CC7-+\lower\dimen1\rlap{\ifPositiveGradient +\advance\dimen0\wd4 \else\advance\dimen0-\wd7\advance\dimen0-\wd4 \fi\kern +\dimen0\box7}\fi\mv\box0\hss}\ht0\z@\dp0\z@\CD@bH{\z@}{\box\z@}{\z@}{% +\axisheight}}\def\CD@CC#1#2#3{\dimen4.5\wd#1 \ifdim\dimen4>.25\dimen7\dimen4=% +.25\dimen7\fi\ifdim\dimen4>\CD@zC\dimen4.4\dimen4 \advance\dimen4.6\CD@zC\fi +\CD@eG{\dimen4}\dimen5\axisheight\CD@dG{\dimen5}\advance\dimen4-\dimen5 \dimen +5\dimen4\CD@eG{\dimen5}\advance\dimen0\ifPositiveGradient#2\else#3\fi\dimen5 +\CD@dG{\dimen4}\advance\dimen1\dimen4 } \def\CD@eD#1{\expandafter\CD@IK{#1}}% +\CD@ZA\CD@EK{output is PostScript dependent}\def\CD@SC{\CD@IK{/bturn {gsave +currentpoint currentpoint translate 4 2 roll neg exch atan rotate neg exch neg +exch translate } def /eturn {currentpoint grestore moveto} def}}\def\CD@gK{% +\relax\CD@hK\pdfliteral{Q}\else\CD@IK{eturn}\fi} \def\CD@OJ#1{\count@#1\relax +\multiply\count@7\advance\count@16577\divide\count@33154 }\def\CD@fD#1{% +\expandafter\special{#1}} \def\CD@xJ#1{\setbox#1=\hbox{\dimen0\dimen#1\CD@dG{% +\dimen0}\CD@OJ{\dimen0}\setbox0=\null\ifPositiveGradient\count@-\count@\ht0% +\dimen0 \else\dp0\dimen0 \fi\box0 \CD@uA\count@\CD@OJ\CD@LF\CD@fD{pn \the +\count@}\CD@fD{pa 0 0}\CD@OJ{\dimen#1}\CD@fD{pa \the\count@\space\the\CD@uA}% +\CD@fD{fp}\kern\dimen#1}}\def\CD@JI{\CD@KJ\begingroup\ifdim\dimen7<\dimen6 +\dimen2=\dimen6 \dimen6=\dimen7 \dimen7=\dimen2 \count@\CD@LH\CD@LH\CD@TC +\CD@TC\count@\else\dimen2=\dimen7 \fi\ifdim\dimen6>.01\p@\CD@KI\global\CD@QA +\dimen0 \else\global\CD@QA\dimen7 \fi\endgroup\dimen2\CD@QA\CD@iK\CD@lK{% +\ifPositiveGradient\else-\fi\dimen6}\CD@iK\CD@kK{\ifPositiveGradient-\fi +\dimen6}\CD@iK\CD@eK{\dimen7}}\def\CD@KI{\CD@hJ\ifdim\dimen7>1.73\dimen6 +\divide\dimen2 4 \multiply\CD@TC2 \else\dimen2=0.353553\dimen2 \advance\CD@LH +-\CD@TC\multiply\CD@TC4 \fi\dimen0=4\dimen2 \CD@ZG4\CD@ZG{-2}\CD@ZG2\CD@ZG{-2% +.5}}\def\CD@AI{\begingroup\count@\dimen0 \dimen2 45pt \divide\count@\dimen2 +\ifdim\dimen0<\z@\advance\count@\m@ne\fi\ifodd\count@\advance\count@1\CD@@A +\else\CD@y\fi\advance\dimen0-\count@\dimen2 \CD@gE\multiply\dimen0\m@ne\fi +\ifnum\count@<0 \multiply\count@-7 \fi\dimen3\dimen1 \dimen6\dimen0 \dimen7 +3754936sp \ifdim\dimen0<6\p@\def\CD@OG{4000}\fi\CD@KJ\dimen2\dimen3\CD@dG{% +\dimen2}\CD@hJ\multiply\CD@TC-6 \dimen0\dimen2 \CD@ZG1\CD@ZG{0.3}\dimen1% +\dimen0 \dimen2\dimen3 \dimen0\dimen3 \CD@ZG3\CD@ZG{1.5}\CD@ZG{0.3}\divide +\count@2 \CD@gE\multiply\dimen1\m@ne\fi\ifodd\count@\dimen2\dimen1\dimen1% +\dimen0\dimen0-\dimen2 \fi\divide\count@2 \ifodd\count@\multiply\dimen0\m@ne +\multiply\dimen1\m@ne\fi\global\CD@QA\dimen0\global\CD@RA\dimen1\endgroup +\dimen6\CD@QA\dimen7\CD@RA}\def\CD@OC{255}\let\CD@OG\CD@OC\def\CD@KJ{% +\begingroup\ifdim\dimen7<\dimen6 \dimen9\dimen7\dimen7\dimen6\dimen6\dimen9% +\CD@@A\else\CD@y\fi\dimen2\z@\dimen3\CD@XH\dimen4\CD@XH\dimen0\z@\dimen8=% +\CD@OG\CD@XH\CD@lC\global\CD@yA\dimen\CD@gE0\else3\fi\global\CD@zA\dimen +\CD@gE3\else0\fi\endgroup\CD@LH\CD@yA\CD@TC\CD@zA}\def\CD@lC{\count@\dimen6 +\divide\count@\dimen7 \advance\dimen6-\count@\dimen7 \dimen9\dimen4 \advance +\dimen9\count@\dimen0 \ifdim\dimen9>\dimen8 \CD@@C\else\CD@AC\ifdim\dimen6>% +\z@\dimen9\dimen6 \dimen6\dimen7 \dimen7\dimen9 \expandafter\expandafter +\expandafter\CD@lC\fi\fi}\def\CD@@C{\ifdim\dimen0=\z@\ifdim\dimen9<2\dimen8 +\dimen0\dimen8 \fi\else\advance\dimen8-\dimen4 \divide\dimen8\dimen0 \ifdim +\count@\CD@XH<2\dimen8 \count@\dimen8 \dimen9\dimen4 \advance\dimen9\count@ +\dimen0 \CD@AC\fi\fi}\def\CD@AC{\dimen4\dimen0 \dimen0\dimen9 \advance\dimen2% +\count@\dimen3 \dimen9\dimen2 \dimen2\dimen3 \dimen3\dimen9 }\def\CD@ZG#1{% +\CD@dG{\dimen2}\advance\dimen0 #1\dimen2 }\def\CD@dG#1{\divide#1\CD@TC +\multiply#1\CD@LH}\def\CD@eG#1{\divide#1\CD@vA\multiply#1\CD@uA}\def\CD@iC#1{% +\divide#1\CD@LH\multiply#1\CD@TC}\def\CD@hJ{\dimen6\CD@LH\CD@XH\multiply +\dimen6\CD@LH\dimen7\CD@TC\CD@XH\multiply\dimen7\CD@TC\CD@KJ}\def\CD@iK#1#2{% +\begingroup\dimen@#2\relax\loop\ifdim\dimen2<.4\maxdimen\multiply\dimen2\tw@ +\multiply\dimen@\tw@\repeat\divide\dimen2\@cclvi\divide\dimen@\dimen2\relax +\multiply\dimen@\@cclvi\expandafter\CD@jK\the\dimen@\endgroup\let#1\CD@fK}{% +\catcode\lq p=12 \catcode\lq0=12 \catcode\lq.=12 \catcode\lq t=12 \gdef\CD@jK +#1pt{\gdef\CD@fK{#1}}}\ifx\errorcontextlines\CD@qK\CD@tJ\let\CD@GH\relax\else +\def\CD@GH{\errorcontextlines\m@ne}\fi\ifnum\inputlineno<0 \let\CD@CD\empty +\let\CD@W\empty\let\CD@mD\relax\let\CD@uI\relax\let\CD@vI\relax\let\CD@zF +\relax\message{! Why not upgrade to TeX version 3? (available since 1990)}% +\else\def\CD@W{ at line \number\inputlineno}\def\CD@mD{ - first occurred}\def +\CD@uI{\edef\CD@h{\the\inputlineno}\global\let\CD@jB\CD@h}\def\CD@h{9999}\def +\CD@vI{\xdef\CD@jB{\the\inputlineno}}\def\CD@jB{\CD@h}\def\CD@zF{\ifnum\CD@h<% +\inputlineno\edef\CD@CD{\space at lines \CD@h--\the\inputlineno}\else\edef +\CD@CD{\CD@W}\fi}\fi\let\CD@CD\empty\def\CD@YA#1#2{\CD@GH\errhelp=#2% +\expandafter\errmessage{\CD@tA: #1}}\def\CD@KB#1{\begingroup\expandafter +\message{! \CD@tA: #1\CD@CD}\ifnum\CD@XB>\CD@NB\ifnum\CD@CA>\CD@NB\else\ifnum +\CD@lA>\CD@FA\else\ifnum\CD@LB>\CD@FA\advance\CD@XB-\CD@NB\advance\CD@FA-% +\CD@lA\advance\CD@FA1\relax\expandafter\message{! (error detected at row \the +\CD@XB, column \the\CD@FA, but probably caused elsewhere)}\fi\fi\fi\fi +\endgroup}\def\CD@gB#1{{\expandafter\message{\CD@tA\space Warning: #1\CD@W}}}% +\def\CD@CB#1#2{\CD@gB{#1 \string#2 is obsolete\CD@mD}}\def\CD@AB#1{\CD@CB{% +Dimension}{#1}\CD@DE#1\CD@BB\CD@BB}\def\CD@BB{\CD@OA=}\def\CD@@B#1{\CD@CB{% +Count}{#1}\CD@DE#1\CD@OH\CD@OH}\def\CD@OH{\count@=}\def\HorizontalMapLength{% +\CD@AB\HorizontalMapLength}\def\VerticalMapHeight{\CD@AB\VerticalMapHeight}% +\def\VerticalMapDepth{\CD@AB\VerticalMapDepth}\def\VerticalMapExtraHeight{% +\CD@AB\VerticalMapExtraHeight}\def\VerticalMapExtraDepth{\CD@AB +\VerticalMapExtraDepth}\def\DiagonalLineSegments{\CD@@B\DiagonalLineSegments}% +\ifx\tenln\nullfont\CD@ZA\CD@KH{\CD@eF\space diagonal line and arrow font not +available}\else\let\CD@KH\relax\fi\def\CD@aG#1#2<#3:#4:#5#6{\begingroup\CD@PA +#3\relax\advance\CD@PA-#2\relax\ifdim.1em<\CD@PA\CD@uA#5\relax\CD@vA#6\relax +\ifnum\CD@uA<\CD@vA\count@\CD@vA\advance\count@-\CD@uA\CD@KB{#4 by \the\CD@PA +}\if#1v\let\CD@CH\CD@JK\edef\tmp{\the\CD@uA--\the\CD@vA,\the\CD@FA}\else +\advance\count@\count@\if#1l\advance\count@-\CD@A\else\if#1r\advance\count@ +\CD@A\fi\fi\advance\CD@PA\CD@PA\let\CD@CH\CD@ZE\edef\tmp{\the\CD@NB,\the +\CD@uA--\the\CD@vA}\fi\divide\CD@PA\count@\ifdim\CD@CH<\CD@PA\global\CD@CH +\CD@PA\fi\fi\fi\endgroup}\CD@tG\CD@xE\CD@JD\CD@ID\CD@rG\CD@xI{See the message +above.}\CD@rG\CD@lH{Perhaps you've forgotten to end the diagram before +resuming the text, in\CD@uG which case some garbage may be added to the +diagram, but we should be ok now.\CD@uG Alternatively you've left a blank line +in the middle - TeX will now complain\CD@uG that the remaining \CD@S s are +misplaced - so please use comments for layout.}\CD@rG\CD@hD{You have already +closed too many brace pairs or environments; an \CD@HD\CD@uG command was (% +over)due.}\CD@rG\CD@hH{\CD@dC\space and \CD@HD\space commands must match.}% +\def\CD@jH{\ifnum\inputlineno=0 \else\expandafter\CD@iH\fi}\def\CD@iH{\CD@MD +\CD@GD\crcr\CD@YA{missing \CD@HD\space inserted before \CD@kH- type "h"}% +\CD@lH\enddiagram\CD@AG\CD@kH\par}\def\CD@AG#1{\edef\enddiagram{\noexpand +\CD@rD{#1\CD@W}}}\def\CD@rD#1{\CD@YA{\CD@HD\space(anticipated by #1) ignored}% +\CD@xI\let\enddiagram\CD@SG}\def\CD@SG{\CD@YA{misplaced \CD@HD\space ignored}% +\CD@hH}\def\CD@mC{\CD@YA{missing \CD@HD\space inserted.}\CD@hD\CD@AG{closing +group}}\ifx\DeclareOption\CD@qK\else\ifx\DeclareOption\@notprerr\else +\DeclareOption*{\let\CD@N\relax\let\CD@DH\relax\expandafter\CD@@E +\CurrentOption,}\fi\fi +%%======================================================================% +%% % +%% (22) AUXILLARY MACROS FOR ADJUSTMENT OF COMPONENTS % +%% % +%%======================================================================% + +%% NOTE: The recommended way of defining arrow commands is now +%% \newarrow{Name}{tail}{filler}{middle}{filler}{head} +%% which defines \rName, \lName, \dName and \uName using arrow parts which +%% have themselves previously been defined using the commands +%% \newarrowtail, \newarrowfiller, \newarrowmiddle and \newarrowhead. + +%% The components \rhvee etc have been retained for the time being, as an +%% intermediate stage and to continue to support the old \HorizontalMap and +%% \VerticalMap commands, but you should not rely on the continued existence +%% of these macros. + +%% The various components usually need some correction +%% - longitudinally, ie to prevent gaps and overprints with the shaft, +%% - transversally, ie to prevent "steps" in the junction with the shaft. +%% The former can be done safely ad hoc, eg with \mkern1mu. +%% The latter are now done with the macros \scriptaxis, \boldscriptaxis, +%% \shifthook and \raisehook, which include pixel corrections. + +%% Please note that these and the other auxillary macros which follow are +%% interim. When it becomes clear exactly what kinds of adjustments are +%% needed for characters, this job will be done by a suitable extension +%% to the language of \newarrowhead, etc. If you have any other ideas for +%% transformations of general use please tell me. + +%% By all means experiment with other characters for arrowheads, but +%% please, in your own interests, do not rely on macros like \rhvee, +%% send me a copy of your definitions for distribution to other users +%% in this file, and keep track of where your efforts get copied so +%% that they can be replaced with the "official" version when it is +%% incorporated. + +%% ***** DONT use macros with mangled names like \Cd@gH. ***** + +\catcode\lq\$=3 %% make sure that $ means maths-shift +\def\vboxtoz{\vbox to\z@}%% \z@ is in plain TeX and means 0pt + +%% print #1 in \scriptstyle, adjusting for the maths axis height +\def\scriptaxis#1{\@scriptaxis{$\scriptstyle#1$}}%% +\def\ssaxis#1{\@ssaxis{$\scriptscriptstyle#1$}}%% +\def\@scriptaxis#1{\dimen0\axisheight\advance\dimen0-\ss@axisheight\raise +\dimen0\hbox{#1}}\def\@ssaxis#1{\dimen0\axisheight\advance\dimen0-% +\ss@axisheight\raise\dimen0\hbox{#1}} + +%% Some of the characters would look better in bold since they're +%% taken from sub/superscript fonts; we use LaTeX's \boldmath to +%% do this, defining this to do nothing if it doesn't exist. +%% With the old LaTeX font selection at other than 10pt you may still +%% get nothing happenning. Also, PK fonts may be missing. +%% If you have problems, DONT use boldhook or boldlittlevee. +\ifx\boldmath\CD@qK%% +\let\boldscriptaxis\scriptaxis%% +\def\boldscript#1{\hbox{$\scriptstyle#1$}}%% +\def\boldscriptscript#1{\hbox{$\scriptscriptstyle#1$}}%% +\else\def\boldscriptaxis#1{\@scriptaxis{\boldmath$\scriptstyle#1$}}%% +\def\boldscript#1{\hbox{\boldmath$\scriptstyle#1$}}%% +\def\boldscriptscript#1{\hbox{\boldmath$\scriptscriptstyle#1$}}%% +\fi + +%% #1= {} or \boldmath; #2= + or -; #3=\subset or \supset +\def\raisehook#1#2#3{\hbox{\setbox3=\hbox{#1$\scriptscriptstyle#3$}% +%% the character to use +\dimen0\ss@axisheight%% \scriptscriptstyle axis height +\dimen1\axisheight\advance\dimen1-\dimen0%% difference in axis heights +\dimen2\ht3\advance\dimen2-\dimen0% +%% height of char above axis (half spread) +\advance\dimen2-0.021em\advance\dimen1 #2\dimen2% +%% shift = axis_difference +/- half_spread +\raise\dimen1\box3}}%% print the character +%% Mark Dawson suggested using the width +\def\shifthook#1#2#3{\setbox1=\hbox{#1$\scriptscriptstyle#3$}\dimen0\wd1% +\divide\dimen0 12\CD@zH{\dimen0}%% "u" +\dimen1\wd1\advance\dimen1-2\dimen0 \advance\dimen1-2\CD@oI\CD@zH{\dimen1}% +\kern#2\dimen1\box1}%% print + +%% use the extension font (cmex) for double vertical arrows +\def\@cmex{\mathchar"03}%%ascii double quote + +%% ************* P U L L B A C K S ************ + +%% These will probably be replaced by something less ad hoc +%% in a future version. + +\def\make@pbk#1{\setbox\tw@\hbox to\z@{#1}\ht\tw@\z@\dp\tw@\z@\box\tw@}\def +\CD@fH#1{\overprint{\hbox to\z@{#1}}}\def\CD@qH{\kern0.11em}\def\CD@pH{\kern0% +.35em} + +%% This is a hack for my book ``Practical Foundations of Mathematics'' +%% and WILL NOT BE SUPPORTED --- DO NOT USE IT! +\def\dblvert{\def\CD@rH{\kern.5\PileSpacing}}\def\CD@rH{} + +\def\SEpbk{\make@pbk{\CD@qH\CD@rH\vrule depth 2.87ex height -2.75ex width 0.% +95em \vrule height -0.66ex depth 2.87ex width 0.05em \hss}} + +\def\SWpbk{\make@pbk{\hss\vrule height -0.66ex depth 2.87ex width 0.05em +\vrule depth 2.87ex height -2.75ex width 0.95em \CD@qH\CD@rH}} + +\def\NEpbk{\make@pbk{\CD@qH\CD@rH\vrule depth -3.81ex height 4.00ex width 0.% +95em \vrule height 4.00ex depth -1.72ex width 0.05em \hss}} + +\def\NWpbk{\make@pbk{\hss\vrule height 4.00ex depth -1.72ex width 0.05em +\vrule depth -3.81ex height 4.00ex width 0.95em \CD@qH\CD@rH}} + +%% Freyd & Scedrov puncture symbol for non-commuting polygon +\def\puncture{{\setbox0\hbox{A}\vrule height.53\ht0 depth-.47\ht0 width.35\ht +0 \kern.12\ht0 \vrule height\ht0 depth-.65\ht0 width.06\ht0 \kern-.06\ht0 +\vrule height.35\ht0 depth0pt width.06\ht0 \kern.12\ht0 \vrule height.53\ht0 +depth-.47\ht0 width.35\ht0 }} + +%% 2-cells: (24.11.95) +%%% \NEclck puts a clockwise (ie southeast) arrow to the northwest of cell etc +\def\NEclck{\overprint{\raise2.5ex\rlap{ \CD@rH$\scriptstyle\searrow$}}}%% +\def\NEanti{\overprint{\raise2.5ex\rlap{ \CD@rH$\scriptstyle\nwarrow$}}}%% +\def\NWclck{\overprint{\raise2.5ex\llap{$\scriptstyle\nearrow$ \CD@rH}}}%% +\def\NWanti{\overprint{\raise2.5ex\llap{$\scriptstyle\swarrow$ \CD@rH}}}%% +\def\SEclck{\overprint{\lower1ex\rlap{ \CD@rH$\scriptstyle\swarrow$}}}%% +\def\SEanti{\overprint{\lower1ex\rlap{ \CD@rH$\scriptstyle\nearrow$}}}%% +\def\SWclck{\overprint{\lower1ex\llap{$\scriptstyle\nwarrow$ \CD@rH}}}%% +\def\SWanti{\overprint{\lower1ex\llap{$\scriptstyle\searrow$ \CD@rH}}} + +%%======================================================================% +%% % +%% (23) BITS OF ARROWS % +%% % +%%======================================================================% + +%% ********** H E A D S *********** + +%% \diagramstyle[heads=xxx] defines {>} as {xxx} where xxx +%% has been defined by \newarrowhead{xxx} and \newarrowtail{xxx} + +%% vee head +\def\rhvee{\mkern-10mu\greaterthan}%% +\def\lhvee{\lessthan\mkern-10mu}%% +\def\dhvee{\vboxtoz{\vss\hbox{$\vee$}\kern0pt}}%% +\def\uhvee{\vboxtoz{\hbox{$\wedge$}\vss}}%% +\newarrowhead{vee}\rhvee\lhvee\dhvee\uhvee + +%% little vee head +\def\dhlvee{\vboxtoz{\vss\hbox{$\scriptstyle\vee$}\kern0pt}}%% +\def\uhlvee{\vboxtoz{\hbox{$\scriptstyle\wedge$}\vss}}%% +\newarrowhead{littlevee}{\mkern1mu\scriptaxis\rhvee}{\scriptaxis\lhvee}% +\dhlvee\uhlvee\ifx\boldmath\CD@qK%% +\newarrowhead{boldlittlevee}{\mkern1mu\scriptaxis\rhvee}{\scriptaxis\lhvee}% +\dhlvee\uhlvee\else%% +\def\dhblvee{\vboxtoz{\vss\boldscript\vee\kern0pt}}%% +\def\uhblvee{\vboxtoz{\boldscript\wedge\vss}}%% +\newarrowhead{boldlittlevee}{\mkern1mu\boldscriptaxis\rhvee}{\boldscriptaxis +\lhvee}\dhblvee\uhblvee%% +\fi + +%% curly vee head (uses AMS symbols fonts) +\def\rhcvee{\mkern-10mu\succ}%% +\def\lhcvee{\prec\mkern-10mu}%% +\def\dhcvee{\vboxtoz{\vss\hbox{$\curlyvee$}\kern0pt}}%% +\def\uhcvee{\vboxtoz{\hbox{$\curlywedge$}\vss}}%% +\newarrowhead{curlyvee}\rhcvee\lhcvee\dhcvee\uhcvee + +%% double vee head %% will probably be withdrawn later +\def\rhvvee{\mkern-13mu\gg}%% 24.8.92 changed 10mu to 13mu +\def\lhvvee{\ll\mkern-13mu}%% to make rule go through +\def\dhvvee{\vboxtoz{\vss\hbox{$\vee$}\kern-.6ex\hbox{$\vee$}\kern0pt}}%% +\def\uhvvee{\vboxtoz{\hbox{$\wedge$}\kern-.6ex \hbox{$\wedge$}\vss}}%% +\newarrowhead{doublevee}\rhvvee\lhvvee\dhvvee\uhvvee + +%% open and closed triangles (uses AMS symbols fonts) +\def\triangleup{{\scriptscriptstyle\bigtriangleup}}%% +\def\littletriangledown{{\scriptscriptstyle\triangledown}}%% AMS +\def\rhtriangle{\triangleright\mkern1.2mu}%% 29.1.93 +\def\lhtriangle{\triangleleft\mkern.8mu}%% +\def\uhtriangle{\vbox{\kern-.2ex \hbox{$\scriptscriptstyle\bigtriangleup$}% +\kern-.25ex}}%% +%% Changed \scriptstyle\triangledown to \scriptscriptstyle\bigtriangledown +%% at the suggestion of Martin Hofmann (25.11.92) to avoid using AMS symbols +%% and also for compatibility with upward arrow. +\def\dhtriangle{\vbox{\kern-.28ex \hbox{$\scriptscriptstyle\bigtriangledown$}% +\kern-.1ex}}%% 15.1.93 from -.25ex +\def\dhblack{\vbox{\kern-.25ex\nointerlineskip\hbox{$\blacktriangledown$}}}% +%% AMS +\def\uhblack{\vbox{\kern-.25ex\nointerlineskip\hbox{$\blacktriangle$}}}% +%% AMS +\def\dhlblack{\vbox{\kern-.25ex\nointerlineskip\hbox{$\scriptstyle +\blacktriangledown$}}}%% AMS +\def\uhlblack{\vbox{\kern-.25ex\nointerlineskip\hbox{$\scriptstyle +\blacktriangle$}}}%% AMS +\newarrowhead{triangle}\rhtriangle\lhtriangle\dhtriangle\uhtriangle +\newarrowhead{blacktriangle}{\mkern-1mu\blacktriangleright\mkern.4mu}{% +\blacktriangleleft}\dhblack\uhblack\newarrowhead{littleblack}{\mkern-1mu% +\scriptaxis\blacktriangleright}{\scriptaxis\blacktriangleleft\mkern-2mu}% +\dhlblack\uhlblack + +%% LaTeX arrowheads +\def\rhla{\hbox{\setbox0=\lnchar55\dimen0=\wd0\kern-.6\dimen0\ht0\z@\raise +\axisheight\box0\kern.1\dimen0}}%% +\def\lhla{\hbox{\setbox0=\lnchar33\dimen0=\wd0\kern.05\dimen0\ht0\z@\raise +\axisheight\box0\kern-.5\dimen0}}%% +\def\dhla{\vboxtoz{\vss\rlap{\lnchar77}}}%% +\def\uhla{\vboxtoz{\setbox0=\lnchar66 \wd0\z@\kern-.15\ht0\box0\vss}}%% 1/93 +\newarrowhead{LaTeX}\rhla\lhla\dhla\uhla + +%% double LaTeX arrowheads %% will probably be withdrawn later +\def\lhlala{\lhla\kern.3em\lhla}%% +\def\rhlala{\rhla\kern.3em\rhla}%% +\def\uhlala{\hbox{\uhla\raise-.6ex\uhla}}%% +\def\dhlala{\hbox{\dhla\lower-.6ex\dhla}}%% +\newarrowhead{doubleLaTeX}\rhlala\lhlala\dhlala\uhlala + +%% circles % \rho is a Greek letter! +\def\hhO{\scriptaxis\bigcirc\mkern.4mu} \def\hho{{\circ}\mkern1.2mu}% +\newarrowhead{o}\hho\hho\circ\circ%% +\newarrowhead{O}\hhO\hhO{\scriptstyle\bigcirc}{\scriptstyle\bigcirc}%% + +%% crosses +\def\rhtimes{\mkern-5mu{\times}\mkern-.8mu}\def\lhtimes{\mkern-.8mu{\times}% +\mkern-5mu}\def\uhtimes{\setbox0=\hbox{$\times$}\ht0\axisheight\dp0-\ht0% +\lower\ht0\box0 }\def\dhtimes{\setbox0=\hbox{$\times$}\ht0\axisheight\box0 }% +\newarrowhead{X}\rhtimes\lhtimes\dhtimes\uhtimes\newarrowhead+++++ + +%% empty head {} is also available + +%% Y from stmaryrd (vertical ones still need large adjustment) +\newarrowhead{Y}{\mkern-3mu\Yright}{\Yleft\mkern-3mu}\Yup\Ydown + +%% ********** H E A D S with S H A F T S *********** + +%% little arrow with shaft +\newarrowhead{->}\rightarrow\leftarrow\downarrow\uparrow + +%% arrow with double shaft +%%\newarrowhead{=>}\Rightarrow\Leftarrow\Downarrow\Uparrow +\newarrowhead{=>}\Rightarrow\Leftarrow{\@cmex7F}{\@cmex7E} + +%% harpoon with shaft (trailing up/left can be changed to down/right) +\newarrowhead{harpoon}\rightharpoonup\leftharpoonup\downharpoonleft +\upharpoonleft + +%% little double-headed arrow with shaft (uses AMS symbols fonts) +\def\twoheaddownarrow{\rlap{$\downarrow$}\raise-.5ex\hbox{$\downarrow$}}%% +\def\twoheaduparrow{\rlap{$\uparrow$}\raise.5ex\hbox{$\uparrow$}}%% +\newarrowhead{->>}\twoheadrightarrow\twoheadleftarrow\twoheaddownarrow +\twoheaduparrow + +%% ********** T A I L S *********** + +%% vee tail +\def\rtvee{\greaterthan}%% +\def\ltvee{\mkern-1mu{\lessthan}\mkern.4mu}%% \mkern added 15.1.93 +\def\dtvee{\vee}%% +\def\utvee{\wedge}%% +\newarrowtail{vee}\greaterthan\ltvee\vee\wedge + +%% little vee tail +\newarrowtail{littlevee}{\scriptaxis\greaterthan}{\mkern-1mu\scriptaxis +\lessthan}{\scriptstyle\vee}{\scriptstyle\wedge}\ifx\boldmath\CD@qK +\newarrowtail{boldlittlevee}{\scriptaxis\greaterthan}{\mkern-1mu\scriptaxis +\lessthan}{\scriptstyle\vee}{\scriptstyle\wedge}\else\newarrowtail{% +boldlittlevee}{\boldscriptaxis\greaterthan}{\mkern-1mu\boldscriptaxis +\lessthan}{\boldscript\vee}{\boldscript\wedge}\fi + +%% curly vee tail (uses AMS symbols fonts) +\newarrowtail{curlyvee}\succ{\mkern-1mu{\prec}\mkern.4mu}\curlyvee\curlywedge + +%% open and closed triangle tails (uses AMS symbols fonts) +\def\rttriangle{\mkern1.2mu\triangleright}%% 29.1.93 +\newarrowtail{triangle}\rttriangle\lhtriangle\dhtriangle\uhtriangle +\newarrowtail{blacktriangle}\blacktriangleright{\mkern-1mu\blacktriangleleft +\mkern.4mu}\dhblack\uhblack\newarrowtail{littleblack}{\scriptaxis +\blacktriangleright\mkern-2mu}{\mkern-1mu\scriptaxis\blacktriangleleft}% +\dhlblack\uhlblack + +%% LaTeX tails +\def\rtla{\hbox{\setbox0=\lnchar55\dimen0=\wd0\kern-.5\dimen0\ht0\z@\raise +\axisheight\box0\kern-.2\dimen0}}%% +\def\ltla{\hbox{\setbox0=\lnchar33\dimen0=\wd0\kern-.15\dimen0\ht0\z@\raise +\axisheight\box0\kern-.5\dimen0}}%% +\def\dtla{\vbox{\setbox0=\rlap{\lnchar77}\dimen0=\ht0\kern-.7\dimen0\box0% +\kern-.1\dimen0}}%% 15.1.93 from -.6 +\def\utla{\vbox{\setbox0=\rlap{\lnchar66}\dimen0=\ht0\kern-.1\dimen0\box0% +\kern-.6\dimen0}}%% +\newarrowtail{LaTeX}\rtla\ltla\dtla\utla + +%% double vee tail %% will probably be withdrawn later +\def\rtvvee{\gg\mkern-3mu}%% +\def\ltvvee{\mkern-3mu\ll}%% +\def\dtvvee{\vbox{\hbox{$\vee$}\kern-.6ex \hbox{$\vee$}\vss}}%% +\def\utvvee{\vbox{\vss\hbox{$\wedge$}\kern-.6ex \hbox{$\wedge$}\kern\z@}}%% +\newarrowtail{doublevee}\rtvvee\ltvvee\dtvvee\utvvee + +%% double LaTeX tails %% will probably be withdrawn later +\def\ltlala{\ltla\kern.3em\ltla}%% +\def\rtlala{\rtla\kern.3em\rtla}%% +\def\utlala{\hbox{\utla\raise-.6ex\utla}}%% +\def\dtlala{\hbox{\dtla\lower-.6ex\dtla}}%% +\newarrowtail{doubleLaTeX}\rtlala\ltlala\dtlala\utlala + +%% bar (as in \mapsto) +\def\utbar{\vrule height 0.093ex depth0pt width 0.4em}%% +\let\dtbar\utbar%% +\def\rtbar{\mkern1.5mu\vrule height 1.1ex depth.06ex width .04em\mkern1.5mu}% +%% +\let\ltbar\rtbar%% +\newarrowtail{mapsto}\rtbar\ltbar\dtbar\utbar%% +\newarrowtail{|}\rtbar\ltbar\dtbar\utbar%%ascii vertical bar (|) + +%% hooks (as in \into): choice of after/above and before/below + +\def\rthooka{\raisehook{}+\subset\mkern-1mu}%% +\def\lthooka{\mkern-1mu\raisehook{}+\supset}%% +\def\rthookb{\raisehook{}-\subset\mkern-2mu}%% +\def\lthookb{\mkern-1mu\raisehook{}-\supset}%% + +\def\dthooka{\shifthook{}+\cap}%% +\def\dthookb{\shifthook{}-\cap}%% +\def\uthooka{\shifthook{}+\cup}%% +\def\uthookb{\shifthook{}-\cup}%% + +\newarrowtail{hooka}\rthooka\lthooka\dthooka\uthooka\newarrowtail{hookb}% +\rthookb\lthookb\dthookb\uthookb + +\ifx\boldmath\CD@qK\newarrowtail{boldhooka}\rthooka\lthooka\dthooka\uthooka +\newarrowtail{boldhookb}\rthookb\lthookb\dthookb\uthookb\newarrowtail{% +boldhook}\rthooka\lthooka\dthookb\uthooka\else\def\rtbhooka{\raisehook +\boldmath+\subset\mkern-1mu}%% +\def\ltbhooka{\mkern-1mu\raisehook\boldmath+\supset}%% +\def\rtbhookb{\raisehook\boldmath-\subset\mkern-2mu}%% +\def\ltbhookb{\mkern-1mu\raisehook\boldmath-\supset}%% +\def\dtbhooka{\shifthook\boldmath+\cap}%% +\def\dtbhookb{\shifthook\boldmath-\cap}%% +\def\utbhooka{\shifthook\boldmath+\cup}%% +\def\utbhookb{\shifthook\boldmath-\cup}%% +\newarrowtail{boldhooka}\rtbhooka\ltbhooka\dtbhooka\utbhooka\newarrowtail{% +boldhookb}\rtbhookb\ltbhookb\dtbhookb\utbhookb\newarrowtail{boldhook}% +\rtbhooka\ltbhooka\dtbhooka\utbhooka\fi + +%% square-ended hooks (used for closed subsets in ``lifting and gluing'') +\def\dtsqhooka{\shifthook{}+\sqcap}%% +\def\dtsqhookb{\shifthook{}-\sqcap}%% +\def\ltsqhooka{\mkern-1mu\raisehook{}+\sqsupset}%% +\def\ltsqhookb{\mkern-1mu\raisehook{}-\sqsupset}%% +\def\rtsqhooka{\raisehook{}+\sqsubset\mkern-1mu}%% +\def\rtsqhookb{\raisehook{}-\sqsubset\mkern-2mu}%% +\def\utsqhooka{\shifthook{}+\sqcup}%% +\def\utsqhookb{\shifthook{}-\sqcup}%% +\newarrowtail{sqhook}\rtsqhooka\ltsqhooka\dtsqhooka\utsqhooka + +%% the following seem the better choices at 10pt & 300dpi +\newarrowtail{hook}\rthooka\lthookb\dthooka\uthooka\newarrowtail{C}\rthooka +\lthookb\dthooka\uthooka + +%% circles +\newarrowtail{o}\hho\hho\circ\circ%% +\newarrowtail{O}\hhO\hhO{\scriptstyle\bigcirc}{\scriptstyle\bigcirc}%% + +%% crosses +\newarrowtail{X}\lhtimes\rhtimes\uhtimes\dhtimes\newarrowtail+++++ + +%% empty tail {} is also available + +%% Y from stmaryrd (vertical ones still need adjustment) +\newarrowtail{Y}\Yright\Yleft\Yup\Ydown + +%% harpoon with shaft (trailing up/left can be changed to down/right) +\newarrowtail{harpoon}\leftharpoondown\rightharpoondown\upharpoonright +\downharpoonright + +%% ********** F I L L E R S *********** + +%% shortening is up to 0.15em=2.7mu horiz and 0.35ex vertically at each end. + +%% dot {.}, single rule {-} and empty {} fillers are also available + +%% double and triple lines +%%\newarrowfiller{=}==\Vert\Vert%% +\newarrowfiller{=}=={\@cmex77}{\@cmex77}%% 16.1.93 +\def\vfthree{\mid\!\!\!\mid\!\!\!\mid}%%ascii +\newarrowfiller{3}\equiv\equiv\vfthree\vfthree + +%% dashed line +\def\vfdashstrut{\vrule width0pt height1.3ex depth0.7ex}%% +\def\vfthedash{\vrule width\CD@LF height0.6ex depth 0pt}%% +\def\hfthedash{\CD@AJ\vrule\horizhtdp width 0.26em}%% +\def\hfdash{\mkern5.5mu\hfthedash\mkern5.5mu}%% +\def\vfdash{\vfdashstrut\vfthedash}%% +\newarrowfiller{dash}\hfdash\hfdash\vfdash\vfdash + +%% ************* M I D D L E S ************ + +%% plus +\newarrowmiddle+++++ + +%% ************* D I A G O N A L S ************ + +%% simple arrow heads +%%\def\nwhTO{\nwarrow\mkern-1mu}%% +%%\def\nehTO{\mkern-.1mu\nearrow}%% +%%\def\sehTO{\searrow\mkern-.02mu}%% +%%\def\swhTO{\mkern-.8mu\swarrow}%% + +%%======================================================================% +%% % +%% (24) ARROW COMMANDS % +%% % +%%======================================================================% + +%% change to \iftrue to get mixed heads +\iffalse%% +\newarrow{To}----{vee}%% +\newarrow{Arr}----{LaTeX}%% +\newarrow{Dotsto}....{vee}%% +\newarrow{Dotsarr}....{LaTeX}%% +\newarrow{Dashto}{}{dash}{}{dash}{vee}%% +\newarrow{Dasharr}{}{dash}{}{dash}{LaTeX}%% +\newarrow{Mapsto}{mapsto}---{vee}%% +\newarrow{Mapsarr}{mapsto}---{LaTeX}%% +\newarrow{IntoA}{hooka}---{vee}%% +\newarrow{IntoB}{hookb}---{vee}%% +\newarrow{Embed}{vee}---{vee}%% +\newarrow{Emarr}{LaTeX}---{LaTeX}%% +\newarrow{Onto}----{doublevee}%% +\newarrow{Dotsonarr}....{doubleLaTeX}%% +\newarrow{Dotsonto}....{doublevee}%% +\newarrow{Dotsonarr}....{doubleLaTeX}%% +\else%% +\newarrow{To}---->%% +\newarrow{Arr}---->%% +\newarrow{Dotsto}....>%% +\newarrow{Dotsarr}....>%% +\newarrow{Dashto}{}{dash}{}{dash}>%% +\newarrow{Dasharr}{}{dash}{}{dash}>%% +\newarrow{Mapsto}{mapsto}--->%% +\newarrow{Mapsarr}{mapsto}--->%% +\newarrow{IntoA}{hooka}--->%% +\newarrow{IntoB}{hookb}--->%% +\newarrow{Embed}>--->%% +\newarrow{Emarr}>--->%% +\newarrow{Onto}----{>>}%% +\newarrow{Dotsonarr}....{>>}%% +\newarrow{Dotsonto}....{>>}%% +\newarrow{Dotsonarr}....{>>}%% +\fi%% + +\newarrow{Implies}===={=>}%% minimum cell height 9.5pt +\newarrow{Project}----{triangle}%% +\newarrow{Pto}----{harpoon}%% partial function +\newarrow{Relto}{harpoon}---{harpoon}%% binary relation + +\newarrow{Eq}=====%% +\newarrow{Line}-----%% +\newarrow{Dots}.....%% +\newarrow{Dashes}{}{dash}{}{dash}{}%% + +%% square hooked arrow (used in my ``gluing and lifting'' paper) +\newarrow{SquareInto}{sqhook}---> + +%% braces and parentheses +%% \newarrow gives inappropriate directions, so we change the names +%% the vertical filler is too far to the right; horizontal too high +%% the vertical middles are too low with midvshaft +%% maybe we'll add square brackets and the integral sign one day +\newarrowhead{cmexbra}{\@cmex7B}{\@cmex7C}{\@cmex3B}{\@cmex38}%% +\newarrowtail{cmexbra}{\@cmex7A}{\@cmex7D}{\@cmex39}{\@cmex3A}%% +\newarrowmiddle{cmexbra}{\braceru\bracelu}{\bracerd\braceld}{\vcenter{% +\hbox@maths{\@cmex3D\mkern-2mu}}}%% right +{\vcenter{\hbox@maths{\mkern2mu\@cmex3C}}}%% left +\newarrow{@brace}{cmexbra}-{cmexbra}-{cmexbra}%% braces +\newarrow{@parenth}{cmexbra}---{cmexbra}%% straight parentheses +\def\rightBrace{\d@brace[thick,cmex]}%%ASCII square brackets [] +\def\leftBrace{\u@brace[thick,cmex]}%%ASCII square brackets [] +\def\upperBrace{\r@brace[thick,cmex]}%%ASCII square brackets [] +\def\lowerBrace{\l@brace[thick,cmex]}%%ASCII square brackets [] +\def\rightParenth{\d@parenth[thick,cmex]}%%ASCII square brackets [] +\def\leftParenth{\u@parenth[thick,cmex]}%%ASCII square brackets [] +\def\upperParenth{\r@parenth[thick,cmex]}%%ASCII square brackets [] +\def\lowerParenth{\l@parenth[thick,cmex]}%%ASCII square brackets [] + +%% synonyms for reverse compatibility + +\let\uFrom\uTo%% +\let\lFrom\lTo%% +\let\uDotsfrom\uDotsto%% +\let\lDotsfrom\lDotsto%% +\let\uDashfrom\uDashto%% +\let\lDashfrom\lDashto%% +\let\uImpliedby\uImplies%% +\let\lImpliedby\lImplies%% +\let\uMapsfrom\uMapsto%% +\let\lMapsfrom\lMapsto%% +\let\lOnfrom\lOnto%% +\let\uOnfrom\uOnto%% +\let\lPfrom\lPto%% +\let\uPfrom\uPto%% + +\let\uInfromA\uIntoA%% +\let\uInfromB\uIntoB%% +\let\lInfromA\lIntoA%% +\let\lInfromB\lIntoB%% +\let\rInto\rIntoA%% +\let\lInto\lIntoA%% +\let\dInto\dIntoB%% +\let\uInto\uIntoA%% +\let\ruInto\ruIntoA%% +\let\luInto\luIntoA%% +\let\rdInto\rdIntoA%% +\let\ldInto\ldIntoA%% +%% +\let\hEq\rEq%% +\let\vEq\uEq%% +\let\hLine\rLine%% +\let\vLine\uLine%% +\let\hDots\rDots%% +\let\vDots\uDots%% +\let\hDashes\rDashes%% +\let\vDashes\uDashes%% + +%%=========================================================================% +%% The following are included for reverse compatibility only. +%%=========================================================================% +\let\NW\luTo\let\NE\ruTo\let\SW\ldTo\let\SE\rdTo\def\nNW{\luTo(2,3)}\def\nNE{% +\ruTo(2,3)}%%ascii +\def\sSW{\ldTo(2,3)}\def\sSE{\rdTo(2,3)}%%ascii +\def\wNW{\luTo(3,2)}\def\eNE{\ruTo(3,2)}%%ascii +\def\wSW{\ldTo(3,2)}\def\eSE{\rdTo(3,2)}%%ascii +\def\NNW{\luTo(2,4)}\def\NNE{\ruTo(2,4)}%%ascii +\def\SSW{\ldTo(2,4)}\def\SSE{\rdTo(2,4)}%%ascii +\def\WNW{\luTo(4,2)}\def\ENE{\ruTo(4,2)}%%ascii +\def\WSW{\ldTo(4,2)}\def\ESE{\rdTo(4,2)}%%ascii +\def\NNNW{\luTo(2,6)}\def\NNNE{\ruTo(2,6)}%%ascii +\def\SSSW{\ldTo(2,6)}\def\SSSE{\rdTo(2,6)}%%ascii +\def\WWNW{\luTo(6,2)}\def\EENE{\ruTo(6,2)}%%ascii +\def\WWSW{\ldTo(6,2)}\def\EESE{\rdTo(6,2)}%%ascii + +\let\NWd\luDotsto\let\NEd\ruDotsto\let\SWd\ldDotsto\let\SEd\rdDotsto\def\nNWd +{\luDotsto(2,3)}\def\nNEd{\ruDotsto(2,3)}%%ascii +\def\sSWd{\ldDotsto(2,3)}\def\sSEd{\rdDotsto(2,3)}%%ascii +\def\wNWd{\luDotsto(3,2)}\def\eNEd{\ruDotsto(3,2)}%%ascii +\def\wSWd{\ldDotsto(3,2)}\def\eSEd{\rdDotsto(3,2)}%%ascii +\def\NNWd{\luDotsto(2,4)}\def\NNEd{\ruDotsto(2,4)}%%ascii +\def\SSWd{\ldDotsto(2,4)}\def\SSEd{\rdDotsto(2,4)}%%ascii +\def\WNWd{\luDotsto(4,2)}\def\ENEd{\ruDotsto(4,2)}%%ascii +\def\WSWd{\ldDotsto(4,2)}\def\ESEd{\rdDotsto(4,2)}%%ascii +\def\NNNWd{\luDotsto(2,6)}\def\NNNEd{\ruDotsto(2,6)}%%ascii +\def\SSSWd{\ldDotsto(2,6)}\def\SSSEd{\rdDotsto(2,6)}%%ascii +\def\WWNWd{\luDotsto(6,2)}\def\EENEd{\ruDotsto(6,2)}%%ascii +\def\WWSWd{\ldDotsto(6,2)}\def\EESEd{\rdDotsto(6,2)}%%ascii + +\let\NWl\luLine\let\NEl\ruLine\let\SWl\ldLine\let\SEl\rdLine\def\nNWl{\luLine +(2,3)}\def\nNEl{\ruLine(2,3)}%%ascii +\def\sSWl{\ldLine(2,3)}\def\sSEl{\rdLine(2,3)}%%ascii +\def\wNWl{\luLine(3,2)}\def\eNEl{\ruLine(3,2)}%%ascii +\def\wSWl{\ldLine(3,2)}\def\eSEl{\rdLine(3,2)}%%ascii +\def\NNWl{\luLine(2,4)}\def\NNEl{\ruLine(2,4)}%%ascii +\def\SSWl{\ldLine(2,4)}\def\SSEl{\rdLine(2,4)}%%ascii +\def\WNWl{\luLine(4,2)}\def\ENEl{\ruLine(4,2)}%%ascii +\def\WSWl{\ldLine(4,2)}\def\ESEl{\rdLine(4,2)}%%ascii +\def\NNNWl{\luLine(2,6)}\def\NNNEl{\ruLine(2,6)}%%ascii +\def\SSSWl{\ldLine(2,6)}\def\SSSEl{\rdLine(2,6)}%%ascii +\def\WWNWl{\luLine(6,2)}\def\EENEl{\ruLine(6,2)}%%ascii +\def\WWSWl{\ldLine(6,2)}\def\EESEl{\rdLine(6,2)}%%ascii + +\let\NWld\luDots\let\NEld\ruDots\let\SWld\ldDots\let\SEld\rdDots\def\nNWld{% +\luDots(2,3)}\def\nNEld{\ruDots(2,3)}%%ascii +\def\sSWld{\ldDots(2,3)}\def\sSEld{\rdDots(2,3)}%%ascii +\def\wNWld{\luDots(3,2)}\def\eNEld{\ruDots(3,2)}%%ascii +\def\wSWld{\ldDots(3,2)}\def\eSEld{\rdDots(3,2)}%%ascii +\def\NNWld{\luDots(2,4)}\def\NNEld{\ruDots(2,4)}%%ascii +\def\SSWld{\ldDots(2,4)}\def\SSEld{\rdDots(2,4)}%%ascii +\def\WNWld{\luDots(4,2)}\def\ENEld{\ruDots(4,2)}%%ascii +\def\WSWld{\ldDots(4,2)}\def\ESEld{\rdDots(4,2)}%%ascii +\def\NNNWld{\luDots(2,6)}\def\NNNEld{\ruDots(2,6)}%%ascii +\def\SSSWld{\ldDots(2,6)}\def\SSSEld{\rdDots(2,6)}%%ascii +\def\WWNWld{\luDots(6,2)}\def\EENEld{\ruDots(6,2)}%%ascii +\def\WWSWld{\ldDots(6,2)}\def\EESEld{\rdDots(6,2)}%%ascii + +\let\NWe\luEmbed\let\NEe\ruEmbed\let\SWe\ldEmbed\let\SEe\rdEmbed\def\nNWe{% +\luEmbed(2,3)}\def\nNEe{\ruEmbed(2,3)}%%ascii +\def\sSWe{\ldEmbed(2,3)}\def\sSEe{\rdEmbed(2,3)}%%ascii +\def\wNWe{\luEmbed(3,2)}\def\eNEe{\ruEmbed(3,2)}%%ascii +\def\wSWe{\ldEmbed(3,2)}\def\eSEe{\rdEmbed(3,2)}%%ascii +\def\NNWe{\luEmbed(2,4)}\def\NNEe{\ruEmbed(2,4)}%%ascii +\def\SSWe{\ldEmbed(2,4)}\def\SSEe{\rdEmbed(2,4)}%%ascii +\def\WNWe{\luEmbed(4,2)}\def\ENEe{\ruEmbed(4,2)}%%ascii +\def\WSWe{\ldEmbed(4,2)}\def\ESEe{\rdEmbed(4,2)}%%ascii +\def\NNNWe{\luEmbed(2,6)}\def\NNNEe{\ruEmbed(2,6)}%%ascii +\def\SSSWe{\ldEmbed(2,6)}\def\SSSEe{\rdEmbed(2,6)}%%ascii +\def\WWNWe{\luEmbed(6,2)}\def\EENEe{\ruEmbed(6,2)}%%ascii +\def\WWSWe{\ldEmbed(6,2)}\def\EESEe{\rdEmbed(6,2)}%%ascii + +\let\NWo\luOnto\let\NEo\ruOnto\let\SWo\ldOnto\let\SEo\rdOnto\def\nNWo{\luOnto +(2,3)}\def\nNEo{\ruOnto(2,3)}%%ascii +\def\sSWo{\ldOnto(2,3)}\def\sSEo{\rdOnto(2,3)}%%ascii +\def\wNWo{\luOnto(3,2)}\def\eNEo{\ruOnto(3,2)}%%ascii +\def\wSWo{\ldOnto(3,2)}\def\eSEo{\rdOnto(3,2)}%%ascii +\def\NNWo{\luOnto(2,4)}\def\NNEo{\ruOnto(2,4)}%%ascii +\def\SSWo{\ldOnto(2,4)}\def\SSEo{\rdOnto(2,4)}%%ascii +\def\WNWo{\luOnto(4,2)}\def\ENEo{\ruOnto(4,2)}%%ascii +\def\WSWo{\ldOnto(4,2)}\def\ESEo{\rdOnto(4,2)}%%ascii +\def\NNNWo{\luOnto(2,6)}\def\NNNEo{\ruOnto(2,6)}%%ascii +\def\SSSWo{\ldOnto(2,6)}\def\SSSEo{\rdOnto(2,6)}%%ascii +\def\WWNWo{\luOnto(6,2)}\def\EENEo{\ruOnto(6,2)}%%ascii +\def\WWSWo{\ldOnto(6,2)}\def\EESEo{\rdOnto(6,2)}%%ascii + +\let\NWod\luDotsonto\let\NEod\ruDotsonto\let\SWod\ldDotsonto\let\SEod +\rdDotsonto\def\nNWod{\luDotsonto(2,3)}\def\nNEod{\ruDotsonto(2,3)}%%ascii +\def\sSWod{\ldDotsonto(2,3)}\def\sSEod{\rdDotsonto(2,3)}%%ascii +\def\wNWod{\luDotsonto(3,2)}\def\eNEod{\ruDotsonto(3,2)}%%ascii +\def\wSWod{\ldDotsonto(3,2)}\def\eSEod{\rdDotsonto(3,2)}%%ascii +\def\NNWod{\luDotsonto(2,4)}\def\NNEod{\ruDotsonto(2,4)}%%ascii +\def\SSWod{\ldDotsonto(2,4)}\def\SSEod{\rdDotsonto(2,4)}%%ascii +\def\WNWod{\luDotsonto(4,2)}\def\ENEod{\ruDotsonto(4,2)}%%ascii +\def\WSWod{\ldDotsonto(4,2)}\def\ESEod{\rdDotsonto(4,2)}%%ascii +\def\NNNWod{\luDotsonto(2,6)}\def\NNNEod{\ruDotsonto(2,6)}%%ascii +\def\SSSWod{\ldDotsonto(2,6)}\def\SSSEod{\rdDotsonto(2,6)}%%ascii +\def\WWNWod{\luDotsonto(6,2)}\def\EENEod{\ruDotsonto(6,2)}%%ascii +\def\WWSWod{\ldDotsonto(6,2)}\def\EESEod{\rdDotsonto(6,2)}%%ascii + +%%======================================================================% +%% % +%% (25) MISCELLANEOUS % +%% % +%%======================================================================% + +\def\labelstyle{%% +\ifincommdiag%% +\textstyle%% +\else%% +\scriptstyle%% +\fi}%% +\let\objectstyle\displaystyle + +\newdiagramgrid{pentagon}{0.618034,0.618034,1,1,1,1,0.618034,0.618034}{1.% +17557,1.17557,1.902113,1.902113} + +\newdiagramgrid{perspective}{0.75,0.75,1.1,1.1,0.9,0.9,0.95,0.95,0.75,0.75}{0% +.75,0.75,1.1,1.1,0.9,0.9} + +\diagramstyle[%%ascii open square bracket +dpi=300,%% office laserwriters are usually 300 dots per inch +vmiddle,nobalance,%% vertical and horizontal positioning +loose,%% allow rows and columns to stretch +thin,%% line10 arrows; default rule thickness (TeXbook p447) +pilespacing=10pt,% +%% parallel vertical separation (horizontals: half this) +shortfall=4pt,%% distance between arrowheads and their targets +%% The following are defaulted on entry to the diagram itself. +%% l>=2em minimum length of horizontal arrow shafts in text +%% l>=1em ditto in diagrams +%% size=3em cell size +%% heads=LaTeX arrowheads +]%%ascii close square bracket + +%% process options to LaTeX2e's \usepackage[options]{diagrams} +\ifx\ProcessOptions\CD@qK\else\CD@PK\ProcessOptions\relax\CD@FF\CD@e\fi\fi + +%%============================== THE END ==================================== +\CD@vE\message{| >>>>>>>> POSTSCRIPT MODE (DVIPS) IS NOW THE DEFAULT <<<<<<<<% +<<<<|}\message{|(DVI mode has not been supported since 1992 and produces +inferior|}\message{|results which are completely unsuitable for publication. +However,|}\message{|if you really still need it, you can still get it by +loading the |}\message{|package using ``\string\usepackage[UglyObsolete]{% +diagrams}'' instead. ) |}\else\message{| >>>>>>>> USING UGLY OBSOLETE DVI CODE +- PLEASE STOP <<<<<<<<<<<<|}\message{|(DVI mode has not been supported since +1992 and produces inferior|}\message{|results which are completely unsuitable +for publication - Please |}\message{|use the PostScript or PDF mode instead, +for much better results.)|}\fi\cdrestoreat +%% restore old category code for @ etc +\message{===================================================================}% +%% This is the end of Paul Taylor's commutative diagrams package. + diff --git a/macros/generic/diagrams/taylor/V3,93.tex b/macros/generic/diagrams/taylor/V3,93.tex new file mode 100644 index 0000000000..1969460bb1 --- /dev/null +++ b/macros/generic/diagrams/taylor/V3,93.tex @@ -0,0 +1,1912 @@ +\message{==================================================================}% +\message{<Paul Taylor's commutative diagrams - version 3.93, 9 June 2009>}%% +%% +%% This code runs the LaTeX \ProvidesPackage command iff it is defined. +%% included at the request of Michael Downes <mjd@ams.org> March 2002. +%% Put \listfiles in your LaTeX preamble to see what this is for. +\expandafter\ifx\csname ProvidesPackage\endcsname\relax\toks0=\expandafter{% +\fi\ProvidesPackage{diagrams}[2008/10/15 v3.93 Paul Taylor's commutative +diagrams]%% +\toks0=\bgroup}%% +%%======================================================================% +%% TeX macros for drawing category-theoretic diagrams % +%% % +%% Paul Taylor % +%% % +%% www.PaulTaylor.EU/diagrams % +%% www.ctan.org/tex-archive/macros/generic/diagrams/taylor/ % +%% % +%% PLEASE READ THE MANUAL! % +%% % +%% Please ensure that you are registered with me as a user so that % +%% you can be informed of future releases. Any electronic mail % +%% message with "commutative" or "diagram" in the subject line % +%% (such as your request for the package, a question about it, or % +%% even an otherwise blank message) automatically registers you. % +%% % +%% % +%% CONTENTS: % +%% (O) corruption-sensitive hacks (to approx line 330) % +%% Arrow components & commands - starts approx line 1240 % +%% (22) auxillary macros for adjustment of components % +%% (23) bits of arrows (\rhvee etc) % +%% (24) arrow commands (\rTo etc) % +%% (25) miscellaneous % +%% Apart from these five sections, the rest is intended to be totally % +%% meaningless in the undocumented version, which is approximately % +%% 1913 lines long. Please do not waste trees by printing it out. % +%% % +%% COPYRIGHT NOTICE: % +%% This package may be copied and used freely for any academic % +%% (not commercial or military) purpose, on condition that it % +%% is not altered in any way, and that an acknowledgement is % +%% included in any published work making substantial use of it. % +%% % +%% IT IS SUPPLIED "AS IS", WITHOUT WARRANTY, EXPRESS OR IMPLIED. % +%% % +%% If you are doing something where mistakes cost money (or where % +%% success brings financial profit) then you must use commercial % +%% software, not this package. In any case, please remember to % +%% keep several backup copies of all files, and check everything % +%% visually before sending final copy to the publishers. % +%% % +%% You may use this package as a (substantial) aid to writing an % +%% academic research or text book on condition that % +%% (i) you contact me at a suitable time to ensure that you have % +%% an up-to-date version (and any infelicities can be fixed), % +%% (ii) you send me a copy of the book when it's published. % +%% % +%% HISTORY % +%% 3.93 Released 9 June 2009 % +%% Added support for XeTeX, with help from Apostolos Syropoulos. % +%% 3.92 Released 31 December 2007 % +%% 3.91 Released 31 August 2006 % +%% Renamed "noPostScript" option as "UglyObsolete". % +%% 3.90 Released 11 April 2004 % +%% use PostScript=Rokicki not pure DVI by default % +%% 3.89 Released 7 July 2002 % +%% Added support for pdftex, which is recognised automatically. % +%% 3.88 Released 1 September 2000 % +%% Square hook tail: \newarrow{SquareInto}{sqhook}---> % +%% 3.87 Released 1 September 1999 % +%% This version was used for the final 1200dpi PS copy of my book % +%% ``Practical Foundations of Mathematics'' (Cambridge Univ Press) % +%% see http://www.PaulTaylor.EU/Practical_Foundations % +%% 3.86 Released 1 September 1998 % +%% New options hug and nohug in PostScript mode: [PS,nohug] uses % +%% PS for the arrows without rotating the labels, but the way of % +%% calculating the actual position of these horizontal labels on % +%% will remain subject to alteration for some period of time --- % +%% please send me examples if you feel that adjustment is needed. % +%% % +%% midvshaft and snake for vertical arrows % +%% New option [gap=width] (default=shortfall) to use instead of % +%% ~{\;} on horizontals and PS diagonals, as this caused ^ and _ % +%% labels to be moved too far away from the shaft. % +%% Added >-> and <-< heads and tails, same as >> and << but the % +%% shaft goes *through* the extra arrowhead. % +%% 3.85 Released 20 August 1997 % +%% New option [crab=distance] shifts horizontals and PS diagonals % +%% transversally by the specified distance (positive=upward). % +%% New option [snake=distance] shifts midshaft horizontals and % +%% PS diagonals longitudinally by the specified distance. % +%% New option [leftflush], like [flushleft] but reckons alignment % +%% from multiple verticals, or from text if there's no vertical. % +%% Most of the history has been suppressed from the user version. % +%% 3.83 Released 18 May 1995 % +%% "dotted" option (set dot filler on maps) % +%% Parallel maps (\pile) outside diagrams stretch correctly. % +%% Option "LaTeXeqno" uses LaTeX's equation number and style % +%% for "eqno"; LaTeX's \label command picks this up. % +%% Suppress warnings & 2nd pass errors with "silent" option. % +%% 3.81 Second alpha release 18 July 1994 % +%% \overprint{text} sets text in maths and overprints it in the % +%% current cell, centered in the column irrespective of other stuff% +%% "repositionpullbacks" option uses this for \SEpbk etc % +%% \newdiagramgrid declaration, grid option and pentagon grid. % +%% 3.80 Alpha release for adjusted diagonals 15 July 1994. % +%% Introduced landscape and portrait options. % +%% Diagonals adjusted to meet their endpoints, at last!!!! % +%% 3.28 Released 30 November 1993 % +%% Peter Freyd's \puncture symbol provided. % +%% 3.25 Released 30 January 1993 % +%% LaTeX heads made default (unless \tenln undefined, when vee) % +%% Circle, cross, little vee, little black triangle heads. % +%% First-use warning when defaulted diagonal components are used. % +%% AMSTEX emulation - works at least when amstex not present. % +%% 3.24 Release 7 Sept 1992 advertised to users. % +%% PostScript option introduced: % +%% LaTeX, vee, curlyvee, triangle & blacktriangle heads & tails % +%% TPIC option introduced as an alternative to \LaTeX@make@line. % +%% Postscript arrows (basic code). % +%% Implemented \newarrow \newarrowhead etc. % +%% Horizontal arrows outside diagram can stretch by wordspacing. % +%% Added < and > for labels on left and right of arrow; % +%% 3.16 (20.7.90) as mass mailed; only have mangled version % +%% -- all following version numbers are post-facto -- % +%% 3 (Jan 90) stretching vertical arrows % +%% 2 (Sept 89) horizontals stretch to objects; "superscript" labels % +%% 1 (1987) horizontal arrows stretch to edge of cell % +%% 0 (1986) implementation of Knuth's TeXercise 18.46 for my thesis % +%%======================================================================% + +%%======================================================================% +%% % +%% (1) CORRUPTION-SENSITIVE HACKS % +%% % +%%======================================================================% + +%% CORRUPTION & \catcode WARNING + +%% BITNET (IBM) machines may corrupt certain important characters +%% in transmission by electronic mail: +%% 0123456789=digits, abcdefghijklmnopqrstuvwxyz=lowers, +%% ABCDEFGHIJKLMNOPQRSTUVWXYZ=uppers, @=at (internal names), +%% {}=curly braces (grouping), \=backslash (keywords), +%% %=percent (comment), #=hash/sharp (argument), +=plus, -=minus, +%% <>=angle brackets (relations \ifnum,\ifdim), ==equals, +%% ,=comma, .=dot, :=colon, ;=semicolon, =space +%% $=dollar (maths) is only used in the "bits of maps" section + +%% The following characters are marked by a comment including the word "ASCII", +%% except in comments and messages: +%% &=and (alignment), ~=tilde, |=vertical, []=square brackets, +%% ^=caret (superscript), _=underline (subscript), +%% "=double quote (hex), ()=round brackets, +%% /=slash, ?=query, !=pling/bang, +%% The following are no longer flagged: +%% `=grave/backquote (catcodes), '=acute/single quote (octal), + +%% The \catcode's marked * are assumed for reading this file: +%% \=0* {=1* }=2* $=3 &=4 return=5* #=6 ^=7 _=8 ignored=9* +%% space=10* letter=11* other=12 active=13 %=14* invalid=15 +%% If you want to load this package inside Stallman's "texinfo", you must do +%%% @catcode`@\=0 \catcode`\%=14 \input diagrams \catcode`\%=12 \catcode`\\=13 +%% and then use @diagram @rTo @\ @enddiagram etc. (braces {} stay the same). +%% Also need @catcode`@&=4. + +%%*** You *MUST NOT* use the internal commands (with names beginning \CD@)**** + +%% don't load me twice! +\ifx\diagram\isundefined\else\message{WARNING: the \string\diagram\space +command is already defined and will not be loaded again}\expandafter\endinput +\fi + +%% make @ letter, saving its old code to restore at the end of this file +%%% look for this on the last line of the file if you think something's missing! +%% the other \catcode assignments are to make it work with texinfo. +\edef\cdrestoreat{%% +\noexpand\catcode`\noexpand\@=\the\catcode`\@%% +\noexpand\catcode`\noexpand\#=\the\catcode`\#%% +\noexpand\catcode`\noexpand\$=\the\catcode`\$%% +\noexpand\catcode`\noexpand\<=\the\catcode`\<%% +\noexpand\catcode`\noexpand\>=\the\catcode`\>%% +\noexpand\catcode`\noexpand\:=\the\catcode`\:%% Johannes L. Braams's +\noexpand\catcode`\noexpand\;=\the\catcode`\;%% Babel languages package +\noexpand\catcode`\noexpand\!=\the\catcode`\!%% makes these \active. +\noexpand\catcode`\noexpand\?=\the\catcode`\?%% +\noexpand\catcode`\noexpand\+=\the\catcode'53%% texinfo @+ is @outer@active +}\catcode`\@=11 \catcode`\#=6 \catcode`\<=12 \catcode`\>=12 \catcode'53=12 +\catcode`\:=12 \catcode`\;=12 \catcode`\!=12 \catcode`\?=12 + +%% Change y to n if pool_size in your implementation of TeX is small. +%% This is reasonable if you have a small ("personal") computer, but if you +%%% have a sun, dec, hp, ... workstation or a mainframe, complain to your local +%% system manager and get him/her to install a version of TeX with bigger +%% parameters. The "hash size" (number of command names) gets you next. +\ifx\diagram@help@messages\CD@qK\let\diagram@help@messages y\fi + +%% The following macro is used to include literal PostScript commands in the +%% DVI file for rotation, etc. Since this goes beyond standard TeX, it is +%%% dependent on the convention used by your local DVI-to-PostScript translator. +%% Choose whichever line applies to the program used at your site, or, if +%% yours is not listed, consult the manual, experiment with this macro and +%% (please) tell me what is needed to make it work. +%% +%% +%%% dvips (Tomas Rokicki, Radical Eye) labrea.stanford.edu /pub/dvips9999.tar.Z +%% CTAN: dviware/dvips +\def\cdps@Rokicki#1{\special{ps:#1}}\let\cdps@dvips\cdps@Rokicki\let +\cdps@RadicalEye\cdps@Rokicki\let\CD@HB\cdps@Rokicki\let\CD@IK\cdps@Rokicki +\let\CD@HB\cdps@Rokicki%% +%% I'm not sure that the rest work. +%% +%% dvitps (Stephan Bechtolsheim, Integrated Computer Systems) +%% arthur.cs.purdue.edu /pub/TeXPS-9.99.tar.Z +\def\cdps@Bechtolsheim#1{\special{dvitps: Literal "#1"}}% +%% ASCII two dbl quotes +\let\cdps@dvitps\cdps@Bechtolsheim\let\cdps@IntegratedComputerSystems +\cdps@Bechtolsheim%% +%% dvitops (James Clark) +%% CTAN: dviware/dvitops +\def\cdps@Clark#1{\special{dvitops: inline #1}}%% +\let\cdps@dvitops\cdps@Clark%% +%% OzTeX (Andrew Trevorrow) cannot be used +\let\cdps@OzTeX\empty\let\cdps@oztex\empty\let\cdps@Trevorrow\empty%% +%% dvi3ps (Kevin Coombes) +%% CTAN: dviware/dvi2ps/dvi3ps +\def\cdps@Coombes#1{\special{ps-string #1}}%% +%% psprint (Trevorrow) CTAN: dviware/psprint +%% dvi2ps (Senn) CTAN: dviware/dvi2ps +%% psdvi (Elwell) CTAN: dviware/dvi2ps/psdvi + +\count@=\year\multiply\count@12 \advance\count@\month%% +\ifnum\count@>24144 %% (December 2011) +\message{***********************************************************}%%ascii +\message{! YOU HAVE AN OUT OF DATE VERSION OF COMMUTATIVE DIAGRAMS! *}%% +\message{! it expired in December 2009 and is time-bombed for April *}%% +\message{! You may get an up to date version of this package from *}%%ascii +\message{! either www.ctan.org or www.PaulTaylor.EU/diagrams/ *}%% +\message{***********************************************************}%%ascii +\ifnum\count@>24147 %% (March 2012) +\errhelp{You may press RETURN and carry on for the time being.}\message{! It +is embarrassing to see papers in conference proceedings}\message{! and +journals containing bugs which I had fixed years before.}\message{! It is easy +to obtain and install a new version, which will}\errmessage{! remain +compatible with your files. Please get it NOW.}\fi\fi + +\def\CD@DE{\global\let}\def\CD@RH{\outer\def} + +%% safe names for braces, tab (&) and maths ($), as commands and for messages +{\escapechar\m@ne\xdef\CD@o{\string\{}\xdef\CD@yC{\string\}}%% +%% +%% three ASCII ampersands (ands) (&&&) appear on the next line +\catcode`\&=4 \CD@DE\CD@Q=&\xdef\CD@S{\string\&}%%ascii three ands +%% +%% ASCII ^ and _ each appear twice on next line +%% six ASCII dollars ($$$$$$) appear on the next two lines. +\catcode`\$=3 \CD@DE\CD@k=$\CD@DE\CD@ND=$%%ascii three dollars +\xdef\CD@nC{\string\$}\gdef\CD@LG{$$}%%ascii three dollars +%% +%% two ASCII underlines (__) appear on the next line. +\catcode`\_=8 \CD@DE\CD@lJ=_%%ascii two underlines +%% +%% eight ASCII carets (^^^^^^^^) appear on the next three lines. +\obeylines\catcode`\^=7 \CD@DE\@super=^%%ascii two carets +\ifnum\newlinechar=10 \gdef\CD@uG{^^J}%%ascii two carets +\else\ifnum\newlinechar=13 \gdef\CD@uG{^^M}%%ascii two carets +\else\ifnum\newlinechar=-1 \gdef\CD@uG{^^J}%%ascii two carets +\else\CD@DE\CD@uG\space\expandafter\message{! input error: \noexpand +\newlinechar\space is ASCII \the\newlinechar, not LF=10 or CR=13.}%% +\fi\fi\fi}%% + +%% avoid using <> (because I personally re-define them to mean \langle\rangle) +\mathchardef\lessthan='30474 \mathchardef\greaterthan='30476 + +%% LaTeX line and arrowhead font +%% the "hit return" comments show up if the font is missing. +\ifx\tenln\CD@qK%% +\font\tenln=line10\relax%% Hit return - who needs diagonals? +\fi\ifx\tenlnw\CD@qK\ifx\tenln\nullfont\let\tenlnw\nullfont\else%% +\font\tenlnw=linew10\relax%% Hit return - who needs diagonals? +\fi\fi%% + +%% report line numbers in TeX3 only +\ifx\inputlineno\CD@qK\csname newcount\endcsname\inputlineno\inputlineno\m@ne +\message{***************************************************}\message{! +Obsolete TeX (version 2). You should upgrade to *}\message{! version 3, which +has been available since 1990. *}\message{***********************************% +****************}\fi + +\def\cd@shouldnt#1{\CD@KB{* THIS (#1) SHOULD NEVER HAPPEN! *}} + +%% turn round- and square-bracketed arguments into curly-bracketed +\def\get@round@pair#1(#2,#3){#1{#2}{#3}}%%ascii round brackets () +\def\get@square@arg#1[#2]{#1{#2}}%%ascii square brackets [] +\def\CD@AE#1{\CD@PK\let\CD@DH\CD@@E\CD@@E#1,],}%%ascii sq brackets +\def\CD@m{[}\def\CD@RD{]}\def\commdiag#1{{\let\enddiagram\relax\diagram[]#1% +\enddiagram}} + +%% ASCII open square bracket occurs on next line +\def\CD@BF{{\ifx\CD@EH[\aftergroup\get@square@arg\aftergroup\CD@YH\else +\aftergroup\CD@JH\fi}}%% +\def\CD@CF#1#2{\def\CD@YH{#1}\def\CD@JH{#2}\futurelet\CD@EH\CD@BF} + +%% ASCII vertical bar (|) occurs on the next line +\def\CD@KK{|} + +\def\CD@PB{%% arguments to maps inside diagrams +\tokcase\CD@DD:\CD@y\break@args;\catcase\@super:\upper@label;\catcase\CD@lJ:% +\lower@label;\tokcase{~}:\middle@label;%%ascii tilde +\tokcase<:\CD@iF;%%ascii less-than +\tokcase>:\CD@iI;%%ascii greater-than +\tokcase(:\CD@BC;%%)%ascii open round bracket +\tokcase[:\optional@;%%]%ascii open square bracket +\tokcase.:\CD@JJ;%%ascii dot 12.7.94 +\catcase\space:\eat@space;\catcase\bgroup:\positional@;\default:\CD@@A +\break@args;\endswitch} + +\def\switch@arg{%% arguments to horizontal maps outside diagrams +\catcase\@super:\upper@label;\catcase\CD@lJ:\lower@label;\tokcase[:\optional@ +;%%]%ascii open square bracket +\tokcase.:\CD@JJ;%%ascii dot 12.7.94 % ; was : before 15.6.97 +\catcase\space:\eat@space;\catcase\bgroup:\positional@;\tokcase{~}:% +\middle@label;%%ascii tilde (questionable!) +\default:\CD@y\break@args;\endswitch} + +%% That's as much as you get to read "in clear" - the rest is private! + +\let\CD@tJ\relax\ifx\protect\CD@qK\let\protect\relax\fi\ifx\AtEndDocument +\CD@qK\def\CD@PG{\CD@gB}\def\CD@GF#1#2{}\else\def\CD@PG#1{\edef\CD@CH{#1}% +\expandafter\CD@oC\CD@CH\CD@OD}\def\CD@oC#1\CD@OD{\AtEndDocument{\typeout{% +\CD@tA: #1}}}\def\CD@GF#1#2{\gdef#1{#2}\AtEndDocument{#1}}\fi\def\CD@ZA#1#2{% +\def#1{\CD@PG{#2\CD@mD\CD@W}\CD@DE#1\relax}}\def\CD@uF#1\repeat{\def\CD@p{#1}% +\CD@OF}\def\CD@OF{\CD@p\relax\expandafter\CD@OF\fi}\def\CD@sF#1\repeat{\def +\CD@q{#1}\CD@PF}\def\CD@PF{\CD@q\relax\expandafter\CD@PF\fi}\def\CD@tF#1% +\repeat{\def\CD@r{#1}\CD@QF}\def\CD@QF{\CD@r\relax\expandafter\CD@QF\fi}\def +\CD@tG#1#2#3{\def#2{\let#1\iftrue}\def#3{\let#1\iffalse}#3}\if y% +\diagram@help@messages\def\CD@rG#1#2{\csname newtoks\endcsname#1#1=% +\expandafter{\csname#2\endcsname}}\else\csname newtoks\endcsname\no@cd@help +\no@cd@help{See the manual}\def\CD@rG#1#2{\let#1\no@cd@help}\fi\chardef\CD@lF +=1 \chardef\CD@lI=2 \chardef\CD@MH=5 \chardef\CD@tH=6 \chardef\CD@sH=7 +\chardef\CD@PC=9 \dimendef\CD@hI=2 \dimendef\CD@hF=3 \dimendef\CD@mF=4 +\dimendef\CD@mI=5 \dimendef\CD@wJ=6 \dimendef\CD@tI=8 \dimendef\CD@sI=9 +\skipdef\CD@uB=1 \skipdef\CD@NF=2 \skipdef\CD@tB=3 \skipdef\CD@ZE=4 \skipdef +\CD@JK=5 \skipdef\CD@kI=6 \skipdef\CD@kF=7 \skipdef\CD@qI=8 \skipdef\CD@pI=9 +\countdef\CD@JC=9 \countdef\CD@gD=8 \countdef\CD@A=7 \def\sdef#1#2{\def#1{#2}% +}\def\CD@L#1{\expandafter\aftergroup\csname#1\endcsname}\def\CD@RC#1{% +\expandafter\def\csname#1\endcsname}\def\CD@sD#1{\expandafter\gdef\csname#1% +\endcsname}\def\CD@vC#1{\expandafter\edef\csname#1\endcsname}\def\CD@nF#1#2{% +\expandafter\let\csname#1\expandafter\endcsname\csname#2\endcsname}\def\CD@EE +#1#2{\expandafter\CD@DE\csname#1\expandafter\endcsname\csname#2\endcsname}% +\def\CD@AK#1{\csname#1\endcsname}\def\CD@XJ#1{\expandafter\show\csname#1% +\endcsname}\def\CD@ZJ#1{\expandafter\showthe\csname#1\endcsname}\def\CD@WJ#1{% +\expandafter\showbox\csname#1\endcsname}\def\CD@tA{Commutative Diagram}\edef +\CD@kH{\string\par}\edef\CD@dC{\string\diagram}\edef\CD@HD{\string\enddiagram +}\edef\CD@EC{\string\\}\def\CD@eF{LaTeX}\ifx\@ignoretrue\CD@qK\expandafter +\CD@tG\csname if@ignore\endcsname\ignore@true\ignore@false\def\@ignoretrue{% +\global\ignore@true}\def\@ignorefalse{\global\ignore@false}\fi + +\def\CD@g{{\ifnum0=`}\fi}\def\CD@wC{\ifnum0=`{\fi}}\def\catcase#1:{\ifcat +\noexpand\CD@EH#1\CD@tJ\expandafter\CD@kC\else\expandafter\CD@dJ\fi}\def +\tokcase#1:{\ifx\CD@EH#1\CD@tJ\expandafter\CD@kC\else\expandafter\CD@dJ\fi}% +\def\CD@kC#1;#2\endswitch{#1}\def\CD@dJ#1;{}\let\endswitch\relax\def\default:% +#1;#2\endswitch{#1}\ifx\at@\CD@qK\def\at@{@}\fi\edef\CD@P{\CD@o pt\CD@yC}% +\CD@RC{\CD@P>}#1>#2>{\CD@z\rTo\sp{#1}\sb{#2}\CD@z}\CD@RC{\CD@P<}#1<#2<{\CD@z +\lTo\sp{#1}\sb{#2}\CD@z}\CD@RC{\CD@P)}#1)#2){\CD@z\rTo\sp{#1}\sb{#2}\CD@z}% +%%ascii round +\CD@RC{\CD@P(}#1(#2({\CD@z\lTo\sp{#1}\sb{#2}\CD@z}%%ascii brack +\def\CD@O{\def\endCD{\enddiagram}\CD@RC{\CD@P A}##1A##2A{\uTo<{##1}>{##2}% +\CD@z\CD@z}\CD@RC{\CD@P V}##1V##2V{\dTo<{##1}>{##2}\CD@z\CD@z}\CD@RC{\CD@P=}{% +\CD@z\hEq\CD@z}\CD@RC{\CD@P\CD@KK}{\vEq\CD@z\CD@z}\CD@RC{\CD@P\string\vert}{% +\vEq\CD@z\CD@z}\CD@RC{\CD@P.}{\CD@z\CD@z}\let\CD@z\CD@Q}\def\CD@IE{\let\tmp +\CD@JE\ifcat A\noexpand\CD@CH\else\ifcat=\noexpand\CD@CH\else\ifcat\relax +\noexpand\CD@CH\else\let\tmp\at@\fi\fi\fi\tmp}\def\CD@JE#1{\CD@nF{tmp}{\CD@P +\string#1}\ifx\tmp\relax\def\tmp{\at@#1}\fi\tmp}\def\CD@z{}\begingroup +\aftergroup\def\aftergroup\CD@T\aftergroup{\aftergroup\def\catcode`\@\active +\aftergroup @\endgroup{\futurelet\CD@CH\CD@IE}}\newcount\CD@uA\newcount\CD@vA +\newcount\CD@wA\newcount\CD@xA\newdimen\CD@OA\newdimen\CD@PA\CD@tG\CD@gE +\CD@@A\CD@y\CD@tG\CD@hE\CD@EA\CD@BA\newdimen\CD@RA\newdimen\CD@SA\newcount +\CD@yA\newcount\CD@zA\newdimen\CD@QA\newbox\CD@DA\CD@tG\CD@lE\CD@dA\CD@bA +\newcount\CD@LH\newcount\CD@TC\def\CD@V#1#2{\ifdim#1<#2\relax#1=#2\relax\fi}% +\def\CD@X#1#2{\ifdim#1>#2\relax#1=#2\relax\fi}\newdimen\CD@XH\CD@XH=1sp +\newdimen\CD@zC\CD@zC\z@\def\CD@cJ{\ifdim\CD@zC=1em\else\CD@nJ\fi}\def\CD@nJ{% +\CD@zC1em\def\CD@NC{\fontdimen8\textfont3 }\CD@@J\CD@NJ\setbox0=\vbox{\CD@t +\noindent\CD@k\null\penalty-9993\null\CD@ND\null\endgraf\setbox0=\lastbox +\unskip\unpenalty\setbox1=\lastbox\global\setbox\CD@IG=\hbox{\unhbox0\unskip +\unskip\unpenalty\setbox0=\lastbox}\global\setbox\CD@KG=\hbox{\unhbox1\unskip +\unpenalty\setbox1=\lastbox}}}\newdimen\CD@@I\CD@@I=1true in \divide\CD@@I300 +\def\CD@zH#1{\multiply#1\tw@\advance#1\ifnum#1<\z@-\else+\fi\CD@@I\divide#1% +\tw@\divide#1\CD@@I\multiply#1\CD@@I}\def\MapBreadth{\afterassignment\CD@gI +\CD@LF}\newdimen\CD@LF\newdimen\CD@oI\def\CD@gI{\CD@oI\CD@LF\CD@V\CD@@I{4% +\CD@XH}\CD@X\CD@@I\p@\CD@zH\CD@oI\ifdim\CD@LF>\z@\CD@V\CD@oI\CD@@I\fi\CD@cJ}% +\def\CD@RJ#1{\CD@zD\count@\CD@@I#1\ifnum\count@>\z@\divide\CD@@I\count@\fi +\CD@gI\CD@NJ}\def\CD@NJ{\dimen@\CD@QC\count@\dimen@\divide\count@5\divide +\count@\CD@@I\edef\CD@OC{\the\count@}}\def\CD@AJ{\CD@QJ\z@}\def\CD@QJ#1{% +\CD@tI\axisheight\advance\CD@tI#1\relax\advance\CD@tI-.5\CD@oI\CD@zH\CD@tI +\CD@sI-\CD@tI\advance\CD@tI\CD@LF}\newdimen\CD@DC\CD@DC\z@\newdimen\CD@eJ +\CD@eJ\z@\def\CD@CJ#1{\CD@sI#1\relax\CD@tI\CD@sI\advance\CD@tI\CD@LF\relax}% +\def\horizhtdp{height\CD@tI depth\CD@sI}\def\axisheight{\fontdimen22\the +\textfont\tw@}\def\script@axisheight{\fontdimen22\the\scriptfont\tw@}\def +\ss@axisheight{\fontdimen22\the\scriptscriptfont\tw@}\def\CD@NC{0.4pt}\def +\CD@VK{\fontdimen3\textfont\z@}\def\CD@UK{\fontdimen3\textfont\z@}\newdimen +\PileSpacing\newdimen\CD@nA\CD@nA\z@\def\CD@RG{\ifincommdiag1.3em\else2em\fi}% +\newdimen\CD@YB\def\CellSize{\afterassignment\CD@kB\DiagramCellHeight}% +\newdimen\DiagramCellHeight\DiagramCellHeight-\maxdimen\newdimen +\DiagramCellWidth\DiagramCellWidth-\maxdimen\def\CD@kB{\DiagramCellWidth +\DiagramCellHeight}\def\CD@QC{3em}\newdimen\MapShortFall\def\MapsAbut{% +\MapShortFall\z@\objectheight\z@\objectwidth\z@}\newdimen\CD@iA\CD@iA\z@ +\CD@tG\CD@vE\CD@aB\CD@ZB\expandafter\ifx\expandafter\iftrue\csname +ifUglyObsoleteDiagrams\endcsname\CD@ZB\else\CD@aB\fi\CD@nF{% +ifUglyObsoleteDiagrams}{relax}\newif\ifUglyObsoleteDiagrams\def\CD@nK{\CD@aB +\UglyObsoleteDiagramsfalse}\def\CD@oK{\CD@ZB\UglyObsoleteDiagramstrue}\CD@vE +\CD@nK\else\CD@oK\fi\CD@tG\CD@hK\CD@dK\CD@cK\CD@cK\def\CD@sK{\ifx\pdfoutput +\CD@qK\else\ifx\pdfoutput\relax\else\ifnum\pdfoutput>\z@\CD@pK\fi\fi\fi} \def +\CD@pK{\global\CD@dK\global\CD@aB\global\UglyObsoleteDiagramsfalse\global\let +\CD@n\empty\global\let\CD@oK\relax\global\let\CD@pK\relax\global\let\CD@sK +\relax}\def\CD@tK#1{\special{pdf: literal #1}}\ifx\pdfliteral\CD@qK\else\ifx +\pdfliteral\relax\else\let\CD@tK\pdfliteral\fi\fi\ifx\XeTeXrevision\CD@qK +\else\ifx\XeTeXrevision\relax\else\ifdim\XeTeXrevision pt<.996pt \expandafter +\message{! XeTeX version \XeTeXrevision\space does not support PDF literals, +so diagonals will not work!}\else\expandafter\message{RUNNING UNDER XETEX +\XeTeXrevision}\CD@pK\fi\fi\fi\CD@sK\def\newarrowhead{\CD@mG h\CD@BG\CD@GG>}% +\def\newarrowtail{\CD@mG t\CD@BG\CD@GG>}\def\newarrowmiddle{\CD@mG m\CD@BG +\hbox@maths\empty}\def\newarrowfiller{\CD@mG f\CD@bE\CD@MK-}\def\CD@mG#1#2#3#% +4#5#6#7#8#9{\CD@RC{r#1:#5}{#2{#6}}\CD@RC{l#1:#5}{#2{#7}}\CD@RC{d#1:#5}{#3{#8}% +}\CD@RC{u#1:#5}{#3{#9}}\CD@vC{-#1:#5}{\expandafter\noexpand\csname-#1:#4% +\endcsname\noexpand\CD@MC}\CD@vC{+#1:#5}{\expandafter\noexpand\csname+#1:#4% +\endcsname\noexpand\CD@MC}}\CD@ZA\CD@MC{\CD@eF\space diagonals are used unless +PostScript is set}\def\defaultarrowhead#1{\edef\CD@sJ{#1}\CD@@J}\def\CD@@J{% +\CD@IJ\CD@sJ<>ht\CD@IJ\CD@sJ<>th}\def\CD@IJ#1#2#3#4#5{\CD@HJ{r#4}{#3}{l#5}{#2% +}{r#4:#1}\CD@HJ{r#5}{#2}{l#4}{#3}{l#4:#1}\CD@HJ{d#4}{#3}{u#5}{#2}{d#4:#1}% +\CD@HJ{d#5}{#2}{u#4}{#3}{u#4:#1}}\def\CD@HJ#1#2#3#4#5{\begingroup\aftergroup +\CD@GJ\CD@L{#1+:#2}\CD@L{#1:#2}\CD@L{#3:#4}\CD@L{#5}\endgroup}\def\CD@GJ#1#2#% +3#4{\csname newbox\endcsname#1\def#2{\copy#1}\def#3{\copy#1}\setbox#1=\box +\voidb@x}\def\CD@sJ{}\CD@@J\def\CD@GJ#1#2#3#4{\setbox#1=#4}\ifx\tenln +\nullfont\def\CD@sJ{vee}\else\let\CD@sJ\CD@eF\fi\def\CD@xF#1#2#3{\begingroup +\aftergroup\CD@wF\CD@L{#1#2:#3#3}\CD@L{#1#2:#3}\aftergroup\CD@yF\CD@L{#1#2:#3% +-#3}\CD@L{#1#2:#3}\endgroup}\def\CD@wF#1#2{\def#1{\hbox{\rlap{#2}\kern.4% +\CD@zC#2}}}\def\CD@yF#1#2{\def#1{\hbox{\rlap{#2}\kern.4\CD@zC#2\kern-.4\CD@zC +}}}\CD@xF lh>\CD@xF rt>\CD@xF rh<\CD@xF rt<\def\CD@yF#1#2{\def#1{\hbox{\kern-% +.4\CD@zC\rlap{#2}\kern.4\CD@zC#2}}}\CD@xF rh>\CD@xF lh<\CD@xF lt>\CD@xF lt<% +\def\CD@wF#1#2{\def#1{\vbox{\vbox to\z@{#2\vss}\nointerlineskip\kern.4\CD@zC#% +2}}}\def\CD@yF#1#2{\def#1{\vbox{\vbox to\z@{#2\vss}\nointerlineskip\kern.4% +\CD@zC#2\kern-.4\CD@zC}}}\CD@xF uh>\CD@xF dt>\CD@xF dh<\CD@xF dt<\def\CD@yF#1% +#2{\def#1{\vbox{\kern-.4\CD@zC\vbox to\z@{#2\vss}\nointerlineskip\kern.4% +\CD@zC#2}}}\CD@xF dh>\CD@xF ut>\CD@xF uh<\CD@xF ut<\def\CD@BG#1{\hbox{% +\mathsurround\z@\offinterlineskip\CD@k\mkern-1.5mu{#1}\mkern-1.5mu\CD@ND}}% +\def\hbox@maths#1{\hbox{\CD@k#1\CD@ND}}\def\CD@GG#1{\hbox to\CD@LF{\setbox0=% +\hbox{\offinterlineskip\mathsurround\z@\CD@k{#1}\CD@ND}\dimen0.5\wd0\advance +\dimen0-.5\CD@oI\CD@zH{\dimen0}\kern-\dimen0\unhbox0\hss}}\def\CD@sB#1{\hbox +to2\CD@LF{\hss\offinterlineskip\mathsurround\z@\CD@k{#1}\CD@ND\hss}}\def +\CD@vF#1{\hbox{\mathsurround\z@\CD@k{#1}\CD@ND}}\def\CD@bE#1{\hbox{\kern-.15% +\CD@zC\CD@k{#1}\CD@ND\kern-.15\CD@zC}}\def\CD@MK#1{\vbox{\offinterlineskip +\kern-.2ex\CD@GG{#1}\kern-.2ex}}\def\@fillh{\xleaders\vrule\horizhtdp}\def +\@fillv{\xleaders\hrule width\CD@LF}\CD@nF{rf:-}{@fillh}\CD@nF{lf:-}{@fillh}% +\CD@nF{df:-}{@fillv}\CD@nF{uf:-}{@fillv}\CD@nF{rh:}{null}\CD@nF{rm:}{null}% +\CD@nF{rt:}{null}\CD@nF{lh:}{null}\CD@nF{lm:}{null}\CD@nF{lt:}{null}\CD@nF{dh% +:}{null}\CD@nF{dm:}{null}\CD@nF{dt:}{null}\CD@nF{uh:}{null}\CD@nF{um:}{null}% +\CD@nF{ut:}{null}\CD@nF{+h:}{null}\CD@nF{+m:}{null}\CD@nF{+t:}{null}\CD@nF{-h% +:}{null}\CD@nF{-m:}{null}\CD@nF{-t:}{null}\def\CD@@D{\hbox{\vrule height 1pt +depth-1pt width 1pt}}\CD@RC{rf:}{\CD@@D}\CD@nF{lf:}{rf:}\CD@nF{+f:}{rf:}% +\CD@RC{df:}{\CD@@D}\CD@nF{uf:}{df:}\CD@nF{-f:}{df:}\def\CD@BD{\CD@U\null +\CD@@D\null\CD@@D\null}\edef\CD@lG{\string\newarrow}\def\newarrow#1#2#3#4#5#6% +{\begingroup\edef\@name{#1}\edef\CD@oJ{#2}\edef\CD@iD{#3}\edef\CD@QG{#4}\edef +\CD@jD{#5}\edef\CD@LE{#6}\let\CD@HE\CD@sG\let\CD@FK\CD@BH\let\@x\CD@AH\ifx +\CD@oJ\CD@iD\let\CD@oJ\empty\fi\ifx\CD@LE\CD@jD\let\CD@LE\empty\fi\def\CD@LI{% +r}\def\CD@SF{l}\def\CD@IC{d}\def\CD@yJ{u}\def\CD@gH{+}\def\@m{-}\ifx\CD@iD +\CD@jD\ifx\CD@QG\CD@iD\let\CD@QG\empty\fi\ifx\CD@LE\empty\ifx\CD@iD\CD@aE\let +\@x\CD@yG\else\let\@x\CD@zG\fi\fi\else\edef\CD@a{\CD@iD\CD@oJ}\ifx\CD@a\empty +\ifx\CD@QG\CD@jD\let\CD@QG\empty\fi\fi\fi\ifmmode\aftergroup\CD@kG\else\CD@@A +\CD@oB rh{head\space\space}\CD@LE\CD@oB rf{filler}\CD@iD\CD@oB rm{middle}% +\CD@QG\ifx\CD@jD\CD@iD\else\CD@oB rf{filler}\CD@jD\fi\CD@oB rt{tail\space +\space}\CD@oJ\CD@gE\CD@HE\CD@FK\@x\CD@nG l-2+2{lu}{nw}\NorthWest\CD@nG r+2+2{% +ru}{ne}\NorthEast\CD@nG l-2-2{ld}{sw}\SouthWest\CD@nG r+2-2{rd}{se}\SouthEast +\else\aftergroup\CD@b\CD@L{r\@name}\fi\fi\endgroup}\def\CD@sG{\CD@vG\CD@LI +\CD@SF rl\Horizontal@Map}\def\CD@BH{\CD@vG\CD@IC\CD@yJ du\Vertical@Map}\def +\CD@AH{\CD@vG\CD@gH\@m+-\Vector@Map}\def\CD@yG{\CD@vG\CD@gH\@m+-\Slant@Map}% +\def\CD@zG{\CD@vG\CD@gH\@m+-\Slope@Map}\catcode`\/=\active\def\CD@vG#1#2#3#4#% +5{\CD@jG#1#3#5t:\CD@oJ/f:\CD@iD/m:\CD@QG/f:\CD@jD/h:\CD@LE//\CD@jG#2#4#5h:% +\CD@LE/f:\CD@jD/m:\CD@QG/f:\CD@iD/t:\CD@oJ//}\def\CD@jG#1#2#3#4//{\edef\CD@fG +{#2}\aftergroup\sdef\CD@L{#1\@name}\aftergroup{\aftergroup#3\CD@M#4//% +\aftergroup}}\def\CD@M#1/{\edef\CD@EH{#1}\ifx\CD@EH\empty\else\CD@L{\CD@fG#1}% +\expandafter\CD@M\fi}\catcode`\/=12 \def\CD@nG#1#2#3#4#5#6#7#8{\aftergroup +\sdef\CD@L{#6\@name}\aftergroup{\CD@L{#2\@name}\if#2#4\aftergroup\CD@CI\else +\aftergroup\CD@BI\fi\CD@L{#1\@name}% +%% ASCII round brackets and comma (,) appear on the next line +\aftergroup(\aftergroup#3\aftergroup,\aftergroup#5\aftergroup)\aftergroup}}% +\def\CD@oB#1#2#3#4{\expandafter\ifx\csname#1#2:#4\endcsname\relax\CD@y\CD@gB{% +arrow#3 "#4" undefined}\fi}\CD@rG\CD@VE{All five components must be defined +before an arrow.}\CD@rG\CD@SE{\CD@lG, unlike \string\HorizontalMap, is a +declaration.}\def\CD@b#1{\CD@YA{Arrows \string#1 etc could not be defined}% +\CD@VE}\def\CD@kG{\CD@YA{misplaced \CD@lG}\CD@SE}\def\newdiagramgrid#1#2#3{% +\CD@RC{cdgh@#1}{#2,],}%% ASCII close square bracket +\CD@RC{cdgv@#1}{#3,],}}%% ASCII close square bracket +\CD@tG\ifincommdiag\incommdiagtrue\incommdiagfalse\CD@tG\CD@@F\CD@IF\CD@HF +\newcount\CD@VA\CD@VA=0 \def\CD@yH{\CD@VA6 }\def\CD@OB{\CD@VA1 \global\CD@yA1 +\CD@DE\CD@YF\empty}\def\CD@YF{}\def\CD@nB#1{\relax\CD@MD\edef\CD@vJ{#1}% +\begingroup\CD@rE\else\ifcase\CD@VA\ifmmode\else\CD@YG\CD@E0\fi\or\CD@cE5\or +\CD@YG\CD@F5\or\CD@YG\CD@B5\or\CD@YG\CD@B5\or\CD@YG\CD@C5\or\CD@cE7\or\CD@YG +\CD@D7\fi\fi\endgroup\xdef\CD@YF{#1}}\def\CD@pB#1#2#3#4#5{\relax\CD@MD\xdef +\CD@vJ{#4}\begingroup\ifnum\CD@VA<#1 \expandafter\CD@cE\ifcase\CD@VA0\or#2\or +#3\else#2\fi\else\ifnum\CD@VA<6 \CD@tJ\CD@YG\CD@B#2\else\CD@YG\CD@G#2\fi\fi +\endgroup\CD@DE\CD@YF\CD@vJ\ifincommdiag\let\CD@ZD#5\else\let\CD@ZD\CD@LK\fi}% +\def\CD@yI{\global\CD@yA=\ifnum\CD@VA<5 1\else2\fi\relax}\def\CD@OI{\CD@VA +\CD@yA}\def\CD@cE#1{\aftergroup\CD@VA\aftergroup#1\aftergroup\relax}\def +\CD@HH{\def\CD@nB##1{\relax}\let\CD@pB\CD@FH\let\CD@yH\relax\let\CD@OB\relax +\let\CD@yI\relax\let\CD@OI\relax}\def\CD@FH#1#2#3#4#5{\ifincommdiag\let\CD@ZD +#5\else\xdef\CD@vJ{#4}\let\CD@ZD\CD@LK\fi}\def\CD@YG#1{\aftergroup#1% +\aftergroup\relax\CD@cE}\def\CD@B{\CD@YE\CD@S\CD@ME\CD@Q}\def\CD@G{\CD@YE{% +\CD@yC\CD@S}\CD@XE\CD@QD\CD@Q}\def\CD@F{\CD@YE{*\CD@S}\CD@RE\clubsuit\CD@Q}% +\def\CD@C{\CD@YE{\CD@S*\CD@S}\CD@RE\CD@Q\clubsuit\CD@Q}\def\CD@D{\CD@YE\CD@EC +\CD@TE\\}\def\CD@E{\CD@YE\CD@nC\CD@QE\CD@k}\def\CD@LK{\CD@YA{\CD@vJ\space +ignored \CD@dH}\CD@WE}\def\CD@FE{}\def\CD@d{\CD@YA{maps must never be enclosed +in braces}\CD@OE}\def\CD@dH{outside diagram}\def\CD@FC{\string\HonV, \string +\VonH\space and \string\HmeetV}\CD@rG\CD@ME{The way that horizontal and +vertical arrows are terminated implicitly means\CD@uG that they cannot be +mixed with each other or with \CD@FC.}\CD@rG\CD@XE{\string\pile\space is for +parallel horizontal arrows; verticals can just be put together in\CD@uG a cell% +. \CD@FC\space are not meaningful in a \string\pile.}\CD@rG\CD@RE{The +horizontal maps must point to an object, not each other (I've put in\CD@uG one +which you're unlikely to want). Use \string\pile\space if you want them +parallel.}\CD@rG\CD@TE{Parallel horizontal arrows must be in separate layers +of a \string\pile.}\CD@rG\CD@QE{Horizontal arrows may be used \CD@dH s, but +must still be in maths.}\CD@rG\CD@WE{Vertical arrows, \CD@FC\space\CD@dH s don% +'t know where\CD@uG where to terminate.}\CD@rG\CD@OE{This prevents them from +stretching correctly.}\def\CD@YE#1{\CD@YA{"#1" inserted \ifx\CD@YF\empty +before \CD@vJ\else between \CD@YF\ifx\CD@YF\CD@vJ s\else\space and \CD@vJ\fi +\fi}}\count@=\year\multiply\count@12 \advance\count@\month\ifnum\count@>24151 +\message{because this one expired in July 2012!}\expandafter\endinput\fi\def +\Horizontal@Map{\CD@nB{horizontal map}\CD@LC\CD@TJ\CD@qD}\def\CD@TJ{\CD@GB-% +9999 \let\CD@ZD\CD@XD\ifincommdiag\else\CD@cJ\ifinpile\else\skip2\z@ plus 1.5% +\CD@VK minus .5\CD@UK\skip4\skip2 \fi\fi\let\CD@kD\@fillh\CD@nF{fill@dot}{rf:% +.}}\def\Vector@Map{\CD@HK4}\def\Slant@Map{\CD@HK{\CD@EF255\else6\fi}}\def +\Slope@Map{\CD@HK\CD@OC}\def\CD@HK#1#2#3#4#5#6{\CD@LC\def\CD@WK{2}\def\CD@aK{% +2}\def\CD@ZK{1}\def\CD@bK{1}\let\Horizontal@Map\CD@nI\def\CD@OG{#1}\def\CD@NI +{\CD@U#2#3#4#5#6}}\def\CD@nI{\CD@TJ\CD@JB\let\CD@ZD\CD@TD\CD@qD}\CD@tG\CD@pE +\CD@rA\CD@qA\CD@rA\def\cds@missives{\CD@rA}\def\CD@TD{\CD@vE\let\CD@OG\CD@OC +\CD@x\CD@zE\CD@WF\fi\setbox0\hbox{\incommdiagfalse\CD@HI}\CD@pE\CD@aD\else +\global\CD@YC\CD@bD\fi\ifvoid6 \ifvoid7 \CD@eE\fi\fi\CD@zE\else\CD@BD\global +\CD@YC\let\CD@CG\CD@IH\CD@YD\fi\else\CD@NI\CD@MI\global\CD@YC\CD@YD\fi}\def +\CD@LC{\begingroup\dimen1=\MapShortFall\dimen2=\CD@RG\dimen5=\MapShortFall +\setbox3=\box\voidb@x\setbox6=\box\voidb@x\setbox7=\box\voidb@x\CD@pD +\mathsurround\z@\skip2\z@ plus1fill minus 1000pt\skip4\skip2 \CD@TB}\CD@tG +\CD@tE\CD@UB\CD@TB\def\CD@U#1#2#3#4#5{\let\CD@oJ#1\let\CD@iD#2\let\CD@QG#3% +\let\CD@jD#4\let\CD@LE#5\CD@TB\ifx\CD@iD\CD@jD\CD@UB\fi}\def\CD@qD#1#2#3#4#5{% +\CD@U#1#2#3#4#5\CD@tD}\def\Vertical@Map{\CD@pB433{vertical map}\CD@cD\CD@LC +\CD@GB-9995 \let\CD@kD\@fillv\CD@nF{fill@dot}{df:.}\CD@qD}\def\break@args{% +\def\CD@tD{\CD@ZD}\CD@ZD\endgroup\aftergroup\CD@FE}\def\CD@MJ{\setbox1=\CD@oJ +\setbox5=\CD@LE\ifvoid3 \ifx\CD@QG\null\else\setbox3=\CD@QG\fi\fi\CD@@G2% +\CD@iD\CD@@G4\CD@jD}\def\CD@pF#1{\ifvoid1\else\CD@oF1#1\fi\ifvoid2\else\CD@oF +2#1\fi\ifvoid3\else\CD@oF3#1\fi\ifvoid4\else\CD@oF4#1\fi\ifvoid5\else\CD@oF5#% +1\fi} \def\CD@oF#1#2{\setbox#1\vbox{\offinterlineskip\box#1\dimen@\prevdepth +\advance\dimen@-#2\relax\setbox0\null\dp0\dimen@\ht0-\dimen@\box0}}\def\CD@@G +#1#2{\ifx#2\CD@kD\setbox#1=\box\voidb@x\else\setbox#1=#2\def#2{\xleaders\box#% +1}\fi}\CD@ZA\CD@BK{\string\HorizontalMap, \string\VerticalMap\space and +\string\DiagonalMap\CD@uG are obsolete - use \CD@lG\space to pre-define maps}% +\def\HorizontalMap#1#2#3#4#5{\CD@BK\CD@nB{old horizontal map}\CD@LC\CD@TJ\def +\CD@oJ{\CD@UH{#1}}\CD@SH\CD@iD{#2}\def\CD@QG{\CD@UH{#3}}\CD@SH\CD@jD{#4}\def +\CD@LE{\CD@UH{#5}}\CD@tD}\def\VerticalMap#1#2#3#4#5{\CD@BK\CD@pB433{vertical +map}\CD@cD\CD@LC\CD@GB-9995 \let\CD@kD\@fillv\def\CD@oJ{\CD@GG{#1}}\CD@VH +\CD@iD{#2}\def\CD@QG{\CD@GG{#3}}\CD@VH\CD@jD{#4}\def\CD@LE{\CD@GG{#5}}\CD@tD}% +\def\DiagonalMap#1#2#3#4#5{\CD@BK\CD@LC\def\CD@OG{4}\let\CD@kD\CD@qK\let +\CD@ZD\CD@YD\def\CD@WK{2}\def\CD@aK{2}\def\CD@ZK{1}\def\CD@bK{1}\def\CD@QG{% +\CD@vF{#3}}\ifPositiveGradient\let\mv\raise\def\CD@oJ{\CD@vF{#5}}\def\CD@iD{% +\CD@vF{#4}}\def\CD@jD{\CD@vF{#2}}\def\CD@LE{\CD@vF{#1}}\else\let\mv\lower\def +\CD@oJ{\CD@vF{#1}}\def\CD@iD{\CD@vF{#2}}\def\CD@jD{\CD@vF{#4}}\def\CD@LE{% +\CD@vF{#5}}\fi\CD@tD}\def\CD@aE{-}\def\CD@AD{\empty}\def\CD@SH{\CD@EG\CD@bE +\CD@aE\@fillh}\def\CD@VH{\CD@EG\CD@MK\CD@KK\@fillv}\def\CD@EG#1#2#3#4#5{\def +\CD@CH{#5}\ifx\CD@CH#2\let#4#3\else\let#4\null\ifx\CD@CH\empty\else\ifx\CD@CH +\CD@AD\else\let#4\CD@CH\fi\fi\fi}\def\CD@UH#1{\hbox{\mathsurround\z@ +\offinterlineskip\def\CD@CH{#1}\ifx\CD@CH\empty\else\ifx\CD@CH\CD@AD\else +\CD@k\mkern-1.5mu{\CD@CH}\mkern-1.5mu\CD@ND\fi\fi}}\def\CD@yD#1#2{\setbox#1=% +\hbox\bgroup\setbox0=\hbox{\CD@k\labelstyle()\CD@ND}%% ASCII round brackets +\setbox1=\null\ht1\ht0\dp1\dp0\box1 \kern.1\CD@zC\CD@k\bgroup\labelstyle +\aftergroup\CD@LD\CD@xD}\def\CD@LD{\CD@ND\kern.1\CD@zC\egroup\CD@tD}\def +\CD@xD{\futurelet\CD@EH\CD@mJ}\def\CD@mJ{%% qualifiers on label arguments +\catcase\bgroup:\CD@v;\catcase\egroup:\missing@label;\catcase\space:\CD@TF;% +\tokcase[:\CD@XF;%%]%ascii close square bracket +\default:\CD@zJ;\endswitch}\def\CD@v{\let\CD@MD\CD@c\let\CD@CH}\def\CD@zJ#1{% +\let\CD@UF\egroup{\let\actually@braces@missing@around@macro@in@label\CD@ZH +\let\CD@MD\CD@xC\let\CD@UF\CD@VF#1% +\actually@braces@missing@around@macro@in@label}\CD@UF}\def +\actually@braces@missing@around@macro@in@label{\let\CD@CH=}\def\missing@label +{\egroup\CD@YA{missing label}\CD@PE}\def\CD@xC{\egroup\missing@label}\outer +\def\CD@ZH{}\def\CD@UF{}\def\CD@VF{\CD@wC\CD@UF}\def\CD@MD{}\def\CD@XF{\let +\CD@N\CD@xD\get@square@arg\CD@AE}\CD@rG\CD@PE{The text which has just been +read is not allowed within map labels.}\def\CD@c{\egroup\CD@YA{missing \CD@yC +\space inserted after label}\CD@PE}\def\upper@label{\CD@oD\CD@yD6}\def +\lower@label{\def\positional@{\CD@@A\break@args}\CD@yD7}\def\middle@label{% +\CD@yD3}\CD@tG\CD@yE\CD@pD\CD@oD\def\CD@iF{\ifPositiveGradient\CD@tJ +\expandafter\upper@label\else\expandafter\lower@label\fi}\def\CD@iI{% +\ifPositiveGradient\CD@tJ\expandafter\lower@label\else\expandafter +\upper@label\fi}\def\positional@{\CD@gB{labels as positional arguments are +obsolete}\CD@yE\CD@tJ\expandafter\upper@label\else\expandafter\lower@label\fi +-}\def\CD@tD{\futurelet\CD@EH\switch@arg}\def\eat@space{\afterassignment +\CD@tD\let\CD@EH= }\def\CD@TF{\afterassignment\CD@xD\let\CD@EH= }\def\CD@BC{% +\get@round@pair\CD@uD}\def\CD@uD#1#2{\def\CD@WK{#1}\def\CD@aK{#2}\CD@tD}\def +\optional@{\let\CD@N\CD@tD\get@square@arg\CD@AE}\def\CD@JJ.{\CD@sC\CD@tD}\def +\CD@sC{\let\CD@iD\fill@dot\let\CD@jD\fill@dot\def\CD@MI{\let\CD@iD\dfdot\let +\CD@jD\dfdot}}\def\CD@MI{}\def\CD@@E#1,{\CD@nH#1,\begingroup\ifx\@name\CD@RD +\CD@FF\aftergroup\CD@e\fi\aftergroup\CD@jC\else\expandafter\def\expandafter +\CD@RF\expandafter{\csname\@name\endcsname}\expandafter\CD@vD\CD@RF\CD@KD\ifx +\CD@RF\empty\aftergroup\CD@pC\expandafter\aftergroup\csname\CD@FB\@name +\endcsname\expandafter\aftergroup\csname\CD@FB @\@name\endcsname\else\gdef +\CD@GE{#1}\CD@gB{\string\relax\space inserted before `[\CD@GE'}\message{(I was +trying to read this as a \CD@tA\ option.)}\aftergroup\CD@H\fi\fi\endgroup}% +\def\CD@vD#1#2\CD@KD{\def\CD@RF{#2}}\def\CD@jC{\let\CD@CH\CD@N\let\CD@N\relax +\CD@CH}\def\CD@H#1],{%% ASCII close square bracket +\CD@jC\relax\def\CD@RF{#1}\ifx\CD@RF\empty\def\CD@RF{[\CD@GE]}% +%% ASCII open and close square bracket +\else\def\CD@RF{[\CD@GE,#1]}%% ASCII open and close square bracket +\fi\CD@RF}\def\CD@pC#1#2{\ifx#2\CD@qK\ifx#1\CD@qK\CD@gB{option `\@name' +undefined}\else#1\fi\else\CD@FF\expandafter#2\CD@GK\CD@PK\else\CD@QK\fi\fi +\CD@DH}\CD@tG\CD@FF\CD@QK\CD@PK\def\CD@nH#1,{\CD@FF\ifx\CD@GK\CD@qK\CD@e\else +\expandafter\CD@oH\CD@GK,#1,(,),(,)[]% +%%ASCII 5commas two pairs round, pair square +\fi\fi\CD@FF\else\CD@mH#1==,\fi}\def\CD@e{\CD@gB{option `\@name' needs (x,y) +value}\CD@PK\let\@name\empty}\def\CD@mH#1=#2=#3,{\def\@name{#1}\def\CD@GK{#2}% +\def\CD@RF{#3}\ifx\CD@RF\empty\let\CD@GK\CD@qK\fi}% +%% ASCII 2commas 2pair round, pair square on next line +\def\CD@oH#1(#2,#3)#4,(#5,#6)#7[]{\def\CD@GK{{#2}{#3}}\def\CD@RF{#1#4#5#6}% +\ifx\CD@RF\empty\def\CD@RF{#7}\ifx\CD@RF\empty\CD@e\fi\else\CD@e\fi}\def +\CD@FB{cds@}\let\CD@N\relax\def\CD@zD#1{\ifx\CD@GK\CD@qK\CD@gB{option `\@name +' needs a value}\else#1\CD@GK\relax\fi}\def\CD@BE#1#2{\ifx\CD@GK\CD@qK#1#2% +\relax\else#1\CD@GK\relax\fi}\def\cds@@showpair#1#2{\message{x=#1,y=#2}}\def +\cds@@diagonalbase#1#2{\edef\CD@ZK{#1}\edef\CD@bK{#2}}\def\CD@DI#1{\def\CD@CH +{#1}\CD@nF{@x}{cdps@#1}\ifx\CD@CH\empty\CD@f\CD@CH{cannot be used}\else\ifx +\CD@CH\relax\CD@f\CD@CH{unknown}\else\let\CD@IK\@x\fi\fi}\def\CD@f#1#2{\CD@gB +{PostScript translator `#1' #2}}\def\CD@PH{}\def\CD@PJ{\CD@fA\edef\CD@PH{% +\noexpand\CD@KB{\@name\space ignored within maths}}}\def\diagramstyle{\CD@cJ +\let\CD@N\relax\CD@CF\CD@AE\CD@AE}\let\diagramsstyle\diagramstyle\CD@tG\CD@sE +\CD@SB\CD@RB\CD@tG\CD@qE\CD@EB\CD@DB\CD@tG\CD@oE\CD@pA\CD@oA\CD@tG\CD@iE +\CD@HA\CD@GA\CD@HA\CD@tG\CD@jE\CD@JA\CD@IA\CD@tG\CD@kE\CD@LA\CD@KA\CD@tG +\CD@EF\CD@DK\CD@CK\CD@tG\CD@rE\CD@JB\CD@IB\CD@tG\CD@mE\CD@gA\CD@fA\CD@tG +\CD@nE\CD@kA\CD@jA\CD@tG\CD@AF\CD@iG\CD@hG\CD@RC{cds@ }{}\CD@RC{cds@}{}\CD@RC +{cds@1em}{\CellSize1\CD@zC}\CD@RC{cds@1.5em}{\CellSize1.5\CD@zC}\CD@RC{cds@2% +em}{\CellSize2\CD@zC}\CD@RC{cds@2.5em}{\CellSize2.5\CD@zC}\CD@RC{cds@3em}{% +\CellSize3\CD@zC}\CD@RC{cds@3.5em}{\CellSize3.5\CD@zC}\CD@RC{cds@4em}{% +\CellSize4\CD@zC}\CD@RC{cds@4.5em}{\CellSize4.5\CD@zC}\CD@RC{cds@5em}{% +\CellSize5\CD@zC}\CD@RC{cds@6em}{\CellSize6\CD@zC}\CD@RC{cds@7em}{\CellSize7% +\CD@zC}\CD@RC{cds@8em}{\CellSize8\CD@zC}\def\cds@abut{\MapsAbut\dimen1\z@ +\dimen5\z@}\def\cds@alignlabels{\CD@IA\CD@KA}\def\cds@amstex{\ifincommdiag +\CD@O\else\def\CD{\diagram[amstex]}%%ascii square brackets [] +\fi\CD@T\catcode`\@\active}\def\cds@b{\let\CD@dB\CD@bB}\def\cds@balance{\let +\CD@hA\CD@AA}\let\cds@bottom\cds@b\def\cds@center{\cds@vcentre\cds@nobalance}% +\let\cds@centre\cds@center\def\cds@centerdisplay{\CD@HA\CD@PJ\cds@balance}% +\let\cds@centredisplay\cds@centerdisplay\def\cds@crab{\CD@BE\CD@DC{.5% +\PileSpacing}}\CD@RC{cds@crab-}{\CD@DC-.5\PileSpacing}\CD@RC{cds@crab+}{% +\CD@DC.5\PileSpacing}\CD@RC{cds@crab++}{\CD@DC1.5\PileSpacing}\CD@RC{cds@crab% +--}{\CD@DC-1.5\PileSpacing}\def\cds@defaultsize{\CD@BE{\let\CD@QC}{3em}\CD@NJ +}\def\cds@displayoneliner{\CD@DB}\let\cds@dotted\CD@sC\def\cds@dpi{\CD@RJ{1% +truein}}\def\cds@dpm{\CD@RJ{100truecm}}\let\CD@XA\CD@qK\def\cds@eqno{\let +\CD@XA\CD@GK\let\CD@EJ\empty}\def\cds@fixed{\CD@qA}\CD@tG\CD@fE\CD@J\CD@I\def +\cds@flushleft{\CD@I\CD@GA\CD@PJ\cds@nobalance\CD@BE\CD@nA\CD@nA}\def\cds@gap +{\CD@AJ\setbox3=\null\ht3=\CD@tI\dp3=\CD@sI\CD@BE{\wd3=}\MapShortFall} \def +\cds@grid{\ifx\CD@GK\CD@qK\let\h@grid\relax\let\v@grid\relax\else\CD@nF{% +h@grid}{cdgh@\CD@GK}\CD@nF{v@grid}{cdgv@\CD@GK}\ifx\h@grid\relax\CD@gB{% +unknown grid `\CD@GK'}\else\CD@WB\fi\fi}\let\h@grid\relax\let\v@grid\relax +\def\cds@gridx{\ifx\CD@GK\CD@qK\else\cds@grid\fi\let\CD@CH\h@grid\let\h@grid +\v@grid\let\v@grid\CD@CH}\def\cds@h{\CD@zD\DiagramCellHeight}\def\cds@hcenter +{\let\CD@hA\CD@aA}\let\cds@hcentre\cds@hcenter\def\cds@heads{\CD@BE{\let +\CD@sJ}\CD@sJ\CD@@J\CD@vE\else\ifx\CD@sJ\CD@eF\else\CD@MC\fi\fi}\let +\cds@height\cds@h\let\cds@hmiddle\cds@balance\def\cds@htriangleheight{\CD@BE +\DiagramCellHeight\DiagramCellHeight\DiagramCellWidth1.73205% +\DiagramCellHeight}\def\cds@htrianglewidth{\CD@BE\DiagramCellWidth +\DiagramCellWidth\DiagramCellHeight.57735\DiagramCellWidth}\CD@tG\CD@zE\CD@eE +\CD@dE\CD@eE\def\cds@hug{\CD@eE} \def\cds@inline{\CD@gA\let\CD@PH\empty}\def +\cds@inlineoneliner{\CD@EB}\CD@RC{cds@l>}{\CD@zD{\let\CD@RG}\dimen2=\CD@RG}% +\def\cds@labelstyle{\CD@zD{\let\labelstyle}}\def\cds@landscape{\CD@kA}\def +\cds@large{\CellSize5\CD@zC}\let\CD@EJ\empty\def\CD@FJ{\refstepcounter{% +equation}\def\CD@XA{\hbox{\@eqnnum}}}\def\cds@LaTeXeqno{\let\CD@EJ\CD@FJ}\def +\cds@lefteqno{\CD@pA}\def\cds@leftflush{\cds@flushleft\CD@J}\def +\cds@leftshortfall{\CD@zD{\dimen1 }}\def\cds@lowershortfall{% +\ifPositiveGradient\cds@leftshortfall\else\cds@rightshortfall\fi}\def +\cds@loose{\CD@VB}\def\cds@midhshaft{\CD@JA}\def\cds@midshaft{\CD@JA}\def +\cds@midvshaft{\CD@LA}\def\cds@moreoptions{\CD@@A}\let\cds@nobalance +\cds@hcenter\def\cds@nohcheck{\CD@HH}\def\cds@nohug{\CD@dE} \def +\cds@nooptions{\def\CD@aC{\CD@WD}}\let\cds@noorigin\cds@nobalance\def +\cds@nopixel{\CD@@I4\CD@XH\CD@cJ}\def\cds@UO{\CD@oK\global\let\CD@n\empty}% +\def\cds@UglyObsolete{\cds@UO\let\cds@PS\empty}\def\CD@rK#1{\CD@gB{option `#1% +' renamed as `UglyObsolete'}}\def\cds@noPostScript{\CD@rK{noPostScript}}\def +\cds@noPS{\CD@rK{noPostScript}}\def\cds@notextflow{\CD@RB}\def\cds@noTPIC{% +\CD@CK}\def\cds@objectstyle{\CD@zD{\let\objectstyle}}\def\cds@origin{\let +\CD@hA\CD@iB}\def\cds@p{\CD@zD\PileSpacing}\let\cds@pilespacing\cds@p\def +\cds@pixelsize{\CD@zD\CD@@I\CD@gI}\def\cds@portrait{\CD@jA}\def +\cds@PostScript{\CD@nK\global\let\CD@n\empty\CD@BE\CD@DI\empty}\def\cds@PS{% +\CD@nK\global\let\CD@n\empty}\CD@GF\CD@n{\typeout{\CD@tA: try the PostScript +option for better results}}\def\cds@repositionpullbacks{\let\make@pbk\CD@fH +\let\CD@qH\CD@pH}\def\cds@righteqno{\CD@oA}\def\cds@rightshortfall{\CD@zD{% +\dimen5 }}\def\cds@ruleaxis{\CD@zD{\let\axisheight}}\def\cds@cmex{\let\CD@GG +\CD@sB\let\CD@QJ\CD@CJ}\def\cds@s{\cds@height\DiagramCellWidth +\DiagramCellHeight}\def\cds@scriptlabels{\let\labelstyle\scriptstyle}\def +\cds@shortfall{\CD@zD\MapShortFall\dimen1\MapShortFall\dimen5\MapShortFall}% +\def\cds@showfirstpass{\CD@BE{\let\CD@nD}\z@}\def\cds@silent{\def\CD@KB##1{}% +\def\CD@gB##1{}}\let\cds@size\cds@s\def\cds@small{\CellSize2\CD@zC}\def +\cds@snake{\CD@BE\CD@eJ\z@}\def\cds@t{\let\CD@dB\CD@fB}\def\cds@textflow{% +\CD@SB\CD@PJ}\def\cds@thick{\let\CD@rF\tenlnw\CD@LF\CD@NC\CD@BE\MapBreadth{2% +\CD@LF}\CD@@J}\def\cds@thin{\let\CD@rF\tenln\CD@BE\MapBreadth{\CD@NC}\CD@@J}% +\def\cds@tight{\CD@WB}\let\cds@top\cds@t\def\cds@TPIC{\CD@DK}\def +\cds@uppershortfall{\ifPositiveGradient\cds@rightshortfall\else +\cds@leftshortfall\fi}\def\cds@vcenter{\let\CD@dB\CD@cB}\let\cds@vcentre +\cds@vcenter\def\cds@vtriangleheight{\CD@BE\DiagramCellHeight +\DiagramCellHeight\DiagramCellWidth.577035\DiagramCellHeight}\def +\cds@vtrianglewidth{\CD@BE\DiagramCellWidth\DiagramCellWidth +\DiagramCellHeight1.73205\DiagramCellWidth}\def\cds@vmiddle{\let\CD@dB\CD@eB}% +\def\cds@w{\CD@zD\DiagramCellWidth}\let\cds@width\cds@w\def\diagram{\relax +\protect\CD@bC}\def\enddiagram{\protect\CD@SG}\def\CD@bC{\CD@g\CD@uI +\incommdiagtrue\edef\CD@wI{\the\CD@NB}\global\CD@NB\z@\boxmaxdepth\maxdimen +\everycr{}\CD@sK\everymath{}\everyhbox{}\ifx\pdfsyncstop\CD@qK\else +\pdfsyncstop\fi\CD@aC}\def\CD@aC{\CD@y\let\CD@N\CD@ZC\CD@CF\CD@AE\CD@WD}\def +\CD@ZC{\CD@gE\expandafter\CD@aC\else\expandafter\CD@WD\fi}\def\CD@WD{\let +\CD@EH\relax\CD@nE\CD@vE\else\CD@hK\else\CD@KB{landscape ignored without +PostScript}\CD@jA\fi\fi\fi\CD@EJ\setbox2=\vbox\bgroup\CD@JF\CD@VD}\def\CD@cH{% +\CD@nE\CD@fB\else\CD@dB\fi\CD@hA\nointerlineskip\setbox0=\null\ht0-\CD@pI\dp0% +\CD@pI\wd0\CD@kI\box0 \global\CD@QA\CD@kF\global\CD@yA\CD@XB\ifx\CD@NK\CD@qK +\global\CD@RA\CD@kF\else\global\CD@RA\CD@NK\fi\egroup\CD@zF\CD@nE\setbox2=% +\hbox to\dp2{\vrule height\wd2 depth\CD@QA width\z@\global\CD@QA\ht2\ht2\z@ +\dp2\z@\wd2\z@\CD@hK\CD@tK{q 0 1 -1 0 0 0 cm}\else\global\CD@iG\CD@IK{0 1 +bturn}\fi\box2\CD@gK\hss}\CD@DB\fi\ifnum\CD@yA=1 \else\CD@DB\fi\global +\@ignorefalse\CD@mE\leavevmode\fi\ifvmode\CD@TA\else\ifmmode\CD@PH\CD@GI\else +\CD@qE\CD@gA\fi\ifinner\CD@gA\fi\CD@mE\CD@GI\else\CD@sE\CD@QB\else\CD@TA\fi +\fi\fi\fi\CD@dD}\def\CD@dD{\global\CD@NB\CD@wI\relax\CD@xE\global\CD@ID\else +\aftergroup\CD@mC\fi\if@ignore\aftergroup\ignorespaces\fi\CD@wC\ignorespaces}% +\def\CD@fB{\advance\CD@pI\dimen1\relax}\def\CD@eB{\advance\CD@pI.5\dimen1% +\relax}\def\CD@bB{}\def\CD@cB{\CD@fB\advance\CD@pI\CD@YB\divide\CD@pI2 +\advance\CD@pI-\axisheight\relax}\def\CD@aA{}\def\CD@iB{\CD@kF\z@}\def\CD@AA{% +\ifdim\dimen2>\CD@kF\CD@kF\dimen2 \else\dimen2\CD@kF\CD@kI\dimen0 \advance +\CD@kI\dimen2 \fi}\def\CD@QB{\skip0\z@\relax\loop\skip1\lastskip\ifdim\skip1>% +\z@\unskip\advance\skip0\skip1 \repeat\vadjust{\prevdepth\dp\strutbox\penalty +\predisplaypenalty\vskip\abovedisplayskip\CD@UA\penalty\postdisplaypenalty +\vskip\belowdisplayskip}\ifdim\skip0=\z@\else\hskip\skip0 \global\@ignoretrue +\fi}\def\CD@TA{\CD@LG\kern-\displayindent\CD@UA\CD@LG\global\@ignoretrue}\def +\CD@UA{\hbox to\hsize{\CD@fE\ifdim\CD@RA=\z@\else\advance\CD@QA-\CD@RA\setbox +2=\hbox{\kern\CD@RA\box2}\fi\fi\setbox1=\hbox{\ifx\CD@XA\CD@qK\else\CD@k +\CD@XA\CD@ND\fi}\CD@oE\CD@iE\else\advance\CD@QA\wd1 \fi\wd1\z@\box1 \fi\dimen +0\wd2 \advance\dimen0\wd1 \advance\dimen0-\hsize\ifdim\dimen0>-\CD@nA\CD@HA +\fi\advance\dimen0\CD@QA\ifdim\dimen0>\z@\CD@KB{wider than the page by \the +\dimen0 }\CD@HA\fi\CD@iE\hss\else\CD@V\CD@QA\CD@nA\fi\CD@GI\hss\kern-\wd1\box +1 }}\def\CD@GI{\CD@AF\CD@@F\else\CD@SC\global\CD@hG\fi\fi\kern\CD@QA\box2 }% +\CD@tG\CD@wE\CD@YC\CD@XC\def\CD@JF{\CD@cJ\ifdim\DiagramCellHeight=-\maxdimen +\DiagramCellHeight\CD@QC\fi\ifdim\DiagramCellWidth=-\maxdimen +\DiagramCellWidth\CD@QC\fi\global\CD@XC\CD@IF\let\CD@FE\empty\let\CD@z\CD@Q +\let\overprint\CD@eH\let\CD@s\CD@rJ\let\enddiagram\CD@ED\let\\\CD@cC\let\par +\CD@jH\let\CD@MD\empty\let\switch@arg\CD@PB\let\shift\CD@iA\baselineskip +\DiagramCellHeight\lineskip\z@\lineskiplimit\z@\mathsurround\z@\tabskip\z@ +\CD@OB}\def\CD@VD{\penalty-123 \begingroup\CD@jA\aftergroup\CD@K\halign +\bgroup\global\advance\CD@NB1 \vadjust{\penalty1}\global\CD@FA\z@\CD@OB\CD@j#% +#\CD@DD\CD@Q\CD@Q\CD@OI\CD@j##\CD@DD\cr}\def\CD@ED{\CD@MD\CD@GD\crcr\egroup +\global\CD@JD\endgroup}\def\CD@j{\global\advance\CD@FA1 \futurelet\CD@EH\CD@i +}\def\CD@i{\ifx\CD@EH\CD@DD\CD@tJ\hskip1sp plus 1fil \relax\let\CD@DD\relax +\CD@vI\else\hfil\CD@k\objectstyle\let\CD@FE\CD@d\fi}\def\CD@DD{\CD@MD\relax +\CD@yI\CD@vI\global\CD@QA\CD@iA\penalty-9993 \CD@ND\hfil\null\kern-2\CD@QA +\null}\def\CD@cC{\cr}\def\across#1{\span\omit\mscount=#1 \global\advance +\CD@FA\mscount\global\advance\CD@FA\m@ne\CD@sF\ifnum\mscount>2 \CD@fJ\repeat +\ignorespaces}\def\CD@fJ{\relax\span\omit\advance\mscount\m@ne}\def\CD@qJ{% +\ifincommdiag\ifx\CD@iD\@fillh\ifx\CD@jD\@fillh\ifdim\dimen3>\z@\else\ifdim +\dimen2>93\CD@@I\ifdim\dimen2>18\p@\ifdim\CD@LF>\z@\count@\CD@bJ\advance +\count@\m@ne\ifnum\count@<\z@\count@20\let\CD@aJ\CD@uJ\fi\xdef\CD@bJ{\the +\count@}\fi\fi\fi\fi\fi\fi\fi}\def\CD@cG#1{\vrule\horizhtdp width#1\dimen@ +\kern2\dimen@}\def\CD@uJ{\rlap{\dimen@\CD@@I\CD@V\dimen@{.182\p@}\CD@zH +\dimen@\advance\CD@tI\dimen@\CD@cG0\CD@cG0\CD@cG2\CD@cG6\CD@cG6\CD@cG2\CD@cG0% +\CD@cG0\CD@cG2\CD@cG6\CD@cG0\CD@cG0\CD@cG2\CD@cG2\CD@cG6\CD@cG0\CD@cG0\CD@cG2% +\CD@cG6\CD@cG2\CD@cG2\CD@cG0\CD@cG0}}\def\CD@bJ{10}\def\CD@aJ{}\def\CD@XD{% +\CD@gE\CD@TB\fi\CD@x\CD@WF\CD@HI}\def\CD@x{\CD@QJ\CD@DC\CD@MJ\ifdim\CD@DC=\z@ +\else\CD@pF\CD@DC\fi\ifvoid3 \setbox3=\null\ht3\CD@tI\dp3\CD@sI\else\CD@V{\ht +3}\CD@tI\CD@V{\dp3}\CD@sI\fi\dimen3=.5\wd3 \ifdim\dimen3=\z@\CD@tE\else\dimen +3-\CD@XH\fi\else\CD@TB\fi\CD@V{\dimen2}{\wd7}\CD@V{\dimen2}{\wd6}\CD@qJ +\advance\dimen2-2\dimen3 \dimen4.5\dimen2 \dimen2\dimen4 \advance\dimen2% +\CD@eJ\advance\dimen4-\CD@eJ\advance\dimen2-\wd1 \advance\dimen4-\wd5 \ifvoid +2 \else\CD@V{\ht3}{\ht2}\CD@V{\dp3}{\dp2}\CD@V{\dimen2}{\wd2}\fi\ifvoid4 \else +\CD@V{\ht3}{\ht4}\CD@V{\dp3}{\dp4}\CD@V{\dimen4}{\wd4}\fi\advance\skip2\dimen +2 \advance\skip4\dimen4 \CD@tE\advance\skip2\skip4 \dimen0\dimen5 \advance +\dimen0\wd5 \skip3-\skip4 \advance\skip3-\dimen0 \let\CD@jD\empty\else\skip3% +\z@\relax\dimen0\z@\fi}\def\CD@WF{\offinterlineskip\lineskip.2\CD@zC\ifvoid6 +\else\setbox3=\vbox{\hbox to2\dimen3{\hss\box6\hss}\box3}\fi\ifvoid7 \else +\setbox3=\vtop{\box3 \hbox to2\dimen3{\hss\box7\hss}}\fi}\def\CD@HI{\kern +\dimen1 \box1 \CD@aJ\CD@iD\hskip\skip2 \kern\dimen0 \ifincommdiag\CD@jE +\penalty1\fi\kern\dimen3 \penalty\CD@GB\hskip\skip3 \null\kern-\dimen3 \else +\hskip\skip3 \fi\box3 \CD@jD\hskip\skip4 \box5 \kern\dimen5}\def\CD@MF{\ifnum +\CD@LH>\CD@TC\CD@V{\dimen1}\objectheight\CD@V{\dimen5}\objectheight\else\CD@V +{\dimen1}\objectwidth\CD@V{\dimen5}\objectwidth\fi}\def\CD@Y{\begingroup +\ifdim\dimen7=\z@\kern\dimen8 \else\ifdim\dimen6=\z@\kern\dimen9 \else\dimen5% +\dimen6 \dimen6\dimen9 \CD@KJ\dimen4\dimen2 \CD@dG{\dimen4}\dimen6\dimen5 +\dimen7\dimen8 \CD@KJ\CD@iC{\dimen2}\ifdim\dimen2<\dimen4 \kern\dimen2 \else +\kern\dimen4 \fi\fi\fi\endgroup}\def\CD@jJ{\CD@JI\setbox\z@\hbox{\lower +\axisheight\hbox to\dimen2{\CD@DF\ifPositiveGradient\dimen8\ht\CD@MH\dimen9% +\CD@mI\else\dimen8\dp3 \dimen9\dimen1 \fi\else\dimen8 \ifPositiveGradient +\objectheight\else\z@\fi\dimen9\objectwidth\fi\advance\dimen8 +\ifPositiveGradient-\fi\axisheight\CD@Y\unhbox\z@\CD@DF\ifPositiveGradient +\dimen8\dp3 \dimen9\dimen0 \else\dimen8\ht\CD@MH\dimen9\CD@mF\fi\else\dimen8 +\ifPositiveGradient\z@\else\objectheight\fi\dimen9\objectwidth\fi\advance +\dimen8 \ifPositiveGradient\else-\fi\axisheight\CD@Y}}}\def\CD@bD{\dimen6 +\CD@aK\DiagramCellHeight\dimen7 \CD@WK\DiagramCellWidth\CD@jJ +\ifPositiveGradient\advance\dimen7-\CD@ZK\DiagramCellWidth\else\dimen7 \CD@ZK +\DiagramCellWidth\dimen6\z@\fi\advance\dimen6-\CD@bK\DiagramCellHeight\CD@mK +\setbox0=\rlap{\kern-\dimen7 \lower\dimen6\box\z@}\ht0\z@\dp0\z@\raise +\axisheight\box0 }\def\CD@mK{\setbox0\hbox{\ht\z@\z@\dp\z@\z@\wd\z@\z@\CD@hK +\expandafter\CD@tK{q \CD@eK\space\CD@lK\space\CD@kK\space\CD@eK\space0 0 cm}% +\else\global\CD@iG\CD@eD{\the\CD@TC\space\ifPositiveGradient\else-\fi\the +\CD@LH\space bturn}\fi\box\z@\CD@gK}}\def\CD@vB{\advance\CD@hF-\CD@mI\CD@wJ +\CD@hF\advance\CD@wJ\CD@hI\ifvoid\CD@sH\ifdim\CD@wJ<.1em\ifnum\CD@gD=\@m\else +\CD@aG h\CD@wJ<.1em:objects overprint:\CD@FA\CD@gD\fi\fi\else\ifhbox\CD@sH +\CD@SK\else\CD@TK\fi\advance\CD@wJ\CD@mI\CD@bH{-\CD@mI}{\box\CD@sH}{\CD@wJ}% +\z@\fi\CD@hF-\CD@mF\CD@gD\CD@FA\CD@hI\z@}\def\CD@SK{\setbox\CD@sH=\hbox{% +\unhbox\CD@sH\unskip\unpenalty}\setbox\CD@tH=\hbox{\unhbox\CD@tH\unskip +\unpenalty}\setbox\CD@sH=\hbox to\CD@wJ{\CD@OA\wd\CD@sH\unhbox\CD@sH\CD@PA +\lastkern\unkern\ifdim\CD@PA=\z@\CD@UB\advance\CD@OA-\wd\CD@tH\else\CD@TB\fi +\ifnum\lastpenalty=\z@\else\CD@JA\unpenalty\fi\kern\CD@PA\ifdim\CD@hF<\CD@OA +\CD@JA\fi\ifdim\CD@hI<\wd\CD@tH\CD@JA\fi\CD@jE\CD@hI\CD@wJ\advance\CD@hI-% +\CD@OA\advance\CD@hI\wd\CD@tH\ifdim\CD@hI<2\wd\CD@tH\CD@aG h\CD@hI<2\wd\CD@tH +:arrow too short:\CD@FA\CD@gD\fi\divide\CD@hI\tw@\CD@hF\CD@wJ\advance\CD@hF-% +\CD@hI\fi\CD@tE\kern-\CD@hI\fi\hbox to\CD@hI{\unhbox\CD@tH}\CD@HG}}\CD@tG +\ifinpile\inpiletrue\inpilefalse\inpilefalse\def\pile{\protect\CD@UJ\protect +\CD@uH}\def\CD@uH#1{\CD@l#1\CD@QD}\def\CD@UJ{\CD@nB{pile}\setbox0=\vtop +\bgroup\aftergroup\CD@lD\inpiletrue\let\CD@FE\empty\let\pile\CD@KF\let\CD@QD +\CD@PD\let\CD@GD\CD@FD\CD@yH\baselineskip.5\PileSpacing\lineskip.1\CD@zC +\relax\lineskiplimit\lineskip\mathsurround\z@\tabskip\z@\let\\\CD@wH}\def +\CD@l{\CD@DE\CD@YF\empty\halign\bgroup\hfil\CD@k\let\CD@FE\CD@d\let\\\CD@vH##% +\CD@MD\CD@ND\hfil\CD@Q\CD@R##\cr}\CD@rG\CD@NE{pile only allows one column.}% +\CD@rG\CD@UE{you left it out!}\def\CD@R{\CD@QD\CD@Q\relax\CD@YA{missing \CD@yC +\space inserted after \string\pile}\CD@NE}\def\CD@PD{\CD@MD\crcr\egroup +\egroup}\def\CD@GD{\CD@MD}\def\CD@FD{\CD@MD\relax\CD@QD\CD@YA{missing \CD@yC +\space inserted between \string\pile\space and \CD@HD}\CD@UE}\def\CD@QD{% +\CD@MD}\def\CD@lD{\vbox{\dimen1\dp0 \unvbox0 \setbox0=\lastbox\advance\dimen1% +\dp0 \nointerlineskip\box0 \nointerlineskip\setbox0=\null\dp0.5\dimen1\ht0-% +\dp0 \box0}\ifincommdiag\CD@tJ\penalty-9998 \fi\xdef\CD@YF{pile}}\def\CD@vH{% +\cr}\def\CD@wH{\noalign{\skip@\prevdepth\advance\skip@-\baselineskip +\prevdepth\skip@}}\def\CD@KF#1{#1}\def\CD@TK{\setbox\CD@sH=\vbox{\unvbox +\CD@sH\setbox1=\lastbox\setbox0=\box\voidb@x\CD@tF\setbox\CD@sH=\lastbox +\ifhbox\CD@sH\CD@rC\repeat\unvbox0 \global\CD@QA\CD@ZE}\CD@ZE\CD@QA}\def +\CD@rC{\CD@jE\setbox\CD@sH=\hbox{\unhbox\CD@sH\unskip\setbox\CD@sH=\lastbox +\unskip\unhbox\CD@sH}\ifdim\CD@wJ<\wd\CD@sH\CD@aG h\CD@wJ<\wd\CD@sH:arrow in +pile too short:\CD@FA\CD@gD\else\setbox\CD@sH=\hbox to\CD@wJ{\unhbox\CD@sH}% +\fi\else\CD@gJ\fi\setbox0=\vbox{\box\CD@sH\nointerlineskip\ifvoid0 \CD@tJ\box +1 \else\vskip\skip0 \unvbox0 \fi}\skip0=\lastskip\unskip}\def\CD@gJ{\penalty7 +\noindent\unhbox\CD@sH\unskip\setbox\CD@sH=\lastbox\unskip\unhbox\CD@sH +\endgraf\setbox\CD@tH=\lastbox\unskip\setbox\CD@tH=\hbox{\CD@JG\unhbox\CD@tH +\unskip\unskip\unpenalty}\ifcase\prevgraf\cd@shouldnt P\or\ifdim\CD@wJ<\wd +\CD@tH\CD@aG h\CD@wJ<\wd\CD@sH:object in pile too wide:\CD@FA\CD@gD\setbox +\CD@sH=\hbox to\CD@wJ{\hss\unhbox\CD@tH\hss}\else\setbox\CD@sH=\hbox to\CD@wJ +{\hss\kern\CD@hF\unhbox\CD@tH\kern\CD@hI\hss}\fi\or\setbox\CD@sH=\lastbox +\unskip\CD@SK\else\cd@shouldnt Q\fi\unskip\unpenalty}\def\CD@cD{\CD@MJ\ifvoid +3 \setbox3=\null\ht3\axisheight\dp3-\ht3 \dimen3.5\CD@LF\else\dimen4\dp3 +\dimen3.5\wd3 \setbox3=\CD@GG{\box3}\dp3\dimen4 \ifdim\ht3=-\dp3 \else\CD@TB +\fi\fi\dimen0\dimen3 \advance\dimen0-.5\CD@LF\setbox0\null\ht0\ht3\dp0\dp3\wd +0\wd3 \ifvoid6\else\setbox6\hbox{\unhbox6\kern\dimen0\kern2pt}\dimen0\wd6 \fi +\ifvoid7\else\setbox7\hbox{\kern2pt\kern\dimen3\unhbox7}\dimen3\wd7 \fi +\setbox3\hbox{\ifvoid6\else\kern-\dimen0\unhbox6\fi\unhbox3 \ifvoid7\else +\unhbox7\kern-\dimen3\fi}\ht3\ht0\dp3\dp0\wd3\wd0 \CD@tE\dimen4=\ht\CD@MH +\advance\dimen4\dp5 \advance\dimen4\dimen1 \let\CD@jD\empty\else\dimen4\ht3 +\fi\setbox0\null\ht0\dimen4 \offinterlineskip\setbox8=\vbox spread2ex{\kern +\dimen5 \box1 \CD@iD\vfill\CD@tE\else\kern\CD@eJ\fi\box0}\ht8=\z@\setbox9=% +\vtop spread2ex{\kern-\ht3 \kern-\CD@eJ\box3 \CD@jD\vfill\box5 \kern\dimen1}% +\dp9=\z@\hskip\dimen0plus.0001fil \box9 \kern-\CD@LF\box8 \CD@kE\penalty2 \fi +\CD@tE\penalty1 \fi\kern\PileSpacing\kern-\PileSpacing\kern-.5\CD@LF\penalty +\CD@GB\null\kern\dimen3}\def\CD@cI{\ifhbox\CD@VA\CD@KB{clashing verticals}\ht +\CD@MH.5\dp\CD@VA\dp\CD@MH-\ht5 \CD@yB\ht\CD@MH\z@\dp\CD@MH\z@\fi\dimen1\dp +\CD@VA\CD@xA\prevgraf\unvbox\CD@VA\CD@wA\lastpenalty\unpenalty\setbox\CD@VA=% +\null\setbox\CD@lI=\hbox{\CD@JG\unhbox\CD@lI\unskip\unpenalty\dimen0\lastkern +\unkern\unkern\unkern\kern\dimen0 \CD@HG}\setbox\CD@lF=\hbox{\unhbox\CD@lF +\dimen0\lastkern\unkern\unkern\global\CD@QA\lastkern\unkern\kern\dimen0 }% +\CD@tF\ifnum\CD@xA>4 \CD@zI\repeat\unskip\unskip\advance\CD@mF.5\wd\CD@VA +\advance\CD@mF\wd\CD@lF\advance\CD@mI.5\wd\CD@VA\advance\CD@mI\wd\CD@lI\ifnum +\CD@FA=\CD@lA\CD@OA.5\wd\CD@VA\edef\CD@NK{\the\CD@OA}\fi\setbox\CD@VA=\hbox{% +\kern-\CD@mF\box\CD@lF\unhbox\CD@VA\box\CD@lI\kern-\CD@mI\penalty\CD@wA +\penalty\CD@NB}\ht\CD@VA\dimen1 \dp\CD@VA\z@\wd\CD@VA\CD@tB\CD@vB}\def\CD@zI{% +\ifdim\wd\CD@lF<\CD@QA\setbox\CD@lF=\hbox to\CD@QA{\CD@JG\unhbox\CD@lF}\fi +\advance\CD@xA\m@ne\setbox\CD@VA=\hbox{\box\CD@lF\unhbox\CD@VA}\unskip\setbox +\CD@lF=\lastbox\setbox\CD@lF=\hbox{\unhbox\CD@lF\unskip\unpenalty\dimen0% +\lastkern\unkern\unkern\global\CD@QA\lastkern\unkern\kern\dimen0 }}\def\CD@yB +{\dimen1\dp\CD@VA\ifhbox\CD@VA\CD@xB\else\CD@zB\fi\setbox\CD@VA=\vbox{% +\penalty\CD@NB}\dp\CD@VA-\dp\CD@MH\wd\CD@VA\CD@tB}\def\CD@zB{\unvbox\CD@VA +\CD@wA\lastpenalty\unpenalty\ifdim\dimen1<\ht\CD@MH\CD@aG v\dimen1<\ht\CD@MH:% +rows overprint:\CD@NB\CD@wA\fi}\def\CD@xB{\dimen0=\ht\CD@VA\setbox\CD@VA=% +\hbox\bgroup\advance\dimen1-\ht\CD@MH\unhbox\CD@VA\CD@xA\lastpenalty +\unpenalty\CD@wA\lastpenalty\unpenalty\global\CD@RA-\lastkern\unkern\setbox0=% +\lastbox\CD@tF\setbox\CD@VA=\hbox{\box0\unhbox\CD@VA}\setbox0=\lastbox\ifhbox +0 \CD@kJ\repeat\global\CD@SA-\lastkern\unkern\global\CD@QA\CD@JK\unhbox\CD@VA +\egroup\CD@JK\CD@QA\CD@bH{\CD@SA}{\box\CD@VA}{\CD@RA}{\dimen1}}\def\CD@kJ{% +\setbox0=\hbox to\wd0\bgroup\unhbox0 \unskip\unpenalty\dimen7\lastkern\unkern +\ifnum\lastpenalty=1 \unpenalty\CD@UB\else\CD@TB\fi\ifnum\lastpenalty=2 +\unpenalty\dimen2.5\dimen0\advance\dimen2-.5\dimen1\advance\dimen2-% +\axisheight\else\dimen2\z@\fi\setbox0=\lastbox\dimen6\lastkern\unkern\setbox1% +=\lastbox\setbox0=\vbox{\unvbox0 \CD@tE\kern-\dimen1 \else\ifdim\dimen2=\z@ +\else\kern\dimen2 \fi\fi}\ifdim\dimen0<\ht0 \CD@aG v\dimen0<\ht0:upper part of +vertical too short:{\CD@tE\CD@NB\else\CD@wA\fi}\CD@xA\else\setbox0=\vbox to% +\dimen0{\unvbox0}\fi\setbox1=\vtop{\unvbox1}\ifdim\dimen1<\dp1 \CD@aG v\dimen +1<\dp1:lower part of vertical too short:\CD@NB\CD@wA\else\setbox1=\vtop to% +\dimen1{\ifdim\dimen2=\z@\else\kern-\dimen2 \fi\unvbox1 }\fi\box1 \kern\dimen +6 \box0 \kern\dimen7 \CD@HG\global\CD@QA\CD@JK\egroup\CD@JK\CD@QA\relax}% +\countdef\CD@u=14 \newcount\CD@CA\newcount\CD@XB\newcount\CD@NB\let\CD@LB +\insc@unt\newcount\CD@FA\newcount\CD@lA\let\CD@mA\CD@XB\newcount\CD@MB\CD@tG +\CD@DF\CD@bI\CD@aI\CD@aI\def\CD@nD{-1}\def\CD@K{\ifnum\CD@nD<\z@\else +\begingroup\scrollmode\showboxdepth\CD@nD\showboxbreadth\maxdimen\showlists +\endgroup\fi\CD@bI\CD@zF\CD@CA=\CD@u\advance\CD@CA1 \CD@XB=\CD@CA\ifnum\CD@NB +=1 \CD@JA\fi\advance\CD@XB\CD@NB\dimen1\z@\skip0\z@\count@=\insc@unt\advance +\count@\CD@u\divide\count@2 \ifnum\CD@XB>\count@\CD@KB{The diagram has too +many rows! It can't be reformatted.}\else\CD@NG\CD@WI\fi\CD@cH}\def\CD@NG{% +\CD@NB\CD@CA\CD@uF\ifnum\CD@NB<\CD@XB\setbox\CD@NB\box\voidb@x\advance\CD@NB1% +\relax\repeat\CD@NB\CD@CA\skip\z@\z@\CD@uF\CD@GB\lastpenalty\unpenalty\ifnum +\CD@GB>\z@\CD@KE\repeat\ifnum\CD@GB=-123 \CD@tJ\unpenalty\else\cd@shouldnt D% +\fi\ifx\v@grid\relax\else\CD@NB\CD@XB\advance\CD@NB\m@ne\expandafter\CD@VJ +\v@grid\fi\CD@MB\CD@mA\CD@tB\z@\CD@XG\ifx\h@grid\relax\else\expandafter\CD@LJ +\h@grid\fi\count@\CD@XB\advance\count@\m@ne\CD@YB\ht\count@}\def\CD@KE{% +\ifcase\CD@GB\or\CD@MG\else\CD@uA-\lastpenalty\unpenalty\CD@vA\lastpenalty +\unpenalty\setbox0=\lastbox\CD@WG\fi\CD@wD}\def\CD@wD{\skip1\lastskip\unskip +\advance\skip0\skip1 \ifdim\skip1=\z@\else\expandafter\CD@wD\fi}\def\CD@MG{% +\setbox0=\lastbox\CD@pI\dp0 \advance\CD@pI\skip\z@\skip\z@\z@\advance\CD@NF +\CD@pI\CD@uE\ifnum\CD@NB>\CD@CA\CD@NF\DiagramCellHeight\CD@pI\CD@NF\advance +\CD@pI-\CD@qI\fi\fi\CD@qI\ht0 \CD@NF\CD@qI\setbox\CD@NB\hbox{\unhbox\CD@NB +\unhbox0}\dp\CD@NB\CD@pI\ht\CD@NB\CD@qI\advance\CD@NB1 }\def\CD@WG{\ifnum +\CD@uA<\z@\advance\CD@uA\CD@XB\ifnum\CD@uA<\CD@CA\CD@UG\else\CD@OA\dp\CD@uA +\CD@PA\ht\CD@uA\setbox\CD@uA\hbox{\box\z@\penalty\CD@vA\penalty\CD@GB\unhbox +\CD@uA}\dp\CD@uA\CD@OA\ht\CD@uA\CD@PA\fi\else\CD@UG\fi}\def\CD@UG{\CD@KB{% +diagonal goes outside diagram (lost)}}\def\CD@fI{\advance\CD@uA\CD@XB\ifnum +\CD@uA<\CD@CA\CD@UG\else\ifnum\CD@uA=\CD@NB\CD@VG\else\ifnum\CD@uA>\CD@NB +\cd@shouldnt M\else\CD@OA\dp\CD@uA\CD@PA\ht\CD@uA\setbox\CD@uA\hbox{\box\z@ +\penalty\CD@vA\penalty\CD@GB\unhbox\CD@uA}\dp\CD@uA\CD@OA\ht\CD@uA\CD@PA\fi +\fi\fi}\def\CD@WI{\CD@t\CD@AJ\setbox\CD@PC=\hbox{\CD@k A\@super f\CD@lJ f% +\CD@ND}\CD@ZE\z@\CD@JK\z@\CD@kI\z@\CD@kF\z@\CD@NB=\CD@XB\CD@NF\z@\CD@uB\z@ +\CD@uF\ifnum\CD@NB>\CD@CA\advance\CD@NB\m@ne\CD@qI\ht\CD@NB\CD@pI\dp\CD@NB +\advance\CD@NF\CD@qI\CD@rI\advance\CD@uB\CD@NF\CD@KC\CD@ZI\CD@w\ht\CD@NB +\CD@qI\dp\CD@NB\CD@pI\nointerlineskip\box\CD@NB\CD@NF\CD@pI\setbox\CD@NB\null +\ht\CD@NB\CD@uB\repeat\CD@wB\nointerlineskip\box\CD@NB\CD@gG\CD@ZE +\DiagramCellWidth{width}\CD@gG\CD@JK\DiagramCellHeight{height}\CD@VA\CD@LB +\advance\CD@VA-\CD@lA\advance\CD@VA\m@ne\advance\CD@VA\CD@mA\dimen0\wd\CD@VA +\CD@tI\axisheight\dimen1\CD@uB\advance\dimen1-\CD@YB\dimen2\CD@kI\advance +\dimen2-\dimen0 \advance\CD@XB-\CD@CA\advance\CD@LB-\CD@lA}\count@\year +\multiply\count@12 \advance\count@\month\ifnum\count@>24158 \loop\iftrue +\message{gone February 2013!}\repeat\fi\def\CD@wB{\CD@qI-\CD@NF\CD@pI\CD@NF +\setbox\CD@MH=\null\dp\CD@MH\CD@NF\ht\CD@MH-\CD@NF\CD@mF\z@\CD@mI\z@\CD@lA +\CD@LB\advance\CD@lA-\CD@MB\advance\CD@lA\CD@mA\CD@FA\CD@LB\CD@VA\CD@MB\CD@sF +\ifnum\CD@FA>\CD@lA\advance\CD@FA\m@ne\advance\CD@VA\m@ne\CD@tB\wd\CD@VA +\setbox\CD@FA=\box\voidb@x\CD@yB\repeat\CD@w\ht\CD@NB\CD@qI\dp\CD@NB\CD@pI}% +\def\CD@gG#1#2#3{\ifdim#1>.01\CD@zC\CD@PA#2\relax\advance\CD@PA#1\relax +\advance\CD@PA.99\CD@zC\count@\CD@PA\divide\count@\CD@zC\CD@KB{increase cell #% +3 to \the\count@ em}\fi}\def\CD@rI{\CD@FA=\CD@LB\penalty4 \noindent\unhbox +\CD@NB\CD@sF\unskip\setbox0=\lastbox\ifhbox0 \advance\CD@FA\m@ne\setbox\CD@FA +\hbox to\wd0{\null\penalty-9990\null\unhbox0}\repeat\CD@lA\CD@FA\advance +\CD@FA\CD@MB\advance\CD@FA-\CD@mA\ifnum\CD@FA<\CD@LB\count@\CD@FA\advance +\count@\m@ne\dimen0=\wd\count@\count@\CD@MB\advance\count@\m@ne\CD@tB\wd +\count@\CD@sF\ifnum\CD@FA<\CD@LB\CD@DJ\CD@XG\dimen0\wd\CD@FA\advance\CD@FA1 +\repeat\fi\CD@sF\CD@GB\lastpenalty\unpenalty\ifnum\CD@GB>\z@\CD@vA +\lastpenalty\unpenalty\CD@VG\repeat\endgraf\unskip\ifnum\lastpenalty=4 +\unpenalty\else\cd@shouldnt S\fi}\def\CD@VG{\advance\CD@vA\CD@lA\advance +\CD@vA\m@ne\setbox0=\lastbox\ifnum\CD@vA<\CD@LB\setbox\CD@vA\hbox{\box0% +\penalty\CD@GB\unhbox\CD@vA}\else\CD@UG\fi}\def\CD@bG{}\CD@tG\CD@uE\CD@WB +\CD@VB\def\CD@DJ{\advance\dimen0\wd\CD@FA\divide\dimen0\tw@\CD@uE\dimen0% +\DiagramCellWidth\else\CD@V{\dimen0}\DiagramCellWidth\CD@pJ\fi\advance\CD@tB +\dimen0 }\def\CD@XG{\setbox\CD@MB=\vbox{}\dp\CD@MB=\CD@uB\wd\CD@MB\CD@tB +\advance\CD@MB1 }\def\CD@LJ#1,{\def\CD@GK{#1}\ifx\CD@GK\CD@RD\else\advance +\CD@tB\CD@GK\DiagramCellWidth\CD@XG\expandafter\CD@LJ\fi}\def\CD@VJ#1,{\def +\CD@GK{#1}\ifx\CD@GK\CD@RD\else\ifnum\CD@NB>\CD@CA\CD@NF\CD@GK +\DiagramCellHeight\advance\CD@NF-\dp\CD@NB\advance\CD@NB\m@ne\ht\CD@NB\CD@NF +\fi\expandafter\CD@VJ\fi}\def\CD@pJ{\CD@wE\CD@OA\dimen0 \advance\CD@OA-% +\DiagramCellWidth\ifdim\CD@OA>2\MapShortFall\CD@KB{badly drawn diagonals (see +manual)}\let\CD@pJ\empty\fi\else\let\CD@pJ\empty\fi}\def\CD@KC{\CD@VA\CD@mA +\CD@sF\ifnum\CD@VA<\CD@MB\dimen0\dp\CD@VA\advance\dimen0\CD@NF\dp\CD@VA\dimen +0 \advance\CD@VA1 \repeat}\def\CD@bH#1#2#3#4{\ifnum\CD@FA<\CD@LB\CD@OA=#1% +\relax\setbox\CD@FA=\hbox{\setbox0=#2\dimen7=#4\relax\dimen8=#3\relax\ifhbox +\CD@FA\unhbox\CD@FA\advance\CD@OA-\lastkern\unkern\fi\ifdim\CD@OA=\z@\else +\kern-\CD@OA\fi\raise\dimen7\box0 \kern-\dimen8 }\ifnum\CD@FA=\CD@lA\CD@V +\CD@kF\CD@OA\fi\else\cd@shouldnt O\fi}\def\CD@w{\setbox\CD@NB=\hbox{\CD@FA +\CD@lA\CD@VA\CD@mA\CD@PA\z@\relax\CD@sF\ifnum\CD@FA<\CD@LB\CD@tB\wd\CD@VA +\relax\CD@eI\advance\CD@FA1 \advance\CD@VA1 \repeat}\CD@V\CD@kI{\wd\CD@NB}\wd +\CD@NB\z@}\def\CD@eI{\ifhbox\CD@FA\CD@OA\CD@tB\relax\advance\CD@OA-\CD@PA +\relax\ifdim\CD@OA=\z@\else\kern\CD@OA\fi\CD@PA\CD@tB\advance\CD@PA\wd\CD@FA +\relax\unhbox\CD@FA\advance\CD@PA-\lastkern\unkern\fi}\def\CD@ZI{\setbox +\CD@sH=\box\voidb@x\CD@VA=\CD@MB\CD@FA\CD@LB\CD@VA\CD@mA\advance\CD@VA\CD@FA +\advance\CD@VA-\CD@lA\advance\CD@VA\m@ne\CD@tB\wd\CD@VA\count@\CD@LB\advance +\count@\m@ne\CD@hF.5\wd\count@\advance\CD@hF\CD@tB\CD@A\m@ne\CD@gD\@m\CD@sF +\ifnum\CD@FA>\CD@lA\advance\CD@FA\m@ne\advance\CD@hF-\CD@tB\CD@PI\wd\CD@VA +\CD@tB\advance\CD@hF\CD@tB\advance\CD@VA\m@ne\CD@tB\wd\CD@VA\repeat\CD@mF +\CD@kF\CD@mI-\CD@mF\CD@vB}\newcount\CD@GB\def\CD@s{}\def\CD@t{\mathsurround +\z@\hsize\z@\rightskip\z@ plus1fil minus\maxdimen\parfillskip\z@\linepenalty +9000 \looseness0 \hfuzz\maxdimen\hbadness10000 \clubpenalty0 \widowpenalty0 +\displaywidowpenalty0 \interlinepenalty0 \predisplaypenalty0 +\postdisplaypenalty0 \interdisplaylinepenalty0 \interfootnotelinepenalty0 +\floatingpenalty0 \brokenpenalty0 \everypar{}\leftskip\z@\parskip\z@ +\parindent\z@\pretolerance10000 \tolerance10000 \hyphenpenalty10000 +\exhyphenpenalty10000 \binoppenalty10000 \relpenalty10000 \adjdemerits0 +\doublehyphendemerits0 \finalhyphendemerits0 \CD@IA\prevdepth\z@}\newbox +\CD@KG\newbox\CD@IG\def\CD@JG{\unhcopy\CD@KG}\def\CD@HG{\unhcopy\CD@IG}\def +\CD@iJ{\hbox{}\penalty1\nointerlineskip}\def\CD@PI{\penalty5 \noindent\setbox +\CD@MH=\null\CD@mF\z@\CD@mI\z@\ifnum\CD@FA<\CD@LB\ht\CD@MH\ht\CD@FA\dp\CD@MH +\dp\CD@FA\unhbox\CD@FA\skip0=\lastskip\unskip\else\CD@OK\skip0=\z@\fi\endgraf +\ifcase\prevgraf\cd@shouldnt Y \or\cd@shouldnt Z \or\CD@RI\or\CD@XI\else +\CD@QI\fi\unskip\setbox0=\lastbox\unskip\unskip\unpenalty\noindent\unhbox0% +\setbox0\lastbox\unpenalty\unskip\unskip\unpenalty\setbox0\lastbox\CD@tF +\CD@GB\lastpenalty\unpenalty\ifnum\CD@GB>\z@\setbox\z@\lastbox\CD@lB\repeat +\endgraf\unskip\unskip\unpenalty}\def\CD@YJ{\CD@uA\CD@XB\advance\CD@uA-\CD@NB +\CD@vA\CD@FA\advance\CD@vA-\CD@lA\advance\CD@vA1 \expandafter\message{% +prevgraf=\the\prevgraf at (\the\CD@uA,\the\CD@vA)}}\def\CD@XI{\CD@CE\setbox +\CD@lI=\lastbox\setbox\CD@lI=\hbox{\unhbox\CD@lI\unskip\unpenalty}\unskip +\ifdim\ht\CD@lI>\ht\CD@PC\setbox\CD@MH=\copy\CD@lI\else\ifdim\dp\CD@lI>\dp +\CD@PC\setbox\CD@MH=\copy\CD@lI\else\CD@FG\CD@lI\fi\fi\advance\CD@mF.5\wd +\CD@lI\advance\CD@mI.5\wd\CD@lI\setbox\CD@lI=\hbox{\unhbox\CD@lI\CD@HG}\CD@bH +\CD@mF{\box\CD@lI}\CD@mI\z@\CD@yB\CD@vB}\def\CD@CE{\ifnum\CD@A>0 \advance +\dimen0-\CD@tB\CD@iA-.5\dimen0 \CD@A-\CD@A\else\CD@A0 \CD@iA\z@\fi\setbox +\CD@MH=\lastbox\setbox\CD@MH=\hbox{\unhbox\CD@MH\unskip\unskip\unpenalty +\setbox0=\lastbox\global\CD@QA\lastkern\unkern}\advance\CD@iA-.5\CD@QA\unskip +\setbox\CD@MH=\null\CD@mI\CD@iA\CD@mF-\CD@iA}\def\CD@Z{\ht\CD@MH\CD@tI\dp +\CD@MH\CD@sI}\def\CD@FG#1{\setbox\CD@MH=\hbox{\CD@V{\ht\CD@MH}{\ht#1}\CD@V{% +\dp\CD@MH}{\dp#1}\CD@V{\wd\CD@MH}{\wd#1}\vrule height\ht\CD@MH depth\dp\CD@MH +width\wd\CD@MH}}\def\CD@QI{\CD@CE\CD@Z\setbox\CD@lI=\lastbox\unskip\setbox +\CD@lF=\lastbox\unskip\setbox\CD@lF=\hbox{\unhbox\CD@lF\unskip\global\CD@yA +\lastpenalty\unpenalty}\advance\CD@yA9999 \ifcase\CD@yA\CD@VI\or\CD@YI\or +\CD@TI\or\CD@dI\or\CD@cI\or\CD@SI\else\cd@shouldnt9\fi}\def\CD@VI{\CD@FG +\CD@lI\CD@UI\setbox\CD@sH=\box\CD@lF\setbox\CD@tH=\box\CD@lI}\def\CD@YI{% +\CD@FG\CD@lF\setbox\CD@lI\hbox{\penalty8 \unhbox\CD@lI\unskip\unpenalty\ifnum +\lastpenalty=8 \else\CD@xH\fi}\CD@UI\setbox\CD@lF=\hbox{\unhbox\CD@lF\unskip +\unpenalty\global\setbox\CD@DA=\lastbox}\ifdim\wd\CD@lF=\z@\else\CD@xH\fi +\setbox\CD@sH=\box\CD@DA}\def\CD@xH{\CD@KB{extra material in \string\pile +\space cell (lost)}}\def\CD@UI{\CD@yB\ifvoid\CD@sH\else\CD@KB{Clashing +horizontal arrows}\CD@mI.5\CD@hF\CD@mF-\CD@mI\CD@vB\CD@mI\z@\CD@mF\z@\fi +\CD@hI\CD@hF\advance\CD@hI-\CD@mI\CD@hF-\CD@mF\CD@JC\CD@FA}\def\CD@RI{\setbox +0\lastbox\unskip\CD@iA\z@\CD@Z\ifdim\skip0>\z@\CD@tJ\CD@A0 \else\ifnum\CD@A<1 +\CD@A0 \dimen0\CD@tB\fi\advance\CD@A1 \fi}\def\VonH{\CD@MA46\VonH{.5\CD@LF}}% +\def\HonV{\CD@MA57\HonV{.5\CD@LF}}\def\HmeetV{\CD@MA44\HmeetV{-\MapShortFall}% +}\def\CD@MA#1#2#3#4{\CD@pB34#1{\string#3}\CD@SD\CD@GB-999#2 \dimen0=#4\CD@tI +\dimen0\advance\CD@tI\axisheight\CD@sI\dimen0\advance\CD@sI-\axisheight\CD@CF +\CD@HC\CD@ZD}\def\CD@HC#1{\setbox0=\hbox{\CD@k#1\CD@ND}\dimen0.5\wd0 \CD@tI +\ht0 \CD@sI\dp0 \CD@ZD}\def\CD@SD{\setbox0=\null\ht0=\CD@tI\dp0=\CD@sI\wd0=% +\dimen0 \copy0\penalty\CD@GB\box0 }\def\CD@TI{\CD@GC\CD@yB}\def\CD@dI{\CD@GC +\CD@vB}\def\CD@SI{\CD@GC\CD@yB\CD@vB}\def\CD@GC{\setbox\CD@lI=\hbox{\unhbox +\CD@lI}\setbox\CD@lF=\hbox{\unhbox\CD@lF\global\setbox\CD@DA=\lastbox}\ht +\CD@MH\ht\CD@DA\dp\CD@MH\dp\CD@DA\advance\CD@mF\wd\CD@DA\advance\CD@mI\wd +\CD@lI}\CD@tG\ifPositiveGradient\CD@CI\CD@BI\CD@CI\CD@tG\ifClimbing\CD@rB +\CD@qB\CD@rB\newcount\DiagonalChoice\DiagonalChoice\m@ne\ifx\tenln\nullfont +\CD@tJ\def\CD@qF{\CD@KH\ifPositiveGradient/\else\CD@k\backslash\CD@ND\fi}% +\else\def\CD@qF{\CD@rF\char\count@}\fi\let\CD@rF\tenln\def\Use@line@char#1{% +\hbox{#1\CD@rF\ifPositiveGradient\else\advance\count@64 \fi\char\count@}}\def +\CD@cF{\Use@line@char{\count@\CD@TC\multiply\count@8\advance\count@-9\advance +\count@\CD@LH}}\def\CD@ZF{\Use@line@char{\ifcase\DiagonalChoice\CD@gF\or +\CD@fF\or\CD@fF\else\CD@gF\fi}}\def\CD@gF{\ifnum\CD@TC=\z@\count@'33 \else +\count@\CD@TC\multiply\count@\sixt@@n\advance\count@-9\advance\count@\CD@LH +\advance\count@\CD@LH\fi}\def\CD@fF{\count@'\ifcase\CD@LH55\or\ifcase\CD@TC66% +\or22\or52\or61\or72\fi\or\ifcase\CD@TC66\or25\or22\or63\or52\fi\or\ifcase +\CD@TC66\or16\or36\or22\or76\fi\or\ifcase\CD@TC66\or27\or25\or67\or22\fi\fi +\relax}\def\CD@uC#1{\hbox{#1\setbox0=\Use@line@char{#1}\ifPositiveGradient +\else\raise.3\ht0\fi\copy0 \kern-.7\wd0 \ifPositiveGradient\raise.3\ht0\fi +\box0}}\def\CD@jF#1{\hbox{\setbox0=#1\kern-.75\wd0 \vbox to.25\ht0{% +\ifPositiveGradient\else\vss\fi\box0 \ifPositiveGradient\vss\fi}}}\def\CD@jI#% +1{\hbox{\setbox0=#1\dimen0=\wd0 \vbox to.25\ht0{\ifPositiveGradient\vss\fi +\box0 \ifPositiveGradient\else\vss\fi}\kern-.75\dimen0 }}\CD@RC{+h:>}{% +\Use@line@char\CD@fF}\CD@RC{-h:>}{\Use@line@char\CD@gF}\CD@nF{+t:<}{-h:>}% +\CD@nF{-t:<}{+h:>}\CD@RC{+t:>}{\CD@jF{\Use@line@char\CD@fF}}\CD@RC{-t:>}{% +\CD@jI{\Use@line@char\CD@gF}}\CD@nF{+h:<}{-t:>}\CD@nF{-h:<}{+t:>}\CD@RC{+h:>>% +}{\CD@uC\CD@fF}\CD@RC{-h:>>}{\CD@uC\CD@gF}\CD@nF{+t:<<}{-h:>>}\CD@nF{-t:<<}{+% +h:>>}\CD@nF{+h:>->}{+h:>>}\CD@nF{-h:>->}{-h:>>}\CD@nF{+t:<-<}{-h:>>}\CD@nF{-t% +:<-<}{+h:>>}\CD@RC{+t:>>}{\CD@jF{\CD@uC\CD@fF}}\CD@RC{-t:>>}{\CD@jI{\CD@uC +\CD@gF}}\CD@nF{+h:<<}{-t:>>}\CD@nF{-h:<<}{+t:>>}\CD@nF{+t:>->}{+t:>>}\CD@nF{-% +t:>->}{-t:>>}\CD@nF{+h:<-<}{-t:>>}\CD@nF{-h:<-<}{+t:>>}\CD@RC{+f:-}{\CD@EF +\null\else\CD@cF\fi}\CD@nF{-f:-}{+f:-}\def\CD@tC#1#2{\vbox to#1{\vss\hbox to#% +2{\hss.\hss}\vss}}\def\hfdot{\CD@tC{2\axisheight}{.5em}}% +%% % .7em until 29.7.98 +\def\vfdot{\CD@tC{1ex}\z@}%% % 1.46ex until 29.7.98 +\def\CD@bF{\hbox{\dimen0=.3\CD@zC\dimen1\dimen0 \ifnum\CD@LH>\CD@TC\CD@iC{% +\dimen1}\else\CD@dG{\dimen0}\fi\CD@tC{\dimen0}{\dimen1}}}\newarrowfiller{.}% +\hfdot\hfdot\vfdot\vfdot\def\dfdot{\CD@bF\CD@CK}\CD@RC{+f:.}{\dfdot}\CD@RC{-f% +:.}{\dfdot}\def\CD@@K#1{\hbox\bgroup\def\CD@CH{#1\egroup}\afterassignment +\CD@CH%% +\count@='}\def\lnchar{\CD@@K\CD@qF}\def\CD@dF#1{\setbox#1=\hbox{\dimen5\dimen +#1 \setbox8=\box#1 \dimen1\wd8 \count@\dimen5 \divide\count@\dimen1 \ifnum +\count@=0 \box8 \ifdim\dimen5<.95\dimen1 \CD@gB{diagonal line too short}\fi +\else\dimen3=\dimen5 \advance\dimen3-\dimen1 \divide\dimen3\count@\dimen4% +\dimen3 \CD@dG{\dimen4}\ifPositiveGradient\multiply\dimen4\m@ne\fi\dimen6% +\dimen1 \advance\dimen6-\dimen3 \loop\raise\count@\dimen4\copy8 \ifnum\count@ +>0 \kern-\dimen6 \advance\count@\m@ne\repeat\fi}}\def\CD@CG#1{\CD@EF\CD@xJ{#1% +}\else\CD@dF{#1}\fi}\def\CD@IH#1{}\newdimen\objectheight\objectheight1.8ex +\newdimen\objectwidth\objectwidth1em \def\CD@YD{\dimen6=\CD@aK +\DiagramCellHeight\dimen7=\CD@WK\DiagramCellWidth\CD@KJ\ifnum\CD@LH>0 \ifnum +\CD@TC>0 \CD@aF\else\aftergroup\CD@VC\fi\else\aftergroup\CD@UC\fi}\def\CD@VC{% +\CD@YA{diagonal map is nearly vertical}\CD@NA}\def\CD@UC{\CD@YA{diagonal map +is nearly horizontal}\CD@NA}\CD@rG\CD@NA{Use an orthogonal map instead}\def +\CD@aF{\CD@MJ\dimen3\dimen7\dimen7\dimen6\CD@iC{\dimen7}\advance\dimen3-% +\dimen7 \CD@MF\ifnum\CD@LH>\CD@TC\advance\dimen6-\dimen1\advance\dimen6-% +\dimen5 \CD@iC{\dimen1}\CD@iC{\dimen5}\else\dimen0\dimen1\advance\dimen0% +\dimen5\CD@dG{\dimen0}\advance\dimen6-\dimen0 \fi\dimen2.5\dimen7\advance +\dimen2-\dimen1 \dimen4.5\dimen7\advance\dimen4-\dimen5 \ifPositiveGradient +\dimen0\dimen5 \advance\dimen1-\CD@WK\DiagramCellWidth\advance\dimen1 \CD@ZK +\DiagramCellWidth\setbox6=\llap{\unhbox6\kern.1\ht2}\setbox7=\rlap{\kern.1\ht +2\unhbox7}\else\dimen0\dimen1 \advance\dimen1-\CD@ZK\DiagramCellWidth\setbox7% +=\llap{\unhbox7\kern.1\ht2}\setbox6=\rlap{\kern.1\ht2\unhbox6}\fi\setbox6=% +\vbox{\box6\kern.1\wd2}\setbox7=\vtop{\kern.1\wd2\box7}\CD@dG{\dimen0}% +\advance\dimen0-\axisheight\advance\dimen0-\CD@bK\DiagramCellHeight\dimen5-% +\dimen0 \advance\dimen0\dimen6 \advance\dimen1.5\dimen3 \ifdim\wd3>\z@\ifdim +\ht3>-\dp3\CD@TB\fi\fi\dimen3\dimen2 \dimen7\dimen2\advance\dimen7\dimen4 +\ifvoid3 \else\CD@tE\else\dimen8\ht3\advance\dimen8-\axisheight\CD@iC{\dimen8% +}\CD@X{\dimen8}{.5\wd3}\dimen9\dp3\advance\dimen9\axisheight\CD@iC{\dimen9}% +\CD@X{\dimen9}{.5\wd3}\ifPositiveGradient\advance\dimen2-\dimen9\advance +\dimen4-\dimen8 \else\advance\dimen4-\dimen9\advance\dimen2-\dimen8 \fi\fi +\advance\dimen3-.5\wd3 \fi\dimen9=\CD@aK\DiagramCellHeight\advance\dimen9-2% +\DiagramCellHeight\CD@tE\advance\dimen2\dimen4 \CD@CG{2}\dimen2-\dimen0% +\advance\dimen2\dp2 \else\CD@CG{2}\CD@CG{4}\ifPositiveGradient\dimen2-\dimen0% +\advance\dimen2\dp2 \dimen4\dimen5\advance\dimen4-\ht4 \else\dimen4-\dimen0% +\advance\dimen4\dp4 \dimen2\dimen5\advance\dimen2-\ht2 \fi\fi\setbox0=\hbox to% +\z@{\kern\dimen1 \ifvoid1 \else\ifPositiveGradient\advance\dimen0-\dp1 \lower +\dimen0 \else\advance\dimen5-\ht1 \raise\dimen5 \fi\rlap{\unhbox1}\fi\raise +\dimen2\rlap{\unhbox2}\ifvoid3 \else\lower.5\dimen9\rlap{\kern\dimen3\unhbox3% +}\fi\kern.5\dimen7 \lower.5\dimen9\box6 \lower.5\dimen9\box7 \kern.5\dimen7 +\CD@tE\else\raise\dimen4\llap{\unhbox4}\fi\ifvoid5 \else\ifPositiveGradient +\advance\dimen5-\ht5 \raise\dimen5 \else\advance\dimen0-\dp5 \lower\dimen0 \fi +\llap{\unhbox5}\fi\hss}\ht0=\axisheight\dp0=-\ht0\box0 }\def\NorthWest{\CD@BI +\CD@rB\DiagonalChoice0 }\def\NorthEast{\CD@CI\CD@rB\DiagonalChoice1 }\def +\SouthWest{\CD@CI\CD@qB\DiagonalChoice3 }\def\SouthEast{\CD@BI\CD@qB +\DiagonalChoice2 }\def\CD@aD{\vadjust{\CD@uA\CD@FA\advance\CD@uA +\ifPositiveGradient\else-\fi\CD@ZK\relax\CD@vA\CD@NB\advance\CD@vA-\CD@bK +\relax\hbox{\advance\CD@uA\ifPositiveGradient-\fi\CD@WK\advance\CD@vA\CD@aK +\hbox{\box6 \kern\CD@DC\kern\CD@eJ\penalty1 \box7 \box\z@}\penalty\CD@uA +\penalty\CD@vA}\penalty\CD@uA\penalty\CD@vA\penalty104}}\def\CD@eH#1{\relax +\vadjust{\hbox@maths{#1}\penalty\CD@FA\penalty\CD@NB\penalty\tw@}}\def\CD@lB{% +\ifcase\CD@GB\or\or\CD@bH{.5\wd0}{\box0}{.5\wd0}\z@\or\unhbox\z@\setbox\z@ +\lastbox\CD@bH{.5\wd0}{\box0}{.5\wd0}\z@\unpenalty\unpenalty\setbox\z@ +\lastbox\or\CD@TG\else\advance\CD@GB-100 \ifnum\CD@GB<\z@\cd@shouldnt B\fi +\setbox\z@\hbox{\kern\CD@mF\copy\CD@MH\kern\CD@mI\CD@uA\CD@XB\advance\CD@uA-% +\CD@NB\penalty\CD@uA\CD@uA\CD@FA\advance\CD@uA-\CD@lA\penalty\CD@uA\unhbox\z@ +\global\CD@yA\lastpenalty\unpenalty\global\CD@zA\lastpenalty\unpenalty}\CD@uA +-\CD@yA\CD@vA\CD@zA\CD@fI\fi}\def\CD@TG{\unhbox\z@\setbox\z@\lastbox\CD@uA +\lastpenalty\unpenalty\advance\CD@uA\CD@mA\CD@vA\CD@XB\advance\CD@vA-% +\lastpenalty\unpenalty\dimen1\lastkern\unkern\setbox3\lastbox\dimen0\lastkern +\unkern\setbox0=\hbox to\z@{\unhbox0\setbox0\lastbox\setbox7\lastbox +\unpenalty\CD@eJ\lastkern\unkern\CD@DC\lastkern\unkern\setbox6\lastbox\dimen7% +\CD@tB\advance\dimen7-\wd\CD@uA\ifdim\dimen7<\z@\CD@CI\multiply\dimen7\m@ne +\let\mv\empty\else\CD@BI\def\mv{\raise\ht1}\kern-\dimen7 \fi\ifnum\CD@vA>% +\CD@NB\dimen6\CD@uB\advance\dimen6-\ht\CD@vA\else\dimen6\z@\fi\CD@jJ\CD@mK +\setbox1\null\ht1\dimen6\wd1\dimen7 \dimen7\dimen2 \dimen6\wd1 \CD@KJ\CD@uA +\CD@LH\CD@vA\CD@TC\dimen6\ht1 \CD@KJ\setbox2\null\divide\dimen2\tw@\advance +\dimen2\CD@eJ\CD@eG{\dimen2}\wd2\dimen2 \dimen0.5\dimen7 \advance\dimen0% +\ifPositiveGradient\else-\fi\CD@eJ\CD@dG{\dimen0}\advance\dimen0-\axisheight +\ht2\dimen0 \dimen0\CD@DC\CD@eG{\dimen0}\advance\dimen0\ht2\ht2\dimen0 \dimen +0\ifPositiveGradient-\fi\CD@DC\CD@dG{\dimen0}\advance\dimen0\wd2\wd2\dimen0 +\setbox4\null\dimen0 .6\CD@zC\CD@eG{\dimen0}\ht4\dimen0 \dimen0 .2\CD@zC +\CD@dG{\dimen0}\wd4\dimen0 \dimen0\wd2 \ifvoid6\else\dimen1\ht4 \advance +\dimen1\ht2 \CD@CC6+-\raise\dimen1\rlap{\ifPositiveGradient\advance\dimen0-% +\wd6\advance\dimen0-\wd4 \else\advance\dimen0\wd4 \fi\kern\dimen0\box6}\fi +\dimen0\wd2 \ifvoid7\else\dimen1\ht4 \advance\dimen1-\ht2 \CD@CC7-+\lower +\dimen1\rlap{\ifPositiveGradient\advance\dimen0\wd4 \else\advance\dimen0-\wd7% +\advance\dimen0-\wd4 \fi\kern\dimen0\box7}\fi\mv\box0\hss}\ht0\z@\dp0\z@ +\CD@bH{\z@}{\box\z@}{\z@}{\axisheight}}\def\CD@CC#1#2#3{\dimen4.5\wd#1 \ifdim +\dimen4>.25\dimen7\dimen4=.25\dimen7\fi\ifdim\dimen4>\CD@zC\dimen4.4\dimen4 +\advance\dimen4.6\CD@zC\fi\CD@eG{\dimen4}\dimen5\axisheight\CD@dG{\dimen5}% +\advance\dimen4-\dimen5 \dimen5\dimen4\CD@eG{\dimen5}\advance\dimen0% +\ifPositiveGradient#2\else#3\fi\dimen5 \CD@dG{\dimen4}\advance\dimen1\dimen4 } +\def\CD@eD#1{\expandafter\CD@IK{#1}}\CD@ZA\CD@EK{output is PostScript +dependent}\def\CD@SC{\CD@IK{/bturn {gsave currentpoint currentpoint translate +4 2 roll neg exch atan rotate neg exch neg exch translate } def /eturn {% +currentpoint grestore moveto} def}}\def\CD@gK{\relax\CD@hK\CD@tK{Q}\else +\CD@IK{eturn}\fi} \def\CD@OJ#1{\count@#1\relax\multiply\count@7\advance +\count@16577\divide\count@33154 }\def\CD@fD#1{\expandafter\special{#1}} \def +\CD@xJ#1{\setbox#1=\hbox{\dimen0\dimen#1\CD@dG{\dimen0}\CD@OJ{\dimen0}\setbox +0=\null\ifPositiveGradient\count@-\count@\ht0\dimen0 \else\dp0\dimen0 \fi\box +0 \CD@uA\count@\CD@OJ\CD@LF\CD@fD{pn \the\count@}\CD@fD{pa 0 0}\CD@OJ{\dimen#% +1}\CD@fD{pa \the\count@\space\the\CD@uA}\CD@fD{fp}\kern\dimen#1}}\def\CD@JI{% +\CD@KJ\begingroup\ifdim\dimen7<\dimen6 \dimen2=\dimen6 \dimen6=\dimen7 \dimen +7=\dimen2 \count@\CD@LH\CD@LH\CD@TC\CD@TC\count@\else\dimen2=\dimen7 \fi +\ifdim\dimen6>.01\p@\CD@KI\global\CD@QA\dimen0 \else\global\CD@QA\dimen7 \fi +\endgroup\dimen2\CD@QA\CD@iK\CD@lK{\ifPositiveGradient\else-\fi\dimen6}\CD@iK +\CD@kK{\ifPositiveGradient-\fi\dimen6}\CD@iK\CD@eK{\dimen7}}\def\CD@KI{\CD@hJ +\ifdim\dimen7>1.73\dimen6 \divide\dimen2 4 \multiply\CD@TC2 \else\dimen2=0.% +353553\dimen2 \advance\CD@LH-\CD@TC\multiply\CD@TC4 \fi\dimen0=4\dimen2 \CD@ZG +4\CD@ZG{-2}\CD@ZG2\CD@ZG{-2.5}}\def\CD@AI{\begingroup\count@\dimen0 \dimen2 45% +pt \divide\count@\dimen2 \ifdim\dimen0<\z@\advance\count@\m@ne\fi\ifodd +\count@\advance\count@1\CD@@A\else\CD@y\fi\advance\dimen0-\count@\dimen2 +\CD@gE\multiply\dimen0\m@ne\fi\ifnum\count@<0 \multiply\count@-7 \fi\dimen3% +\dimen1 \dimen6\dimen0 \dimen7 3754936sp \ifdim\dimen0<6\p@\def\CD@OG{4000}% +\fi\CD@KJ\dimen2\dimen3\CD@dG{\dimen2}\CD@hJ\multiply\CD@TC-6 \dimen0\dimen2 +\CD@ZG1\CD@ZG{0.3}\dimen1\dimen0 \dimen2\dimen3 \dimen0\dimen3 \CD@ZG3\CD@ZG{% +1.5}\CD@ZG{0.3}\divide\count@2 \CD@gE\multiply\dimen1\m@ne\fi\ifodd\count@ +\dimen2\dimen1\dimen1\dimen0\dimen0-\dimen2 \fi\divide\count@2 \ifodd\count@ +\multiply\dimen0\m@ne\multiply\dimen1\m@ne\fi\global\CD@QA\dimen0\global +\CD@RA\dimen1\endgroup\dimen6\CD@QA\dimen7\CD@RA}\def\CD@OC{255}\let\CD@OG +\CD@OC\def\CD@KJ{\begingroup\ifdim\dimen7<\dimen6 \dimen9\dimen7\dimen7\dimen +6\dimen6\dimen9\CD@@A\else\CD@y\fi\dimen2\z@\dimen3\CD@XH\dimen4\CD@XH\dimen0% +\z@\dimen8=\CD@OG\CD@XH\CD@lC\global\CD@yA\dimen\CD@gE0\else3\fi\global\CD@zA +\dimen\CD@gE3\else0\fi\endgroup\CD@LH\CD@yA\CD@TC\CD@zA}\def\CD@lC{\count@ +\dimen6 \divide\count@\dimen7 \advance\dimen6-\count@\dimen7 \dimen9\dimen4 +\advance\dimen9\count@\dimen0 \ifdim\dimen9>\dimen8 \CD@@C\else\CD@AC\ifdim +\dimen6>\z@\dimen9\dimen6 \dimen6\dimen7 \dimen7\dimen9 \expandafter +\expandafter\expandafter\CD@lC\fi\fi}\def\CD@@C{\ifdim\dimen0=\z@\ifdim\dimen +9<2\dimen8 \dimen0\dimen8 \fi\else\advance\dimen8-\dimen4 \divide\dimen8% +\dimen0 \ifdim\count@\CD@XH<2\dimen8 \count@\dimen8 \dimen9\dimen4 \advance +\dimen9\count@\dimen0 \CD@AC\fi\fi}\def\CD@AC{\dimen4\dimen0 \dimen0\dimen9 +\advance\dimen2\count@\dimen3 \dimen9\dimen2 \dimen2\dimen3 \dimen3\dimen9 }% +\def\CD@ZG#1{\CD@dG{\dimen2}\advance\dimen0 #1\dimen2 }\def\CD@dG#1{\divide#1% +\CD@TC\multiply#1\CD@LH}\def\CD@eG#1{\divide#1\CD@vA\multiply#1\CD@uA}\def +\CD@iC#1{\divide#1\CD@LH\multiply#1\CD@TC}\def\CD@hJ{\dimen6\CD@LH\CD@XH +\multiply\dimen6\CD@LH\dimen7\CD@TC\CD@XH\multiply\dimen7\CD@TC\CD@KJ}\def +\CD@iK#1#2{\begingroup\dimen@#2\relax\loop\ifdim\dimen2<.4\maxdimen\multiply +\dimen2\tw@\multiply\dimen@\tw@\repeat\divide\dimen2\@cclvi\divide\dimen@ +\dimen2\relax\multiply\dimen@\@cclvi\expandafter\CD@jK\the\dimen@\endgroup +\let#1\CD@fK}{\catcode`p=12 \catcode`0=12 \catcode`.=12 \catcode`t=12 \gdef +\CD@jK#1pt{\gdef\CD@fK{#1}}}\ifx\errorcontextlines\CD@qK\CD@tJ\let\CD@GH +\relax\else\def\CD@GH{\errorcontextlines\m@ne}\fi\ifnum\inputlineno<0 \let +\CD@CD\empty\let\CD@W\empty\let\CD@mD\relax\let\CD@uI\relax\let\CD@vI\relax +\let\CD@zF\relax\message{! Why not upgrade to TeX version 3? (available since +1990)}\else\def\CD@W{ at line \number\inputlineno}\def\CD@mD{ - first occurred% +}\def\CD@uI{\edef\CD@h{\the\inputlineno}\global\let\CD@jB\CD@h}\def\CD@h{9999% +}\def\CD@vI{\xdef\CD@jB{\the\inputlineno}}\def\CD@jB{\CD@h}\def\CD@zF{\ifnum +\CD@h<\inputlineno\edef\CD@CD{\space at lines \CD@h--\the\inputlineno}\else +\edef\CD@CD{\CD@W}\fi}\fi\let\CD@CD\empty\def\CD@YA#1#2{\CD@GH\errhelp=#2% +\expandafter\errmessage{\CD@tA: #1}}\def\CD@KB#1{\begingroup\expandafter +\message{! \CD@tA: #1\CD@CD}\ifnum\CD@XB>\CD@NB\ifnum\CD@CA>\CD@NB\else\ifnum +\CD@lA>\CD@FA\else\ifnum\CD@LB>\CD@FA\advance\CD@XB-\CD@NB\advance\CD@FA-% +\CD@lA\advance\CD@FA1\relax\expandafter\message{! (error detected at row \the +\CD@XB, column \the\CD@FA, but probably caused elsewhere)}\fi\fi\fi\fi +\endgroup}\def\CD@gB#1{{\expandafter\message{\CD@tA\space Warning: #1\CD@W}}}% +\def\CD@CB#1#2{\CD@gB{#1 \string#2 is obsolete\CD@mD}}\def\CD@AB#1{\CD@CB{% +Dimension}{#1}\CD@DE#1\CD@BB\CD@BB}\def\CD@BB{\CD@OA=}\def\CD@@B#1{\CD@CB{% +Count}{#1}\CD@DE#1\CD@OH\CD@OH}\def\CD@OH{\count@=}\def\HorizontalMapLength{% +\CD@AB\HorizontalMapLength}\def\VerticalMapHeight{\CD@AB\VerticalMapHeight}% +\def\VerticalMapDepth{\CD@AB\VerticalMapDepth}\def\VerticalMapExtraHeight{% +\CD@AB\VerticalMapExtraHeight}\def\VerticalMapExtraDepth{\CD@AB +\VerticalMapExtraDepth}\def\DiagonalLineSegments{\CD@@B\DiagonalLineSegments}% +\ifx\tenln\nullfont\CD@ZA\CD@KH{\CD@eF\space diagonal line and arrow font not +available}\else\let\CD@KH\relax\fi\def\CD@aG#1#2<#3:#4:#5#6{\begingroup\CD@PA +#3\relax\advance\CD@PA-#2\relax\ifdim.1em<\CD@PA\CD@uA#5\relax\CD@vA#6\relax +\ifnum\CD@uA<\CD@vA\count@\CD@vA\advance\count@-\CD@uA\CD@KB{#4 by \the\CD@PA +}\if#1v\let\CD@CH\CD@JK\edef\tmp{\the\CD@uA--\the\CD@vA,\the\CD@FA}\else +\advance\count@\count@\if#1l\advance\count@-\CD@A\else\if#1r\advance\count@ +\CD@A\fi\fi\advance\CD@PA\CD@PA\let\CD@CH\CD@ZE\edef\tmp{\the\CD@NB,\the +\CD@uA--\the\CD@vA}\fi\divide\CD@PA\count@\ifdim\CD@CH<\CD@PA\global\CD@CH +\CD@PA\fi\fi\fi\endgroup}\CD@tG\CD@xE\CD@JD\CD@ID\CD@rG\CD@xI{See the message +above.}\CD@rG\CD@lH{Perhaps you've forgotten to end the diagram before +resuming the text, in\CD@uG which case some garbage may be added to the +diagram, but we should be ok now.\CD@uG Alternatively you've left a blank line +in the middle - TeX will now complain\CD@uG that the remaining \CD@S s are +misplaced - so please use comments for layout.}\CD@rG\CD@hD{You have already +closed too many brace pairs or environments; an \CD@HD\CD@uG command was (% +over)due.}\CD@rG\CD@hH{\CD@dC\space and \CD@HD\space commands must match.}% +\def\CD@jH{\ifnum\inputlineno=0 \else\expandafter\CD@iH\fi}\def\CD@iH{\CD@MD +\CD@GD\crcr\CD@YA{missing \CD@HD\space inserted before \CD@kH- type "h"}% +\CD@lH\enddiagram\CD@AG\CD@kH\par}\def\CD@AG#1{\edef\enddiagram{\noexpand +\CD@rD{#1\CD@W}}}\def\CD@rD#1{\CD@YA{\CD@HD\space(anticipated by #1) ignored}% +\CD@xI\let\enddiagram\CD@SG}\def\CD@SG{\CD@YA{misplaced \CD@HD\space ignored}% +\CD@hH}\def\CD@mC{\CD@YA{missing \CD@HD\space inserted.}\CD@hD\CD@AG{closing +group}}\ifx\DeclareOption\CD@qK\else\ifx\DeclareOption\@notprerr\else +\DeclareOption*{\let\CD@N\relax\let\CD@DH\relax\expandafter\CD@@E +\CurrentOption,}\fi\fi +%%======================================================================% +%% % +%% (22) AUXILLARY MACROS FOR ADJUSTMENT OF COMPONENTS % +%% % +%%======================================================================% + +%% NOTE: The recommended way of defining arrow commands is now +%% \newarrow{Name}{tail}{filler}{middle}{filler}{head} +%% which defines \rName, \lName, \dName and \uName using arrow parts which +%% have themselves previously been defined using the commands +%% \newarrowtail, \newarrowfiller, \newarrowmiddle and \newarrowhead. + +%% The components \rhvee etc have been retained for the time being, as an +%% intermediate stage and to continue to support the old \HorizontalMap and +%% \VerticalMap commands, but you should not rely on the continued existence +%% of these macros. + +%% The various components usually need some correction +%% - longitudinally, ie to prevent gaps and overprints with the shaft, +%% - transversally, ie to prevent "steps" in the junction with the shaft. +%% The former can be done safely ad hoc, eg with \mkern1mu. +%% The latter are now done with the macros \scriptaxis, \boldscriptaxis, +%% \shifthook and \raisehook, which include pixel corrections. + +%% Please note that these and the other auxillary macros which follow are +%% interim. When it becomes clear exactly what kinds of adjustments are +%% needed for characters, this job will be done by a suitable extension +%% to the language of \newarrowhead, etc. If you have any other ideas for +%% transformations of general use please tell me. + +%% By all means experiment with other characters for arrowheads, but +%% please, in your own interests, do not rely on macros like \rhvee, +%% send me a copy of your definitions for distribution to other users +%% in this file, and keep track of where your efforts get copied so +%% that they can be replaced with the "official" version when it is +%% incorporated. + +%% ***** DONT use macros with mangled names like \Cd@gH. ***** + +\catcode`\$=3 %% make sure that $ means maths-shift +\def\vboxtoz{\vbox to\z@}%% \z@ is in plain TeX and means 0pt + +%% print #1 in \scriptstyle, adjusting for the maths axis height +\def\scriptaxis#1{\@scriptaxis{$\scriptstyle#1$}}%% +\def\ssaxis#1{\@ssaxis{$\scriptscriptstyle#1$}}%% +\def\@scriptaxis#1{\dimen0\axisheight\advance\dimen0-\ss@axisheight\raise +\dimen0\hbox{#1}}\def\@ssaxis#1{\dimen0\axisheight\advance\dimen0-% +\ss@axisheight\raise\dimen0\hbox{#1}} + +%% Some of the characters would look better in bold since they're +%% taken from sub/superscript fonts; we use LaTeX's \boldmath to +%% do this, defining this to do nothing if it doesn't exist. +%% With the old LaTeX font selection at other than 10pt you may still +%% get nothing happenning. Also, PK fonts may be missing. +%% If you have problems, DONT use boldhook or boldlittlevee. +\ifx\boldmath\CD@qK%% +\let\boldscriptaxis\scriptaxis%% +\def\boldscript#1{\hbox{$\scriptstyle#1$}}%% +\def\boldscriptscript#1{\hbox{$\scriptscriptstyle#1$}}%% +\else\def\boldscriptaxis#1{\@scriptaxis{\boldmath$\scriptstyle#1$}}%% +\def\boldscript#1{\hbox{\boldmath$\scriptstyle#1$}}%% +\def\boldscriptscript#1{\hbox{\boldmath$\scriptscriptstyle#1$}}%% +\fi + +%% #1= {} or \boldmath; #2= + or -; #3=\subset or \supset +\def\raisehook#1#2#3{\hbox{\setbox3=\hbox{#1$\scriptscriptstyle#3$}% +%% the character to use +\dimen0\ss@axisheight%% \scriptscriptstyle axis height +\dimen1\axisheight\advance\dimen1-\dimen0%% difference in axis heights +\dimen2\ht3\advance\dimen2-\dimen0% +%% height of char above axis (half spread) +\advance\dimen2-0.021em\advance\dimen1 #2\dimen2% +%% shift = axis_difference +/- half_spread +\raise\dimen1\box3}}%% print the character +%% Mark Dawson suggested using the width +\def\shifthook#1#2#3{\setbox1=\hbox{#1$\scriptscriptstyle#3$}\dimen0\wd1% +\divide\dimen0 12\CD@zH{\dimen0}%% "u" +\dimen1\wd1\advance\dimen1-2\dimen0 \advance\dimen1-2\CD@oI\CD@zH{\dimen1}% +\kern#2\dimen1\box1}%% print + +%% use the extension font (cmex) for double vertical arrows +\def\@cmex{\mathchar"03}%%ascii double quote + +%% ************* P U L L B A C K S ************ + +%% These will probably be replaced by something less ad hoc +%% in a future version. + +\def\make@pbk#1{\setbox\tw@\hbox to\z@{#1}\ht\tw@\z@\dp\tw@\z@\box\tw@}\def +\CD@fH#1{\overprint{\hbox to\z@{#1}}}\def\CD@qH{\kern0.11em}\def\CD@pH{\kern0% +.35em} + +%% This is a hack for my book ``Practical Foundations of Mathematics'' +%% and WILL NOT BE SUPPORTED --- DO NOT USE IT! +\def\dblvert{\def\CD@rH{\kern.5\PileSpacing}}\def\CD@rH{} + +\def\SEpbk{\make@pbk{\CD@qH\CD@rH\vrule depth 2.87ex height -2.75ex width 0.% +95em \vrule height -0.66ex depth 2.87ex width 0.05em \hss}} + +\def\SWpbk{\make@pbk{\hss\vrule height -0.66ex depth 2.87ex width 0.05em +\vrule depth 2.87ex height -2.75ex width 0.95em \CD@qH\CD@rH}} + +\def\NEpbk{\make@pbk{\CD@qH\CD@rH\vrule depth -3.81ex height 4.00ex width 0.% +95em \vrule height 4.00ex depth -1.72ex width 0.05em \hss}} + +\def\NWpbk{\make@pbk{\hss\vrule height 4.00ex depth -1.72ex width 0.05em +\vrule depth -3.81ex height 4.00ex width 0.95em \CD@qH\CD@rH}} + +%% Freyd & Scedrov puncture symbol for non-commuting polygon +\def\puncture{{\setbox0\hbox{A}\vrule height.53\ht0 depth-.47\ht0 width.35\ht +0 \kern.12\ht0 \vrule height\ht0 depth-.65\ht0 width.06\ht0 \kern-.06\ht0 +\vrule height.35\ht0 depth0pt width.06\ht0 \kern.12\ht0 \vrule height.53\ht0 +depth-.47\ht0 width.35\ht0 }} + +%% 2-cells: (24.11.95) +%%% \NEclck puts a clockwise (ie southeast) arrow to the northwest of cell etc +\def\NEclck{\overprint{\raise2.5ex\rlap{ \CD@rH$\scriptstyle\searrow$}}}%% +\def\NEanti{\overprint{\raise2.5ex\rlap{ \CD@rH$\scriptstyle\nwarrow$}}}%% +\def\NWclck{\overprint{\raise2.5ex\llap{$\scriptstyle\nearrow$ \CD@rH}}}%% +\def\NWanti{\overprint{\raise2.5ex\llap{$\scriptstyle\swarrow$ \CD@rH}}}%% +\def\SEclck{\overprint{\lower1ex\rlap{ \CD@rH$\scriptstyle\swarrow$}}}%% +\def\SEanti{\overprint{\lower1ex\rlap{ \CD@rH$\scriptstyle\nearrow$}}}%% +\def\SWclck{\overprint{\lower1ex\llap{$\scriptstyle\nwarrow$ \CD@rH}}}%% +\def\SWanti{\overprint{\lower1ex\llap{$\scriptstyle\searrow$ \CD@rH}}} + +%%======================================================================% +%% % +%% (23) BITS OF ARROWS % +%% % +%%======================================================================% + +%% ********** H E A D S *********** + +%% \diagramstyle[heads=xxx] defines {>} as {xxx} where xxx +%% has been defined by \newarrowhead{xxx} and \newarrowtail{xxx} + +%% vee head +\def\rhvee{\mkern-10mu\greaterthan}%% +\def\lhvee{\lessthan\mkern-10mu}%% +\def\dhvee{\vboxtoz{\vss\hbox{$\vee$}\kern0pt}}%% +\def\uhvee{\vboxtoz{\hbox{$\wedge$}\vss}}%% +\newarrowhead{vee}\rhvee\lhvee\dhvee\uhvee + +%% little vee head +\def\dhlvee{\vboxtoz{\vss\hbox{$\scriptstyle\vee$}\kern0pt}}%% +\def\uhlvee{\vboxtoz{\hbox{$\scriptstyle\wedge$}\vss}}%% +\newarrowhead{littlevee}{\mkern1mu\scriptaxis\rhvee}{\scriptaxis\lhvee}% +\dhlvee\uhlvee\ifx\boldmath\CD@qK%% +\newarrowhead{boldlittlevee}{\mkern1mu\scriptaxis\rhvee}{\scriptaxis\lhvee}% +\dhlvee\uhlvee\else%% +\def\dhblvee{\vboxtoz{\vss\boldscript\vee\kern0pt}}%% +\def\uhblvee{\vboxtoz{\boldscript\wedge\vss}}%% +\newarrowhead{boldlittlevee}{\mkern1mu\boldscriptaxis\rhvee}{\boldscriptaxis +\lhvee}\dhblvee\uhblvee%% +\fi + +%% curly vee head (uses AMS symbols fonts) +\def\rhcvee{\mkern-10mu\succ}%% +\def\lhcvee{\prec\mkern-10mu}%% +\def\dhcvee{\vboxtoz{\vss\hbox{$\curlyvee$}\kern0pt}}%% +\def\uhcvee{\vboxtoz{\hbox{$\curlywedge$}\vss}}%% +\newarrowhead{curlyvee}\rhcvee\lhcvee\dhcvee\uhcvee + +%% double vee head %% will probably be withdrawn later +\def\rhvvee{\mkern-13mu\gg}%% 24.8.92 changed 10mu to 13mu +\def\lhvvee{\ll\mkern-13mu}%% to make rule go through +\def\dhvvee{\vboxtoz{\vss\hbox{$\vee$}\kern-.6ex\hbox{$\vee$}\kern0pt}}%% +\def\uhvvee{\vboxtoz{\hbox{$\wedge$}\kern-.6ex \hbox{$\wedge$}\vss}}%% +\newarrowhead{doublevee}\rhvvee\lhvvee\dhvvee\uhvvee + +%% open and closed triangles (uses AMS symbols fonts) +\def\triangleup{{\scriptscriptstyle\bigtriangleup}}%% +\def\littletriangledown{{\scriptscriptstyle\triangledown}}%% AMS +\def\rhtriangle{\triangleright\mkern1.2mu}%% 29.1.93 +\def\lhtriangle{\triangleleft\mkern.8mu}%% +\def\uhtriangle{\vbox{\kern-.2ex \hbox{$\scriptscriptstyle\bigtriangleup$}% +\kern-.25ex}}%% +%% Changed \scriptstyle\triangledown to \scriptscriptstyle\bigtriangledown +%% at the suggestion of Martin Hofmann (25.11.92) to avoid using AMS symbols +%% and also for compatibility with upward arrow. +\def\dhtriangle{\vbox{\kern-.28ex \hbox{$\scriptscriptstyle\bigtriangledown$}% +\kern-.1ex}}%% 15.1.93 from -.25ex +\def\dhblack{\vbox{\kern-.25ex\nointerlineskip\hbox{$\blacktriangledown$}}}% +%% AMS +\def\uhblack{\vbox{\kern-.25ex\nointerlineskip\hbox{$\blacktriangle$}}}% +%% AMS +\def\dhlblack{\vbox{\kern-.25ex\nointerlineskip\hbox{$\scriptstyle +\blacktriangledown$}}}%% AMS +\def\uhlblack{\vbox{\kern-.25ex\nointerlineskip\hbox{$\scriptstyle +\blacktriangle$}}}%% AMS +\newarrowhead{triangle}\rhtriangle\lhtriangle\dhtriangle\uhtriangle +\newarrowhead{blacktriangle}{\mkern-1mu\blacktriangleright\mkern.4mu}{% +\blacktriangleleft}\dhblack\uhblack\newarrowhead{littleblack}{\mkern-1mu% +\scriptaxis\blacktriangleright}{\scriptaxis\blacktriangleleft\mkern-2mu}% +\dhlblack\uhlblack + +%% LaTeX arrowheads +\def\rhla{\hbox{\setbox0=\lnchar55\dimen0=\wd0\kern-.6\dimen0\ht0\z@\raise +\axisheight\box0\kern.1\dimen0}}%% +\def\lhla{\hbox{\setbox0=\lnchar33\dimen0=\wd0\kern.05\dimen0\ht0\z@\raise +\axisheight\box0\kern-.5\dimen0}}%% +\def\dhla{\vboxtoz{\vss\rlap{\lnchar77}}}%% +\def\uhla{\vboxtoz{\setbox0=\lnchar66 \wd0\z@\kern-.15\ht0\box0\vss}}%% 1/93 +\newarrowhead{LaTeX}\rhla\lhla\dhla\uhla + +%% double LaTeX arrowheads %% will probably be withdrawn later +\def\lhlala{\lhla\kern.3em\lhla}%% +\def\rhlala{\rhla\kern.3em\rhla}%% +\def\uhlala{\hbox{\uhla\raise-.6ex\uhla}}%% +\def\dhlala{\hbox{\dhla\lower-.6ex\dhla}}%% +\newarrowhead{doubleLaTeX}\rhlala\lhlala\dhlala\uhlala + +%% circles % \rho is a Greek letter! +\def\hhO{\scriptaxis\bigcirc\mkern.4mu} \def\hho{{\circ}\mkern1.2mu}% +\newarrowhead{o}\hho\hho\circ\circ%% +\newarrowhead{O}\hhO\hhO{\scriptstyle\bigcirc}{\scriptstyle\bigcirc}%% + +%% crosses +\def\rhtimes{\mkern-5mu{\times}\mkern-.8mu}\def\lhtimes{\mkern-.8mu{\times}% +\mkern-5mu}\def\uhtimes{\setbox0=\hbox{$\times$}\ht0\axisheight\dp0-\ht0% +\lower\ht0\box0 }\def\dhtimes{\setbox0=\hbox{$\times$}\ht0\axisheight\box0 }% +\newarrowhead{X}\rhtimes\lhtimes\dhtimes\uhtimes\newarrowhead+++++ + +%% empty head {} is also available + +%% Y from stmaryrd (vertical ones still need large adjustment) +\newarrowhead{Y}{\mkern-3mu\Yright}{\Yleft\mkern-3mu}\Ydown\Yup + +%% ********** H E A D S with S H A F T S *********** + +%% little arrow with shaft +\newarrowhead{->}\rightarrow\leftarrow\downarrow\uparrow + +%% arrow with double shaft +%%\newarrowhead{=>}\Rightarrow\Leftarrow\Downarrow\Uparrow +\newarrowhead{=>}\Rightarrow\Leftarrow{\@cmex7F}{\@cmex7E} + +%% harpoon with shaft (trailing up/left can be changed to down/right) +\newarrowhead{harpoon}\rightharpoonup\leftharpoonup\downharpoonleft +\upharpoonleft + +%% little double-headed arrow with shaft (uses AMS symbols fonts) +\def\twoheaddownarrow{\rlap{$\downarrow$}\raise-.5ex\hbox{$\downarrow$}}%% +\def\twoheaduparrow{\rlap{$\uparrow$}\raise.5ex\hbox{$\uparrow$}}%% +\newarrowhead{->>}\twoheadrightarrow\twoheadleftarrow\twoheaddownarrow +\twoheaduparrow + +%% ********** T A I L S *********** + +%% vee tail +\def\rtvee{\greaterthan}%% +\def\ltvee{\mkern-1mu{\lessthan}\mkern.4mu}%% \mkern added 15.1.93 +\def\dtvee{\vee}%% +\def\utvee{\wedge}%% +\newarrowtail{vee}\greaterthan\ltvee\vee\wedge + +%% little vee tail +\newarrowtail{littlevee}{\scriptaxis\greaterthan}{\mkern-1mu\scriptaxis +\lessthan}{\scriptstyle\vee}{\scriptstyle\wedge}\ifx\boldmath\CD@qK +\newarrowtail{boldlittlevee}{\scriptaxis\greaterthan}{\mkern-1mu\scriptaxis +\lessthan}{\scriptstyle\vee}{\scriptstyle\wedge}\else\newarrowtail{% +boldlittlevee}{\boldscriptaxis\greaterthan}{\mkern-1mu\boldscriptaxis +\lessthan}{\boldscript\vee}{\boldscript\wedge}\fi + +%% curly vee tail (uses AMS symbols fonts) +\newarrowtail{curlyvee}\succ{\mkern-1mu{\prec}\mkern.4mu}\curlyvee\curlywedge + +%% open and closed triangle tails (uses AMS symbols fonts) +\def\rttriangle{\mkern1.2mu\triangleright}%% 29.1.93 +\newarrowtail{triangle}\rttriangle\lhtriangle\dhtriangle\uhtriangle +\newarrowtail{blacktriangle}\blacktriangleright{\mkern-1mu\blacktriangleleft +\mkern.4mu}\dhblack\uhblack\newarrowtail{littleblack}{\scriptaxis +\blacktriangleright\mkern-2mu}{\mkern-1mu\scriptaxis\blacktriangleleft}% +\dhlblack\uhlblack + +%% LaTeX tails +\def\rtla{\hbox{\setbox0=\lnchar55\dimen0=\wd0\kern-.5\dimen0\ht0\z@\raise +\axisheight\box0\kern-.2\dimen0}}%% +\def\ltla{\hbox{\setbox0=\lnchar33\dimen0=\wd0\kern-.15\dimen0\ht0\z@\raise +\axisheight\box0\kern-.5\dimen0}}%% +\def\dtla{\vbox{\setbox0=\rlap{\lnchar77}\dimen0=\ht0\kern-.7\dimen0\box0% +\kern-.1\dimen0}}%% 15.1.93 from -.6 +\def\utla{\vbox{\setbox0=\rlap{\lnchar66}\dimen0=\ht0\kern-.1\dimen0\box0% +\kern-.6\dimen0}}%% +\newarrowtail{LaTeX}\rtla\ltla\dtla\utla + +%% double vee tail %% will probably be withdrawn later +\def\rtvvee{\gg\mkern-3mu}%% +\def\ltvvee{\mkern-3mu\ll}%% +\def\dtvvee{\vbox{\hbox{$\vee$}\kern-.6ex \hbox{$\vee$}\vss}}%% +\def\utvvee{\vbox{\vss\hbox{$\wedge$}\kern-.6ex \hbox{$\wedge$}\kern\z@}}%% +\newarrowtail{doublevee}\rtvvee\ltvvee\dtvvee\utvvee + +%% double LaTeX tails %% will probably be withdrawn later +\def\ltlala{\ltla\kern.3em\ltla}%% +\def\rtlala{\rtla\kern.3em\rtla}%% +\def\utlala{\hbox{\utla\raise-.6ex\utla}}%% +\def\dtlala{\hbox{\dtla\lower-.6ex\dtla}}%% +\newarrowtail{doubleLaTeX}\rtlala\ltlala\dtlala\utlala + +%% bar (as in \mapsto) +\def\utbar{\vrule height 0.093ex depth0pt width 0.4em}%% +\let\dtbar\utbar%% +\def\rtbar{\mkern1.5mu\vrule height 1.1ex depth.06ex width .04em\mkern1.5mu}% +%% +\let\ltbar\rtbar%% +\newarrowtail{mapsto}\rtbar\ltbar\dtbar\utbar%% +\newarrowtail{|}\rtbar\ltbar\dtbar\utbar%%ascii vertical bar (|) + +%% hooks (as in \into): choice of after/above and before/below + +\def\rthooka{\raisehook{}+\subset\mkern-1mu}%% +\def\lthooka{\mkern-1mu\raisehook{}+\supset}%% +\def\rthookb{\raisehook{}-\subset\mkern-2mu}%% +\def\lthookb{\mkern-1mu\raisehook{}-\supset}%% + +\def\dthooka{\shifthook{}+\cap}%% +\def\dthookb{\shifthook{}-\cap}%% +\def\uthooka{\shifthook{}+\cup}%% +\def\uthookb{\shifthook{}-\cup}%% + +\newarrowtail{hooka}\rthooka\lthooka\dthooka\uthooka\newarrowtail{hookb}% +\rthookb\lthookb\dthookb\uthookb + +\ifx\boldmath\CD@qK\newarrowtail{boldhooka}\rthooka\lthooka\dthooka\uthooka +\newarrowtail{boldhookb}\rthookb\lthookb\dthookb\uthookb\newarrowtail{% +boldhook}\rthooka\lthooka\dthookb\uthooka\else\def\rtbhooka{\raisehook +\boldmath+\subset\mkern-1mu}%% +\def\ltbhooka{\mkern-1mu\raisehook\boldmath+\supset}%% +\def\rtbhookb{\raisehook\boldmath-\subset\mkern-2mu}%% +\def\ltbhookb{\mkern-1mu\raisehook\boldmath-\supset}%% +\def\dtbhooka{\shifthook\boldmath+\cap}%% +\def\dtbhookb{\shifthook\boldmath-\cap}%% +\def\utbhooka{\shifthook\boldmath+\cup}%% +\def\utbhookb{\shifthook\boldmath-\cup}%% +\newarrowtail{boldhooka}\rtbhooka\ltbhooka\dtbhooka\utbhooka\newarrowtail{% +boldhookb}\rtbhookb\ltbhookb\dtbhookb\utbhookb\newarrowtail{boldhook}% +\rtbhooka\ltbhooka\dtbhooka\utbhooka\fi + +%% square-ended hooks (used for closed subsets in ``lifting and gluing'') +\def\dtsqhooka{\shifthook{}+\sqcap}%% +\def\dtsqhookb{\shifthook{}-\sqcap}%% +\def\ltsqhooka{\mkern-1mu\raisehook{}+\sqsupset}%% +\def\ltsqhookb{\mkern-1mu\raisehook{}-\sqsupset}%% +\def\rtsqhooka{\raisehook{}+\sqsubset\mkern-1mu}%% +\def\rtsqhookb{\raisehook{}-\sqsubset\mkern-2mu}%% +\def\utsqhooka{\shifthook{}+\sqcup}%% +\def\utsqhookb{\shifthook{}-\sqcup}%% +\newarrowtail{sqhook}\rtsqhooka\ltsqhooka\dtsqhooka\utsqhooka + +%% the following seem the better choices at 10pt & 300dpi +\newarrowtail{hook}\rthooka\lthookb\dthooka\uthooka\newarrowtail{C}\rthooka +\lthookb\dthooka\uthooka + +%% circles +\newarrowtail{o}\hho\hho\circ\circ%% +\newarrowtail{O}\hhO\hhO{\scriptstyle\bigcirc}{\scriptstyle\bigcirc}%% + +%% crosses +\newarrowtail{X}\lhtimes\rhtimes\uhtimes\dhtimes\newarrowtail+++++ + +%% empty tail {} is also available + +%% Y from stmaryrd (vertical ones still need adjustment) +\newarrowtail{Y}\Yright\Yleft\Ydown\Yup + +%% harpoon with shaft (trailing up/left can be changed to down/right) +\newarrowtail{harpoon}\leftharpoondown\rightharpoondown\upharpoonright +\downharpoonright + +%% ********** F I L L E R S *********** + +%% shortening is up to 0.15em=2.7mu horiz and 0.35ex vertically at each end. + +%% dot {.}, single rule {-} and empty {} fillers are also available + +%% double and triple lines +%%\newarrowfiller{=}==\Vert\Vert%% +\newarrowfiller{=}=={\@cmex77}{\@cmex77}%% 16.1.93 +\def\vfthree{\mid\!\!\!\mid\!\!\!\mid}%%ascii +\newarrowfiller{3}\equiv\equiv\vfthree\vfthree + +%% dashed line +\def\vfdashstrut{\vrule width0pt height1.3ex depth0.7ex}%% +\def\vfthedash{\vrule width\CD@LF height0.6ex depth 0pt}%% +\def\hfthedash{\CD@AJ\vrule\horizhtdp width 0.26em}%% +\def\hfdash{\mkern5.5mu\hfthedash\mkern5.5mu}%% +\def\vfdash{\vfdashstrut\vfthedash}%% +\newarrowfiller{dash}\hfdash\hfdash\vfdash\vfdash + +%% ************* M I D D L E S ************ + +%% plus +\newarrowmiddle+++++ + +%% ************* D I A G O N A L S ************ + +%% simple arrow heads +%%\def\nwhTO{\nwarrow\mkern-1mu}%% +%%\def\nehTO{\mkern-.1mu\nearrow}%% +%%\def\sehTO{\searrow\mkern-.02mu}%% +%%\def\swhTO{\mkern-.8mu\swarrow}%% + +%%======================================================================% +%% % +%% (24) ARROW COMMANDS % +%% % +%%======================================================================% + +%% change to \iftrue to get mixed heads +\iffalse%% +\newarrow{To}----{vee}%% +\newarrow{Arr}----{LaTeX}%% +\newarrow{Dotsto}....{vee}%% +\newarrow{Dotsarr}....{LaTeX}%% +\newarrow{Dashto}{}{dash}{}{dash}{vee}%% +\newarrow{Dasharr}{}{dash}{}{dash}{LaTeX}%% +\newarrow{Mapsto}{mapsto}---{vee}%% +\newarrow{Mapsarr}{mapsto}---{LaTeX}%% +\newarrow{IntoA}{hooka}---{vee}%% +\newarrow{IntoB}{hookb}---{vee}%% +\newarrow{Embed}{vee}---{vee}%% +\newarrow{Emarr}{LaTeX}---{LaTeX}%% +\newarrow{Onto}----{doublevee}%% +\newarrow{Dotsonarr}....{doubleLaTeX}%% +\newarrow{Dotsonto}....{doublevee}%% +\newarrow{Dotsonarr}....{doubleLaTeX}%% +\else%% +\newarrow{To}---->%% +\newarrow{Arr}---->%% +\newarrow{Dotsto}....>%% +\newarrow{Dotsarr}....>%% +\newarrow{Dashto}{}{dash}{}{dash}>%% +\newarrow{Dasharr}{}{dash}{}{dash}>%% +\newarrow{Mapsto}{mapsto}--->%% +\newarrow{Mapsarr}{mapsto}--->%% +\newarrow{IntoA}{hooka}--->%% +\newarrow{IntoB}{hookb}--->%% +\newarrow{Embed}>--->%% +\newarrow{Emarr}>--->%% +\newarrow{Onto}----{>>}%% +\newarrow{Dotsonarr}....{>>}%% +\newarrow{Dotsonto}....{>>}%% +\newarrow{Dotsonarr}....{>>}%% +\fi%% + +\newarrow{Implies}===={=>}%% minimum cell height 9.5pt +\newarrow{Project}----{triangle}%% +\newarrow{Pto}----{harpoon}%% partial function +\newarrow{Relto}{harpoon}---{harpoon}%% binary relation + +\newarrow{Eq}=====%% +\newarrow{Line}-----%% +\newarrow{Dots}.....%% +\newarrow{Dashes}{}{dash}{}{dash}{}%% + +%% square hooked arrow (used in my ``gluing and lifting'' paper) +\newarrow{SquareInto}{sqhook}---> + +%% braces and parentheses +%% \newarrow gives inappropriate directions, so we change the names +%% the vertical filler is too far to the right; horizontal too high +%% the vertical middles are too low with midvshaft +%% maybe we'll add square brackets and the integral sign one day +\newarrowhead{cmexbra}{\@cmex7B}{\@cmex7C}{\@cmex3B}{\@cmex38}%% +\newarrowtail{cmexbra}{\@cmex7A}{\@cmex7D}{\@cmex39}{\@cmex3A}%% +\newarrowmiddle{cmexbra}{\braceru\bracelu}{\bracerd\braceld}{\vcenter{% +\hbox@maths{\@cmex3D\mkern-2mu}}}%% right +{\vcenter{\hbox@maths{\mkern2mu\@cmex3C}}}%% left +\newarrow{@brace}{cmexbra}-{cmexbra}-{cmexbra}%% braces +\newarrow{@parenth}{cmexbra}---{cmexbra}%% straight parentheses +\def\rightBrace{\d@brace[thick,cmex]}%%ASCII square brackets [] +\def\leftBrace{\u@brace[thick,cmex]}%%ASCII square brackets [] +\def\upperBrace{\r@brace[thick,cmex]}%%ASCII square brackets [] +\def\lowerBrace{\l@brace[thick,cmex]}%%ASCII square brackets [] +\def\rightParenth{\d@parenth[thick,cmex]}%%ASCII square brackets [] +\def\leftParenth{\u@parenth[thick,cmex]}%%ASCII square brackets [] +\def\upperParenth{\r@parenth[thick,cmex]}%%ASCII square brackets [] +\def\lowerParenth{\l@parenth[thick,cmex]}%%ASCII square brackets [] + +%% synonyms for reverse compatibility + +\let\uFrom\uTo%% +\let\lFrom\lTo%% +\let\uDotsfrom\uDotsto%% +\let\lDotsfrom\lDotsto%% +\let\uDashfrom\uDashto%% +\let\lDashfrom\lDashto%% +\let\uImpliedby\uImplies%% +\let\lImpliedby\lImplies%% +\let\uMapsfrom\uMapsto%% +\let\lMapsfrom\lMapsto%% +\let\lOnfrom\lOnto%% +\let\uOnfrom\uOnto%% +\let\lPfrom\lPto%% +\let\uPfrom\uPto%% + +\let\uInfromA\uIntoA%% +\let\uInfromB\uIntoB%% +\let\lInfromA\lIntoA%% +\let\lInfromB\lIntoB%% +\let\rInto\rIntoA%% +\let\lInto\lIntoA%% +\let\dInto\dIntoB%% +\let\uInto\uIntoA%% +\let\ruInto\ruIntoA%% +\let\luInto\luIntoA%% +\let\rdInto\rdIntoA%% +\let\ldInto\ldIntoA%% +%% +\let\hEq\rEq%% +\let\vEq\uEq%% +\let\hLine\rLine%% +\let\vLine\uLine%% +\let\hDots\rDots%% +\let\vDots\uDots%% +\let\hDashes\rDashes%% +\let\vDashes\uDashes%% + +%%=========================================================================% +%% The following are included for reverse compatibility only. +%%=========================================================================% +\let\NW\luTo\let\NE\ruTo\let\SW\ldTo\let\SE\rdTo\def\nNW{\luTo(2,3)}\def\nNE{% +\ruTo(2,3)}%%ascii +\def\sSW{\ldTo(2,3)}\def\sSE{\rdTo(2,3)}%%ascii +\def\wNW{\luTo(3,2)}\def\eNE{\ruTo(3,2)}%%ascii +\def\wSW{\ldTo(3,2)}\def\eSE{\rdTo(3,2)}%%ascii +\def\NNW{\luTo(2,4)}\def\NNE{\ruTo(2,4)}%%ascii +\def\SSW{\ldTo(2,4)}\def\SSE{\rdTo(2,4)}%%ascii +\def\WNW{\luTo(4,2)}\def\ENE{\ruTo(4,2)}%%ascii +\def\WSW{\ldTo(4,2)}\def\ESE{\rdTo(4,2)}%%ascii +\def\NNNW{\luTo(2,6)}\def\NNNE{\ruTo(2,6)}%%ascii +\def\SSSW{\ldTo(2,6)}\def\SSSE{\rdTo(2,6)}%%ascii +\def\WWNW{\luTo(6,2)}\def\EENE{\ruTo(6,2)}%%ascii +\def\WWSW{\ldTo(6,2)}\def\EESE{\rdTo(6,2)}%%ascii + +\let\NWd\luDotsto\let\NEd\ruDotsto\let\SWd\ldDotsto\let\SEd\rdDotsto\def\nNWd +{\luDotsto(2,3)}\def\nNEd{\ruDotsto(2,3)}%%ascii +\def\sSWd{\ldDotsto(2,3)}\def\sSEd{\rdDotsto(2,3)}%%ascii +\def\wNWd{\luDotsto(3,2)}\def\eNEd{\ruDotsto(3,2)}%%ascii +\def\wSWd{\ldDotsto(3,2)}\def\eSEd{\rdDotsto(3,2)}%%ascii +\def\NNWd{\luDotsto(2,4)}\def\NNEd{\ruDotsto(2,4)}%%ascii +\def\SSWd{\ldDotsto(2,4)}\def\SSEd{\rdDotsto(2,4)}%%ascii +\def\WNWd{\luDotsto(4,2)}\def\ENEd{\ruDotsto(4,2)}%%ascii +\def\WSWd{\ldDotsto(4,2)}\def\ESEd{\rdDotsto(4,2)}%%ascii +\def\NNNWd{\luDotsto(2,6)}\def\NNNEd{\ruDotsto(2,6)}%%ascii +\def\SSSWd{\ldDotsto(2,6)}\def\SSSEd{\rdDotsto(2,6)}%%ascii +\def\WWNWd{\luDotsto(6,2)}\def\EENEd{\ruDotsto(6,2)}%%ascii +\def\WWSWd{\ldDotsto(6,2)}\def\EESEd{\rdDotsto(6,2)}%%ascii + +\let\NWl\luLine\let\NEl\ruLine\let\SWl\ldLine\let\SEl\rdLine\def\nNWl{\luLine +(2,3)}\def\nNEl{\ruLine(2,3)}%%ascii +\def\sSWl{\ldLine(2,3)}\def\sSEl{\rdLine(2,3)}%%ascii +\def\wNWl{\luLine(3,2)}\def\eNEl{\ruLine(3,2)}%%ascii +\def\wSWl{\ldLine(3,2)}\def\eSEl{\rdLine(3,2)}%%ascii +\def\NNWl{\luLine(2,4)}\def\NNEl{\ruLine(2,4)}%%ascii +\def\SSWl{\ldLine(2,4)}\def\SSEl{\rdLine(2,4)}%%ascii +\def\WNWl{\luLine(4,2)}\def\ENEl{\ruLine(4,2)}%%ascii +\def\WSWl{\ldLine(4,2)}\def\ESEl{\rdLine(4,2)}%%ascii +\def\NNNWl{\luLine(2,6)}\def\NNNEl{\ruLine(2,6)}%%ascii +\def\SSSWl{\ldLine(2,6)}\def\SSSEl{\rdLine(2,6)}%%ascii +\def\WWNWl{\luLine(6,2)}\def\EENEl{\ruLine(6,2)}%%ascii +\def\WWSWl{\ldLine(6,2)}\def\EESEl{\rdLine(6,2)}%%ascii + +\let\NWld\luDots\let\NEld\ruDots\let\SWld\ldDots\let\SEld\rdDots\def\nNWld{% +\luDots(2,3)}\def\nNEld{\ruDots(2,3)}%%ascii +\def\sSWld{\ldDots(2,3)}\def\sSEld{\rdDots(2,3)}%%ascii +\def\wNWld{\luDots(3,2)}\def\eNEld{\ruDots(3,2)}%%ascii +\def\wSWld{\ldDots(3,2)}\def\eSEld{\rdDots(3,2)}%%ascii +\def\NNWld{\luDots(2,4)}\def\NNEld{\ruDots(2,4)}%%ascii +\def\SSWld{\ldDots(2,4)}\def\SSEld{\rdDots(2,4)}%%ascii +\def\WNWld{\luDots(4,2)}\def\ENEld{\ruDots(4,2)}%%ascii +\def\WSWld{\ldDots(4,2)}\def\ESEld{\rdDots(4,2)}%%ascii +\def\NNNWld{\luDots(2,6)}\def\NNNEld{\ruDots(2,6)}%%ascii +\def\SSSWld{\ldDots(2,6)}\def\SSSEld{\rdDots(2,6)}%%ascii +\def\WWNWld{\luDots(6,2)}\def\EENEld{\ruDots(6,2)}%%ascii +\def\WWSWld{\ldDots(6,2)}\def\EESEld{\rdDots(6,2)}%%ascii + +\let\NWe\luEmbed\let\NEe\ruEmbed\let\SWe\ldEmbed\let\SEe\rdEmbed\def\nNWe{% +\luEmbed(2,3)}\def\nNEe{\ruEmbed(2,3)}%%ascii +\def\sSWe{\ldEmbed(2,3)}\def\sSEe{\rdEmbed(2,3)}%%ascii +\def\wNWe{\luEmbed(3,2)}\def\eNEe{\ruEmbed(3,2)}%%ascii +\def\wSWe{\ldEmbed(3,2)}\def\eSEe{\rdEmbed(3,2)}%%ascii +\def\NNWe{\luEmbed(2,4)}\def\NNEe{\ruEmbed(2,4)}%%ascii +\def\SSWe{\ldEmbed(2,4)}\def\SSEe{\rdEmbed(2,4)}%%ascii +\def\WNWe{\luEmbed(4,2)}\def\ENEe{\ruEmbed(4,2)}%%ascii +\def\WSWe{\ldEmbed(4,2)}\def\ESEe{\rdEmbed(4,2)}%%ascii +\def\NNNWe{\luEmbed(2,6)}\def\NNNEe{\ruEmbed(2,6)}%%ascii +\def\SSSWe{\ldEmbed(2,6)}\def\SSSEe{\rdEmbed(2,6)}%%ascii +\def\WWNWe{\luEmbed(6,2)}\def\EENEe{\ruEmbed(6,2)}%%ascii +\def\WWSWe{\ldEmbed(6,2)}\def\EESEe{\rdEmbed(6,2)}%%ascii + +\let\NWo\luOnto\let\NEo\ruOnto\let\SWo\ldOnto\let\SEo\rdOnto\def\nNWo{\luOnto +(2,3)}\def\nNEo{\ruOnto(2,3)}%%ascii +\def\sSWo{\ldOnto(2,3)}\def\sSEo{\rdOnto(2,3)}%%ascii +\def\wNWo{\luOnto(3,2)}\def\eNEo{\ruOnto(3,2)}%%ascii +\def\wSWo{\ldOnto(3,2)}\def\eSEo{\rdOnto(3,2)}%%ascii +\def\NNWo{\luOnto(2,4)}\def\NNEo{\ruOnto(2,4)}%%ascii +\def\SSWo{\ldOnto(2,4)}\def\SSEo{\rdOnto(2,4)}%%ascii +\def\WNWo{\luOnto(4,2)}\def\ENEo{\ruOnto(4,2)}%%ascii +\def\WSWo{\ldOnto(4,2)}\def\ESEo{\rdOnto(4,2)}%%ascii +\def\NNNWo{\luOnto(2,6)}\def\NNNEo{\ruOnto(2,6)}%%ascii +\def\SSSWo{\ldOnto(2,6)}\def\SSSEo{\rdOnto(2,6)}%%ascii +\def\WWNWo{\luOnto(6,2)}\def\EENEo{\ruOnto(6,2)}%%ascii +\def\WWSWo{\ldOnto(6,2)}\def\EESEo{\rdOnto(6,2)}%%ascii + +\let\NWod\luDotsonto\let\NEod\ruDotsonto\let\SWod\ldDotsonto\let\SEod +\rdDotsonto\def\nNWod{\luDotsonto(2,3)}\def\nNEod{\ruDotsonto(2,3)}%%ascii +\def\sSWod{\ldDotsonto(2,3)}\def\sSEod{\rdDotsonto(2,3)}%%ascii +\def\wNWod{\luDotsonto(3,2)}\def\eNEod{\ruDotsonto(3,2)}%%ascii +\def\wSWod{\ldDotsonto(3,2)}\def\eSEod{\rdDotsonto(3,2)}%%ascii +\def\NNWod{\luDotsonto(2,4)}\def\NNEod{\ruDotsonto(2,4)}%%ascii +\def\SSWod{\ldDotsonto(2,4)}\def\SSEod{\rdDotsonto(2,4)}%%ascii +\def\WNWod{\luDotsonto(4,2)}\def\ENEod{\ruDotsonto(4,2)}%%ascii +\def\WSWod{\ldDotsonto(4,2)}\def\ESEod{\rdDotsonto(4,2)}%%ascii +\def\NNNWod{\luDotsonto(2,6)}\def\NNNEod{\ruDotsonto(2,6)}%%ascii +\def\SSSWod{\ldDotsonto(2,6)}\def\SSSEod{\rdDotsonto(2,6)}%%ascii +\def\WWNWod{\luDotsonto(6,2)}\def\EENEod{\ruDotsonto(6,2)}%%ascii +\def\WWSWod{\ldDotsonto(6,2)}\def\EESEod{\rdDotsonto(6,2)}%%ascii + +%%======================================================================% +%% % +%% (25) MISCELLANEOUS % +%% % +%%======================================================================% + +\def\labelstyle{%% +\ifincommdiag%% +\textstyle%% +\else%% +\scriptstyle%% +\fi}%% +\let\objectstyle\displaystyle + +\newdiagramgrid{pentagon}{0.618034,0.618034,1,1,1,1,0.618034,0.618034}{1.% +17557,1.17557,1.902113,1.902113} + +\newdiagramgrid{perspective}{0.75,0.75,1.1,1.1,0.9,0.9,0.95,0.95,0.75,0.75}{0% +.75,0.75,1.1,1.1,0.9,0.9} + +\diagramstyle[%%ascii open square bracket +dpi=300,%% office laserwriters are usually 300 dots per inch +vmiddle,nobalance,%% vertical and horizontal positioning +loose,%% allow rows and columns to stretch +thin,%% line10 arrows; default rule thickness (TeXbook p447) +pilespacing=10pt,% +%% parallel vertical separation (horizontals: half this) +shortfall=4pt,%% distance between arrowheads and their targets +%% The following are defaulted on entry to the diagram itself. +%% l>=2em minimum length of horizontal arrow shafts in text +%% l>=1em ditto in diagrams +%% size=3em cell size +%% heads=LaTeX arrowheads +]%%ascii close square bracket + +%% process options to LaTeX2e's \usepackage[options]{diagrams} +\ifx\ProcessOptions\CD@qK\else\CD@PK\ProcessOptions\relax\CD@FF\CD@e\fi\fi + +%%============================== THE END ==================================== +\CD@vE\CD@hK\message{| running in pdf mode -- diagonal arrows will work +automatically |}\else\message{| >>>>>>>> POSTSCRIPT MODE (DVIPS) IS NOW THE +DEFAULT <<<<<<<<<<<<|}\message{|(DVI mode has not been supported since 1992 +and produces inferior|}\message{|results which are completely unsuitable for +publication. However,|}\message{|if you really still need it, you can still +get it by loading the |}\message{|package using ``\string\usepackage[% +UglyObsolete]{diagrams}'' instead. ) |}\fi\else\message{| >>>>>>>> USING UGLY +OBSOLETE DVI CODE - PLEASE STOP <<<<<<<<<<<<|}\message{|(DVI mode has not been +supported since 1992 and produces inferior|}\message{|results which are +completely unsuitable for publication - Please |}\message{|use the PostScript +or PDF mode instead, for much better results.)|}\fi\cdrestoreat +%% restore old category code for @ etc +\message{===================================================================}% +%% This is the end of Paul Taylor's commutative diagrams package. diff --git a/macros/generic/diagrams/taylor/diagrams.sty b/macros/generic/diagrams/taylor/diagrams.sty new file mode 120000 index 0000000000..900cb89f4b --- /dev/null +++ b/macros/generic/diagrams/taylor/diagrams.sty @@ -0,0 +1 @@ +diagrams.tex
\ No newline at end of file diff --git a/macros/generic/diagrams/taylor/diagrams.tex b/macros/generic/diagrams/taylor/diagrams.tex new file mode 120000 index 0000000000..a18d216e51 --- /dev/null +++ b/macros/generic/diagrams/taylor/diagrams.tex @@ -0,0 +1 @@ +V3,93.tex
\ No newline at end of file diff --git a/macros/generic/diagrams/taylor/index.html b/macros/generic/diagrams/taylor/index.html new file mode 100644 index 0000000000..ae66144ea2 --- /dev/null +++ b/macros/generic/diagrams/taylor/index.html @@ -0,0 +1,599 @@ + + + + + + + + +<title> Commutative Diagrams in TeX</title> + +<h1 align="center">Commutative Diagrams in TeX </h1> + +<h3 align="center">Paul Taylor </h3> + +<h3 align="center">since 1986 </h3> + + + + +<div class="p"><!----></div> + +<div class="p"><!----></div> + +<div class="p"><!----></div> + +<div class="p"><!----></div> + +<div class="p"><!----></div> + +<div class="p"><!----></div> + +<div class="p"><!----></div> + +<div class="p"><!----></div> + +<div class="p"><!----></div> + +<div class="p"><!----></div> + +<div class="p"><!----></div> + +<div class="p"><!----></div> + +<div class="p"><!----></div> + + +<div class="p"><!----></div> + + + + + + +<div class="p"><!----></div> + +<div class="p"><!----></div> + + + +<div class="p"><!----></div> + + + +<div class="p"><!----></div> + + +<div class="p"><!----></div> + + + +<div class="p"><!----></div> + + + + + + +<div class="p"><!----></div> + + +<div class="p"><!----></div> + + This is a macro package for drawing so-called "commutative" diagrams +in category theory and related subjects. + +<div class="p"><!----></div> + +<h2>The macros and the manual</h2> + +<div class="p"><!----></div> +Unlike many other packages there is no "installation procedure" - +you just copy <a href="diagrams.sty"><b>the macros themselves</b></a> +to your <span class="roman">T</span><sub><span class="roman">E</span></sub><span class="roman">X</span> macros directory. + +<div class="p"><!----></div> +The <b>manual</b> is available in several formats: +<a href="manual.tex">LaTeX source</a>, +<a href="manual.pdf">PDF</a>, +<a href="manual.dvi">DVI</a>, +<a href="manual.ps.gz">600dpi A4 PostScript</a> and +<a href="booklet.ps.gz">600dpi A5 PS booklet</a>. +The "booklet" form requires a two-sided printer with A4 paper; +if you don't have such a thing, don't bother taking the file. + +<div class="p"><!----></div> +If you have not already done so, please register as a user by sending +a message to <b>pt @ cs.man.ac.uk</b> +with the words "commutative diagrams" in the subject line. + +<div class="p"><!----></div> +I have also written some macros for <a href="../proofs/index.html">proofs</a> +and <a href="../tex/index.html">other things</a>. + +<div class="p"><!----></div> + +<h2>Diagonal arrows, PostScript and PDF</h2> + +<div class="p"><!----></div> +<a href="http://en.wikipedia.org/wiki/TeX"><span class="roman">T</span><sub><span class="roman">E</span></sub><span class="roman">X</span></a> itself +and its basic output format +(<a href="http://en.wikipedia.org/wiki/DVI_(file_format)">DVI</a>) were +designed by Donald Knuth to place letters and symbols from a variety +of typefaces on an orthogonal grid, an idea that goes back to +Gutenberg's original "movable type" printing press. This means that +there is no natural way of drawing diagonal lines or rotating text. + +<div class="p"><!----></div> +Though DVI has the merit of simplicity, most complex documents +nowadays in both the open-source and commercial worlds are distributed +in Adobe's PostScript or PDF formats. +In particular, the commonest way of printing (the DVI output from) <span class="roman">T</span><sub><span class="roman">E</span></sub><span class="roman">X</span> documents is to use Tomas Rokicki's program +<a href="http://www.radicaleye.com"><b>dvips</b></a>. + +<div class="p"><!----></div> +PostScript and PDF have a much more general coordinate system than +<span class="roman">T</span><sub><span class="roman">E</span></sub><span class="roman">X</span> has, and it is very easy to rotate blocks of text. +The diagrams package was designed in 1992 to take advantage of this +feature of PostScript and (from 2002) PDF. It was always intended to +be used in this way, although only in 2004 was the default changed to +use this. + +<div class="p"><!----></div> +Unfortunately, because of the inappropriately set optional behaviour, +many users were not enjoying any of the benefits of the package. +They were instead using the obsolete pre-1992 code (see below); +this generated <span class="roman">L</span><sup><span class="roman">A</span></sup><span class="roman">T</span><sub><span class="roman">E</span></sub><span class="roman">X</span>-style arrows, that had incompatible arrowheads +and didn't meet the objects to which they were supposed to point. + +<div class="p"><!----></div> +<br />There are other graphical packages, including several that are also +used to draw categorical diagrams, that draw diagonal lines in other +ways, some of which are understood by xdvi. Like <span class="roman">L</span><sup><span class="roman">A</span></sup><span class="roman">T</span><sub><span class="roman">E</span></sub><span class="roman">X</span>'s +<tt>picture</tt> environment, they do this by juxtaposing many +characters (such as diagonal line-segments or dots) from special fonts. +These fonts need to be distributed and installed along with the +macro packages themselves. + +<div class="p"><!----></div> +My diagrams package, on the other hand, needs no special fonts, and +there is just the macro package itself to install. It achieves the +same generality of diagonal arrows as it has horizontal ones by +taking advantage of the method that most people use to print their +documents. +This design decision was taken following +<a href="msg1992.html">consultation</a> with users, +and I have always remained convinced that it was the correct one. + +<div class="p"><!----></div> +The method was adapted to +<a href="http://www.tug.org/applications/pdftex">pdftex</a>. +If xdvi or other programs implemented extensions to DVI to rotate boxes, +it could be used for them too. + +<div class="p"><!----></div> + +<h2>DVI previewers</h2> + +<div class="p"><!----></div> +DVI previewers such as +<a href="http://math.berkeley.edu/~vojta/xdvi.html">xdvi</a> and +<a href="http://math.ndsu.nodak.edu/resources/tex/bibliography/yap/yap.html">YAP</a> +do not understand the fragments of PostScript that are used to rotate +the arrows, so what should be diagonal arrows appear horizontal +instead. This behaviour is automatically corrected when you use +dvips to print the document. + +<div class="p"><!----></div> +If, for some reason, you need to use xdvi or yap to display documents +containing diagonals, you can still make use of the obsolete code. Use +the command + +<center> + <tt><tt>\usepackage </tt>[UglyObsolete,tight,heads=LaTeX] {diagrams}</tt> +</center> +to load the diagrams package. + +<div class="p"><!----></div> +<br /><b>Please do not use the obsolete code for publication.</b> + +<div class="p"><!----></div> +<br />Previous generations understood that you had to understand what +tools did and how they worked. Indeed, there was a saying that +"<b>bad workmen blame their tools</b>". +In the computer age, maybe even more so than in the pre-scientific one, +people expect things to "just work", <em>i.e</em>. by magic, +without understanding anything. + +<div class="p"><!----></div> +The pre-1992 pure DVI code in the diagrams package was a useful tool +in its day, and I still try to make most of my diagrams work with it. +However, if you wish to make extensive use of it, you too will have to +understand how it works, and make the manual adjustments that are +necessary to make up for the lack of magical programming behind it. + +<div class="p"><!----></div> +Firstly, since pure DVI cannot rotate characters, only the standard <span class="roman">L</span><sup><span class="roman">A</span></sup><span class="roman">T</span><sub><span class="roman">E</span></sub><span class="roman">X</span> arrowheads are available for diagonals, so you should only use the +<b>heads=LaTeX</b> option, and not (for example) <b>heads=vee</b>. + +<div class="p"><!----></div> +Second, since it uses <span class="roman">L</span><sup><span class="roman">A</span></sup><span class="roman">T</span><sub><span class="roman">E</span></sub><span class="roman">X</span>'s diagonal line and arrow characters, +the only slopes that are allowed are those with numerator and +denominator at most 4. However, since the package rounds slopes to +simple rationals anyway (even in the "PostScript" code), this is +not usually a problem in small diagrams. + +<div class="p"><!----></div> +<br />But there is a <b>more serious problem</b> than this. + +<div class="p"><!----></div> +The package makes two "passes" when constructing each diagram: +one in which it constructs a "matrix" from the data that you type, +and a second in which it takes this matrix apart and stretches +each of the arrows to meet its endpoints. + +<div class="p"><!----></div> +The obsolete "pure DVI" code constructs diagonal lines entirely in +the first pass and <b>does not stretch them</b> in the second pass. +It just makes a guess at the appropriate length, based on the +<b>width</b> and <b>height</b> options for the diagram. + +<div class="p"><!----></div> +<br /><b>You should always choose the appropriate width and height yourself.</b> + +<div class="p"><!----></div> +<br />By default, the rows and columns of the diagram are <b>loose</b> - +they stretch in the same way as any other matrix or table, and +the "PostScript" code corrects for this. +This default was chosen to make the package "just work", +but <b>diagrams look better if they are of a uniform regular size</b>. + +<div class="p"><!----></div> +Since the obsolete pure DVI code does not make the necessary correction +in the second pass, you have to make sure that its first guess is correct, +by setting the width and height yourself, and making the diagram +<b>tight</b>. When you set the <b>tight</b> option, you will +find at first that the object labels sometimes overprint. The package +generates error messages to tell you where this happens, +and makes a suggestion for the appropriate <b>size</b> +(common height and width), although this is usually too big. + +<div class="p"><!----></div> +Sometimes you will also need to adjust the <b>shortfall</b> +of any arrows that point at large object labels, +<em>i.e</em>. the distance between the end of the arrow and the object. + +<div class="p"><!----></div> +<br />Finally, you may ask why I don't "fix" this code. Indeed I have looked +into doing so several times. The answer is quite simply that the +small benefit that would accrue from rewriting it does not justify the +labour that would be needed. +Not only is it much simpler to rotate horizontal arrows, +but the the results are also far superior. + +<div class="p"><!----></div> + +<h2>Arrowheads used in my book</h2> + +<div class="p"><!----></div> +You will see that the diagrams in my book +<a href="../Practical-Foundations/index.html"><i>Practical Foundations of Mathematics</i></a> +have arrowheads compatible with those of <span class="roman">T</span><sub><span class="roman">E</span></sub><span class="roman">X</span>'s ordinary <tt>\rightarrow</tt>. +This was done by modifying the MetaFont source of <tt>\rightarrow</tt> +to reduce its shaft to nothing, ie to make it just an arrowhead. + +<div class="p"><!----></div> +I regret that I will <em>not</em> be releasing this MetaFont code, or PK +files derived from it, because I am not prepared to undertake the +support work that would be necessary afterwards. +(Not even if you "promise to keep it to yourself", +as you will inevitably release DVI files into the world containing +references to these characters, obliging me to provide PK files to +your readers, and explain to them why they keep getting checksum errors +from dvips.) + +<div class="p"><!----></div> +However, if you are intending to create a new symbols font yourself +(to follow the "St. Mary Road" fonts), +<em>and undertake the necessary support work</em>, +I will be very pleased to give you the MetaFont source for these arrowheads +and the other new symbols that are introduced in the book. +I now have these in a form that's compatible with teTeX. + +<div class="p"><!----></div> + +<h2>Features introduced since September 1992</h2> + +<div class="p"><!----></div> +See also the top of the source file for bug fixes and adjustments +to the positioning of things. + +<div class="p"><!----></div> + +<h3>3.91 Released 1 September 2006</h3> + +<div class="p"><!----></div> + +<h3>3.90 Released 11 April 2004</h3> + +<div class="p"><!----></div> + +<div class="p"><!----></div> +PostScript mode made default. + +<div class="p"><!----></div> + +<h3>3.89 Released 7 July 2002</h3> + +<div class="p"><!----></div> +Added support for pdftex, which is recognised automatically. + +<div class="p"><!----></div> + +<h3>3.88 Released 1 September 2000</h3> + +<div class="p"><!----></div> + +<ul> +<li> Square hooks made available as arrowtails: + +<pre> + \newarrow{SquareInto}{sqhook}---> + \begin{diagram} + A & \rSquareInto B + \end{diagram} + +</pre> + +<div class="p"><!----></div> +</li> +</ul> + +<div class="p"><!----></div> + +<h3>3.87 Released 1 September 1999</h3> + +<div class="p"><!----></div> +This version was used for the absolutely final 1200dpi PostScript copy +of the book, as it was handed over to CUP in December 1998. + +<div class="p"><!----></div> +The only change was a 0.2pt fudge to the positioning of the components +of arrows. Previously a lot of tweaking had been done in this department. + +<div class="p"><!----></div> + +<h3>3.86 Released 1 September 1998</h3> + +<div class="p"><!----></div> + +<ul> +<li> New options <b>hug</b> and <b>nohug</b> in PostScript mode: + +<pre> + \diagramstyle[PS,nohug] + +</pre> + uses PostScript for the arrows without rotating the labels, but the + way of calculating the actual position of these horizontal labels on + will remain subject to alteration for some period of time - please + send me examples if you feel that adjustment is needed. +<div class="p"><!----></div> +</li> + +<li> <b>midvshaft</b> and <b>snake</b> for vertical arrows +<div class="p"><!----></div> +</li> + +<li> New option + +<pre> + \rTo[gap=5pt] + +</pre> + to create a gap in horizontals and PS diagonals, instead of the hack + +<pre> + \rTo~{\;} + +</pre> + which caused <tt>^</tt> and <tt>_</tt> labels to be moved too far away + from the shaft. The width, here 5pt, defaults to the same + value as <b>shortfall</b>. +<div class="p"><!----></div> +</li> + +<li> Added <tt>>-></tt> and /verb/<-</ arrowheads; these are the same + as <tt>></tt> and <tt><</tt> but the shaft goes <em>through</em> the extra + arrowhead. +<div class="p"><!----></div> +</li> + +<li> Added 2pt space separating labels from vertical arrows. +<div class="p"><!----></div> +</li> + +<li> Identify the cell in which a second-pass error occurs. +<div class="p"><!----></div> +</li> + +<li> Corrected position of hook in <tt>\dInto</tt> (see <tt>\shifthook</tt>). +<div class="p"><!----></div> +</li> + +<li> Corrections to <tt>\lhtriangle</tt>, <tt>\dhtriangle</tt>, + and <tt>\newarrowtail{boldhook}</tt>. +<div class="p"><!----></div> +</li> + +<li> Suppress indentation of text following diagram (due to <span class="roman">L</span><sup><span class="roman">A</span></sup><span class="roman">T</span><sub><span class="roman">E</span></sub><span class="roman">X</span> change). +<div class="p"><!----></div> +</li> + +<li> Mangle <tt>\left@label</tt> and <tt>\right@label</tt> because of a + conflict with Elsevier's macros. +<div class="p"><!----></div> +</li> + +<li> Corrected dot spacing with <tt>[dotted]</tt> option. +<div class="p"><!----></div> +</li> +</ul> + +<div class="p"><!----></div> + +<h3>3.85 Released 20 August 1997</h3> + +<div class="p"><!----></div> + +<ul> +<li> New option <tt>[leftflush=margin]</tt> for left alignment of + diagrams on a margin, instead of centering them. + <tt>[leftflush]</tt> is like <tt>[flushleft]</tt>, + except that it reckons the alignment from multiple + verticals, or from text if there's no vertical. +<div class="p"><!----></div> +</li> + +<li> New options <tt>[hug]</tt> and <tt>[nohug]</tt> in PostScript mode: + <tt>[PS,nohug]</tt> uses PS for the arrows <b>without rotating the + labels</b>. Beware that this has been done in a lazy way by + overprinting empty <span class="roman">L</span><sup><span class="roman">A</span></sup><span class="roman">T</span><sub><span class="roman">E</span></sub><span class="roman">X</span>-style diagonals carrying the labels, which + may therefore be mis-placed. +<div class="p"><!----></div> +</li> + +<li> New option <tt>[crab=distance]</tt> shifts horizontals and PS + diagonals transversally by the specified distance. + The abbreviations <tt>[crab+]</tt> and <tt>[crab-]</tt> use + <tt>\PileSpacing</tt>, so to put four diagonal lines in parallel + do something like + +<pre> + \ruTo[crab--] \ldTo[crab-] \ruTo[crab+] \ldTo[crab++] + +</pre> + This doesn't work with <tt>[nohug]</tt>. +<div class="p"><!----></div> +</li> + +<li> New option <tt>[snake=distance]</tt> shifts the middle of midshaft + horizontals and PS diagonals longitudinally by the specified + distance. +<div class="p"><!----></div> +</li> +</ul> + +<div class="p"><!----></div> + +<h3>3.84 Released 2 September 1996</h3> + +<div class="p"><!----></div> +Provided <tt>\NWclck</tt> etc 2-cell arrows. + +<div class="p"><!----></div> + +<h3>3.83 Released 18 May 1995</h3> + +<div class="p"><!----></div> + +<ul> +<li> New <tt>[dotted]</tt> option to change the filler on an arrow to + dots (useful for mediators for universal properties). +<div class="p"><!----></div> +</li> + +<li> Option <tt>[LaTeXeqno]</tt> uses <span class="roman">L</span><sup><span class="roman">A</span></sup><span class="roman">T</span><sub><span class="roman">E</span></sub><span class="roman">X</span>'s equation number and style + for "eqno"; <span class="roman">L</span><sup><span class="roman">A</span></sup><span class="roman">T</span><sub><span class="roman">E</span></sub><span class="roman">X</span>'s <tt>\label</tt> command picks this up. +<div class="p"><!----></div> +</li> +</ul> + +<div class="p"><!----></div> + +<h3>3.81 Released 18 July 1994</h3> + +<div class="p"><!----></div> + +<ul> +<li> <b>Stretchable PostScript diagonals implemented</b>. +<div class="p"><!----></div> +</li> + +<li> <tt>\overprint{text}</tt> sets text in maths and overprints it in the + current cell, centered in the column irrespective of other stuff. +<div class="p"><!----></div> +</li> + +<li> Option <tt>[repositionpullbacks]</tt> + redefines <tt>\SEpbk</tt> etc to use <tt>\overprint</tt>. +<div class="p"><!----></div> +</li> + +<li> New option <tt>[grid]</tt> to set column and row widths individually: + see manual for examples such as a regular pentagon and cube with perspective. +<div class="p"><!----></div> +</li> + +<li> Option <tt>[PostScript=name]</tt> takes the name of a DVI<font face="symbol">®</font +>PS + translator as argument. +<div class="p"><!----></div> +</li> + +<li> Equilateral triangle or regular hexagon size options. +<div class="p"><!----></div> +</li> + +<li> Introduced landscape and portrait options. +<div class="p"><!----></div> +</li> + +<li> Peter Freyd's <tt>\puncture</tt> symbol provided. +<div class="p"><!----></div> +</li> +</ul> + +<div class="p"><!----></div> + +<h3>Earlier Version numbers</h3> + +<ul> +<li> 2 was circulated to some people in September 1989 +<div class="p"><!----></div> +</li> + +<li> 3.16 was advertised on <tt>types</tt> and <tt>categories</tt> + in July 1990 and emailed to those who asked for it. +<div class="p"><!----></div> +</li> + +<li> 3.18 was the final bug-fix before the re-write began in April + 1992. +<div class="p"><!----></div> +</li> + +<li> 3.20 introduced error-recovery, and <tt>\newarrow</tt> for + horizontals and verticals. +<div class="p"><!----></div> +</li> + +<li> 3.22 completely rewrote the reformatting program for h and + corrected numerous alignment errors; introduced options in square + brackets +<div class="p"><!----></div> +</li> + +<li> 3.23 fixed a catastrophic error in nested diagrams +<div class="p"><!----></div> +</li> + +<li> 3.24 extended <tt>\newarrow</tt> to diagonals, added + trigonometry code, rewrote code for drawing <span class="roman">L</span><sup><span class="roman">A</span></sup><span class="roman">T</span><sub><span class="roman">E</span></sub><span class="roman">X</span> diagonals, + introduced PostScript and TPIC diagonals, consistent choice of + arrowheads. +<div class="p"><!----></div> +</li> +</ul> + +<div class="p"><!----></div> diff --git a/macros/generic/diagrams/taylor/manual.bklt.gz b/macros/generic/diagrams/taylor/manual.bklt.gz Binary files differnew file mode 100644 index 0000000000..d0260bdf1e --- /dev/null +++ b/macros/generic/diagrams/taylor/manual.bklt.gz diff --git a/macros/generic/diagrams/taylor/manual.dvi b/macros/generic/diagrams/taylor/manual.dvi Binary files differnew file mode 100644 index 0000000000..afaa65122c --- /dev/null +++ b/macros/generic/diagrams/taylor/manual.dvi diff --git a/macros/generic/diagrams/taylor/manual.pdf b/macros/generic/diagrams/taylor/manual.pdf Binary files differnew file mode 100644 index 0000000000..13bd061411 --- /dev/null +++ b/macros/generic/diagrams/taylor/manual.pdf diff --git a/macros/generic/diagrams/taylor/manual.ps.gz b/macros/generic/diagrams/taylor/manual.ps.gz Binary files differnew file mode 100644 index 0000000000..1b831e2e1f --- /dev/null +++ b/macros/generic/diagrams/taylor/manual.ps.gz diff --git a/macros/generic/diagrams/taylor/manual.tex b/macros/generic/diagrams/taylor/manual.tex new file mode 100644 index 0000000000..e9b6a044a0 --- /dev/null +++ b/macros/generic/diagrams/taylor/manual.tex @@ -0,0 +1,2695 @@ +\errorcontextlines 999 +% +% ========================================= +\title { Commutative Diagrams in \TeX\ % + (version 4)} +% | | +% | by | +% | | +\author {{\bf Paul Taylor }\\ +% ========================================= +% + {\tt www.cs.man.ac.uk/$\sim$pt}} +% +\date {15 June 1997} +% +\def\abstracttext + {\TeX\ and \LaTeX\ have become standard as a way of writing papers + in Computer Science and Category Theory. + Even in source form they are easier to compose and read than + attempts to write mathematics in ASCII. In~Category Theory + ``commutative diagrams'' are essential for a clear visual + understanding of the paper, but the graphics capabilities of \TeX\ + are so limited that it is very difficult to draw them nicely, if at + all. This manual describes a new but reverse-compatible version of + a package to draw such diagrams, expressed in a language in which many + users have already found it very easy to express themselves.} +% +% =============================================================== +\documentclass[a4paper]{article} +\usepackage{diagrams} +\makeatletter +\makeindex +\def\pt@input#1#2#3{\openin1 #1 \ifeof1 \typeout{#2}#3% + \else\closein1 \relax\input #1 \fi}% +% +% Read the diagram macros file, saving the banner from the top. +\let\messagex\message +\def\banner{Paul Taylor's diagrams package}% +%\def\getbanner<#1>{\def\banner{#1}}% +%\def\message#1{\getbanner#1\let\message\messagex\message{#1}}% +%\pt@input{diagrams}% +%{I can't find the commutative diagrams package, +%so I can't process the manual!}\endinput +%\ifx\newarrow\undefined +%\message{This manual cannot be processed by any version earlier than 3.24.}% +%\message{Please get an up-to-date version from ftp.dcs.qmw.ac.uk.}% +%\expandafter\endinput\fi +% +% ********************************************************** +% * You can experiment with changing the following options * +% * as explained in the "Options" section of this manual. * +% ********************************************************** +% +\diagramstyle[tight,centredisplay% +%,dpi=300% 300dpi is default; +%,dpi=212% for two-up (A4 on A5) reduction of 300dpi +,dpi=600% for more modern laser-printers +%,dpi=424% for two-up (A4 on A5) reduction of 600dpi +%,PostScript=Rokicki% +,UglyObsolete% formerly called ``noPostScript'' +%,TPIC% +,heads=LaTeX% +%,heads=vee% +%,heads=triangle% +%,heads=curlyvee% uses AMS symbols +%,heads=littlevee% +%,heads=boldlittlevee% needs good-bold-math below +%,heads=littleblack% uses AMS symbols +%,heads=blacktriangle% uses AMS symbols +] +% The boldhook tails and boldlittlevee heads use sizes of cmsy and cmmi +% fonts which you may not have available. In this case, please change +% the following to \havegoodboldmathfalse. +\newif\ifhavegoodboldmath\havegoodboldmathtrue +% +% =============================================================== +% =============================================================== +% Try to read various non-essential auxiliary input files. +% +\iftrue + \ifx\ds@amssymb\undefined + \ifx\ds@mssymb\undefined + \ifx\ds@amssymbols\undefined + \pt@input{amssymb.sty}{}{% + \pt@input{mssymb.tex}{}{% + \pt@input{amssymbols.sty}% + {Some of the arrowheads in the diagrams package use symbols from the extra + ^^Jfonts (msxm/msym or msam/msbm) provided by the American Mathematical + Society.^^JYou can get these by anonymous FTP from e-math.ams.com and + elsewhere. + ^^JIn this manual the relevant examples will just be left out.^^J}{}}}% + \else\ds@amssymbols\fi\else\ds@mssymb\fi\else\ds@amssymb\fi + \makeatletter % old versions of mssymb b*gg*r up \catcode`\@ +\fi +% +\pt@input{a4.sty}% +{^^JThis manual was written for European A4 paper, but you do not have a4.sty. +^^JYou'll get lots of Over-full \string\hbox'es, but don't worry. +It doesn't matter.^^JWe can carry on without any real harm.}{}% +\advance\textheight 5mm +% +\def\AMS{$\cal A$\kern-.1667em\lower.5ex\hbox{$\cal M$}\kern-.125em$\cal S$} +\def\AmSTeX{\AMS-\TeX} +\def\LAMSTeX{L\raise.42ex\hbox{\kern-.3em\the\scriptfont2 A}% + \kern-.2em\lower.376ex\hbox{\the\textfont2 M}% + \kern-.125em {\the\textfont2 S}-\TeX} +\def\AMSLaTeX{\AMS-\LaTeX} +\def\LaTeXe{\mbox{\LaTeX\kern.15em$2_{\textstyle\varepsilon}$}} + +\def\PiC{P\kern-.12em\lower.5ex\hbox{I}\kern-.075emC} +\def\PiCTeX{\PiC\kern-.11em\TeX} +\def\XYpic{\leavevmode\hbox{X\kern-.3em\lower.4ex\hbox{Y\kern-.15em}-pic}} + +% +% I prefer paragraphs spaced rather than indented +\parskip=2pt plus 2pt minus 1pt +% and I don't like hyphenation +\spaceskip=.5em plus .6em minus .2em +\pretolerance=2000 +\binoppenalty=2000 +\relpenalty=1500 +% Penalty for splitting paragraphs +\interlinepenalty=150 +\predisplaypenalty=10000 +\postdisplaypenalty=400 +\@beginparpenalty=\predisplaypenalty +% +% +%\let\@mkboth\markboth +\def\@oddfoot{}% +\def\@evenfoot{}% +\def\@evenhead{{\bf\thepage}\hfil{\rm\topmark}}% +\def\@oddhead{{\rm\banner}\hfil{\bf\thepage}}% +\def\sectionmark#1{\mark{\thesection. #1}}% should have \S but doesn't work +%\def\section@mark#1{\markboth{#1}{\banner}}% +\@twosidetrue +% +% +\let\volx\relax % for ltugbot.sty +\newcommand{\bsl}{$\backslash$} +% +\def\ix#1{#1\index{#1}}\def\person#1#2{#1 #2\index{#2, #1}}% +{\escapechar-1 \xdef\bslch{\string\\}}% +\def\ixcmd#1{{\escapechar-1 \xdef\cmdname{\string#1}}% + \expandafter\index{\cmdname @\bslch verb/\string#1/}}% +\def\ixprotect#1{{\escapechar-1 \xdef\cmdname{\string#1}}% + \expandafter\index{\cmdname @\protect#1}}% + +\newarrow{Congruent}33333 +\newarrow{Curlyto}----{curlyvee} +\newarrow{TeXto}----{->} +\newarrow{TeXonto}----{->>} +\newarrow{Blackinto}{blacktriangle}---> +\newarrow{Openinto}{triangle}---> +\newarrow{EEmbedd}{>>}---{>>} +\newarrow{Corresponds}<---> +\newarrow{Backwards}<---- +\newarrow{Multi}----o +\newarrow{Crossto}----X +\newarrow{Partial}----{harpoon} +\newarrow{Into}{\ifhavegoodboldmath bold\fi hook}---> + +%================================================================= +% +% verbatim array +% +%================================================================= + + +% This defines two new LaTeX environments: verbarray and verbdiag. + +% The first is like the verbatim environment, except that it treats each +% cell of an array individually, centring the text within aligned &s. The two +% arguments specify the text to be used for & and \\. Because of the +% eager parsing at the beginning of a cell, \relax is needed before +% commands that expand to anything other than their own text. +% For example, +% \begin{verbarray}{\ \&\ }{\ \string\\ \ } +% A&\relax\rTo^f&B\\ +% \relax\dTo^g&&\relax\dTo^h\\ +% C&\relax\rTo^k&D +% \end{verbarray} +% produces the contents of a simple diagram. + +% The second packages this to produce a verbatim diagram, ie it encloses +% the text in ``\begin{diagram}'' and ``\end{diagram}''. Any text which +% follows ``\begin{verbdiag}'' on the same line is copied verbatim after +% \begin{diagram}. + +% Here is a list of the characters that have been specially catcoded +% except & [adapted from plain.tex] +\def\dospecialsexceptand{\do\\\do\{\do\}\do\$% + \do\^\do\^^K\do\_\do\^^A\do\%\do\~} +% (not counting ascii null, tab, linefeed, formfeed, return, delete) +% Each symbol in the list is preceded by \do, which can be defined +% if you want to do something to every item in the list. + +\def\lverbcell{\begingroup \catcode``=13 \@noligs +\tt \let\do\@makeother \dospecialsexceptand \dolverbcell} +\def\dolverbcell#1\rverbcell{#1\endgroup} + +\def\verbarraycr{\omit{\verbarraycrstring}\cr} + +\newenvironment{verbarray}[2]% +{\abovedisplayskip\z@ \abovedisplayshortskip\abovedisplayskip +\belowdisplayskip\abovedisplayskip\belowdisplayshortskip\abovedisplayskip +$$\hss\vbox\bgroup +\tabskip\z@ +\let\\\verbarraycr\edef\verbarraycrstring{#2}% +\halign\bgroup +\hfil\lverbcell##\rverbcell\hfil&&{#1}\hfil\lverbcell##\rverbcell\hfil\cr +%$$ +}% +{%$$ +\verbarraycr\egroup\egroup\hss$$} + +\def\ke{\kern.25em} + +\newenvironment{verbdiag}% +{\begin{pageblock}% + \vspace{2ex}% + \let\do\@makeother + \def\beginverbdiag{\begin{verbarray}{\ke\tt\&\ke}{\ke\string\\}}% + \noindent\tt\string\begin\{diagram\} + \bgroup\aftergroup\beginverbdiag\let\par\egroup + \obeylines\dospecials +}% +{\end{verbarray}% + \string\end\{diagram\}%\$\$ + \vspace{2ex}% + \end{pageblock}% +} + +\newenvironment{clean}{}{} +\newenvironment{pageblock}{\vbox\bgroup}{\egroup} + +\makeatother +%============================================================================= +%============================================================================= +%============================================================================= + +\begin{document} +\maketitle +\begin{abstract}\noindent\abstracttext\end{abstract} + +\section{Introduction} +In papers in mathematics and computer science which employ Category Theory, +there is much benefit in clarity if ``commutative diagrams'' are used as +much as possible to illustrate definitions, equations and universal +properties. Here is a typical such diagram: it is one of the +Mac~Lane-Kelly equations.% +\index{Mac Lane, Saunders}\index{Kelly, Gregory Max} +\def\Id{{\rm id}}\def\Assl{{\rm assl}}% +\begin{diagram}[width=6em] +A*(B*(C*D))&\relax\rTo^\Assl&(A*B)*(C*D)&\relax\rTo^\Assl&((A*B)*C)*D\\ +\dTo^{\Id*\Assl} & & = & &\relax\uTo_{\Assl*\Id}\\ + A*((B*C)*D) & &\relax\rTo^\Assl & & (A*(B*C))*D\\ +\end{diagram} +This manual describes version~4 of the author's package for drawing +diagrams line this in (plain) \TeX\ or \LaTeX. +Version~3 is already very widely used in +the Category Theory and Theoretical Computer Science communities. +Most of the underlying code has been rewritten, with a great improvement to +the appearance of the diagrams, but it remains compatible with the previously +developed and very popular straightforward language. + +\section{Design Criteria} +Drawing such a diagram using the \LaTeX\ \verb/picture/ environment% +\ixprotect\LaTeX\index{picture environment} +takes +about sixty lines of code, though some saving is possible (with the positioning +of labels on arrows) by means of some simple macro programming. +To get the arrows to match up neatly with the objects takes quite a lot of +experimentation, and the whole job has to be repeated with each new diagram +or each modification. +Again, the use of macros for commonly occurring diagrams such as squares and +triangles can save effort, but this does not postpone the difficulty very +far, because as soon as we want to draw a slightly more complicated diagram +we're back to square one. + +The now widespread use of workstations with big screens and ``personal'' +computers has lead to a kind of religious fervour that a mouse with at most +three buttons is always easier to use than a keyboard with maybe over a hundred. +This might be so if the tracking software were accurate and could use telepathy +to ascertain what the user wanted, but in reality the attempts I have seen to +``draw it on the screen'' and include the result in a \TeX\ document have +looked as professional as what children bring home from their first +day at school. My view is, if you want {\em wysiwyg,} use pen and paper!% +\index{wysiwyg}\index{mouse} + +Besides the awful results, mouse-driven methods take longer and are less +portable. If you want to write a joint paper with a colleague on the other +side of the world, it is a great deal simpler to send a single ascii file +by electronic mail than to package twenty of them (including one file per +diagram as well as the main text) encoded in some weird commercial binary +format. + +On the basis of these remarks, the design criteria of this package are as +follows: + +\begin{enumerate} + +\item The entire diagram must form part of the source of the document itself. +In other words, there must be no preprocessing +({\em cf.}~{\tt eqn} in {\sc Unix}) +or inclusion of files (such as {\sc \ix{PostScript}} pictures). + +\item Simple diagrams must be able to be drawn ``on the fly'' and not +need to be drawn on paper first. +Obviously, complex diagrams will already have been worked out on paper anyway. + +\item The layout of the source code must resemble the intended +diagram as far as syntactically possible. + +\item There must be no \ix{measuring} of labels to calculate \ix{co-ordinates} +or lengths of arrows. + +\item There must be a variety of arrow styles, with facilities for +defining new ones.\index{arrowheads}\index{heads}\index{diagonal arrows} +Diagonal arrows (which, through lack of appropriate primitives, +\TeX\ makes very difficult to draw) should be provided at various +slopes, albeit with limited choice and features. + +\item The package must be compatible both with {\tt plain}~\TeX\ and% +\index{plain \protect\TeX}\ixprotect\LaTeX\ +with \LaTeX, and not rely on non-standard fonts\footnote{Diagonal lines +can {\em only\/} be drawn using \LaTeX's {\tt line10} and {\tt linew10} +fonts,\index{line10 and linew10 fonts}\index{AMS symbols fonts} +and for exotic arrow styles the AMS maths symbols fonts may be +useful: we regard these as standard. +\person{Alan}{Jeffery}'s \ix{St.\protect~Mary Road symbols font} +is also useful.} +or language features. + +\item Future versions which improve the appearance of the diagrams +must, as far as possible, be compatible with past papers written using the +package --- but you hack at your own risk! + +\end{enumerate} + +\noindent In addition there are {\ae}sthetic criteria, +some of which may be a matter of opinion: + +\begin{itemize} + +\item Arrows should \ix{stretch} to meet the objects which are intended to +be their endpoints. + +\item Arrows should be aligned (both horizontally and vertically) +with the centres of the objects.\index{aligned labels} + +\item Labels on arrows should not affect the spacing of the diagram +except to avoid overlapping.\index{labels} + +\item Stretching of arrows should not affect the centering of their +labels. + +\end{itemize} + +%================================================================= +% +% my version +% +%================================================================= + +\section{Typing the diagram}\label{typing} + +The diagram above is produced in \LaTeX\ixprotect\LaTeX\ +as follows:% +\ixcmd\input\ixcmd\usepackage +\ixcmd\diagram\ixcmd\enddiagram +\ixcmd{\begin{diagram}}\ixcmd{\end{diagram}}% + + +\vskip2ex + +\begin{pageblock} +\noindent\verb/\input diagrams/\\ +\verb/\def\Assl{{\rm assl}}\def\Id{{\rm id}}/\\[-2ex] +\begin{verbdiag} +A*(B*(C*D))&\relax\rTo^\Assl&(A*B)*(C*D)&\relax\rTo^\Assl&((A*B)*C)*D&\\ +\relax\dTo^{\Id*\Assl}&&=&&\relax\uTo_{\Assl*\Id}&\\ +A*((B*C)*D)&&\relax\rTo^\Assl&&(A*(B*C))*D& +\end{verbdiag} +\end{pageblock} +In {\tt plain} \TeX\index{plain \protect\TeX} +you do the same thing, writing \verb/\diagram/ and +\verb/\enddiagram/ wherever we have \verb/\begin{diagram}/ and +\verb/\end{diagram}/. + +In \LaTeXe\ixprotect\LaTeXe\ you can put +\begin{quote} +\verb/\usepackage{diagrams}/ +\end{quote} +in place of the \verb/\input/ command, but you have to rename or alias +the file to \verb/diagrams.sty/.\index{diagrams.sty}\index{diagrams.tex} + +The basic rule is to divide the diagram into cells, +\begin{diagram}[height=1em,width=0pt,loose,textflow] +%&&\relax\ && \ && \ && \ \\%39 +&A*(B*(C*D))\;&&\rTo^{\qquad\Assl\qquad}&&\;(A*B)*(C*D)\;&& +\rTo^{\qquad\Assl\qquad}&&\;((A*B)*C)*D\\%38 +\ &\HonV&&&& \rDots &&&&\HonV& \ \\%37 +\\ +&\dTo^{\Id*\Assl} & + \uDots && \uDots &=& \uDots && \uDots & + \uTo_{\Assl*\Id}\\%36 +\\ +\ &\HonV&&&& \rDots &&&&\HonV& \ \\%35 +&A*((B*C)*D) & & & & \rTo_\Assl & & & & (A*(B*C))*D \\%34 +%&& \ && \ && \ && \ \\%33 +\end{diagram} +just like the cells of a \ix{matrix}, and then type the contents +of the cells with columns delimited by ``{\tt\&}''\ixcmd{&} and rows by +``\verb/\\/''.\expandafter\index{\string\\@\string\\} +The bottom arrow extends through the \ix{empty cells} either +side of~it. Notice that although the matrix imposes a kind of co-ordinate +system, the widths of the columns and the heights of the rows are variable +and chosen automatically --- by \TeX, in the same way as it does for matrices, +tables,~{\it etc.}\index{co-ordinates} + +At first you will probably need to draw the diagram carefully on paper and +divide it into cells in this way before typing it in. +The main difficulty is working out how many \verb/&/s\ixcmd{&} to insert; +for this it is useful to observe that {\em in the simplest cases\/}% + \footnote{The bottom arrow disobeys this rule, since it goes across + three columns.} +\begin{itemize}\index{parity rule} +\item objects and verticals go in odd-numbered columns, and +\item horizontals and diagonals go in even-numbered columns. +\end{itemize} +Then, of course, you need an even number of \verb/&/s between columns +of the same parity and an odd number between different ones. +After a little practice you'll learn other rules of thumb, +but even if you make a mistake, the DVI previewer will make it clear how +to correct~it. +Error messages about {\em clashing\/}\index{clashing arrows} +or {\em unterminated\/} arrows\index{unterminated arrows} indicate +that something is wrong without previewing.\index{error checking} + +Each cell should contain {\it either\/} an \ix{object} (an~ordinary +mathematical expression, set in maths mode) {\it or\/}~a~\ix{morphism} +(an~\ix{arrow} such as \verb/\rTo^f/). Horizontal and vertical arrows cannot +be mixed in one cell; moreover only one horizontal arrow per cell is allowed, +but see the section~\ref{parallels} on parallel maps below. + +The horizontal and vertical arrows extend through the \ix{empty cells} either +side until they meet a non-empty cell, just like the +rook\index{rook (chess rule)} (castle\index{castle (chess rule)}) +in chess. +For this purpose anything other than \ix{white space} (space, tab and newline), +comments (\verb/%/) and \verb/\empty/ in the source make a cell non-empty. +For example \verb/\null/, \verb*/\ / or \verb/{}/\index{{}} +may be used to terminate arrows: it's not necessary that anything be printed. +If you don't terminate an arrow, it will extend to +the \ix{edge of the diagram}, +but just exactly where the ``edge'' {\em is}, particularly the right one, +will be determined somewhat arbitrarily. + +The \ix{chess rule} does not apply to diagonals, whose endpoints are specified +differently: see section~\ref{diagonals}. + +Do not enclose the arrow commands in \ix{boxes} or \ix{braces}, because this +prevents the automatic \ix{stretch}ing from working. + +The {\em horizontal\/} arrow commands +\index{horizontal arrows} (including \verb/\pile/) \ixcmd\pile +may also be used in \ix{text}, $A \rTo^f B$. +Since there is no enclosing matrix, this is written +as \verb/$A \rTo^f B$/ {\em without\/}~\verb/&/.\ixcmd{&} +You still need the \ix{dollars}\ixcmd{$} +because it's still a \ix{mathematical expression}. +Arrows participate in the horizontal stretching and shrinking of spaces +between words in a paragraph, but of course their labels also force +the lines of the paragraph apart. + +The arrow commands are {\em \ix{fragile}\/} in the \LaTeX\ sense: +if you want to use them in section headings you must \verb/\protect/% +\ixcmd\protect\ them. + + +%=========================================================================== + +\section{Labels} + +Each arrow carries up to three \ix{labels}, whose position is specified +analogously to \ix{superscripts}% + \footnote{However they are {\em not\/} recognised syntactically in the + same way, and so for instance {\tt\bsl nolimits}\ixcmd\nolimits\ + will not work. + The sub- and superscript characters are recognised by their + {\tt\string\catcode}s, so {\tt\string\sp} and {\tt\string\sb}% + \ixcmd\catcode\ixcmd\sp\ixcmd\sb\ixcmd\ifx\ixcmd\ifcat\ + will work, but the others are compared using {\tt\string\ifx}, + so have to be the same characters, with the same {\tt\string\catcode}s + as when {\tt diagrams.tex} was read in. + \index{Sp environment}\index{Sb environment}% + \ixprotect\AmSTeX\ixprotect\AMSLaTeX\index{{}}\ixcmd\bgroup\ixcmd\egroup + The {\tt Sb} and {\tt Sp} environments + in \AmSTeX\space and \AMSLaTeX\space will not work, and the text of the + label itself must be either a single token or be explicitly enclosed in + {\tt\string{\string}} or {\tt\string\bgroup\string\egroup}.} +by +\begin{center} +\vskip-2ex +\verb/^/ above,\qquad \verb/_/ below,\qquad \verb/</ left,\qquad +\verb/>/ right\qquad and\qquad \verb/~/ middle. +\end{center} +\ixcmd{^}\ixcmd{_}\ixcmd{~}\index{<@$<$}\index{>@$>$}% +For reverse compatibility, above=left and below=right for vertical arrows. +Very old versions of the package used positional arguments; these are also +still supported, but {\em must be enclosed in braces, e.g.\/}~\verb/\rTo{f}{g}/ +but not \verb/\rTo f g/. + +Explicitly, the labels are placed as follows: +\begin{itemize} +\item for {\bf horizontal} arrows,\index{horizontal arrows} + \verb/\rTo^f_g/ and \verb/\rTo{f}{g}/ + give \smash{$\mathop{\longrightarrow}\limits^f_g$}; +\item for {\bf vertical} arrows,\index{vertical arrows} + \verb/\dTo <f >g/, \verb/\dTo^f_g/ and + \verb/\dTo{f}{g}/ give $f{\big\downarrow}g$; +\item for {\bf positive\/} gradient {\bf diagonal} arrows,% + \index{diagonal arrows}\index{positive gradient}\index{negative gradient} + \verb/\ldTo^f_g/, \verb/\ldTo <f >g/ and \verb/\ldTo{f}{g}/ all give + ${}^f\!\!\!\!\swarrow\!\!\!\!_g$ (similarly \verb/\ruTo/). +\item but for {\bf negative\/} gradient arrows, above=right and below=left, + so \verb/\rdTo^f_g/, \verb/\rdTo <g >f/ and \verb/\rdTo{f}{g}/ give + ${}_g\!\!\!\searrow\!\!\!^f$ (similarly \verb/\luTo/); +\item Using tilde, the label may instead {\bf break} the arrow: \verb/\rTo~f/ + gives \hbox to5em{$A\rTo~{\textstyle f}B$}.\index{broken arrows} + If~the arrow had a middle + ({\em e.g.}~\verb/+/ in \verb/\rCrossedInto/, page~\pageref{crossedinto}), + \ixcmd\newarrowmiddle\ixcmd\rCrossedInto + the label would replace~it. + This is sometimes useful to preserve the symmetry of a diagram with three + verticals. +\end{itemize} +Although the arrows extend into adjacent cells, the labels on horizontal and +vertical maps remain centred {\em in~the cell in which the arrow was declared.} + +Any ordinary (mathematical) text you put in the cell with an arrow will +appear in the usual way: +\begin{itemize} +\item For horizontal arrows it will therefore be attached to the arrowhead + or tail. + + This offers a simple way of \ix{annotating the head of an arrow},% + \index{arrowheads!annotating} + for example + \verb/$ A \rTo^f \relax ^* B {}_s \lTo_g C$/\quad gives + \begin{quote} + $ A \rTo^f \relax ^* B {}_s \lTo_g C$. + \end{quote} + where \verb/\relax/ is needed to stop \verb/\rTo/ from reading \verb/^*/ + as another label and \verb/{}/ serves as an object to which $s$ is + subscripted.\ixcmd\relax\index{{}} + The spacing in this example is not entirely satisfactory, because + \verb/\rTo/ and \verb/\lTo/ generate the \verb/shortfall/ spacing as + part of themselves and regard everything else as their targets. + You can use \verb/\!/ and \verb/\;/ commands to compensate for this, + remembering that should you subsequently change the \verb/shortfall/ + amount then you must also adjust the compensation.\index{shortfall} + + An alternative way of doing this is to define a new arrow command: + section~\ref{newarrow} explains how.\ixcmd\newarrow + + Don't make a habit of putting \verb/\relax/ after arrow commands: + it can lead to gaps in short double-shafted arrows, for reasons which + are too complicated to explain here. +\item For vertical and diagonal arrows additional text will lie to the + side of (or between) the arrows. + In the case of verticals this is at the same height as the middle and labels + of the arrows; see section~\ref{parallels}. +\end{itemize} + +\ixcmd\textstyle\ixcmd\displaystyle\ixcmd\scriptstyle\ixcmd\scriptscriptstyle +\ixcmd\labelstyle\ixcmd\objectstyle +By default the labels on the arrows are set in \verb/\textstyle/ +(the same size as in text) when they are part of a matrix, and in +\verb/\scriptstyle/ (like subscripts) in text. However this may be changed +using the \verb/labelstyle/ option (page~\pageref{labelstyle}). +%This re-defines the command \verb/\labelstyle/, for instance +\begin{quote} +\begin{verbatim} +\begin{displaymath} +\begin{diagram}[labelstyle=\scriptscriptstyle] +A &\rTo^{\sum^n_1 f_i}_{\rm scriptscript} & B +\end{diagram} +\qquad +... +\end{displaymath} +\end{verbatim} +\end{quote} +\noindent gives \vadjust{\vskip-4ex}% +\begin{displaymath} +\hss\begin{diagram}[inline,labelstyle=\scriptscriptstyle] +A & \rTo^{\sum^n_1 f_i}_{\rm scriptscript} & B +\end{diagram} +\qquad +\begin{diagram}[inline,labelstyle=\scriptstyle] +A & \rTo^{\sum^n_1 f_i}_{\rm script} & B +\end{diagram} +\qquad +\begin{diagram}[inline,labelstyle=\textstyle] +A & \rTo^{\sum^n_1 f_i}_{\rm text} & B +\end{diagram} +\qquad +\begin{diagram}[inline,labelstyle=\displaystyle] +A &\relax\rTo^{\sum^n_1 f_i}_{\rm display} & B +\end{diagram} +\hss\end{displaymath} +Similarly, objects within a diagram are set in \verb/\displaystyle/ unless the +\verb/objectstyle/ option is used. +(In text, {\em e.g.}~\verb/$A \rTo B$/, the setting of the objects is +out of the control of the diagrams package. +Unless you have done some special programming of your own, they will +be set in \verb/\textstyle/.) + +%=========================================================================== + +\section{The Cube}\label{cube} +The \ix{cube} offers a good example of how horizontal and \ix{vertical arrows} +\ix{stretch}.\index{horizontal arrows} +Notice how the cells have been sub-divided further to give the +``3D'' effect,\index{3D effect} +and that the positions of the labels on the maps betray +the cells in which they were declared. +Because of the sub-division, the \ix{parity rule} for the column in which the +horizontal arrows go has broken down. +You should now formulate for yourself a new rule of thumb +for the cases when you need one, two, three or four \verb/&/s between +two commands.\ixcmd{&} + +\begin{verbdiag} +A'&&\relax\rTo^{f'}&&B'&&&\\ +&\relax\rdTo_a&&&\relax\vLine^{h'}&\relax\rdTo_b&&\\ +\relax\dTo^{g'}&&A&\relax\rTo^f&\relax\HonV&&B&\\ +&&\relax\dTo^g&&\relax\dTo&&&\\ +C'&\relax\hLine&\relax\VonH&\relax\rTo^{k'}&D'&&\relax\dTo_h&\\ +&\relax\rdTo_c&&&&\relax\rdTo_d&&\\ +&&C&&\relax\rTo^k&&D& +\end{verbdiag} + +\ixcmd\HonV\ixcmd\VonH\index{broken arrows}\index{hidden lines}% +\index{meeting lines}\index{joining lines}\index{corners} +The broken lines ($h'$~and~$k'$) are simply two arrows. The commands +\verb/\HonV/ (``horizontal on vertical'') and \verb/\VonH/ (``vertical +on horizontal'') allow arrows in one direction to pass through, whilst +obstructing arrows in the other direction as if an object were present. +They each have an optional argument: \verb/\HonV[=]/ and \verb/\VonH[\|]/ +should be used to allow extra space for double lines. +An~alternative is to declare the ``front'' line in the intersection cell, +where it will have the effect of obstructing the other arrow, +but then its label (if any) would clash with the other arrow. + +\ixcmd\HmeetV +There is also a command \verb/\HmeetV/ which causes single horizontal and +vertical lines to meet, forming a corner. +\begin{diagram}[notextflow] + A' & &\rTo^{f'} & & B' \\ + & \rdTo_a & & & \vLine^{h'}& \rdTo_b \\ +\dTo^{g'} & & A & \rTo^f & \HonV & & B \\ + & & \dTo^g & & \dTo \\ + C' & \hLine & \VonH & \rTo^{k'} & D' & & \dTo_h \\ + & \rdTo_c & & & & \rdTo_d \\ + & & C & & \rTo^k & & D \\ +\end{diagram} +You should soon be able to read and compose the source of +these diagrams as easily as the printed version, although one would not +normally go to the trouble of aligning the \verb/&/s in the source code!% +\footnote{To do so neatly in this manual required special programming: the +{\tt verbatim} environment produced unsatisfactory results.}% +\index{verbatim environment} + +%========================================================================== + +\section{Parallel arrows}\label{parallels}\index{parallel arrows}% +\ixcmd\pile\ixcmd\Downarrow\ixcmd\dashv\ixcmd\puncture +You can draw two arrows between the same two vertices, +including extra things like \ix{2-cells} ($\Downarrow$, \verb/\Downarrow/), +the adjoint symbol ($\dashv$, \verb/\dashv/) in between. +\person{Peter}{Freyd}'s \verb/\puncture/ symbol is also defined in the diagrams +package.\index{adjunction} + +\begin{verbdiag} +A&\relax\pile{\rTo^f\\ +\puncture\quad\alpha \\ +\rTo_g}&B&\\ +\relax\dTo^h\dashv\uTo_k&&&\\ +C&&& +\end{verbdiag} + +\vskip-4ex +\diagram +A & \pile{ \rTo^f \\ \puncture\quad\alpha \\ \rTo_g } & B \\ +\dTo^h \relax\dashv \uTo_k \\ +C \\ +\enddiagram + +{\bf Horizontal} arrows\index{horizontal arrows}\index{pilespacing} +may be \verb/\pile/d on top of each other. +Effectively, a one-column diagram is created, which may have {\em either\/} +a horizontal arrow {\em or\/} an object in each row. This works both +in diagrams and in text. +The spacing (\verb/\baselineskip/\ixcmd\baselineskip) between the rows +is {\em half\/} of that specified by the \verb/pilespacing/ option +(page~\pageref{pilespacing}), +on the assumption that you will put something +between parallel arrows; a blank line (\verb/\\ \\/) will suffice, then +the spacing is the same as that for vertical arrows. + +{\bf Vertical} arrows\index{vertical arrows} +may simply be put together in the same cell, +with any text between them. The spacing is always that given by +\verb/\pilespacing/. +(\verb/\pile/ must not be used.) + +{\bf Diagonal} lines.\index{diagonal arrows} +At the moment parallel diagonal lines are not properly implemented; +(there will be a \verb/crab/\index{crab} option for transverse movement). + +However the option \verb/fixed/\index{fixed} may be used to force the +diagonals to be set on the firsr pass, as fixed (non-stretching) boxes. +These can be juxtaposed, separated with explicit space and +moved with \verb/\raise/ or \verb/\raisebox/ commands. +\begin{quote} +\verb/\raise 5pt \hbox{$\ldTo^R$}\rightthreetimes\raise-5pt\hbox{$\ruTo^L$}/ +\end{quote} +\ixcmd\raise\ixcmd\raisebox\ixcmd\lower\index{error checking}% +There is an error message (``you must not put arrows in \ix{braces}''), +which warns you that this is not a satisfactory solution. + +%========================================================================== +\section{Defining arrow styles}\label{newarrow} +It is easy to define other arrows besides the basic line with arrowhead given +by \verb/\rTo/ and friends.\index{arrowheads} For example,\ixcmd\newarrow + +%\vskip-3\baselineskip + +\ifx\twoheadrightarrow\undefined % a typical AMS symbol name + \let\amsarrows\empty +\else + \def\amsarrows{% + TeXonto&----\{->>\}&\rTeXonto\cr + }% + \ixcmd\rTeXonto +\fi + +\ifhavegoodboldmath + \def\boldarrows{CrossedInto&\{boldhook\}-+->& + %\showboxdepth999 \showboxbreadth 999 \tracingonline 1 + %\tracingcommands1 \tracingmacros1 + \rCrossedInto + %\showlists + \cr}% + \newarrow{CrossedInto}{boldhook}-+-> +\else + \def\boldarrows{CrossedInto&C-+->&\rCrossedInto\cr}% + \newarrow{CrossedInto}C-+-> +\fi + +\ixcmd\rTo\ixcmd\rLine\ixcmd\rEmbed\ixcmd\rOnto\ixcmd\rEEmbedd +\ixcmd\rDotsto\ixcmd\rDashto\ixcmd\rCorresponds\ixcmd\rImplies +\ixcmd\rMapsto\ixcmd\rInto\ixcmd\rOpeninto\ixcmd\rCongruent +\ixcmd\rTeXto\ixcmd\rBackwards\ixcmd\rMulti\ixcmd\rCrossto +\ixcmd\rPartial\ixcmd\rCrossedInto +\index{>@$>$ arrowhead}\index{-- filler}\index{>>@$\gg$ arrowhead} +\index{. filler}% +\index{dash filler}\index{| tail}\index{O arrowheads}\index{x arrowheads}% +\index{harpoon arrowhead}\index{triangle arrowheads}\index{3 filler}% +\index{hook tail}\index{C tail}\index{boldhook tail}% + +\begin{quote}\leavevmode\label{crossedinto} +\vbox{\halign{\tt\string\newarrow\kern2pt\{#\}\kern2pt\hfil&\tt#\quad\hfil&% + $#$\cr\omit&&\omit\kern80pt\cr + To&---->&\rTo\cr + Line&-----&\rLine\cr + Embed&>--->&\rEmbed\cr + Onto&----\{>>\}&\rOnto\cr + EEmbedd&\{>>\}---\{>>\}&\rEEmbedd\cr + Dotsto&....>&\rDotsto\cr + Dashto&\{\}\{dash\}\{\}\{dash\}>&\rDashto\cr + Corresponds&<--->&\rCorresponds\cr + \boldarrows + Implies&====\{=>\}&\rImplies\cr + Mapsto&|--->&\rMapsto\cr + Into&C--->&\rInto\cr + Openinto&\{triangle\}--->&\rOpeninto\cr + Congruent&33333&\rCongruent\cr + TeXto&----\{->\}&\rTeXto\cr + Backwards&<----&\rBackwards\cr + Multi&----o&\rMulti\cr + Crossto&----X&\rCrossto\cr + Partial&----\{harpoon\}&\rPartial\cr + \amsarrows +}}\end{quote} +\noindent Note that the +\ixcmd\rightharpoonhown\ixcmd\twoheadrightarrow\ixcmd\rightarrow +\ixcmd\Rightarrow\ixcmd\boldmath +\index{->>@\protect\verb/->>/ arrowhead}% +\index{->@\protect\verb/->/ arrowhead}% +\index{littlevee arrowheads}\index{boldlittlevee arrowheads}% +\ifx\twoheadrightarrow\undefined\else\verb/{->>}/, \fi +\verb/{harpoon}/, \verb/{->}/ and \verb/{=>}/ heads +use \TeX's \verb/\rightharpoondown/ ($\rightharpoondown$), \verb/\rightarrow/ +($\rightarrow$) and \verb/\Rightarrow/ ($\Rightarrow$) symbols, consisting +of heads {\em with shafts.} +\ifhavegoodboldmath + Also, the \verb/boldbook/ tail uses \LaTeX's \verb/\boldmath/: +\else + There is also a \verb/boldhook/ tail, which is not shown because the + appropriate fonts were not available when this copy of the manual + was printed: +\fi +please see the note about \verb/heads=littlevee/ +on page~\pageref{heads option}. +The \verb/hook/ and \verb/C/ tails are the same. + +Each declaration\ixcmd\newarrow +\index{north (east, west)}\index{south (east, west)}\index{east}\index{west}% +\index{compass}\index{left}\index{right}\index{up}\index{down} +\begin{center} +\verb/\newarrow{/{\em Name\/}\verb/}{/{\em tail\/}\verb/}{/{\em filler\/}% +\verb/}{/{\em middle\/}\verb/}{/{\em filler\/}\verb/}{/{\em head\/}\verb/}/ +\end{center} +defines eight arrow commands +$$\vcenter{\advance\hsize-2.5\baselineskip\advance\hsize-6em + \halign{\tt\bsl#\it Name\quad\hfil&#\hfil\quad or\quad&#\hfil\cr + r&right&east\cr + l&left&west\cr + d&down&south\cr + u&up&north\cr + ru&right \& up&northeast\cr + rd&right \& down&southeast\cr + lu&left \& up&northwest\cr + ld&left \& down&southwest\cr +}}\qquad\qquad + \begin{diagram}[vcentre,inline,size=1.75\baselineskip,abut,shortfall=4pt] + \hbox{\tt lu}&&\hbox{\tt u}&&\hbox{\tt ru}\\ + &\luTo[lowershortfall=2pt]&\uTo[lowershortfall=2pt]& + \ruTo[lowershortfall=2pt]\\ + \hbox{\tt l}&\lTo[rightshortfall=2pt]&\vcenter{}&\rTo[leftshortfall=2pt]& + \hbox{\tt r}\\ + &\ldTo[uppershortfall=2pt]&\dTo[uppershortfall=2pt]& + \rdTo[uppershortfall=2pt]\\ + \hbox{\tt ld}&&\hbox{\tt d}&&\hbox{\tt rd} + \end{diagram}$$ +from the five named components. + +\ixcmd\isomorphic\ixcmd\cong +Some but not all of the names given in the examples above are defined in the +source of the package as distributed. +However this is only really intended for reverse compatibility, because +just as it is better to define a macro \verb/\isomorphic/ for the +symbol $\cong$ (if that is what you use it to mean) than to write +\verb/\cong/ in your documents, so it is advisable to define the arrow +command names in the file where you keep your private collection of symbols. + +\ixcmd\rEmbed\ixcmd\rInto\ixcmd\rOpeninto\ixcmd\rImmerse\ixcmd\rInclude +\ixcmd\rInternalise +For example, if in your subject there are special kinds of functions known +standardly as immersions, inclusions and internalisations and written as +$\rInto$, $\rEmbed$ and $\rOpeninto$, then you should define +\verb/\rImmerse/, \verb/\rInclude/ and \verb/\rInternalise/ instead of +using the names \verb/\rInto/, \verb/\rEmbed/ and \verb/\rOpeninto/. +The motto is {\em what you see is what you mean\/}! +This avoids remembering or getting confused about the so-called +standard macro names, and also enables you to change your mind about the +notation if it is not standard but subject to experimentation. + +\ixcmd\newarrowhead\ixcmd\newarrowtail\ixcmd\newarrowmiddle +\ixcmd\newarrowfiller +The components as given in the \verb/\newarrow/ command are mnemonics, +which are themselves defined using the commands +\begin{center} +\verb/\newarrowhead/, \verb/\newarrowtail/, \verb/\newarrowfiller/ +and \verb/\newarrowmiddle/. +\end{center} +Most of the characters in the standard \TeX\ \ix{Computer Modern fonts} which +are appropriate for these components have already been used in the package +and are illustrated above. +If you wish to define other components, the examples at the end of the +source show how to do this. +If you are doing this with publicly available fonts, please contribute +them for the benefit of other users by sending the definitions to me by +electronic mail. +It is in your interests to do so --- and to confine use of these four +component-declaration commands to a single macro file --- because a more +elaborate syntax may be used in future to facilitate adjustment of +positioning. The \verb/\newarrow/ command itself, however, will remain +as it is. + +\index{>@$>$ arrowhead}\index{>>@$\gg$ arrowhead}% +\index{heads}\index{arrowheads}\index{+ arrowhead}\index{x arrowheads}% +\index{O arrowheads}% +\ixcmd\rBackwards\ixprotect{\LaTeX\ arrowheads}% +The components \verb/>/, \verb/{>>}/, \verb/</, \verb/{<<}/, \verb/x/, +\verb/+/, \verb/O/ and \verb/o/ can be used both as heads (fifth position) +and \ix{tails} (first). +The declaration \verb/<----/ defines \verb/\rBackwards/ to be a left-ward +pointing arrow and \verb/\lBackwards/ to point right; +this is not recommended, as you're certain to get confused. +We shall see in the next section how to change the style of the four +arrowhead components in a systematic way, thereby avoiding the ugly mixture +of vee and \LaTeX\ arrowheads obtained using earlier versions of this package. + +\ixcmd\newarrow +In some of the examples above (with the dot and rule fillers) the filler was +repeated as the middle and one or both of the tips, whereas with others +(dash) we used empty middle and tips instead. +This was just to make the definitions easier to type: \verb/\newarrow/ +treats middles and tips which agree with the fillers as empty ones. +It is possible to use two different fillers, but this is not recommended. + +\ixcmd\HorizontalMap\ixcmd\VerticalMap\ixcmd\DiagonalMap +The commands \verb/\HorizontalMap/ and \verb/\VerticalMap/ are still +supported, but should be replaced by \verb/\newarrow/. +These ought only to have been used in macro files --- not in the text of +documents --- to define four arrow commands together (right, left, up and down). +The twenty arguments defining the five components of each of these four +arrows can (if they're not already provided) be re-arranged as the four +arguments of each of five \verb/\newarrowhead/, {\em etc.,} declarations +with the same effect. +The mnemonics of the five components are then given to \verb/\newarrow/. +If~you have any difficulty doing this conversion, please contact me. + + +%========================================================================== + +\section{Options}\label{options}\index{options} +\ixcmd\diagram\ixcmd{\begin{diagram}}\ixcmd\diagramstyle\ixcmd\usepackage +\ixprotect\LaTeX\ixprotect\LaTeXe +The \verb/\diagram/ or \verb/\begin{diagram}/ command and the arrow +commands may be followed by a list of options in square brackets, for example +\begin{center} +\verb/\begin{diagram}[size=2em,textflow]/ \qquad \verb/\rTo[abut]/ +\end{center} +which apply to the diagram or arrow to which they are attached. +Options may be given for an entire document, or within \TeX's normal +scoping rules, by a stand-alone command such as +\begin{center} +\verb/\diagramstyle[centredisplay,PostScript=dvips]/ +\end{center} +You may use any number of \verb/\diagramstyle/ commands. +In \LaTeXe\ these options can be given when loading: +\begin{center} +\verb/\usepackage[centredisplay,PostScript=dvips]{diagrams}/ +\end{center} +though you should avoid using macros in the option values +(see page~\pageref{miss endcs}). + +{\bf Note:} if the text of the first cell in a diagram begins with a +square bracket, the program will attempt to read it as an option, just +as square brackets within \LaTeX\ \verb/array/s can cause trouble. +This usually leads to a catastrophic +error, which can be avoided using \verb/\diagramstyle[nooptions]/.% +\index{nooptions}\index{{}[]}\ixcmd{\begin{diagram}} +This problem doesn't arise in \LaTeX\ if you use \verb/\begin{diagram}/ +followed by a (space or) new line before the text of the diagram. + +Some options take a value, using an equals sign; those enclosed in square +brackets below are optional, the others mandatory. +Most of the options are appropriate for diagrams rather than arrows. + +\def\coordpair{{\rm($x$,$y$)}} + +\begin{description} +\def\makelabel#1{{\tt#1} --- } +\item[abut] Leave no gap between maps and objects; useful for (``Hasse'') + diagrams displaying order structures (page~\pageref{Hasse}).% + \index{abut}\index{posets}\index{Hasse diagrams}\index{order structures}% + \index{lattices}\index{shortfall} +\item[alignlabels] The \ix{labels} on horizontal arrows remain centred in the + cells where they are defined, despite different size endpoints; + {\em cf.} \verb/midshaft/.\index{midshaft}\index{aligned labels} + This is the default, and it is recommended for diagrams of a regular + character. + If there is insufficient space to position the labels in this way, they + are centred (automatically and silently) instead. + Whichever option is used, the middle of the arrow, if present, is always + positioned with the labels. +\item[amstex] Enable recognition of \AmSTeX's commutative diagram commands; + see section~\ref{emulate}.\ixprotect\AmSTeX\index{amscd.sty} +\item[balance] The whole diagram is centred horizontally without regard to + the left- and rightmost labels, + so that its weight lies in the middle of the page. + This is not the default, because if you were not aware of it the gaps + would come as a surprise, but it is recommended.% + \index{balance}\index{centre} +\item[bottom] When the diagram is placed alongside some simple text, + the baseline of that text is aligned with that of the bottom row of the + diagram.\index{bottom} +\item[centre {\em or\/} center] The diagram is centred% + \footnote{Notice that I have provided the ``-er'' alternative as a + courtesy to American users which \person{Donald}{Knuth} + and \person{Leslie}{Lamport} did not afford to British ones.} + na\"{\i}vely, using \verb/nobalance/ and \verb/vcentre/; + {\em cf.}~\verb/middle/.\index{nobalance}\ixcmd\vcenter\index{centre} +\item[centredisplay {\em or\/} centerdisplay] Disables \verb/flushleft/, + enables \verb/balance/ and gives a warning when used within \verb/$$...$$/ + (see below).\index{flush left}\ixcmd{$$} +\item[cmex] Set the arrow parts appropriately for use of the \verb/cmex/ + (Computer Modern \ix{extension font})\index{Computer Modern fonts}; + used by the \ix{brace} and \ix{paretheses} arrows.\index{cmex} +%\item[defaultsize] +\item[diagonalbase=\coordpair] Start \ix{diagonal arrows} from + $x$~columns beyond (left or right depending on the direction) + and $y$~rows above the current cell. Default (1,1). + Intended for emulation of other diagrams packages: + see section~\ref{emulate}. +%\item[displayoneliner] Disables \verb/inlineoneliner/. +\item[dotted] Use \ix{dots} instead of a ruled line for arrow shafts. + Useful for mediators for \ix{universal properties} in category theory. +\item[dpi={\em resolution\/}] Anticipate the output resolution in pixels per + inch (default 300). A~fudge factor is applied to horizontal and vertical + ruled lines, without which pixel rounding at 300dpi would cause the + {\em bottom\/} rather than the middle of the horizontal rule to align + with the cusp of the \ix{vee arrowheads}:\index{dpi} + compare $\rTo[heads=vee]$ and $\rTo[nopixel,heads=vee]$. + Other similar adjustments may also be made to character positioning, + and to the slopes of diagonals in PostScript mode to avoid ``stepping.'' + Most office laser printers are 300dpi, but if you intend to use a printer + of a different resolution for your final output, set {\tt dpi=1270} or + whatever --- otherwise the shafts will be too low instead. The same applies + if you intend to magnify or reduce; for example {\tt dpi=212} should be + used for two-up or \ix{A4-on-A5} final printing. + In \verb/plain/ \TeX\ you may set \verb/\magnification/ at the beginning + of the file, but {\em do not\/} change \verb/dpi/ as this compensates + automatically. + The \verb/nopixel/ option disables the fudge factor.% + \ixcmd\magnification\index{pixel size}\index{300 dpi}\index{resolution} +\item[dpm={\em resolution\/}] As {\tt dpi} but in dots per metre; {\em e.g.} + 1270dpi=50000dpm. +\item[eqno={\em label\/}] Place {\em label\/} (in maths mode) beside the + diagram, as an \ix{equation number}. + See also \verb/LaTeXeqno/. +\item[fixed] Force diagonal arrows to be set on the first pass and not + stretched. +\item[flushleft{[={\em width\/}]}] The old version of \verb/leftflush/. + The alignment is on the edge of the grid, irrespective of + what vertical maps are present + (this makes the diagram stick out on the left with no good visual reason). + \index{indented style}\index{asymmetric design} +\item[grid={\em name\/}] Use the \ix{grid} {\em name}. + See page~\pageref{grid}.\ixcmd\newdiagramgrid +\item[gridx={\em name\/}] Use the grid with the horizontal and vertical + components interchanged. +\item[h={\em distance\/}] Same as \verb/height/.\index{height}\index{size} +\item[hcentre {\em or\/} hcenter] Same as \verb/nobalance/.% + \index{balance}\index{centre} +\item[heads={\em name\/}]\label{heads option} + Set the \verb/>/ and \verb/{>>}/ arrow heads + and tails to those defined by \verb/\newarrowhead{/{\em name\/}\verb/}/ and + \verb/\newarrowtail{/{\em name\/}\verb/}/. + \index{arrowheads}\index{heads}\ixcmd\newarrowhead\ixcmd\newarrowtail + \index{line10 and linew10 fonts}\ixprotect{\LaTeX\ arrowheads}% + \index{vee arrowheads}\index{littlevee arrowheads}\index{O arrowheads}% + \index{boldlittlevee arrowheads}\index{triangle arrowheads}% + \index{x arrowheads}\index{curlyvee arrowheads}% + \index{blacktriangle arrowheads}\index{littleblack arrowheads}% + \index{AMS symbols fonts}\ixcmd\boldmath + The following styles are currently available: + \message{(There may follow a warning message about LaTeX diagonals + - please ignore it.)}% + \begin{quote} + \ifx\twoheadrightarrow\undefined\else\def\amsarrows{% + \dohead{curlyvee}(uses AMS symbols)\cr + \dohead{blacktriangle}(uses AMS symbols)\cr + \dohead{littleblack}(uses AMS symbols)\cr + }\fi + \ifhavegoodboldmath\def\boldarrows{% + \dohead{boldlittlevee}(uses {\tt\string\boldmath})\cr + }\else\let\boldarrows\empty\fi + \diagramstyle[l>=50pt]\leavevmode + \def\dohead#1{\tt#1\quad&\relax + \csname diagramstyle\endcsname[heads=#1]$\rEmbed\quad\rEEmbedd$&\quad} + \vbox{\halign{#&#&#\hfil\cr&\omit\kern100pt\cr + \dohead{LaTeX}(default; uses {\tt line10})\cr + \dohead{vee}\cr + \dohead{littlevee}\cr + \boldarrows + \dohead{triangle}\cr + \dohead{o}\cr + \dohead{O}\cr + \dohead{X}\cr + \dohead{+}\cr + \amsarrows + }}\end{quote} + \ifx\twoheadrightarrow\undefined + There are also heads called + \verb/curlyvee/, \verb/blacktriangle/ and \verb/littleblack/, + but these require the AMS symbols fonts, which were unfortunately + not available when this copy of the manual was printed. + If~you try to use them + \else + The vertical \verb/curlyvee/ heads come from the AMS symbols, and + the horizontals, from \verb/cmsy/ in the \ix{Computer Modern fonts}, + seem appear to be slightly mis-aligned with the \verb/vee/ heads + from \verb/cmmi/. + If~you use them but forget to + \ifx\usepackage\undefined + \verb/\input mssymb/, + \else + \verb/\usepackage{amssymb}/, + \fi + \fi + \index{undefined control sequence}\index{cmsy}\index{amssymb.sty}% + you'll get an ``{\tt undefined control sequence}'' error in the middle of + a lot of garbage (deeply nested): hit return several times and carry on. + + The \verb/boldlittlevee/ heads \ifhavegoodboldmath\else(not shown above) \fi + rely on \LaTeX's \verb/\boldmath/ command, and default to \verb/littlevee/ + in \verb/plain/ \TeX.\index{plain \protect\TeX}\ixprotect{\LaTeX 2.09} + They~may not work correctly if you use \person{Leslie}{Lamport}'s old + \LaTeX2.09 \ix{font selection}. + Even if you use \person{Frank}{Mittelbach} and \person{Rainer}{Sch\"opf}'s + new one (which is part of \LaTeXe\ixprotect\LaTeXe) some \ix{PK files} + \ifhavegoodboldmath + which are not in the standard distribution may be needed. + \else + are needed which were not available when this copy of the manual + was printed. + \fi + It~is only intended for final copy in the event that the \verb/littlevee/ + appears too feint. The same applies to the \verb/boldhook/ tails. +\item[height={\em distance\/}] The distance between the baselines of + successive rows in the diagram is as specified. Note that as objects and + arrows commonly alternate, this is usually half the distance between + one horizontal arrow and the next.\index{height}\index{size} +\item[hmiddle] Same as \verb/balance/.\index{balance}\index{centre} +\item[hug] If \verb/PostScript/ is enabled, rotate labels on %vertical and + diagonal maps. %The text then runs {\em up\/} the verticals. + (Not yet implemented --- in fact the \verb/PostScript/ option currently + {\em always\/} does this to diagonals, but not to verticals. +\item[htriangleheight={\em distance\/}] Set \verb/height/={\em distance\/} + and then \verb/width/ in such a way that the minimal $3\times5$-grid + will make an equilateral $\triangleright$ \ix{triangle}, + and a $5\times7$-grid makes a regular \ix{hexagon} (page~\pageref{hexagon}). + If~the {\em distance\/} is not specified, the existing \verb/height/ + is used and the \verb/width/ adjusted accordingly. +\item[htrianglewidth={\em distance\/}] Set \verb/width/={\em distance\/} + and then \verb/height/ to make these figures. +\item[inline] Use this option on individual diagrams which are being displayed + alongside one another, for example in \verb/$$/...\verb/$$/ or \LaTeX's + \verb/center/ or \verb/displaymath/ environments, when the global display + option is \verb/flushleft/ or \verb/centredisplay/.\index{in line}% + \index{flush left}\index{displaymath environment}\index{center environment} +%\item[inlineoneliner] If the diagram has only one row, run it on in the text +% instead of displaying~it. (This is highly questionable.) +\item[l>={\em distance\/}] Forces arrows (particularly horizontals and + rotated diagonals) to have at least the specified length (default 2em), + to avoid getting \ix{birds' feet} instead of arrows: + \hbox to2.8em{$A\rTo[l>=0pt,heads=vee]B$}. + Sometimes this makes the arrow \ix{over-print} an object or appear displaced; + in this case you'll see an ``over-full \verb/\hbox/'' or ``increase + cell \ix{width}'' error message.\index{over-full hbox} +\item[labelstyle={\em command\/}]\label{labelstyle} + Inserts this command in every label + text;\ixcmd\scriptstyle\index{labels} + \verb/\scriptstyle/ is the commonest choice apart from the default. +\item[landscape] If \verb/PostScript/ is enabled, rotate the entire diagram + by $90^\circ$ anticlockwise.\index{landscape}\index{PostScript} + Options which refer to the extreme rows and columns are modified + accordingly. Useful for big diagrams with long objects or labels.% + \index{rotation} +\item[large] Same as \verb/size=5em/.\index{size}\index{large} +\item[LaTeXeqno] Use \LaTeX's running \verb/equation/ numbering + for an \verb/eqno/ (\emph{q.v.}).\index{equation number} + You can put a \LaTeX\ \verb/\label/ inside the diagram.\ixcmd{label} +\item[lefteqno] Place the \ix{equation number}, as given by \verb/eqno/, on the + left of the diagram. +\item[leftflush{[={\em width\/}]}] + Display the diagram on the left of the page instead of the centre, + {\em cf.} \verb/fleqn.sty/.\index{flush left}\index{fleqn.sty} + This is considered good \ix{book design} by certain publishers. + If {\em width\/} is given, the leftmost vertical of the diagram is, + if possible, aligned at that distance from the left edge of the page. + The idea is that the arrows, rather than the text, define the + visual extent of the diagram. + If the first column contains multiple verticals, the leftmost + of them is used for the alignment. + If there are no verticals in the leftmost column, the alignment + is on the left extremity of the text. + \index{indented style}\index{asymmetric design} +\item[leftshortfall={\em distance\/}] The gap between the arrow (to which it + is applied individually) and the object on its left is as specified.% + \index{short fall} +%\item[locate=$x$:$y$] Move the origin of the diagonals. Not yet implemented. +\item[lowershortfall={\em distance\/}] Similarly below. +\item[loose] The rows and columns of the diagram have {\em at least\/} the + \verb/height/ and \verb/width/ specified, but may stretch, in the same + way as those of an array or table. + This is the default, because the results are more of less right in most + circumstances, but this can result in gaps in the diagram, so it is + recommended that \verb/tight/ be used in the final version of a document, + with appropriate manual adjustment of the size of the grid.% + \index{tight}\index{loose}\index{width} +\item[middle] The diagram is centred both horizontally + using \verb/balance/ and vertically using \verb/vmiddle/, {\em q.v.}% + \index{middle}\index{centre}\index{balance} +\item[midhshaft {\em or\/} midshaft] Labels are centred in the shafts of + horizontal arrows; {\em cf.} \verb/alignlabels/.% + \index{aligned labels}\index{midshaft} + This happens automatically for in-text or one-line diagrams, + or if the arrow is too short to align the labels. +%\item[midvshaft] The same for vertical arrows (doesn't work). +%\item[missives] Enable missives. +\item[moreoptions] Allow another list of \ix{options} in square brackets. + This is intended for macros like + %\begin{center} + \verb/\def\funnydiagram{\diagram[/{\em options\/}\verb/,moreoptions]}/ + %\end{center} + to allow \verb/\funnydiagram[/{\em options\/}\verb/]/. + The arrow commands always allow any number of lists of options. +\item[nobalance] Horizontal centring of diagrams is done with respect to the + extremities.\index{balance} +\item[nohcheck] Disables certain \ix{error checking}. +\item[nohug] Do not rotate the labels on vertical and diagonal maps, but + print them horizontally. + (Not yet implemented --- in fact the \verb/PostScript/ option currently + {\em always\/} rotates labels on diagonals, but not on verticals. +\item[nooptions] Used in \verb/\diagramstyle/, this disables the parsing + of \ix{options}. \ixcmd\diagramstyle + This is for reverse compatibility in the case where several diagrams + begin with a square bracket. +\item[noorigin] Disables \verb/origin/ and \verb/balance/.% + \index{balance}\index{origin} +\item[nopixel] Disable the \verb/dpi/ fudge factor, {\em q.v.}, by setting + a very high resolution.\index{pixel size} +\item[noPostScript] Disables the use of embedded {\sc \ix{PostScript}} + {\em and\/} the \verb/PS/ and \verb/noPS/ options. + The value, if any, is ignored, so you need only edit in/out the prefix + \verb/no/ whilst leaving the choice of {\sc PostScript} translator intact. +\item[noPS] Disable {\sc PostScript} on individual maps and diagrams. +\item[notextflow] Disables \verb/textflow/. This is needed on some individual + diagrams (where they appear as nouns in a sentence, for instance) when you + use \verb/\diagramstyle[textflow]/.\index{text flow} +\item[noTPIC] Disable the use of TPIC \verb/\special/s.% + \index{TPIC}\ixcmd\special +\item[objectstyle={\em command\/}] Inserts this command in every \ix{object} + text; \ixcmd\scriptstyle + \verb/\scriptstyle/ is the commonest choice apart from the default. +\item[origin] Makes the width, height and depth of the whole diagram zero, + locating it at the baseline of the bottom row, in the centre of the leftmost + column. + This allows it to be positioned by the user; useful for mixing diagrams with + \LaTeX\ pictures and other graphics. + \index{origin}\index{picture environment}\ixprotect\LaTeX +\item[p={\em distance or\/} pilespacing={\em distance\/}] Set the distance + between parallel verticals (in the same cell); that between the rows of a + \verb/\pile/ is half of this to allow things to be put between parallel + horizontals.\index{parallel arrows}\ixcmd\pile\label{pilespacing} +\item[pixelsize={\em distance\/}] Anticipate this output resolution; + {\tt pixelsize=.02true mm} is the same as {\tt dpi=1270} or {\tt dpm=50000}.% + \index{pixel size} +\item[portrait] Disable the \verb/landscape/ option, + {\em q.v.}\index{landscape}\index{portrait} +\item[PostScript={\em author\/}]\label{PS} + Enable the use of embedded \ix{Adobe} + {\sc \ix{PostScript}} \verb/\special/ commands in a form supported by + {\em author\/}'s translator. + The following are currently recognised by the {\em author\/}s' surnames, + their programs or their companies. + The surname is the preferable form, since the programs have very similar + names. + The master \ix{FTP} source is also given.\index{anonymous FTP} + \begin{itemize} + \item (Tomas) \verb/Rokicki/, \verb/dvips/, \verb/RadicalEye/: + labrea.stanford.edu /pub/dvips9999.tar.Z% + \index{Rokicki, Tomas}\index{dvips}\index{Radical Eye} + \item (Stephan) \verb/Bechtolsheim/, \verb/dvitps/, + \verb/IntegratedComputerSystems/:\\ + arthur.cs.purdue.edu /pub/TeXPS-9.99.tar.Z% + \index{Bechtolsheim, Stephen}\index{Integrated Computer Systems}% + \index{dvitps} + \item (James) \verb/Clark/, \verb/dvitops/\index{Clark, James}\index{dvitops} + \end{itemize} + These are currently used to implement diagonals by rotating horizontals. + It is not possible to use \person{Andrew}{Trevorrow}'s Oz\TeX.% + \index{oztex@Oz\protect\TeX} +\item[PS] Suppose you want to use {\sc \ix{PostScript}} for some but not all + maps and diagrams in the final version. Then use \verb/PS/ for each of them + but put \verb/\diagramstyle{noPostScript}/ in the preamble during drafting. +\item[repositionpullbacks] The \ix{pullback} symbols + have a fixed position relative to the cell, irrespectively of + where you put the \verb/\SEpbk/ {\em etc}.~command. +\item[righteqno] Put the \ix{equation number} (\verb/eqno/), if any, + on the right. +\item[rightshortfall={\em distance\/}] Analogous to \verb/leftshortfall/.% + \index{short fall} +\item[ruleaxis] Set the height of the shaft of the horizontal arrows; + normally \verb/\mathaxis/. + \index{ruleaxis}\index{horizontal arrow}\ixcmd\mathaxis +\item[s={\em distance\/}] Same as \verb/size/.\index{size} +\item[scriptlabels] Labels on maps are set in \verb/\scriptstyle/; useful + if they're rather long. +\item[shortfall={\em distance\/}] Set the gap between arrows and the objects + to which they point.\index{short fall} +%\item[showpair=\coordpair] Debug +\item[silent] Suppress \ix{warnings} and second-pass \ix{error messages}. + Only use this option if either you don't care what the diagram looks like + or you've typeset it and looked at the result already. Not recommended. + \index{silent} +\item[size={\em distance\/}] Set both \verb/height=/{\em distance\/} and + \verb/width=/{\em distance}.\index{size} + \begin{center} + {\bf Most geometrical problems with diagrams can be solved by enlarging + the cells.} Please try this and the \verb/tight/ option before contacting me. + \end{center} +\item[small] Same as \verb/size=2em/.\index{size} +\item[textflow] The text which follows the diagram in the \TeX\ source is + brought up to fill out the line preceding it; useful to avoid the + ``such that the diagram $\clubsuit$ commutes'' clich\'e. + This has been used for several diagrams in this manual.\index{text flow} +\item[thick{[={\em breadth\/}]}] As \LaTeX\ \verb/\thicklines/, optionally + setting the width of orthogonal ruled lines. The \LaTeX\ command itself has + no effect within diagrams. The default rule breadth is twice that for the + \verb/thin/ option.\ixcmd\thicklines +\item[thin{[={\em breadth\/}]}] This is similarly analogous to + \verb/\thinlines/.\ixcmd\thinlines + The default rule breadth is the same as that used by \TeX, namely + \verb/\fontdimen8\textfont3/. +\item[tight] Force all of the cells in the grid to have exactly the \ix{size} + you specify.\index{tight}\index{height}\index{width}\index{loose} + This is recommended for the final version of a document, but + is not the default because it may cause \ix{over-print}ing, + which requires the intervention of the user to cure + (by setting \verb/height/ and \verb/width/); {\em cf.} \verb/loose/. +\item[top] Analogous to \verb/bottom/, except that the top row is used. +\item[TPIC] Use \ix{TPIC} \verb/\special/ commands instead of \LaTeX\ line + segments to draw diagonal lines. + These are supported by {\sc Textures}, \person{Tomas}{Rokicki}'s + \verb/dvips/ and \person{Paul}{Vojta}'s \verb/xdvi/.% + \ixcmd\special\index{xdvi}\index{dvips} +\item[uppershortfall={\em distance\/}] Analogous to \verb/leftshortfall/, + except above.\index{short fall} +\item[vcentre {\em or\/} vcenter] Vertical positioning is the same as with + \TeX's \verb/\vcenter/\ixcmd\vcenter\ixcmd{[c]}\index{centre} + command or \LaTeX's \verb/[c]/ option. + However \verb/vmiddle/ is what is usually wanted. +\item[vmiddle] If a diagram with an odd number of rows of constant height + (the usual case) is placed alongside some simple text, + the baseline of the text will be aligned + with that of the middle row, irrespectively of the height and depth of the + labels on the top and bottom rows. + In general, the baseline of the diagram is half-way between those of the + top and bottom rows.\index{centre} +\item[vtriangleheight={\em distance\/}] Set \verb/height/={\em distance\/} + and then \verb/width/ in such a way that the minimal $5\times3$-grid + will make an equilateral $\bigtriangleup$ \ix{triangle} + and a $9\times 5$-grid makes a regular \ix{hexagon} (page~\pageref{hexagon}). + \index{width}\index{height} +\item[vtrianglewidth={\em distance\/}] Set \verb/width/={\em distance\/} + and then \verb/height/ to make these figures. +\item[w={\em distance or\/} width={\em distance\/}] Set the distance between + the centre of one column and the next to the right.\index{width} +\end{description} + + +%========================================================================== + +\section{Application to adjunctions} +Here is a side application of commutative diagrams to displaying +``adjoint correspondences.'' It also illustrates the way arrows +stretch to meet their endpoints but keep their labels centred in +the column of arrows. The options are chosen to avoid getting +lots of extra space around the cells, which in this case we don't want. +Notice also the invisible ``objects'' terminating the \verb/\hLine/ +``morphism'' command.\index{adjunction} + +\ixcmd\hLine\ixcmd\dashv\index{empty cells}\index{invisible objects} + +\begin{verbdiag}[loose,height=.8em,width=0pt] +&Z\times X&\relax\rTo^f&Y&\\ +\relax\ &&\relax\hLine&&\relax\ &\\ +&Z&\relax\rTo^{{\bf curry}(f)}&Y^X& +\end{verbdiag} + +\vskip-6ex +\diagram[loose,height=.8em,width=0pt] +&Z \times X &\relax\rTo^f & Y \\ +\ &&\relax\hLine && \ \\ +&Z & \rTo^{\ {\bf curry}(f)\ } & Y^X \\ +\enddiagram + +\ixcmd\hfill + +If you want the $Z$s lined up, it's no good \verb/\hfill/ing the second +one on the right, because the arrow will not stretch to meet +it\footnote{There is no way of detecting {\em where\/} \ix{glue} is placed +inside a box, so the \ix{stretch}ing algorithm {\em assumes\/} the object +is centred and extends the arrow by half the amount of glue in the +object box.}. The best solution is probably to split the object into +two cells: + +\begin{verbdiag}[loose,height=.8em,width=0pt,l>=3em,midshaft] +&Z&\relax{}\times X&\relax\rTo^f&Y&\\ +\relax\ &&&\relax\hLine&&\relax\ &\\ +&Z&&\relax\rTo^{{\bf curry}(f)}&Y^X& +\end{verbdiag} + +\vskip-6ex +\diagram[loose,height=.8em,width=0pt,l>=3em,midshaft] +&Z & {} \times X &\relax\rTo^f & Y \\ +\ &&& \hLine&& \ \\ +&Z & & \rTo^{{\bf curry}(f)} & Y^X \\ +\enddiagram + +\noindent The \verb/{}/ makes sure \verb/\times/ still gets the spacing +appropriate to a binary operator. + +%========================================================================== +\section{Diagonal lines}\label{diagonals}\index{diagonal arrows} +Whereas horizontal and vertical arrows such as \verb/\rTo/ and \verb/\dTo/ +stretch to meet their endpoints without your telling them where those are, +the diagonals (\verb/\ruTo/) need to be told explicitly if you want to use +them for anything other than to go across a $3\times3$ square. + +\ixcmd\line\ixcmd\vector\ixcmd\ruTo\ixcmd\rdTo\ixcmd\luTo\ixcmd\ldTo +\ixcmd{()}% +The approximate direction of the arrow stays the same --- +right/left and up/down --- as given by its name. +The length (and exact direction) are given by {\em positive\/} coordinates. +As with \LaTeX's \verb/\line/s and \verb/\vector/s, +these are given pairs of (small) positive integers in round brackets, except +that there is no restriction on the values. + +\ixcmd\laf\ixcmd\lah\index{line10 and linew10 fonts}\index{height}\index{width} +However these numbers count the {\em cells,} horizontally and vertically, +through which the arrow passes, rather than the absolute distance. +This means% + \footnote{This represents a change from version~3, in which they were + required to be the same for the diagonals to work. The coordinates are + now converted internally into distances, and then back into a rational + number, and the appropriate \LaTeX\ arrow characters chosen. + The macros {\tt\string\laf}, {\tt\string\lah}, {\em etc.} and their octal + arguments are now obsolete.} +that if the \verb/height/ of the rows and the \verb/width/ of the +columns are different, \verb/\ruTo(2,2)/ is no longer a $45^\circ$ slope. + +The names of the arrow commands specify the horizontal direction first, +as a reminder that this is also the convention for coordinates. + +Another difference from the orthogonal arrows is the rule for where to place +the command. Somewhat arbitrarily,% + \footnote{The option \texttt{diagonalbase} changes this; it is + intended for emulation of other diagrams packages.} +this is +\begin{quote} + in the row {\em below the upper endpoint\/} (irrespectively of the direction + of the arrowheads, if any), and in the adjoining column +\end{quote} +In the commonest case (the diagonal of a small square) this means the middle +of the square; more generally for positive gradients (\verb/\ruTo/ and +\verb/\ldTo/) the arrow command goes below and to the left of the upper +endpoint, and for negative gradients (\verb/\rdTo/ and \verb/\luTo/) below +and to the right. + +\ixcmd\SEpbk\ixcmd\SWpbk\ixcmd\NEpbk\ixcmd\NWpbk +For example, here is the diagram which defines a \ix{pullback}. +The corner symbol is a macro (\verb/\SEpbk/) placed in the same cell as the +object, but which prints way outside it. +$$\begin{verbdiag} +U&&&&&\\ +&\relax\rdTo~{(x,y)}\rdTo(4,2)^x\rdTo(2,4)_y&&&&\\ +&&X\times_Z\SEpbk Y&\relax\rTo_p&X&\\ +&&\relax\dTo^q&&\relax\dTo_f&\\ +&&Y&\relax\rTo^g&Z& +\end{verbdiag}$$ +\vskip-6ex +\begin{diagram} +U \\ + &\relax\rdTo~{(x,y)} \rdTo(4,2)^x + \rdTo(2,4)_y \\ + & & X\times_Z \SEpbk Y & \rTo_p & X \\ + & & \dTo^q & & \dTo_f \\ + & & Y & \rTo^g & Z \\ +\end{diagram} + +For reverse compatibility, some commands with ``\ix{compass}'' +names are provided, such as \verb/\NW/, \verb/\WNW/, \verb/\NNNW/, +together with dotted and other variants. However +{\em the auxiliary file \verb/extra-diagonals.tex/ is obsolete and must +not be used.} + +\label{Hasse} +The main use of diagonals other than the simplest ones is for illustrating +\ix{order structures} (``\ix{Hasse diagrams}'').\index{posets}\index{lattices} +Posets are trivial categories, but in practice they're the most difficult +diagrams to draw! +\begin{quote} +\begin{verbatim} +\begin{diagram}[height=2.5em,width=1.5em,abut] +o&&&&o&&&&o&&&&o\\ +&\luLine\luLine(10,2)&&\ruLine&&\relax\luLine(6,2)&& +\ruLine(6,2)&&\luLine&&\ruLine\ruLine(10,2)&\\ +&&o&&&&&&&&o& +\end{diagram} +\end{verbatim} +\end{quote} + +\begin{diagram}[height=2.5em,width=1.5em,abut] +o&&&&o&&&&o&&&&o\\ +&\relax\luLine\luLine(10,2)&&\relax\ruLine&&\relax\luLine(6,2)&& +\relax\ruLine(6,2)&&\relax\luLine&&\relax\ruLine\ruLine(10,2)\\ +&&o&&&&&&&&o +\end{diagram} + +\ixcmd\DiagonalMap\index{lams1 to 5 fonts}\index{line10 and linew10 fonts} +The obsolete command \verb/\DiagonalMap/ is also still supported, but should +be replaced by the new commands. If you have used this with fonts other than +\verb/line10/ (for example \person{Michael}{Spivak}'s fonts +\verb/lams1/ to \verb/lams5/), +please contact me to assist with conversion. + +\ixcmd\raise\ixcmd\lower\ixcmd\raisebox\index{abut}% +By default, the diagonal arrows are set on the \ix{first pass} using +\LaTeX\ line segments. +By~contrast, the horizontals and verticals use ruled lines wherever possible +and are adjusted on a \ix{second pass} of the diagram +(within the \verb/\enddiagram/ command) to meet their endpoints. + +When the diagonals are set during the first pass, everything happens +within the cell where they are declared, where the algorithm has +no access to information about the size (and exact whereabouts) +of the objects at which the arrows are meant to point. +Therefore the lengths of the diagonals are chosen somewhat arbitrarily, +though the \verb/abut/ option will make them touch a \verb/\cdot/. + +To get better results we have to use more sophisticated methods, +and go outside what is strictly ``standard'' \TeX. + +%========================================================================== +\section{Alternative \TeX nology} +In order to get the best results, you should be aware of the way in which +diagonals are constructed. +\TeX\ is ultimately only capable of positioning characters from various fonts +and drawing black rectangles with horizontal and vertical sides: there +is no primitive for diagonal lines or for \ix{rotation}.\index{diagonal arrows} +This means that we have +\begin{itemize}\ixcmd\line\ixcmd\vector +\item either to juxtapose characters with a limited choice of angles, + as \LaTeX's \verb/\line/ and \verb/\vector/ commands do, + with the result that (because of pixel rounding + errors) they may not line up correctly, +\item or to use the loophole in the \ix{DVI} language provided by the + \verb/\special/ command to tell some post-processing software + (such as \verb/dvips/) to do the work for us, thereby surrendering + portability,\ixcmd\special\index{dvips} +\item or to over-print a large number of dots, making the DVI file very + large since at least 12 bytes are needed for each dot. + This is what \PiCTeX\ does.\ixprotect\PiCTeX +\end{itemize} +In this package options are provided to employ the first two of these methods. +\begin{itemize} +\item By default, characters from \LaTeX's% + \footnote{The code is similar to that underlying the \LaTeX\ commands, + but is not the same. In particular, the line segment characters are + equally spaced, instead of a single overlap between the last two.} + \verb/line10/ font are used.\index{line10 and linew10 fonts} + Arrowheads from this font are used irrespectively of those chosen by the + \verb/heads/ option. + The nearest% + \footnote{The approximation uses \ix{continued fractions}, {\em alias\/} + \ix{Euclid's algorithm}, with a correction. + There is also code for computing \ix{Pythagorean sums} (for the lengths of + rotated diagonals) and \ix{trigonometric functions} (currently unused).} + available \LaTeX\ slope is chosen, with the effect that arrows + may sometimes fall short or overshoot: \verb/height/ and \verb/width/ + should be set with this in mind.\index{height}\index{width}\index{size} +\item If the \verb/PostScript/ option is enabled, horizontal arrows are + used, and \verb/\special/ commands% + \footnote{The code is adapted from \person{Tomas}{Rokicki}'s + {\tt \ix{rotate.sty}}.} + are embedded in the DVI file which have the effect of rotating them. + If the DVI file is post-processed + by a program which does not understand Adobe {\sc PostScript} an error + message will probably be generated and the arrows will appear horizontal. + + Currently the labels are rotated with the arrows; later there will be an + option either to do this or to set them horizontally. + + Literal {\sc PostScript} commands are included in the DVI file + using \TeX's \verb/\special/ command. + The various DVI to {\sc PostScript} translators (page~\pageref{PS}) + make use of this in different ways, + so it is necessary to specify which one you are using. + I~use Tomas Rokicki's \verb/dvips/; + if the program you use is not listed, + please consult its manual for the appropriate way of including literal + {\sc PostScript} commands and tell me the result + so that I can add this as an option. + The rotation code should be independent of the design of the translator. + + It does not and cannot work with the Oz\TeX\ {\sc PostScript} translator + because this sorts the characters on each page by font and cannot deal + with \verb/\special/ commands.\index{oztex@Oz\protect\TeX} +\item If the \verb/TPIC/% + \footnote{\ix{TPIC} is a graphics preprocessor for \TeX\ by + \person{Tim}{Morgan} which uses this set of {\tt\string\special} commands. + The same ones were also adopted by \ixcmd\special + \person{Dirk}{Grunwald} for {\tt \ix{texpictex}} and + by \person{Conrad}{Kwok} for {\tt \ix{eepic}}, + which are \LaTeX\ macro packages for \ix{graphics}.} + option is enabled, a simpler set of \verb/\special/ + commands is used to draw diagonal lines, but rotation is not available. + \verb/dvips/ and \verb/xdvi/ understand these, but other post-processors + may give error messages and print nothing.\index{xdvi}\index{dvips} +\end{itemize} +No additional macro packages or special knowledge are needed to make use of +these methods: all of the necessary code is built in to the diagrams package. + +Future versions may exploit these extensions to provide other features, such +as curved lines; indeed this is likely to be the main direction of further +development. Other methods may also be provided. +However +\begin{itemize} +\item if no extension option is selected a standard DVI file + (using the \verb/line10/ font) will be always generated, + giving an approximation to the features requested. +\item development of new features will use \verb/PostScript/ mode, + without which a ``\ix{second class service}'' will be provided. +\end{itemize} + + + +%=========================================================================== +\section{Regular figures} + +The difference between these options can be seen by trying to draw a +regular \ix{hexagon}.\label{hexagon}\index{abut}\index{tight} +$$\begin{verbdiag}[vtrianglewidth=1em,abut,tight] + &&\relax{}&&\relax\rLine&&\relax{}&\\ + &\relax\ruLine&&&&&&\relax\luLine&\\ + \relax{}&&&&&&&&\relax{}&\\ + &\relax\luLine&&&&&&\relax\ruLine&\\ + &&\relax{}&&\relax\rLine&&\relax{}& +\end{verbdiag}$$ +The \verb/PostScript/ and +\verb/TPIC/ options will make it meet up exactly, whereas the default \LaTeX\ +method does not --- though it is surprisingly accurate! +\begin{center} + \begin{diagram}[vtrianglewidth=1em,abut,tight,inline,PS] + &&{}&&\rLine&&{}\\ + &\ruLine&&&&&&\luLine\\ + {}&&&&&&&&{}\\ + &\luLine&&&&&&\ruLine\\ + &&{}&&\rLine&&{} + \end{diagram} + \qquad\qquad + \begin{diagram}[vtrianglewidth=1em,abut,tight,inline,noTPIC,noPS] + &&{}&&\rLine&&{}\\ + &\ruLine&&&&&&\luLine\\ + {}&&&&\hbox{\rm\LaTeX}&&&&{}\\ + &\luLine&&&&&&\ruLine\\ + &&{}&&\rLine&&{} + \end{diagram} +\end{center} +The \verb/vtrianglewidth/ option and its variants set the \verb/width/ +and \verb/height/\index{width}\index{height}\index{size} of the cells, +but the array retains the symmetry of a rectangle. +Tesselations of \ix{triangle}s and \ix{hexagon}s +may be drawn in this way. + +Drawing a regular \ix{pentagon} requires rows and columns +of different sizes. +It~is envisaged that only a few special ways of doing this will +be used, so this feature is provided by a \emph{declaration}% + \footnote{I cannot think of a natural way of specifying the distances + without coding general \ix{Gaussian elimination}. + I'm~quite happy to accept angles expressed in degrees.} +of the form\ixcmd\newdiagramgrid\label{grid} +\begin{quote} +\begin{verbatim} +\newdiagramgrid{pentagon}% + {0.618034,0.618034,1,1,1,1,0.618034,0.618034}% + {1.17557,1.17557,1.902113,1.902113} +\end{verbatim} +\end{quote} +(In fact this is already made within the source of the package.) +The numbers in the first list specify the distances between the centres +of the first and second columns, the second and third, and so on, +and similarly those in the second list the distances between the +baselines of the rows. +The units are the specified cell \verb/height/ and \verb/width/. + +Once declared, the \ix{grid} is chosen by name using the obvious option. +Note that this forces the \verb/tight/ option.\index{tight} +\begin{verbatim} +\begin{verbdiag}[grid=pentagon,PostScript] + &&&&(A*B)*(C*D)& \\ + &&&\ruTo(4,2)^\Assl&&\rdTo(4,2)^\Assl&\\ + A*(B*(C*D))&&&&&&&&((A*B)*C)*D&\\ + &\rdTo_{\Id*\Assl}&&&&&&\ruTo_{\Assl*\Id}&\\ + &&A*((B*C)*D)&&\rTo^\Assl&&(A*(B*C))*D& +\end{verbdiag} +\end{verbatim} +\begin{diagram}[grid=pentagon,small] + &&&&(A*B)*(C*D)& \\ + &&&\relax\ruTo(4,2)^\Assl&&\relax\rdTo(4,2)^\Assl&\\ + A*(B*(C*D))&&&&&&&&((A*B)*C)*D&\\ + &\relax\rdTo_{\Id*\Assl}&&&&&&\relax\ruTo_{\Assl*\Id}&\\ + &&A*((B*C)*D)&&\relax\rTo^\Assl&&(A*(B*C))*D& +\end{diagram} +A similar grid for a pentagon with a vertical side is obtained by +the \verb/gridx/ option. + +The grid \verb/perspective/\index{perspective} has this effect +on the \ix{cube} on page~\pageref{cube}: +\begin{diagram}[grid=perspective] + A' & &\rTo^{f'} & & B' \\ + & \rdTo_a & & & \vLine^{h'}& \rdTo_b \\ +\dTo^{g'} & & A & \rTo^f & \HonV & & B \\ + & & \dTo^g & & \dTo \\ + C' & \hLine & \VonH & \rTo^{k'} & D' & & \dTo_h \\ + & \rdTo_c & & & & \rdTo_d \\ + & & C & & \rTo^k & & D \\ +\end{diagram} +Without the \verb/PostScript/\index{PostScript} option the +\ix{diagonal arrows} will not be set correctly. + + +%=========================================================================== + +\iffalse +\section{Bent lines --- not currently implemented} + +The diagonal lines in the previous section were difficult to draw and +rather ugly. Here is a prettier way of doing it: +\begin{verbdiag} +U&&\relax\hLine^x&&\relax\dlBentto&\\ +&\relax\rdTo^{\langle x,y\rangle}&\\ +\vLine^y&&X\times_Z\SEpbk Y&\relax\rTo^p&X&\\ +&&\relax\dTo^q&&\relax\dTo_f\\ +\relax\ruBentto&&Y&\relax\rTo^g&Z&\\ +\end{verbdiag} +which gives: +\begin{diagram} +U && \hLine^x & & +\dlBentto \\ +& \rdTo^{\langle x,y\rangle} \\ +\vLine^y && X \times_Z \SEpbk Y & \rTo^p & X \\ +&&\dTo^q && \dTo_f \\ +\ruBentto&& Y & \rTo^g & Z \\ +\end{diagram} + +Notice that the bent lines consist of two separate arrow commands, +one of them an ordinary \verb/\hLine/ or \verb/\vLine/ and the other +a ``bent'' arrow. The latter are designed to meet orthogonal lines +exactly. To be precise, +\begin{itemize} + +\item \verb/\dlBentto/, {\em etc.}, has a corner which is vertically +positioned on the maths axis and includes a short horizontal line to +compensate for the space at the end of \verb/\hLine/. +{\em It~must be placed in the cell corresponding to the corner.} +There are similar commands \verb/\ulBentto/ +for upward maps, \verb/\drBentto/ to meet lines on the right and +\verb/\dlBent/ without an arrowhead (and all the combinations). + +\item \verb/\ruBentto/, {\em etc.}, has a corner which is horizontally +positioned in the centre of the {\em next\/} cell (assuming that's +empty). So {\em it must be placed in the cell next to the corner, +in fact that corresponding to the edge.} The arrow is extended +automatically. +Again there are commands with variant names. + +\end{itemize} + +These bent line commands are defined in exactly the same way as ordinary +horizontal and vertical arrows, except that +\begin{itemize} + +\item \verb/\dlBentto/ has only a bottom half, {\em i.e.}~the leading +tip and first filler are \verb/\empty/. The second filler and trailing +tip are quite ordinary but the middle is special (\verb/\ldmcorner/). + +\item \verb/\ruBentto/, on the other hand, is a complete arrow, the +{\em tail\/} now being a special corner. + +\end{itemize} +Other middles could be defined to give rounded corners, using \LaTeX's +{\tt circle10} font. +\fi + + +%========================================================================= +\section{Emulation of \TeX ercise 18.46}\label{18.46} +\ixprotect{\TeX book}\index{Exercise 18.46}\ixprotect{\TeX ercise 18.46}% +\index{emulation}% +This and the next section describe how to convert diagrams in your existing +documents which were drawn using other commutative diagram macro packages to +use this one, wherever possible changing only the preamble or macro +file and not the text itself. + +Exercise 18.46 of {\em The \TeX book\/} provided some ideas for commutative +diagrams, from which the present package was originally developed. +The following instructions are based on what is given there, +but if you have added other arrow macros you will have to work out how to +re-define them by following the examples given. + +\ixcmd\matrix +If you have used the {\em\TeX book\/} macros as they stand --- with +\verb/\matrix/ enclosing the diagram --- you will first have to distinguish +between the diagrams and real matrices. +(If~you give arrays of numbers to the commutative diagrams package, they +will come out rather widely spaced.) +This process is unnecessary if you already have a macro for diagrams +rather than matrices: just re-define that in a similar way. + +In~your macro file you probably have something like what follows the +\verb/\iffalse/ command below, but with additional macros written in +a similar way (this is the reason for setting it all out in gory detail +in the manual rather than providing an extra input file as in the case +of some of the ``packages'' described in the next section). +If~you make the following additions you will be able to revert to the +original (in the unlikely event that you are not satisfied) +by changing this to \verb/\iftrue/. + +This is not particularly difficult: when, as a \TeX\ novice, I~wrote my +Ph.D.~thesis in August 1986, I~had sixty diagrams drawn using +the {\it\TeX book\/} +macros, together with several others that had to be drawn by hand. +Recovering that from an archive tape, I~recently found that all but five +of the sixty could be converted without any change at all to the text, +whilst the hand-drawn ones can now be drawn with the up-to-date package. + +\ixcmd\mapright\ixcmd\mapleft\ixcmd\mapup\ixcmd\mapdown +\ixcmd\inputlineno +\begin{quote}\small +\begin{verbatim} +\iffalse + % your macros, copied or adapted from TeXercise 18.46 (page 325) + \def\mapright#1{\smash{\mathop{\longrightarrow}\limits^{#1}}}} + \def\mapdown#1{\Big\downarrow\rlap{$\vcenter{\hbox{$\scriptstyle#1$}}$}} + % + \let\cdmatrix\matrix % revert to using \matrix for diagrams +\else + % Replacement for the above using ... + \input diagrams % Paul Taylor's diagrams. +% + \def\mapright#1{\global\matrixwascdtrue\rTo^{#1}\relax} + \def\mapleft #1{\global\matrixwascdtrue\lTo^{#1}\relax} + \def\mapup #1{\global\matrixwascdtrue\uTo>{#1}\relax} + \def\mapdown #1{\global\matrixwascdtrue\dTo>{#1}\relax} +% + % Maybe you have some variants like this: + \def\mapupbefore#1{\global\matrixwascdtrue\uTo<{#1}\relax} +% + % The following examples may also be useful: + \let\into\rInto + \def\horizadjoint#1#2{\pile{\lTo^{#1}\\\bot\\\rTo_{#2}}} + \def\vertadjoint #1#2{\dTo<{#1}\dashv\uTo>{#2}} +% + % Here is a replacement for \matrix which gives a commutative + % diagram, including some extra macros for use inside them. + \def\cdmatrix{\bgroup + \edef\matrixlineno{\the\inputlineno}\global\matrixwascdfalse + % + \let\matrix\pile % inner \matrix is probably parallel horizontals + % + % re-define the diagonal arrows + \let\nwarrow\luTo\let\nearrow\ruTo\let\swarrow\ldTo\let\searrow\rdTo + % + \diagram[]% begin the diagram (without options) + \getthematrix% delete this line if you use amstex rather than plain + } + \def\getthematrix#1{#1\endcdmatrix} + \newif\ifmatrixwascd + \def\endcdmatrix{\enddiagram\egroup} +% + % The following tells you whether it was actually a diagram or + % a matrix. Remove this when you've changed those \matrix + % commands in your text which should be diagrams to \cdmatrix. + \def\endcdmatrix{\enddiagram\egroup + \expandafter\message{^^JThe \string\matrix\space at lines + \matrixlineno--\the\inputlineno\space was really a + \ifmatrixwascd diagram\else matrix\fi.^^J}} + \let\matrix\cdmatrix \let\endmatrix\endcdmatrix +% +\fi +\end{verbatim}\end{quote} + +The code as shown above assumes you have \TeX\ version~3 (to provide +\verb/\inputlineno/); it prints a \verb/\message/ to tell you whether +each \verb/\matrix/ has used any arrow commands. +With a clever choice of this message you can even get your editor +to make the necessary changes to the text for you in batch mode! +Delete the extra code after you have done this. + +\ixprotect\AmSTeX\index{array environment}\ixcmd\endmatrix +Beware that \AmSTeX\space uses \verb/\matrix#1\endmatrix/ instead of +\verb/\matrix#1/. +In~this case, delete \verb/\getthematrix/ as indicated. +Then (where appropriate) change \verb/\endmatrix/ as well as \verb/\matrix/. +The same applies if you have used the \verb/array/ enviroment in \LaTeX. + +% \begin{itemize} +% \item \verb/\matrix{..}/ must be changed to +% \verb/\diagram..\enddiagram/ (or~\verb/\commdiag{..}/). +% \item \verb/\mapright/, {\em etc.,} must be changed to (or~defined +% as) \verb/\rTo/. Positional arguments are still recognised, +% {\em so long as they are enclosed in braces.} +% \item \verb/\cr/ should be changed to \verb/\\/. +% \end{itemize} + +%========================================================================= +\section{Emulation of other macro packages}\label{emulate}\index{emulation} +There are several other \TeX\ macro packages in circulation for drawing +commutative diagrams, of varying degrees of sophistication. +This section describes how to adapt the preamble of an existing document +which was written to use such macros so that it prints diagrams like those +in this manual instead. +When you publish documents prepared in this fashion, please remember to +acknowledge the authors of both packages, making it clear which you used to +type the original source and which produced the finished product.% +\index{acknowledgement} + +\bigskip +\noindent{\bf \ix{American Mathematical Society}}% +\ixprotect\AmSTeX\ixprotect\AMSLaTeX\index{amscd.sty} +(\AmSTeX, and \AMSLaTeX's \verb/amscd.sty/): see Michael Spivak below. + +\bigskip +\noindent{\bf \person{Michael}{Barr}}'s \verb/catmac/\index{catmac.tex} macros +were based on a principle of overlapping squares. +Whilst this is perhaps closer conceptually to the + categorical ideas which are being expressed, it is not possible to emulate + the language using the matrix syntax. The simple shape macros can, however, + be replaced by +\ixcmd\square +\begin{quote}\begin{verbatim} +\def\square[#1`#2`#3`#4;#5`#6`#7`#8]{% + \diagram[] + {#1} & \rTo^{#5} & {#2} \\ + \dTo<{#6} & & \dTo>{#7} \\ + {#3} & \rTo^{#8} & {#4} + \enddiagram} +\end{verbatim}\end{quote} + and similarly \verb/\atriangle/, \verb/\btriangle/, \verb/\dtriangle/, + \verb/\ptriangle/, \verb/\qtriangle/, \verb/\Atriangle/, \verb/\Ctriangle/, + \verb/\Driangle/, \verb/\Vriangle/, + \verb/\Arianglepair/, \verb/\Vrianglepair/ and \verb/\recurse/, + which are easy exercises.% +\ixcmd\atriangle\ixcmd\btriangle\ixcmd\dtriangle\ixcmd\ptriangle +\ixcmd\qtriangle\ixcmd\Atriangle\ixcmd\Ctriangle\ixcmd\Driangle +\ixcmd\Vriangle\ixcmd\Arianglepair\ixcmd\Vrianglepair\ixcmd\recurse + +\bigskip +\noindent{\bf \person{Karl}{Berry}}'s \verb/eplain/:\index{eplain.tex} +see Steven Smith below. + +\bigskip +\noindent{\bf \person{Francis}{Borceux}}'s \verb/diagram/ package uses \LaTeX's + \verb/picture/ environment\index{picture environment} + instead of \TeX\ arrays, but since it is designed in an array fashion + it can be interpreted. + Instead of that file, use +\begin{quote}\begin{verbatim} +\input diagrams +\input Borceux-to-Taylor +\end{verbatim}\end{quote} + This is available from the same place as (my) \verb/diagrams.tex/ itself. + Currently the curved, free and multiple arrows + are not implemented, and all size parameters are ignored. + +\bigskip +\noindent{\bf \person{Eitan}{Gurari}}'s \verb/dratex/:\index{dratex} +I haven't looked in to this package yet. + +\bigskip +\noindent{\bf Donald Knuth}'s Exercise 18.46: + see section~\ref{18.46} of this manual. + +%\bigskip +%\noindent{\bf J\"urgen Koslowski}: I haven't looked in to this package yet. + +\bigskip +\noindent{\bf \person{Frank}{Mittelbach}}'s \AMSLaTeX\space \verb/amscd.sty/: +see Michael Spivak below. + +\bigskip +\noindent{\bf \person{John}{Reynolds}}: +I haven't looked in to this package yet. + +\bigskip +\noindent{\bf \person{Kris}{Rose}}'s \XYpic\ixprotect\XYpic\ + uses a different convention for + where to declare arrows, namely in the cells with their sources. + This convention will be supported in the next release. + The syntax of Rose's arrow commands is also more complicated. + I~do not intend to support his fonts or turning commands. + +\bigskip +\noindent{\bf \person{Rainer}{Sch\"opf}}'s \AMSLaTeX\space \verb/amscd.sty/: +see Michael Spivak below. + +\bigskip +\noindent{\bf \person{Steven}{Smith}}: I haven't looked in to this package yet. + +\bigskip +\noindent{\bf \person{Michael}{Spivak}}'s \LAMSTeX:\ixprotect\LAMSTeX +similar comments apply here as to Kris Rose's package. + +\bigskip\noindent{\bf Michael Spivak}'s \AmSTeX\space\ixprotect\AmSTeX + (as described in {\em The Joy of \TeX\/})% + \index{joy@{\em The Joy of \protect\TeX}} + had some very primitive commutative diagrams,\ixcmd\CD\ixcmd\endCD + enclosed in \verb/\CD...\endCD/. + \iffalse + Horizontal arrows were drawn with the commands + \verb/@</$f$\verb/</$g$/\verb/</ or \verb/@(/$f$\verb/(/$g$/\verb/(/ + and \verb/@>/$f$\verb/>/$g$/\verb/>/ or \verb/@)/$f$\verb/)/$g$/\verb/)/, + where $f$ and $g$ are the upper and lower labels. + Vertical arrows used + \verb/@A/$f$\verb/A/$g$/\verb/A/ and \verb/@V/$f$\verb/V/$g$/\verb/V/ + where $f$ and $g$ are the left and right labels. + These arrows were only as long as their labels. + A~long equals without labels could be drawn with % ??? \verb/@-/, + \verb/@=/ and \verb/@|/ or \verb/@\vert/. % ?? \verb/@\|/ and \verb/@\Vert/ + for single and double lines. + \fi + + You can obtain a dramatic improvement in these diagrams without changing + the text of your document by using my package with the \verb/amstex/ option. + Given a (complete, correct) \AmSTeX\ document, change the header to read + \begin{quote}\begin{verbatim} + \input amstex + \input diagrams + \diagramstyle[amstex] + \end{verbatim}\end{quote} + \vskip-2ex + If~\AmSTeX\space or \AMSLaTeX\space (\verb/amscd.sty/) had been loaded, + this will replace the definitions.\ixprotect\AMSLaTeX\index{amscd.sty} + + You can also include \AmSTeX\space diagrams extracted from old papers + in new \verb/plain/ \TeX\ or \LaTeX\ documents. In~this case, + do not load \AmSTeX\ (unless you want it for some other reason) + but instead use + \begin{quote}\begin{verbatim} + \input diagrams + \def\CD{\diagram[amstex]} + \end{verbatim}\end{quote} + \vskip-2ex + to confine the changes to the meaning of the \verb/@/ character to the + diagrams themselves. + The in-line horizontal arrows will then not be interpreted. + +\bigskip +\noindent{\bf \person{Timothy}{van Zandt}}'s \verb/pstricks/:\index{pstricks} +I haven't looked in to this package yet. + +%========================================================================= +\section{Frequently asked questions}\label{faq} +\noindent{\bf Wouldn't it be better to draw it with a mouse?} No.% +\index{mouse}\index{wysiwyg} + +\bigskip\noindent{\bf How do I get it?} +See section~\ref{get}. + +\bigbreak\noindent{\bf Is it compatible with ...?}\index{compatibility} +From 1986 until after version~3 of this package was announced in July~1990 +I~used \verb/plain/ \TeX,\index{plain \protect\TeX} +whilst giving assistance to colleagues who used \LaTeX. \ixprotect\LaTeX +In~December 1991 the local \TeX\ system was converted to use +\person{Frank}{Mittelbach} and \person{Rainer}{Sch\"opf}'s font selection +(NFSS1)\index{NFSS} for \LaTeX. +Now we use \LaTeXe\ixprotect\LaTeXe, which includes NFSS2. + +Consequently there is a great deal of collective experience in using the +diagrams package in all of these environments. I~do not have experience +of \AmSTeX, \AMSLaTeX, \verb/eplain/ or commercial \TeX\ packages, but +do not know of any reason why it should not work with them: +please tell me if you find any difficulties. + +It is, regrettably, not uncommon for publishers to copy parts of +\LaTeX\ and {\tt\ix{article.sty}} +into their own journal and conference styles,% +\index{journals}\index{conference proceedings} +and not keep these up to date with respect to bug-fixes and other changes. +Many of the bug reports which I~receive in connection with the diagrams +package are in fact traceable to errors of this kind in publishers' styles. +My~policy is that I~will no longer fix bugs in software from commercial +organisations for free, but suggest some consultancy arrangement. +If, however, it is possible to make the package more robust and circumvent +such bugs in other software then I~will do this. + +\person{Richard}{Stallman}'s \verb/texinfo/\index{texinfo.tex} +is designed for documenting other software, +in which \TeX's special characters often have important meanings. +For this reason many of the \verb/\catcode/s \ixcmd\catcode +have been changed, and in +particular \verb/@/ is used where \TeX\ uses \verb/\/. +The usual \TeX\ meanings are restored within \verb/@tex..\Etex/. +It~is possible to load this package without this, but you must do +\begin{quote}\begin{verbatim} +@catcode`@\=0 \catcode`\%=14 \input diagrams \catcode`\%=12 \catcode`\\=13 +\end{verbatim}\end{quote} +You must also do \verb/@catcode`@&=4/ before using \verb/@diagram/. +Braces \verb/{}/ stay the same. + +Unfortunately the package does not seem to work with TeX-XeT, +the extension to \TeX\ for typesetting Arabic and Hebrew. +I~believe this problem is insuperable. + +\bigbreak\noindent{\bf Does it use any special \ix{fonts}?} No. +One of the design +criteria of the package is that all of the components come from the standard +\ix{Computer Modern fonts} that come with \TeX, +except that the diagonal arrowhead characters come from \LaTeX's +\verb/line10/ font.\index{line10 and linew10 fonts} +As~one user said, +\begin{quote} +``I agree with you in being against the use of additional fonts. +It takes some time and experience to port, say, +\LAMSTeX\ixprotect\LAMSTeX\space fonts to [my `personal' computer]. +I would much prefer embedded {\sc PostScript} commands.\index{PostScript} +Custom \ix{DVI} drivers such as \verb/xdvi/,\index{xdvi} on the other hand, +are not widely available, at least not for [my computer].'' +\end{quote} +There are {\em optional\/} arrowheads from the \ix{AMS symbols fonts}, +which were +\ifx\twoheadrightarrow\undefined not available\else used\fi\space +when this copy of the manual was printed. They may be obtained by anonymous +\ix{FTP} from \verb/e-math.ams.com/.\index{anonymous FTP} + +It is sometimes claimed that it is advantageous to have specially designed +fonts in order to ensure that the components match up correctly. +However the reason why they frequently do not is pixel-rounding, +{\em even when the DVI-driver does this correctly according to the rules +specified by \person{Donald}{Knuth}}.\index{pixel size}% + \footnote{If you don't believe me, calculate for yourself which pixels + are inked when a 0.4pt-wide rule is centered on the maths axis of + {\tt cmmi10} (2.5pt above the baseline) at 300dpi (1~point~=~4.15~pixels), + and compare this with characters such as $\greaterthan$ in the output of + {\tt gftype -i cmmi10.300gf}. The character $\succ$ in {\tt cmsy} is + one pixel lower than this.} +The \verb/dpi/ option has been included to correct for this.\index{dpi} + +If you have other arrowhead fonts available, such as those provided by +\person{Kris}{Rose} for \XYpic\ixprotect\XYpic\ +and \person{Michael}{Spivak} for \LAMSTeX,\ixprotect\LAMSTeX\ +you may use them if you write your own \verb/\newarrowhead/ commands.% +\ixcmd\newarrowhead + +\bigbreak\noindent{\bf Corruption by \ix{electronic mail}.}\index{corruption} +If you cannot use FTP and the route to you by electronic mail passes +through non-\ix{ASCII} machines (such as through \ix{BITNET}), +the file may suffer corruption.\index{EBCDIC} +This doesn't matter very much with the manual, but the macro +package itself has a list of characters at the top, and use of most of those +which experience has shown to be vulnerable has been confined to the first +section, wherever possible. Search for the word ASCII if in doubt. + +\bigbreak\noindent{\bf \TeX\ capacity exceeded.} +\TeX\ was designed in the early 1980s, when RAM was measured in kilobytes, +and does not have \ix{dynamic memory allocation}. +Although \verb/tex.web/\index{tex.web} +says loudly ``Don't Touch!'', the compile-time +parameters listed on page 300 of {\it The \TeX book\/} {\em are\/} meant to be +changeable, and \person{Donald}{Knuth} provided a mechanism +(\verb/tex.ch/) for doing so. +\person{Karl}{Berry}'s widely used \verb/web-to-C/\index{web-to-C} +{\sc Unix}\index{Unix} port of \TeX\ +increases them substantially --- in accordance with the \ix{RAM} available in +1990s hardware and that needed by 1990s software. There is nothing +{\sc Unix}-specific about these changes: they can just as well be made in +any other compilation environment. +Currently it seems Oz\TeX\index{oztex@Oz\protect\TeX} has not made +the changes --- please complain about this to its author, +\person{Andrew}{Trevorrow}, not~me. + +The increase in size over version~3 is largely due to the diagnostics, +{\em i.e.} helping you to use the package!\index{error recovery} + +If you get ``no room for another \verb/\dimen/'' \ixcmd\dimen +it probably means you're using \PiCTeX\ixprotect\PiCTeX, +which uses 110 out of the available~256; I~use~20. + +The process of stretching the arrows in a completed diagram is quite slow, +but at least in this package \TeX\ spends the time doing something useful +rather than parsing (\LaTeX\ \verb/picture/)\index{picture environment} +\verb/\put/ commands inside macros. +The emulation of \person{Francis}{Borceux}'s macros, for instance, +is 50\% faster than the original. +\person{Kris}{Rose}'s \XYpic\ixprotect\XYpic\ takes about six times +as long to draw the same diagram. + +\bigbreak\noindent{\bf Default \ix{arrowheads}.} Even when you define your own +arrows with special arrowheads, you still get get \LaTeX\ heads on diagonals. +This is because \LaTeX\ heads are available in a variety of directions, +but your special ones are only defined for up, down, left and right. +To~get special heads on diagonals, it is necessary to rotate them, and to +do that you need the \verb/PostScript/ option.% +\index{diagonal arrows}\index{PostScript} + +\bigbreak\noindent{\bf Display options.} If, as was advised in earlier versions +of this manual, you enclose the diagram in \verb/$$...$$/\ixcmd{$$} +or a \index{displaymath environment}, +the new \ix{options} in section~\ref{options} for positioning it cannot work. +Except in those cases where you want two or more diagrams side by side, +or a small diagram in-line in the text, it is better to remove such +enclosings; then you can experiment with the options using +\verb/\diagramstyle/. \ixcmd\diagramstyle +\LaTeX's \verb/center/ environment is,\index{center environment} +for this purpose, {\em not\/} a display but a paragraph of text, +with some strange results if you use the \verb/textflow/ option;% +\index{text flow} +in this case you should use the \verb/inline/ option\index{in line} +on the individual diagrams to make them appear side by side. + +\bigskip\noindent{\bf Large \ix{gaps} between diagonals and their endpoints.} +\index{PostScript}\index{diagonal arrows} +This happens if you try to use the default \verb/LaTeX/ line segments +to draw very steep or very shallow diagonals. +Try using the \verb/PostScript/ option. + +By~default, the (rows and) columns of the matrix forming the diagram can +\ix{stretch} to accommodate long pieces of text as objects and arrow labels. +This is appropriate for rectangular diagrams and requires no user intervention. +If,~however, you have diagonals, this stretching causes them to fall short of +the objects to which they are meant to point, because currently they are +(unlike the horizontals and verticals) rigid. +\message{A message about "badly drawn diagonals" follows. It is deliberate.}% + +\vskip-5ex +\begin{diagram}[loose,size=3em,notextflow,heads=LaTeX,noPS] + A & \rTo^{\lessthan 1_A,0_A\greaterthan} & A\times N\\ + & \rdTo[fixed]_f&\dDotsto>h\\ + &&B +\end{diagram} +An example provided by a user is shown. The solution is to use options like +\begin{quote} + \verb/\begin{diagram}[tight,width=4em,height=3em]/ +\end{quote} +See section~\ref{options} for details.\index{tight} +Sometimes there isn't room on the page to increase the width sufficiently. +Try using the \verb/scriptlabels/ option, or, failing that, put the whole +diagram in the scope of a \LaTeX\ \verb/\small/ or even \verb/\tiny/ +declaration.\ixcmd\small\ixcmd\tiny + +This real-life example illustrates another common problem: the symbols +$\lessthan$ and $\greaterthan$ are {\em \ix{relations}\/} +$\langle$not~brackets$\rangle$ --- and it's not unusual to see line-breaks +the wrong side of them, even in published, supposedly proof-read, books. +If~you don't often use the strict arithmetical relations and find it a bore +to type \verb/\langle..\rangle/, put the following in your macro file:% +\ixcmd\langle\ixcmd\rangle\ixcmd{<}\ixcmd{>}\ixcmd\mathcode +\ixcmd\mathchardef +\begin{quote}\begin{verbatim} +\mathcode`\<="4268 % < = \langle +\mathcode`\>="5269 % > = \rangle +\mathchardef\gt="313E % arithmetic +\mathchardef\lt="313C % strict order +\end{verbatim}\end{quote} +\ixcmd\mbox +As another piece of general advice, many people use \verb/\mbox/ when it is +completely unnecessary. Amongst other things, it inhibits the reduction of +the contents when used as a sub- or superscript. +In~\LaTeXe, try using the \verb/\text/\ixcmd\text\ and +\verb/\ensuremath/\ixcmd\ensuremath\ commands. + +%\bigskip\noindent{\bf Diagonals overprint or don't quite meet their +%endpoints.} I'm~sorry about this: it's because I~haven't got round to writing +%the code to stretch the diagonals in the same way as the horizontals and +%verticals. This will be done in the next release, because I~need it for my +%book. +% +%In~the case of poset diagrams, the \verb/[tight,abut]/ options should work +%satisfactorily. + +\bigskip\noindent{\bf ``Badly drawn diagonals'' error message.}% +\index{badly drawn diagonals}\index{diagonal arrows} +This warning is given if (a)~you use diagonals which are set on the first +pass ({\em i.e.}~\LaTeX, \ix{TPIC} or \verb/fixed/\index{fixed}) {\em and\/} +(b)~some of the columns are significantly wider than was specified by +the \verb/width/ or \verb/size/ option.\index{width}\index{size} +It~indicates that the problem above, with big gaps at the ends of diagonals, +may have occurred. +Check this, and if necessary set the \verb/tight/ option and specify the +necessary (increased) \verb/width/ yourself. +Alternatively, use the \verb/PostScript/ option to get the diagonals +set on the second pass; then they will meet their endpoints.% +\index{PostScript}\index{width}\index{size} + +\bigskip\noindent{\bf Labels on arrows \ix{over-print} objects or +\ix{arrowheads} become detached.}\index{labels}\index{decapitated arrows} +You're trying to squeeze too much into the column: increase +\verb/width/ (as it tells you to do). If~the object at one end is much +longer than that at the other, the \verb/midshaft/ option may be appropriate.% +\index{midshaft}\index{width}\index{size} + +\bigskip\noindent{\bf Mixed or missing \ix{arrowheads}.} +The idea of providing the \verb/heads/\index{heads} option +is that you should specify at the beginning of your +document which style you want. The default is \verb/heads=LaTeX/ since this +provides consistency between orthogonal and diagonal arrowheads when rotation +is not available. + +\bigskip\noindent{\bf Undefined symbols.}% +\index{undefined control sequence} To~use the curly and black +arrowheads you need the \ix{AMS symbols fonts}; +if one of these (\verb/\curlyvee/, \verb/\blacktriangleleft/)% +\ixcmd\curlyvee\ixcmd\blacktriangleleft\ is undefined, +hit return several times to complete +the run of \TeX\ on your document, then go back and insert + \ifx\usepackage\undefined + \verb/\input mssymb/ + \else + \verb/\usepackage{amssymb}/ + \fi +or change the heads declaration.\index{amssymb.sty} + +If~you find a symbol with a \ix{meaningless name} like \verb/\CD@gF/ +\ixcmd{\CD@gF} or +\verb/\cD@hA/ is undefined, it means that you have used internal macros +from a previous version of the diagrams package. Please remove them: +the names are deliberately meaningless to persuade you not to use them. + +\bigbreak\noindent{\bf Can you put \ix{diagrams within diagrams}?}% +\index{nested diagrams}\ixcmd\pile\index{parallel arrows} +Yes, but it's not often that such things are needed. Remember that +\verb/\pile/ is used for parallel horizontals. Sometimes you may want an +array of diagrams. + +During development I~found problems when the first cell of the inner +diagram was empty, and version 3.22 resulted in \TeX's elusive +``\ix{interwoven alignment preambles} are not allowed'' error +({\it The \TeX book}, page 299).\ixprotect{\TeX book} +Although I believe these bugs have now been fixed, this is a delicate area +and it is possible that others may arise. + +\bigskip\noindent{\bf \verb/Missing \endcsname inserted./}\label{miss endcs} +\index{missing \protect\verb/\endcsname/}\ixcmd\endcsname\ixcmd\the +This can happen if a macro occurs within an option [in~square brackets]. +In~general you must ensure that such macros expand to text characters only. +For example in \LaTeXe:\ixprotect\LaTeXe\ixcmd\usepackage +\begin{quote} + \verb/\usepackage[flushleft=\mainindent]{diagrams}/ +\end{quote} +where \verb/\mainindent/ is a \verb/\dimen/; +in this case \verb/\the\mainindent/ will work, +because \verb/\the/ expands the \verb/\dimen/ to its value +({\it\TeX book}, page 214). +Values for options to individual diagrams and arrows, or parsed by +\verb/\diagramstyle/ instead of \verb/\usepackage/, may safely contain +macros where appropriate. + +\bigskip\noindent{\bf Horizontal arrows \ix{overprint} objects.} +\index{horizontal arrows}\ixcmd\hfill\ixcmd\hss\ixcmd\hspace\ixcmd\hidewidth +You must not use \verb/\hfill/, \verb/\hss/, \verb/\hspace/, +\verb/\hidewidth/ or other similar commands to try to +alter the effective size of the object. + +\index{bug reports} +\bigskip\noindent{\bf What if it still doesn't work?} If you have a problem +which is not answered by this manual, please compile a {\em short\/} file +containing your problem diagram and any macros (such as \verb/\Assl/ in +section~\ref{typing}) it contains. Run it through \verb/tex/ or \verb/latex/ +to check that no definitions are missing, and include a note of the date +and version number which you are using. Then send it by {\em electronic\/} +mail: please do not use the telephone or postal mail. + +\ixcmd\scrollmode\index{error recovery} +I am keen to know about any adverse interactions with other software, +anything which is not well explained in this manual, or any cases of +mis-typing in which \verb/\scrollmode/ does not get to the end of the +document because of a diagrams error. + +% automatic floats +% picture-mode inserts for braids, etc + +%========================================================================= +\section{Conditions of use}\index{conditions of use}\index{copyright} +You may freely copy and pass on this package and include it in collections +of free software, but may not alter it or charge a fee for it. + +\index{registration as a user} +Please ensure that you are registered with me as a user, so that you can be +informed of new versions. Any \ix{electronic mail} message containing the words +``commutative'' or ``diagram'' automatically registers you, as does quoting +your electronic mail address when fetching it by~\ix{FTP} from +\verb/ftp.dcs.qmw.ac.uk/. + +\index{acknowledgement} +If you consider this package good enough to use, then it is good enough to +acknowledge. After all, it is academic protocol to credit prior or +simultaneous discovery of techniques related to your own, even if you were +unaware of them or did not rely on them when you made your own discovery. +Such acknowledgement is a condition of use of this package. +However this condition is waived if use amounts to no more than five diagrams, +each of which is either a square or a triangle. +This acknowledgement must, of course, be removed if the document is re-typeset +by methods which do not use this package. + +No permission was in the past given to use this package for +commercial purposes.\index{commercial use} +This includes a document whose copyright is seded by the author (for valuable +consideration or not) to another person or body which subsequently intends to +collect \ix{royalties} for its reproduction. +This applies to certain journals and conference proceedings. +Permission is now granted for its use for the production of academic +research and \ix{textbooks}, \ix{journals} and \ix{conference proceedings}, +subject to the conditions that +\begin{itemize} +\item acknowledgement be given as above, +\item an up-to-date version of the package be used for the final production, +\item and one copy of the book be sent to me on publication in lieu of royalty, + at the above address. +\end{itemize} +Use by commercial organisations is considered (for this purpose) to be +academic if the results are intended for publication in an academic forum, +concern pure research and do not relate to any particular commercial product. + +The software may not be used for any military purpose under any circumstances.% +\index{military use} + +No \ix{warranty} is given with this software. +It is supplied ``\ix{as is}'', and neither the source nor this manual +nor anything else shall be taken as a \ix{representation} +that it will perform any particular function, is suitable for any particular +purpose or is of \ix{merchantable quality}. +In executing the software, the user implicitly accepts the above conditions +and indemnifies\index{indemnification} the author, +\ix{Queen Mary and Westfield College} +and any person through whom the software was obtained, against +\ix{liability} for direct or consequential \ix{damages} +arising from the use of this software. + +{\em Whenever\/} you use computers you {\em must\/} keep at least two +back-up copies of all of your files, with one of them well away from the +machine, in case of fire or major failure. +Before sending any documents for publication or to an expendive printer +make a thorough visual check using a previewer such as \verb/xdvi/\index{xdvi} +and a low resolution printer. + +%========================================================================= +\section{Reverse compatibility}\index{compatibility} +Compatibility with past and future versions (the numbers of some of which have +been assigned {\em post facto\/}) is as follows. Note the difference between +``should'' and ``must''. + +\begin{description} +\item[Version 0:] See section~\ref{18.46}. +\item[Version 1:] Horizontal arrows made to stretch to edge of cell; 1987--9. + \begin{itemize} + \item \verb/\rTo{f}{g}/ works, but \verb/\rTo f g/ doesn't: it must + be changed to \verb/\rTo^f_g/. + \item the \verb/\mkern-20mu\rTo{f}{g}\mkern-20mu/ idiom for manual + stretching of horizontal arrows to meet objects must be + removed.\ixcmd\mkern + \item \verb/\VerticalMapHeight/ and \verb/\VerticalMapDepth/ commands + are obsolete and are ignored: they should be removed.% + \ixcmd\VerticalMapHeight\ixcmd\VerticalMapDepth + \item Three- or four-argument uses of \verb/\HorizontalMap/, + \verb/\VerticalMap/ and \verb/\DiagonalMap/ must be + changed to five-argument uses or, preferably, to + \verb/\newarrow/.% + \ixcmd\HorizontalMap\ixcmd\VerticalMap\ixcmd\DiagonalMap + \item Nested \verb/\commdiag/ commands for parallel maps must be + changed to \verb/\pile/.\ixcmd\commdiag\ixcmd\pile + \index{nested diagrams}\index{parallel arrows} + \item Parallel maps constructed by putting them in the rows or columns + before and after must be moved to the correct cell and + (in the case of horizontals) put in a \verb/\pile/. + \end{itemize} +\item[Version 2:] Horizontal arrows made to stretch to meet objects and +``\ix{superscript}'' labels introduced; versions with banners +dated September to December 1989. + \begin{itemize} + \item \verb/&\rTo\across3&/ now works more accurately than in + version~3, but should be changed to \verb/&&\rTo&&/.% + \ixcmd\across + \item {\raggedright The parameters \verb/\HorizontalMapLength/, + \verb/\VerticalMapHeight/, \verb/\VerticalMapDepth/, + \verb/\VerticalMapExtraHeight/, \verb/\VerticalMapExtraDepth/ + and \verb/\DiagonalLineSegments/ are obsolete and are ignored: + they should be removed.\par}% + \ixcmd\HorizontalMapLength\ixcmd\VerticalMapHeight + \ixcmd\VerticalMapExtraDepth\ixcmd\DiagonalLineSegments + \ixcmd\VerticalMapDepth\ixcmd\VerticalMapExtraHeight + \item The \ix{labels} on southeast and northwest \ix{diagonal arrows} + have changed their position. + \verb/^/~and \verb/_/\ixcmd{^}\ixcmd{_} previously meant + left and right respectively for diagonals; they now mean --- + more logically --- above and below; \verb/</ and \verb/>/ are + used for left and right, respectively. Unqualified labels + are positioned as they originally were: the first above and + the second below. + \item Diagonal lines are constructed differently; user-defined + \ix{diagonal arrows} should be replaced with \verb/\ruTo(2,4)/ + {\em etc.,} and explicit movement of them removed. + \item Bent lines, with \verb/\dlBent/ and \verb/\ruBentto/, currently + do not work. Instead \verb/\HmeetV/ must be + placed at the corner. Bent or half arrows will be reintroduced + later but with a different naming convention.% + \index{bent lines}\ixcmd\dlBent\ixcmd\ruBentto\ixcmd\HmeetV + \end{itemize} +\item[Version 3:] Vertical maps also made to stretch to meet objects; widely +circulated with banners dated July 1990 to April 1992. + \begin{itemize} + \item \verb/\HorizontalMap/, \verb/\VerticalMap/ and + \verb/\DiagonalMap/ should be replaced by \verb/\newarrow/ + declarations.% + \ixcmd\HorizontalMap\ixcmd\VerticalMap\ixcmd\DiagonalMap + \item Negative spacing around \ix{wide objects} (used to avoid the + stretching of the diagram which they caused) should be + removed, and the \verb/tight/ option used instead. + This is because objects are now allowed to extend into the + neighbouring columns, with a check that there is enough space. + \item Enclosing \verb/$$...$$/ or display environments should be + removed, as they prevent the new display positioning options + from working.\ixcmd{$$}\index{display options} + \item Diagonal arrows with ``\ix{compass}'' names, + particularly the ones from \verb/extra-diagonals.tex/ + \index{extra-diagonals.tex}\index{diagonal arrows} + (which must not be used any more), + should be changed to the new geometrical names. + \item The command names \verb/\lt/ and \verb/\gt/ (for $\lessthan$ and + $\greaterthan$) have been removed, at the request of a user + who considered these to be unreasonable names for internal + commands.\ixcmd\lt\ixcmd\gt\ixcmd{>}\ixcmd{<}% + \ixcmd\greaterthan\ixcmd\lessthan + \item The arrow commands with names like \verb/\rArr/ and \verb/\rTo/ + now all use the default \ix{arrowheads}; the original behaviour + (\verb/\rArr/ used \verb/LaTeX/ and \verb/\rTo/ used \verb/vee/) + may be restored by changing a switch \verb/\iffalse/ in the + final section of the source.\ixcmd\rArr\index{vee arrowheads}% + \ixprotect{\LaTeX\ arrowheads} + \end{itemize} +\item[Version 4:] Advertised in September 1992. + \begin{itemize} + \item The default arrowhead has been changed from \verb/vee/ to + \verb/LaTeX/ to ensure consistency if \verb/PostScript/ + is not used.\index{arrowheads} + \item Explicit movement of \ix{diagonal arrows} vertically using + \verb/\raise/, \verb/\lower/ or \verb/\raisebox/ + \ixcmd\raise\ixcmd\lower\ixcmd\raisebox + or horizontally by spacing commands or otherwise + will not work for the diagonals which are adjusted to meet + their endpoints.\index{stretch} + For the time being use either of the options + \verb/noPS/ or \verb/fixed/\index{PostScript}\index{fixed} + to suppress adjustment. + A~new option \verb/crab/\index{crab} will be introduced + shortly to allow \ix{sideways movement of arrows}. + \end{itemize} +\item[Future:] The following are high on the agenda: + \begin{itemize} + \item Placing of labels at the head and tail of arrows. + \item Curved arrows (\verb/PostScript/ only). + \item Sideways movement of arrows. + \item An~alternative way of specifying the positions of arrows, + namely at the tail with signed relative co-ordinates for + the head, to allow emulation of + \person{Kris}{Rose}'s \XYpic\ixprotect\XYpic\ and + \person{Michael}{Spivak}'s \LAMSTeX\ixprotect\LAMSTeX. + \item Shifting objects, by specifying the left or right width. + \item Option to rotate labels on diagonals or leave them horizontal. + \item Application to electronic circuit diagrams. + \end{itemize} +\end{description} + +Suggestions for improvements and further applications ({\em e.g.\/} proof nets, +Petri nets and circuit diagrams) are welcome. + +%========================================================================== + +\section{Availability}\label{get} + + +The diagram package is currently available as a single +112kb\footnote{Without comments; the development version is about 300kb.} +printable \TeX\ source file which is compatible with both \LaTeX\ +and {\tt plain} \TeX. It loads the \LaTeX\ {\tt line10} font as \verb/\tenln/ +(its \LaTeX\ name) and also defines some (exotic) arrow commands in terms +the AMS symbols, but if these are to be used then the + \ifx\usepackage\undefined + file \verb/mssymb/ + \else + package \verb/amssymb/ + \fi +must be loaded separately. + +\index{anonymous FTP} +It~is easiest to get this package by anonymous \ix{FTP}. +This stands for ``\ix{file transfer protocol}''; +it is a way in which you can log on interactively to my computer and fetch +(some of) my files. A~very large amount of software is now freely available +by this method, so it is well worth putting pressure on your system +administrator to get your machines connected. + +The authoritative version of the package may be found at the FTP address +\begin{quote} +{\tt ftp://ftp.dcs.qmw.ac.uk/pub/tex/contrib/pt/diagrams} +\end{quote} +It may also be obtained from the \ix{Comprehensive \TeX\ Archive Network} +(\ix{CTAN)} at any of the sites +\begin{quote} + \begin{tabular}{llll} + ftp.adfa.oz.au &Australia& /pub/tex/ctan\\ + ftp.cs.rmit.edu.au &Australia& /tex-archive\\ + ftp.muni.cz &Czech Republic& /pub/tex/CTAN\\ + ftp.tex.ac.uk &England& /tex-archive\\% (/pub/tex /pub/archive)\\ + ftp.loria.fr &France& /pub/unix/tex/ctan\\ + ftp.uni-bielefeld.de &Germany& /pub/tex\\ + ftp.uni-stuttgart.de &Germany& /tex-archive (/pub/tex)\\ + ftp.dante.de &Germany& /tex-archive\\% (/pub/tex /pub/archive)\\ + ftp.center.osaka-u.ac.jp &Japan& /CTAN\\ + wuarchive.wustl.edu &Missouri, USA& /packages/TeX\\ + ftp.cs.ruu.nl &Netherlands& /pub/tex-archive\\ + ftp.duke.edu &North Carolina, USA& /tex-archive\\ + sunsite.unc.edu &North Carolina, USA& /pub/packages/TeX\\ + ftpserver.nus.sg &Singapore& /pub/zi/TeX\\ + nic.switch.ch &Switzerland& /mirror/tex\\ + dongpo.math.ncu.edu.tw &Taiwan& /tex-archive\\ + ftp.uu.net &Virginia, USA& /pub/text-processing/TeX\\ + ftp.shsu.edu &Texas, USA& /tex-archive\\% (/pub/tex /pub/archive)\\ + \end{tabular} +\end{quote} +where the root of the archive is the given directory and my package is +\begin{quote} + {\tt macros/generic/diagrams/Taylor/diagrams.tex} +\end{quote} +relative to this. + +The ``\verb/archie/''\index{archie} utility is extremely useful as a way +of locating software and other information on the \ix{Internet}. +You just give it (part of) the name of the file you want +({\em e.g.}~``diagram'') and it will tell you where files of that name +are located in numerous public \ix{FTP} archives around the world. +Beware, however, that many of them are just ``\ix{magpies' nests}'' --- +they collect things from other places without verifying their +authenticity or keeping them up to date.\index{anonymous FTP} + +If you are unable to use FTP it is possible to get the package +(and indeed anything you can get by ftp) by electronic mail. +I~do not recommend this method, because it is susceptible to +corruption, and you have to concatenate the files and remove the +mail headers. Send the following message to +\verb/<ftpmail@doc.ic.ac.uk>/: +\begin{quote} +\begin{verbatim} +open ftp.dcs.qmw.ac.uk +cd pub/tex/pt/diagrams +get diagrams-V4-news +get diagrams.tex +get diagrams-manual.tex +quit +\end{verbatim} +\end{quote} +You will get an acknowledgement message first, followed by the files, +and finally a job log file. +The files may be split up into several messages. +%in which case the \verb/Subject:/ +%lines will begin \verb/[part /$n$\verb/ of /$m$\verb/]/. +% +\iffalse Other availability information will be added later, after checking. +Also available from +archive.cs.ruu.nl [131.211.80.17] /pub/TEX/DIAGRAM/diagrams.tex +% +Other \TeX\ FTP sources: +e-math.ams.com [130.44.1.100] for AMS symbols and AMS-\LaTeX. +ftp.cs.umb.edu [192.12.26.23] for Karl Berry's web-to-C \TeX\ port. +\fi + +\makeatletter\pt@input{manual.ind}{}{} +%============================================================================ +\end{document} + +% Ideas for future editions of this manual: + +% Use bezier.sty and the origin option in a picture environment to draw +% braids on top of a diagram - Robert Seely had an example. + +% I haven't composed the example yet. +%\newif\ifHaveBezier\HaveBeziertrue +%\pt@input{bezier.sty}% +%{^^JYou don't have bezier.sty. That's a pity, because I wanted to show you an +%^^Jexample of drawing curved lines on top of a diagram. We'll do without it.}% +%\HaveBezierfalse + +% Use \matrix or array environment to put long objects on two lines within +% a diagram. LFPP.tex has a suitable example. + +% Commutative diagram of posets. Example in my thesis (fig 2.2.13) (5.2.2) + +% new sections: +% other TeX macros of mine +% resource usage +% list of errors +% how to draw {\em nice\/} diagrams + +% FTP instructions
\ No newline at end of file diff --git a/macros/generic/diagrams/taylor/msg1992.html b/macros/generic/diagrams/taylor/msg1992.html new file mode 100644 index 0000000000..14158b7260 --- /dev/null +++ b/macros/generic/diagrams/taylor/msg1992.html @@ -0,0 +1,236 @@ + + + + + + + + +<title> Commutative Diagrams in TeX</title> + +<h1 align="center">Commutative Diagrams in TeX </h1> + +<h3 align="center">Paul Taylor </h3> + +<h3 align="center">September 1992 </h3> + + + + +<div class="p"><!----></div> + +<div class="p"><!----></div> + +<div class="p"><!----></div> + +<div class="p"><!----></div> + +<div class="p"><!----></div> + +<div class="p"><!----></div> + +<div class="p"><!----></div> + +<div class="p"><!----></div> + +<div class="p"><!----></div> + +<div class="p"><!----></div> + +<div class="p"><!----></div> + +<div class="p"><!----></div> + +<div class="p"><!----></div> + + +<div class="p"><!----></div> + + + + + + +<div class="p"><!----></div> + +<div class="p"><!----></div> + + + +<div class="p"><!----></div> + + + +<div class="p"><!----></div> + + +<div class="p"><!----></div> + + + +<div class="p"><!----></div> + + + + + + +<div class="p"><!----></div> + + +<div class="p"><!----></div> + + +<h2>Message sent to registered users in September 1992</h2> + +<div class="p"><!----></div> +This message brings news of the development of my <span class="roman">T</span><sub><span class="roman">E</span></sub><span class="roman">X</span> package for +drawing "commutative" diagrams, which is now widely used in the +category theory and theoretical computer science communities. It is +being sent directly to all of the users I know of (who have requested +it by electronic mail or FTP from me, or asked questions about it), +but as I know the package has been passed on, I would be grateful if +you would <em>copy this message to anyone to whom you have given + the package itself.</em> + +<div class="p"><!----></div> +The package was originally advertised on the "types" and +"categories" electronic mailing lists in July 1990. In the following +eighteen months some fixing of bugs took place, but there was little +substantial change. + +<div class="p"><!----></div> +Since April 1992, I have re-written most of the code, largely with a +view to improving the geometrical layout of the diagrams. Before +completing this work and calling it version 4, I would like some +feedback from users. + +<div class="p"><!----></div> +One of the areas which I have neglected in the past (largely because +<span class="roman">T</span><sub><span class="roman">E</span></sub><span class="roman">X</span> makes it so difficult) is diagonal arrows. The code for drawing +these using <span class="roman">L</span><sup><span class="roman">A</span></sup><span class="roman">T</span><sub><span class="roman">E</span></sub><span class="roman">X</span> line segments has been re-written: now the closest +available slope is chosen automatically and the commands have names +similar to the horizontals and verticals. + +<div class="p"><!----></div> +However to do a better job of diagonals (and in future to support +curved lines) some extension to <span class="roman">T</span><sub><span class="roman">E</span></sub><span class="roman">X</span> is needed. Being extensions they +are necessarily not standard. Three possibilities are: + +<ul> +<li> additional fonts (as, for example, used by Spivak's Lamstex). + However my experience of design-size fonts and linear logic symbols + suggests that for users without expert knowledge or control of their + local <span class="roman">T</span><sub><span class="roman">E</span></sub><span class="roman">X</span> systems this is more trouble than it's worth. +<div class="p"><!----></div> +</li> + +<li> PostScript is, I believe, now almost universally used as the + language in which <span class="roman">T</span><sub><span class="roman">E</span></sub><span class="roman">X</span> documents are sent to a printer. PS commands + can be embedded in DVI files and incorporated in the PS translation + without extra system or user files or any user intervention. This is + to some extent dependent on which DVI<font face="symbol">®</font +>PS translator is used. In + the new version this is exploited in an option to implement + diagonals by rotating horizontals, which works with Tomas Rokicki's + "dvips". +<div class="p"><!----></div> +</li> + +<li> TPIC is a graphics extension of <span class="roman">T</span><sub><span class="roman">E</span></sub><span class="roman">X</span> which uses a simpler set + of embedded commands. These can be used to draw diagonal lines and + curves but not to perform rotations; they are, however, understood + by Vojta's "xdvi" as well. Another option in the new version uses + these to draw diagonal lines. +<div class="p"><!----></div> +</li> +</ul> +Besides diagonals, the code for adjusting horizontal and vertical +arrows has been completely rewritten and does a much better job of the +geometry. Many of the problems with alignment, positioning and gaps +have been fixed automatically, and greater control is given to the +user to adjust those which cannot be. There are also several new +options for the placement of the finished diagram on the page. + +<div class="p"><!----></div> +Arrow commands are now declared in a much simpler way. The declaration + +<pre> + \newarrow{CrossedInto}{hook}-+-> + +</pre> +is now all that is needed to define the example <tt>\rCrossedInto</tt> +in the manual, along with the corresponding left, down, up and +diagonal commands. Another option makes a consistent selection of +arrowheads for all arrows, from a choice of vee, LaTeX, curlyvee, +triangle and blacktriangle. + +<div class="p"><!----></div> +So much for selling you the new version. The reason for mailing you +and asking for comments before completing what I intend to do for +version 4 is that I want to get feedback on the following questions: + +<div class="p"><!----></div> + +<ul> +<li> Can you use FTP (file transfer protocol)? This is the easiest + method of distribution for me and for you, and there is now a huge + volume of public domain software available by this method. My + archive is called <tt>ftp.dcs.qmw.ac.uk</tt> + and the diagrams package is in the directory /pub/tex/contrib/pt/diagrams. + Please try to fetch the new version and manual by this method. +<div class="p"><!----></div> +</li> + +<li> If you can't use FTP, and your electronic mail passes via + non-ASCII machines (particularly BITNET), what characters tend to + get corrupted? The new version uses a restricted character set to + avoid this problem. +<div class="p"><!----></div> +</li> + +<li> Do you have available for printing final copy a printer which + understands Adobe PostScript, for example an Apple or Sun + laserwriter? Who is the author of the DVI-> PS translation program + you use? Please fetch the new version, try the PostScript option and + tell me if you have any difficulty printing. (You may have to change + the <tt>\verbatim@ps@special</tt> macro if you don't use Rokicki's + dvips: if so, please send me details.) You can preview with a PS + previewer such as PageView under OpenWindows or + GhostView/GhostScript under Xwindows. +<div class="p"><!----></div> +</li> + +<li> Do your DVI translators and previewers understand TPIC + <tt>\special</tt>s (as used in eepic.sty)? Please try the TPIC + option. I would like to know whether it is worth putting effort into + PostScript, TPIC or some other method. +<div class="p"><!----></div> +</li> + +<li> Have you defined your own arrow commands using + <tt>\HorizontalMap</tt>, <tt>\VerticalMap</tt> or <tt>\DiagonalMap</tt>? + Please use "grep alMap *.tex *.sty" or some similar command to + find out, and tell me if you have used any components other than + those in the source of version 3. It is in your interests to do + this, because <tt>\newarrow</tt> defines arrow commands in a + different way. +<div class="p"><!----></div> +</li> + +<li> Please tell me if you have any difficulty adapting to the new + version, or any general comments about doing so which might be of + benefit to other users. +<div class="p"><!----></div> +</li> + +<li> Other comments: have you used other packages for drawing + diagrams? Do you have applications for my package other than the + categorical diagrams for which it was designed? What do you see as + the major limitations of the package? What persuaded you to use it, + or not to use it? +<div class="p"><!----></div> +</li> +</ul> + +<div class="p"><!----></div> |