% mangletex (11 May 1992) run at 18:14 GMT Friday 11 March 1994 \message{} %%======================================================================% %% TeX macros for drawing rectangular category-theory diagrams % %% % %% Paul Taylor % %% % %% Department of Computing, Imperial College, London SW7 2BZ % %% +44 71 589 5111 x 5057 pt@doc.ic.ac.uk % %% % %% For user documentation, see "diagram-doc.tex" % %% PLEASE READ THE MANUAL! % %% % %% Authoritative version: /tex/contrib/Taylor/tex/diagrams.tex % %% by anonymous ftp from: theory.doc.ic.ac.uk (146.169.2.27) % %% % %% 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, as% %% does fetching it directly by ftp (quoting your email address). % %% % %% THIS RELEASE: % %% Supports \usepackage[option-list]{diagrams} in LaTeX2e. % %% As I need better diagonals and curved arrows for my book, % %% they will get done eventually! Paul % %% % %% CONTENTS: % %% (O) corruption-sensitive hacks (to approx line 300) % %% Arrow components & commands - starts approx line 990 % %% (21) auxillary macros for adjustment of components % %% (22) bits of arrows (\rhvee etc) % %% (23) arrow commands (\rTo etc) % %% (24) miscellaneous % %% Apart from these four sections, the rest is intended to be totally % %% meaningless in the undocumented version, which is approximately 1580 % %% 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.29 Released 11 March 1993 % %% Corrected error message when insertion made outside diagram. % %% Also when label missing after <>^_~. % %% Switch to centredisplay if flushleft doesn't fit on the page. % %% Added Y head & tail from St. Mary Rd. font (not yet adjusted). % %% First attempt to support LaTeX2e \usepackage options. % %% Fixed bug (missing \endgroup and no arrow) with \rTo[opt][opt]. % %% Set \mathsurround=0pt for everything within our code. % %% 3.28 Released 30 November 1993 % %% Fixed bug causing diagram to disappear in vert mode in LaTeX % %% Peter Freyd's \puncture symbol provided. % %% 3.27 Released 26 March 1993 % %% Fixed bug which forced LaTeX slopes on PostScript diagonals. % %% 3.26 Released 11 February 1993 % %% Added 1pt space between label (strut) and horizontal shaft. % %% 3.25 Released 30 January 1993 % %% Resolution-dependent fudge (dpi) applied to horizontal arrows. % %% LaTeX heads made default (unless \tenln undefined, when vee) % %% Also cures zero-length shafts of arrows in text in footnotes. % %% Made \labelstyle and \objectstyle available as options. % %% New display options give warning if used within maths. % %% Catch missing bracket at end of label and misplaced (but not % %% missing) bracket at end of \pile. % %% Small adjustments on some heads and tails. hbox option. % %% Circle, cross, little vee, little black triangle heads. % %% Fixed spaces before & after diagram in display and textflow. % %% Catch em-braced arrow commands. % %% Adjusted hook tails yet again (some theory behind horizontals!).% %% Default \MapBreadth as TeXbook p447; pixel round on input. % %% First-use warning when defaulted diagonal components are used. % %% Warning if diagonals used & columns stretched significantly. % %% Warning if diagonals with repeating components are too short. % %% Added \@use@TPIC@false to diagonal dot repeater. % %% Allowed curly instead of square brackets in \diagramstyle. % %% Also \diagramsstyle. % %% AMSTEX emulation - works at least when amstex not present. % %% Position horizontal labels using strut rather than \baselineskip% %% Removed \outer from \diagramstyle. % %% Lots of adjustments to bits of arrows (drives me mad!). % %% 3.24 Release 7 Sept 1992 advertised to users. % %% \lq and \rq (instead of ` and ') for catcodes and octals. % %% Made it consistent with texinfo - for loading, at least. % %% PostScript option introduced: % %% LaTeX, vee, curlyvee, triangle & blacktriangle heads & tails % %% TPIC option introduced as an alternative to \LaTeX@make@line. % %% Fixed vmiddle positioning of one-row diagrams. % %% Fixed catastrophic error of empty first cell in nested diagram % %% New reformatting program. % %% Optional arguments on \diagram, maps and \diagramstyle. % %% Made \PileSpacing between verticals local. % %% Piles vertically centered ignoring outer labels. % %% Move labels away from wide vertical arrow middles. % %% 3.20 (29.4.92) early release of version 4 % %% Ensure \enddiagram occurs only at correct {}-level % %% Blank line and \par within diagram =\enddiagram. % %% Clashing (horizontal) arrows detected at first pass % %% Postscript arrows (basic code). % %% Implemented \newarrow \newarrowhead etc. % %% Corruption-sensitive characters avoided wherever possible. % %% Reloading prevented. % %% Horizontal arrows outside diagram can stretch by wordspacing. % %% Changed \lt and \gt to \lessthan and \greaterthan for Roy Crole.% %% Added < and > for labels on left and right of arrow; % %% also [] for optional arguments on arrows (not used yet); % %% 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 % %%======================================================================% %%======================================================================% %% % %% (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: %% \=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\rq53% %% texinfo @+ is @outer@active }\catcode\lq\@=11 \catcode\lq\#=6 \catcode\lq\<=12 \catcode\lq\>=12 \catcode \rq53=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 \def\cD@XI#1{\special{ps:#1}}%% %% %% 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\verbatim@ps@special#1{\special{dvitps: Literal "#1"}}%% %% %% dvitops (James Clark) %%\def\verbatim@ps@special#1{\special{dvitops: inline #1}}%% \count@=\year\multiply\count@12 \advance\count@\month%% \ifnum\count@>23943 %% (March 1995) It's changing very fast at the moment! \message{***********************************************************}%%ascii \message{! THIS IS AN EXPERIMENTAL VERSION OF COMMUTATIVE DIAGRAMS *}%% \message{! which expired in March 1995 and is time-bombed for June *}%% \message{! You may obtain an up to date version of this package by *}%%ascii \message{! "anonymous FTP" from theory.doc.ic.ac.uk (146.169.2.27) *}%% \message{***********************************************************}%%ascii \fi \def\cD@nG{\global\let}\def\cD@RH{\outer\def} %% safe names for braces, tab (&) and maths ($), as commands and for messages {\escapechar\m@ne\xdef\cD@gA{\string\{}\xdef\cD@QC{\string\}}%% %% %% three ASCII ampersands (ands) (&&&) appear on the next line \catcode\lq\&=4 \cD@nG\cD@F=&\xdef\cD@XA{\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@nG\cD@dA=$\cD@nG\cD@WC=$%%ascii three dollars \xdef\cD@PC{\string\$}\gdef\cD@uD{$$}%%ascii three dollars %% %% two ASCII underlines (__) appear on the next line. \catcode\lq\_=8 \cD@nG\cD@pH=_%%ascii two underlines %% %% six ASCII carets (^^^^^^) appear on the next three lines. \obeylines\catcode\lq\^=7 \cD@nG\cD@qH=^%%ascii two carets \ifnum\newlinechar=10 \gdef\cD@IE{^^J}%%ascii two carets \else\ifnum\newlinechar=13 \gdef\cD@IE{^^M}%%ascii two carets \else\cD@nG\cD@IE\space\expandafter\message{! input error: \noexpand \newlinechar\space is ASCII \the\newlinechar, not LF=10 or CR=13.}%% \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\fi \newif\if@ignore \def\cd@shouldnt{\cD@WB{* THIS 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@rC#1{\cD@D#1,],}%%ascii square brackets \def\cD@fA{[}\def\cD@YC{]}\def\commdiag#1{{\let\enddiagram\relax\diagram[]#1% \enddiagram}} %% ASCII open square bracket occurs on next line \def\cD@E{{\ifx\cD@NE[\aftergroup\get@square@arg\aftergroup\cD@z\else \aftergroup\cD@x\fi}}%% \def\cD@u#1#2{\def\cD@z{#1}\def\cD@x{#2}\futurelet\cD@NE\cD@E} %% ASCII vertical bar (|) occurs on the next line \def\cD@jH{|} \def\cD@WG{%% arguments to maps inside diagrams \tokcase\cD@TC:\cD@K\break@args;\catcase\cD@qH:\cD@iH;\catcase\cD@pH:\cD@wG;% \tokcase{~}:\cD@OI;%%ascii tilde \tokcase<:\cD@uG;%%ascii less-than \tokcase>:\right@label;%%ascii greater-than \tokcase(:\cD@YG;%%)%ascii open round bracket \tokcase[:\optional@;%%]%ascii open square bracket \catcase\space:\eat@space;\catcase\bgroup:\positional@;\default:\cD@L \break@args;\endswitch} \def\switch@arg{%% arguments to horizontal maps outside diagrams \catcase\cD@qH:\cD@iH;\catcase\cD@pH:\cD@wG;\tokcase[:\optional@;% %%]%ascii open square bracket \catcase\space:\eat@space;\catcase\bgroup:\positional@;\tokcase{~}:\cD@OI;% %%ascii tilde (questionable!) \default:\cD@K\break@args;\endswitch} %% That's as much as you get to read "in clear" - the rest is private! \def\cD@BB#1#2{\def#1{\cD@kB{#2\cD@jC}\cD@nG#1\relax}}\let\cD@ZF\relax\ifx \protect\undefined\let\protect\relax\fi\def\cD@jD#1\repeat{\def\cD@hA{#1}% \cD@WD}\def\cD@WD{\cD@hA\relax\expandafter\cD@WD\fi}\def\cD@hD#1\repeat{\def \cD@iA{#1}\cD@XD}\def\cD@XD{\cD@iA\relax\expandafter\cD@XD\fi}\def\cD@iD#1% \repeat{\def\cD@jA{#1}\cD@YD}\def\cD@YD{\cD@jA\relax\expandafter\cD@YD\fi}% \def\cD@HE#1#2#3{\def#2{\let#1\iftrue}\def#3{\let#1\iffalse}#3}\if y% \diagram@help@messages\def\cD@GE#1#2{\csname newtoks\endcsname#1#1=% \expandafter{\csname#2\endcsname}}\else\csname newtoks\endcsname\cD@PI\cD@PI{% See the manual}\def\cD@GE#1#2{\let#1\cD@PI}\fi\chardef\cD@dD=1 \chardef\cD@FF =2 \chardef\cD@TE=5 \chardef\cD@iE=6 \chardef\cD@hE=7 \chardef\cD@FC=9 \dimendef\cD@DF=2 \dimendef\cD@bD=3 \dimendef\cD@eD=4 \dimendef\cD@GF=5 \dimendef\cD@gH=6 \dimendef\cD@KF=8 \dimendef\cD@JF=9 \skipdef\cD@wB=1 \skipdef\cD@VD=2 \skipdef\cD@UD=3 \skipdef\cD@CD=4 \skipdef\cD@eF=5 \skipdef \cD@EF=6 \skipdef\cD@cD=7 \skipdef\cD@IF=8 \skipdef\cD@HF=9 \countdef\cD@AC=9 \countdef\cD@gC=8 \countdef\cD@MA=7 \def\sdef#1#2{\def#1{#2}}\def\cD@UA#1{% \expandafter\aftergroup\csname#1\endcsname}\def\cD@CC#1{\expandafter\def \csname#1\endcsname}\def\cD@nC#1{\expandafter\gdef\csname#1\endcsname}\def \cD@gI#1{\expandafter\edef\csname#1\endcsname}\def\cD@fD#1#2{\expandafter\let \csname#1\expandafter\endcsname\csname#2\endcsname}\def\cD@uC#1#2{% \expandafter\cD@nG\csname#1\expandafter\endcsname\csname#2\endcsname}\def \cD@bF#1{\csname#1\endcsname}\def\cD@dH#1{\expandafter\show\csname#1% \endcsname}\def\cD@eH#1{\expandafter\showthe\csname#1\endcsname}\def\cD@cH#1{% \expandafter\showbox\csname#1\endcsname}\def\cD@KB{Commutative Diagram}\edef \cD@fE{\string\par}\edef\cD@IC{\string\diagram}\edef\cD@UC{\string\enddiagram }\edef\cD@xB{\string\\}\def\cD@sH{LaTeX}\def\cD@RG{{\ifnum0=\lq}\fi}\def \cD@jG{\ifnum0=\lq{\fi}} \def\catcase#1:{\ifcat\noexpand\cD@NE#1\cD@ZF\expandafter\cD@LC\else \expandafter\cD@TF\fi}\def\tokcase#1:{\ifx\cD@NE#1\cD@ZF\expandafter\cD@LC \else\expandafter\cD@TF\fi}\def\cD@LC#1;#2\endswitch{#1}\def\cD@TF#1;{}\let \endswitch\relax\def\default:#1;#2\endswitch{#1}\def\cD@g{\cD@dA{\cdot}{-}{% \cdot}\;\;{-}\cD@WC}\cD@CC{rt:dah}{\rlap{\cD@g}}\ifx\at@\undefined\def\at@{@}% \fi\edef\cD@vH{\cD@gA pt\cD@QC}\cD@CC{\cD@vH>}#1>#2>{\cD@BI\rTo\sp{#1}\sb{#2}% \cD@BI}\cD@CC{\cD@vH<}#1<#2<{\cD@BI\lTo\sp{#1}\sb{#2}\cD@BI}\cD@CC{\cD@vH)}#1% )#2){\cD@BI\rTo\sp{#1}\sb{#2}\cD@BI}%%ascii round \cD@CC{\cD@vH(}#1(#2({\cD@BI\lTo\sp{#1}\sb{#2}\cD@BI}%%ascii brack \def\cD@uH{\def\endCD{\enddiagram}\cD@CC{\cD@vH A}##1A##2A{\uTo<{##1}>{##2}% \cD@BI\cD@BI}\cD@CC{\cD@vH V}##1V##2V{\dTo<{##1}>{##2}\cD@BI\cD@BI}\cD@CC{% \cD@vH=}{\cD@BI\hEq\cD@BI}\cD@CC{\cD@vH\cD@jH}{\vEq\cD@BI\cD@BI}\cD@CC{\cD@vH \string\vert}{\vEq\cD@BI\cD@BI}\cD@CC{\cD@vH.}{\cD@BI\cD@BI}\let\cD@BI\cD@F}% \def\cD@FI{\let\tmp\cD@GI\ifcat A\noexpand\cD@ME\else\ifcat=\noexpand\cD@ME \else\ifcat\relax\noexpand\cD@ME\else\let\tmp\at@\fi\fi\fi\tmp}\def\cD@GI#1{% \cD@fD{tmp}{\cD@vH\string#1}\ifx\tmp\relax\def\tmp{\at@#1}\fi\tmp}\def\cD@BI{% }\begingroup\aftergroup\def\aftergroup\cD@xH\aftergroup{\aftergroup\def \catcode\lq\@\active\aftergroup @\endgroup{\futurelet\cD@ME\cD@FI}}\newcount \cD@LB\newcount\cD@MB\newcount\cD@NB\newcount\cD@OB\newdimen\cD@tA\newdimen \cD@uA\cD@HE\cD@GD\cD@L\cD@K\cD@HE\cD@HD\cD@N\cD@M\newdimen\cD@wA\newdimen \cD@xA\newcount\cD@PB\newcount\cD@VG\newdimen\cD@vA\newbox\cD@qA\cD@HE\cD@LD \cD@V\cD@U\newcount\cD@NH\newcount\cD@bG\def\cD@PG#1#2{\ifdim#1<#2\relax#1=#2% \relax\fi}\def\cD@QG#1#2{\ifdim#1>#2\relax#1=#2\relax\fi}\newdimen\cD@SH \cD@SH=1sp \newdimen\cD@nH\cD@nH\z@\def\cD@TI{\ifdim\cD@nH=1em\else\cD@rH\fi}% \def\cD@rH{\cD@nH1em\cD@cI\setbox0=\vbox{\everypar{}\mathsurround\z@\noindent \cD@dA\null\penalty-9993\null\cD@WC\null\endgraf\setbox0=\lastbox\unskip \unpenalty\setbox1=\lastbox\global\setbox\cD@rD=\hbox{\unhbox0\unskip\unskip \unpenalty\setbox0=\lastbox}\global\setbox\cD@tD=\hbox{\unhbox1\unskip \unpenalty\setbox1=\lastbox}}}\newdimen\cD@kH\cD@kH=1true in \divide\cD@kH300 \def\cD@RI#1{\multiply#1\tw@\advance#1\ifnum#1<\z@-\else+\fi\cD@kH\divide#1% \tw@\divide#1\cD@kH\multiply#1\cD@kH}\def\MapBreadth{\afterassignment\cD@aI \cD@NI}\newdimen\cD@NI\newdimen\cD@bI\def\cD@aI{\cD@bI\cD@NI\cD@PG\cD@kH{4% \cD@SH}\cD@QG\cD@kH\p@\cD@RI\cD@bI\ifdim\cD@NI>\z@\cD@PG\cD@bI\cD@kH\fi\cD@TI }\def\cD@iI#1{\cD@qC\count@\cD@kH#1\ifnum\count@>\z@\divide\cD@kH\count@\fi \cD@aI}\def\cD@QF{\cD@KF\axisheight\advance\cD@KF-.5\cD@bI\cD@RI\cD@KF\cD@JF-% \cD@KF\advance\cD@KF\cD@NI}\def\horizhtdp{height\cD@KF depth\cD@JF}\def \axisheight{\fontdimen22\the\textfont\tw@}\newdimen\PileSpacing\newdimen \cD@HB\cD@HB\z@\newdimen\cD@IB\newdimen\cD@fB\def\CellSize{\afterassignment \cD@oB\DiagramCellHeight}\newdimen\DiagramCellHeight\DiagramCellHeight-% \maxdimen\newdimen\DiagramCellWidth\DiagramCellWidth-\maxdimen\def\cD@oB{% \DiagramCellWidth\DiagramCellHeight}\def\cD@nI{3em}\newdimen\MapShortFall\def \MapsAbut{\MapShortFall\z@\cD@OH\z@\cD@PH\z@}\newdimen\cD@EB\cD@EB\z@\def \newarrowhead{\cD@EH h\cD@mD\cD@oD>}\def\newarrowtail{\cD@EH t\cD@mD\cD@oD>}% \def\newarrowmiddle{\cD@EH m\cD@mD\cD@oD{}}\def\newarrowfiller{\cD@EH f\cD@DD \cD@gF-}\def\cD@EH#1#2#3#4#5#6#7#8#9{\cD@CC{r#1:#5}{#2{#6}}\cD@CC{l#1:#5}{#2{% #7}}\cD@CC{d#1:#5}{#3{#8}}\cD@CC{u#1:#5}{#3{#9}}\cD@gI{-#1:#5}{\expandafter \noexpand\csname-#1:#4\endcsname\noexpand\cD@CI}\cD@gI{+#1:#5}{\expandafter \noexpand\csname+#1:#4\endcsname\noexpand\cD@CI}}\cD@BB\cD@CI{\cD@sH\space diagonals are used unless PostScript is set}\def\defaultarrowhead#1{\edef \cD@VI{#1}\cD@cI}\def\cD@cI{\cD@YH\cD@VI<>ht\cD@YH\cD@VI<>th}\def\cD@YH#1#2#3% #4#5{\cD@RF{r#4}{#3}{l#5}{#2}{r#4:#1}\cD@RF{r#5}{#2}{l#4}{#3}{l#4:#1}\cD@RF{d% #4}{#3}{u#5}{#2}{d#4:#1}\cD@RF{d#5}{#2}{u#4}{#3}{u#4:#1}}\def\cD@RF#1#2#3#4#5% {\begingroup\aftergroup\cD@DA\cD@UA{#1+:#2}\cD@UA{#1:#2}\cD@UA{#3:#4}\cD@UA{#% 5}\endgroup}\def\cD@DA#1#2#3#4{\csname newbox\endcsname#1\def#2{\copy#1}\def#% 3{\copy#1}\setbox#1=\box\voidb@x}\def\cD@VI{}\cD@cI\def\cD@DA#1#2#3#4{\setbox #1=#4}\ifx\tenln\nullfont\def\cD@VI{vee}\else\let\cD@VI\cD@sH\fi\def\cD@xG#1#% 2#3{\begingroup\aftergroup\cD@zF\cD@UA{#1#2:#3#3}\cD@UA{#1#2:#3}\endgroup}% \def\cD@zF#1#2{\def#1{\hbox{\rlap{#2}\kern.4\cD@nH#2}}}\cD@xG rh> \cD@xG lh> \cD@xG rt> \cD@xG lt> \cD@xG rh< \cD@xG lh< \cD@xG rt< \cD@xG lt< \def\cD@zF#% 1#2{\def#1{\vbox{\vbox to\z@{#2\vss}\nointerlineskip\kern.4\cD@nH#2}}}\cD@xG dh> \cD@xG uh> \cD@xG dt> \cD@xG ut> \cD@xG dh< \cD@xG uh< \cD@xG dt< \cD@xG ut< \def\cD@mD#1{\hbox{\mathsurround\z@\offinterlineskip\cD@dA\mkern-1.5mu{#1% }\mkern-1.5mu\cD@WC}}\def\cD@oD#1{\hbox to\cD@NI{\setbox0=\hbox{% \offinterlineskip\mathsurround\z@\cD@dA{#1}\cD@WC}\dimen0.5\wd0\advance\dimen 0-.5\cD@bI\cD@RI{\dimen0}\kern-\dimen0\unhbox0\hss}}\def\cD@kD#1{\hbox{% \mathsurround\z@\cD@dA{#1}\cD@WC}}\def\cD@DD#1{\hbox{\kern-.15\cD@nH\cD@dA{#1% }\cD@WC\kern-.15\cD@nH}}\def\cD@gF#1{\vbox{\offinterlineskip\kern-.2ex\cD@oD{% #1}\kern-.2ex}}\def\@fillh{\xleaders\vrule\horizhtdp}\def\@fillv{\xleaders \hrule width\cD@NI}\cD@fD{rf:-}{@fillh}\cD@fD{lf:-}{@fillh}\cD@fD{df:-}{% @fillv}\cD@fD{uf:-}{@fillv}\cD@fD{rh:}{null}\cD@fD{rm:}{null}\cD@fD{rt:}{null% }\cD@fD{lh:}{null}\cD@fD{lm:}{null}\cD@fD{lt:}{null}\cD@fD{dh:}{null}\cD@fD{% dm:}{null}\cD@fD{dt:}{null}\cD@fD{uh:}{null}\cD@fD{um:}{null}\cD@fD{ut:}{null% }\cD@fD{+h:}{null}\cD@fD{+m:}{null}\cD@fD{+t:}{null}\cD@fD{-h:}{null}\cD@fD{-% m:}{null}\cD@fD{-t:}{null}\cD@CC{rf:}{\hbox{\kern1pt}}\cD@CC{lf:}{\hbox{\kern 1pt}}\cD@CC{df:}{\vbox{\kern1pt}}\cD@CC{uf:}{\vbox{\kern1pt}}\cD@CC{+f:}{% \hbox{\kern1pt}}\cD@CC{-f:}{\vbox{\kern1pt}}\edef\cD@CE{\string\newarrow}\def \newarrow#1#2#3#4#5#6{\begingroup\edef\@name{#1}\edef\cD@EA{#2}\edef\cD@o{#3}% \edef\cD@v{#4}\edef\cD@p{#5}\edef\cD@t{#6}\let\cD@s\cD@GH\let\cD@FG\cD@LH\let \cD@HG\cD@KH\ifx\cD@EA\cD@o\let\cD@EA\empty\fi\ifx\cD@t\cD@p\let\cD@t\empty \fi\def\cD@AG{r}\def\cD@xF{l}\def\cD@uF{d}\def\cD@CG{u}\def\cD@@G{+}\def \cD@yF{-}\ifx\cD@o\cD@p\ifx\cD@v\cD@o\let\cD@v\empty\fi\ifx\cD@t\empty\ifx \cD@o\cD@FD\let\cD@HG\cD@IH\else\let\cD@HG\cD@JH\fi\fi\else\edef\cD@G{\cD@o \cD@EA}\ifx\cD@G\empty\ifx\cD@v\cD@p\let\cD@v\empty\fi\fi\fi\ifmmode \aftergroup\cD@MH\else\cD@L\cD@rB rh{head\space\space}\cD@t\cD@rB rf{filler}% \cD@o\cD@rB rm{middle}\cD@v\ifx\cD@p\cD@o\else\cD@rB rf{filler}\cD@p\fi\cD@rB rt{tail\space\space}\cD@EA\cD@GD\cD@s\cD@FG\cD@HG\cD@FH l-2+2{lu}{nw}% \NorthWest\cD@FH r+2+2{ru}{ne}\NorthEast\cD@FH l-2-2{ld}{sw}\SouthWest\cD@FH r% +2-2{rd}{se}\SouthEast\else\aftergroup\cD@aA\cD@UA{r\@name}\fi\fi\endgroup}% \def\cD@GH{\cD@HH\cD@AG\cD@xF rl\Horizontal@Map}\def\cD@LH{\cD@HH\cD@uF\cD@CG du\Vertical@Map}\def\cD@KH{\cD@HH\cD@@G\cD@yF+-\Vector@Map}\def\cD@IH{\cD@HH \cD@@G\cD@yF+-\Slant@Map}\def\cD@JH{\cD@HH\cD@@G\cD@yF+-\Slope@Map}\catcode \lq\/=\active\def\cD@HH#1#2#3#4#5{\cD@w#1#3#5t:\cD@EA/f:\cD@o/m:\cD@v/f:\cD@p /h:\cD@t//\cD@w#2#4#5h:\cD@t/f:\cD@p/m:\cD@v/f:\cD@o/t:\cD@EA//}\def\cD@w#1#2% #3#4//{\edef\cD@AE{#2}\aftergroup\sdef\cD@UA{#1\@name}\aftergroup{\aftergroup #3\cD@VA#4//\aftergroup}}\def\cD@VA#1/{\edef\cD@NE{#1}\ifx\cD@NE\empty\else \cD@UA{\cD@AE#1}\expandafter\cD@VA\fi}\catcode\lq\/=12 \def\cD@FH#1#2#3#4#5#6% #7#8{\aftergroup\sdef\cD@UA{#6\@name}\aftergroup{\cD@UA{#2\@name}\if#2#4% \aftergroup\cD@KA\else\aftergroup\cD@JA\fi\cD@UA{#1\@name}% %% ASCII round brackets and comma (,) appear on the next line \aftergroup(\aftergroup#3\aftergroup,\aftergroup#5\aftergroup)\aftergroup}}% \def\cD@rB#1#2#3#4{\expandafter\ifx\csname#1#2:#4\endcsname\relax\cD@K\cD@kB{% arrow#3 "#4" undefined}\fi}\cD@GE\cD@zC{All five components must be defined before an arrow.}\cD@GE\cD@oG{\cD@CE, unlike \string\HorizontalMap, is a declaration.}\def\cD@aA#1{\cD@AB{Arrows \string#1 etc could not be defined}% \cD@zC}\def\cD@MH{\cD@AB{misplaced \cD@CE}\cD@oG}\cD@HE\ifincommdiag \incommdiagtrue\incommdiagfalse\newcount\cD@zA\cD@zA=0 \def\cD@kE{\cD@zA6 }% \def\cD@aB{\cD@zA1 \global\cD@PB1 \cD@nG\cD@aD\empty}\def\cD@aD{}\def\cD@qB#1% {\relax\cD@VC\edef\cD@aF{#1}\begingroup\cD@pG\else\ifcase\cD@zA\ifmmode\else \cD@yD\cD@QA0\fi\or\cD@ED5\or\cD@yD\cD@RA5\or\cD@yD\cD@NA5\or\cD@yD\cD@NA5\or \cD@yD\cD@OA5\or\cD@ED7\or\cD@yD\cD@PA7\fi\fi\endgroup\xdef\cD@aD{#1}}\def \cD@sB#1#2#3#4#5{\relax\cD@VC\xdef\cD@aF{#4}\begingroup\ifnum\cD@zA<#1 \expandafter\cD@ED\ifcase\cD@zA0\or#2\or#3\else#2\fi\else\ifnum\cD@zA<6 \cD@ZF \cD@yD\cD@NA#2\else\cD@yD\cD@SA#2\fi\fi\endgroup\cD@nG\cD@aD\cD@aF \ifincommdiag\let\cD@cC#5\else\let\cD@cC\cD@fF\fi}\def\cD@OF{\global\cD@PB=% \ifnum\cD@zA<5 1\else2\fi\relax}\def\cD@qE{\cD@zA\cD@PB}\def\cD@ED#1{% \aftergroup\cD@zA\aftergroup#1\aftergroup\relax}\def\cD@SE{\def\cD@qB##1{% \relax}\let\cD@sB\cD@PE\let\cD@kE\relax\let\cD@aB\relax\let\cD@OF\relax\let \cD@qE\relax}\def\cD@PE#1#2#3#4#5{\ifincommdiag\let\cD@cC#5\else\xdef\cD@aF{#% 4}\let\cD@cC\cD@fF\fi}\def\cD@yD#1{\aftergroup#1\aftergroup\relax\cD@ED}\def \cD@NA{\cD@BD\cD@XA\cD@vC\cD@F}\def\cD@SA{\cD@BD{\cD@QC\cD@XA}\cD@AD\cD@XC \cD@F}\def\cD@RA{\cD@BD{*\cD@XA}\cD@xC\clubsuit\cD@F}\def\cD@OA{\cD@BD{\cD@XA *\cD@XA}\cD@xC\cD@F\clubsuit\cD@F}\def\cD@PA{\cD@BD\cD@xB\cD@yC\\}\def\cD@QA{% \cD@BD\cD@PC\cD@wC\cD@dA}\def\cD@fF{\cD@AB{\cD@aF\space ignored \cD@cE}\cD@@D }\def\cD@EI{}\def\cD@@I{\cD@AB{maps must never be enclosed in braces}\cD@II}% \def\cD@cE{outside diagram}\def\cD@yB{\string\HonV, \string\VonH\space and \string\HmeetV}\cD@GE\cD@vC{The way that horizontal and vertical arrows are terminated implicitly means\cD@IE that they cannot be mixed with each other or with \cD@yB.}\cD@GE\cD@AD{\string\pile\space is for parallel horizontal arrows% ; verticals can just be put together in\cD@IE a cell. \cD@yB\space are not meaningful in a \string\pile.}\cD@GE\cD@xC{The horizontal maps must point to an object, not each other (I've put in\cD@IE one which you're unlikely to want% ). Use \string\pile\space if you want them parallel.}\cD@GE\cD@yC{Parallel horizontal arrows must be in separate layers of a \string\pile.}\cD@GE\cD@wC{% Horizontal arrows may be used \cD@cE s, but must still be in maths.}\cD@GE \cD@@D{Vertical arrows, \cD@yB\space\cD@cE s don't know where\cD@IE where to terminate.}\cD@GE\cD@II{This prevents them from stretching correctly.}\def \cD@BD#1{\cD@AB{"#1" inserted \ifx\cD@aD\empty before \cD@aF\else between \cD@aD\ifx\cD@aD\cD@aF s\else\space and \cD@aF\fi\fi}}\count@=\year\multiply \count@12 \advance\count@\month\ifnum\count@>23946 \message{because this one expired in June 1995!}\expandafter\endinput\fi\def\Horizontal@Map{\cD@qB{% horizontal map}\cD@EC\cD@BG\cD@mG}\def\cD@BG{\cD@VB-9999 \let\cD@cC\cD@bC \ifincommdiag\else\cD@TI\skip2\z@ plus 1.5\fontdimen3\textfont0 minus .5% \fontdimen4\textfont0 \skip4\skip2 \fi\let\cD@vF\@fillh}\def\Vector@Map{% \cD@GG4}\def\Slant@Map{\cD@GG{\cD@rG255\else6\fi}}\def\Slope@Map{\cD@GG{255}}% \def\cD@GG#1#2#3#4#5#6{\cD@EC\def\cD@kF{2}\def\cD@nF{2}\global\cD@ZI\let \Horizontal@Map\cD@tH\def\cD@BH{#1}\def\cD@SI{\cD@yH#2#3#4#5#6}}\def\cD@tH{% \cD@BG\cD@rF\let\cD@cC\cD@hI\cD@mG}\def\cD@hI{\cD@qG\def\cD@BH{255}\cD@nA \cD@ZD\cD@VH\else\cD@SI\cD@kG\fi}\def\cD@EC{\begingroup\dimen1=\MapShortFall \dimen2\cD@IB\dimen5=\MapShortFall\setbox3=\box\voidb@x\setbox6=\box\voidb@x \setbox7=\box\voidb@x\cD@lC\mathsurround\z@\skip2\z@ plus1fill\relax\skip4% \skip2 \cD@c} \cD@HE\cD@PD\cD@d\cD@c\def\cD@yH#1#2#3#4#5{\let\cD@EA#1\let \cD@o#2\let\cD@v#3\let\cD@p#4\let\cD@t#5 \cD@c\ifx\cD@o\cD@p\cD@d\fi}\def \cD@mG#1#2#3#4#5{\cD@yH#1#2#3#4#5\cD@oC}\def\Vertical@Map{\cD@sB433{vertical map}\cD@dC\cD@EC\cD@VB-9995 \let\cD@vF\@fillv\cD@mG}\def\break@args{\def \cD@oC{\cD@cC}\cD@cC\endgroup\aftergroup\cD@EI}\def\cD@aH{\setbox1=\cD@EA \setbox5=\cD@t\ifvoid3 \ifx\cD@v\null\else\setbox3=\cD@v\fi\fi\cD@zG2\cD@o \cD@zG4\cD@p}\def\cD@zG#1#2{\ifx#2\cD@vF\setbox#1=\box\voidb@x\else\setbox#1=% #2\def#2{\xleaders\box#1}\fi}\cD@BB\cD@cF{\string\HorizontalMap, \string \VerticalMap\space and \string\DiagonalMap\cD@IE are obsolete - use \cD@CE \space to pre-define maps}\def\HorizontalMap#1#2#3#4#5{\cD@cF\cD@qB{old horizontal map}\cD@EC\cD@BG\def\cD@EA{\cD@XE{#1}}\cD@VE\cD@o{#2}\def\cD@v{% \cD@XE{#3}}\cD@VE\cD@p{#4}\def\cD@t{\cD@XE{#5}}\cD@oC}\def\VerticalMap#1#2#3#% 4#5{\cD@cF\cD@sB433{vertical map}\cD@dC\cD@EC\cD@VB-9995 \let\cD@vF\@fillv \def\cD@EA{\cD@oD{#1}}\cD@YE\cD@o{#2}\def\cD@v{\cD@oD{#3}}\cD@YE\cD@p{#4}\def \cD@t{\cD@oD{#5}}\cD@oC}\def\DiagonalMap#1#2#3#4#5{\cD@cF\cD@EC\def\cD@BH{4}% \let\cD@vF\undefined\let\cD@cC\cD@kG\def\cD@kF{2}\def\cD@nF{2}\def\cD@v{% \cD@kD{#3}}\ifPositiveGradient\let\mv\raise\def\cD@EA{\cD@kD{#5}}\def\cD@o{% \cD@kD{#4}}\def\cD@p{\cD@kD{#2}}\def\cD@t{\cD@kD{#1}}\else\let\mv\lower\def \cD@EA{\cD@kD{#1}}\def\cD@o{\cD@kD{#2}}\def\cD@p{\cD@kD{#4}}\def\cD@t{\cD@kD{% #5}}\fi\cD@oC}\def\cD@FD{-}\def\cD@RC{\empty}\def\cD@VE{\cD@nD\cD@DD\cD@FD \@fillh}\def\cD@YE{\cD@nD\cD@gF\cD@jH\@fillv}\def\cD@nD#1#2#3#4#5{\def\cD@ME{% #5}\ifx\cD@ME#2\let#4#3\else\let#4\null\ifx\cD@ME\empty\else\ifx\cD@ME\cD@RC \else\let#4\cD@ME\fi\fi\fi}\def\cD@XE#1{\hbox{\mathsurround\z@ \offinterlineskip\def\cD@ME{#1}\ifx\cD@ME\empty\else\ifx\cD@ME\cD@RC\else \cD@dA\mkern-1.5mu{\cD@ME}\mkern-1.5mu\cD@WC\fi\fi}}\def\cD@pC#1#2{\setbox#1=% \hbox\bgroup\setbox0=\hbox{\cD@dA\labelstyle()\cD@WC}%% ASCII round brackets \setbox1=\null\ht1\ht0\dp1\dp0\box1 \kern.1\cD@nH\cD@dA\futurelet\cD@NE\cD@q}% \def\cD@k{\cD@WC\kern.1\cD@nH\egroup\cD@oC}\def\cD@q{\bgroup\aftergroup\cD@k \labelstyle\ifcat\bgroup\noexpand\cD@NE\expandafter\cD@AI\else\expandafter \cD@WI\fi}\def\cD@AI{\let\cD@VC\cD@zH\let\cD@ME} \def\cD@WI#1{\let\cD@VC \missing@label\let\cD@pI\egroup#1\cD@pI}\def\cD@pI{}\def\cD@VC{}\cD@GE\cD@JI{% The text which has just been read is not allowed within map labels.}\def \cD@zH{\egroup\cD@AB{missing \cD@QC\space inserted after label}\cD@JI}\def \missing@label{\egroup\cD@AB{missing label}\cD@JI}\def\cD@iH{\cD@kC\cD@pC6}% \def\cD@wG{\def\positional@{\cD@L\break@args}\cD@pC7}\def\cD@OI{\cD@pC3}% \cD@HE\cD@SD\cD@lC\cD@kC\def\cD@uG{\ifPositiveGradient\cD@ZF\expandafter \cD@iH\else\expandafter\cD@wG\fi}\def\right@label{\ifPositiveGradient\cD@ZF \expandafter\cD@wG\else\expandafter\cD@iH\fi}\cD@BB\cD@QH{labels as positional arguments are obsolete}\def\positional@{\cD@QH\cD@SD\cD@ZF\expandafter\cD@iH \else\expandafter\cD@wG\fi-}\def\cD@oC{\futurelet\cD@NE\switch@arg}\def \eat@space{\afterassignment\cD@oC\let\cD@NE= }\def\cD@YG{\get@round@pair\cD@r }\def\cD@r#1#2{\def\cD@kF{#1}\def\cD@nF{#2}\cD@oC}\def\optional@{\let\cD@WA \cD@oC\get@square@arg\cD@rC}\def\cD@D#1,{\cD@qI#1==,\let\cD@ME\cD@oI\ifx \@name\cD@YC\let\cD@ME\cD@WA\let\cD@WA\relax\fi\cD@ME}\def\cD@qI#1=#2=#3,{% \def\@name{#1}\def\cD@FA{#2}\def\cD@wF{#3}}\def\cD@oI{\cD@NC\cD@D}\def\cD@NC{% \ifx\cD@wF\empty\let\cD@FA\undefined\fi\expandafter\let\expandafter\cD@ME \csname\cD@UB\@name\endcsname\ifx\cD@ME\relax\cD@kB{option `\@name' undefined% }\else\cD@ME\fi}\def\cD@UB{cds@}\let\cD@WA\relax\def\cD@qC#1{\ifx\cD@FA \undefined\cD@kB{option `\@name' needs a value}\else#1\cD@FA\relax\fi}\def \cD@sC#1#2{\ifx\cD@FA\undefined#1#2\relax\else#1\cD@FA\relax\fi}\def\cD@QI{}% \def\cD@dI{\cD@lH\edef\cD@QI{\noexpand\cD@WB{\@name\space ignored within maths% }}}\def\diagramstyle{\cD@TI\cD@u\cD@rC\cD@rC}\let\diagramsstyle\diagramstyle \cD@HE\cD@OD\cD@b\cD@a\cD@HE\cD@ND\cD@Z\cD@Y\cD@HE\cD@MD\cD@X\cD@W\cD@HE \cD@ID\cD@P\cD@O\cD@P\cD@HE\cD@JD\cD@R\cD@Q\cD@HE\cD@KD\cD@T\cD@S\cD@HE\cD@qG \cD@tF\cD@sF\cD@HE\cD@rG\cD@EG\cD@DG\cD@HE\cD@pG\cD@rF\cD@qF\cD@HE\cD@LI \cD@mH\cD@lH\cD@CC{cds@ }{}\cD@CC{cds@}{}\cD@CC{cds@1em}{\CellSize1\cD@nH}% \cD@CC{cds@1.5em}{\CellSize1.5\cD@nH}\cD@CC{cds@2em}{\CellSize2\cD@nH}\cD@CC{% cds@2.5em}{\CellSize2.5\cD@nH}\cD@CC{cds@3em}{\CellSize3\cD@nH}\cD@CC{cds@3.5% em}{\CellSize3.5\cD@nH}\cD@CC{cds@4em}{\CellSize4\cD@nH}\cD@CC{cds@4.5em}{% \CellSize4.5\cD@nH}\cD@CC{cds@5em}{\CellSize5\cD@nH}\cD@CC{cds@6em}{\CellSize 6\cD@nH}\cD@CC{cds@7em}{\CellSize7\cD@nH}\cD@CC{cds@8em}{\CellSize8\cD@nH}% \def\cds@abut{\MapsAbut\dimen1\z@\dimen5\z@}\def\cds@alignlabels{\cD@Q\cD@S}% \def\cds@amstex{\ifincommdiag\cD@uH\else\def\CD{\diagram[amstex]}% %%ascii square brackets [] \fi\cD@xH\catcode\lq\@\active}\def\cds@b{\let\cD@iB\cD@gB}\def\cds@balance{% \let\cD@DB\cD@oA}\let\cds@bottom\cds@b\def\cds@center{\cds@vcentre \cds@nobalance}\let\cds@centre\cds@center\def\cds@centerdisplay{\cD@P\cD@dI \cds@balance}\let\cds@centredisplay\cds@centerdisplay\def\cds@defaultsize{% \cD@sC{\let\cD@nI}{3em}}\def\cds@displayoneliner{\cD@Y}\def\cds@dpi{\cD@iI{1% truein}}\def\cds@dpm{\cD@iI{100truecm}}\def\cds@eqno{\let\cD@UG\cD@FA}\def \cds@fixed{}\def\cds@flushleft{\cD@O\cD@dI\cds@nobalance\cD@sC\cD@HB\z@}\def \cds@h{\cD@qC\DiagramCellHeight}\def\cds@hcenter{\let\cD@DB\cD@CB}\let \cds@hcentre\cds@hcenter\def\cds@heads{\cD@sC{\let\cD@VI}\cD@VI\cD@cI\cD@qG \else\ifx\cD@VI\cD@sH\else\cD@CI\fi\fi}\let\cds@height\cds@h\let\cds@hmiddle \cds@balance\def\cds@inline{\cD@mH\let\cD@QI\empty}\def\cds@inlineoneliner{% \cD@Z}\cD@CC{cds@l>}{\cD@qC\cD@IB\dimen2\cD@IB}\def\cds@labelstyle{\cD@qC{% \let\labelstyle}}\def\cds@landscape{}\def\cds@large{\CellSize5\cD@nH}\def \cds@lefteqno{\cD@X}\def\cds@leftshortfall{\cD@qC{\dimen1 }}\def \cds@lowershortfall{\ifPositiveGradient\cds@leftshortfall\else \cds@rightshortfall\fi}\def\cds@loose{\cD@cB}\def\cds@midhshaft{\cD@R}\def \cds@midshaft{\cD@R}\def\cds@midvshaft{\cD@T}\def\cds@moreoptions{\cD@L}\let \cds@nobalance\cds@hcenter\def\cds@nohcheck{\cD@SE}\def\cds@nooptions{\def \cD@C{\cD@aC}}\let\cds@noorigin\cds@nobalance\def\cds@nopixel{\cD@kH4\cD@SH \cD@TI}\def\cds@noPostScript{\cD@sF\let\cds@PS\empty\let\cds@noPS\empty}\let \cds@noPS\cD@sF\def\cds@notextflow{\cD@a}\def\cds@noTPIC{\cD@DG}\def \cds@objectstyle{\cD@qC{\let\objectstyle}}\def\cds@origin{\let\cD@DB\cD@mB}% \def\cds@p{\cD@qC\PileSpacing}\let\cds@pilespacing\cds@p\def\cds@pixelsize{% \cD@qC\cD@kH\cD@aI}\def\cds@PostScript{\cD@tF\let\cds@PS\cD@tF\let\cds@noPS \cD@sF}\let\cds@PS\cD@tF\def\cds@righteqno{\cD@W}\def\cds@rightshortfall{% \cD@qC{\dimen5 }}\def\cds@s{\cds@height\DiagramCellWidth\DiagramCellHeight}% \def\cds@scriptlabels{\let\labelstyle\scriptstyle}\def\cds@shortfall{\cD@qC \MapShortFall\dimen1\MapShortFall\dimen5\MapShortFall}\let\cds@size\cds@s\def \cds@small{\CellSize2\cD@nH}\def\cds@t{\let\cD@iB\cD@jB}\def\cds@textflow{% \cD@b\cD@dI}\def\cds@thick{\let\cD@gD\tenlnw\cD@sC\MapBreadth{2\fontdimen8% \textfont3}}\def\cds@thin{\let\cD@gD\tenln\cD@sC\MapBreadth{\fontdimen8% \textfont3}}\def\cds@tight{\cD@dB}\let\cds@top\cds@t\def\cds@TPIC{\cD@EG}\def \cds@uppershortfall{\ifPositiveGradient\cds@rightshortfall\else \cds@leftshortfall\fi}\def\cds@vcenter{\let\cD@iB\cD@XG}\let\cds@vcentre \cds@vcenter\def\cds@vmiddle{\let\cD@iB\cD@hB}\def\cds@w{\cD@qC \DiagramCellWidth}\let\cds@width\cds@w\def\diagram{\relax\protect\cD@h}\def \enddiagram{\protect\cD@wD}\def\cD@h{\cD@RG\cD@LF\incommdiagtrue\cD@C}\def \cD@C{\cD@K\let\cD@WA\cD@A\cD@u\cD@rC\cD@aC}\def\cD@A{\cD@GD\expandafter\cD@C \else\expandafter\cD@aC\fi}\def\cD@aC{\let\cD@NE\relax\setbox2=\vbox\bgroup \cD@sG\cD@n}\def\cD@bE{\cD@iB\cD@DB\nointerlineskip\setbox0=\null\ht0-\cD@HF \dp0\cD@HF\wd0\cD@EF\box0 \global\cD@vA\cD@cD\global\cD@PB\cD@eB\egroup\cD@yG \ifnum\cD@PB=1 \else\cD@Y\fi\global\@ignorefalse\cD@LI\leavevmode\fi\ifvmode \cD@yA\else\ifmmode\cD@QI\cD@nE\else\cD@ND\cD@mH\fi\ifinner\cD@mH\fi\cD@LI \cD@nE\else\cD@OD\cD@bB\else\cD@yA\fi\fi\fi\fi\cD@QD\global\cD@i\else \aftergroup\cD@MC\fi\if@ignore\aftergroup\ignorespaces\fi\cD@jG\ignorespaces}% \def\cD@jB{\advance\cD@HF\dimen1\relax}\def\cD@hB{\advance\cD@HF.5\dimen1% \relax}\def\cD@gB{}\def\cD@XG{\cD@jB\advance\cD@HF\cD@fB\divide\cD@HF2 \advance\cD@HF-\axisheight\relax}\def\cD@CB{}\def\cD@mB{\cD@cD\z@}\def\cD@oA{% \ifdim\dimen2>\cD@cD\cD@cD\dimen2 \else\dimen2\cD@cD\cD@EF\dimen0 \advance \cD@EF\dimen2 \fi}\def\cD@bB{\skip0\z@\relax\loop\skip1\lastskip\ifdim\skip1>% \z@\unskip\advance\skip0\skip1 \repeat\vadjust{\prevdepth\dp\strutbox\penalty \predisplaypenalty\vskip\abovedisplayskip\cD@TG\penalty\postdisplaypenalty \vskip\belowdisplayskip}\ifdim\skip0=\z@\else\hskip\skip0 \global\@ignoretrue \fi}\def\cD@yA{\cD@uD\kern-\displayindent\cD@TG\cD@uD\global\@ignoretrue}\def \cD@TG{\hbox to\hsize{\setbox1=\hbox{\ifx\cD@UG\undefined\else\cD@dA\cD@UG \cD@WC\fi}\cD@MD\cD@ID\else\advance\cD@vA\wd1 \fi\wd1\z@\box1 \fi\dimen0\wd2 \advance\dimen0\wd1 \advance\dimen0-\hsize\ifdim\dimen0>-\cD@HB\cD@P\fi \advance\dimen0\cD@vA\ifdim\dimen0>\z@\cD@WB{wider than the page by \the \dimen0 }\cD@P\fi\cD@ID\hss\else\cD@PG\cD@vA\cD@HB\fi\cD@nE\hss\kern-\wd1\box 1 }}\def\cD@nE{\kern\cD@vA\box2 }\cD@HE\cD@MI\cD@ZI\cD@YI\def\cD@sG{\cD@TI \ifdim\DiagramCellHeight=-\maxdimen\DiagramCellHeight\cD@nI\fi\ifdim \DiagramCellWidth=-\maxdimen\DiagramCellWidth\cD@nI\fi\global\cD@YI\let\cD@EI \empty\let\cD@BI\cD@F\let\cD@I\cD@YF\let\enddiagram\cD@m\let\\\cD@HC\let\par \cD@eE\let\cD@VC\empty\let\switch@arg\cD@WG\let\shift\cD@EB\baselineskip \DiagramCellHeight\lineskip\z@\lineskiplimit\z@\mathsurround\z@\tabskip\z@ \cD@aB}\def\cD@n{\penalty123 \begingroup\aftergroup\cD@TA\halign\bgroup\cD@aB \cD@cA##\cD@TC\cD@F\cD@F\cD@qE\cD@cA##\cD@TC\cr}\def\cD@m{\cD@VC\cD@DI\crcr \egroup\global\cD@j\endgroup}\def\cD@TA{\cD@yG\cD@vD\cD@yE\cD@bE}\def\cD@cA{% \futurelet\cD@NE\cD@H}\def\cD@H{\ifx\cD@NE\cD@TC\cD@ZF\hskip1sp plus 1fil \relax\let\cD@TC\relax\else\hfil\cD@dA\objectstyle\let\cD@EI\cD@@I\fi}\def \cD@TC{\cD@VC\relax\cD@OF\global\cD@vA\cD@EB\penalty-9993 \cD@WC\hfil\null \kern-2\cD@vA\null}\def\cD@HC{\cr}\cD@BB\cD@UE{\string\across\space must be changed to multiple \cD@XA}\def\across#1{\cD@UE\span\omit\mscount=#1 \cD@hD \ifnum\mscount>2 \cD@UF\repeat\ignorespaces}\def\cD@UF{\relax\span\omit \advance\mscount\m@ne}\def\cD@bC{ \cD@GD\cD@c\fi\cD@nA\cD@ZD\cD@oE}\def\cD@nA {\cD@QF\cD@aH\ifvoid3 \setbox3=\null\ht3\cD@KF\dp3\cD@JF\else\cD@PG{\ht3}% \cD@KF\cD@PG{\dp3}\cD@JF\fi\dimen3=.5\wd3 \ifdim\dimen3=\z@\cD@PD\else\dimen3% -\cD@SH\fi\else\cD@c\fi\cD@PG{\dimen2}{\wd7}\cD@PG{\dimen2}{\wd6}% \ifincommdiag\ifx\cD@o\@fillh\ifx\cD@p\@fillh\ifdim\dimen3>\z@\else\ifdim \dimen2>81\cD@kH\ifdim\cD@NI>\z@\count@\cD@kI\advance\count@\m@ne\ifnum \count@<\z@\count@20\let\cD@fI\cD@lI\fi\xdef\cD@kI{\the\count@}\fi\fi\fi\fi \fi\fi\advance\dimen2-2\dimen3 \dimen4.5\dimen2 \dimen2\dimen4 \advance\dimen 2-\wd1 \advance\dimen4-\wd5 \ifvoid2 \else\cD@PG{\ht3}{\ht2}\cD@PG{\dp3}{\dp2% }\cD@PG{\dimen2}{\wd2}\fi\ifvoid4 \else\cD@PG{\ht3}{\ht4}\cD@PG{\dp3}{\dp4}% \cD@PG{\dimen4}{\wd4}\fi\advance\skip2\dimen2 \advance\skip4\dimen4 \cD@PD \dimen0\dimen5 \advance\dimen0\wd5 \skip3-\skip4 \advance\skip2\skip4 \advance \skip3-\dimen0 \let\cD@p\empty\else\skip3\z@\relax\dimen0\z@\fi}\def\cD@eI#1{% \vrule\horizhtdp width#1\dimen@\kern2\dimen@}\def\cD@lI{\rlap{\dimen@\cD@kH \cD@PG\dimen@{.182\p@}\cD@RI\dimen@\advance\cD@KF\dimen@\cD@eI0\cD@eI0\cD@eI2% \cD@eI6\cD@eI2\cD@eI0\cD@eI0\cD@eI2\cD@eI6\cD@eI0\cD@eI0\cD@eI2\cD@eI2\cD@eI6% \cD@eI0\cD@eI0\cD@eI2\cD@eI6\cD@eI2\cD@eI2\cD@eI0\cD@eI0}}\def\cD@kI{10}\def \cD@fI{}\def\cD@ZD{\offinterlineskip\lineskip.2\cD@nH\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@oE{\kern\dimen1 \box1 \cD@fI \cD@o\hskip\skip2 \kern\dimen0 \ifincommdiag\kern\dimen3 \penalty\cD@VB\hskip \skip3 \null\kern-\dimen3 \else\hskip\skip3 \fi\box3 \cD@p\hskip\skip4 \box5 \kern\dimen5}\def\cD@mI{\ifnum\cD@NH>\cD@bG\cD@PG{\dimen1}\cD@OH\cD@PG{\dimen 5}\cD@OH\else\cD@PG{\dimen1}\cD@PH\cD@PG{\dimen5}\cD@PH\fi}\def\cD@VH{\dimen6 \cD@nF\DiagramCellHeight\dimen7 \cD@kF\DiagramCellWidth\cD@LA\cD@mI\setbox0=% \hbox{\lower\axisheight\hbox to\dimen2{\incommdiagfalse\cD@oE}}% \ifPositiveGradient\advance\dimen7-\DiagramCellWidth\else\dimen7% \DiagramCellWidth\dimen6\z@\multiply\cD@NH\m@ne\fi\advance\dimen6-% \DiagramCellHeight\setbox0=\rlap{\cD@DC\kern-\dimen7 \lower\dimen6\hbox{% \cD@fC{\the\cD@bG\space\the\cD@NH\space bturn}\box0 \cD@XI{eturn}}}\ht0\z@\dp 0\z@\raise\axisheight\box0 }\def\cD@tB{\advance\cD@bD-\cD@GF\cD@gH\cD@bD \advance\cD@gH\cD@DF\ifvoid\cD@hE\ifdim\cD@bD<\z@\cD@zD h\cD@bD<\z@:space between objects:\cD@rA\cD@gC\fi\else\ifhbox\cD@hE\cD@iF\else\cD@jF\fi\advance \cD@gH\cD@GF\cD@aE{-\cD@GF}{\box\cD@hE}{\cD@gH}\z@\fi\cD@bD-\cD@eD\cD@gC \cD@rA\cD@DF\z@}\def\cD@iF{\setbox\cD@hE=\hbox{\unhbox\cD@hE\unskip\unpenalty \ifdim\cD@DF<\wd\cD@iE\cD@R\else\ifdim\cD@bD<\z@\cD@R\fi\fi\cD@JD\cD@DF.5% \cD@gH\cD@bD\cD@DF\fi\setbox\cD@iE=\hbox to\cD@DF{\hss\cD@sD\unhbox\cD@iE\hss }\ifdim\lastkern=\z@\kern-\wd\cD@iE\global\cD@PB\cD@gC\else\global\cD@PB \cD@AC\fi\cD@qD\box\cD@iE}\ifdim\cD@gH<\wd\cD@hE\cD@zD h\cD@gH<\wd\cD@hE:% horizontal:\cD@rA\cD@PB\fi\setbox\cD@hE=\hbox to\cD@gH{\unhbox\cD@hE}}\def \pile{\protect\cD@SF\protect\cD@AA}\def\cD@AA#1{\cD@eA#1\cD@XC}\def\cD@SF{% \cD@qB{pile}\setbox0=\vtop\bgroup\aftergroup\cD@iC\let\cD@EI\empty\let\pile \cD@TD\let\cD@XC\cD@l\let\cD@DI\cD@oH\cD@kE\baselineskip.5\PileSpacing \lineskip.1\cD@nH\relax\lineskiplimit\lineskip\mathsurround\z@\tabskip\z@\let \\\cD@jE}\def\cD@eA{\cD@nG\cD@aD\empty\halign\bgroup\hfil\cD@dA\let\cD@EI \cD@@I##\cD@VC\cD@WC\hfil\cD@F\cD@wH##\cr}\cD@GE\cD@HI{pile only allows one column.}\cD@GE\cD@KI{you left it out!}\def\cD@wH{\cD@XC\cD@F\relax\cD@AB{% missing \cD@QC\space inserted after \string\pile}\cD@HI}\def\cD@l{\cD@VC\crcr \egroup\egroup}\def\cD@DI{\cD@VC}\def\cD@oH{\cD@VC\relax\cD@XC\cD@AB{missing \cD@QC\space inserted between \string\pile\space and \cD@UC}\cD@KI}\def\cD@XC {\cD@VC}\def\cD@iC{\vbox{\dimen1\dp0 \unvbox0 \setbox0=\lastbox\advance\dimen 1\dp0 \nointerlineskip\box0 \nointerlineskip\setbox0=\null\dp0.5\dimen1\ht0-% \dp0 \box0}\ifincommdiag\cD@ZF\penalty-9998 \fi\xdef\cD@aD{pile}}\def\cD@jE{% \cr}\def\cD@TD#1{#1}\def\cD@jF{\setbox\cD@hE=\vbox{\unvbox\cD@hE\setbox1=% \lastbox\setbox0=\box\voidb@x\cD@iD\setbox\cD@hE=\lastbox\ifhbox\cD@hE\cD@OC \repeat\unvbox0 \global\cD@vA\cD@CD}\cD@CD\cD@vA}\def\cD@OC{\cD@JD\setbox \cD@hE=\hbox{\unhbox\cD@hE\unskip\setbox\cD@hE=\lastbox\unskip\unhbox\cD@hE}% \ifdim\cD@gH<\wd\cD@hE\cD@zD h\cD@gH<\wd\cD@hE:map in pile:\cD@rA\cD@gC\else \setbox\cD@hE=\hbox to\cD@gH{\unhbox\cD@hE}\fi\else\cD@VF\fi\setbox0=\vbox{% \box\cD@hE\nointerlineskip\ifvoid0 \cD@ZF\box1 \else\vskip\skip0 \unvbox0 \fi }\skip0=\lastskip\unskip}\def\cD@VF{\penalty7 \noindent\unhbox\cD@hE\unskip \setbox\cD@hE=\lastbox\unskip\unhbox\cD@hE\endgraf\setbox\cD@iE=\lastbox \unskip\setbox\cD@iE=\hbox{\unhbox\cD@iE\unskip\unskip\unpenalty}\ifcase \prevgraf\cd@shouldnt\or\ifdim\cD@gH<\wd\cD@iE\cD@zD h\cD@gH<\wd\cD@hE:object in pile:\cD@rA\cD@gC\setbox\cD@hE=\hbox to\cD@gH{\hss\unhbox\cD@iE\hss}\else \setbox\cD@hE=\hbox to\cD@gH{\hss\kern\cD@bD\unhbox\cD@iE\kern\cD@DF\hss}\fi \or\setbox\cD@hE=\lastbox\unskip\cD@iF\else\cd@shouldnt\fi\unskip\unpenalty}% \def\cD@dC{\cD@aH\ifvoid3 \setbox3=\null\ht3\axisheight\dp3-\ht3 \dimen3.5% \cD@NI\else\dimen4\dp3 \dimen3.5\wd3 \setbox3=\cD@oD{\box3}\dp3\dimen4 \ifdim \ht3=-\dp3 \else\cD@c\fi\fi\setbox0=\null\cD@PD\dimen4=\ht\cD@TE\advance \dimen4\dp5 \advance\dimen4\dimen1 \let\cD@p\empty\else\dimen4\ht3 \fi\ht0% \dimen4 \offinterlineskip\setbox8=\vbox spread2ex{\kern\dimen5 \box1 \cD@o \vfill\box0}\ht8=\z@\setbox9=\vtop spread2ex{\kern-\ht3 \box3 \cD@p\vfill\box 5 \kern\dimen1}\dp9=\z@\dimen0\dimen3 \advance\dimen0-.5\cD@NI\hskip\z@ plus.% 0001fil \box6 \kern\dimen0 \box9 \kern-\cD@NI\box8 \cD@PD\penalty1 \fi\kern \PileSpacing\kern-\PileSpacing\kern-.5\cD@NI\penalty\cD@VB\null\kern\dimen3 \box7}\def\cD@BF{\ifhbox\cD@zA\cD@WB{clashing verticals}\ht\cD@TE.5\dp\cD@zA \dp\cD@TE-\ht5 \cD@vB\ht\cD@TE\z@\dp\cD@TE\z@\fi\dimen1\dp\cD@zA\cD@OB \prevgraf\unvbox\cD@zA\cD@NB\lastpenalty\unpenalty\setbox\cD@zA=\null\setbox \cD@FF=\hbox{\cD@sD\unhbox\cD@FF\unskip\unpenalty\dimen0\lastkern\unkern \unkern\unkern\kern\dimen0 \cD@qD}\setbox\cD@dD=\hbox{\unhbox\cD@dD\dimen0% \lastkern\unkern\unkern\global\cD@vA\lastkern\unkern\kern\dimen0 }\cD@iD \ifnum\cD@OB>3 \cD@PF\repeat\unskip\unskip\advance\cD@eD.5\wd\cD@zA\advance \cD@eD\wd\cD@dD\advance\cD@GF.5\wd\cD@zA\advance\cD@GF\wd\cD@FF\setbox\cD@zA=% \hbox{\kern-\cD@eD\box\cD@dD\unhbox\cD@zA\box\cD@FF\kern-\cD@GF\penalty\cD@NB \penalty\cD@ZB}\ht\cD@zA\dimen1 \dp\cD@zA\z@\wd\cD@zA\cD@UD\cD@tB}\def\cD@PF{% \ifdim\wd\cD@dD<\cD@vA\setbox\cD@dD=\hbox to\cD@vA{\cD@sD\unhbox\cD@dD}\fi \advance\cD@OB\m@ne\setbox\cD@zA=\hbox{\box\cD@dD\unhbox\cD@zA}\unskip\setbox \cD@dD=\lastbox\setbox\cD@dD=\hbox{\unhbox\cD@dD\unskip\unpenalty\dimen0% \lastkern\unkern\unkern\global\cD@vA\lastkern\unkern\kern\dimen0 }}\def\cD@vB {\dimen1\dp\cD@zA\ifhbox\cD@zA\cD@e\else\cD@f\fi\setbox\cD@zA=\vbox{\penalty \cD@ZB}\dp\cD@zA-\dp\cD@TE\wd\cD@zA\cD@UD}\def\cD@f{\unvbox\cD@zA\cD@NB \lastpenalty\unpenalty\ifdim\dimen1<\ht\cD@TE\cD@zD v\dimen1<\ht\cD@TE:% vertical space:\cD@ZB\cD@NB\fi}\def\cD@e{\dimen0=\ht\cD@zA\cD@KD\advance \dimen0\dimen1 \dimen1.5\dimen0 \dimen0\dimen1 \fi\setbox\cD@zA=\hbox\bgroup \advance\dimen1-\ht\cD@TE\unhbox\cD@zA\cD@OB\lastpenalty\unpenalty\cD@NB \lastpenalty\unpenalty\global\cD@wA-\lastkern\unkern\setbox0=\lastbox\cD@iD \setbox\cD@zA=\hbox{\box0\unhbox\cD@zA}\setbox0=\lastbox\ifhbox0 \cD@XF \repeat\global\cD@xA-\lastkern\unkern\global\cD@vA\cD@eF\unhbox\cD@zA\egroup \cD@eF\cD@vA\cD@aE{\cD@xA}{\box\cD@zA}{\cD@wA}{\dimen1}}\def\cD@XF{\setbox0=% \hbox to\wd0\bgroup\unhbox0 \unskip\unpenalty\dimen7\lastkern\unkern\ifnum \lastpenalty=1 \unpenalty\cD@d\else\cD@c\fi\setbox0=\lastbox\dimen6\lastkern \unkern\setbox1=\lastbox\setbox0=\vbox{\unvbox0\cD@PD\kern-\dimen1\fi}\ifdim \dimen0<\ht0 \cD@zD v\dimen0<\ht0:upper part of vertical:{\cD@PD\cD@ZB\else \cD@NB\fi}\cD@OB\else\setbox0=\vbox to\dimen0{\unvbox0}\fi\setbox1=\vtop{% \unvbox1}\ifdim\dimen1<\dp1 \cD@zD v\dimen1<\dp1:lower part of vertical:% \cD@ZB\cD@NB\else\setbox1=\vtop to\dimen1{\unvbox1}\fi\box1 \kern\dimen6 \box 0 \kern\dimen7 \cD@qD\global\cD@vA\cD@eF\egroup\cD@eF\cD@vA\relax}\countdef \cD@lA=14 \newcount\cD@pA\newcount\cD@eB\newcount\cD@ZB\let\cD@XB\insc@unt \newcount\cD@rA\newcount\cD@FB\let\cD@GB\cD@eB\newcount\cD@YB\def\cD@vD{% \cD@pA=\cD@lA\advance\cD@pA1 \cD@eB=\cD@pA\dimen1\z@\skip0\z@\count@=% \insc@unt\advance\count@\cD@lA\divide\count@2 \cD@jD\setbox0=\lastbox\ifhbox0 \cD@AH\advance\cD@eB1 \skip0=\lastskip\unskip\repeat\cD@YB\cD@GB\advance \cD@YB1 \setbox\cD@GB=\vbox{}\ifnum\lastpenalty=123 \cD@ZF\unpenalty\else \cD@WB{some rows remain unreformatted.}\cd@shouldnt\fi\count@\cD@eB\advance \count@\m@ne\cD@fB\ht\count@}\def\cD@AH{\cD@HF\dp0 \advance\cD@HF\skip0 \advance\cD@VD\cD@HF\cD@RD\ifnum\cD@eB>\cD@pA\cD@VD\DiagramCellHeight\cD@HF \cD@VD\advance\cD@HF-\cD@IF\fi\fi\dp0\cD@HF\ifnum\cD@eB>\count@\box0 \penalty 1 \cD@WB{The diagram has too many rows, so...}\else\cD@IF\ht0 \cD@VD\cD@IF \setbox\cD@eB=\box0 \fi}\def\cD@yE{\cD@kA\cD@QF\setbox\cD@FC=\hbox{\cD@dA A% \cD@qH f\cD@pH f\cD@WC}\cD@CD\z@\cD@eF\z@\cD@EF\z@\cD@cD\z@\cD@ZB=\cD@eB \cD@VD\z@\cD@wB\z@\cD@jD\ifnum\cD@ZB>\cD@pA\advance\cD@ZB\m@ne\cD@IF\ht\cD@ZB \cD@HF\dp\cD@ZB\advance\cD@VD\cD@IF\cD@XH\cD@@E\advance\cD@wB\cD@VD\cD@BC \cD@AF\cD@mA\ht\cD@ZB\cD@IF\dp\cD@ZB\cD@HF\nointerlineskip\box\cD@ZB\cD@VD \cD@HF\repeat\cD@uB\nointerlineskip\box\cD@ZB\cD@BE\cD@CD\DiagramCellWidth{% horizontal}\cD@BE\cD@eF\DiagramCellHeight{vertical}\cD@zA\cD@GB\advance\cD@zA 1 \dimen0\z@\cD@hD\ifnum\cD@zA<\cD@XB\advance\dimen0\wd\cD@zA\advance\cD@zA1 \repeat\cD@KF\axisheight\dimen1\cD@wB\advance\dimen1-\cD@fB\dimen7\cD@EF \advance\dimen7-\dimen0 \advance\cD@eB-\cD@pA\advance\cD@XB-\cD@FB}\count@ \year\multiply\count@12 \advance\count@\month\ifnum\count@>23947 \loop\iftrue \message{gone July 1995!}\repeat\fi\def\cD@uB{\cD@IF-\cD@VD\cD@HF\cD@VD \setbox\cD@TE=\null\dp\cD@TE\cD@VD\ht\cD@TE-\cD@VD\cD@eD\z@\cD@GF\z@\cD@FB \cD@XB\advance\cD@FB-\cD@YB\advance\cD@FB\cD@GB\cD@rA\cD@XB\cD@zA\cD@YB\cD@hD \ifnum\cD@rA>\cD@FB\advance\cD@rA\m@ne\advance\cD@zA\m@ne\cD@UD\wd\cD@zA \setbox\cD@rA=\box\voidb@x\cD@vB\repeat\cD@mA\ht\cD@ZB\cD@IF\dp\cD@ZB\cD@HF}% \def\cD@BE#1#2#3{\ifdim#1>.1\cD@nH\cD@uA#2\relax\advance\cD@uA#1\relax \advance\cD@uA.9\cD@nH\count@\cD@uA\divide\count@\cD@nH\cD@WB{increase \string #2 to \the\count@ em}\fi}\def\cD@XH{\cD@rA=\cD@XB\penalty4 \noindent\unhbox \cD@ZB\cD@hD\unskip\setbox0=\lastbox\ifhbox0 \advance\cD@rA\m@ne\setbox\cD@rA =\box0 \repeat\endgraf\unskip\ifnum\lastpenalty=4 \unpenalty\else\cD@WB{% \string\cD@XH\space didn't clear stack}\cd@shouldnt\fi\cD@FB=\cD@rA} \def \cD@@E{\advance\cD@rA\cD@YB\advance\cD@rA-\cD@GB\ifnum\cD@rA<\cD@XB\count@ \cD@rA\advance\count@\m@ne\dimen0=\wd\count@\cD@hD\ifnum\cD@rA<\cD@XB\cD@xD \dimen0\wd\cD@rA\advance\cD@rA1 \advance\cD@YB1 \repeat\fi}\cD@HE\cD@RD\cD@dB \cD@cB\def\cD@xD{\setbox\cD@YB=\vbox{}\dp\cD@YB=\cD@wB\advance\dimen0\wd \cD@rA\divide\dimen0 2 \cD@PG{\dimen0}\DiagramCellWidth\cD@RD\wd\cD@YB \DiagramCellWidth\else\wd\cD@YB\dimen0 \cD@UI\fi}\def\cD@UI{\cD@MI\advance \dimen0-\DiagramCellWidth\ifdim\dimen0>2\MapShortFall\cD@WB{increase width and use "tight" option}\let\cD@UI\empty\fi\else\let\cD@UI\empty\fi}\def\cD@BC{% \cD@zA\cD@GB\cD@hD\ifnum\cD@zA<\cD@YB\dimen0\dp\cD@zA\advance\dimen0\cD@VD\dp \cD@zA\dimen0 \advance\cD@zA1 \repeat}\def\cD@aE#1#2#3#4{\ifnum\cD@rA<\cD@XB \cD@tA=#1\relax\setbox\cD@rA=\hbox{\setbox0=#2\dimen7=#4\relax\dimen8=#3% \relax\ifhbox\cD@rA\unhbox\cD@rA\dimen9=\lastkern\unkern\advance\dimen9-% \cD@tA\ifdim\dimen9=\z@\else\kern\dimen9 \fi\fi\raise\dimen7\box0 \kern-% \dimen8 }\ifnum\cD@rA=\cD@FB\cD@PG\cD@cD\cD@tA\fi\else\cd@shouldnt\fi}\def \cD@mA{\setbox\cD@ZB=\hbox{\cD@rA\cD@FB\cD@zA\cD@GB\cD@tA\z@\cD@hD\cD@CF \advance\cD@rA1 \ifnum\cD@rA<\cD@XB\advance\cD@zA1 \advance\cD@tA\wd\cD@zA \repeat}\cD@PG\cD@EF{\wd\cD@ZB}\wd\cD@ZB\z@}\def\cD@CF{\ifhbox\cD@rA\advance \cD@tA-\wd\cD@rA\ifdim\cD@tA=\z@\else\kern\cD@tA\fi\unhbox\cD@rA\box\cD@rA \cD@tA=\lastkern\unkern\fi}\def\cD@AF{\setbox\cD@hE=\box\voidb@x\cD@zA=\cD@YB \cD@rA\cD@XB\cD@zA\cD@GB\advance\cD@zA\cD@rA\advance\cD@zA-\cD@FB\count@ \cD@XB\advance\count@\m@ne\cD@bD.5\wd\count@\cD@MA\m@ne\cD@hD\ifnum\cD@rA>% \cD@FB\advance\cD@zA\m@ne\advance\cD@rA\m@ne\cD@UD\wd\cD@zA\cD@uE\wd\cD@zA=% \cD@UD\advance\cD@bD\cD@UD\repeat\cD@eD\cD@UD\cD@GF-\cD@UD\cD@tB}\newcount \cD@VB\def\cD@I{}\def\cD@kA{\hsize\z@\rightskip\z@ plus1fil minus\maxdimen \parfillskip\z@\linepenalty9000 \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 \prevdepth\z@}% \newbox\cD@tD\newbox\cD@rD\def\cD@sD{\unhcopy\cD@tD}\def\cD@qD{\unhcopy\cD@rD }\def\cD@WF{\hbox{}\penalty1\nointerlineskip}\def\cD@uE{\penalty5 \noindent \setbox\cD@TE=\null\cD@eD\z@\cD@GF\z@\ifnum\cD@rA<\cD@XB\ht\cD@TE\ht\cD@rA\dp \cD@TE\dp\cD@rA\unhbox\cD@rA\skip0=\lastskip\unskip\else\cD@pF\skip0=\z@\fi \endgraf\ifcase\prevgraf\cD@wE\or\or\cD@zE\else\cD@vE\fi\unskip\unpenalty}% \def\cD@zE{\cD@tC\setbox\cD@FF=\lastbox\setbox\cD@FF=\hbox{\unhbox\cD@FF \unskip\unpenalty}\unskip\ifdim\ht\cD@FF>\ht\cD@FC\setbox\cD@TE=\copy\cD@FF \else\ifdim\dp\cD@FF>\dp\cD@FC\setbox\cD@TE=\copy\cD@FF\else\setbox\cD@TE=% \hbox{\vrule height\ht\cD@FF depth\dp\cD@FF width\wd\cD@FF}\dp\cD@TE\dp\cD@FF \fi\fi\advance\cD@eD.5\wd\cD@FF\advance\cD@GF.5\wd\cD@FF\setbox\cD@FF=\hbox{% \unhbox\cD@FF\cD@qD}\cD@aE\cD@eD{\box\cD@FF}\cD@GF\z@\cD@vB\cD@tB}\def\cD@tC{% \ifnum\cD@MA>0 \cD@EB.5\dimen0 \cD@MA-\cD@MA\else\cD@MA0 \cD@EB\z@\fi\setbox \cD@TE=\lastbox\setbox\cD@TE=\hbox{\unhbox\cD@TE\unskip\unskip\unpenalty \setbox0=\lastbox\global\cD@vA\lastkern\unkern}\advance\cD@EB-.5\cD@vA\unskip \setbox\cD@TE=\null\cD@GF\cD@EB\cD@eD-\cD@EB}\def\cD@ZA{\ht\cD@TE\cD@KF\dp \cD@TE\cD@JF}\def\cD@vE{\cD@tC\setbox\cD@FF=\lastbox\unskip\setbox\cD@dD=% \lastbox\unskip\setbox\cD@dD=\hbox{\unhbox\cD@dD\unskip\global\cD@PB \lastpenalty\unpenalty}\advance\cD@PB9999 \ifcase\cD@PB\cD@xE\or\cD@@F\or \cD@sE\or\cD@tE\or\cD@BF\or\cD@rE\else\cd@shouldnt\fi}\def\cD@xE{\cD@CA \setbox\cD@hE=\box\cD@dD\setbox\cD@iE=\box\cD@FF}\def\cD@@F{\cD@CA\setbox \cD@dD=\hbox{\unhbox\cD@dD\unskip\unpenalty\global\setbox\cD@qA=\lastbox}% \setbox\cD@hE=\box\cD@qA}\def\cD@CA{\cD@vB\ifvoid\cD@hE\else\cD@WB{Clashing horizontal arrows}\cD@GF.5\cD@bD\cD@eD-\cD@GF\cD@tB\cD@GF\z@\cD@eD\z@\fi \cD@DF\cD@bD\advance\cD@DF-\cD@GF\cD@bD-\cD@eD\cD@AC\cD@rA}\def\cD@wE{\cD@EB \z@\cD@ZA\ifdim\skip0>\z@\cD@ZF\cD@MA0 \else\ifnum\cD@MA<1 \cD@MA0 \dimen0\z@ \fi\advance\cD@MA1 \advance\dimen0\cD@UD\fi}\def\VonH{\cD@sA46\VonH{.5\cD@NI}% }\def\HonV{\cD@sA57\HonV{.5\cD@NI}}\def\HmeetV{\cD@sA44\HmeetV{-\MapShortFall }}\def\cD@sA#1#2#3#4{\cD@sB34#1{\string#3}\cD@ZC\cD@VB-999#2 \dimen0=#4\cD@KF \dimen0\advance\cD@KF\axisheight\cD@JF\dimen0\advance\cD@JF-\axisheight\cD@u \cD@@C\cD@cC}\def\cD@@C#1{\setbox0=\hbox{\cD@dA#1\cD@WC}\dimen0.5\wd0 \cD@KF \ht0 \cD@JF\dp0 \cD@cC}\def\cD@ZC{\setbox0=\null\ht0=\cD@KF\dp0=\cD@JF\wd0=% \dimen0 \copy0\penalty\cD@VB\box0 }\def\cD@sE{\cD@zB\cD@vB}\def\cD@tE{\cD@zB \cD@tB}\def\cD@rE{\cD@zB\cD@vB\cD@tB}\def\cD@zB{\setbox\cD@FF=\hbox{\unhbox \cD@FF}\setbox\cD@dD=\hbox{\unhbox\cD@dD\global\setbox\cD@qA=\lastbox}\ht \cD@TE\ht\cD@qA\dp\cD@TE\dp\cD@qA\advance\cD@eD\wd\cD@qA\advance\cD@GF\wd \cD@FF}\cD@HE\ifPositiveGradient\cD@KA\cD@JA\cD@KA\cD@HE\ifClimbing\cD@HA \cD@GA\cD@HA\newcount\DiagonalChoice\DiagonalChoice\m@ne\ifx\tenln\nullfont \cD@ZF\def\cD@vG{\cD@RE\ifPositiveGradient/\else\cD@dA\backslash\cD@WC\fi}% \else\def\cD@vG{\cD@gD\char\count@}\fi\let\cD@gD\tenln\def\cD@OG#1{\hbox{#1% \cD@gD\ifPositiveGradient\else\advance\count@64 \fi\char\count@}}\def\cD@NG{% \cD@OG{\count@\cD@bG\multiply\count@8\advance\count@-9\advance\count@\cD@NH}}% \def\cD@LG{\cD@OG{\ifcase\DiagonalChoice\cD@KG\or\cD@JG\or\cD@JG\else\cD@KG \fi}}\def\cD@KG{\ifnum\cD@bG=\z@\count@\rq33 \else\count@\cD@bG\multiply \count@\sixt@@n\advance\count@-9\advance\count@\cD@NH\advance\count@\cD@NH\fi }\def\cD@JG{\count@\rq\ifcase\cD@NH55\or\ifcase\cD@bG66\or22\or52\or61\or72% \fi\or\ifcase\cD@bG66\or25\or22\or63\or52\fi\or\ifcase\cD@bG66\or16\or36\or22% \or76\fi\or\ifcase\cD@bG66\or27\or25\or67\or22\fi\fi\relax}\def\cD@iG#1{\hbox {#1\setbox0=\cD@OG{#1}\ifPositiveGradient\else\raise.3\ht0\fi\copy0 \kern-.7% \wd0 \ifPositiveGradient\raise.3\ht0\fi\box0}}\def\cD@tG#1{\hbox{\setbox0=#1% \kern-.75\wd0 \vbox to.25\ht0{\ifPositiveGradient\else\vss\fi\box0 \ifPositiveGradient\vss\fi}}}\def\cD@WH#1{\hbox{\setbox0=#1\dimen0=\wd0 \vbox to.25\ht0{\ifPositiveGradient\vss\fi\box0 \ifPositiveGradient\else\vss\fi}% \kern-.75\dimen0 }}\cD@CC{+h:>}{\cD@OG\cD@JG}\cD@CC{-h:>}{\cD@OG\cD@KG}\cD@fD {+t:<}{-h:>}\cD@fD{-t:<}{+h:>}\cD@CC{+t:>}{\cD@tG{\cD@OG\cD@JG}}\cD@CC{-t:>}{% \cD@WH{\cD@OG\cD@KG}}\cD@fD{+h:<}{-t:>}\cD@fD{-h:<}{+t:>}\cD@CC{+h:>>}{\cD@iG \cD@JG}\cD@CC{-h:>>}{\cD@iG\cD@KG}\cD@fD{+t:<<}{-h:>>}\cD@fD{-t:<<}{+h:>>}% \cD@CC{+t:>>}{\cD@tG{\cD@iG\cD@JG}}\cD@CC{-t:>>}{\cD@WH{\cD@iG\cD@KG}}\cD@fD{% +h:<<}{-t:>>}\cD@fD{-h:<<}{+t:>>}\cD@CC{+f:-}{\cD@rG\null\else\cD@NG\fi}% \cD@fD{-f:-}{+f:-}\def\cD@hG#1#2{\vbox to#1{\vss\hbox to#2{\hss.\hss}\vss}}% \def\hfdot{\cD@hG{2\axisheight}{.7em}}%% \def\vfdot{\cD@hG{1.46ex}\z@}\def\cD@MG{\hbox{\dimen0=.3\cD@nH\dimen1\dimen0 \ifnum\cD@NH>\cD@bG\cD@fG{\dimen1}\else\cD@DH{\dimen0}\fi\cD@hG{\dimen0}{% \dimen1}}}\newarrowfiller{.}\hfdot\hfdot\vfdot\vfdot\cD@CC{+f:.}{\cD@MG\cD@DG }\cD@fD{-f:.}{+f:.}\def\use@line@char#1{\hbox\bgroup\def\cD@ME{#1\egroup}% \afterassignment\cD@ME%% \count@=\rq}\def\lnchar{\use@line@char\cD@vG}\let\laf\lnchar\let\lah\lnchar \def\lad{\use@line@char\xlad}\def\xlad{\setbox2=\hbox{\cD@vG}\setbox0=\hbox to% .3\wd2{\hss.\hss}\dimen0=\ht0 \advance\dimen0-\dp0 \dimen1=.3\ht2 \advance \dimen1-\dimen0 \dp0=.5\dimen1 \dimen1=.3\ht2 \advance\dimen1\dimen0 \ht0=.5% \dimen1 \raise\dp0\box0}\def\lahh{\use@line@char\xlahh}\def\lat{% \use@line@char\xlat}\def\xlat{\setbox0=\hbox{\cD@vG}\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@vG}\ifPositiveGradient\cD@ZF\copy0 \kern-.7% \wd0 \mv.3\ht0\box0 \else\ifClimbing\cD@ZF\copy0 \kern-.7\wd0 \mv.3\ht0\box0 \else\mv-.3\ht0\copy0 \kern-.7\wd0 \box0 \fi\fi}\def\cD@IG#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@kB{diagonal line too short}\fi\else\dimen3=\dimen5 \advance\dimen3-\dimen1 \divide\dimen3% \count@\dimen4\dimen3 \cD@DH{\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@@H#1{% \cD@rG\cD@hH{#1}\else\cD@IG{#1}\fi}\newdimen\cD@OH\cD@OH1.8ex \newdimen\cD@PH \cD@PH1em \def\cD@kG{\dimen6=\cD@nF\DiagramCellHeight\dimen7=\cD@kF \DiagramCellWidth\cD@ZH\ifnum\cD@NH>0 \ifnum\cD@bG>0 \cD@oF\else\aftergroup \cD@dG\fi\else\aftergroup\cD@cG\fi}\def\cD@dG{\cD@AB{diagonal map is nearly vertical}\cD@SG}\def\cD@cG{\cD@AB{diagonal map is nearly horizontal}\cD@SG}% \cD@GE\cD@SG{Use an orthogonal map instead}\def\cD@oF{\cD@aH\dimen3\dimen7% \dimen7\dimen6\cD@fG{\dimen7}\advance\dimen3-\dimen7 \cD@mI\ifnum\cD@NH>% \cD@bG\advance\dimen6-\dimen1\advance\dimen6-\dimen5 \cD@fG{\dimen1}\cD@fG{% \dimen5}\else\dimen0\dimen1\advance\dimen0\dimen5\cD@DH{\dimen0}\advance \dimen6-\dimen0 \fi\dimen2.5\dimen7\advance\dimen2-\dimen1 \dimen4.5\dimen7% \advance\dimen4-\dimen5 \ifPositiveGradient\dimen0\dimen5 \advance\dimen1-% \cD@kF\DiagramCellWidth\advance\dimen1\DiagramCellWidth\setbox6=\llap{\unhbox 6\kern.1\ht2}\setbox7=\rlap{\kern.1\ht2\unhbox7}\else\dimen0\dimen1 \advance \dimen1-\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@DH{\dimen0}\advance\dimen0-\axisheight\advance\dimen0-% \DiagramCellHeight\dimen5-\dimen0 \advance\dimen0\dimen6 \advance\dimen1.5% \dimen3 \ifdim\wd3>\z@\ifdim\ht3>-\dp3\cD@c\fi\fi\dimen3\dimen2 \dimen7\dimen 2\advance\dimen7\dimen4 \ifvoid3 \else\cD@PD\else\dimen8\ht3\advance\dimen8-% \axisheight\cD@fG{\dimen8}\cD@QG{\dimen8}{.5\wd3}\dimen9\dp3\advance\dimen9% \axisheight\cD@fG{\dimen9}\cD@QG{\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@nF \DiagramCellHeight\advance\dimen9-2\DiagramCellHeight\cD@PD\advance\dimen2% \dimen4 \cD@@H{2}\dimen2-\dimen0\advance\dimen2\dp2 \else\cD@@H{2}\cD@@H{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@PD\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}\ht 0=\axisheight\dp0=-\ht0\box0 }\def\NorthWest{\cD@JA\cD@HA\DiagonalChoice0 }% \def\NorthEast{\cD@KA\cD@HA\DiagonalChoice1 }\def\SouthWest{\cD@KA\cD@GA \DiagonalChoice3 }\def\SouthEast{\cD@JA\cD@GA\DiagonalChoice2 }\def\cD@fC#1{% \expandafter\cD@XI{#1}}\cD@BB\cD@dF{output is PostScript dependent}\def\cD@DC {\cD@XI{/bturn {gsave currentpoint currentpoint translate 4 2 roll neg exch atan rotate neg exch neg exch translate } def /eturn {currentpoint grestore moveto} def}\let\cD@DC\relax}\def\cD@bH#1{\count@#1\relax\multiply\count@7% \advance\count@16577\divide\count@33154 }\def\cD@lG#1{\expandafter\special{#1% }} \def\cD@hH#1{\setbox#1=\hbox{\dimen0\dimen#1\cD@DH{\dimen0}\cD@bH{\dimen0}% \setbox0=\null\ifPositiveGradient\count@-\count@\ht0\dimen0 \else\dp0\dimen0 \fi\box0 \cD@LB\count@\cD@bH\cD@NI\cD@lG{pn \the\count@}\cD@lG{pa 0 0}\cD@bH{% \dimen#1}\cD@lG{pa \the\count@\space\the\cD@LB}\cD@lG{fp}\kern\dimen#1}}\def \cD@LA{\cD@ZH\begingroup\ifdim\dimen7<\dimen6 \dimen2=\dimen6 \dimen6=\dimen7 \dimen7=\dimen2 \count@\cD@NH\cD@NH\cD@bG\cD@bG\count@\else\dimen2=\dimen7 \fi \ifdim\dimen6>.01\p@\cD@BA\global\cD@vA\dimen0 \else\global\cD@vA\dimen7 \fi \endgroup\dimen2\cD@vA}\def\cD@BA{\cD@fH\ifdim\dimen7>1.73\dimen6 \divide \dimen2 4 \multiply\cD@bG2 \else\dimen2=0.353553\dimen2 \advance\cD@NH-\cD@bG \multiply\cD@bG4 \fi\dimen0=4\dimen2 \cD@CH4\cD@CH{-2}\cD@CH2\cD@CH{-2.5}}% \def\cD@UH{\begingroup\count@\dimen0 \dimen2 45pt \divide\count@\dimen2 \ifdim \dimen0<\z@\advance\count@\m@ne\fi\ifodd\count@\advance\count@1\cD@L\else \cD@K\fi\advance\dimen0-\count@\dimen2 \cD@GD\multiply\dimen0\m@ne\fi\ifnum \count@<0 \multiply\count@-7 \fi\dimen3\dimen1 \dimen6\dimen0 \dimen7 3754936% sp \ifdim\dimen0<6\p@\def\cD@BH{4000}\fi\cD@ZH\dimen2\dimen3\cD@DH{\dimen2}% \cD@fH\multiply\cD@bG-6 \dimen0\dimen2 \cD@CH1\cD@CH{0.3}\dimen1\dimen0 \dimen 2\dimen3 \dimen0\dimen3 \cD@CH3\cD@CH{1.5}\cD@CH{0.3}\divide\count@2 \cD@GD \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@vA\dimen0\global\cD@wA\dimen1\endgroup\dimen6\cD@vA\dimen7% \cD@wA}\def\cD@BH{255}\def\cD@ZH{\begingroup\ifdim\dimen7<\dimen6 \dimen9% \dimen7\dimen7\dimen6\dimen6\dimen9\cD@L\else\cD@K\fi\dimen2\z@\dimen3\cD@SH \dimen4\cD@SH\dimen0\z@\dimen8=\cD@BH\cD@SH\cD@gG\global\cD@PB\dimen\cD@GD0% \else3\fi\global\cD@VG\dimen\cD@GD3\else0\fi\endgroup\cD@NH\cD@PB\cD@bG\cD@VG }\def\cD@gG{\count@\dimen6 \divide\count@\dimen7 \advance\dimen6-\count@ \dimen7 \dimen9\dimen4 \advance\dimen9\count@\dimen0 \ifdim\dimen9>\dimen8 \cD@ZG\else\cD@aG\ifdim\dimen6>\z@\dimen9\dimen6 \dimen6\dimen7 \dimen7\dimen 9 \expandafter\expandafter\expandafter\cD@gG\fi\fi}\def\cD@ZG{\ifdim\dimen0=% \z@\ifdim\dimen9<2\dimen8 \dimen0\dimen8 \fi\else\advance\dimen8-\dimen4 \divide\dimen8\dimen0 \ifdim\count@\cD@SH<2\dimen8 \count@\dimen8 \dimen9% \dimen4 \advance\dimen9\count@\dimen0 \cD@aG\fi\fi}\def\cD@aG{\dimen4\dimen0 \dimen0\dimen9 \advance\dimen2\count@\dimen3 \dimen9\dimen2 \dimen2\dimen3 \dimen3\dimen9 }\def\cD@CH#1{\cD@DH{\dimen2}\advance\dimen0 #1\dimen2 }\def \cD@DH#1{\divide#1\cD@bG\multiply#1\cD@NH}\def\cD@fG#1{\divide#1\cD@NH \multiply#1\cD@bG}\def\cD@fH{\dimen6\cD@NH\cD@SH\multiply\dimen6\cD@NH\dimen7% \cD@bG\cD@SH\multiply\dimen7\cD@bG\cD@ZH}\ifx\errorcontextlines\undefined \cD@ZF\let\cD@QE\relax\else\def\cD@QE{\errorcontextlines\m@ne}\fi\ifnum \inputlineno<0 \let\cD@SC\empty\let\cD@YA\empty\let\cD@jC\relax\let\cD@LF \relax\let\cD@MF\relax\let\cD@yG\relax\message{! Why not upgrade to TeX version 3? (available since 1990)}\else\def\cD@YA{ at line \number \inputlineno}\def\cD@jC{ - first occurred}\def\cD@LF{\edef\cD@bA{\the \inputlineno}}\def\cD@bA{9999}\def\cD@MF{\edef\cD@nB{\the\inputlineno}}\def \cD@nB{\cD@bA}\def\cD@yG{\ifnum\cD@bA<\inputlineno\edef\cD@SC{\space at lines \cD@bA--\the\inputlineno}\else\edef\cD@SC{\cD@YA}\fi}\fi\let\cD@SC\empty\def \cD@AB#1#2{\cD@QE\errhelp=#2\expandafter\errmessage{\cD@KB: #1}}\def\cD@WB#1{% {\expandafter\message{! \cD@KB: #1\cD@SC}}}\def\cD@kB#1{{\expandafter\message {\cD@KB\space Warning: #1\cD@YA}}}\def\cD@TB#1#2{\cD@kB{#1 \string#2 is obsolete\cD@jC}}\def\cD@RB#1{\cD@TB{Dimension}{#1}\cD@nG#1\cD@SB\cD@SB}\def \cD@SB{\cD@tA=}\def\cD@QB#1{\cD@TB{Count}{#1}\cD@nG#1\cD@y\cD@y}\def\cD@y{% \count@=}\def\HorizontalMapLength{\cD@RB\HorizontalMapLength}\def \VerticalMapHeight{\cD@RB\VerticalMapHeight}\def\VerticalMapDepth{\cD@RB \VerticalMapDepth}\def\VerticalMapExtraHeight{\cD@RB\VerticalMapExtraHeight}% \def\VerticalMapExtraDepth{\cD@RB\VerticalMapExtraDepth}\def \DiagonalLineSegments{\cD@QB\DiagonalLineSegments}\ifx\tenln\nullfont\cD@BB \cD@RE{\cD@sH\space diagonal line and arrow font not available}\else\let \cD@RE\relax\fi\def\cD@zD#1#2<#3:#4:#5#6{\ifnum#6>#5\count@#6\advance\count@-% #5\cD@uA#3\advance\cD@uA-#2\if#1v \let\cD@ME\cD@eF\else\advance\count@\count@ \if#1l\advance\count@-\cD@MA\else\if#1r\advance\count@\cD@MA\fi\fi\advance \cD@uA\cD@uA\let\cD@ME\cD@CD\fi\divide\cD@uA\count@\ifdim\cD@ME<\cD@uA\cD@ME \cD@uA\fi\fi}\cD@HE\cD@QD\cD@j\cD@i\cD@GE\cD@NF{See the message above.}\cD@GE \cD@gE{Perhaps you've forgotten to end the diagram before resuming the text, in\cD@IE which case some garbage may be added to the diagram, but we should be ok now.\cD@IE Alternatively you've left a blank line in the middle - TeX will now complain\cD@IE that the remaining \cD@XA s are misplaced - so please use comments for layout.}\cD@GE\cD@hC{You have already closed too many brace pairs or environments; an \cD@UC\cD@IE command was (over)due.}\cD@GE\cD@dE{\cD@IC \space and \cD@UC\space commands must match.}\def\cD@eE{\ifnum\inputlineno=0 \else\expandafter\cD@@A\fi}\def\cD@@A{\cD@VC\cD@DI\crcr\cD@AB{missing \cD@UC \space inserted before \cD@fE- type "h"}\cD@gE\enddiagram\cD@lD\cD@fE\par}% \def\cD@lD#1{\edef\enddiagram{\noexpand\cD@mC{#1\cD@YA}}}\def\cD@mC#1{\cD@AB{% \cD@UC\space(anticipated by #1) ignored}\cD@NF\let\enddiagram\cD@wD}\def \cD@wD{\cD@AB{misplaced \cD@UC\space ignored}\cD@dE}\def\cD@MC{\cD@AB{missing \cD@UC\space inserted.}\cD@hC\cD@lD{closing group}} \ifx\DeclareOption\undefined\else\DeclareOption*{\expandafter\cD@qI \CurrentOption==,\cD@NC}\ProcessOptions\relax\fi %%======================================================================% %% % %% (21) 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\@scriptaxis#1{\dimen0\axisheight\advance\dimen0-\fontdimen22\the \scriptfont2\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 \def\raisehook#1#2#3{% %% #1= {} or \boldmath; #2= + or -; #3=\subset or \supset \setbox0=\hbox{#1$\scriptscriptstyle#3$}%% the character to use \dimen0\fontdimen22\the\scriptscriptfont2%% \scriptscriptstyle axis height \dimen1\axisheight\advance\dimen1-\dimen0%% difference in axis heights \dimen2\ht0\advance\dimen2-\dimen0% %% height of char above axis (half spread) \advance\dimen1 #2\dimen2%% shift = axis_difference +/- half_spread \raise\dimen1\box0}%% print the character %% Mark Dawson suggested using the width \def\shifthook#1#2#3{\setbox0=\hbox{#1$\scriptscriptstyle#3$}\dimen0\wd0% \divide\dimen0 12\cD@RI{\dimen0}%% "u" \dimen1\wd0\advance\dimen1-2\dimen0\advance\dimen1-\cD@bI\cD@RI{\dimen1}\kern #2\dimen1\box0}%% 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\SEpbk{\rlap{\smash{\kern0.1em \vrule depth 2.67ex height -2.55ex width 0% .9em \vrule height -0.46ex depth 2.67ex width .05em }}} \def\SWpbk{\llap{\smash{\vrule height -0.46ex depth 2.67ex width .05em \vrule depth 2.67ex height -2.55ex width .9em \kern0.1em }}} \def\NEpbk{\rlap{\smash{\kern0.1em \vrule depth -3.48ex height 3.67ex width 0% .95em \vrule height 3.67ex depth -1.39ex width .05em }}} \def\NWpbk{\llap{\smash{\vrule height 3.6ex depth -1.39ex width .05em \vrule depth -3.48ex height 3.67ex width .95em \kern0.1em }}} \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 }} %%======================================================================% %% % %% (22) 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\mkern1mu}%% \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-.4ex \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\lthookb\dthooka\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\ltbhookb\dthbooka\utbhooka\fi %% 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 %% ********** 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@NI height0.6ex depth 0pt}%% \def\hfthedash{\cD@QF\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}%% %%======================================================================% %% % %% (22) 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}%% \newarrow{Eq}=====%% \newarrow{Line}-----%% \newarrow{Dots}.....%% \newarrow{Dashes}{}{dash}{}{dash}{}%% %% 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 %%======================================================================% %% % %% (23) MISCELLANEOUS % %% % %%======================================================================% \def\labelstyle{%% \ifincommdiag%% \textstyle%% \else%% \scriptstyle%% \fi}%% \let\objectstyle\displaystyle \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 l>=20pt%% minimum length of horizontal arrow shafts %% size=3em defaulted on entry to the diagram itself %% heads=LaTeX also defaulted ]%%ascii close square bracket \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 %%