Sharedwww / diagrams.texOpen in CoCalc
% mangletex (11 May 1992) run at 14:41 BST Monday 02 September 1996
\message{<Paul Taylor's commutative diagrams, version 3.84, September 1996>}%
%%======================================================================%
%%      TeX  macros for drawing category-theoretic diagrams             %
%%                                                                      %
%%                              Paul  Taylor                            %
%%                                                                      %
%%                       Department of Computer Science,                %
%%                      Queen Mary and Westfield College,               %
%%                              London E1 4NS                           %
%%                            +44 171 975 5241                          %
%%                             [email protected].qmw.ac.uk                         %
%%                       http://www.dcs.qmw.ac.uk/~pt                   %
%%                                                                      %
%%                           PLEASE READ THE MANUAL!                    %
%%                                                                      %
%%      The authoritative version is available by anonymous ftp from:   %
%%    ftp://ftp.dcs.qmw.ac.uk/pub/tex/contrib/pt/diagrams/diagrams.tex  %
%%                                                                      %
%%      Also available from the Comprehensive TeX Archive Network as    %
%%              macros/generic/diagrams/taylor/diagrams.tex             %
%%      For example, ftp://ftp.tex.ac.uk/tex-archive/macros/...         %
%%                                                                      %
%%      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).  %
%%                                                                      %
%%                                                                      %
%% CONTENTS:                                                            %
%%  (O) corruption-sensitive hacks    (to approx line 330)              %
%%              Arrow components & commands - starts approx line 1175   %
%% (21) auxillary macros for adjustment of components                   %
%% (22) bits of arrows  (\rhvee etc)                                    %
%% (23) arrow commands  (\rTo etc)                                      %
%% (24) miscellaneous                                                   %
%% Apart from these five sections, the rest is intended to be totally   %
%% meaningless in the undocumented version, which is approximately 1820 %
%% 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.84 Released 2 September 1996                                       %
%%      Fixed undefined control sequence in \luOnto[dotted,PS]          %
%%      Use \AtEndDocument to give once-only warnings.                  %
%%      Report unknown grid correctly.                                  %
%% 3.83 Released 18 May 1995                                            %
%%      "dotted" option (set dot filler on maps)                        %
%%      Fixed bug with interaction with amslatex/equation.              %
%%      Parallel maps (\pile) outside diagrams stretch correctly.       %
%%      Avoid stepped lines in PostScript by restricting the slopes.    %
%%      Rightmost width now calculated correctly.                       %
%%      Fewer "arrow too short" errors (the l> option for eliminating   %
%%      birds' feet arrows is only applied in text, l>.5em in diagrams).%
%%      "midshaft" option now works; "midvshaft" ignored.               %
%%      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.       %
%%      Recover from square brackets mis-interpreted as options.        %
%% 3.82                                                                 %
%% 3.81 Second alpha release 18 July 1994                               %
%%      Fixed displaced parenthesis instead of hook tails in manual p8. %
%%      Parentheses and braces (not quite right): see end of source.    %
%%      \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.              %
%%      Some options can now take (x,y) values.                         %
%%      Name of DVI->PS translator as argument to PostScript option.    %
%%      Improved recovery from missing {} in labels.                    %
%%      Removed error message from \across since this works now.        %
%%      Loading after \begin{document} in LaTeX2e possible.             %
%%      Loading before \documentstyle or \documentclass possible.       %
%%      Equilateral triangle or regular hexagon size options.           %
%%      Introduced landscape and portrait options.                      %
%%      Define PS commands once for each (outermost) diagram needing    %
%%      them; previously they were defined for every map.               %
%%      Don't hide width of vertical middle components.                 %
%%      Parse []-options during label processing.                       %
%%      Made midhshaft work; always set it for single-row diagrams.     %
%%      \diagramstyle may be used within diagrams.                      %
%%      Vertical maps targetted at labels of horizontals avoid them.    %
%%      Wide object on right no longer causes "increase width" warning. %
%%      Make these warnings more accurate and informative.              %
%%      Fixed decapitated arrows (I think!).                            %
%%      Diagonals adjusted to meet their endpoints, at last!!!!         %
%%      Most of the history has been suppressed from the user version.  %
%% 3.29 Released 11 March 1994                                          %
%% 3.28 Released 30 November 1993                                       %
%%      Peter Freyd's \puncture symbol provided.                        %
%% 3.27 Released 26 March 1993                                          %
%% 3.26 Released 11 February 1993                                       %
%% 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.  %
%%      Warning if diagonals used & columns stretched significantly.    %
%%      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 \[email protected]@line.   %
%%      New reformatting program.                                       %
%%      Optional arguments on \diagram, maps and \diagramstyle.         %
%% 3.20 (29.4.92) early release of version 4                            %
%%      Postscript arrows (basic code).                                 %
%%      Implemented \newarrow \newarrowhead etc.                        %
%%      Corruption-sensitive characters avoided wherever possible.      %
%%      Reloading prevented.                                            %
%%      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                %
%%======================================================================%

%%======================================================================%
%%                                                                      %
%%      (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 \[email protected])****

%% 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 @[email protected]
}\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\[email protected]@messages\undefined\let\[email protected]@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\[email protected]#1{\special{ps:#1}}\let\[email protected]\[email protected]\let
\[email protected]\[email protected]\let\[email protected]\[email protected]\let\[email protected]\[email protected]
%%
%% 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\[email protected]#1{\special{dvitps: Literal "#1"}}%
%% ASCII two dbl quotes
\let\[email protected]\[email protected]\let\[email protected]
\[email protected]%%
%% dvitops (James Clark)
%% CTAN: dviware/dvitops
\def\[email protected]#1{\special{dvitops: inline #1}}%%
\let\[email protected]\[email protected]%%
%% OzTeX (Andrew Trevorrow) cannot be used
\let\[email protected]\empty\let\[email protected]\empty\let\[email protected]\empty%%
%% dvi3ps (Kevin Coombes)
%% CTAN: dviware/dvi2ps/dvi3ps
\def\[email protected]#1{\special{ps-string #1}}%%
%% psprint (Trevorrow) CTAN: dviware/psprint
%% dvi2ps (Senn) CTAN: dviware/dvi2ps
%% psdvi (Elwell) CTAN: dviware/dvi2ps/psdvi

\[email protected]=\year\multiply\[email protected]12 \advance\[email protected]\month%%
\ifnum\[email protected]>23972 %% (1 Sept 1997) It's changing very fast at the moment!
\message{***********************************************************}%%ascii
\message{! THIS IS AN EXPERIMENTAL VERSION OF COMMUTATIVE DIAGRAMS *}%%
\message{! it expired in August 1996 and is time-bombed for January *}%%
\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
\ifnum\[email protected]>23975 %% (1 Dec 1997)
\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\[email protected]{\global\let}\def\[email protected]{\outer\def}

%% safe names for braces, tab (&) and maths ($), as commands and for messages
{\escapechar\[email protected]\xdef\[email protected]{\string\{}\xdef\[email protected]{\string\}}%%
%%
%% three ASCII ampersands (ands) (&&&) appear on the next line
\catcode\lq\&=4 \[email protected]\[email protected]=&\xdef\[email protected]{\string\&}%%ascii three ands
%%
%% ASCII ^ and _ each appear twice on next line
%% six ASCII dollars ($$$$$$) appear on the next two lines.
\catcode\lq\$=3 \[email protected]\[email protected]=$\[email protected]\[email protected]=$%%ascii three dollars
\xdef\[email protected]{\string\$}\gdef\[email protected]{$$}%%ascii three dollars
%%
%% two ASCII underlines (__) appear on the next line.
\catcode\lq\_=8 \[email protected]\@sub=_%%ascii two underlines
%%
%% six ASCII carets (^^^^^^) appear on the next three lines.
\obeylines\catcode\lq\^=7 \[email protected]\@super=^%%ascii two carets
\ifnum\newlinechar=10 \gdef\[email protected]{^^J}%%ascii two carets
\else\ifnum\newlinechar=13 \gdef\[email protected]{^^M}%%ascii two carets
\else\[email protected]\[email protected]\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
\[email protected]\message{***************************************************}\message{!
Obsolete TeX (version 2). You should upgrade to *}\message{! version 3, which
has been available since 1990. *}\message{***********************************%
****************}\fi

\newif\[email protected]

\def\[email protected]#1{\[email protected]{* THIS (#1) SHOULD NEVER HAPPEN! *}}

%% turn round- and square-bracketed arguments into curly-bracketed
\def\[email protected]@pair#1(#2,#3){#1{#2}{#3}}%%ascii round brackets ()
\def\[email protected]@arg#1[#2]{#1{#2}}%%ascii square brackets []
\def\[email protected]#1{\[email protected]\let\[email protected]\[email protected]\[email protected]#1,],}%%ascii sq brackets
\def\[email protected]{[}\def\[email protected]{]}\def\commdiag#1{{\let\enddiagram\relax\diagram[]#1%
\enddiagram}}

