% DIAGRAM MACROS (version 3.1)
% MINI-DIAGRAM FILE
% PLAIN ARROWS, PAIRS OF PLAIN ARROWS, ADJOINT PAIRS OF PLAIN ARROWS
% ARROWHEADS DESIGNED AS \vector

\catcode`\@=11

%%%%% FIXING SOME PARAMETERS

%%% Fixing the default scaling factor for diagrams
\newcount\defaultscale
\def\setdefaultscale#1{\global\defaultscale=#1}
\setdefaultscale{100}

\newcount\actualtextarrowspace
\newcount\actualtextarrowlength

% \computetextparameters computes the parameters
% required to design a text arrow
\newcommand{\computetextparameters}%
{\global\actualtextarrowspace=\textarrowlength%
\global\advance\actualtextarrowspace by 3%
\global\actualtextarrowlength=\textarrowlength%
\global\multiply\actualtextarrowlength by 100}

%%% Fixing the default length of text arrows
\newcount\textarrowlength
\def\settextarrowlength#1{\global\textarrowlength=#1%
\computetextparameters}
\settextarrowlength{20}

\newcount\actualdisplayarrowspace
\newcount\actualdisplayarrowlength

% \computedisplayparameters computes the parameters
% required to design a displayed arrow
\newcommand{\computedisplayparameters}%
{\global\actualdisplayarrowspace=\displayarrowlength%
\global\advance\actualdisplayarrowspace by 3%
\global\actualdisplayarrowlength=\displayarrowlength%
\global\multiply\actualdisplayarrowlength by 100}

%%% Fixing the default length of displayed arrows
\newcount\displayarrowlength
\def\setdisplayarrowlength#1{\global\displayarrowlength=#1%
\computedisplayparameters}
\setdisplayarrowlength{30}


% ERROR MESSAGES

% Checking the next token without gobbling blanks
\def\@ifnexttok#1#2#3{\let\@tempe #1\def\@tempa{#2}\def\@tempb{#3}%
\futurelet\@tempc\@ifntok}
\def\@ifntok{\ifx \@tempc \@tempe\let\@tempd\@tempa\else\let\@tempd\@tempb\fi%
\@tempd}

%  \@diagramerror{MSG}{HLP}: Types a Diagram error message MSG and gives an error
%                            halt with error help message HLP.
\def\@diagramerror#1#2{%
\edef\@@tempc{#2}\expandafter\errhelp\expandafter{\@@tempc}%
\typeout{Diagram error. \space See User's guide for explanation.^^J
 \space\@spaces\@spaces\@spaces Type \space H <return> \space for 
 immediate help.}\errmessage{#1}}

\newif\ifdiagram

% error test and message for text arrows 
\def\testtextmode{%
\ifdiagram\@diagramerror{Text arrows are not allowed in diagrams}{Here you
should use east or west diagram arrows, not forward or backward text arrows.
Try proceeding now, typeset could succeed but with unpredictable output.}
\else\ifmmode\relax\else%
\@diagramerror{Missing \string$}{Text arrows should be introduced in math mode.
Try proceeding now, typeset could succeed but output could not be what you expected.}\fi\fi}

% error test and message for diagram arrows
\def\testdiagrammode{\ifdiagram\relax\else
\@diagramerror{Diagram arrows are not allowed in formulas}{Here you
should use forward or backward text arrows, not diagram arrows. Proceeding
could work with unpredictable output, but overflow arithmetic
could also occur.}\fi}

% error test and message for diagrams in math mode
\def\checkmode{\ifmmode\@diagramerror{Wrong mode: no diagrams 
allowed in math mode.}{You should leave math mode before
introducing your diagram. All items in the diagram will automatically be
processed in math mode.}\else\relax\fi\global\diagramtrue}

\global\diagramfalse

% INITIALIZATION

\newcount\SCALE%

\newcount\NUMBER%

\newcount\LINE%

\newcount\COLUMN%

\newcount\WIDTH%

\newcount\SOURCE%

\newcount\ARROW%

\newcount\TARGET%

\newcount\ARROWLENGTH%

\newcount\NUMBEROFDOTS%

\newcounter{x}%

\newcounter{y}%

\newcounter{z}%

\newcounter{horizontal}%

\newcounter{vertical}%

\newskip\itemlength%

\newskip\firstitem%

\newskip\seconditem%

\newcommand{\printarrow}{}%

\newcount\X%

\newcount\Y%

\newcount\Z%


% MACROS FOR DESIGNING DIAGRAMS


% \truex{n} divides n x 100 by the scaling factor and puts the result 
% in counter x 
\newcommand{\truex}[1]{%
\NUMBER=#1%
\multiply\NUMBER by 100%
\divide\NUMBER by \SCALE%
\setcounter{x}{\NUMBER}}%

% \truey{n} divides n x 100 by the scaling factor and puts the result 
% in counter y 
\newcommand{\truey}[1]{%
\NUMBER=#1%
\multiply\NUMBER by 100%
\divide\NUMBER by \SCALE%
\setcounter{y}{\NUMBER}}%

% \truez{n} divides n x 100 by the scaling factor and puts the result 
% in counter z 
\newcommand{\truez}[1]{%
\NUMBER=#1%
\multiply\NUMBER by 100%
\divide\NUMBER by \SCALE%
\setcounter{z}{\NUMBER}}%


% \changecounters computes the values of the various parameters required
% to design an arrow with adjusted length.
\newcommand{\changecounters}[1]{%
\SOURCE=\ARROW%
\ARROW=\TARGET%
\settowidth{\itemlength}{#1}%
\ifdim \itemlength > 2800\unitlength%
\addtolength{\itemlength}{-2800\unitlength}%
\TARGET=\itemlength%
\divide\TARGET by 1310%
\multiply\TARGET by 100%
\divide\TARGET by \SCALE%
\else%
\TARGET=0%
\fi%
\ARROWLENGTH=5000%
\advance\ARROWLENGTH by -\SOURCE%
\advance\ARROWLENGTH by -\TARGET%
\divide\ARROWLENGTH by 100%
\advance\SOURCE by -\TARGET}%

% \initialize initializes the counters required to produce the diagram
% and defines the formal dimensions of the diagram to be (0,0).
\newcommand{\initialize}[1]{%
\LINE=0%
\COLUMN=0%
\WIDTH=0%
\ARROW=0%
\TARGET=0%
\changecounters{#1}%
\renewcommand{\printarrow}{#1}%
\begin{center}%
\vspace{2pt}%
\begin{picture}(0,0)}%

% \DIAGV{n} starts the construction of a diagram scaled by a factor 
% n percent, computes the scaled unit length and the unscaling factor.
\newcommand{\DIAGV}[2]{%
\checkmode%
\SCALE=#1%
\setlength{\unitlength}{655sp}%
\multiply\unitlength by \SCALE%
\divide\unitlength by 100%
\initialize{\mbox{$#2$}}}%

% \n introduces the next item of the diagram, computes its parameters
% and prints the previous item.
\newcommand{\n}[1]{%
\changecounters{\mbox{$#1$}}%
\put(\COLUMN,\LINE){\makebox(0,0){\printarrow}}%
\thinlines%
\renewcommand{\printarrow}{\mbox{$#1$}}%
\advance\COLUMN by 4000}%

% \nn prints the  last item of a line and starts a new line.
\newcommand{\nn}[1]{%
\put(\COLUMN,\LINE){\makebox(0,0){\printarrow}}%
\thinlines%
\ifnum \WIDTH < \COLUMN%
\WIDTH=\COLUMN%
\else%
\fi%
\advance\LINE by -4000%
\COLUMN=0%
\ARROW=0%
\TARGET=0%
\changecounters{\mbox{$#1$}}%
\renewcommand{\printarrow}{\mbox{$#1$}}}%

% \conclude prints the last item of the diagram and sets the
% dimensions of the diagram;
\newcommand{\conclude}{%
\put(\COLUMN,\LINE){\makebox(0,0){\printarrow}}%
\thinlines%
\ifnum \WIDTH < \COLUMN%
\WIDTH=\COLUMN%
\else%
\fi%
\setcounter{horizontal}{\WIDTH}%
\setcounter{vertical}{-\LINE}%
\end{picture}}%

% \diag prints the last item of the diagram and takes care of the spacing
\newcommand{\diag}{%
\conclude%
\raisebox{0pt}[0pt][\value{vertical}\unitlength]{}%
\hspace*{\value{horizontal}\unitlength}%
\vspace{12pt}%
\end{center}%
\setlength{\unitlength}{1pt}%
\global\diagramfalse}%

% \diagv{t}{l}{b} prints the last item of the diagram and
% adds a t points extra space at the top of the diagram
% adds a l points extra space at the left of the diagram
% adds a b points extra space at the bottom of the diagram
\newcommand{\diagv}[3]{%
\conclude%
\NUMBER=#1%
\rule{0pt}{\NUMBER pt}%
\hspace*{-#2pt}%
\raisebox{0pt}[0pt][\value{vertical}\unitlength]{}%
\hspace*{\value{horizontal}\unitlength}%6
\NUMBER=#3%
\advance\NUMBER by 12%
\vspace*{\NUMBER pt}%
\end{center}%
\setlength{\unitlength}{1pt}%
\global\diagramfalse}%

% \movename(n,m){f} moves the name f of the arrow n points right
% and m points up.
\def\movename(#1,#2)#3{%
\hspace{#1pt}%
\raisebox{#2pt}[5pt][2pt]{\raisebox{#2pt}{$#3$}}%
\hspace{-#1pt}}%

% \movearrow(n,m){\...} moves arrow \... n points right
% and m points up.
\def\movearrow(#1,#2)#3{%
\makebox[0pt]{%
\hspace{#1pt}\hspace{#1pt}%
\raisebox{#2pt}[0pt][0pt]{\raisebox{#2pt}{$#3$}}}}%

% \movevertex(n,m){A} moves vertex A n points right and m points up
\def\movevertex(#1,#2)#3{%
\mbox{\hspace{#1pt}%
\raisebox{#2pt}{\raisebox{#2pt}{$#3$}}%
\hspace{-#1pt}}}% 

% \movevertexleft{XXX} moves vertex XXX left 
\newcommand{\movevertexleft}[1]{\makebox[2800\unitlength][r]{$#1$}}

% \movevertexright{XXX} moves vertex XXX right 
\newcommand{\movevertexright}[1]{\makebox[2800\unitlength][l]{$#1$}}

% \crosslength{P}{Q} computes the formal dimensions of the
% superposition of pictures P and Q
\newcommand{\crosslength}[2]{%
\settowidth{\firstitem}{#1}%
\settowidth{\seconditem}{#2}%
\ifdim\firstitem < \seconditem%
\itemlength=\seconditem%
\else%
\itemlength=\firstitem%
\fi%
\divide\itemlength by 2%
\hspace{\itemlength}}%

% \cross{P}{Q} superposes pictures P and Q
\newcommand{\cross}[2]{%
\crosslength{\mbox{$#1$}}{\mbox{$#2$}}%
\begin{picture}(0,0)%
\put(0,0){\makebox(0,0){$#1$}}%
\thinlines%
\put(0,0){\makebox(0,0){$#2$}}%
\thinlines%
\end{picture}%
\crosslength{\mbox{$#1$}}{\mbox{$#2$}}}%

% \bold prints the next arrow in bold-face type
\newcommand{\bold}{\ifdiagram\thicklines\else\typeout{Sorry: command
\string\bold does not apply to text arrows; I am ignoring it.}\fi}

% \unbold switches back to normal arrows
\newcommand{\unbold}{\thinlines}

% SHORTENING THE TYPING OF DIAGRAMS

\def\basicDIAG#1�{\DIAGV{\defaultscale}{#1}\@ifnexttok�{\finishline}{\basicn}}
\def\basicDIAGV[#1]#2�{\DIAGV{#1}{#2}\@ifnexttok�{\finishline}{\basicn}}
\def\basicn#1�{\n{#1}\@ifnexttok�{\finishline}{\basicn}}
\def\basicnn#1�{\nn{#1}\@ifnexttok�{\finishline}{\basicn}}
\def\finishline#1{\@ifnextchar\end{\diag}%
{\@ifnextchar\spacing{\relax}{\basicnn}}}
\def\spacing(#1,#2,#3){\diagv{#1}{#2}{#3}}

\newif\ifcaption%

\newenvironment{diagram}{%
\iffloatdiag\relax\else
\global\def\diagramcaption##1{%
\global\captiontrue%
\global\def\@diagcaption{##1}}%
\global\def\@diagcaption{}\fi%
\@ifnextchar[{\basicDIAGV}{\basicDIAG}}%
{\iffloatdiag\relax\else%
\ifcaption
\begin{center}\mbox{}\@diagcaption\end{center}%
\else\relax\fi\fi\global\captionfalse}

\global\captionfalse


% MACROS FOR FLOATING DIAGRAMS

\gdef\@diaglabel{Diagram}
\gdef\diagramlabel#1{\gdef\@diaglabel{#1}}

\newcounter{Diagram}
\setcounter{Diagram}{0}
\def\theDiagram{\@arabic\c@Diagram}
\def\fps@Diagram{tbp}
\def\ftype@Diagram{1}
\def\ext@Diagram{lof}
\def\fnum@Diagram{\@diaglabel\ \theDiagram}
\def\Diagram{\@float{Diagram}}
\let\endDiagram\end@float
\@namedef{Diagram*}{\@dblfloat{Diagram}}
\@namedef{endDiagram*}{\end@dblfloat}

\def\setdiagramcounter#1{\@addtoreset{Diagram}{#1}%
\def\theDiagram{\arabic{#1}.\@arabic\c@Diagram}}

\newif\iffloatdiag

\newenvironment{floatingdiagram}{%
\global\floatdiagtrue%
\long\def\@makecaption##1##2{
 \vskip 0pt
 \setbox\@tempboxa\hbox{##1##2}
 \ifdim \wd\@tempboxa >\hsize \unhbox\@tempboxa\par \else \hbox
to\hsize{\hfil\box\@tempboxa\hfil}
 \fi}%
\global\def\diagramcaption##1{\global\def\@diagcaption{: ##1}}%
\global\def\@diagcaption{}%
\begin{Diagram}[tbp]\begin{diagram}}%
{\end{diagram}\caption{\@diagcaption}\end{Diagram}%
\global\floatdiagfalse}

\global\floatdiagfalse

% MACROS FOR DRAWING TEXT PICTURES

% \tlowername{P}{f} puts the name f under the picture P
\newcommand{\tlowername}[2]%
{$\stackrel{\makebox[1pt]{#1}}%
{\begin{picture}(0,0)%
\put(0,0){\makebox(0,6)[t]{\makebox[1pt]{$\scriptstyle#2$}}}%
\end{picture}}$}%

% \tcase{P} draws the picture P with length \textarrowlength pt.
\newcommand{\tcase}[1]{%
\testtextmode%
\setlength{\unitlength}{0.01pt}%
\makebox[\actualtextarrowspace pt]%
{\raisebox{2.5pt}{#1{\actualtextarrowlength}}}%
\setlength{\unitlength}{1pt}}%

% \Tcase{P}{f} draws the picture P with upper name f
% and length \textarrowlength pt. 
\newcommand{\Tcase}[2]{%
\testtextmode%
\setlength{\unitlength}{0.01pt}%
\makebox[\actualtextarrowspace pt]%
{\raisebox{2.5pt}{$\stackrel{\scriptstyle #2}{#1{\actualtextarrowlength}}$}}%
\setlength{\unitlength}{1pt}}%
        
% \tbicase{P} draws the bi-picture P 
% with length \textarrowlength pt.
\newcommand{\tbicase}[1]{%
\testtextmode%
\setlength{\unitlength}{0.01pt}%
\makebox[\actualtextarrowspace pt]%
{\raisebox{1pt}{#1{\actualtextarrowlength}}}%
\setlength{\unitlength}{1pt}}%

% \Tbicase{P}{f}{g} draws the bi-picture P with names f, g
% and length \textarrowlength pt.
\newcommand{\Tbicase}[3]{%
\testtextmode%
\setlength{\unitlength}{0.01pt}%
\makebox[\actualtextarrowspace pt]%
{\raisebox{-1pt}%
{$\stackrel{\scriptstyle #2}%
{\mbox{\tlowername{#1{\actualtextarrowlength}}%
{\scriptstyle #3}}}$}}%
\setlength{\unitlength}{1pt}}% 

% MACROS FOR DRAWING DISPLAYED PICTURES

% \dlowername{P}{f} puts the name f under the picture P
\newcommand{\dlowername}[2]%
{$\stackrel{\makebox[1pt]{#1}}%
{\begin{picture}(0,0)%
\put(0,0){\makebox(0,6)[t]{\makebox[1pt]{$\textstyle#2$}}}%
\end{picture}}$}%

% \dcase{P} draws the picture P with length \displayarrowlength pt.
\newcommand{\dcase}[1]{%
\testtextmode%
\setlength{\unitlength}{0.01pt}%
\makebox[\actualdisplayarrowspace pt]%
{\raisebox{2.5pt}{#1{\actualdisplayarrowlength}}}%
\setlength{\unitlength}{1pt}}%

% \Dcase{P}{f} draws the picture P with upper name f
% and length \displayarrowlength pt. 
\newcommand{\Dcase}[2]{%
\testtextmode%
\setlength{\unitlength}{0.01pt}%
\makebox[\actualdisplayarrowspace pt]%
{\raisebox{2.5pt}{$\stackrel{\textstyle #2}{#1{\actualdisplayarrowlength}}$}}%
\setlength{\unitlength}{1pt}}%
        
% \dbicase{P} draws the bi-picture P 
% with length \displayarrowlength pt.
\newcommand{\dbicase}[1]{%
\testtextmode%
\setlength{\unitlength}{0.01pt}%
\makebox[\actualdisplayarrowspace pt]%
{\raisebox{1pt}{#1{\actualdisplayarrowlength}}}%
\setlength{\unitlength}{1pt}}%

% \Dbicase{P}{f}{g} draws the bi-picture P with names f, g
% and length \displayarrowlength pt.
\newcommand{\Dbicase}[3]{%
\testtextmode%
\setlength{\unitlength}{0.01pt}%
\makebox[\actualdisplayarrowspace pt]%
{\raisebox{-1pt}%
{$\stackrel{\textstyle #2}%
{\mbox{\tlowername{#1{\actualdisplayarrowlength}}%
{\textstyle #3}}}$}}%
\setlength{\unitlength}{1pt}}%


% IN-TEXT ARROWS

% \AR{n} draws an arrow of length n units
\newcommand{\AR}[1]%
{\begin{picture}(#1,0)%
\put(0,0){\vector(1,0){#1}}%
\end{picture}}%

% \BIAR{n} draws a pair of arrows of length n units
\newcommand{\BIAR}[1]%
{\begin{picture}(#1,700)%
\put(0,0){\vector(1,0){#1}}%
\put(0,700){\vector(1,0){#1}}%
\end{picture}}%

% \ADJAR{n} draws a pair of adjoint arrows of length n units
\newcommand{\ADJAR}[1]%
{\begin{picture}(#1,700)%
\put(0,0){\vector(1,0){#1}}%
\put(#1,700){\vector(-1,0){#1}}%
\end{picture}}%

% All the following commands produce arrows with length 20pt
% and scriptstyle names in math mode but arrows with length
% \displayarrowlength pt and textstyle names in display math mode.

% arrow 
\newcommand{\ar}{\ifinner\tcase{\AR}\else\dcase{\AR}\fi}%

% arrow with upper name [1] 
\newcommand{\Ar}[1]{\ifinner\Tcase{\AR}{#1}\else\Dcase{\AR}{#1}\fi}%

% pair of arrows 
\newcommand{\biar}{\ifinner\tbicase{\BIAR}\else\dbicase{\BIAR}\fi}%

% pair of arrows with names [1],[2]
\newcommand{\Biar}[2]{\ifinner\Tbicase{\BIAR}{#1}{#2}%
\else\Dbicase{\BIAR}{#1}{#2}\fi}%

% pair of adjoint arrows 
\newcommand{\adjar}{\ifinner\tbicase{\ADJAR}\else\dbicase{\ADJAR}\fi}%

% pair of adjoint arrows with names [1],[2]
\newcommand{\Adjar}[2]{\ifinner\Tbicase{\ADJAR}{#1}{#2}%
\else\Dbicase{\ADJAR}{#1}{#2}\fi}%

% IN-TEXT BACK ARROWS

% \BKAR{n} draws a pointing back arrow of length n units
\newcommand{\BKAR}[1]%
{\begin{picture}(#1,0)%
\put(#1,0){\vector(-1,0){#1}}%
\end{picture}}%

% \BKBIAR{n} draws a pair of pointing back arrows of length n units
\newcommand{\BKBIAR}[1]%
{\begin{picture}(#1,700)%
\put(#1,0){\vector(-1,0){#1}}%
\put(#1,700){\vector(-1,0){#1}}%
\end{picture}}%

% \BKADJAR{n} draws a pair of adjoint arrows of length n units
\newcommand{\BKADJAR}[1]%
{\begin{picture}(#1,700)%
\put(0,700){\vector(1,0){#1}}%
\put(#1,0){\vector(-1,0){#1}}%
\end{picture}}%

% \BKADJDIST{n} draws a pair of adjoint distributors of length n units
\newcommand{\BKADJDIST}[1]%
{\begin{picture}(#1,700)%
\put(0,700){\vector(1,0){#1}}%
\put(#1,0){\vector(-1,0){#1}}%
\NUMBER=#1%
\divide\NUMBER by 2%
\put(\NUMBER,0){\circle{400}}%
\put(\NUMBER,700){\circle{400}}%
\end{picture}}%

% All the following commands produce back arrows with length 20pt
% and scriptstyle names in math mode but arrows with length
% \displayarrowlength and textstyle names in display math mode.

% back arrow 
\newcommand{\bkar}{\ifinner\tcase{\BKAR}\else\dcase{\BKAR}\fi}%

% back arrow with upper name [1] 
\newcommand{\Bkar}[1]{\ifinner\Tcase{\BKAR}{#1}\else\Dcase{\BKAR}{#1}\fi}%

% pair of back arrows 
\newcommand{\bkbiar}{\ifinner\tbicase{\BKBIAR}\else\dbicase{\BKBIAR}\fi}%

% pair of back arrows with names [1],[2]
\newcommand{\Bkbiar}[2]{\ifinner\Tbicase{\BKBIAR}{#1}{#2}%
\else\Dbicase{\BKBIAR}{#1}{#2}\fi}%

% back pair of adjoint arrows 
\newcommand{\bkadjar}{\ifinner\tbicase{\BKADJAR}%
\else\dbicase{\BKADJAR}\fi}%

% back pair of adjoint arrows with names [1],[2]
\newcommand{\Bkadjar}[2]{\ifinner\Tbicase{\BKADJAR}{#1}{#2}%
\else\Dbicase{\BKADJAR}{#1}{#2}\fi}%

% MACROS FOR DRAWING HORIZONTAL PICTURES

% \lowername{P}{f} puts the name f under the picture P
\newcommand{\lowername}[2]%
{$\stackrel{\makebox[1pt]{#1}}%
{\begin{picture}(0,0)%
\truex{600}%
\put(0,0){\makebox(0,\value{x})[t]{\makebox[1pt]{$#2$}}}%
\end{picture}}$}%

% \hcase{P}{n} draws the picture P with length n units
\newcommand{\hcase}[2]%
{\testdiagrammode\makebox[0pt]%
{\raisebox{0pt}[0pt][0pt]{#1{#2}}}}%

% \Hcase{P}{f}{n} draws the picture P with upper name f
% and length n units. 
\newcommand{\Hcase}[3]%
{\testdiagrammode\makebox[0pt]
{\raisebox{0pt}[0pt][0pt]%
{$\stackrel{\makebox[0pt]{$\textstyle{#2}$}}{#1{#3}}$}}}%

% \hcasE{P}{f}{n} draws the picture P with lower name f
% and length n units. 
\newcommand{\hcasE}[3]%
{\testdiagrammode\makebox[0pt]%
{\raisebox{-8pt}[0pt][0pt]%
{\lowername{#1{#3}}{#2}}}}%
        
% \hbicase{P}{n} draws the bi-picture P with length n units.
\newcommand{\hbicase}[2]%
{\testdiagrammode\makebox[0pt]%
{\raisebox{-2.4pt}[0pt][0pt]{#1{#2}}}}%

% \Hbicase{P}{f}{g}{n} draws the bi-picture P with names f, g
% and length n units.
\newcommand{\Hbicase}[4]%
{\testdiagrammode\makebox[0pt]
{\raisebox{-10.4pt}[0pt][0pt]%
{$\stackrel{\makebox[0pt]{$\textstyle{#2}$}}%
{\mbox{\lowername{#1{#4}}{#3}}}$}}}%

% EAST ARROWS

% \EAR{n} draws an east arrow of length n units
\newcommand{\EAR}[1]%
{\begin{picture}(#1,0)%
\put(0,0){\vector(1,0){#1}}%
\end{picture}}%

% \EBIAR{n} draws an east pair of arrows of length n units
\newcommand{\EBIAR}[1]%
{\truex{700}%
\begin{picture}(#1,\value{x})%
\put(0,0){\vector(1,0){#1}}%
\put(0,\value{x}){\vector(1,0){#1}}%
\end{picture}}%

% \EADJAR{n} draws an east pair of adjoint arrows of length n
% units 
\newcommand{\EADJAR}[1]%
{\truex{700}%
\begin{picture}(#1,\value{x})%
\put(0,0){\vector(1,0){#1}}%
\put(#1,\value{x}){\vector(-1,0){#1}}%
\end{picture}}%

% All the following commands produce east arrows 

% basic east arrow
\def\basicear[#1]{%
\Z=#1%
\multiply \Z by 100%
\hcase{\EAR}{\Z}}%

% east arrow 
\newcommand{\ear}{\@ifnextchar[{\basicear}%
{\hspace{\SOURCE\unitlength}\basicear[\ARROWLENGTH]}}%

% basic east arrow with upper name
\def\basicEar[#1]#2{%
\Z=#1%
\multiply \Z by 100%
\Hcase{\EAR}{#2}{\Z}}%
 
% east arrow with upper name
\newcommand{\Ear}{\@ifnextchar[{\basicEar}%
{\hspace{\SOURCE\unitlength}\basicEar[\ARROWLENGTH]}}%

% basic east arrow with lower name
\def\basiceaR[#1]#2{%
\Z=#1%
\multiply \Z by 100%
\hcasE{\EAR}{#2}{\Z}}%
 
% east arrow with lower name
\newcommand{\eaR}{\@ifnextchar[{\basiceaR}%
{\hspace{\SOURCE\unitlength}\basiceaR[\ARROWLENGTH]}}%

% basic pair of east arrows
\def\basicebiar[#1]{%
\Z=#1%
\multiply \Z by 100%
\hbicase{\EBIAR}{\Z}}%

% pair of east arrows 
\newcommand{\ebiar}{\@ifnextchar[{\basicebiar}%
{\hspace{\SOURCE\unitlength}\basicebiar[\ARROWLENGTH]}}%

% basic pair of east arrows with names
\def\basicEbiar[#1]#2#3{%
\Z=#1%
\multiply \Z by 100%
\Hbicase{\EBIAR}{#2}{#3}{\Z}}%
 
% pair of east arrows with names
\newcommand{\Ebiar}{\@ifnextchar[{\basicEbiar}%
{\hspace{\SOURCE\unitlength}\basicEbiar[\ARROWLENGTH]}}%
\let\ebiaR=\Ebiar

% basic pair of east adjoint arrows
\def\basiceadjar[#1]{%
\Z=#1%
\multiply \Z by 100%
\hbicase{\EADJAR}{\Z}}%

% pair of east adjoint arrows 
\newcommand{\eadjar}{\@ifnextchar[{\basiceadjar}%
{\hspace{\SOURCE\unitlength}\basiceadjar[\ARROWLENGTH]}}%

% basic pair of east adjoint arrows with names
\def\basicEadjar[#1]#2#3{%
\Z=#1%
\multiply \Z by 100%
\Hbicase{\EADJAR}{#2}{#3}{\Z}}%
 
% pair of east adjoint arrows with names
\newcommand{\Eadjar}{\@ifnextchar[{\basicEadjar}%
{\hspace{\SOURCE\unitlength}\basicEadjar[\ARROWLENGTH]}}%
\let\eadjaR=\Eadjar

% WEST ARROWS

% \WAR{n} draws a pointing back arrow of length n units
\newcommand{\WAR}[1]%
{\begin{picture}(#1,0)%
\put(#1,0){\vector(-1,0){#1}}%
\end{picture}}%

% \WBIAR{n} draws a pair of pointing back arrows of length n units
\newcommand{\WBIAR}[1]%
{\truex{700}%
\begin{picture}(#1,\value{x})%
\put(#1,0){\vector(-1,0){#1}}%
\put(#1,\value{x}){\vector(-1,0){#1}}%
\end{picture}}%

% \WADJAR{n} draws a pair of adjoint arrows of length n units
\newcommand{\WADJAR}[1]%
{\truex{700}%
\begin{picture}(#1,\value{x})%
\put(0,\value{x}){\vector(1,0){#1}}%
\put(#1,0){\vector(-1,0){#1}}%
\end{picture}}%

% All the following commands produce west arrows 

% basic west arrow
\def\basicwar[#1]{%
\Z=#1%
\multiply \Z by 100%
\hcase{\WAR}{\Z}}%

% west arrow 
\newcommand{\war}{\@ifnextchar[{\basicwar}%
{\hspace{\SOURCE\unitlength}\basicwar[\ARROWLENGTH]}}%

% basic west arrow with upper name
\def\basicWar[#1]#2{%
\Z=#1%
\multiply \Z by 100%
\Hcase{\WAR}{#2}{\Z}}%
 
% west arrow with upper name
\newcommand{\War}{\@ifnextchar[{\basicWar}%
{\hspace{\SOURCE\unitlength}\basicWar[\ARROWLENGTH]}}%

% basic west arrow with lower name
\def\basicwaR[#1]#2{%
\Z=#1%
\multiply \Z by 100%
\hcasE{\WAR}{#2}{\Z}}%
 
% west arrow with lower name
\newcommand{\waR}{\@ifnextchar[{\basicwaR}%
{\hspace{\SOURCE\unitlength}\basicwaR[\ARROWLENGTH]}}%

% basic pair of west arrows
\def\basicwbiar[#1]{%
\Z=#1%
\multiply \Z by 100%
\hbicase{\WBIAR}{\Z}}%

% pair of west arrows 
\newcommand{\wbiar}{\@ifnextchar[{\basicwbiar}%
{\hspace{\SOURCE\unitlength}\basicwbiar[\ARROWLENGTH]}}%

% basic pair of west arrows with names
\def\basicWbiar[#1]#2#3{%
\Z=#1%
\multiply \Z by 100%
\Hbicase{\WBIAR}{#2}{#3}{\Z}}%
 
% pair of west arrows with names
\newcommand{\Wbiar}{\@ifnextchar[{\basicWbiar}%
{\hspace{\SOURCE\unitlength}\basicWbiar[\ARROWLENGTH]}}%
\let\wbiaR=\Wbiar

% basic pair of west adjoint arrows
\def\basicwadjar[#1]{%
\Z=#1%
\multiply \Z by 100%
\hbicase{\WADJAR}{\Z}}%

% pair of west adjoint arrows 
\newcommand{\wadjar}{\@ifnextchar[{\basicwadjar}%
{\hspace{\SOURCE\unitlength}\basicwadjar[\ARROWLENGTH]}}%

% basic pair of west adjoint arrows with names
\def\basicWadjar[#1]#2#3{%
\Z=#1%
\multiply \Z by 100%
\Hbicase{\WADJAR}{#2}{#3}{\Z}}%
 
% pair of west adjoint arrows with names
\newcommand{\Wadjar}{\@ifnextchar[{\basicWadjar}%
{\hspace{\SOURCE\unitlength}\basicWadjar[\ARROWLENGTH]}}%
\let\wadjaR=\Wadjar

% MACROS FOR DRAWING VERTICAL PICTURES

% \vcase{P}{n} draws the vertical picture P with length n units.
\newcommand{\vcase}[2]{\testdiagrammode#1{#2}}%

% \Vcase{P}{f}{n} draws the vertical picture P
% with left name f and length n units.
\newcommand{\Vcase}[3]{\testdiagrammode\makebox[0pt]%
{\makebox[0pt][r]{\raisebox{0pt}[0pt][0pt]{${#2}\hspace{2pt}$}}}#1{#3}}%

% \vcasE{P}{f}{n} draws the vertical picture P
% with right name f and length n units.
\newcommand{\vcasE}[3]{\testdiagrammode\makebox[0pt]%
{#1{#3}\makebox[0pt][l]{\raisebox{0pt}[0pt][0pt]{\hspace{2pt}$#2$}}}}%

% \vbicase{P}{n} draws the vertical bi-picture P with length n units.
\newcommand{\vbicase}[2]{\testdiagrammode\makebox[0pt]{{#1{#2}}}}%

% \Vbicase{P}{f}{g}{n} draws the vertical bi-picture P
% with names f, g and length n units.
\newcommand{\Vbicase}[4]{\testdiagrammode\makebox[0pt]%
{\makebox[0pt][r]{\raisebox{0pt}[0pt][0pt]{$#2$\hspace{5.5pt}}}#1{#4}%
\makebox[0pt][l]{\raisebox{0pt}[0pt][0pt]{\hspace{6.5pt}$#3$}}}}%

% SOUTH ARROWS

% \SAR{n} draws a south arrow of length n units
% and centers it in a box of width  0pt and height 0pt
\newcommand{\SAR}[1]%
{\begin{picture}(0,0)%
\put(0,0){\makebox(0,0)%
{\begin{picture}(0,#1)%
\put(0,#1){\vector(0,-1){#1}}%
\end{picture}}}\end{picture}}%

% \SBIAR{n} draws a pair of south arrows of length n units
% and centers it in a box of width 0pt and height 0pt
\newcommand{\SBIAR}[1]%
{\begin{picture}(0,0)%
\truex{350}%
\put(0,0){\makebox(0,0)%
{\begin{picture}(0,#1)%
\put(-\value{x},#1){\vector(0,-1){#1}}%
\put(\value{x},#1){\vector(0,-1){#1}}%
\end{picture}}}\end{picture}}%

% \SADJAR{n} draws a pair of vertical adjoint arrows of length n units
% and centers it in a box of width 0pt and height 0pt
\newcommand{\SADJAR}[1]{\begin{picture}(0,0)%
\truex{350}%
\put(0,0){\makebox(0,0)%
{\begin{picture}(0,#1)%
\put(-\value{x},#1){\vector(0,-1){#1}}%
\put(\value{x},0){\vector(0,1){#1}}%
\end{picture}}}\end{picture}}%

% All the following commands produce south arrows

% basic south arrow
\def\basicsar[#1]{\vcase{\SAR}{#100}}%

% south arrow 
\newcommand{\sar}{\@ifnextchar[{\basicsar}{\basicsar[50]}}%

% basic south arrow with left name
\def\basicSar[#1]#2{\Vcase{\SAR}{#2}{#100}}%
 
% south arrow with left name
\newcommand{\Sar}{\@ifnextchar[{\basicSar}{\basicSar[50]}}%

% basic south arrow with right name
\def\basicsaR[#1]#2{\vcasE{\SAR}{#2}{#100}}%
 
% south arrow with right name
\newcommand{\saR}{\@ifnextchar[{\basicsaR}{\basicsaR[50]}}%

% basic pair of south arrows
\def\basicsbiar[#1]{\vbicase{\SBIAR}{#100}}%

% pair of south arrows 
\newcommand{\sbiar}{\@ifnextchar[{\basicsbiar}{\basicsbiar[50]}}%

% basic pair of south arrows with names
\def\basicSbiar[#1]#2#3{\Vbicase{\SBIAR}{#2}{#3}{#100}}%
 
% pair of south arrows with names
\newcommand{\Sbiar}{\@ifnextchar[{\basicSbiar}{\basicSbiar[50]}}%
\let\sbiaR=\Sbiar

% basic pair of south adjoint arrows
\def\basicsadjar[#1]{\vbicase{\SADJAR}{#100}}%

% pair of south adjoint arrows 
\newcommand{\sadjar}{\@ifnextchar[{\basicsadjar}{\basicsadjar[50]}}%

% basic pair of south adjoint arrows with names
\def\basicSadjar[#1]#2#3{\Vbicase{\SADJAR}{#2}{#3}{#100}}%
 
% pair of south adjoint arrows with names
\newcommand{\Sadjar}{\@ifnextchar[{\basicSadjar}{\basicSadjar[50]}}%
\let\sadjaR=\Sadjar

% NORTH ARROWS

% \NAR{n} draws a north arrow of length n pt
% and centers it in a box of width 0pt and height 0pt
\newcommand{\NAR}[1]%
{\begin{picture}(0,0)%
\put(0,0){\makebox(0,0)%
{\begin{picture}(0,#1)%
\put(0,0){\vector(0,1){#1}}%
\end{picture}}}\end{picture}}%

% \NBIAR{n} draws a pair of north arrows of length n pt 
% and centers it in a box of width 0pt and height 0pt
\newcommand{\NBIAR}[1]%
{\begin{picture}(0,0)%
\truex{350}%
\put(0,0){\makebox(0,0)%
{\begin{picture}(0,#1)%
\put(-\value{x},0){\vector(0,1){#1}}%
\put(\value{x},0){\vector(0,1){#1}}%
\end{picture}}}\end{picture}}%

% \NADJAR{n} draws a pair of vertical adjoint arrows of length n pt
% and centers it in a box of width 0pt and height 0pt
\newcommand{\NADJAR}[1]{\begin{picture}(0,0)%
\truex{350}%
\put(0,0){\makebox(0,0)%
{\begin{picture}(0,#1)%
\put(\value{x},#1){\vector(0,-1){#1}}%
\put(-\value{x},0){\vector(0,1){#1}}%
\end{picture}}}\end{picture}}%

% All the following commands produce north arrows

% basic north arrow
\def\basicnar[#1]{\vcase{\NAR}{#100}}%

% north arrow 
\newcommand{\nar}{\@ifnextchar[{\basicnar}{\basicnar[50]}}%

% basic north arrow with left name
\def\basicNar[#1]#2{\Vcase{\NAR}{#2}{#100}}%
 
% north arrow with left name
\newcommand{\Nar}{\@ifnextchar[{\basicNar}{\basicNar[50]}}%

% basic north arrow with right name
\def\basicnaR[#1]#2{\vcasE{\NAR}{#2}{#100}}%
 
% north arrow with right name
\newcommand{\naR}{\@ifnextchar[{\basicnaR}{\basicnaR[50]}}%

% basic pair of north arrows
\def\basicnbiar[#1]{\vbicase{\NBIAR}{#100}}%

% pair of north arrows 
\newcommand{\nbiar}{\@ifnextchar[{\basicnbiar}{\basicnbiar[50]}}%

% basic pair of north arrows with names
\def\basicNbiar[#1]#2#3{\Vbicase{\NBIAR}{#2}{#3}{#100}}%
 
% pair of north arrows with names
\newcommand{\Nbiar}{\@ifnextchar[{\basicNbiar}{\basicNbiar[50]}}%
\let\nbiaR=\Nbiar

% basic pair of north adjoint arrows
\def\basicnadjar[#1]{\vbicase{\NADJAR}{#100}}%

% pair of north adjoint arrows 
\newcommand{\nadjar}{\@ifnextchar[{\basicnadjar}{\basicnadjar[50]}}%

% basic pair of north adjoint arrows with names
\def\basicNadjar[#1]#2#3{\Vbicase{\NADJAR}{#2}{#3}{#100}}%
 
% pair of north adjoint arrows with names
\newcommand{\Nadjar}{\@ifnextchar[{\basicNadjar}{\basicNadjar[50]}}%
\let\nadjaR=\Nadjar

% MACROS FOR  FIRST DIAGONAL PICTURES


% \fdcase{P}{f}{g}{n} draws the picture P with names f, g
% and length n units
\newcommand{\fdcase}[4]{\testdiagrammode\begin{picture}(0,0)%
\put(0,0){#1{#4}}%
\truex{200}\truey{600}\truez{600}%
\put(-\value{x},-\value{x}){\makebox(0,\value{z})[r]{${#2}$}}%
\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#3}$}}%
\end{picture}}%

% \fdbicase{P}{f}{g}{n} draws the bipicture P with names f, g
% and length n units
\newcommand{\fdbicase}[4]{\testdiagrammode\begin{picture}(0,0)%
\put(0,0){#1{#4}}%
\truex{900}\truey{150}%
\put(-\value{x},\value{y}){${#2}$}%
\truex{300}\truey{1050}%
\put(\value{x},-\value{y}){${#3}$}%
\end{picture}}%


% NORTH-EAST ARROWS

% \NEAR{n} draws a north-east arrow of length nx100 units
\newcommand{\NEAR}[1]{%
\Y=#1%
\divide\Y by 2%
\begin{picture}(0,0)%
\put(-\Y,-\Y){\vector(1,1){#1}}%
\end{picture}}%

% \NEBIAR{n} draws a pair of north-east arrows of length n units
\newcommand{\NEBIAR}[1]{%
\Y=#1%
\divide\Y by 2%
\begin{picture}(0,0)%
\put(-\Y,-\Y){\begin{picture}(0,0)%
\truex{247}%
\put(-\value{x},\value{x}){\vector(1,1){#1}}%
\put(\value{x},-\value{x}){\vector(1,1){#1}}%
\monolength=#1%
\advance\monolength by -\value{x}%
\epilength=#1%
\advance\epilength by \value{x}%
\end{picture}}\end{picture}}%

% \NEADJAR{n} draws a north-east pair of adjoint arrows of length n units
\newcommand{\NEADJAR}[1]{%
\Y=#1%
\divide\Y by 2%
\begin{picture}(0,0)%
\put(-\Y,-\Y){\begin{picture}(0,0)%
\truex{247}%
\monolength=#1%
\advance\monolength by -\value{x}%
\epilength=#1%
\advance\epilength by \value{x}%
\put(\value{x},-\value{x}){\vector(1,1){#1}}%
\end{picture}}%
\put(\Y,\Y){\begin{picture}(0,0)%
\truex{247}%
\monolength=#1%
\advance\monolength by -\value{x}%
\epilength=#1%
\advance\epilength by \value{x}%
\put(-\value{x},\value{x}){\vector(-1,-1){#1}}%
\end{picture}}\end{picture}}%

% All the following commands draw north-east arrows 

% north-east arrow of length nx100 units
\def\basicnear[#1]{\fdcase{\NEAR}{}{}{#100}}%

% north-east arrow
\newcommand{\near}{\@ifnextchar[{\basicnear}{\basicnear[59]}}%

% north-east arrow with upper name [1] and length nx100 units
\def\basicNear[#1]#2{\fdcase{\NEAR}{#2}{}{#100}}%

% north-east arrow with upper name
\newcommand{\Near}{\@ifnextchar[{\basicNear}{\basicNear[59]}}%

% north-east arrow with lower name [1]  and length nx100 units
\def\basicneaR[#1]#2{\fdcase{\NEAR}{}{#2}{#100}}%

% north-east arrow with lower name [1]
\newcommand{\neaR}{\@ifnextchar[{\basicneaR}{\basicneaR[59]}}%

% pair of north-east arrows of length nx100 units
\def\basicnebiar[#1]{\fdbicase{\NEBIAR}{}{}{#100}}%

% pair of north-east arrows
\newcommand{\nebiar}{\@ifnextchar[{\basicnebiar}{\basicnebiar[59]}}%

% pair of north-east arrows with names [1][2] and length nx100 units
\def\basicNebiar[#1]#2#3{\fdbicase{\NEBIAR}{#2}{#3}{#100}}%

% pair of north-east arrows with names
\newcommand{\Nebiar}{\@ifnextchar[{\basicNebiar}{\basicNebiar[59]}}%
\let\nebiaR=\Nebiar

% pair of north-east adjoint arrows of length nx100 units
\def\basicneadjar[#1]{\fdbicase{\NEADJAR}{}{}{#100}}%

% pair of north-east adjoint arrows
\newcommand{\neadjar}{\@ifnextchar[{\basicneadjar}{\basicneadjar[59]}}%

% pair of north-east adjoint arrows with names [1][2] and length nx100 units
\def\basicNeadjar[#1]#2#3{\fdbicase{\NEADJAR}{#2}{#3}{#100}}%

% pair of north-east adjoint arrows with names
\newcommand{\Neadjar}{\@ifnextchar[{\basicNeadjar}{\basicNeadjar[59]}}%
\let\neadjaR=\Neadjar

% SOUT-WEST ARROWS

% \SWAR{n} draws a south-west arrow of length nx100 units
\newcommand{\SWAR}[1]{%
\Y=#1%
\divide\Y by 2%
\begin{picture}(0,0)%
\put(\Y,\Y){\vector(-1,-1){#1}}%
\end{picture}}%

% \SWBIAR{n} draws a pair of south-west arrows of length n units
\newcommand{\SWBIAR}[1]{%
\Y=#1%
\divide\Y by 2%
\begin{picture}(0,0)%
\put(\Y,\Y){\begin{picture}(0,0)%
\truex{247}%
\put(\value{x},-\value{x}){\vector(-1,-1){#1}}%
\put(-\value{x},\value{x}){\vector(-1,-1){#1}}%
\monolength=#1%
\advance\monolength by -\value{x}%
\epilength=#1%
\advance\epilength by \value{x}%
\end{picture}}\end{picture}}%

% \SWADJAR{n} draws a south-west pair of adjoint arrows of length n units
\newcommand{\SWADJAR}[1]{%
\Y=#1%
\divide\Y by 2%
\begin{picture}(0,0)%
\put(\Y,\Y){\begin{picture}(0,0)%
\truex{247}%
\monolength=#1%
\advance\monolength by -\value{x}%
\epilength=#1%
\advance\epilength by \value{x}%
\put(\value{x},-\value{x}){\vector(-1,-1){#1}}%
\end{picture}}%
\put(-\Y,-\Y){\begin{picture}(0,0)%
\truex{247}%
\monolength=#1%
\advance\monolength by -\value{x}%
\epilength=#1%
\advance\epilength by \value{x}%
\put(-\value{x},\value{x}){\vector(1,1){#1}}%
\end{picture}}\end{picture}}%

% All the following commands draw south-west arrows 

% south-west arrow of length nx100 units
\def\basicswar[#1]{\fdcase{\SWAR}{}{}{#100}}%

% south-west arrow
\newcommand{\swar}{\@ifnextchar[{\basicswar}{\basicswar[59]}}%

% south-west arrow with upper name [1] and length nx100 units
\def\basicSwar[#1]#2{\fdcase{\SWAR}{#2}{}{#100}}%

% south-west arrow with upper name
\newcommand{\Swar}{\@ifnextchar[{\basicSwar}{\basicSwar[59]}}%

% south-west arrow with lower name [1]  and length nx100 units
\def\basicswaR[#1]#2{\fdcase{\SWAR}{}{#2}{#100}}%

% south-west arrow with lower name [1]
\newcommand{\swaR}{\@ifnextchar[{\basicswaR}{\basicswaR[59]}}%

% pair of south-west arrows of length nx100 units
\def\basicswbiar[#1]{\fdbicase{\SWBIAR}{}{}{#100}}%

% pair of south-west arrows
\newcommand{\swbiar}{\@ifnextchar[{\basicswbiar}{\basicswbiar[59]}}%

% pair of south-west arrows with names [1][2] and length nx100 units
\def\basicSwbiar[#1]#2#3{\fdbicase{\SWBIAR}{#2}{#3}{#100}}%

% pair of south-west arrows with names
\newcommand{\Swbiar}{\@ifnextchar[{\basicSwbiar}{\basicSwbiar[59]}}%
\let\swbiaR=\Swbiar

% pair of south-west adjoint arrows of length nx100 units
\def\basicswadjar[#1]{\fdbicase{\SWADJAR}{}{}{#100}}%

% pair of south-west adjoint arrows
\newcommand{\swadjar}{\@ifnextchar[{\basicswadjar}{\basicswadjar[59]}}%

% pair of south-west adjoint arrows with names [1][2] and length nx100 units
\def\basicSwadjar[#1]#2#3{\fdbicase{\SWADJAR}{#2}{#3}{#100}}%

% pair of south-west adjoint arrows with names
\newcommand{\Swadjar}{\@ifnextchar[{\basicSwadjar}{\basicSwadjar[59]}}%
\let\swadjaR=\Swadjar

% MACROS FOR  SECOND DIAGONAL PICTURES

% \sdcase{P}{f}{g}{n} draws the picture P with names f, g
% and length n units
\newcommand{\sdcase}[4]{\testdiagrammode\begin{picture}(0,0)%
\put(0,0){#1{#4}}%
\truex{100}\truez{600}%
\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#2}$}}%
\truex{300}\truey{800}%
\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#3}$}}%
\end{picture}}%

% \sdbicase{P}{f}{g}{n} draws the bipicture P with names f, g
% and length n units
\newcommand{\sdbicase}[4]{\testdiagrammode\begin{picture}(0,0)%
\put(0,0){#1{#4}}%
\truex{350}\truey{600}\truez{950}%
\put(\value{x},\value{x}){\makebox(0,\value{y})[l]{${#2}$}}%
\truex{450}\truey{600}\truez{1050}%
\put(-\value{x},-\value{z}){\makebox(0,\value{y})[r]{${#3}$}}%
\end{picture}}%


% SOUTH-EAST ARROWS

% \SEAR{n} draws a south-east arrow of length nx100 units
\newcommand{\SEAR}[1]{%
\Y=#1%
\divide\Y by 2%
\begin{picture}(0,0)%
\put(-\Y,\Y){\vector(1,-1){#1}}%
\end{picture}}%

% \SEBIAR{n} draws a pair of south-east arrows of length n units
\newcommand{\SEBIAR}[1]{%
\Y=#1%
\divide\Y by 2%
\begin{picture}(0,0)%
\put(-\Y,\Y){\begin{picture}(0,0)%
\truex{247}%
\put(-\value{x},-\value{x}){\vector(1,-1){#1}}%
\put(\value{x},\value{x}){\vector(1,-1){#1}}%
\monolength=#1%
\advance\monolength by -\value{x}%
\epilength=#1%
\advance\epilength by \value{x}%
\end{picture}}\end{picture}}%

% \SEADJAR{n} draws a south-east pair of adjoint arrows of length n units
\newcommand{\SEADJAR}[1]{%
\Y=#1%
\divide\Y by 2%
\begin{picture}(0,0)%
\put(-\Y,\Y){\begin{picture}(0,0)%
\truex{247}%
\monolength=#1%
\advance\monolength by -\value{x}%
\epilength=#1%
\advance\epilength by \value{x}%
\put(-\value{x},-\value{x}){\vector(1,-1){#1}}%
\end{picture}}%
\put(\Y,-\Y){\begin{picture}(0,0)%
\truex{247}%
\monolength=#1%
\advance\monolength by -\value{x}%
\epilength=#1%
\advance\epilength by \value{x}%
\put(\value{x},\value{x}){\vector(-1,1){#1}}%
\end{picture}}\end{picture}}%

% All the following commands draw south-east arrows 

% south-east arrow of length nx100 units
\def\basicsear[#1]{\sdcase{\SEAR}{}{}{#100}}%

% south-east arrow
\newcommand{\sear}{\@ifnextchar[{\basicsear}{\basicsear[59]}}%

% south-east arrow with upper name [1] and length nx100 units
\def\basicSear[#1]#2{\sdcase{\SEAR}{#2}{}{#100}}%

% south-east arrow with upper name
\newcommand{\Sear}{\@ifnextchar[{\basicSear}{\basicSear[59]}}%

% south-east arrow with lower name [1]  and length nx100 units
\def\basicseaR[#1]#2{\sdcase{\SEAR}{}{#2}{#100}}%

% south-east arrow with lower name [1]
\newcommand{\seaR}{\@ifnextchar[{\basicseaR}{\basicseaR[59]}}%

% pair of south-east arrows of length nx100 units
\def\basicsebiar[#1]{\sdbicase{\SEBIAR}{}{}{#100}}%

% pair of south-east arrows
\newcommand{\sebiar}{\@ifnextchar[{\basicsebiar}{\basicsebiar[59]}}%

% pair of south-east arrows with names [1][2] and length nx100 units
\def\basicSebiar[#1]#2#3{\sdbicase{\SEBIAR}{#2}{#3}{#100}}%

% pair of south-east arrows with names
\newcommand{\Sebiar}{\@ifnextchar[{\basicSebiar}{\basicSebiar[59]}}%
\let\sebiaR=\Sebiar

% pair of south-east adjoint arrows of length nx100 units
\def\basicseadjar[#1]{\sdbicase{\SEADJAR}{}{}{#100}}%

% pair of south-east adjoint arrows
\newcommand{\seadjar}{\@ifnextchar[{\basicseadjar}{\basicseadjar[59]}}%

% pair of south-east adjoint arrows with names [1][2] and length nx100 units
\def\basicSeadjar[#1]#2#3{\sdbicase{\SEADJAR}{#2}{#3}{#100}}%

% pair of south-east adjoint arrows with names
\newcommand{\Seadjar}{\@ifnextchar[{\basicSeadjar}{\basicSeadjar[59]}}%
\let\seadjaR=\Seadjar

% NORTH-WEST ARROWS

% \NWAR{n} draws a north-west arrow of length nx100 units
\newcommand{\NWAR}[1]{%
\Y=#1%
\divide\Y by 2%
\begin{picture}(0,0)%
\put(\Y,-\Y){\vector(-1,1){#1}}%
\end{picture}}%

% \NWBIAR{n} draws a pair of north-west arrows of length n units
\newcommand{\NWBIAR}[1]{%
\Y=#1%
\divide\Y by 2%
\begin{picture}(0,0)%
\put(\Y,-\Y){\begin{picture}(0,0)%
\truex{247}%
\put(-\value{x},-\value{x}){\vector(-1,1){#1}}%
\put(\value{x},\value{x}){\vector(-1,1){#1}}%
\monolength=#1%
\advance\monolength by -\value{x}%
\epilength=#1%
\advance\epilength by \value{x}%
\end{picture}}\end{picture}}%

% \NWADJAR{n} draws a north-west pair of adjoint arrows of length n units
\newcommand{\NWADJAR}[1]{%
\Y=#1%
\divide\Y by 2%
\begin{picture}(0,0)%
\put(\Y,-\Y){\begin{picture}(0,0)%
\truex{247}%
\monolength=#1%
\advance\monolength by -\value{x}%
\epilength=#1%
\advance\epilength by \value{x}%
\put(-\value{x},-\value{x}){\vector(-1,1){#1}}%
\end{picture}}%
\put(-\Y,\Y){\begin{picture}(0,0)%
\truex{247}%
\monolength=#1%
\advance\monolength by -\value{x}%
\epilength=#1%
\advance\epilength by \value{x}%
\put(\value{x},\value{x}){\vector(1,-1){#1}}%
\end{picture}}\end{picture}}%

% All the following commands draw north-west arrows 

% north-west arrow of length nx100 units
\def\basicnwar[#1]{\sdcase{\NWAR}{}{}{#100}}%

% north-west arrow
\newcommand{\nwar}{\@ifnextchar[{\basicnwar}{\basicnwar[59]}}%

% north-west arrow with upper name [1] and length nx100 units
\def\basicNwar[#1]#2{\sdcase{\NWAR}{#2}{}{#100}}%

% north-west arrow with upper name
\newcommand{\Nwar}{\@ifnextchar[{\basicNwar}{\basicNwar[59]}}%

% north-west arrow with lower name [1]  and length nx100 units
\def\basicnwaR[#1]#2{\sdcase{\NWAR}{}{#2}{#100}}%

% north-west arrow with lower name [1]
\newcommand{\nwaR}{\@ifnextchar[{\basicnwaR}{\basicnwaR[59]}}%

% pair of north-west arrows of length nx100 units
\def\basicnwbiar[#1]{\sdbicase{\NWBIAR}{}{}{#100}}%

% pair of north-west arrows
\newcommand{\nwbiar}{\@ifnextchar[{\basicnwbiar}{\basicnwbiar[59]}}%

% pair of north-west arrows with names [1][2] and length nx100 units
\def\basicNwbiar[#1]#2#3{\sdbicase{\NWBIAR}{#2}{#3}{#100}}%

% pair of north-west arrows with names
\newcommand{\Nwbiar}{\@ifnextchar[{\basicNwbiar}{\basicNwbiar[59]}}%
\let\nwbiaR=\Nwbiar

% pair of north-west adjoint arrows of length nx100 units
\def\basicnwadjar[#1]{\sdbicase{\NWADJAR}{}{}{#100}}%

% pair of north-west adjoint arrows
\newcommand{\nwadjar}{\@ifnextchar[{\basicnwadjar}{\basicnwadjar[59]}}%

% pair of north-west adjoint arrows with names [1][2] and length nx100 units
\def\basicNwadjar[#1]#2#3{\sdbicase{\NWADJAR}{#2}{#3}{#100}}%

% pair of north-west adjoint arrows with names
\newcommand{\Nwadjar}{\@ifnextchar[{\basicNwadjar}{\basicNwadjar[59]}}%
\let\nwadjaR=\Nwadjar

% EAST-NORTH-EAST ARROWS

% The following commands produce east-north-east arrows 
% of horizontal extent n units

% \ENEAR{f}{g}{n} draws a east-north-east arrow with names f, g 
% and length n units
\newcommand{\ENEAR}[3]{\testdiagrammode%
\Y=#3%
\divide\Y by 2%
\Z=\Y%
\divide\Z by 2%
\begin{picture}(0,0)%
\put(-\Y,-\Z){\vector(2,1){#3}}%
\truex{200}\truey{800}\truez{600}%
\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
\end{picture}}%

% \ENEBIAR{f}{g}{n} draws a pair of east-north-east arrows 
% with names f,g and length n units
\newcommand{\ENEBIAR}[3]{\testdiagrammode%
\Y=#3%
\divide\Y by 2%
\Z=\Y%
\divide\Z by 2%
\begin{picture}(0,0)%
\put(-\Y,-\Z){\begin{picture}(0,0)%
\truex{156}\truey{313}%
\put(-\value{x},\value{y}){\vector(2,1){#3}}%
\put(\value{x},-\value{y}){\vector(2,1){#3}}%
\monolength=#3%
\advance\monolength by -\value{x}%
\epilength=#3%
\advance\epilength by \value{x}%
\secondmonolength=\Y%
\advance\secondmonolength by -\value{y}%
\secondepilength=\Y%
\advance\secondepilength by \value{y}%
\end{picture}}
\truex{300}\truey{1000}\truez{600}%
\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
\end{picture}}%

% \ENEADJAR{f}{g}{n} draws a east-north-east pair of adjoint arrows 
% with names f,g and length n units
\newcommand{\ENEADJAR}[3]{\testdiagrammode%
\Y=#3%
\divide\Y by 2%
\Z=\Y%
\divide\Z by 2%
\begin{picture}(0,0)%
\put(-\Y,-\Z){\begin{picture}(0,0)%
\truex{156}\truey{313}%
\monolength=#3%
\advance\monolength by -\value{x}%
\epilength=#3%
\advance\epilength by \value{x}%
\secondmonolength=\Y%
\advance\secondmonolength by -\value{y}%
\secondepilength=\Y%
\advance\secondepilength by \value{y}%
\put(\value{x},-\value{y}){\vector(2,1){#3}}%
\put(\monolength,\secondepilength){\vector(-2,-1){#3}}%
\end{picture}}
\truex{300}\truey{1000}\truez{600}%
\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
\end{picture}}%

% The following commands produce east-north-east arrows;
% the default length is 13300 units

% basic east-north-east arrow
\def\basicenear[#1]{\ENEAR{}{}{#100}}%

% east-north-east arrow
\newcommand{\enear}{\@ifnextchar[{\basicenear}{\basicenear[133]}}%

% basic east-north-east arrow with upper name
\def\basicEnear[#1]#2{\ENEAR{#2}{}{#100}}%

% east-north-east arrow with upper name
\newcommand{\Enear}{\@ifnextchar[{\basicEnear}{\basicEnear[133]}}%

% basic east-north-east arrow with lower name
\def\basiceneaR[#1]#2{\ENEAR{}{#2}{#100}}%

% east-north-east arrow with lower name
\newcommand{\eneaR}{\@ifnextchar[{\basiceneaR}{\basiceneaR[133]}}%

% basic east-north-east pair of arrows
\def\basicenebiar[#1]{\ENEBIAR{}{}{#100}}%

% east-north-east pair of arrows
\newcommand{\enebiar}{\@ifnextchar[{\basicenebiar}{\basicenebiar[133]}}%

% basic east-north-east pair of arrows with names
\def\basicEnebiar[#1]#2#3{\ENEBIAR{#2}{#3}{#100}}%

% east-north-east pair of arrows with names
\newcommand{\Enebiar}{\@ifnextchar[{\basicEnebiar}{\basicEnebiar[133]}}%
\let\enebiaR=\Enebiar

% basic east-north-east pair of adjoint arrows
\def\basiceneadjar[#1]{\ENEADJAR{}{}{#100}}%

% east-north-east pair of adjoint arrows
\newcommand{\eneadjar}{\@ifnextchar[{\basiceneadjar}{\basiceneadjar[133]}}%

% basic east-north-east pair of adjoint  arrows with names
\def\basicEneadjar[#1]#2#3{\ENEADJAR{#2}{#3}{#100}}%

% east-north-east pair of adjoint arrows with names
\newcommand{\Eneadjar}{\@ifnextchar[{\basicEneadjar}{\basicEneadjar[133]}}%
\let\eneadjaR=\Eneadjar

% EAST-SOUTH-EAST ARROWS

% The following commands produce east-south-east arrows 
% of horizontal extent n units

% \ESEAR{f}{g}{n} draws a east-south-east arrow with names f, g 
% and length n units
\newcommand{\ESEAR}[3]{\testdiagrammode%
\Y=#3%
\divide\Y by 2%
\Z=\Y%
\divide\Z by 2%
\begin{picture}(0,0)%
\put(-\Y,\Z){\vector(2,-1){#3}}%
\truex{200}\truey{800}\truez{600}%
\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
\end{picture}}%

% \ESEBIAR{f}{g}{n} draws a pair of east-south-east arrows 
% with names f,g and length n units
\newcommand{\ESEBIAR}[3]{\testdiagrammode%
\Y=#3%
\divide\Y by 2%
\Z=\Y%
\divide\Z by 2%
\begin{picture}(0,0)%
\put(-\Y,\Z){\begin{picture}(0,0)%
\truex{156}\truey{313}%
\put(-\value{x},-\value{y}){\vector(2,-1){#3}}%
\put(\value{x},\value{y}){\vector(2,-1){#3}}%
\monolength=#3%
\advance\monolength by -\value{x}%
\epilength=#3%
\advance\epilength by \value{x}%
\secondmonolength=\Y%
\advance\secondmonolength by -\value{y}%
\secondepilength=\Y%
\advance\secondepilength by \value{y}%
\end{picture}}
\truex{400}\truey{1000}\truez{600}%
\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
\end{picture}}%

% \ESEADJAR{f}{g}{n} draws a east-south-east pair of adjoint arrows 
% with names f,g and length n units
\newcommand{\ESEADJAR}[3]{\testdiagrammode%
\Y=#3%
\divide\Y by 2%
\Z=\Y%
\divide\Z by 2%
\begin{picture}(0,0)%
\put(-\Y,\Z){\begin{picture}(0,0)%
\truex{156}\truey{313}%
\monolength=#3%
\advance\monolength by -\value{x}%
\epilength=#3%
\advance\epilength by \value{x}%
\secondmonolength=\Y%
\advance\secondmonolength by -\value{y}%
\secondepilength=\Y%
\advance\secondepilength by \value{y}%
\put(-\value{x},-\value{y}){\vector(2,-1){#3}}%
\put(\epilength,-\secondmonolength){\vector(-2,1){#3}}%
\end{picture}}
\truex{400}\truey{1000}\truez{600}%
\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
\end{picture}}%

% The following commands produce east-south-east arrows;
% the default length is 13300 units

% basic east-south-east arrow
\def\basicesear[#1]{\ESEAR{}{}{#100}}%

% east-south-east arrow
\newcommand{\esear}{\@ifnextchar[{\basicesear}{\basicesear[133]}}%

% basic east-south-east arrow with upper name
\def\basicEsear[#1]#2{\ESEAR{#2}{}{#100}}%

% east-south-east arrow with upper name
\newcommand{\Esear}{\@ifnextchar[{\basicEsear}{\basicEsear[133]}}%

% basic east-south-east arrow with lower name
\def\basiceseaR[#1]#2{\ESEAR{}{#2}{#100}}%

% east-south-east arrow with lower name
\newcommand{\eseaR}{\@ifnextchar[{\basiceseaR}{\basiceseaR[133]}}%

% basic east-south-east pair of arrows
\def\basicesebiar[#1]{\ESEBIAR{}{}{#100}}%

% east-south-east pair of arrows
\newcommand{\esebiar}{\@ifnextchar[{\basicesebiar}{\basicesebiar[133]}}%

% basic east-south-east pair of arrows with names
\def\basicEsebiar[#1]#2#3{\ESEBIAR{#2}{#3}{#100}}%

% east-south-east pair of arrows with names
\newcommand{\Esebiar}{\@ifnextchar[{\basicEsebiar}{\basicEsebiar[133]}}%
\let\esebiaR=\Esebiar

% basic east-south-east pair of adjoint arrows
\def\basiceseadjar[#1]{\ESEADJAR{}{}{#100}}%

% east-south-east pair of adjoint arrows
\newcommand{\eseadjar}{\@ifnextchar[{\basiceseadjar}{\basiceseadjar[133]}}%

% basic east-south-east pair of adjoint  arrows with names
\def\basicEseadjar[#1]#2#3{\ESEADJAR{#2}{#3}{#100}}%

% east-south-east pair of adjoint arrows with names
\newcommand{\Eseadjar}{\@ifnextchar[{\basicEseadjar}{\basicEseadjar[133]}}%
\let\eseadjaR=\Eseadjar

% WEST-SOUTH-WEST ARROWS

% The following commands produce west-south-west arrows 
% of horizontal extent n units

% \WSWAR{f}{g}{n} draws a west-south-west arrow with names f, g 
% and length n units
\newcommand{\WSWAR}[3]{\testdiagrammode%
\Y=#3%
\divide\Y by 2%
\Z=\Y%
\divide\Z by 2%
\begin{picture}(0,0)%
\put(\Y,\Z){\vector(-2,-1){#3}}%
\truex{200}\truey{800}\truez{600}%
\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
\end{picture}}%

% \WSWBIAR{f}{g}{n} draws a pair of west-south-west arrows 
% with names f,g and length n units
\newcommand{\WSWBIAR}[3]{\testdiagrammode%
\Y=#3%
\divide\Y by 2%
\Z=\Y%
\divide\Z by 2%
\begin{picture}(0,0)%
\put(\Y,\Z){\begin{picture}(0,0)%
\truex{156}\truey{313}%
\put(-\value{x},\value{y}){\vector(-2,-1){#3}}%
\put(\value{x},-\value{y}){\vector(-2,-1){#3}}%
\monolength=#3%
\advance\monolength by -\value{x}%
\epilength=#3%
\advance\epilength by \value{x}%
\secondmonolength=\Y%
\advance\secondmonolength by -\value{y}%
\secondepilength=\Y%
\advance\secondepilength by \value{y}%
\end{picture}}
\truex{300}\truey{1000}\truez{600}%
\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
\end{picture}}%

% \WSWADJAR{f}{g}{n} draws a west-south-west pair of adjoint arrows 
% with names f,g and length n units
\newcommand{\WSWADJAR}[3]{\testdiagrammode%
\Y=#3%
\divide\Y by 2%
\Z=\Y%
\divide\Z by 2%
\begin{picture}(0,0)%
\put(\Y,\Z){\begin{picture}(0,0)%
\truex{156}\truey{313}%
\monolength=#3%
\advance\monolength by -\value{x}%
\epilength=#3%
\advance\epilength by \value{x}%
\secondmonolength=\Y%
\advance\secondmonolength by -\value{y}%
\secondepilength=\Y%
\advance\secondepilength by \value{y}%
\put(\value{x},-\value{y}){\vector(-2,-1){#3}}%
\put(-\epilength,-\secondmonolength){\vector(2,1){#3}}%
\end{picture}}
\truex{300}\truey{1000}\truez{600}%
\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
\end{picture}}%

% The following commands produce west-south-west arrows;
% the default length is 13300 units

% basic west-south-west arrow
\def\basicwswar[#1]{\WSWAR{}{}{#100}}%

% west-south-west arrow
\newcommand{\wswar}{\@ifnextchar[{\basicwswar}{\basicwswar[133]}}%

% basic west-south-west arrow with upper name
\def\basicWswar[#1]#2{\WSWAR{#2}{}{#100}}%

% west-south-west arrow with upper name
\newcommand{\Wswar}{\@ifnextchar[{\basicWswar}{\basicWswar[133]}}%

% basic west-south-west arrow with lower name
\def\basicwswaR[#1]#2{\WSWAR{}{#2}{#100}}%

% west-south-west arrow with lower name
\newcommand{\wswaR}{\@ifnextchar[{\basicwswaR}{\basicwswaR[133]}}%

% basic west-south-west pair of arrows
\def\basicwswbiar[#1]{\WSWBIAR{}{}{#100}}%

% west-south-west pair of arrows
\newcommand{\wswbiar}{\@ifnextchar[{\basicwswbiar}{\basicwswbiar[133]}}%

% basic west-south-west pair of arrows with names
\def\basicWswbiar[#1]#2#3{\WSWBIAR{#2}{#3}{#100}}%

% west-south-west pair of arrows with names
\newcommand{\Wswbiar}{\@ifnextchar[{\basicWswbiar}{\basicWswbiar[133]}}%
\let\wswbiaR=\Wswbiar

% basic west-south-west pair of adjoint arrows
\def\basicwswadjar[#1]{\WSWADJAR{}{}{#100}}%

% west-south-west pair of adjoint arrows
\newcommand{\wswadjar}{\@ifnextchar[{\basicwswadjar}{\basicwswadjar[133]}}%

% basic west-south-west pair of adjoint  arrows with names
\def\basicWswadjar[#1]#2#3{\WSWADJAR{#2}{#3}{#100}}%

% west-south-west pair of adjoint arrows with names
\newcommand{\Wswadjar}{\@ifnextchar[{\basicWswadjar}{\basicWswadjar[133]}}%
\let\wswadjaR=\Wswadjar

% WEST-NORTH-WEST ARROWS

% The following commands produce west-north-west arrows 
% of horizontal extent n units

% \WNWAR{f}{g}{n} draws a west-north-west arrow with names f, g 
% and length n units
\newcommand{\WNWAR}[3]{\testdiagrammode%
\Y=#3%
\divide\Y by 2%
\Z=\Y%
\divide\Z by 2%
\begin{picture}(0,0)%
\put(\Y,-\Z){\vector(-2,1){#3}}%
\truex{200}\truey{800}\truez{600}%
\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
\end{picture}}%

% \WNWBIAR{f}{g}{n} draws a pair of west-north-west arrows 
% with names f,g and length n units
\newcommand{\WNWBIAR}[3]{\testdiagrammode%
\Y=#3%
\divide\Y by 2%
\Z=\Y%
\divide\Z by 2%
\begin{picture}(0,0)%
\put(\Y,-\Z){\begin{picture}(0,0)%
\truex{156}\truey{313}%
\put(-\value{x},-\value{y}){\vector(-2,1){#3}}%
\put(\value{x},\value{y}){\vector(-2,1){#3}}%
\monolength=#3%
\advance\monolength by -\value{x}%
\epilength=#3%
\advance\epilength by \value{x}%
\secondmonolength=\Y%
\advance\secondmonolength by -\value{y}%
\secondepilength=\Y%
\advance\secondepilength by \value{y}%
\end{picture}}
\truex{400}\truey{1000}\truez{600}%
\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
\end{picture}}%

% \WNWADJAR{f}{g}{n} draws a west-north-west pair of adjoint arrows 
% with names f,g and length n units
\newcommand{\WNWADJAR}[3]{\testdiagrammode%
\Y=#3%
\divide\Y by 2%
\Z=\Y%
\divide\Z by 2%
\begin{picture}(0,0)%
\put(\Y,-\Z){\begin{picture}(0,0)%
\truex{156}\truey{313}%
\monolength=#3%
\advance\monolength by -\value{x}%
\epilength=#3%
\advance\epilength by \value{x}%
\secondmonolength=\Y%
\advance\secondmonolength by -\value{y}%
\secondepilength=\Y%
\advance\secondepilength by \value{y}%
\put(-\value{x},-\value{y}){\vector(-2,1){#3}}%
\put(-\monolength,\secondepilength){\vector(2,-1){#3}}%
\end{picture}}
\truex{400}\truey{1000}\truez{600}%
\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
\end{picture}}%

% The following commands produce west-north-west arrows;
% the default length is 13300 units

% basic west-north-west arrow
\def\basicwnwar[#1]{\WNWAR{}{}{#100}}%

% west-north-west arrow
\newcommand{\wnwar}{\@ifnextchar[{\basicwnwar}{\basicwnwar[133]}}%

% basic west-north-west arrow with upper name
\def\basicWnwar[#1]#2{\WNWAR{#2}{}{#100}}%

% west-north-west arrow with upper name
\newcommand{\Wnwar}{\@ifnextchar[{\basicWnwar}{\basicWnwar[133]}}%

% basic west-north-west arrow with lower name
\def\basicwnwaR[#1]#2{\WNWAR{}{#2}{#100}}%

% west-north-west arrow with lower name
\newcommand{\wnwaR}{\@ifnextchar[{\basicwnwaR}{\basicwnwaR[133]}}%

% basic west-north-west distributor
\def\basicwnwdist[#1]{\WNWDIST{}{}{#100}}%

% basic west-north-west pair of arrows
\def\basicwnwbiar[#1]{\WNWBIAR{}{}{#100}}%

% west-north-west pair of arrows
\newcommand{\wnwbiar}{\@ifnextchar[{\basicwnwbiar}{\basicwnwbiar[133]}}%

% basic west-north-west pair of arrows with names
\def\basicWnwbiar[#1]#2#3{\WNWBIAR{#2}{#3}{#100}}%

% west-north-west pair of arrows with names
\newcommand{\Wnwbiar}{\@ifnextchar[{\basicWnwbiar}{\basicWnwbiar[133]}}%
\let\wnwbiaR=\Wnwbiar

% basic west-north-west pair of adjoint arrows
\def\basicwnwadjar[#1]{\WNWADJAR{}{}{#100}}%

% west-north-west pair of adjoint arrows
\newcommand{\wnwadjar}{\@ifnextchar[{\basicwnwadjar}{\basicwnwadjar[133]}}%

% basic west-north-west pair of adjoint  arrows with names
\def\basicWnwadjar[#1]#2#3{\WNWADJAR{#2}{#3}{#100}}%

% west-north-west pair of adjoint arrows with names
\newcommand{\Wnwadjar}{\@ifnextchar[{\basicWnwadjar}{\basicWnwadjar[133]}}%
\let\wnwadjaR=\Wnwadjar

% NORTH-NORTH-EAST ARROWS

% The following commands produce north-north-east arrows 
% of horizontal extent n units

% \NNEAR{f}{g}{n} draws a north-north-east arrow with names f, g 
% and length n units
\newcommand{\NNEAR}[3]{\testdiagrammode%
\Z=#3%
\divide\Z by 2%
\begin{picture}(0,0)%
\put(-\Z,-#3){\vector(1,2){#3}}%
\truex{200}\truey{800}\truez{600}%
\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
\end{picture}}%

% \NNEBIAR{f}{g}{n} draws a pair of north-north-east arrows 
% with names f,g and length n units
\newcommand{\NNEBIAR}[3]{\testdiagrammode%
\Y=#3%
\divide\Y by 2%
\Z=#3%
\multiply \Z by 2%
\begin{picture}(0,0)%
\put(-\Y,-#3){\begin{picture}(0,0)%
\truex{313}\truey{156}%
\put(-\value{x},\value{y}){\vector(1,2){#3}}%
\put(\value{x},-\value{y}){\vector(1,2){#3}}%
\monolength=#3%
\advance\monolength by -\value{x}%
\epilength=#3%
\advance\epilength by \value{x}%
\secondmonolength=\Z%
\advance\secondmonolength by -\value{y}%
\secondepilength=\Z%
\advance\secondepilength by \value{y}%
\end{picture}}
\truex{300}\truey{1000}\truez{600}%
\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
\end{picture}}%

% \NNEADJAR{f}{g}{n} draws a north-north-east pair of adjoint arrows 
% with names f,g and length n units
\newcommand{\NNEADJAR}[3]{\testdiagrammode%
\Y=#3%
\divide\Y by 2%
\Z=#3%
\multiply \Z by 2%
\begin{picture}(0,0)%
\put(-\Y,-#3){\begin{picture}(0,0)%
\truex{313}\truey{156}%
\monolength=#3%
\advance\monolength by -\value{x}%
\epilength=#3%
\advance\epilength by \value{x}%
\secondmonolength=\Z%
\advance\secondmonolength by -\value{y}%
\secondepilength=\Z%
\advance\secondepilength by \value{y}%
\put(\value{x},-\value{y}){\vector(1,2){#3}}%
\put(\monolength,\secondepilength){\vector(-1,-2){#3}}%
\end{picture}}
\truex{300}\truey{1000}\truez{600}%
\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
\end{picture}}%

% The following commands produce north-north-east arrows;
% the default length is 6700 units

% basic north-north-east arrow
\def\basicnnear[#1]{\NNEAR{}{}{#100}}%

% north-north-east arrow
\newcommand{\nnear}{\@ifnextchar[{\basicnnear}{\basicnnear[67]}}%

% basic north-north-east arrow with upper name
\def\basicNnear[#1]#2{\NNEAR{#2}{}{#100}}%

% north-north-east arrow with upper name
\newcommand{\Nnear}{\@ifnextchar[{\basicNnear}{\basicNnear[67]}}%

% basic north-north-east arrow with lower name
\def\basicnneaR[#1]#2{\NNEAR{}{#2}{#100}}%

% north-north-east arrow with lower name
\newcommand{\nneaR}{\@ifnextchar[{\basicnneaR}{\basicnneaR[67]}}%

% basic north-north-east pair of arrows
\def\basicnnebiar[#1]{\NNEBIAR{}{}{#100}}%

% north-north-east pair of arrows
\newcommand{\nnebiar}{\@ifnextchar[{\basicnnebiar}{\basicnnebiar[67]}}%

% basic north-north-east pair of arrows with names
\def\basicNnebiar[#1]#2#3{\NNEBIAR{#2}{#3}{#100}}%

% north-north-east pair of arrows with names
\newcommand{\Nnebiar}{\@ifnextchar[{\basicNnebiar}{\basicNnebiar[67]}}%
\let\nnebiaR=\Nnebiar

% basic north-north-east pair of adjoint arrows
\def\basicnneadjar[#1]{\NNEADJAR{}{}{#100}}%

% north-north-east pair of adjoint arrows
\newcommand{\nneadjar}{\@ifnextchar[{\basicnneadjar}{\basicnneadjar[67]}}%

% basic north-north-east pair of adjoint  arrows with names
\def\basicNneadjar[#1]#2#3{\NNEADJAR{#2}{#3}{#100}}%

% north-north-east pair of adjoint arrows with names
\newcommand{\Nneadjar}{\@ifnextchar[{\basicNneadjar}{\basicNneadjar[67]}}%
\let\nneadjaR=\Nneadjar

% SOUTH-SOUTH-EAST ARROWS

% The following commands produce south-south-east arrows 
% of horizontal extent n units

% \SSEAR{f}{g}{n} draws a south-south-east arrow with names f, g 
% and length n units
\newcommand{\SSEAR}[3]{\testdiagrammode%
\Z=#3%
\divide\Z by 2%
\begin{picture}(0,0)%
\put(-\Z,#3){\vector(1,-2){#3}}%
\truex{200}\truey{800}\truez{600}%
\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
\end{picture}}%

% \SSEBIAR{f}{g}{n} draws a pair of south-south-east arrows 
% with names f,g and length n units
\newcommand{\SSEBIAR}[3]{\testdiagrammode%
\Y=#3%
\divide\Y by 2%
\Z=#3%
\multiply \Z by 2%
\begin{picture}(0,0)%
\put(-\Y,#3){\begin{picture}(0,0)%
\truex{313}\truey{156}%
\put(-\value{x},-\value{y}){\vector(1,-2){#3}}%
\put(\value{x},\value{y}){\vector(1,-2){#3}}%
\monolength=#3%
\advance\monolength by -\value{x}%
\epilength=#3%
\advance\epilength by \value{x}%
\secondmonolength=\Z%
\advance\secondmonolength by -\value{y}%
\secondepilength=\Z%
\advance\secondepilength by \value{y}%
\end{picture}}
\truex{400}\truey{1000}\truez{600}%
\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
\end{picture}}%

% \SSEADJAR{f}{g}{n} draws a south-south-east pair of adjoint arrows 
% with names f,g and length n units
\newcommand{\SSEADJAR}[3]{\testdiagrammode%
\Y=#3%
\divide\Y by 2%
\Z=#3%
\multiply \Z by 2%
\begin{picture}(0,0)%
\put(-\Y,#3){\begin{picture}(0,0)%
\truex{313}\truey{156}%
\monolength=#3%
\advance\monolength by -\value{x}%
\epilength=#3%
\advance\epilength by \value{x}%
\secondmonolength=\Z%
\advance\secondmonolength by -\value{y}%
\secondepilength=\Z%
\advance\secondepilength by \value{y}%
\put(-\value{x},-\value{y}){\vector(1,-2){#3}}%
\put(\epilength,-\secondmonolength){\vector(-1,2){#3}}%
\end{picture}}
\truex{400}\truey{1000}\truez{600}%
\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
\end{picture}}%

% The following commands produce south-south-east arrows;
% the default length is 6700 units

% basic south-south-east arrow
\def\basicssear[#1]{\SSEAR{}{}{#100}}%

% south-south-east arrow
\newcommand{\ssear}{\@ifnextchar[{\basicssear}{\basicssear[67]}}%

% basic south-south-east arrow with upper name
\def\basicSsear[#1]#2{\SSEAR{#2}{}{#100}}%

% south-south-east arrow with upper name
\newcommand{\Ssear}{\@ifnextchar[{\basicSsear}{\basicSsear[67]}}%

% basic south-south-east arrow with lower name
\def\basicsseaR[#1]#2{\SSEAR{}{#2}{#100}}%

% south-south-east arrow with lower name
\newcommand{\sseaR}{\@ifnextchar[{\basicsseaR}{\basicsseaR[67]}}%

% basic south-south-east pair of arrows
\def\basicssebiar[#1]{\SSEBIAR{}{}{#100}}%

% south-south-east pair of arrows
\newcommand{\ssebiar}{\@ifnextchar[{\basicssebiar}{\basicssebiar[67]}}%

% basic south-south-east pair of arrows with names
\def\basicSsebiar[#1]#2#3{\SSEBIAR{#2}{#3}{#100}}%

% south-south-east pair of arrows with names
\newcommand{\Ssebiar}{\@ifnextchar[{\basicSsebiar}{\basicSsebiar[67]}}%
\let\ssebiaR=\Ssebiar

% basic south-south-east pair of adjoint arrows
\def\basicsseadjar[#1]{\SSEADJAR{}{}{#100}}%

% south-south-east pair of adjoint arrows
\newcommand{\sseadjar}{\@ifnextchar[{\basicsseadjar}{\basicsseadjar[67]}}%

% basic south-south-east pair of adjoint  arrows with names
\def\basicSseadjar[#1]#2#3{\SSEADJAR{#2}{#3}{#100}}%

% south-south-east pair of adjoint arrows with names
\newcommand{\Sseadjar}{\@ifnextchar[{\basicSseadjar}{\basicSseadjar[67]}}%
\let\sseadjaR=\Sseadjar

% SOUTH-SOUTH-WEST ARROWS

% The following commands produce south-south-west arrows 
% of horizontal extent n units

% \SSWAR{f}{g}{n} draws a south-south-west arrow with names f, g 
% and length n units
\newcommand{\SSWAR}[3]{\testdiagrammode%
\Z=#3%
\divide\Z by 2%
\begin{picture}(0,0)%
\put(\Z,#3){\vector(-1,-2){#3}}%
\truex{200}\truey{800}\truez{600}%
\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
\end{picture}}%

% \SSWBIAR{f}{g}{n} draws a pair of south-south-west arrows 
% with names f,g and length n units
\newcommand{\SSWBIAR}[3]{\testdiagrammode%
\Y=#3%
\divide\Y by 2%
\Z=#3%
\multiply \Z by 2%
\begin{picture}(0,0)%
\put(\Y,#3){\begin{picture}(0,0)%
\truex{313}\truey{156}%
\put(-\value{x},\value{y}){\vector(-1,-2){#3}}%
\put(\value{x},-\value{y}){\vector(-1,-2){#3}}%
\monolength=#3%
\advance\monolength by -\value{x}%
\epilength=#3%
\advance\epilength by \value{x}%
\secondmonolength=\Z%
\advance\secondmonolength by -\value{y}%
\secondepilength=\Z%
\advance\secondepilength by \value{y}%
\end{picture}}
\truex{300}\truey{1000}\truez{600}%
\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
\end{picture}}%

% \SSWADJAR{f}{g}{n} draws a south-south-west pair of adjoint arrows 
% with names f,g and length n units
\newcommand{\SSWADJAR}[3]{\testdiagrammode%
\Y=#3%
\divide\Y by 2%
\Z=#3%
\multiply \Z by 2%
\begin{picture}(0,0)%
\put(\Y,#3){\begin{picture}(0,0)%
\truex{313}\truey{156}%
\monolength=#3%
\advance\monolength by -\value{x}%
\epilength=#3%
\advance\epilength by \value{x}%
\secondmonolength=\Z%
\advance\secondmonolength by -\value{y}%
\secondepilength=\Z%
\advance\secondepilength by \value{y}%
\put(\value{x},-\value{y}){\vector(-1,-2){#3}}%
\put(-\epilength,-\secondmonolength){\vector(1,2){#3}}%
\end{picture}}
\truex{300}\truey{1000}\truez{600}%
\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
\end{picture}}%

% The following commands produce south-south-west arrows;
% the default length is 6700 units

% basic south-south-west arrow
\def\basicsswar[#1]{\SSWAR{}{}{#100}}%

% south-south-west arrow
\newcommand{\sswar}{\@ifnextchar[{\basicsswar}{\basicsswar[67]}}%

% basic south-south-west arrow with upper name
\def\basicSswar[#1]#2{\SSWAR{#2}{}{#100}}%

% south-south-west arrow with upper name
\newcommand{\Sswar}{\@ifnextchar[{\basicSswar}{\basicSswar[67]}}%

% basic south-south-west arrow with lower name
\def\basicsswaR[#1]#2{\SSWAR{}{#2}{#100}}%

% south-south-west arrow with lower name
\newcommand{\sswaR}{\@ifnextchar[{\basicsswaR}{\basicsswaR[67]}}%

% basic south-south-west pair of arrows
\def\basicsswbiar[#1]{\SSWBIAR{}{}{#100}}%

% south-south-west pair of arrows
\newcommand{\sswbiar}{\@ifnextchar[{\basicsswbiar}{\basicsswbiar[67]}}%

% basic south-south-west pair of arrows with names
\def\basicSswbiar[#1]#2#3{\SSWBIAR{#2}{#3}{#100}}%

% south-south-west pair of arrows with names
\newcommand{\Sswbiar}{\@ifnextchar[{\basicSswbiar}{\basicSswbiar[67]}}%
\let\sswbiaR=\Sswbiar

% basic south-south-west pair of adjoint arrows
\def\basicsswadjar[#1]{\SSWADJAR{}{}{#100}}%

% south-south-west pair of adjoint arrows
\newcommand{\sswadjar}{\@ifnextchar[{\basicsswadjar}{\basicsswadjar[67]}}%

% basic south-south-west pair of adjoint  arrows with names
\def\basicSswadjar[#1]#2#3{\SSWADJAR{#2}{#3}{#100}}%

% south-south-west pair of adjoint arrows with names
\newcommand{\Sswadjar}{\@ifnextchar[{\basicSswadjar}{\basicSswadjar[67]}}%
\let\sswadjaR=\Sswadjar

% NORTH-NORTH-WEST ARROWS

% The following commands produce north-north-west arrows 
% of horizontal extent n units

% \NNWAR{f}{g}{n} draws a north-north-west arrow with names f, g 
% and length n units
\newcommand{\NNWAR}[3]{\testdiagrammode%
\Z=#3%
\divide\Z by 2%
\begin{picture}(0,0)%
\put(\Z,-#3){\vector(-1,2){#3}}%
\truex{200}\truey{800}\truez{600}%
\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
\end{picture}}%

% \NNWBIAR{f}{g}{n} draws a pair of north-north-west arrows 
% with names f,g and length n units
\newcommand{\NNWBIAR}[3]{\testdiagrammode%
\Y=#3%
\divide\Y by 2%
\Z=#3%
\multiply \Z by 2%
\begin{picture}(0,0)%
\put(\Y,-#3){\begin{picture}(0,0)%
\truex{313}\truey{156}%
\put(-\value{x},-\value{y}){\vector(-1,2){#3}}%
\put(\value{x},\value{y}){\vector(-1,2){#3}}%
\monolength=#3%
\advance\monolength by -\value{x}%
\epilength=#3%
\advance\epilength by \value{x}%
\secondmonolength=\Z%
\advance\secondmonolength by -\value{y}%
\secondepilength=\Z%
\advance\secondepilength by \value{y}%
\end{picture}}
\truex{400}\truey{1000}\truez{600}%
\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
\end{picture}}%

% \NNWADJAR{f}{g}{n} draws a north-north-west pair of adjoint arrows 
% with names f,g and length n units
\newcommand{\NNWADJAR}[3]{\testdiagrammode%
\Y=#3%
\divide\Y by 2%
\Z=#3%
\multiply \Z by 2%
\begin{picture}(0,0)%
\put(\Y,-#3){\begin{picture}(0,0)%
\truex{313}\truey{156}%
\monolength=#3%
\advance\monolength by -\value{x}%
\epilength=#3%
\advance\epilength by \value{x}%
\secondmonolength=\Z%
\advance\secondmonolength by -\value{y}%
\secondepilength=\Z%
\advance\secondepilength by \value{y}%
\put(-\value{x},-\value{y}){\vector(-1,2){#3}}%
\put(-\monolength,\secondepilength){\vector(1,-2){#3}}%
\end{picture}}
\truex{400}\truey{1000}\truez{600}%
\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
\end{picture}}%

% The following commands produce north-north-west arrows;
% the default length is 6700 units

% basic north-north-west arrow
\def\basicnnwar[#1]{\NNWAR{}{}{#100}}%

% north-north-west arrow
\newcommand{\nnwar}{\@ifnextchar[{\basicnnwar}{\basicnnwar[67]}}%

% basic north-north-west arrow with upper name
\def\basicNnwar[#1]#2{\NNWAR{#2}{}{#100}}%

% north-north-west arrow with upper name
\newcommand{\Nnwar}{\@ifnextchar[{\basicNnwar}{\basicNnwar[67]}}%

% basic north-north-west arrow with lower name
\def\basicnnwaR[#1]#2{\NNWAR{}{#2}{#100}}%

% north-north-west arrow with lower name
\newcommand{\nnwaR}{\@ifnextchar[{\basicnnwaR}{\basicnnwaR[67]}}%

% basic north-north-east pair of arrows
\def\basicnnwbiar[#1]{\NNWBIAR{}{}{#100}}%

% north-north-east pair of arrows
\newcommand{\nnwbiar}{\@ifnextchar[{\basicnnwbiar}{\basicnnwbiar[67]}}%

% basic north-north-east pair of arrows with names
\def\basicNnwbiar[#1]#2#3{\NNWBIAR{#2}{#3}{#100}}%

% north-north-east pair of arrows with names
\newcommand{\Nnwbiar}{\@ifnextchar[{\basicNnwbiar}{\basicNnwbiar[67]}}%
\let\nnwbiaR=\Nnwbiar

% basic north-north-east pair of adjoint arrows
\def\basicnnwadjar[#1]{\NNWADJAR{}{}{#100}}%

% north-north-east pair of adjoint arrows
\newcommand{\nnwadjar}{\@ifnextchar[{\basicnnwadjar}{\basicnnwadjar[67]}}%

% basic north-north-east pair of adjoint  arrows with names
\def\basicNnwadjar[#1]#2#3{\NNWADJAR{#2}{#3}{#100}}%

% north-north-east pair of adjoint arrows with names
\newcommand{\Nnwadjar}{\@ifnextchar[{\basicNnwadjar}{\basicNnwadjar[67]}}%
\let\nnwadjaR=\Nnwadjar

% EAST-EAST-NORTH-EAST ARROWS
% default length: 21100 units

% \EENEAR{f}{g}{n} draws a east-east-north-east arrow with names f, g
% and length n units 
\newcommand{\EENEAR}[3]{\testdiagrammode%
\Y=#3%
\divide \Y by 2%
\Z=\Y%
\divide \Z by 3%
\begin{picture}(0,0)%
\put(-\Y,-\Z){\vector(3,1){#3}}%
\truex{200}\truey{800}\truez{600}%
\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
\end{picture}}%

% basic east-east-north-east arrow
\def\basiceenear[#1]{\EENEAR{}{}{#100}}%

% east-east-north-east arrow
\newcommand{\eenear}{\@ifnextchar[{\basiceenear}{\basiceenear[211]}}%

% basic east-east-north-east arrow with upper name
\def\basicEenear[#1]#2{\EENEAR{#2}{}{#100}}%

% east-east-north-east arrow with upper name
\newcommand{\Eenear}{\@ifnextchar[{\basicEenear}{\basicEenear[211]}}%

% basic east-east-north-east arrow with lower name
\def\basiceeneaR[#1]#2{\EENEAR{}{#2}{#100}}%

% east-east-north-east arrow with lower name
\newcommand{\eeneaR}{\@ifnextchar[{\basiceeneaR}{\basiceeneaR[211]}}%

% EAST-EAST-SOUTH-EAST ARROWS
% default length: 21100 units

% \EESEAR{f}{g}{n} draws an east-east-south-east arrow with names f, g 
% and length n units
\newcommand{\EESEAR}[3]{\testdiagrammode%
\Y=#3%
\divide \Y by 2%
\Z=\Y%
\divide \Z by 3%
\begin{picture}(0,0)%
\put(-\Y,\Z){\vector(3,-1){#3}}%
\truex{200}\truey{800}\truez{600}%
\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
\end{picture}}%

% basic east-east-south-east arrow
\def\basiceesear[#1]{\EESEAR{}{}{#100}}%

% east-east-south-east arrow
\newcommand{\eesear}{\@ifnextchar[{\basiceesear}{\basiceesear[211]}}%

% basic east-east-south-east arrow with upper name
\def\basicEesear[#1]#2{\EESEAR{#2}{}{#100}}%

% east-east-south-east arrow with upper name
\newcommand{\Eesear}{\@ifnextchar[{\basicEesear}{\basicEesear[211]}}%

% basic east-east-south-east arrow with lower name
\def\basiceeseaR[#1]#2{\EESEAR{}{#2}{#100}}%

% east-east-south-east arrow with lower name
\newcommand{\eeseaR}{\@ifnextchar[{\basiceeseaR}{\basiceeseaR[211]}}%

% WEST-WEST-NORTH-WEST ARROWs
% default length: 21100 units

% \WWNWAR{f}{g}{n} draws a west-west-north-west arrow with names f, g 
% 	and length n units
\newcommand{\WWNWAR}[3]{\testdiagrammode%
\Y=#3%
\divide \Y by 2%
\Z=\Y%
\divide \Z by 3%
\begin{picture}(0,0)%
\put(\Y,-\Z){\vector(-3,1){#3}}%
\truex{200}\truey{800}\truez{600}%
\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
\end{picture}}%

% basic west-west-north-west arrow
\def\basicwwnwar[#1]{\WWNWAR{}{}{#100}}%

% west-west-north-west arrow
\newcommand{\wwnwar}{\@ifnextchar[{\basicwwnwar}{\basicwwnwar[211]}}%

% basic west-west-north-west arrow with upper name
\def\basicWwnwar[#1]#2{\WWNWAR{#2}{}{#100}}%

% west-west-north-west arrow with upper name
\newcommand{\Wwnwar}{\@ifnextchar[{\basicWwnwar}{\basicWwnwar[211]}}%

% basic west-west-north-west arrow with lower name
\def\basicwwnwaR[#1]#2{\WWNWAR{}{#2}{#100}}%

% west-west-north-west arrow with lower name
\newcommand{\wwnwaR}{\@ifnextchar[{\basicwwnwaR}{\basicwwnwaR[211]}}%

% WEST-WEST-SOUTH-WEST ARROWS
% default length: 21100 units

% \WWSWAR{f}{g} draws a west-west-south-west arrow with names f, g 
\newcommand{\WWSWAR}[3]{\testdiagrammode%
\Y=#3%
\divide \Y by 2%
\Z=\Y%
\divide \Z by 3%
\begin{picture}(0,0)%
\put(\Y,\Z){\vector(-3,-1){#3}}%
\truex{200}\truey{800}\truez{600}%
\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
\end{picture}}%

% basic west-west-south-west arrow
\def\basicwwswar[#1]{\WWSWAR{}{}{#100}}%

% west-west-south-west arrow
\newcommand{\wwswar}{\@ifnextchar[{\basicwwswar}{\basicwwswar[211]}}%

% basic west-west-south-west arrow with upper name
\def\basicWwswar[#1]#2{\WWSWAR{#2}{}{#100}}%

% west-west-south-west arrow with upper name
\newcommand{\Wwswar}{\@ifnextchar[{\basicWwswar}{\basicWwswar[211]}}%

% basic west-west-south-west arrow with lower name
\def\basicwwswaR[#1]#2{\WWSWAR{}{#2}{#100}}%

% west-west-south-west arrow with lower name
\newcommand{\wwswaR}{\@ifnextchar[{\basicwwswaR}{\basicwwswaR[211]}}%


% NORTH-NORTH-NORTH-EAST ARROWS
% default length: 7100 units

% \NNNEAR{f}{g}{n} draws a north-north-north-east arrow with names f, g 
% and length n units
\newcommand{\NNNEAR}[3]{\testdiagrammode%
\Y=#3%
\divide \Y by 2%
\Z=\Y%
\multiply \Z by 3%
\begin{picture}(0,0)%
\put(-\Y,-\Z){\vector(1,3){#3}}%
\truex{100}\truez{600}%
\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
\put(\value{x},-\value{z}){\makebox(0,\value{z})[l]{${#2}$}}%
\end{picture}}%

% basic north-north-north-east arrow
\def\basicnnnear[#1]{\NNNEAR{}{}{#100}}%

% north-north-north-east arrow
\newcommand{\nnnear}{\@ifnextchar[{\basicnnnear}{\basicnnnear[71]}}%

% basic north-north-north-east arrow with upper name
\def\basicNnnear[#1]#2{\NNNEAR{#2}{}{#100}}%

% north-north-north-east arrow with upper name
\newcommand{\Nnnear}{\@ifnextchar[{\basicNnnear}{\basicNnnear[71]}}%

% basic north-north-north-east arrow with lower name
\def\basicnnneaR[#1]#2{\NNNEAR{}{#2}{#100}}%

% north-north-north-east arrow with lower name
\newcommand{\nnneaR}{\@ifnextchar[{\basicnnneaR}{\basicnnneaR[71]}}%

% SOUTH-SOUTH-SOUTH-WEST ARROWS
% default length: 7100 units

% \SSSWAR{f}{g}{n} draws a south-south-south-west arrow with names f, g 
% and length n units
\newcommand{\SSSWAR}[3]{\testdiagrammode%
\Y=#3%
\divide \Y by 2%
\Z=\Y%
\multiply \Z by 3%
\begin{picture}(0,0)%
\put(\Y,\Z){\vector(-1,-3){#3}}%
\truex{100}\truez{600}%
\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
\put(\value{x},-\value{z}){\makebox(0,\value{z})[l]{${#2}$}}%
\end{picture}}%

% basic south-south-south-west arrow
\def\basicssswar[#1]{\SSSWAR{}{}{#100}}%

% south-south-south-west arrow
\newcommand{\ssswar}{\@ifnextchar[{\basicssswar}{\basicssswar[71]}}%

% basic south-south-south-west arrow with upper name
\def\basicSsswar[#1]#2{\SSSWAR{#2}{}{#100}}%

% south-south-south-west arrow with upper name
\newcommand{\Ssswar}{\@ifnextchar[{\basicSsswar}{\basicSsswar[71]}}%

% basic south-south-south-west arrow with lower name
\def\basicssswaR[#1]#2{\SSSWAR{}{#2}{#100}}%

% south-south-south-west arrow with lower name
\newcommand{\ssswaR}{\@ifnextchar[{\basicssswaR}{\basicssswaR[71]}}%

% SOUTH-SOUTH-SOUTH-EAST ARROWS
% default length: 7100 units

% \SSSEAR{f}{g}{n} draws a south-south-south-east arrow with names f, g 
% and length n units
\newcommand{\SSSEAR}[3]{\testdiagrammode%
\Y=#3%
\divide \Y by 2%
\Z=\Y%
\multiply \Z by 3%
\begin{picture}(0,0)%
\put(-\Y,\Z){\vector(1,-3){#3}}%
\truex{200}\truez{600}%
\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
\put(-\value{x},-\value{z}){\makebox(0,\value{z})[r]{${#2}$}}%
\end{picture}}%

% basic south-south-south-east arrow
\def\basicsssear[#1]{\SSSEAR{}{}{#100}}%

% south-south-south-east arrow
\newcommand{\sssear}{\@ifnextchar[{\basicsssear}{\basicsssear[71]}}%

% basic south-south-south-east arrow with upper name
\def\basicSssear[#1]#2{\SSSEAR{#2}{}{#100}}%

% south-south-south-east arrow with upper name
\newcommand{\Sssear}{\@ifnextchar[{\basicSssear}{\basicSssear[71]}}%

% basic south-south-south-east arrow with lower name
\def\basicssseaR[#1]#2{\SSSEAR{}{#2}{#100}}%

% south-south-south-east arrow with lower name
\newcommand{\ssseaR}{\@ifnextchar[{\basicssseaR}{\basicssseaR[71]}}%

% NORTH-NORTH-NORTH-WEST ARROWS
% default length: 7100 units

% \NNNWAR{f}{g}{n} draws a north-north-north-west arrow with names f, g
% and length n units 
\newcommand{\NNNWAR}[3]{\testdiagrammode%
\Y=#3%
\divide \Y by 2%
\Z=\Y%
\multiply \Z by 3%
\begin{picture}(0,0)%
\put(\Y,-\Z){\vector(-1,3){#3}}%
\truex{200}\truez{600}%
\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
\put(-\value{x},-\value{z}){\makebox(0,\value{z})[r]{${#2}$}}%
\end{picture}}%

% basic north-north-north-west arrow
\def\basicnnnwar[#1]{\NNNWAR{}{}{#100}}%

% north-north-north-west arrow
\newcommand{\nnnwar}{\@ifnextchar[{\basicnnnwar}{\basicnnnwar[71]}}%

% basic north-north-north-west arrow with upper name
\def\basicNnnwar[#1]#2{\NNNWAR{#2}{}{#100}}%

% north-north-north-west arrow with upper name
\newcommand{\Nnnwar}{\@ifnextchar[{\basicNnnwar}{\basicNnnwar[71]}}%

% basic north-north-north-west arrow with lower name
\def\basicnnnwaR[#1]#2{\NNNWAR{}{#2}{#100}}%

% north-north-north-west arrow with lower name
\newcommand{\nnnwaR}{\@ifnextchar[{\basicnnnwaR}{\basicnnnwaR[71]}}%

% NORTH-EAST-EAST-NORTH-EAST ARROWS
% default length: 21500 units

% \NEENEAR{f}{g}{n} draws a north-east-east-north-east arrow with names f, g 
% and length n units
\newcommand{\NEENEAR}[3]{\testdiagrammode%
\Y=#3%
\divide \Y by 2%
\Z=#3%
\divide \Z by 3%
\begin{picture}(0,0)%
\put(-\Y,-\Z){\vector(3,2){#3}}%
\truex{200}\truey{800}\truez{600}%
\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
\end{picture}}%

% basic north-east-east-north-east arrow
\def\basicneenear[#1]{\NEENEAR{}{}{#100}}%

% north-east-east-north-east arrow
\newcommand{\neenear}{\@ifnextchar[{\basicneenear}{\basicneenear[215]}}%

% basic north-east-east-north-east arrow with upper name
\def\basicNeenear[#1]#2{\NEENEAR{#2}{}{#100}}%

% north-east-east-north-east arrow with upper name
\newcommand{\Neenear}{\@ifnextchar[{\basicNeenear}{\basicNeenear[215]}}%

% basic north-east-east-north-east arrow with lower name
\def\basicneeneaR[#1]#2{\NEENEAR{}{#2}{#100}}%

% north-east-east-north-east arrow with lower name
\newcommand{\neeneaR}{\@ifnextchar[{\basicneeneaR}{\basicneeneaR[215]}}%

% SOUTH-EAST-EAST-SOUTH-EAST ARROWS
% DEFAULT LENGTH: 21500 UNITS

% \SEESEAR{f}{g} draws an sout-east-east-south-east arrow with names f, g 
% and length n units
\newcommand{\SEESEAR}[3]{\testdiagrammode%
\Y=#3%
\divide \Y by 2%
\Z=#3%
\divide \Z by 3%
\begin{picture}(0,0)%
\put(-\Y,\Z){\vector(3,-2){#3}}%
\truex{200}\truey{800}\truez{600}%
\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
\end{picture}}%

% basic south-east-east-south-east arrow
\def\basicseesear[#1]{\SEESEAR{}{}{#100}}%

% south-east-east-south-east arrow
\newcommand{\seesear}{\@ifnextchar[{\basicseesear}{\basicseesear[215]}}%

% basic south-east-east-south-east arrow with upper name
\def\basicSeesear[#1]#2{\SEESEAR{#2}{}{#100}}%

% south-east-east-south-east arrow with upper name
\newcommand{\Seesear}{\@ifnextchar[{\basicSeesear}{\basicSeesear[215]}}%

% basic south-east-east-south-east arrow with lower name
\def\basicseeseaR[#1]#2{\SEESEAR{}{#2}{#100}}%

% south-east-east-south-east arrow with lower name
\newcommand{\seeseaR}{\@ifnextchar[{\basicseeseaR}{\basicseeseaR[215]}}%

% NORTH-WEST-NORTH-NORTH-WEST ARROWS
% default length: 21500 units

% \NWWNWAR{f}{g}{n} draws a north-west-west-north-west arrow with names f, g
% and length n units 
\newcommand{\NWWNWAR}[3]{\testdiagrammode%
\Y=#3%
\divide \Y by 2%
\Z=#3%
\divide \Z by 3%
\begin{picture}(0,0)%
\put(\Y,-\Z){\vector(-3,2){#3}}%
\truex{200}\truey{800}\truez{600}%
\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
\end{picture}}%

% basic north-west-west-north-west arrow
\def\basicnwwnwar[#1]{\NWWNWAR{}{}{#100}}%

% north-west-west-north-west arrow
\newcommand{\nwwnwar}{\@ifnextchar[{\basicnwwnwar}{\basicnwwnwar[215]}}%

% basic north-west-west-north-west arrow with upper name
\def\basicNwwnwar[#1]#2{\NWWNWAR{#2}{}{#100}}%

% north-west-west-north-west arrow with upper name
\newcommand{\Nwwnwar}{\@ifnextchar[{\basicNwwnwar}{\basicNwwnwar[215]}}%

% basic north-west-west-north-west arrow with lower name
\def\basicnwwnwaR[#1]#2{\NWWNWAR{}{#2}{#100}}%

% north-west-west-north-west arrow with lower name
\newcommand{\nwwnwaR}{\@ifnextchar[{\basicnwwnwaR}{\basicnwwnwaR[215]}}%

% SOUTH-WEST-WEST-SOUTH-WEST ARROWS
% default length: 21500 units

% \SWWSWAR{f}{g}{n} draws a south-west-west-south-west arrow with names f, g
% and length n units 
\newcommand{\SWWSWAR}[3]{\testdiagrammode%
\Y=#3%
\divide \Y by 2%
\Z=#3%
\divide \Z by 3%
\begin{picture}(0,0)%
\put(\Y,\Z){\vector(-3,-2){#3}}%
\truex{200}\truey{800}\truez{600}%
\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
\end{picture}}%

% basic south-west-west-south-west arrow
\def\basicswwswar[#1]{\SWWSWAR{}{}{#100}}%

% south-west-west-south-west arrow
\newcommand{\swwswar}{\@ifnextchar[{\basicswwswar}{\basicswwswar[215]}}%

% basic south-west-west-south-west arrow with upper name
\def\basicSwwswar[#1]#2{\SWWSWAR{#2}{}{#100}}%

% south-west-west-south-west arrow with upper name
\newcommand{\Swwswar}{\@ifnextchar[{\basicSwwswar}{\basicSwwswar[215]}}%

% basic south-west-west-south-west arrow with lower name
\def\basicswwswaR[#1]#2{\SWWSWAR{}{#2}{#100}}%

% south-west-west-south-west arrow with lower name
\newcommand{\swwswaR}{\@ifnextchar[{\basicswwswaR}{\basicswwswaR[215]}}%


% NORTH-EAST-NORTH-NORTH-EAST ARROWS
% default length 14300 units

% \NENNEAR{f}{g}{n} draws a north-east-north-north-east arrow with names f, g 
% and length n units
\newcommand{\NENNEAR}[3]{\testdiagrammode%
\Y=#3%
\divide \Y by 2%
\Z=#3%
\multiply \Z by 3%
\divide \Z by 4%
\begin{picture}(0,0)%
\put(-\Y,-\Z){\vector(2,3){#3}}%
\truex{100}\truez{600}%
\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
\put(\value{x},-\value{z}){\makebox(0,\value{z})[l]{${#2}$}}%
\end{picture}}%

% basic north-east-north-north-east arrow
\def\basicnennear[#1]{\NENNEAR{}{}{#100}}%

% north-east-north-north-east arrow
\newcommand{\nennear}{\@ifnextchar[{\basicnennear}{\basicnennear[143]}}%

% basic north-east-north-north-east arrow with upper name
\def\basicNennear[#1]#2{\NENNEAR{#2}{}{#100}}%

% north-east-north-north-east arrow with upper name
\newcommand{\Nennear}{\@ifnextchar[{\basicNennear}{\basicNennear[143]}}%

% basic north-east-north-north-east arrow with lower name
\def\basicnenneaR[#1]#2{\NENNEAR{}{#2}{#100}}%

% north-east-north-north-east arrow with lower name
\newcommand{\nenneaR}{\@ifnextchar[{\basicnenneaR}{\basicnenneaR[143]}}%

% SOUTH-WEST-SOUTH-SOUTH-WEST ARROWS 
% default length: 14300 units

% \SWSSWAR{f}{g}{n} draws a south-west-south-south-west arrow with names f, g 
% and length n units
\newcommand{\SWSSWAR}[3]{\testdiagrammode%
\Y=#3%
\divide \Y by 2%
\Z=#3%
\multiply \Z by 3%
\divide \Z by 4%
\begin{picture}(0,0)%
\put(\Y,\Z){\vector(-2,-3){#3}}%
\truex{100}\truez{600}%
\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
\put(\value{x},-\value{z}){\makebox(0,\value{z})[l]{${#2}$}}%
\end{picture}}%

% basic south-west-south-south-west arrow
\def\basicswsswar[#1]{\SWSSWAR{}{}{#100}}%

% south-west-south-south-west arrow
\newcommand{\swsswar}{\@ifnextchar[{\basicswsswar}{\basicswsswar[143]}}%

% basic south-west-south-south-west arrow with upper name
\def\basicSwsswar[#1]#2{\SWSSWAR{#2}{}{#100}}%

% south-west-south-south-west arrow with upper name
\newcommand{\Swsswar}{\@ifnextchar[{\basicSwsswar}{\basicSwsswar[143]}}%

% basic south-west-south-south-west arrow with lower name
\def\basicswsswaR[#1]#2{\SWSSWAR{}{#2}{#100}}%

% south-west-south-south-west arrow with lower name
\newcommand{\swsswaR}{\@ifnextchar[{\basicswsswaR}{\basicswsswaR[143]}}%

% SOUT-EAST-SOUTH-SOUTH-EAST ARROWS
% default length: 14300 units

% \SESSEAR{f}{g}{n} draws a south-east-south-south-east arrow with names f, g 
% and length n units
\newcommand{\SESSEAR}[3]{\testdiagrammode%
\Y=#3%
\divide \Y by 2%
\Z=#3%
\multiply \Z by 3%
\divide \Z by 4%
\begin{picture}(0,0)%
\put(-\Y,\Z){\vector(2,-3){#3}}%
\truex{200}\truez{600}%
\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
\put(-\value{x},-\value{z}){\makebox(0,\value{z})[r]{${#2}$}}%
\end{picture}}%

% basic south-east-south-south-east arrow
\def\basicsessear[#1]{\SESSEAR{}{}{#100}}%

% south-east-south-south-east arrow
\newcommand{\sessear}{\@ifnextchar[{\basicsessear}{\basicsessear[143]}}%

% basic south-east-south-south-east arrow with upper name
\def\basicSessear[#1]#2{\SESSEAR{#2}{}{#100}}%

% south-east-south-south-east arrow with upper name
\newcommand{\Sessear}{\@ifnextchar[{\basicSessear}{\basicSessear[143]}}%

% basic south-east-south-south-east arrow with lower name
\def\basicsesseaR[#1]#2{\SESSEAR{}{#2}{#100}}%

% south-east-south-south-east arrow with lower name
\newcommand{\sesseaR}{\@ifnextchar[{\basicsesseaR}{\basicsesseaR[143]}}%

% NORTH-WEST-NORTH-NORTH-WEST ARROWS
% default length: 14300 units

% \NWNNWAR{f}{g}{n} draws a north-west-north-north-west arrow with names f, g 
% and length n units
\newcommand{\NWNNWAR}[3]{\testdiagrammode%
\Y=#3%
\divide \Y by 2%
\Z=#3%
\multiply \Z by 3%
\divide \Z by 4%
\begin{picture}(0,0)%
\put(\Y,-\Z){\vector(-2,3){#3}}%
\truex{200}\truez{600}%
\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
\put(-\value{x},-\value{z}){\makebox(0,\value{z})[r]{${#2}$}}%
\end{picture}}%

% basic north-west-north-north-west arrow
\def\basicnwnnwar[#1]{\NWNNWAR{}{}{#100}}%

% north-west-north-north-west arrow
\newcommand{\nwnnwar}{\@ifnextchar[{\basicnwnnwar}{\basicnwnnwar[143]}}%

% basic north-west-north-north-west arrow with upper name
\def\basicNwnnwar[#1]#2{\NWNNWAR{#2}{}{#100}}%

% north-west-north-north-west arrow with upper name
\newcommand{\Nwnnwar}{\@ifnextchar[{\basicNwnnwar}{\basicNwnnwar[143]}}%

% basic north-west-north-north-west arrow with lower name
\def\basicnwnnwaR[#1]#2{\NWNNWAR{}{#2}{#100}}%

% north-west-north-north-west arrow with lower name
\newcommand{\nwnnwaR}{\@ifnextchar[{\basicnwnnwaR}{\basicnwnnwaR[143]}}%

% HORIZONTAL CURVED ARROWS

% The following commands produce horizontal curved arrows
% default length: 160 units

% North\East curved arrow with name [1] and length [2]x100 units
\newcommand{\Necurve}[2]%
{\testdiagrammode\begin{picture}(0,0)%
\truex{1300}\truey{2000}\truez{200}%
\put(0,\value{x}){\oval(#200,\value{y})[t]}%
\put(0,\value{x}){\makebox(0,0){\begin{picture}(#200,0)%
\put(#200,0){\line(0,-1){\value{z}}}%
\put(#200,-\value{z}){\shead}%
\put(0,0){\line(0,-1){\value{z}}}\end{picture}}}%
\truex{2500}%
\put(0,\value{x}){\makebox(0,0)[b]{${#1}$}}%
\end{picture}}%

% basic north\east curved arrow
\def\basicnecurvar[#1]{\Necurve{}{#1}}

% north\east curved arrow
\newcommand{\necurvar}{\@ifnextchar[{\basicnecurvar}{\basicnecurvar[160]}}%

% basic north\east curved arrow with name
\def\basicNecurvar[#1]#2{\Necurve{#2}{#1}}%

% north\east curved arrow with name
\newcommand{\Necurvar}{\@ifnextchar[{\basicNecurvar}{\basicNecurvar[160]}}%
\let\necurvaR=\Necurvar

% North\West curved arrow with name [1] and length [2]x100 units
\newcommand{\Nwcurve}[2]%
{\testdiagrammode\begin{picture}(0,0)%
\truex{1300}\truey{2000}\truez{200}%
\put(0,\value{x}){\oval(#200,\value{y})[t]}%
\put(0,\value{x}){\makebox(0,0){\begin{picture}(#200,0)%
\put(#200,0){\line(0,-1){\value{z}}}%
\put(0,0){\line(0,-1){\value{z}}}%
\put(0,-\value{z}){\shead}%
\end{picture}}}%
\truex{2500}%
\put(0,\value{x}){\makebox(0,0)[b]{${#1}$}}%
\end{picture}}%

% basic north\west curved arrow
\def\basicnwcurvar[#1]{\Nwcurve{}{#1}}

% north\west curved arrow
\newcommand{\nwcurvar}{\@ifnextchar[{\basicnwcurvar}{\basicnwcurvar[160]}}%

% basic north\west curved arrow with name
\def\basicNwcurvar[#1]#2{\Nwcurve{#2}{#1}}%

% north\west curved arrow with name
\newcommand{\Nwcurvar}{\@ifnextchar[{\basicNwcurvar}{\basicNwcurvar[160]}}%
\let\nwcurvaR=\Nwcurvar

% South\East curved arrow with name [1] and length [2]x100 units
\newcommand{\Securve}[2]%
{\testdiagrammode\begin{picture}(0,0)%
\truex{1300}\truey{2000}\truez{200}%
\put(0,-\value{x}){\oval(#200,\value{y})[b]}%
\put(0,-\value{x}){\makebox(0,0){\begin{picture}(#200,0)%
\put(#200,0){\line(0,1){\value{z}}}%
\put(0,0){\line(0,1){\value{z}}}%
\put(#200,\value{z}){\nhead}%
\end{picture}}}%
\truex{2500}%
\put(0,-\value{x}){\makebox(0,0)[t]{${#1}$}}%
\end{picture}}%

% basic south\east curved arrow
\def\basicsecurvar[#1]{\Securve{}{#1}}

% south\east curved arrow
\newcommand{\securvar}{\@ifnextchar[{\basicsecurvar}{\basicsecurvar[160]}}%

% basic south\east curved arrow with name
\def\basicSecurvar[#1]#2{\Securve{#2}{#1}}%

% south\east curved arrow with name
\newcommand{\Securvar}{\@ifnextchar[{\basicSecurvar}{\basicSecurvar[160]}}%
\let\securvaR=\Securvar

% South\West curved arrow with name [1] and length [2]x100 units
\newcommand{\Swcurve}[2]%
{\testdiagrammode\begin{picture}(0,0)%
\truex{1300}\truey{2000}\truez{200}%
\put(0,-\value{x}){\oval(#200,\value{y})[b]}%
\put(0,-\value{x}){\makebox(0,0){\begin{picture}(#200,0)%
\put(#200,0){\line(0,1){\value{z}}}%
\put(0,0){\line(0,1){\value{z}}}%
\put(0,\value{z}){\nhead}%
\end{picture}}}%
\truex{2500}%
\put(0,-\value{x}){\makebox(0,0)[t]{${#1}$}}%
\end{picture}}%

% basic south\west curved arrow
\def\basicswcurvar[#1]{\Swcurve{}{#1}}

% south\west curved arrow
\newcommand{\swcurvar}{\@ifnextchar[{\basicswcurvar}{\basicswcurvar[160]}}%

% basic south\west curved arrow with name
\def\basicSwcurvar[#1]#2{\Swcurve{#2}{#1}}%

% south\west curved arrow with name
\newcommand{\Swcurvar}{\@ifnextchar[{\basicSwcurvar}{\basicSwcurvar[160]}}%
\let\swcurvaR=\Swcurvar

% VERTICAL CURVED ARROWS

% The following commands produce vertical curved arrows
% default length: 160pt

% East\South curved arrow with name [1] and length [2]x100 units
\newcommand{\Escurve}[2]%
{\testdiagrammode\begin{picture}(0,0)%
\truex{1400}\truey{2000}\truez{200}%
\put(\value{x},0){\oval(\value{y},#200)[r]}%
\put(\value{x},0){\makebox(0,0){\begin{picture}(0,#200)%
\put(0,0){\line(-1,0){\value{z}}}%
\put(0,#200){\line(-1,0){\value{z}}}%
\put(-\value{z},0){\whead}%
\end{picture}}}%
\truex{2500}%
\put(\value{x},0){\makebox(0,0)[l]{${#1}$}}%
\end{picture}}%

% basic east\south curved arrow
\def\basicescurvar[#1]{\Escurve{}{#1}}

% east\south curved arrow
\newcommand{\escurvar}{\@ifnextchar[{\basicescurvar}{\basicescurvar[160]}}%

% basic east\south curved arrow with name
\def\basicEscurvar[#1]#2{\Escurve{#2}{#1}}%

% east\south curved arrow with name
\newcommand{\Escurvar}{\@ifnextchar[{\basicEscurvar}{\basicEscurvar[160]}}%
\let\escurvaR=\Escurvar

% East\North curved arrow with name [1] and length [2]x100 units
\newcommand{\Encurve}[2]%
{\testdiagrammode\begin{picture}(0,0)%
\truex{1400}\truey{2000}\truez{200}%
\put(\value{x},0){\oval(\value{y},#200)[r]}%
\put(\value{x},0){\makebox(0,0){\begin{picture}(0,#200)%
\put(0,0){\line(-1,0){\value{z}}}%
\put(0,#200){\line(-1,0){\value{z}}}%
\put(-\value{z},#200){\whead}%
\end{picture}}}%
\truex{2500}%
\put(\value{x},0){\makebox(0,0)[l]{${#1}$}}%
\end{picture}}%

% basic east\north curved arrow
\def\basicencurvar[#1]{\Encurve{}{#1}}

% east\north curved arrow
\newcommand{\encurvar}{\@ifnextchar[{\basicencurvar}{\basicencurvar[160]}}%

% basic east\north curved arrow with name
\def\basicEncurvar[#1]#2{\Encurve{#2}{#1}}%

% east\north curved arrow with name
\newcommand{\Encurvar}{\@ifnextchar[{\basicEncurvar}{\basicEncurvar[160]}}%
\let\encurvaR=\Encurvar

% West\South curved arrow with name [1] and length [2]x100 units
\newcommand{\Wscurve}[2]%
{\testdiagrammode\begin{picture}(0,0)%
\truex{1300}\truey{2000}\truez{200}%
\put(-\value{x},0){\oval(\value{y},#200)[l]}%
\put(-\value{x},0){\makebox(0,0){\begin{picture}(0,#200)%
\put(0,0){\line(1,0){\value{z}}}%
\put(0,#200){\line(1,0){\value{z}}}%
\put(\value{z},0){\ehead}%
\end{picture}}}%
\truex{2400}%
\put(-\value{x},0){\makebox(0,0)[r]{${#1}$}}%
\end{picture}}%

% basic west\south curved arrow
\def\basicwscurvar[#1]{\Wscurve{}{#1}}

% west\south curved arrow
\newcommand{\wscurvar}{\@ifnextchar[{\basicwscurvar}{\basicwscurvar[160]}}%

% basic west\south curved arrow with name
\def\basicWscurvar[#1]#2{\Wscurve{#2}{#1}}%

% west\south curved arrow with name
\newcommand{\Wscurvar}{\@ifnextchar[{\basicWscurvar}{\basicWscurvar[160]}}%
\let\wscurvaR=\Wscurvar

% West\North curved arrow with name [1] and length [2]x100 units
\newcommand{\Wncurve}[2]%
{\testdiagrammode\begin{picture}(0,0)%
\truex{1300}\truey{2000}\truez{200}%
\put(-\value{x},0){\oval(\value{y},#200)[l]}%
\put(-\value{x},0){\makebox(0,0){\begin{picture}(0,#200)%
\put(0,0){\line(1,0){\value{z}}}%
\put(\value{z},#200){\ehead}%
\put(0,#200){\line(1,0){\value{z}}}%
\end{picture}}}%
\truex{2400}%
\put(-\value{x},0){\makebox(0,0)[r]{${#1}$}}%
\end{picture}}%

% basic west\north curved arrow
\def\basicwncurvar[#1]{\Wncurve{}{#1}}

% west\north curved arrow
\newcommand{\wncurvar}{\@ifnextchar[{\basicwncurvar}{\basicwncurvar[160]}}%

% basic west\north curved arrow with name
\def\basicWncurvar[#1]#2{\Wncurve{#2}{#1}}%

% west\north curved arrow with name
\newcommand{\Wncurvar}{\@ifnextchar[{\basicWncurvar}{\basicWncurvar[160]}}%
\let\wncurvaR=\Wncurvar

\catcode`\@=12