%% ASCII open square bracket occurs on next line
\def\[email protected]{{\ifx\[email protected][\aftergroup\[email protected]@arg\aftergroup\[email protected]\else
\aftergroup\[email protected]\fi}}%%
\def\[email protected]#1#2{\def\[email protected]{#1}\def\[email protected]{#2}\futurelet\[email protected]\[email protected]}

%% ASCII vertical bar (|) occurs on the next line
\def\[email protected]{|}

\def\[email protected]{%% arguments to maps inside diagrams
\tokcase\[email protected]:\[email protected]\[email protected];\catcase\@super:\[email protected];\catcase\@sub:%
\[email protected];\tokcase{~}:\[email protected];%%ascii tilde
\tokcase<:\[email protected];%%ascii less-than
\tokcase>:\[email protected];%%ascii greater-than
\tokcase(:\[email protected];%%)%ascii open round bracket
\tokcase[:\[email protected];%%]%ascii open square bracket
\tokcase.:\[email protected];%%ascii dot 12.7.94
\catcase\space:\[email protected];\catcase\bgroup:\[email protected];\default:\[email protected]@A
\[email protected];\endswitch}

\def\[email protected]{%% arguments to horizontal maps outside diagrams
\catcase\@super:\[email protected];\catcase\@sub:\[email protected];\tokcase[:\[email protected];%
%%]%ascii open square bracket
\tokcase.:\[email protected]:%%ascii dot 12.7.94
\catcase\space:\[email protected];\catcase\bgroup:\[email protected];\tokcase{~}:%
\[email protected];%%ascii tilde (questionable!)
\default:\[email protected]\[email protected];\endswitch}

%% That's as much as you get to read "in clear" - the rest is private!

\let\[email protected]\relax\ifx\protect\undefined\let\protect\relax\fi\ifx\AtEndDocument
\undefined\let\[email protected]\[email protected]\def\[email protected]@end#1#2{}\else\def\[email protected]#1{\edef\[email protected]
{#1}\expandafter\[email protected]\[email protected]\[email protected]}\def\[email protected]#1\[email protected]{\AtEndDocument{\typeout
{\[email protected]: #1}}}\def\[email protected]@end#1#2{\gdef#1{#2}\AtEndDocument{#1}}\fi\def
\[email protected]#1#2{\def#1{\[email protected]{#2\[email protected]\[email protected]}\[email protected]#1\relax}}\def\[email protected]#1\repeat{%
\def\[email protected]{#1}\[email protected]@F}\def\[email protected]@F{\[email protected]\relax\expandafter\[email protected]@F\fi}\def\[email protected]#1%
\repeat{\def\[email protected]{#1}\[email protected]}\def\[email protected]{\[email protected]\relax\expandafter\[email protected]\fi}\def
\[email protected]#1\repeat{\def\[email protected]{#1}\[email protected]}\def\[email protected]{\[email protected]\relax\expandafter\[email protected]
\fi}\def\[email protected]#1#2#3{\def#2{\let#1\iftrue}\def#3{\let#1\iffalse}#3}\if y%
\[email protected]@messages\def\[email protected]#1#2{\csname newtoks\endcsname#1#1=%
\expandafter{\csname#2\endcsname}}\else\csname newtoks\endcsname\[email protected]@help
\[email protected]@help{See the manual}\def\[email protected]#1#2{\let#1\[email protected]@help}\fi\chardef\[email protected]
=1 \chardef\[email protected]=2 \chardef\[email protected]=5 \chardef\[email protected]=6 \chardef\[email protected]=7
\chardef\[email protected]=9 \dimendef\[email protected]=2 \dimendef\[email protected]=3 \dimendef\[email protected]=4
\dimendef\[email protected]=5 \dimendef\[email protected]=6 \dimendef\[email protected]=8 \dimendef\[email protected]=9
\skipdef\[email protected]=1 \skipdef\[email protected]=2 \skipdef\[email protected]=3 \skipdef\[email protected]=4 \skipdef
\[email protected]=5 \skipdef\[email protected]=6 \skipdef\[email protected]=7 \skipdef\[email protected]=8 \skipdef\[email protected]=9
\countdef\[email protected]=9 \countdef\[email protected]=8 \countdef\[email protected]=7 \def\sdef#1#2{\def#1{#2}%
}\def\[email protected]#1{\expandafter\aftergroup\csname#1\endcsname}\def\[email protected]#1{%
\expandafter\def\csname#1\endcsname}\def\[email protected]#1{\expandafter\gdef\csname#1%
\endcsname}\def\[email protected]#1{\expandafter\edef\csname#1\endcsname}\def\[email protected]#1#2{%
\expandafter\let\csname#1\expandafter\endcsname\csname#2\endcsname}\def\[email protected]
#1#2{\expandafter\[email protected]\csname#1\expandafter\endcsname\csname#2\endcsname}%
\def\[email protected]#1{\csname#1\endcsname}\def\[email protected]#1{\expandafter\show\csname#1%
\endcsname}\def\[email protected]#1{\expandafter\showthe\csname#1\endcsname}\def\[email protected]#1{%
\expandafter\showbox\csname#1\endcsname}\def\[email protected]{Commutative Diagram}\edef
\[email protected]{\string\par}\edef\[email protected]{\string\diagram}\edef\[email protected]{\string\enddiagram
}\edef\[email protected]{\string\\}\def\[email protected]{LaTeX}\def\[email protected]{{\ifnum0=\lq}\fi}\def\[email protected]
{\ifnum0=\lq{\fi}}\def\catcase#1:{\ifcat\noexpand\[email protected]#1\[email protected]\expandafter
\[email protected]\else\expandafter\[email protected]\fi}\def\tokcase#1:{\ifx\[email protected]#1\[email protected]
\expandafter\[email protected]\else\expandafter\[email protected]\fi}\def\[email protected]#1;#2\endswitch{#1}%
\def\[email protected]#1;{}\let\endswitch\relax\def\default:#1;#2\endswitch{#1}\ifx\[email protected]
\undefined\def\[email protected]{@}\fi\edef\[email protected]{\[email protected] pt\[email protected]}\[email protected]{\[email protected]>}#1>#2>{\[email protected]
\rTo\sp{#1}\sb{#2}\[email protected]}\[email protected]{\[email protected]<}#1<#2<{\[email protected]\lTo\sp{#1}\sb{#2}\[email protected]}%
\[email protected]{\[email protected])}#1)#2){\[email protected]\rTo\sp{#1}\sb{#2}\[email protected]}%%ascii round
\[email protected]{\[email protected](}#1(#2({\[email protected]\lTo\sp{#1}\sb{#2}\[email protected]}%%ascii brack
\def\[email protected]{\def\endCD{\enddiagram}\[email protected]{\[email protected] A}##1A##2A{\uTo<{##1}>{##2}%
\[email protected]\[email protected]}\[email protected]{\[email protected] V}##1V##2V{\dTo<{##1}>{##2}\[email protected]\[email protected]}\[email protected]{\[email protected]=}{%
\[email protected]\hEq\[email protected]}\[email protected]{\[email protected]\[email protected]}{\vEq\[email protected]\[email protected]}\[email protected]{\[email protected]\string\vert}{%
\vEq\[email protected]\[email protected]}\[email protected]{\[email protected].}{\[email protected]\[email protected]}\let\[email protected]\[email protected]}\def\[email protected]{\let\tmp
\[email protected]@E\ifcat A\noexpand\[email protected]\else\ifcat=\noexpand\[email protected]\else\ifcat\relax
\noexpand\[email protected]\else\let\tmp\[email protected]\fi\fi\fi\tmp}\def\[email protected]@E#1{\[email protected]{tmp}{\[email protected]
\string#1}\ifx\tmp\relax\def\tmp{\[email protected]#1}\fi\tmp}\def\[email protected]{}\begingroup
\aftergroup\def\aftergroup\[email protected]\aftergroup{\aftergroup\def\catcode\lq\@%
\active\aftergroup @\endgroup{\futurelet\[email protected]\[email protected]}}\newcount\[email protected]
\newcount\[email protected]\newcount\[email protected]\newcount\[email protected]\newdimen\[email protected]\newdimen\[email protected]
\[email protected]\[email protected]\[email protected]@A\[email protected]\[email protected]\[email protected]\[email protected]\[email protected]\newdimen\[email protected]\newdimen\[email protected]
\newcount\[email protected]\newcount\[email protected]\newdimen\[email protected]\newbox\[email protected]\[email protected]\[email protected]\[email protected]
\[email protected]\newcount\[email protected]\newcount\[email protected]\def\[email protected]#1#2{\ifdim#1<#2\relax#1=#2%
\relax\fi}\def\[email protected]#1#2{\ifdim#1>#2\relax#1=#2\relax\fi}\newdimen\[email protected]\[email protected]
=1sp \newdimen\[email protected]\[email protected]\[email protected]\def\[email protected]{\ifdim\[email protected]=1em\else\[email protected]\fi}\def
\[email protected]{\[email protected]1em\def\[email protected]{\fontdimen8\textfont3 }\[email protected]\[email protected]\setbox0=\vbox{%
\[email protected]\noindent\[email protected]\null\penalty-9993\null\[email protected]\null\endgraf\setbox0=%
\lastbox\unskip\unpenalty\setbox1=\lastbox\global\setbox\[email protected]=\hbox{\unhbox0%
\unskip\unskip\unpenalty\setbox0=\lastbox}\global\setbox\[email protected]=\hbox{\unhbox1%
\unskip\unpenalty\setbox1=\lastbox}}}\newdimen\[email protected]\[email protected]=1true in \divide
\[email protected]300 \def\[email protected]#1{\multiply#1\[email protected]\advance#1\ifnum#1<\[email protected]-\else+\fi\[email protected]
\divide#1\[email protected]\divide#1\[email protected]\multiply#1\[email protected]}\def\MapBreadth{%
\afterassignment\[email protected]\[email protected]}\newdimen\[email protected]\newdimen\[email protected]\def\[email protected]{\[email protected]
\[email protected]\[email protected]\[email protected]{4\[email protected]}\[email protected]\[email protected]\[email protected]\[email protected]\[email protected]\ifdim\[email protected]>\[email protected]\[email protected]
\[email protected]\[email protected]\fi\[email protected]}\def\[email protected]#1{\[email protected]\[email protected]\[email protected]#1\ifnum\[email protected]>\[email protected]
\divide\[email protected]\[email protected]\fi\[email protected]\[email protected]}\def\[email protected]{\[email protected]\[email protected]\[email protected]\[email protected]
\divide\[email protected]5\divide\[email protected]\[email protected]\edef\[email protected]{\the\[email protected]}}\def\[email protected]{%
\[email protected]\axisheight\advance\[email protected]-.5\[email protected]\[email protected]\[email protected]\[email protected]-\[email protected]\advance
\[email protected]\[email protected]}\def\[email protected]{\[email protected]\[email protected]\[email protected]\[email protected]\relax}\def\horizhtdp{height%
\[email protected] depth\[email protected]}\def\axisheight{\fontdimen22\the\textfont\[email protected]}\def
\[email protected]{\fontdimen22\the\scriptfont\[email protected]}\def\[email protected]{%
\fontdimen22\the\scriptscriptfont\[email protected]}\def\[email protected]{0.4pt}\def\[email protected]{\fontdimen3%
\textfont\[email protected]}\def\[email protected]{\fontdimen3\textfont\[email protected]}\newdimen\PileSpacing
\newdimen\[email protected]\[email protected]\[email protected]\def\[email protected]{\ifincommdiag1.3em\else2em\fi}\newdimen
\[email protected]\def\CellSize{\afterassignment\[email protected]\DiagramCellHeight}\newdimen
\DiagramCellHeight\DiagramCellHeight-\maxdimen\newdimen\DiagramCellWidth
\DiagramCellWidth-\maxdimen\def\[email protected]{\DiagramCellWidth\DiagramCellHeight}%
\def\[email protected]{3em}\newdimen\MapShortFall\def\MapsAbut{\MapShortFall\[email protected]
\objectheight\[email protected]\objectwidth\[email protected]}\newdimen\[email protected]\[email protected]\[email protected]\def\newarrowhead{%
\[email protected] h\[email protected]\[email protected]>}\def\newarrowtail{\[email protected] t\[email protected]\[email protected]>}\def
\newarrowmiddle{\[email protected] m\[email protected]\[email protected]\empty}\def\newarrowfiller{\[email protected] f%
\[email protected]\[email protected]-}\def\[email protected]#1#2#3#4#5#6#7#8#9{\[email protected]{r#1:#5}{#2{#6}}\[email protected]{l#1:#%
5}{#2{#7}}\[email protected]{d#1:#5}{#3{#8}}\[email protected]{u#1:#5}{#3{#9}}\[email protected]{-#1:#5}{%
\expandafter\noexpand\csname-#1:#4\endcsname\noexpand\[email protected]}\[email protected]{+#1:#5}{%
\expandafter\noexpand\csname+#1:#4\endcsname\noexpand\[email protected]}}\[email protected]\[email protected]{%
\[email protected]\space diagonals are used unless PostScript is set}\def
\defaultarrowhead#1{\edef\[email protected]{#1}\[email protected]}\def\[email protected]{\[email protected]\[email protected]<>ht\[email protected]
\[email protected]<>th}\def\[email protected]#1#2#3#4#5{\[email protected]{r#4}{#3}{l#5}{#2}{r#4:#1}\[email protected]{r#5}{#%
2}{l#4}{#3}{l#4:#1}\[email protected]{d#4}{#3}{u#5}{#2}{d#4:#1}\[email protected]{d#5}{#2}{u#4}{#3}{u%
#4:#1}}\def\[email protected]#1#2#3#4#5{\begingroup\aftergroup\[email protected]\[email protected]{#1+:#2}\[email protected]{#1%
:#2}\[email protected]{#3:#4}\[email protected]{#5}\endgroup}\def\[email protected]#1#2#3#4{\csname newbox%
\endcsname#1\def#2{\copy#1}\def#3{\copy#1}\setbox#1=\box\[email protected]}\def\[email protected]{}%
\[email protected]\def\[email protected]#1#2#3#4{\setbox#1=#4}\ifx\tenln\nullfont\def\[email protected]{vee}\else
\let\[email protected]\[email protected]\fi\def\[email protected]#1#2#3{\begingroup\aftergroup\[email protected]\[email protected]{#1#2:#3%
#3}\[email protected]{#1#2:#3}\endgroup}\def\[email protected]#1#2{\def#1{\hbox{\rlap{#2}\kern.4\[email protected]
#2}}}\[email protected] rh>\[email protected] lh>\[email protected] rt>\[email protected] lt>\[email protected] rh<\[email protected] lh<\[email protected] rt<%
\[email protected] lt<\def\[email protected]#1#2{\def#1{\vbox{\vbox to\[email protected]{#2\vss}\nointerlineskip
\kern.4\[email protected]#2}}}\[email protected] dh>\[email protected] uh>\[email protected] dt>\[email protected] ut>\[email protected] dh<\[email protected] uh%
<\[email protected] dt<\[email protected] ut<\def\[email protected]#1{\hbox{\mathsurround\[email protected]\offinterlineskip
\[email protected]\mkern-1.5mu{#1}\mkern-1.5mu\[email protected]}}\def\[email protected]#1{\hbox{\[email protected]#1%
\[email protected]}}\def\[email protected]#1{\hbox to\[email protected]{\setbox0=\hbox{\offinterlineskip
\mathsurround\[email protected]\[email protected]{#1}\[email protected]}\dimen0.5\wd0\advance\dimen0-.5\[email protected]\[email protected]{%
\dimen0}\kern-\dimen0\unhbox0\hss}}\def\[email protected]#1{\hbox to2\[email protected]{\hss
\offinterlineskip\mathsurround\[email protected]\[email protected]{#1}\[email protected]\hss}}\def\[email protected]#1{\hbox{%
\mathsurround\[email protected]\[email protected]{#1}\[email protected]}}\def\[email protected]#1{\hbox{\kern-.15\[email protected]\[email protected]{#1}%
\[email protected]\kern-.15\[email protected]}}\def\[email protected]#1{\vbox{\offinterlineskip\kern-.2ex\[email protected]{#%
1}\kern-.2ex}}\def\@fillh{\xleaders\vrule\horizhtdp}\def\@fillv{\xleaders
\hrule width\[email protected]}\[email protected]{rf:-}{@fillh}\[email protected]{lf:-}{@fillh}\[email protected]{df:-}{%
@fillv}\[email protected]{uf:-}{@fillv}\[email protected]{rh:}{null}\[email protected]{rm:}{null}\[email protected]{rt:}{null%
}\[email protected]{lh:}{null}\[email protected]{lm:}{null}\[email protected]{lt:}{null}\[email protected]{dh:}{null}\[email protected]{%
dm:}{null}\[email protected]{dt:}{null}\[email protected]{uh:}{null}\[email protected]{um:}{null}\[email protected]{ut:}{null%
}\[email protected]{+h:}{null}\[email protected]{+m:}{null}\[email protected]{+t:}{null}\[email protected]{-h:}{null}\[email protected]{-%
m:}{null}\[email protected]{-t:}{null}\[email protected]{rf:}{\hbox{\kern1pt}}\[email protected]{lf:}{rf:}\[email protected]{%
+f:}{rf:}\[email protected]{df:}{\vbox{\kern1pt}}\[email protected]{uf:}{df:}\[email protected]{-f:}{df:}\edef
\[email protected]{\string\newarrow}\def\newarrow#1#2#3#4#5#6{\begingroup\edef\[email protected]{#1}%
\edef\[email protected]{#2}\edef\[email protected]{#3}\edef\[email protected]{#4}\edef\[email protected]{#5}\edef\[email protected]{#6}%
\let\[email protected]\[email protected]\let\[email protected]\[email protected]\let\@x\[email protected]\ifx\[email protected]\[email protected]\let\[email protected]\empty
\fi\ifx\[email protected]\[email protected]\let\[email protected]\empty\fi\def\[email protected]{r}\def\[email protected]{l}\def\[email protected]{d}%
\def\[email protected]{u}\def\[email protected]{+}\def\@m{-}\ifx\[email protected]\[email protected]\ifx\[email protected]\[email protected]\let
\[email protected]\empty\fi\ifx\[email protected]\empty\ifx\[email protected]\[email protected]\let\@x\[email protected]\else\let\@x
\[email protected]\fi\fi\else\edef\[email protected]{\[email protected]\[email protected]}\ifx\[email protected]\empty\ifx\[email protected]\[email protected]\let
\[email protected]\empty\fi\fi\fi\ifmmode\aftergroup\[email protected]\else\[email protected]@A\[email protected] rh{head\space
\space}\[email protected]\[email protected] rf{filler}\[email protected]\[email protected] rm{middle}\[email protected]\ifx\[email protected]\[email protected]
\else\[email protected] rf{filler}\[email protected]\fi\[email protected] rt{tail\space\space}\[email protected]\[email protected]\[email protected]
\[email protected]\@x\[email protected] l-2+2{lu}{nw}\NorthWest\[email protected] r+2+2{ru}{ne}\NorthEast\[email protected] l%
-2-2{ld}{sw}\SouthWest\[email protected] r+2-2{rd}{se}\SouthEast\else\aftergroup\[email protected]
\[email protected]{r\[email protected]}\fi\fi\endgroup}\def\[email protected]{\[email protected]\[email protected]\[email protected] rl\[email protected]
}\def\[email protected]{\[email protected]\[email protected]\[email protected] du\[email protected]}\def\[email protected]{\[email protected]\[email protected]\@m+-%
\[email protected]}\def\[email protected]{\[email protected]\[email protected]\@m+-\[email protected]}\def\[email protected]{\[email protected]\[email protected]\@m
+-\[email protected]}\catcode\lq\/=\active\def\[email protected]#1#2#3#4#5{\[email protected]#1#3#5t:\[email protected]/f%
:\[email protected]/m:\[email protected]/f:\[email protected]/h:\[email protected]//\[email protected]#2#4#5h:\[email protected]/f:\[email protected]/m:\[email protected]/f:%
\[email protected]/t:\[email protected]//}\def\[email protected]#1#2#3#4//{\edef\[email protected]{#2}\aftergroup\sdef\[email protected]{#%
1\[email protected]}\aftergroup{\aftergroup#3\[email protected]#4//\aftergroup}}\def\[email protected]#1/{\edef
\[email protected]{#1}\ifx\[email protected]\empty\else\[email protected]{\[email protected]#1}\expandafter\[email protected]\fi}\catcode
\lq\/=12 \def\[email protected]#1#2#3#4#5#6#7#8{\aftergroup\sdef\[email protected]{#6\[email protected]}%
\aftergroup{\[email protected]{#2\[email protected]}\if#2#4\aftergroup\PositiveGradienttrue\else
\aftergroup\PositiveGradientfalse\fi\[email protected]{#1\[email protected]}%
%% ASCII round brackets and comma (,) appear on the next line
\aftergroup(\aftergroup#3\aftergroup,\aftergroup#5\aftergroup)\aftergroup}}%
\def\[email protected]#1#2#3#4{\expandafter\ifx\csname#1#2:#4\endcsname\relax\[email protected]\[email protected]{%
arrow#3 "#4" undefined}\fi}\[email protected]\[email protected]{All five components must be defined
before an arrow.}\[email protected]\[email protected]{\[email protected], unlike \string\HorizontalMap, is a
declaration.}\def\[email protected]#1{\[email protected]{Arrows \string#1 etc could not be defined}%
\[email protected]}\def\[email protected]{\[email protected]{misplaced \[email protected]}\[email protected]}\def\newdiagramgrid#1#2#3{%
\[email protected]{cdgh@#1}{#2,],}%% ASCII close square bracket
\[email protected]{cdgv@#1}{#3,],}}%% ASCII close square bracket
\[email protected]\ifincommdiag\incommdiagtrue\incommdiagfalse\[email protected]\[email protected]\[email protected]\[email protected]
\newcount\[email protected]\[email protected]=0 \def\[email protected]{\[email protected]6 }\def\[email protected]{\[email protected]1 \global\[email protected]1
\[email protected]\[email protected]\empty}\def\[email protected]{}\def\[email protected]#1{\relax\[email protected]\edef\[email protected]{#1}%
\begingroup\[email protected]\else\ifcase\[email protected]\ifmmode\else\[email protected]\[email protected]0\fi\or\[email protected]5\or
\[email protected]\[email protected]5\or\[email protected]\[email protected]5\or\[email protected]\[email protected]5\or\[email protected]\[email protected]5\or\[email protected]7\or\[email protected]
\[email protected]7\fi\fi\endgroup\xdef\[email protected]{#1}}\def\[email protected]#1#2#3#4#5{\relax\[email protected]\xdef
\[email protected]{#4}\begingroup\ifnum\[email protected]<#1 \expandafter\[email protected]\ifcase\[email protected]0\or#2\or
#3\else#2\fi\else\ifnum\[email protected]<6 \[email protected]\[email protected]\[email protected]#2\else\[email protected]\[email protected]#2\fi\fi
\endgroup\[email protected]\[email protected]\[email protected]\ifincommdiag\let\[email protected]#5\else\let\[email protected]\[email protected]\fi}%
\def\[email protected]{\global\[email protected]=\ifnum\[email protected]<5 1\else2\fi\relax}\def\[email protected]{\[email protected]
\[email protected]}\def\[email protected]#1{\aftergroup\[email protected]\aftergroup#1\aftergroup\relax}\def
\[email protected]{\def\[email protected]##1{\relax}\let\[email protected]\[email protected]\let\[email protected]\relax\let\[email protected]\relax
\let\[email protected]\relax\let\[email protected]\relax}\def\[email protected]#1#2#3#4#5{\ifincommdiag\let\[email protected]
#5\else\xdef\[email protected]{#4}\let\[email protected]\[email protected]\fi}\def\[email protected]#1{\aftergroup#1%
\aftergroup\relax\[email protected]}\def\[email protected]{\[email protected]\[email protected]\[email protected]\[email protected]}\def\[email protected]{\[email protected]{%
\[email protected]\[email protected]}\[email protected]\[email protected]\[email protected]}\def\[email protected]{\[email protected]{*\[email protected]}\[email protected]\clubsuit\[email protected]}%
\def\[email protected]{\[email protected]{\[email protected]*\[email protected]}\[email protected]\[email protected]\clubsuit\[email protected]}\def\[email protected]{\[email protected]\[email protected]
\[email protected]\\}\def\[email protected]{\[email protected]\[email protected]\[email protected]\[email protected]}\def\[email protected]{\[email protected]{\[email protected]\space
ignored \[email protected]}\[email protected]}\def\[email protected]{}\def\[email protected]{\[email protected]{maps must never be enclosed
in braces}\[email protected]}\def\[email protected]{outside diagram}\def\[email protected]{\string\HonV, \string
\VonH\space and \string\HmeetV}\[email protected]\[email protected]{The way that horizontal and
vertical arrows are terminated implicitly means\[email protected] that they cannot be
mixed with each other or with \[email protected].}\[email protected]\[email protected]{\string\pile\space is for
parallel horizontal arrows; verticals can just be put together in\[email protected] a cell%
. \[email protected]\space are not meaningful in a \string\pile.}\[email protected]\[email protected]{The
horizontal maps must point to an object, not each other (I've put in\[email protected] one
which you're unlikely to want). Use \string\pile\space if you want them
parallel.}\[email protected]\[email protected]{Parallel horizontal arrows must be in separate layers
of a \string\pile.}\[email protected]\[email protected]{Horizontal arrows may be used \[email protected] s, but
must still be in maths.}\[email protected]\[email protected]{Vertical arrows, \[email protected]\space\[email protected] s don%
't know where\[email protected] where to terminate.}\[email protected]\[email protected]{This prevents them from
stretching correctly.}\def\[email protected]#1{\[email protected]{"#1" inserted \ifx\[email protected]\empty
before \[email protected]\else between \[email protected]\ifx\[email protected]\[email protected] s\else\space and \[email protected]\fi
\fi}}\[email protected]=\year\multiply\[email protected]12 \advance\[email protected]\month\ifnum\[email protected]>23977
\message{because this one expired in August 1997!}\expandafter\endinput\fi
\def\[email protected]{\[email protected]{horizontal map}\[email protected]\[email protected]\[email protected]}\def\[email protected]{%
\[email protected]-9999 \let\[email protected]\[email protected]\ifincommdiag\else\[email protected]\ifinpile\else\skip2\[email protected]
plus 1.5\[email protected] minus .5\[email protected]\skip4\skip2 \fi\fi\let\[email protected]\@fillh\let\[email protected]
\hfdot}\def\[email protected]{\[email protected]4}\def\[email protected]{\[email protected]{\[email protected]255\else6\fi}}\def
\[email protected]{\[email protected]\[email protected]}\def\[email protected]#1#2#3#4#5#6{\[email protected]\def\[email protected]{2}\def\[email protected]{%
2}\def\[email protected]{1}\def\[email protected]{1}\let\[email protected]\[email protected]\def\[email protected]{#1}\def\[email protected]
{\[email protected]#2#3#4#5#6}}\def\[email protected]{\[email protected]\[email protected]\let\[email protected]\[email protected]\[email protected]}\[email protected]\[email protected]
\[email protected]\[email protected]\[email protected]\def\[email protected]{\[email protected]}\def\[email protected]{\[email protected]\let\[email protected]\[email protected]
\[email protected]\[email protected]\setbox\[email protected]\hbox{\incommdiagfalse\[email protected]}\[email protected]\[email protected]\else\global
\[email protected]\[email protected]\fi\else\[email protected]\[email protected]\global\[email protected]\[email protected]\fi}\def\[email protected]{\begingroup
\dimen1=\MapShortFall\dimen2=\[email protected]\dimen5=\MapShortFall\setbox3=\box\[email protected]
\setbox6=\box\[email protected]\setbox7=\box\[email protected]\[email protected]\mathsurround\[email protected]\skip2\[email protected] plus%
1fill minus 1000pt\skip4\skip2 \[email protected]}\[email protected]\[email protected]\[email protected]\[email protected]\def\[email protected]#1#2#3%
#4#5{\let\[email protected]#1\let\[email protected]#2\let\[email protected]#3\let\[email protected]#4\let\[email protected]#5\[email protected]\ifx
\[email protected]\[email protected]\[email protected]\fi}\def\[email protected]#1#2#3#4#5{\[email protected]#1#2#3#4#5\[email protected]}\def
\[email protected]{\[email protected]433{vertical map}\[email protected]\[email protected]\[email protected]-9995 \let\[email protected]
\@fillv\let\[email protected]\vfdot\[email protected]}\def\[email protected]{\def\[email protected]{\[email protected]}\[email protected]
\endgroup\aftergroup\[email protected]}\def\[email protected]{\setbox1=\[email protected]\setbox5=\[email protected]\ifvoid3
\ifx\[email protected]\null\else\setbox3=\[email protected]\fi\fi\[email protected]2\[email protected]\[email protected]4\[email protected]}\def
\[email protected]#1#2{\ifx#2\[email protected]\setbox#1=\box\[email protected]\else\setbox#1=#2\def#2{%
\xleaders\box#1}\fi}\[email protected]\[email protected]{\string\HorizontalMap, \string\VerticalMap
\space and \string\DiagonalMap\[email protected] are obsolete - use \[email protected]\space to pre-%
define maps}\def\HorizontalMap#1#2#3#4#5{\[email protected]\[email protected]{old horizontal map}%
\[email protected]\[email protected]\def\[email protected]{\[email protected]@H{#1}}\[email protected]\[email protected]{#2}\def\[email protected]{\[email protected]@H{#3}}%
\[email protected]\[email protected]{#4}\def\[email protected]{\[email protected]@H{#5}}\[email protected]}\def\VerticalMap#1#2#3#4#5{%
\[email protected]\[email protected]433{vertical map}\[email protected]\[email protected]\[email protected]-9995 \let\[email protected]\@fillv\def
\[email protected]{\[email protected]{#1}}\[email protected]\[email protected]{#2}\def\[email protected]{\[email protected]{#3}}\[email protected]\[email protected]{#4}\def
\[email protected]{\[email protected]{#5}}\[email protected]}\def\DiagonalMap#1#2#3#4#5{\[email protected]\[email protected]\def\[email protected]{4}%
\let\[email protected]\undefined\let\[email protected]\[email protected]\def\[email protected]{2}\def\[email protected]{2}\def\[email protected]{1}%
\def\[email protected]{1}\def\[email protected]{\[email protected]{#3}}\ifPositiveGradient\let\mv\raise\def\[email protected]
{\[email protected]{#5}}\def\[email protected]{\[email protected]{#4}}\def\[email protected]{\[email protected]{#2}}\def\[email protected]{\[email protected]{#1}%
}\else\let\mv\lower\def\[email protected]{\[email protected]{#1}}\def\[email protected]{\[email protected]{#2}}\def\[email protected]{%
\[email protected]{#4}}\def\[email protected]{\[email protected]{#5}}\fi\[email protected]}\def\[email protected]{-}\def\[email protected]{\empty}%
\def\[email protected]{\[email protected]\[email protected]\[email protected]\@fillh}\def\[email protected]{\[email protected]\[email protected]\[email protected]\@fillv}%
\def\[email protected]#1#2#3#4#5{\def\[email protected]{#5}\ifx\[email protected]#2\let#4#3\else\let#4\null\ifx
\[email protected]\empty\else\ifx\[email protected]\[email protected]\else\let#4\[email protected]\fi\fi\fi}\def\[email protected]@H#1{%
\hbox{\mathsurround\[email protected]\offinterlineskip\def\[email protected]{#1}\ifx\[email protected]\empty\else
\ifx\[email protected]\[email protected]\else\[email protected]\mkern-1.5mu{\[email protected]}\mkern-1.5mu\[email protected]\fi\fi}}\def
\[email protected]#1#2{\setbox#1=\hbox\bgroup\setbox0=\hbox{\[email protected]\labelstyle()\[email protected]}%
%% ASCII round brackets
\setbox1=\null\ht1\ht0\dp1\dp0\box1 \kern.1\[email protected]\[email protected]\bgroup\labelstyle
\aftergroup\[email protected]\[email protected]}\def\[email protected]{\[email protected]\kern.1\[email protected]\egroup\[email protected]}\def
\[email protected]{\futurelet\[email protected]\[email protected]}\def\[email protected]{%% qualifiers on label arguments
\catcase\bgroup:\[email protected];\catcase\egroup:\[email protected];\catcase\space:\[email protected];%
\tokcase[:\[email protected];%%]%ascii close square bracket 
\default:\[email protected];\endswitch}\def\[email protected]{\let\[email protected]\[email protected]\let\[email protected]}\def\[email protected]#1{%
\let\[email protected]\egroup{\let\[email protected]@[email protected]@[email protected]@label\[email protected]
\let\[email protected]\[email protected]\let\[email protected]\[email protected]#1%
\[email protected]@[email protected]@[email protected]@label}\[email protected]}\def
\[email protected]@[email protected]@[email protected]@label{\let\[email protected]=}\def\[email protected]
{\egroup\[email protected]{missing label}\[email protected]}\def\[email protected]{\egroup\[email protected]}\outer
\def\[email protected]{}\def\[email protected]{}\def\[email protected]{\[email protected]\[email protected]}\def\[email protected]{}\def\[email protected]{\let
\[email protected]\[email protected]\[email protected]@arg\[email protected]}\[email protected]\[email protected]{The text which has just been
read is not allowed within map labels.}\def\[email protected]{\egroup\[email protected]{missing \[email protected]
\space inserted after label}\[email protected]}\def\[email protected]{\[email protected]\[email protected]6}\def
\[email protected]{\def\[email protected]{\[email protected]@A\[email protected]}\[email protected]7}\def\[email protected]{%
\[email protected]3}\[email protected]\[email protected]\[email protected]\[email protected]\def\[email protected]{\ifPositiveGradient\[email protected]
\expandafter\[email protected]\else\expandafter\[email protected]\fi}\def\[email protected]{%
\ifPositiveGradient\[email protected]\expandafter\[email protected]\else\expandafter
\[email protected]\fi}\[email protected]\[email protected]{labels as positional arguments are obsolete}\def
\[email protected]{\[email protected]\[email protected]\[email protected]\expandafter\[email protected]\else\expandafter
\[email protected]\fi-}\def\[email protected]{\futurelet\[email protected]\[email protected]}\def\[email protected]{%
\afterassignment\[email protected]\let\[email protected]= }\def\[email protected]{\afterassignment\[email protected]\let
\[email protected]= }\def\[email protected]{\[email protected]@pair\[email protected]}\def\[email protected]#1#2{\def\[email protected]{#1}\def
\[email protected]{#2}\[email protected]}\def\[email protected]{\let\[email protected]\[email protected]\[email protected]@arg\[email protected]}\def
\[email protected].{\[email protected]\[email protected]}\def\[email protected]{\let\[email protected]\[email protected]\let\[email protected]\[email protected]\def\[email protected]{%
\let\[email protected]\dfdot\let\[email protected]\dfdot}}\def\[email protected]{}\def\[email protected]#1,{\[email protected]#1,%
\begingroup\ifx\[email protected]\[email protected]\[email protected]\aftergroup\[email protected]\fi\aftergroup\[email protected]\else
\expandafter\def\expandafter\[email protected]\expandafter{\csname\[email protected]\endcsname}%
\expandafter\[email protected]\[email protected]\[email protected]@D\ifx\[email protected]\empty\aftergroup\[email protected]\expandafter
\aftergroup\csname\[email protected]\[email protected]\endcsname\expandafter\aftergroup\csname\[email protected] @%
\[email protected]\endcsname\else\gdef\[email protected]{#1}\[email protected]{\string\relax\space inserted before
`[\[email protected]'}\message{(I was trying to read it as an option.)}\aftergroup\[email protected]
\fi\fi\endgroup}\def\[email protected]#1#2\[email protected]@D{\def\[email protected]{#2}}\def\[email protected]{\let\[email protected]
\[email protected]\let\[email protected]\relax\[email protected]}\def\[email protected]#1],{%% ASCII close square bracket
\[email protected]\relax\def\[email protected]{#1}\ifx\[email protected]\empty\def\[email protected]{[\[email protected]]}%
%% ASCII open and close square bracket
\else\def\[email protected]{[\[email protected],#1]}%% ASCII open and close square bracket
\fi\[email protected]}\def\[email protected]#1#2{\ifx#2\undefined\ifx#1\undefined\[email protected]{option `%
\[email protected]' undefined}\else#1\fi\else\[email protected]\expandafter#2\[email protected]\[email protected]\else\[email protected]
\fi\fi\[email protected]}\[email protected]\[email protected]\[email protected]\[email protected]\def\[email protected]#1,{\[email protected]\ifx\[email protected]\undefined
\[email protected]\else\expandafter\[email protected]\[email protected],#1,(,),(,)[]%
%%ASCII 5commas two pairs round, pair square
\fi\fi\[email protected]\else\[email protected]#1==,\fi}\def\[email protected]{\[email protected]{option `\[email protected]' needs (x,y)
value}\[email protected]\let\[email protected]\empty}\def\[email protected]#1=#2=#3,{\def\[email protected]{#1}\def\[email protected]{#2}%
\def\[email protected]{#3}\ifx\[email protected]\empty\let\[email protected]\undefined\fi}%
%% ASCII 2commas 2pair round, pair square on next line
\def\[email protected]#1(#2,#3)#4,(#5,#6)#7[]{\def\[email protected]{{#2}{#3}}\def\[email protected]{#1#4#5#6}%
\ifx\[email protected]\empty\def\[email protected]{#7}\ifx\[email protected]\empty\[email protected]\fi\else\[email protected]\fi}\def
\[email protected]{cds@}\let\[email protected]\relax\def\[email protected]#1{\ifx\[email protected]\undefined\[email protected]{option `%
\[email protected]' needs a value}\else#1\[email protected]\relax\fi}\def\[email protected]#1#2{\ifx\[email protected]
\undefined#1#2\relax\else#1\[email protected]\relax\fi}\def\[email protected]@showpair#1#2{\message{x=%
#1,y=#2}}\def\[email protected]@diagonalbase#1#2{\edef\[email protected]{#1}\edef\[email protected]{#2}}\def\[email protected]
#1{\[email protected]{@x}{cdps@#1}\ifx\@x\undefined\[email protected]{unknown}\else\ifx\@x\empty\[email protected]{%
cannot be used}\else\let\[email protected]\@x\fi\fi}\def\[email protected]#1{\[email protected]{PostScript
translator `\[email protected]' #1}\[email protected]\let\[email protected]\empty\let\[email protected]\empty}\def\[email protected]{%
}\def\[email protected]{\[email protected]\edef\[email protected]{\noexpand\[email protected]{\[email protected]\space ignored within
maths}}}\def\diagramstyle{\[email protected]J\let\[email protected]\relax\[email protected]\[email protected]\[email protected]}\let
\diagramsstyle\diagramstyle\[email protected]\[email protected]\[email protected]\[email protected]\[email protected]\[email protected]\[email protected]\[email protected]
\[email protected]\[email protected]\[email protected]\[email protected]\[email protected]\[email protected]\[email protected]\[email protected]\[email protected]\[email protected]\[email protected]\[email protected]
\[email protected]\[email protected]\[email protected]\[email protected]\[email protected]\[email protected]\[email protected]\[email protected]\[email protected]\[email protected]\[email protected]\[email protected]
\[email protected]\[email protected]\[email protected]\[email protected]\[email protected]\[email protected]\[email protected]\[email protected]\[email protected]\[email protected]\[email protected]\[email protected]\[email protected]
\[email protected]\[email protected]\[email protected]\[email protected]\[email protected]{cds@ }{}\[email protected]{cds@}{}\[email protected]{cds@1em}{%
\CellSize1\[email protected]}\[email protected]{cds@1.5em}{\CellSize1.5\[email protected]}\[email protected]{cds@2em}{%
\CellSize2\[email protected]}\[email protected]{cds@2.5em}{\CellSize2.5\[email protected]}\[email protected]{cds@3em}{%
\CellSize3\[email protected]}\[email protected]{cds@3.5em}{\CellSize3.5\[email protected]}\[email protected]{cds@4em}{%
\CellSize4\[email protected]}\[email protected]{cds@4.5em}{\CellSize4.5\[email protected]}\[email protected]{cds@5em}{%
\CellSize5\[email protected]}\[email protected]{cds@6em}{\CellSize6\[email protected]}\[email protected]{cds@7em}{\CellSize7%
\[email protected]}\[email protected]{cds@8em}{\CellSize8\[email protected]}\def\[email protected]{\MapsAbut\dimen1\[email protected]
\dimen5\[email protected]}\def\[email protected]{\[email protected]\[email protected]}\def\[email protected]{\ifincommdiag
\[email protected]\else\def\CD{\diagram[amstex]}%%ascii square brackets []
\fi\[email protected]\catcode\lq\@\active}\def\[email protected]{\let\[email protected]\[email protected]}\def\[email protected]{%
\let\[email protected]\[email protected]}\let\[email protected]\[email protected]\def\[email protected]{\[email protected]
\[email protected]}\let\[email protected]\[email protected]\def\[email protected]{\[email protected]\[email protected]
\[email protected]}\let\[email protected]\[email protected]\def\[email protected]{%
\[email protected]{\let\[email protected]}{3em}\[email protected]}\def\[email protected]{\[email protected]}\let\[email protected]
\[email protected]\def\[email protected]{\[email protected]{1truein}}\def\[email protected]{\[email protected]{100truecm}}\let\[email protected]
\undefined\def\[email protected]{\let\[email protected]\[email protected]\let\[email protected]\empty}\def\[email protected]{%
\[email protected]}\def\[email protected]{\[email protected]\[email protected]\[email protected]\[email protected]\[email protected]\[email protected]}\def
\[email protected]{\ifx\[email protected]\undefined\let\[email protected]\relax\let\[email protected]\relax\else\[email protected]{%
h@grid}{cdgh@\[email protected]}\[email protected]{v@grid}{cdgv@\[email protected]}\ifx\[email protected]\relax\[email protected]{%
unknown grid `\[email protected]'}\else\[email protected]\fi\fi}\let\[email protected]\relax\let\[email protected]\relax
\def\[email protected]{\ifx\[email protected]\undefined\else\[email protected]\fi\let\[email protected]\[email protected]\let
\[email protected]\[email protected]\let\[email protected]\[email protected]}\def\[email protected]{\[email protected]\DiagramCellHeight}\def
\[email protected]{\let\[email protected]\[email protected]}\let\[email protected]\[email protected]\def\[email protected]{%
\[email protected]{\let\[email protected]}\[email protected]\[email protected]\[email protected]\else\ifx\[email protected]\[email protected]\else\[email protected]\fi\fi}%
\let\[email protected]\[email protected]\let\[email protected]\[email protected]\def\[email protected]{%
\[email protected]\DiagramCellHeight\DiagramCellHeight\DiagramCellWidth1.73205%
\DiagramCellHeight}\def\[email protected]{\[email protected]\DiagramCellWidth
\DiagramCellWidth\DiagramCellHeight.57735\DiagramCellWidth}\def\[email protected]{%
\[email protected]\let\[email protected]\empty}\def\[email protected]{\[email protected]}\[email protected]{cds@l>}{\[email protected]{%
\let\[email protected]}\dimen2=\[email protected]}\def\[email protected]{\[email protected]{\let\labelstyle}}\def
\[email protected]{\[email protected]}\def\[email protected]{\CellSize5\[email protected]}\let\[email protected]\empty\def
\[email protected]{\refstepcounter{equation}\def\[email protected]{\hbox{\@eqnnum}}}\def
\[email protected]{\let\[email protected]\[email protected]}\def\[email protected]{\[email protected]}\def
\[email protected]{\[email protected]{\dimen1 }}\def\[email protected]{%
\ifPositiveGradient\[email protected]\else\[email protected]\fi}\def
\[email protected]{\[email protected]}\def\[email protected]{\[email protected]}\def\[email protected]{\[email protected]}\def
\[email protected]{\[email protected]{midvshaft option doesn't work}}\def\[email protected]{%
\[email protected]@A}\let\[email protected]\[email protected]\def\[email protected]{\[email protected]}\def
\[email protected]{\def\[email protected]{\[email protected]}}\let\[email protected]\[email protected]\def
\[email protected]{\[email protected]4\[email protected]\[email protected]}\def\[email protected]{\global\let
\[email protected]@ps\empty\[email protected]\[email protected]\empty\[email protected]\let\[email protected]\empty\let\[email protected]
\empty}\def\[email protected]{\[email protected]\global\let\[email protected]@ps\empty}\def
\[email protected]{\[email protected]}\def\[email protected]{\[email protected]}\def\[email protected]{\[email protected]{%
\let\objectstyle}}\def\[email protected]{\let\[email protected]\[email protected]}\def\[email protected]{\[email protected]
\PileSpacing}\let\[email protected]\[email protected]\def\[email protected]{\[email protected]\[email protected]\[email protected]}%
\def\[email protected]{\[email protected]}\def\[email protected]{\[email protected]\global\let\[email protected]@ps
\empty\let\[email protected]\[email protected]\let\[email protected]\[email protected]\[email protected]\[email protected]\empty}\def\[email protected]{%
\[email protected]\global\let\[email protected]@ps\empty}\[email protected]@end\[email protected]@ps{\typeout{%
\[email protected]: try the PostScript option for better results}}\def
\[email protected]{\let\[email protected]\[email protected]\let\[email protected]\[email protected]}\def
\[email protected]{\[email protected]}\def\[email protected]{\[email protected]{\dimen5 }}\def
\[email protected]{\[email protected]{\let\axisheight}}\def\[email protected]{\let\[email protected]\[email protected]\let
\[email protected]\[email protected]}\def\[email protected]{\[email protected]\DiagramCellWidth\DiagramCellHeight}%
\def\[email protected]{\let\labelstyle\scriptstyle}\def\[email protected]{\[email protected]
\MapShortFall\dimen1\MapShortFall\dimen5\MapShortFall}\def\[email protected]{%
\[email protected]{\let\[email protected]}\[email protected]}\def\[email protected]{\def\[email protected]##1{}\def\[email protected]##1{}}\let
\[email protected]\[email protected]\def\[email protected]{\CellSize2\[email protected]}\def\[email protected]{\let\[email protected]\[email protected]}%
\def\[email protected]{\[email protected]\[email protected]}\def\[email protected]{\let\[email protected]\tenlnw\[email protected]\[email protected]
\[email protected]\MapBreadth{2\[email protected]}}\def\[email protected]{\let\[email protected]\tenln\[email protected]\MapBreadth{%
\[email protected]}}\def\[email protected]{\[email protected]}\let\[email protected]\[email protected]\def\[email protected]{\[email protected]}\def
\[email protected]{\ifPositiveGradient\[email protected]\else
\[email protected]\fi}\def\[email protected]{\let\[email protected]\[email protected]}\let\[email protected]
\[email protected]\def\[email protected]{\[email protected]\DiagramCellHeight
\DiagramCellHeight\DiagramCellWidth.577035\DiagramCellHeight}\def
\[email protected]{\[email protected]\DiagramCellWidth\DiagramCellWidth
\DiagramCellHeight1.73205\DiagramCellWidth}\def\[email protected]{\let\[email protected]\[email protected]}%
\def\[email protected]{\[email protected]\DiagramCellWidth}\let\[email protected]\[email protected]\def\diagram{\relax
\protect\[email protected]}\def\enddiagram{\protect\[email protected]}\def\[email protected]{\[email protected]\[email protected]
\incommdiagtrue\edef\[email protected]{\the\[email protected]}\global\[email protected]\[email protected]\boxmaxdepth\maxdimen
\everycr{}\[email protected]}\def\[email protected]{\[email protected]\let\[email protected]\[email protected]\[email protected]\[email protected]\[email protected]}\def\[email protected]
{\[email protected]\expandafter\[email protected]\else\expandafter\[email protected]\fi}\def\[email protected]{\let\[email protected]
\relax\[email protected]\[email protected]\else\[email protected]{landscape ignored without PostScript}\[email protected]\fi
\fi\[email protected]\setbox2=\vbox\bgroup\[email protected]\[email protected]}\def\[email protected]{\[email protected]\[email protected]\else\[email protected]
\fi\[email protected]\nointerlineskip\setbox0=\null\ht0-\[email protected]\dp0\[email protected]\wd0\[email protected]\box0
\global\[email protected]\[email protected]\global\[email protected]\[email protected]\egroup\[email protected]\[email protected]\setbox2=\hbox to\dp
2{\dp2=\[email protected]\global\[email protected]\ht2\ht2\wd2\global\[email protected]\[email protected]{0 1 bturn}\box2%
\[email protected]{eturn}\hss}\[email protected]\fi\ifnum\[email protected]=1 \else\[email protected]\fi\global\@ignorefalse
\[email protected]\leavevmode\fi\ifvmode\[email protected]\else\ifmmode\[email protected]\[email protected]\else\[email protected]\[email protected]
\fi\ifinner\[email protected]\fi\[email protected]\[email protected]\else\[email protected]\[email protected]\else\[email protected]\fi\fi\fi\fi
\[email protected]}\def\[email protected]{\global\[email protected]\[email protected]\relax\[email protected]\global\[email protected]\else
\aftergroup\[email protected]\fi\[email protected]\aftergroup\ignorespaces\fi\[email protected]\ignorespaces}%
\def\[email protected]{\advance\[email protected]\dimen1\relax}\def\[email protected]{\advance\[email protected].5\dimen1%
\relax}\def\[email protected]{}\def\[email protected]{\[email protected]\advance\[email protected]\[email protected]\divide\[email protected]2
\advance\[email protected]-\axisheight\relax}\def\[email protected]{}\def\[email protected]{\[email protected]\[email protected]}\def\[email protected]{%
\ifdim\dimen2>\[email protected]\[email protected]\dimen2 \else\dimen2\[email protected]\[email protected]\dimen0 \advance
\[email protected]\dimen2 \fi}\def\[email protected]{\skip0\[email protected]\relax\loop\skip1\lastskip\ifdim\skip1>%
\[email protected]\unskip\advance\skip0\skip1 \repeat\vadjust{\prevdepth\dp\strutbox\penalty
\predisplaypenalty\vskip\abovedisplayskip\[email protected]\penalty\postdisplaypenalty
\vskip\belowdisplayskip}\ifdim\skip0=\[email protected]\else\hskip\skip0 \global\@ignoretrue
\fi}\def\[email protected]{\[email protected]\kern-\displayindent\[email protected]\[email protected]\global\@ignoretrue}\def
\[email protected]{\hbox to\hsize{\setbox1=\hbox{\ifx\[email protected]\undefined\else\[email protected]\[email protected]
\[email protected]\fi}\[email protected]\[email protected]\else\advance\[email protected]\wd1 \fi\wd1\[email protected]\box1 \fi\dimen0\wd2
\advance\dimen0\wd1 \advance\dimen0-\hsize\ifdim\dimen0>-\[email protected]\[email protected]\fi
\advance\dimen0\[email protected]\ifdim\dimen0>\[email protected]\[email protected]{wider than the page by \the
\dimen0 }\[email protected]\fi\[email protected]\hss\else\[email protected]\[email protected]\[email protected]\fi\[email protected]\hss\kern-\wd1\box
1 }}\def\[email protected]{\[email protected]\[email protected]\else\[email protected]\global\[email protected]\fi\fi\kern\[email protected]\box2 }%
\[email protected]\[email protected]\[email protected]\[email protected]\def\[email protected]{\[email protected]\ifdim\DiagramCellHeight=-\maxdimen
\DiagramCellHeight\[email protected]\fi\ifdim\DiagramCellWidth=-\maxdimen
\DiagramCellWidth\[email protected]\fi\global\[email protected]\[email protected]\let\[email protected]\empty\let\[email protected]\[email protected]
\let\overprint\[email protected]\let\[email protected]\[email protected]\let\enddiagram\[email protected]\let\\\[email protected]\let\par
\[email protected]\let\[email protected]\empty\let\[email protected]\[email protected]\let\shift\[email protected]\baselineskip
\DiagramCellHeight\lineskip\[email protected]\lineskiplimit\[email protected]\mathsurround\[email protected]\tabskip\[email protected]
\[email protected]}\def\[email protected]{\penalty-123 \begingroup\[email protected]\aftergroup\[email protected]\halign
\bgroup\global\advance\[email protected]1 \vadjust{\penalty1}\global\[email protected]\[email protected]\[email protected]\[email protected]#%
#\[email protected]\[email protected]\[email protected]\[email protected]\[email protected]##\[email protected]\cr}\def\[email protected]{\[email protected]\[email protected]\crcr\egroup
\global\[email protected]\endgroup}\def\[email protected]{\global\advance\[email protected]1 \futurelet\[email protected]\[email protected]
}\def\[email protected]{\ifx\[email protected]\[email protected]\[email protected]\hskip1sp plus 1fil \relax\let\[email protected]\relax
\[email protected]\else\hfil\[email protected]\objectstyle\let\[email protected]\[email protected]\fi}\def\[email protected]{\[email protected]\relax
\[email protected]\[email protected]\global\[email protected]\[email protected]\penalty-9993 \[email protected]\hfil\null\kern-2\[email protected]
\null}\def\[email protected]{\cr}\def\across#1{\span\omit\mscount=#1 \global\advance
\[email protected]\mscount\global\advance\[email protected]\[email protected]\[email protected]\ifnum\mscount>2 \[email protected]\repeat
\ignorespaces}\def\[email protected]{\relax\span\omit\advance\mscount\[email protected]}\def\[email protected]{%
\ifincommdiag\ifx\[email protected]\@fillh\ifx\[email protected]\@fillh\ifdim\dimen3>\[email protected]\else\ifdim
\dimen2>93\[email protected]\ifdim\dimen2>18\[email protected]\ifdim\[email protected]>\[email protected]\[email protected]\[email protected]@J\advance
\[email protected]\[email protected]\ifnum\[email protected]<\[email protected]\[email protected]20\let\[email protected]\[email protected]\fi\xdef\[email protected]@J{\the
\[email protected]}\fi\fi\fi\fi\fi\fi\fi}\def\[email protected]#1{\vrule\horizhtdp width#1\[email protected]
\kern2\[email protected]}\def\[email protected]{\rlap{\[email protected]\[email protected]\[email protected]\[email protected]{.182\[email protected]}\[email protected]
\[email protected]\advance\[email protected]\[email protected]\[email protected]0\[email protected]0\[email protected]2\[email protected]6\[email protected]6\[email protected]2\[email protected]0%
\[email protected]0\[email protected]2\[email protected]6\[email protected]0\[email protected]0\[email protected]2\[email protected]2\[email protected]6\[email protected]0\[email protected]0\[email protected]2%
\[email protected]6\[email protected]2\[email protected]2\[email protected]0\[email protected]0}}\def\[email protected]@J{10}\def\[email protected]{}\def\[email protected]{%
\[email protected]\[email protected]\fi\[email protected]\[email protected]\[email protected]}\def\[email protected]{\[email protected]\[email protected]\ifvoid3 \setbox3=%
\null\ht3\[email protected]\dp3\[email protected]\else\[email protected]{\ht3}\[email protected]\[email protected]{\dp3}\[email protected]\fi\dimen3=.5%
\wd3 \ifdim\dimen3=\[email protected]\[email protected]\else\dimen3-\[email protected]\fi\else\[email protected]\fi\[email protected]{\dimen2%
}{\wd7}\[email protected]{\dimen2}{\wd6}\[email protected]\advance\dimen2-2\dimen3 \dimen4.5\dimen2
\dimen2\dimen4 \advance\dimen2-\wd1 \advance\dimen4-\wd5 \ifvoid2 \else\[email protected]{%
\ht3}{\ht2}\[email protected]{\dp3}{\dp2}\[email protected]{\dimen2}{\wd2}\fi\ifvoid4 \else\[email protected]{\ht3}{%
\ht4}\[email protected]{\dp3}{\dp4}\[email protected]{\dimen4}{\wd4}\fi\advance\skip2\dimen2 \advance
\skip4\dimen4 \[email protected]\advance\skip2\skip4 \dimen0\dimen5 \advance\dimen0\wd5
\skip3-\skip4 \advance\skip3-\dimen0 \let\[email protected]\empty\else\skip3\[email protected]\relax
\dimen0\[email protected]\fi}\def\[email protected]{\offinterlineskip\lineskip.2\[email protected]\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\[email protected]{\kern\dimen1 \box
1 \[email protected]\[email protected]\hskip\skip2 \kern\dimen0 \ifincommdiag\[email protected]\penalty1\fi\kern
\dimen3 \penalty\[email protected]\hskip\skip3 \null\kern-\dimen3 \else\hskip\skip3 \fi
\box3 \[email protected]\hskip\skip4 \box5 \kern\dimen5}\def\[email protected]{\ifnum\[email protected]>\[email protected]
\[email protected]{\dimen1}\objectheight\[email protected]{\dimen5}\objectheight\else\[email protected]{\dimen1}%
\objectwidth\[email protected]{\dimen5}\objectwidth\fi}\def\[email protected]{\begingroup\ifdim\dimen7=%
\[email protected]\kern\dimen8 \else\ifdim\dimen6=\[email protected]\kern\dimen9 \else\dimen5\dimen6 \dimen
6\dimen9 \[email protected]\dimen4\dimen2 \[email protected]{\dimen4}\dimen6\dimen5 \dimen7\dimen8
\[email protected]\[email protected]{\dimen2}\ifdim\dimen2<\dimen4 \kern\dimen2 \else\kern\dimen4 \fi
\fi\fi\endgroup}\def\[email protected]{\[email protected]\setbox\[email protected]\hbox{\lower\axisheight\hbox to%
\dimen2{\[email protected]\ifPositiveGradient\dimen8\ht\[email protected]\dimen9\[email protected]\else\dimen8\dp
3 \dimen9\dimen1 \fi\else\dimen8 \ifPositiveGradient\objectheight\else\[email protected]\fi
\dimen9\objectwidth\fi\advance\dimen8 \ifPositiveGradient-\fi\axisheight\[email protected]
\unhbox\[email protected]\[email protected]\ifPositiveGradient\dimen8\dp3 \dimen9\dimen0 \else\dimen8\ht
\[email protected]\dimen9\[email protected]\fi\else\dimen8 \ifPositiveGradient\[email protected]\else\objectheight
\fi\dimen9\objectwidth\fi\advance\dimen8 \ifPositiveGradient\else-\fi
\axisheight\[email protected]}}}\def\[email protected]{\dimen6 \[email protected]\DiagramCellHeight\dimen7 \[email protected]
\DiagramCellWidth\[email protected]\ifPositiveGradient\advance\dimen7-\[email protected]
\DiagramCellWidth\else\dimen7 \[email protected]\DiagramCellWidth\dimen6\[email protected]\multiply
\[email protected]\[email protected]\fi\advance\dimen6-\[email protected]\DiagramCellHeight\setbox0=\rlap{\global
\[email protected]\kern-\dimen7 \lower\dimen6\hbox{\[email protected]{\the\[email protected]\space\the\[email protected]
\space bturn}\box0 \[email protected]{eturn}}}\ht0\[email protected]\dp0\[email protected]\raise\axisheight\box0 }\def
\[email protected]{\advance\[email protected]-\[email protected]\[email protected]\[email protected]\advance\[email protected]\[email protected]\ifvoid\[email protected]
\ifdim\[email protected]<.1em\ifnum\[email protected]=\@m\else\[email protected] h\[email protected]<.1em:objects overprint:%
\[email protected]\[email protected]\fi\fi\else\ifhbox\[email protected]\[email protected]\else\[email protected]\fi\advance\[email protected]\[email protected]
\[email protected]{-\[email protected]}{\box\[email protected]}{\[email protected]}\[email protected]\fi\[email protected]-\[email protected]\[email protected]\[email protected]\[email protected]\[email protected]}%
\def\[email protected]{\setbox\[email protected]=\hbox{\unhbox\[email protected]\unskip\unpenalty}\setbox\[email protected]=%
\hbox{\unhbox\[email protected]\unskip\unpenalty}\setbox\[email protected]=\hbox to\[email protected]{\[email protected]\wd
\[email protected]\unhbox\[email protected]\[email protected]\lastkern\unkern\ifdim\[email protected]=\[email protected]\[email protected]\advance\[email protected]
-\wd\[email protected]\else\[email protected]\fi\ifnum\lastpenalty=\[email protected]\else\[email protected]\unpenalty\fi\kern
\[email protected]\ifdim\[email protected]<\[email protected]\[email protected]\fi\ifdim\[email protected]<\wd\[email protected]\[email protected]\fi\[email protected]\[email protected]
\[email protected]\advance\[email protected]-\[email protected]\advance\[email protected]\wd\[email protected]\ifdim\[email protected]<2\wd\[email protected]
\[email protected] h\[email protected]<2\wd\[email protected]:arrow too short:\[email protected]\[email protected]\fi\divide\[email protected]\[email protected]
\[email protected]\[email protected]\advance\[email protected]-\[email protected]\fi\[email protected]\kern-\[email protected]\fi\hbox to\[email protected]{%
\unhbox\[email protected]}\[email protected]}}\[email protected]\ifinpile\inpiletrue\inpilefalse\inpilefalse\def
\pile{\protect\[email protected]\protect\[email protected]}\def\[email protected]#1{\[email protected]#1\[email protected]}\def\[email protected]{%
\[email protected]{pile}\setbox0=\vtop\bgroup\aftergroup\[email protected]\inpiletrue\let\[email protected]\empty
\let\pile\[email protected]\let\[email protected]\[email protected]\let\[email protected]\[email protected]\[email protected]\baselineskip.5%
\PileSpacing\lineskip.1\[email protected]\relax\lineskiplimit\lineskip\mathsurround\[email protected]
\tabskip\[email protected]\let\\\[email protected]}\def\[email protected]{\[email protected]\[email protected]\empty\halign\bgroup\hfil\[email protected]
\let\[email protected]\[email protected]##\[email protected]\[email protected]\hfil\[email protected]\[email protected]##\cr}\[email protected]\[email protected]{pile only
allows one column.}\[email protected]\[email protected]{you left it out!}\def\[email protected]{\[email protected]\[email protected]\relax
\[email protected]{missing \[email protected]\space inserted after \string\pile}\[email protected]}\def\[email protected]{%
\[email protected]\crcr\egroup\egroup}\def\[email protected]{\[email protected]}\def\[email protected]{\[email protected]\relax\[email protected]
\[email protected]{missing \[email protected]\space inserted between \string\pile\space and \[email protected]}%
\[email protected]}\def\[email protected]{\[email protected]}\def\[email protected]{\vbox{\dimen1\dp0 \unvbox0 \setbox0=%
\lastbox\advance\dimen1\dp0 \nointerlineskip\box0 \nointerlineskip\setbox0=%
\null\dp0.5\dimen1\ht0-\dp0 \box0}\ifincommdiag\[email protected]\penalty-9998 \fi\xdef
\[email protected]{pile}}\def\[email protected]{\cr}\def\[email protected]#1{#1}\def\[email protected]{\setbox\[email protected]=\vbox{%
\unvbox\[email protected]\setbox1=\lastbox\setbox0=\box\[email protected]\[email protected]\setbox\[email protected]=%
\lastbox\ifhbox\[email protected]\[email protected]\repeat\unvbox0 \global\[email protected]\[email protected]}\[email protected]\[email protected]}%
\def\[email protected]{\[email protected]\setbox\[email protected]=\hbox{\unhbox\[email protected]\unskip\setbox\[email protected]=%
\lastbox\unskip\unhbox\[email protected]}\ifdim\[email protected]<\wd\[email protected]\[email protected] h\[email protected]<\wd\[email protected]:%
arrow in pile too short:\[email protected]\[email protected]\else\setbox\[email protected]=\hbox to\[email protected]{\unhbox
\[email protected]}\fi\else\[email protected]\fi\setbox0=\vbox{\box\[email protected]\nointerlineskip\ifvoid0
\[email protected]\box1 \else\vskip\skip0 \unvbox0 \fi}\skip0=\lastskip\unskip}\def\[email protected]
{\penalty7 \noindent\unhbox\[email protected]\unskip\setbox\[email protected]=\lastbox\unskip\unhbox
\[email protected]\endgraf\setbox\[email protected]=\lastbox\unskip\setbox\[email protected]=\hbox{\[email protected]\unhbox
\[email protected]\unskip\unskip\unpenalty}\ifcase\prevgraf\[email protected] P\or\ifdim\[email protected]<%
\wd\[email protected]\[email protected] h\[email protected]<\wd\[email protected]:object in pile too wide:\[email protected]\[email protected]\setbox
\[email protected]=\hbox to\[email protected]{\hss\unhbox\[email protected]\hss}\else\setbox\[email protected]=\hbox to\[email protected]
{\hss\kern\[email protected]\unhbox\[email protected]\kern\[email protected]\hss}\fi\or\setbox\[email protected]=\lastbox
\unskip\[email protected]\else\[email protected] Q\fi\unskip\unpenalty}\def\[email protected]{\[email protected]\ifvoid
3 \setbox3=\null\ht3\axisheight\dp3-\ht3 \dimen3.5\[email protected]\else\dimen4\dp3
\dimen3.5\wd3 \setbox3=\[email protected]{\box3}\dp3\dimen4 \ifdim\ht3=-\dp3 \else\[email protected]
\fi\fi\setbox0=\null\[email protected]\dimen4=\ht\[email protected]\advance\dimen4\dp5 \advance\dimen
4\dimen1 \let\[email protected]\empty\else\dimen4\ht3 \fi\ht0\dimen4 \offinterlineskip
\setbox8=\vbox spread2ex{\kern\dimen5 \box1 \[email protected]\vfill\box0}\ht8=\[email protected]\setbox
9=\vtop spread2ex{\kern-\ht3 \box3 \[email protected]\vfill\box5 \kern\dimen1}\dp9=\[email protected]
\dimen0\dimen3 \advance\dimen0-.5\[email protected]\hskip\[email protected] plus.0001fil \box6 \kern
\dimen0 \box9 \kern-\[email protected]\box8 \[email protected]\penalty1 \fi\kern\PileSpacing\kern-%
\PileSpacing\kern-.5\[email protected]\penalty\[email protected]\null\kern\dimen3 \box7}\def\[email protected]{%
\ifhbox\[email protected]\[email protected]{clashing verticals}\ht\[email protected].5\dp\[email protected]\dp\[email protected]-\ht5
\[email protected]\ht\[email protected]\[email protected]\dp\[email protected]\[email protected]\fi\dimen1\dp\[email protected]\[email protected]\prevgraf\unvbox\[email protected]
\[email protected]\lastpenalty\unpenalty\setbox\[email protected]=\null\setbox\[email protected]=\hbox{\[email protected]
\unhbox\[email protected]\unskip\unpenalty\dimen0\lastkern\unkern\unkern\unkern\kern
\dimen0 \[email protected]}\setbox\[email protected]=\hbox{\unhbox\[email protected]\dimen0\lastkern\unkern
\unkern\global\[email protected]\lastkern\unkern\kern\dimen0 }\[email protected]\ifnum\[email protected]>4 \[email protected]
\repeat\unskip\unskip\advance\[email protected].5\wd\[email protected]\advance\[email protected]\wd\[email protected]\advance
\[email protected].5\wd\[email protected]\advance\[email protected]\wd\[email protected]\setbox\[email protected]=\hbox{\kern-\[email protected]\box
\[email protected]\unhbox\[email protected]\box\[email protected]\kern-\[email protected]\penalty\[email protected]\penalty\[email protected]}\ht
\[email protected]\dimen1 \dp\[email protected]\[email protected]\wd\[email protected]\[email protected]\[email protected]}\def\[email protected]{\ifdim\wd\[email protected]<%
\[email protected]\setbox\[email protected]=\hbox to\[email protected]{\[email protected]\unhbox\[email protected]}\fi\advance\[email protected]\[email protected]
\setbox\[email protected]=\hbox{\box\[email protected]\unhbox\[email protected]}\unskip\setbox\[email protected]=\lastbox
\setbox\[email protected]=\hbox{\unhbox\[email protected]\unskip\unpenalty\dimen0\lastkern\unkern
\unkern\global\[email protected]\lastkern\unkern\kern\dimen0 }}\def\[email protected]{\dimen1\dp
\[email protected]\ifhbox\[email protected]\[email protected]\else\[email protected]\fi\setbox\[email protected]=\vbox{\penalty\[email protected]}\dp
\[email protected]-\dp\[email protected]\wd\[email protected]\[email protected]}\def\[email protected]{\unvbox\[email protected]\[email protected]\lastpenalty
\unpenalty\ifdim\dimen1<\ht\[email protected]\[email protected] v\dimen1<\ht\[email protected]:rows overprint:%
\[email protected]\[email protected]\fi}\def\[email protected]{\dimen0=\ht\[email protected]\setbox\[email protected]=\hbox\bgroup
\advance\dimen1-\ht\[email protected]\unhbox\[email protected]\[email protected]\lastpenalty\unpenalty\[email protected]
\lastpenalty\unpenalty\global\[email protected]-\lastkern\unkern\setbox0=\lastbox\[email protected]
\setbox\[email protected]=\hbox{\box0\unhbox\[email protected]}\setbox0=\lastbox\ifhbox0 \[email protected]
\repeat\global\[email protected]-\lastkern\unkern\global\[email protected]\[email protected]\unhbox\[email protected]\egroup
\[email protected]\[email protected]\[email protected]{\[email protected]}{\box\[email protected]}{\[email protected]}{\dimen1}}\def\[email protected]{\setbox0=%
\hbox to\wd0\bgroup\unhbox0 \unskip\unpenalty\dimen7\lastkern\unkern\ifnum
\lastpenalty=1 \unpenalty\[email protected]\else\[email protected]\fi\setbox0=\lastbox\dimen6%
\lastkern\unkern\setbox1=\lastbox\setbox0=\vbox{\unvbox0\[email protected]\kern-\dimen1%
\fi}\ifdim\dimen0<\ht0 \[email protected] v\dimen0<\ht0:upper part of vertical too short:%
{\[email protected]\[email protected]\else\[email protected]\fi}\[email protected]\else\setbox0=\vbox to\dimen0{\unvbox0}\fi
\setbox1=\vtop{\unvbox1}\ifdim\dimen1<\dp1 \[email protected] v\dimen1<\dp1:lower part of
vertical too short:\[email protected]\[email protected]\else\setbox1=\vtop to\dimen1{\unvbox1}\fi\box
1 \kern\dimen6 \box0 \kern\dimen7 \[email protected]\global\[email protected]\[email protected]\egroup\[email protected]
\[email protected]\relax}\countdef\[email protected]=14 \newcount\[email protected]\newcount\[email protected]\newcount\[email protected]
\let\[email protected]\[email protected]\newcount\[email protected]\newcount\[email protected]\let\[email protected]\[email protected]\newcount
\[email protected]\[email protected]\[email protected]\[email protected]\[email protected]\[email protected]\def\[email protected]{-1}\def\[email protected]{\ifnum\[email protected]<\[email protected]
\else\begingroup\scrollmode\showboxdepth\[email protected]\showboxbreadth\maxdimen
\showlists\endgroup\fi\[email protected]\[email protected]\[email protected]=\[email protected]\advance\[email protected]1 \[email protected]=\[email protected]
\ifnum\[email protected]=1 \[email protected]\fi\advance\[email protected]\[email protected]\dimen1\[email protected]\skip0\[email protected]\[email protected]=%
\[email protected]\advance\[email protected]\[email protected]\divide\[email protected]2 \ifnum\[email protected]>\[email protected]\[email protected]{The
diagram has too many rows! It can't be reformatted.}\else\[email protected]\[email protected]\fi
\[email protected]}\def\[email protected]{\[email protected]\[email protected]\[email protected]\ifnum\[email protected]<\[email protected]\setbox\[email protected]\box
\[email protected]\advance\[email protected]1\relax\repeat\[email protected]\[email protected]\skip\[email protected]\[email protected]\[email protected]\[email protected]
\lastpenalty\unpenalty\ifnum\[email protected]>\[email protected]\[email protected]\repeat\ifnum\[email protected]=-123 \[email protected]
\unpenalty\else\[email protected] D\fi\ifx\[email protected]\relax\else\[email protected]\[email protected]\advance
\[email protected]\[email protected]\expandafter\[email protected]\[email protected]\fi\[email protected]\[email protected]\[email protected]\[email protected]\[email protected]\ifx\[email protected]
\relax\else\expandafter\[email protected]\[email protected]\fi\[email protected]\[email protected]\advance\[email protected]\[email protected]
\[email protected]\ht\[email protected]}\def\[email protected]{\ifcase\[email protected]\or\[email protected]\else\[email protected]-\lastpenalty
\unpenalty\[email protected]\lastpenalty\unpenalty\setbox0=\lastbox\[email protected]\fi\[email protected]}\def
\[email protected]{\skip1\lastskip\unskip\advance\skip0\skip1 \ifdim\skip1=\[email protected]\else
\expandafter\[email protected]\fi}\def\[email protected]{\setbox0=\lastbox\[email protected]\dp0 \advance\[email protected]
\skip\[email protected]\skip\[email protected]\[email protected]\advance\[email protected]\[email protected]\[email protected]\ifnum\[email protected]>\[email protected]\[email protected]
\DiagramCellHeight\[email protected]\[email protected]\advance\[email protected]-\[email protected]\fi\fi\[email protected]\ht0 \[email protected]
\[email protected]\setbox\[email protected]\hbox{\unhbox\[email protected]\unhbox0}\dp\[email protected]\[email protected]\ht\[email protected]\[email protected]
\advance\[email protected]1 }\def\[email protected]{\ifnum\[email protected]<\[email protected]\advance\[email protected]\[email protected]\ifnum\[email protected]<%
\[email protected]\[email protected]\else\[email protected]\dp\[email protected]\[email protected]\ht\[email protected]\setbox\[email protected]\hbox{\box\[email protected]
\penalty\[email protected]\penalty\[email protected]\unhbox\[email protected]}\dp\[email protected]\[email protected]\ht\[email protected]\[email protected]\fi
\else\[email protected]\fi}\def\[email protected]{\[email protected]{diagonal goes outside diagram (lost)}}\def
\[email protected]{\advance\[email protected]\[email protected]\ifnum\[email protected]<\[email protected]\[email protected]\else\ifnum\[email protected]=\[email protected]
\[email protected]\else\ifnum\[email protected]>\[email protected]\[email protected] M\else\[email protected]\dp\[email protected]\[email protected]\ht
\[email protected]\setbox\[email protected]\hbox{\box\[email protected]\penalty\[email protected]\penalty\[email protected]\unhbox\[email protected]}\dp
\[email protected]\[email protected]\ht\[email protected]\[email protected]\fi\fi\fi}\def\[email protected]{\[email protected]\[email protected]\setbox\[email protected]=%
\hbox{\[email protected] A\@super f\@sub f\[email protected]}\[email protected]\[email protected]\[email protected]\[email protected]\[email protected]\[email protected]\[email protected]\[email protected]
\[email protected]=\[email protected]\[email protected]\[email protected]\[email protected]\[email protected]\[email protected]\ifnum\[email protected]>\[email protected]\advance\[email protected]\[email protected]
\[email protected]\ht\[email protected]\[email protected]\dp\[email protected]\advance\[email protected]\[email protected]\[email protected]\advance\[email protected]\[email protected]
\[email protected]\[email protected]\[email protected]\ht\[email protected]\[email protected]\dp\[email protected]\[email protected]\nointerlineskip\box\[email protected]
\[email protected]\[email protected]\setbox\[email protected]\null\ht\[email protected]\[email protected]\repeat\[email protected]\nointerlineskip
\box\[email protected]\[email protected]\[email protected]\DiagramCellWidth{width}\[email protected]\[email protected]\DiagramCellHeight{%
height}\[email protected]\[email protected]\advance\[email protected]-\[email protected]\advance\[email protected]\[email protected]\advance\[email protected]
\[email protected]\dimen0\wd\[email protected]\[email protected]\axisheight\dimen1\[email protected]\advance\dimen1-\[email protected]
\dimen2\[email protected]\advance\dimen2-\dimen0 \advance\[email protected]-\[email protected]\advance\[email protected]-%
\[email protected]}\[email protected]\year\multiply\[email protected]12 \advance\[email protected]\month\ifnum\[email protected]>%
23978 \loop\iftrue\message{gone February 1998!}\repeat\fi\def\[email protected]{\[email protected]-%
\[email protected]\[email protected]\[email protected]\setbox\[email protected]=\null\dp\[email protected]\[email protected]\ht\[email protected]-\[email protected]\[email protected]\[email protected]
\[email protected]\[email protected]\[email protected]jA\[email protected]\advance\[email protected]-\[email protected]\advance\[email protected]\[email protected]\[email protected]\[email protected]
\[email protected]\[email protected]\[email protected]\ifnum\[email protected]>\[email protected]\advance\[email protected]\[email protected]\advance\[email protected]\[email protected]
\[email protected]\wd\[email protected]\setbox\[email protected]=\box\[email protected]\[email protected]\repeat\[email protected]\ht\[email protected]\[email protected]\dp
\[email protected]\[email protected]}\def\[email protected]#1#2#3{\ifdim#1>.01\[email protected]\[email protected]#2\relax\advance\[email protected]#%
1\relax\advance\[email protected].99\[email protected]\[email protected]\[email protected]\divide\[email protected]\[email protected]\[email protected]{%
increase cell #3 to \the\[email protected] em}\fi}\def\[email protected]{\[email protected]=\[email protected]\penalty4
\noindent\unhbox\[email protected]\[email protected]\unskip\setbox0=\lastbox\ifhbox0 \advance\[email protected]
\[email protected]\setbox\[email protected]\hbox to\wd0{\null\penalty-9990\null\unhbox0}\repeat\[email protected]
\[email protected]\advance\[email protected]\[email protected]\advance\[email protected]-\[email protected]\ifnum\[email protected]<\[email protected]\[email protected]
\[email protected]\advance\[email protected]\[email protected]\dimen0=\wd\[email protected]\[email protected]\[email protected]\advance\[email protected]\[email protected]
\[email protected]\wd\[email protected]\[email protected]\ifnum\[email protected]<\[email protected]\[email protected]\[email protected]\dimen0\wd\[email protected]\advance
\[email protected]1 \repeat\fi\[email protected]\[email protected]\lastpenalty\unpenalty\ifnum\[email protected]>\[email protected]\[email protected]
\lastpenalty\unpenalty\[email protected]\repeat\endgraf\unskip\ifnum\lastpenalty=4
\unpenalty\else\[email protected] S\fi}\def\[email protected]{\advance\[email protected]\[email protected]\advance
\[email protected]\[email protected]\setbox0=\lastbox\ifnum\[email protected]<\[email protected]\setbox\[email protected]\hbox{\box0%
\penalty\[email protected]\unhbox\[email protected]}\else\[email protected]\fi}\def\[email protected]{}\[email protected]\[email protected]\[email protected]
\[email protected]\def\[email protected]{\advance\dimen0\wd\[email protected]\divide\dimen0\[email protected]\[email protected]\dimen0%
\DiagramCellWidth\else\[email protected]{\dimen0}\DiagramCellWidth\[email protected]\fi\advance\[email protected]
\dimen0 }\def\[email protected]{\setbox\[email protected]=\vbox{}\dp\[email protected]=\[email protected]\wd\[email protected]\[email protected]
\advance\[email protected]1 }\def\[email protected]#1,{\def\[email protected]{#1}\ifx\[email protected]\[email protected]\else\advance
\[email protected]\[email protected]\DiagramCellWidth\[email protected]\expandafter\[email protected]\fi}\def\[email protected]#1,{\def
\[email protected]{#1}\ifx\[email protected]\[email protected]\else\ifnum\[email protected]>\[email protected]\[email protected]\[email protected]
\DiagramCellHeight\advance\[email protected]-\dp\[email protected]\advance\[email protected]\[email protected]\ht\[email protected]\[email protected]
\fi\expandafter\[email protected]\fi}\def\[email protected]{\[email protected]\[email protected]\dimen0 \advance\[email protected]-%
\DiagramCellWidth\ifdim\[email protected]>2\MapShortFall\[email protected]{badly drawn diagonals (see
manual)}\let\[email protected]\empty\fi\else\let\[email protected]\empty\fi}\def\[email protected]{\[email protected]\[email protected]
\[email protected]\ifnum\[email protected]<\[email protected]\dimen0\dp\[email protected]\advance\dimen0\[email protected]\dp\[email protected]\dimen
0 \advance\[email protected]1 \repeat}\def\[email protected]#1#2#3#4{\ifnum\[email protected]<\[email protected]\[email protected]=#1%
\relax\setbox\[email protected]=\hbox{\setbox0=#2\dimen7=#4\relax\dimen8=#3\relax\ifhbox
\[email protected]\unhbox\[email protected]\advance\[email protected]-\lastkern\unkern\fi\ifdim\[email protected]=\[email protected]\else
\kern-\[email protected]\fi\raise\dimen7\box0 \kern-\dimen8 }\ifnum\[email protected]=\[email protected]\[email protected]
\[email protected]\[email protected]\fi\else\[email protected] O\fi}\def\[email protected]{\setbox\[email protected]=\hbox{\[email protected]
\[email protected]\[email protected]\[email protected]\[email protected]\[email protected]\relax\[email protected]\ifnum\[email protected]<\[email protected]\[email protected]\wd\[email protected]
\relax\[email protected]\advance\[email protected]1 \advance\[email protected]1 \repeat}\[email protected]\[email protected]{\wd\[email protected]}\wd
\[email protected]\[email protected]}\def\[email protected]{\ifhbox\[email protected]\[email protected]\[email protected]\relax\advance\[email protected]-\[email protected]
\relax\ifdim\[email protected]=\[email protected]\else\kern\[email protected]\fi\[email protected]\[email protected]\advance\[email protected]\wd\[email protected]
\relax\unhbox\[email protected]\advance\[email protected]-\lastkern\unkern\fi}\def\[email protected]{\setbox
\[email protected]=\box\[email protected]\[email protected]=\[email protected]\[email protected]\[email protected]\[email protected]\[email protected]\advance\[email protected]\[email protected]
\advance\[email protected]-\[email protected]\advance\[email protected]\[email protected]\[email protected]\wd\[email protected]\[email protected]\[email protected]\advance
\[email protected]\[email protected]\[email protected].5\wd\[email protected]\advance\[email protected]\[email protected]\[email protected]\[email protected]\[email protected]\@m\[email protected]
\ifnum\[email protected]>\[email protected]\advance\[email protected]\[email protected]\advance\[email protected]-\[email protected]\[email protected]\wd\[email protected]
\[email protected]\advance\[email protected]\[email protected]\advance\[email protected]\[email protected]\[email protected]\wd\[email protected]\repeat\[email protected]
\[email protected]\[email protected]-\[email protected]\[email protected]}\newcount\[email protected]\def\[email protected]{}\def\[email protected]{\mathsurround
\[email protected]\hsize\[email protected]\rightskip\[email protected] plus1fil minus\maxdimen\parfillskip\[email protected]\linepenalty
9000 \looseness0 \hfuzz\maxdimen\hbadness10000 \clubpenalty0 \widowpenalty0
\displaywidowpenalty0 \interlinepenalty0 \predisplaypenalty0
\postdisplaypenalty0 \interdisplaylinepenalty0 \interfootnotelinepenalty0
\floatingpenalty0 \brokenpenalty0 \everypar{}\leftskip\[email protected]\parskip\[email protected]
\parindent\[email protected]\pretolerance10000 \tolerance10000 \hyphenpenalty10000
\exhyphenpenalty10000 \binoppenalty10000 \relpenalty10000 \adjdemerits0
\doublehyphendemerits0 \finalhyphendemerits0 \[email protected]\prevdepth\[email protected]}\newbox
\[email protected]\newbox\[email protected]\def\[email protected]{\unhcopy\[email protected]}\def\[email protected]{\unhcopy\[email protected]}\def
\[email protected]{\hbox{}\penalty1\nointerlineskip}\def\[email protected]{\penalty5 \noindent\setbox
\[email protected]=\null\[email protected]\[email protected]\[email protected]\[email protected]\ifnum\[email protected]<\[email protected]\ht\[email protected]\ht\[email protected]\dp\[email protected]
\dp\[email protected]\unhbox\[email protected]\skip0=\lastskip\unskip\else\[email protected]\skip0=\[email protected]\fi\endgraf
\ifcase\prevgraf\[email protected] Y \or\[email protected] Z \or\[email protected]\or\[email protected]@I\else
\[email protected]\fi\unskip\setbox0=\lastbox\unskip\unskip\unpenalty\noindent\unhbox0%
\setbox0\lastbox\unpenalty\unskip\unskip\unpenalty\setbox0\lastbox\[email protected]
\[email protected]\lastpenalty\unpenalty\ifnum\[email protected]>\[email protected]\setbox\[email protected]\lastbox\[email protected]\repeat
\endgraf\unskip\unskip\unpenalty}\def\[email protected]{\[email protected]\[email protected]\advance\[email protected]-\[email protected]
\[email protected]\[email protected]\advance\[email protected]-\[email protected]\advance\[email protected]1 \expandafter\message{%
prevgraf=\the\prevgraf at (\the\[email protected],\the\[email protected])}}\def\[email protected]@I{\[email protected]\setbox
\[email protected]=\lastbox\setbox\[email protected]=\hbox{\unhbox\[email protected]\unskip\unpenalty}\unskip
\ifdim\ht\[email protected]>\ht\[email protected]\setbox\[email protected]=\copy\[email protected]\else\ifdim\dp\[email protected]>\dp
\[email protected]\setbox\[email protected]=\copy\[email protected]\else\[email protected]\[email protected]\fi\fi\advance\[email protected].5\wd
\[email protected]\advance\[email protected].5\wd\[email protected]\setbox\[email protected]=\hbox{\unhbox\[email protected]\[email protected]}\[email protected]
\[email protected]{\box\[email protected]}\[email protected]\[email protected]\[email protected]\[email protected]}\def\[email protected]{\ifnum\[email protected]>0 \advance
\dimen0-\[email protected]\[email protected]-.5\dimen0 \[email protected]-\[email protected]\else\[email protected]0 \[email protected]\[email protected]\fi\setbox
\[email protected]=\lastbox\setbox\[email protected]=\hbox{\unhbox\[email protected]\unskip\unskip\unpenalty
\setbox0=\lastbox\global\[email protected]\lastkern\unkern}\advance\[email protected]-.5\[email protected]\unskip
\setbox\[email protected]=\null\[email protected]\[email protected]\[email protected]-\[email protected]}\def\[email protected]{\ht\[email protected]\[email protected]\dp
\[email protected]\[email protected]}\def\[email protected]#1{\setbox\[email protected]=\hbox{\[email protected]{\ht\[email protected]}{\ht#1}\[email protected]{%
\dp\[email protected]}{\dp#1}\[email protected]{\wd\[email protected]}{\wd#1}\vrule height\ht\[email protected] depth\dp\[email protected]
width\wd\[email protected]}}\def\[email protected]{\[email protected]\[email protected]\setbox\[email protected]=\lastbox\unskip\setbox
\[email protected]=\lastbox\unskip\setbox\[email protected]=\hbox{\unhbox\[email protected]\unskip\global\[email protected]
\lastpenalty\unpenalty}\advance\[email protected]9999 \ifcase\[email protected]\[email protected]\or\[email protected]\or
\[email protected]\or\[email protected]\or\[email protected]\or\[email protected]\else\[email protected]9\fi}\def\[email protected]{\[email protected]
\[email protected]\[email protected]\setbox\[email protected]=\box\[email protected]\setbox\[email protected]=\box\[email protected]}\def\[email protected]{%
\[email protected]\[email protected]\setbox\[email protected]\hbox{\penalty8 \unhbox\[email protected]\unskip\unpenalty\ifnum
\lastpenalty=8 \else\[email protected]\fi}\[email protected]\setbox\[email protected]=\hbox{\unhbox\[email protected]\unskip
\unpenalty\global\setbox\[email protected]=\lastbox}\ifdim\wd\[email protected]=\[email protected]\else\[email protected]\fi
\setbox\[email protected]=\box\[email protected]}\def\[email protected]{\[email protected]{extra material in \string\pile
\space cell (lost)}}\def\[email protected]{\[email protected]\ifvoid\[email protected]\else\[email protected]{Clashing
horizontal arrows}\[email protected].5\[email protected]\[email protected]-\[email protected]\[email protected]\[email protected]\[email protected]\[email protected]\[email protected]\fi
\[email protected]\[email protected]\advance\[email protected]-\[email protected]\[email protected]-\[email protected]\[email protected]\[email protected]}\def\[email protected]{\setbox
0\lastbox\unskip\[email protected]\[email protected]\[email protected]\ifdim\skip0>\[email protected]\[email protected]\[email protected]0 \else\ifnum\[email protected]<1
\[email protected]0 \dimen0\[email protected]\fi\advance\[email protected]1 \fi}\def\VonH{\[email protected]46\VonH{.5\[email protected]}}%
\def\HonV{\[email protected]57\HonV{.5\[email protected]}}\def\HmeetV{\[email protected]44\HmeetV{-\MapShortFall}%
}\def\[email protected]#1#2#3#4{\[email protected]34#1{\string#3}\[email protected]\[email protected]-999#2 \dimen0=#4\[email protected]
\dimen0\advance\[email protected]\axisheight\[email protected]\dimen0\advance\[email protected]-\axisheight\[email protected]
\[email protected]@C\[email protected]}\def\[email protected]@C#1{\setbox0=\hbox{\[email protected]#1\[email protected]}\dimen0.5\wd0 \[email protected]
\ht0 \[email protected]\dp0 \[email protected]}\def\[email protected]{\setbox0=\null\ht0=\[email protected]\dp0=\[email protected]\wd0=%
\dimen0 \copy0\penalty\[email protected]\box0 }\def\[email protected]{\[email protected]\[email protected]}\def\[email protected]{\[email protected]
\[email protected]}\def\[email protected]{\[email protected]\[email protected]\[email protected]}\def\[email protected]{\setbox\[email protected]=\hbox{\unhbox
\[email protected]}\setbox\[email protected]=\hbox{\unhbox\[email protected]\global\setbox\[email protected]=\lastbox}\ht
\[email protected]\ht\[email protected]\dp\[email protected]\dp\[email protected]\advance\[email protected]\wd\[email protected]\advance\[email protected]\wd
\[email protected]}\[email protected]\ifPositiveGradient\PositiveGradienttrue\PositiveGradientfalse
\PositiveGradienttrue\[email protected]\ifClimbing\Climbingtrue\Climbingfalse
\Climbingtrue\newcount\DiagonalChoice\DiagonalChoice\[email protected]\ifx\tenln\nullfont
\[email protected]\def\[email protected]{\[email protected]\ifPositiveGradient/\else\[email protected]\backslash\[email protected]\fi}%
\else\def\[email protected]{\[email protected]\char\[email protected]}\fi\let\[email protected]\tenln\def\[email protected]@char#1{%
\hbox{#1\[email protected]\ifPositiveGradient\else\advance\[email protected]64 \fi\char\[email protected]}}\def
\[email protected]{\[email protected]@char{\[email protected]\[email protected]\multiply\[email protected]8\advance\[email protected]-9\advance
\[email protected]\[email protected]}}\def\[email protected]{\[email protected]@char{\ifcase\DiagonalChoice\[email protected]\or
\[email protected]\or\[email protected]\else\[email protected]\fi}}\def\[email protected]{\ifnum\[email protected]=\[email protected]\[email protected]\rq33 \else
\[email protected]\[email protected]\multiply\[email protected]\[email protected]@n\advance\[email protected]-9\advance\[email protected]\[email protected]
\advance\[email protected]\[email protected]\fi}\def\[email protected]{\[email protected]\rq\ifcase\[email protected]55\or\ifcase\[email protected]
66\or22\or52\or61\or72\fi\or\ifcase\[email protected]66\or25\or22\or63\or52\fi\or\ifcase
\[email protected]66\or16\or36\or22\or76\fi\or\ifcase\[email protected]66\or27\or25\or67\or22\fi\fi
\relax}\def\[email protected]#1{\hbox{#1\setbox0=\[email protected]@char{#1}\ifPositiveGradient
\else\raise.3\ht0\fi\copy0 \kern-.7\wd0 \ifPositiveGradient\raise.3\ht0\fi
\box0}}\def\[email protected]#1{\hbox{\setbox0=#1\kern-.75\wd0 \vbox to.25\ht0{%
\ifPositiveGradient\else\vss\fi\box0 \ifPositiveGradient\vss\fi}}}\def\[email protected]#%
1{\hbox{\setbox0=#1\dimen0=\wd0 \vbox to.25\ht0{\ifPositiveGradient\vss\fi
\box0 \ifPositiveGradient\else\vss\fi}\kern-.75\dimen0 }}\[email protected]{+h:>}{%
\[email protected]@char\[email protected]}\[email protected]{-h:>}{\[email protected]@char\[email protected]}\[email protected]{+t:<}{-h:>}%
\[email protected]{-t:<}{+h:>}\[email protected]{+t:>}{\[email protected]{\[email protected]@char\[email protected]}}\[email protected]{-t:>}{%
\[email protected]{\[email protected]@char\[email protected]}}\[email protected]{+h:<}{-t:>}\[email protected]{-h:<}{+t:>}\[email protected]{+h:>>%
}{\[email protected]\[email protected]}\[email protected]{-h:>>}{\[email protected]\[email protected]}\[email protected]{+t:<<}{-h:>>}\[email protected]{-t:<<}{+%
h:>>}\[email protected]{+t:>>}{\[email protected]{\[email protected]\[email protected]}}\[email protected]{-t:>>}{\[email protected]{\[email protected]\[email protected]}}%
\[email protected]{+h:<<}{-t:>>}\[email protected]{-h:<<}{+t:>>}\[email protected]{+f:-}{\[email protected]\null\else\[email protected]
\fi}\[email protected]{-f:-}{+f:-}\def\[email protected]#1#2{\vbox to#1{\vss\hbox to#2{\hss.\hss}\vss
}}\def\hfdot{\[email protected]{2\axisheight}{.7em}}%%
\def\vfdot{\[email protected]{1.46ex}\[email protected]}\def\[email protected]{\hbox{\dimen0=.3\[email protected]\dimen1\dimen0
\ifnum\[email protected]>\[email protected]\[email protected]{\dimen1}\else\[email protected]{\dimen0}\fi\[email protected]{\dimen0}{%
\dimen1}}}\newarrowfiller{.}\hfdot\hfdot\vfdot\vfdot\def\dfdot{\[email protected]\[email protected]}%
\[email protected]{+f:.}{\dfdot}\[email protected]{-f:.}{\dfdot}\def\[email protected]@[email protected]#1{\hbox\bgroup
\def\[email protected]{#1\egroup}\afterassignment\[email protected]%%
\[email protected]=\rq}\def\lnchar{\[email protected]@[email protected]\[email protected]}\let\laf\lnchar\let\lah
\lnchar\def\lad{\[email protected]@[email protected]\xlad}\def\xlad{\setbox2=\hbox{\[email protected]}%
\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{\[email protected]@[email protected]\xlahh}%
\def\lat{\[email protected]@[email protected]\xlat}\def\xlat{\setbox0=\hbox{\[email protected]}\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\[email protected]}}\def\xlahh{\setbox0=\hbox{\[email protected]}\ifPositiveGradient\[email protected]\copy0
\kern-.7\wd0 \mv.3\ht0\box0 \else\ifClimbing\[email protected]\copy0 \kern-.7\wd0 \mv.3%
\ht0\box0 \else\mv-.3\ht0\copy0 \kern-.7\wd0 \box0 \fi\fi}\def\[email protected]#1{%
\setbox#1=\hbox{\dimen5\dimen#1 \setbox8=\box#1 \dimen1\wd8 \[email protected]\dimen5
\divide\[email protected]\dimen1 \ifnum\[email protected]=0 \box8 \ifdim\dimen5<.95\dimen1 \[email protected]{%
diagonal line too short}\fi\else\dimen3=\dimen5 \advance\dimen3-\dimen1
\divide\dimen3\[email protected]\dimen4\dimen3 \[email protected]{\dimen4}\ifPositiveGradient
\multiply\dimen4\[email protected]\fi\dimen6\dimen1 \advance\dimen6-\dimen3 \loop\raise
\[email protected]\dimen4\copy8 \ifnum\[email protected]>0 \kern-\dimen6 \advance\[email protected]\[email protected]
\repeat\fi}}\def\[email protected]#1{\[email protected]\[email protected]{#1}\else\[email protected]{#1}\fi}\newdimen
\objectheight\objectheight1.8ex \newdimen\objectwidth\objectwidth1em \def
\[email protected]{\dimen6=\[email protected]\DiagramCellHeight\dimen7=\[email protected]\DiagramCellWidth\[email protected]
\ifnum\[email protected]>0 \ifnum\[email protected]>0 \[email protected]\else\aftergroup\[email protected]\fi\else\aftergroup
\[email protected]\fi}\def\[email protected]{\[email protected]{diagonal map is nearly vertical}\[email protected]}\def\[email protected]
{\[email protected]{diagonal map is nearly horizontal}\[email protected]}\[email protected]\[email protected]{Use an
orthogonal map instead}\def\[email protected]{\[email protected]\dimen3\dimen7\dimen7\dimen6\[email protected]{%
\dimen7}\advance\dimen3-\dimen7 \[email protected]\ifnum\[email protected]>\[email protected]\advance\dimen6-%
\dimen1\advance\dimen6-\dimen5 \[email protected]{\dimen1}\[email protected]{\dimen5}\else\dimen0%
\dimen1\advance\dimen0\dimen5\[email protected]{\dimen0}\advance\dimen6-\dimen0 \fi\dimen
2.5\dimen7\advance\dimen2-\dimen1 \dimen4.5\dimen7\advance\dimen4-\dimen5
\ifPositiveGradient\dimen0\dimen5 \advance\dimen1-\[email protected]\DiagramCellWidth
\advance\dimen1 \[email protected]\DiagramCellWidth\setbox6=\llap{\unhbox6\kern.1\ht2}%
\setbox7=\rlap{\kern.1\ht2\unhbox7}\else\dimen0\dimen1 \advance\dimen1-\[email protected]
\DiagramCellWidth\setbox7=\llap{\unhbox7\kern.1\ht2}\setbox6=\rlap{\kern.1\ht
2\unhbox6}\fi\setbox6=\vbox{\box6\kern.1\wd2}\setbox7=\vtop{\kern.1\wd2\box7}%
\[email protected]{\dimen0}\advance\dimen0-\axisheight\advance\dimen0-\[email protected]
\DiagramCellHeight\dimen5-\dimen0 \advance\dimen0\dimen6 \advance\dimen1.5%
\dimen3 \ifdim\wd3>\[email protected]\ifdim\ht3>-\dp3\[email protected]\fi\fi\dimen3\dimen2 \dimen7%
\dimen2\advance\dimen7\dimen4 \ifvoid3 \else\[email protected]\else\dimen8\ht3\advance
\dimen8-\axisheight\[email protected]{\dimen8}\[email protected]{\dimen8}{.5\wd3}\dimen9\dp3\advance
\dimen9\axisheight\[email protected]{\dimen9}\[email protected]{\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=\[email protected]
\DiagramCellHeight\advance\dimen9-2\DiagramCellHeight\[email protected]\advance\dimen2%
\dimen4 \[email protected]{2}\dimen2-\dimen0\advance\dimen2\dp2 \else\[email protected]{2}\[email protected]{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\[email protected]{\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 \[email protected]\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{\PositiveGradientfalse
\Climbingtrue\DiagonalChoice0 }\def\NorthEast{\PositiveGradienttrue
\Climbingtrue\DiagonalChoice1 }\def\SouthWest{\PositiveGradienttrue
\Climbingfalse\DiagonalChoice3 }\def\SouthEast{\PositiveGradientfalse
\Climbingfalse\DiagonalChoice2 }\def\[email protected]{\vadjust{\[email protected]\[email protected]\advance
\[email protected]\ifPositiveGradient\else-\fi\[email protected]\relax\[email protected]\[email protected]\advance\[email protected]-%
\[email protected]\relax\hbox{\advance\[email protected]\ifPositiveGradient-\fi\[email protected]\advance\[email protected]
\[email protected]\box\[email protected]\penalty\[email protected]\penalty\[email protected]}\penalty\[email protected]\penalty\[email protected]
\penalty104}}\def\[email protected]#1{\relax\vadjust{\[email protected]{#1}\penalty\[email protected]
\penalty\[email protected]\penalty\[email protected]}}\def\[email protected]{\ifcase\[email protected]\or\or\[email protected]{.5\wd0}{\box
0}{.5\wd0}\[email protected]\or\unhbox\[email protected]\setbox\[email protected]\lastbox\[email protected]{.5\wd0}{\box0}{.5\wd0}\[email protected]
\unpenalty\unpenalty\setbox\[email protected]\lastbox\or\[email protected]@G\else\advance\[email protected]-100 \ifnum
\[email protected]<\[email protected]\[email protected]ouldnt B\fi\setbox\[email protected]\hbox{\kern\[email protected]\copy\[email protected]\kern\[email protected]
\[email protected]\[email protected]\advance\[email protected]-\[email protected]\penalty\[email protected]\[email protected]\[email protected]\advance\[email protected]-%
\[email protected]\penalty\[email protected]\unhbox\[email protected]\global\[email protected]\lastpenalty\unpenalty\global
\[email protected]\lastpenalty\unpenalty}\[email protected]-\[email protected]\[email protected]\[email protected]\[email protected]\fi}\def\[email protected]@G{%
\unhbox\[email protected]\setbox\[email protected]\lastbox\[email protected]\lastpenalty\unpenalty\advance\[email protected]\[email protected]
\[email protected]\[email protected]\advance\[email protected]-\lastpenalty\unpenalty\dimen1\lastkern\unkern
\setbox3\lastbox\dimen0\lastkern\unkern\setbox0=\hbox to\[email protected]{\dimen7\[email protected]
\advance\dimen7-\wd\[email protected]\ifdim\dimen7<\[email protected]\PositiveGradienttrue\multiply
\dimen7\[email protected]\else\PositiveGradientfalse\fi\ifnum\[email protected]>\[email protected]\dimen6\[email protected]
\advance\dimen6-\ht\[email protected]\else\dimen6\[email protected]\fi\[email protected]\ifPositiveGradient\dimen6%
\[email protected]\else\[email protected]-\[email protected]\kern-\dimen7 \fi\global\[email protected]\raise\dimen6\hbox{\[email protected]{%
\the\[email protected]\space\the\[email protected]\space bturn}\box0 \[email protected]{eturn}}\hss}\ht0\[email protected]\dp0%
\[email protected]\[email protected]{\[email protected]}{\box\[email protected]}{\[email protected]}{\axisheight}}\def\[email protected]#1{\expandafter\[email protected]{#1}%
}\[email protected]\[email protected]{output is PostScript dependent}\def\[email protected]{\[email protected]{/bturn {gsave
currentpoint currentpoint translate 4 2 roll neg exch atan rotate neg exch neg
exch translate } def /eturn {currentpoint grestore moveto} def}}\def\[email protected]#1{%
\[email protected]#1\relax\multiply\[email protected]7\advance\[email protected]16577\divide\[email protected]33154 }\def
\[email protected]#1{\expandafter\special{#1}} \def\[email protected]#1{\setbox#1=\hbox{\dimen0\dimen
#1\[email protected]{\dimen0}\[email protected]{\dimen0}\setbox0=\null\ifPositiveGradient\[email protected]-%
\[email protected]\ht0\dimen0 \else\dp0\dimen0 \fi\box0 \[email protected]\[email protected]\[email protected]\[email protected]\[email protected]{%
pn \the\[email protected]}\[email protected]{pa 0 0}\[email protected]{\dimen#1}\[email protected]{pa \the\[email protected]\space\the
\[email protected]}\[email protected]{fp}\kern\dimen#1}}\def\[email protected]{\[email protected]\begingroup\ifdim\dimen7<%
\dimen6 \dimen2=\dimen6 \dimen6=\dimen7 \dimen7=\dimen2 \[email protected]\[email protected]\[email protected]
\[email protected]\[email protected]\[email protected]\else\dimen2=\dimen7 \fi\ifdim\dimen6>.01\[email protected]\[email protected]\global
\[email protected]\dimen0 \else\global\[email protected]\dimen7 \fi\endgroup\dimen2\[email protected]}\def\[email protected]{%
\[email protected]\ifdim\dimen7>1.73\dimen6 \divide\dimen2 4 \multiply\[email protected]2 \else\dimen
2=0.353553\dimen2 \advance\[email protected]-\[email protected]\multiply\[email protected]4 \fi\dimen0=4\dimen2
\[email protected]4\[email protected]{-2}\[email protected]2\[email protected]{-2.5}}\def\[email protected]{\begingroup\[email protected]\dimen0
\dimen2 45pt \divide\[email protected]\dimen2 \ifdim\dimen0<\[email protected]\advance\[email protected]\[email protected]\fi
\ifodd\[email protected]\advance\[email protected]1\[email protected]@A\else\[email protected]\fi\advance\dimen0-\[email protected]\dimen
2 \[email protected]\multiply\dimen0\[email protected]\fi\ifnum\[email protected]<0 \multiply\[email protected]-7 \fi\dimen3%
\dimen1 \dimen6\dimen0 \dimen7 3754936sp \ifdim\dimen0<6\[email protected]\def\[email protected]{4000}%
\fi\[email protected]\dimen2\dimen3\[email protected]{\dimen2}\[email protected]\multiply\[email protected]-6 \dimen0\dimen2
\[email protected]1\[email protected]{0.3}\dimen1\dimen0 \dimen2\dimen3 \dimen0\dimen3 \[email protected]3\[email protected]{%
1.5}\[email protected]{0.3}\divide\[email protected]2 \[email protected]\multiply\dimen1\[email protected]\fi\ifodd\[email protected]
\dimen2\dimen1\dimen1\dimen0\dimen0-\dimen2 \fi\divide\[email protected]2 \ifodd\[email protected]
\multiply\dimen0\[email protected]\multiply\dimen1\[email protected]\fi\global\[email protected]\dimen0\global
\[email protected]\dimen1\endgroup\dimen6\[email protected]\dimen7\[email protected]}\def\[email protected]{255}\let\[email protected]
\[email protected]\def\[email protected]{\begingroup\ifdim\dimen7<\dimen6 \dimen9\dimen7\dimen7\dimen
6\dimen6\dimen9\[email protected]@A\else\[email protected]\fi\dimen2\[email protected]\dimen3\[email protected]\dimen4\[email protected]\dimen0%
\[email protected]\dimen8=\[email protected]\[email protected]\[email protected]\global\[email protected]\dimen\[email protected]0\else3\fi\global\[email protected]
\dimen\[email protected]3\else0\fi\endgroup\[email protected]\[email protected]\[email protected]\[email protected]}\def\[email protected]{\[email protected]
\dimen6 \divide\[email protected]\dimen7 \advance\dimen6-\[email protected]\dimen7 \dimen9\dimen4
\advance\dimen9\[email protected]\dimen0 \ifdim\dimen9>\dimen8 \[email protected]\else\[email protected]\ifdim
\dimen6>\[email protected]\dimen9\dimen6 \dimen6\dimen7 \dimen7\dimen9 \expandafter
\expandafter\expandafter\[email protected]\fi\fi}\def\[email protected]{\ifdim\dimen0=\[email protected]\ifdim\dimen
9<2\dimen8 \dimen0\dimen8 \fi\else\advance\dimen8-\dimen4 \divide\dimen8%
\dimen0 \ifdim\[email protected]\[email protected]<2\dimen8 \[email protected]\dimen8 \dimen9\dimen4 \advance
\dimen9\[email protected]\dimen0 \[email protected]\fi\fi}\def\[email protected]{\dimen4\dimen0 \dimen0\dimen9
\advance\dimen2\[email protected]\dimen3 \dimen9\dimen2 \dimen2\dimen3 \dimen3\dimen9 }%
\def\[email protected]#1{\[email protected]{\dimen2}\advance\dimen0 #1\dimen2 }\def\[email protected]#1{\divide#1%
\[email protected]\multiply#1\[email protected]}\def\[email protected]#1{\divide#1\[email protected]\multiply#1\[email protected]}\def
\[email protected]{\dimen6\[email protected]\[email protected]\multiply\dimen6\[email protected]\dimen7\[email protected]\[email protected]\multiply
\dimen7\[email protected]\[email protected]}\ifx\errorcontextlines\undefined\[email protected]\let\[email protected]\relax
\else\def\[email protected]{\errorcontextlines\[email protected]}\fi\ifnum\inputlineno<0 \let\[email protected]
\empty\let\[email protected]\empty\let\[email protected]\relax\let\[email protected]\relax\let\[email protected]\relax\let
\[email protected]\relax\message{! Why not upgrade to TeX version 3? (available since 1990%
)}\else\def\[email protected]{ at line \number\inputlineno}\def\[email protected]{ - first occurred}%
\def\[email protected]{\edef\[email protected]{\the\inputlineno}\global\let\[email protected]\[email protected]}\def\[email protected]{9999}%
\def\CD[email protected]{\xdef\[email protected]{\the\inputlineno}}\def\[email protected]{\[email protected]}\def\[email protected]{\ifnum
\[email protected]<\inputlineno\edef\[email protected]{\space at lines \[email protected]--\the\inputlineno}\else
\edef\[email protected]{\[email protected]}\fi}\fi\let\[email protected]\empty\def\[email protected]#1#2{\[email protected]\errhelp=#2%
\expandafter\errmessage{\[email protected]: #1}}\def\[email protected]#1{{\expandafter\message{!
\[email protected]: #1\[email protected]}}}\def\[email protected]#1{{\expandafter\message{\[email protected]\space Warning: #%
1\[email protected]}}}\def\[email protected]#1#2{\[email protected]{#1 \string#2 is obsolete\[email protected]}}\def\[email protected]#1{%
\[email protected]{Dimension}{#1}\[email protected]#1\[email protected]@B\[email protected]@B}\def\[email protected]@B{\[email protected]=}\def\[email protected]#1{%
\[email protected]{Count}{#1}\[email protected]#1\[email protected]\[email protected]}\def\[email protected]{\[email protected]=}\def
\HorizontalMapLength{\[email protected]\HorizontalMapLength}\def\VerticalMapHeight{\[email protected]
\VerticalMapHeight}\def\VerticalMapDepth{\[email protected]\VerticalMapDepth}\def
\VerticalMapExtraHeight{\[email protected]\VerticalMapExtraHeight}\def
\VerticalMapExtraDepth{\[email protected]\VerticalMapExtraDepth}\def\DiagonalLineSegments
{\[email protected]\DiagonalLineSegments}\ifx\tenln\nullfont\[email protected]\[email protected]{\[email protected]\space
diagonal line and arrow font not available}\else\let\[email protected]\relax\fi\def\[email protected]
#1#2<#3:#4:#5#6{\begingroup\[email protected]#3\relax\advance\[email protected]-#2\relax\ifdim.1em<%
\[email protected]\[email protected]#5\relax\[email protected]#6\relax\ifnum\[email protected]<\[email protected]\[email protected]\[email protected]\advance
\[email protected]-\[email protected]\[email protected]{#4 by \the\[email protected]}\if#1v\let\[email protected]\[email protected]\else\advance
\[email protected]\[email protected]\if#1l\advance\[email protected]-\[email protected]\else\if#1r\advance\[email protected]\[email protected]\fi
\fi\advance\[email protected]\[email protected]\let\[email protected]\[email protected]\fi\divide\[email protected]\[email protected]\ifdim\[email protected]<%
\[email protected]\global\[email protected]\[email protected]\fi\fi\fi\endgroup}\[email protected]\[email protected]\[email protected]\[email protected]\[email protected]
\[email protected]{See the message above.}\[email protected]\[email protected]{Perhaps you've forgotten to end the
diagram before resuming the text, in\[email protected] which case some garbage may be
added to the diagram, but we should be ok now.\[email protected] Alternatively you've left
a blank line in the middle - TeX will now complain\[email protected] that the remaining
\[email protected] s are misplaced - so please use comments for layout.}\[email protected]\[email protected]{You
have already closed too many brace pairs or environments; an \[email protected]\[email protected]
command was (over)due.}\[email protected]\[email protected]{\[email protected]\space and \[email protected]\space commands
must match.}\def\[email protected]{\ifnum\inputlineno=0 \else\expandafter\[email protected]\fi}\def
\[email protected]{\[email protected]\[email protected]\crcr\[email protected]{missing \[email protected]\space inserted before \[email protected]-
type "h"}\[email protected]\enddiagram\[email protected]\[email protected]\par}\def\[email protected]#1{\edef\enddiagram{%
\noexpand\[email protected]{#1\[email protected]}}}\def\[email protected]#1{\[email protected]{\[email protected]\space(anticipated by #1)
ignored}\[email protected]\let\enddiagram\[email protected]}\def\[email protected]{\[email protected]{misplaced \[email protected]\space
ignored}\[email protected]}\def\[email protected]{\[email protected]{missing \[email protected]\space inserted.}\[email protected]\[email protected]{%
closing group}}\ifx\DeclareOption\undefined\else\ifx\DeclareOption\@notprerr
\else\DeclareOption*{\let\[email protected]\relax\let\[email protected]\relax\expandafter\[email protected]
\CurrentOption,}\fi\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 \[email protected] *****

\catcode\lq\$=3 %% make sure that $ means maths-shift
\def\vboxtoz{\vbox to\[email protected]}%% \[email protected] is in plain TeX and means 0pt

%% print #1 in \scriptstyle, adjusting for the maths axis height
\def\scriptaxis#1{\[email protected]{$\scriptstyle#1$}}%%
\def\ssaxis#1{\@ssaxis{$\scriptscriptstyle#1$}}%%
\def\[email protected]#1{\dimen0\axisheight\advance\dimen0-\[email protected]\raise\dimen0%
\hbox{#1}}\def\@ssaxis#1{\dimen0\axisheight\advance\dimen0-\[email protected]
\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{\[email protected]{\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\[email protected]%% \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\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{\setbox0=\hbox{#1$\scriptscriptstyle#3$}\dimen0\wd0%
\divide\dimen0 12\[email protected]{\dimen0}%%  "u"
\dimen1\wd0\advance\dimen1-2\dimen0\advance\dimen1-\[email protected]\[email protected]{\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\[email protected]#1{\setbox\[email protected]\hbox to\[email protected]{#1}\ht\[email protected]\[email protected]\dp\[email protected]\[email protected]\box\[email protected]}\def
\[email protected]#1{\overprint{\hbox to\[email protected]{#1}}}\def\[email protected]{\kern0.1em}\def\[email protected]{\kern0.%
25em}

\def\SEpbk{\[email protected]{\[email protected]\vrule depth 2.67ex height -2.55ex width 0.9em
\vrule height -0.46ex depth 2.67ex width .05em \hss}}

\def\SWpbk{\[email protected]{\hss\vrule height -0.46ex depth 2.67ex width .05em \vrule
depth 2.67ex height -2.55ex width .9em \[email protected]}}

\def\NEpbk{\[email protected]{\[email protected]\vrule depth -3.48ex height 3.67ex width 0.95em
\vrule height 3.67ex depth -1.39ex width .05em \hss}}

\def\NWpbk{\[email protected]{\hss\vrule height 3.6ex depth -1.39ex width .05em \vrule
depth -3.48ex height 3.67ex width .95em \[email protected]}}

%%  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{ $\scriptstyle\searrow$}}}%%
\def\NEanti{\overprint{\raise2.5ex\rlap{ $\scriptstyle\nwarrow$}}}%%
\def\NWclck{\overprint{\raise2.5ex\llap{$\scriptstyle\nearrow$ }}}%%
\def\NWanti{\overprint{\raise2.5ex\llap{$\scriptstyle\swarrow$ }}}%%
\def\SEclck{\overprint{\lower1ex\rlap{ $\scriptstyle\swarrow$}}}%%
\def\SEanti{\overprint{\lower1ex\rlap{ $\scriptstyle\nearrow$}}}%%
\def\SWclck{\overprint{\lower1ex\llap{$\scriptstyle\nwarrow$ }}}%%
\def\SWanti{\overprint{\lower1ex\llap{$\scriptstyle\searrow$ }}}

%%======================================================================%
%%                                                                      %
%%      (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\[email protected]\raise
\axisheight\box0\kern.1\dimen0}}%%
\def\lhla{\hbox{\setbox0=\lnchar33\dimen0=\wd0\kern.05\dimen0\ht0\[email protected]\raise
\axisheight\box0\kern-.5\dimen0}}%%
\def\dhla{\vboxtoz{\vss\rlap{\lnchar77}}}%%
\def\uhla{\vboxtoz{\setbox0=\lnchar66 \wd0\[email protected]\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\[email protected]\raise
\axisheight\box0\kern-.2\dimen0}}%%
\def\ltla{\hbox{\setbox0=\lnchar33\dimen0=\wd0\kern-.15\dimen0\ht0\[email protected]\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\[email protected]}}%%
\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

%% 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\[email protected] height0.6ex depth 0pt}%%
\def\hfthedash{\[email protected]\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}%% partial function
\newarrow{Relto}{harpoon}---{harpoon}%% binary relation

\newarrow{Eq}=====%%
\newarrow{Line}-----%%
\newarrow{Dots}.....%%
\newarrow{Dashes}{}{dash}{}{dash}{}%%

%% 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}{\@cmex3D}{\@cmex
3C}%%
\newarrow{@brace}{cmexbra}-{cmexbra}-{cmexbra}%% braces
\newarrow{@parenth}{cmexbra}---{cmexbra}%% straight parentheses
\def\rightBrace{\[email protected][cmex,thick,midvshaft]}%%ASCII square brackets []
\def\leftBrace{\[email protected][cmex,thick,midvshaft]}%%ASCII square brackets []
\def\upperBrace{\[email protected][cmex,thick,midhshaft]}%%ASCII square brackets []
\def\lowerBrace{\[email protected][cmex,thick,midhshaft]}%%ASCII square brackets []
\def\rightParenth{\[email protected][cmex,thick]}%%ASCII square brackets []
\def\leftParenth{\[email protected][cmex,thick]}%%ASCII square brackets []
\def\upperParenth{\[email protected][cmex,thick]}%%ASCII square brackets []
\def\lowerParenth{\[email protected][cmex,thick]}%%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