summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/generic/borceux
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2006-01-12 23:46:03 +0000
committerKarl Berry <karl@freefriends.org>2006-01-12 23:46:03 +0000
commit873660d1a83ece926fe7206288dda9c36b349c1b (patch)
treea48f77125c309a355b5d0eb58d6b24446abe9d62 /Master/texmf-dist/tex/generic/borceux
parent2939242967231097459df0fc3150fabc2f639111 (diff)
generic 1
git-svn-id: svn://tug.org/texlive/trunk@613 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/generic/borceux')
-rw-r--r--Master/texmf-dist/tex/generic/borceux/Diagram8973
-rw-r--r--Master/texmf-dist/tex/generic/borceux/MaxiDiagram10213
-rw-r--r--Master/texmf-dist/tex/generic/borceux/MicroDiagram1917
-rw-r--r--Master/texmf-dist/tex/generic/borceux/MiniDiagram3164
-rw-r--r--Master/texmf-dist/tex/generic/borceux/MultipleArrows1313
5 files changed, 25580 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/generic/borceux/Diagram b/Master/texmf-dist/tex/generic/borceux/Diagram
new file mode 100644
index 00000000000..0aeae85b101
--- /dev/null
+++ b/Master/texmf-dist/tex/generic/borceux/Diagram
@@ -0,0 +1,8973 @@
+% DIAGRAM MACROS (version 3.1)
+
+\catcode`\@=11
+
+%%%%% FIXING SOME PARAMETERS
+
+%%% Fixing the printerresolution
+%%% unit = 1 dpi
+\newcount\printerresolution
+\global\printerresolution=300
+
+%%% Fixing the length of a segment in an arrowhead
+%%% unit = 0.01pt
+\newcount\headsize
+\global\headsize=450
+
+%%% Fixing the thickness of an arrowhead
+%%% value = 1/5 of the font size
+\font\dotfont = lcircle10 at 3pt
+
+%%% Fixing the distance between the two heads of an epimorphism
+%%% unit = 0.01pt
+\newcount\epihead
+\global\epihead=200
+
+%%% 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
+
+%%%%% DESIGING THE ARROW HEADS
+
+%%% Customizing the unitlength for the sake of precision
+\setlength{\unitlength}{0.01pt}
+
+%%% Printing one dot at the required scale
+\def\DOT{{\dotfont q}}
+
+%%% Computing the distance between two dots in an arrowhead
+\newcount\basicstep
+\basicstep=7227
+\global\divide\basicstep by \printerresolution
+
+%%% Computing the number of dots in an arrowhead
+\newcount\numberofsteps
+\numberofsteps=\headsize
+\global\divide\numberofsteps by \basicstep
+
+%%% Producing an arrow head
+\newcommand{\makehead}[3]{%
+\begin{picture}(0,0)%
+\multiput(0,0)(#1,#2){#3}{\DOT}%
+\multiput(0,0)(-#2,#1){#3}{\DOT}%
+\end{picture}}
+
+%%% Creating bitmap images of the arrowheads
+\newcount\xstep
+\newcount\ystep
+
+\newsavebox{\northhead}
+\savebox{\northhead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 7071%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\nhead}{\usebox{\northhead}}
+
+\newsavebox{\easthead}
+\savebox{\easthead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 7071%
+\divide\xstep by 10000%
+\ystep=-\xstep%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\ehead}{\usebox{\easthead}}
+
+\newsavebox{\southhead}
+\savebox{\southhead}{%
+\xstep=\basicstep%
+\multiply\xstep by 7071%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\shead}{\usebox{\southhead}}
+
+\newsavebox{\westhead}
+\savebox{\westhead}{%
+\xstep=\basicstep%
+\multiply\xstep by 7071%
+\divide\xstep by 10000%
+\ystep=-\xstep%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\whead}{\usebox{\westhead}}
+
+\newsavebox{\northwesthead}
+\savebox{\northwesthead}{%
+\makehead{0}{-\basicstep}{\numberofsteps}}
+\newcommand{\nwhead}{\usebox{\northwesthead}}
+
+\newsavebox{\northeasthead}
+\savebox{\northeasthead}{%
+\makehead{-\basicstep}{0}{\numberofsteps}}
+\newcommand{\nehead}{\usebox{\northeasthead}}
+
+\newsavebox{\southwesthead}
+\savebox{\southwesthead}{%
+\makehead{\basicstep}{0}{\numberofsteps}}
+\newcommand{\swhead}{\usebox{\southwesthead}}
+
+\newsavebox{\southeasthead}
+\savebox{\southeasthead}{%
+\makehead{0}{\basicstep}{\numberofsteps}}
+\newcommand{\sehead}{\usebox{\southeasthead}}
+
+\newsavebox{\eastnortheasthead}
+\savebox{\eastnortheasthead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 9486%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\divide\ystep by -3%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\enehead}{\usebox{\eastnortheasthead}}
+
+\newsavebox{\northnortheasthead}
+\savebox{\northnortheasthead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 9486%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\divide\ystep by 3%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\nnehead}{\usebox{\northnortheasthead}}
+
+\newsavebox{\southsouthwesthead}
+\savebox{\southsouthwesthead}{%
+\xstep=\basicstep%
+\multiply\xstep by 9486%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\divide\ystep by 3%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\sswhead}{\usebox{\southsouthwesthead}}
+
+\newsavebox{\westsouthwesthead}
+\savebox{\westsouthwesthead}{%
+\xstep=\basicstep%
+\multiply\xstep by 9486%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\divide\ystep by -3%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\wswhead}{\usebox{\westsouthwesthead}}
+
+\newsavebox{\westnorthwesthead}
+\savebox{\westnorthwesthead}{%
+\xstep=\basicstep%
+\multiply\xstep by 3162%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\multiply\ystep by -3%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\wnwhead}{\usebox{\westnorthwesthead}}
+
+\newsavebox{\eastsoutheasthead}
+\savebox{\eastsoutheasthead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 3162%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\multiply\ystep by -3%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\esehead}{\usebox{\eastsoutheasthead}}
+
+\newsavebox{\northnorthwesthead}
+\savebox{\northnorthwesthead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 3162%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\multiply\ystep by 3%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\nnwhead}{\usebox{\northnorthwesthead}}
+
+\newsavebox{\southsoutheasthead}
+\savebox{\southsoutheasthead}{%
+\xstep=\basicstep%
+\multiply\xstep by 3162%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\multiply\ystep by 3%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\ssehead}{\usebox{\southsoutheasthead}}
+
+\newsavebox{\easteastnortheasthead}
+\savebox{\easteastnortheasthead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 8944%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\divide\ystep by -2%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\eenehead}{\usebox{\easteastnortheasthead}}
+
+\newsavebox{\northnorthnortheasthead}
+\savebox{\northnorthnortheasthead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 8944%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\divide\ystep by 2%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\nnnehead}{\usebox{\northnorthnortheasthead}}
+
+\newsavebox{\southsouthsouthwesthead}
+\savebox{\southsouthsouthwesthead}{%
+\xstep=\basicstep%
+\multiply\xstep by 8944%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\divide\ystep by 2%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\ssswhead}{\usebox{\southsouthsouthwesthead}}
+
+\newsavebox{\westwestsouthwesthead}
+\savebox{\westwestsouthwesthead}{%
+\xstep=\basicstep%
+\multiply\xstep by 8944%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\divide\ystep by -2%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\wwswhead}{\usebox{\westwestsouthwesthead}}
+
+\newsavebox{\westwestnorthwesthead}
+\savebox{\westwestnorthwesthead}{%
+\xstep=\basicstep%
+\multiply\xstep by 4472%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\multiply\ystep by -2%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\wwnwhead}{\usebox{\westwestnorthwesthead}}
+
+\newsavebox{\easteastsoutheasthead}
+\savebox{\easteastsoutheasthead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 4472%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\multiply\ystep by -2%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\eesehead}{\usebox{\easteastsoutheasthead}}
+
+\newsavebox{\northnorthnorthwesthead}
+\savebox{\northnorthnorthwesthead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 4472%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\multiply\ystep by 2%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\nnnwhead}{\usebox{\northnorthnorthwesthead}}
+
+\newsavebox{\southsouthsoutheasthead}
+\savebox{\southsouthsoutheasthead}{%
+\xstep=\basicstep%
+\multiply\xstep by 4472%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\multiply\ystep by 2%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\sssehead}{\usebox{\southsouthsoutheasthead}}
+
+\newsavebox{\northeasteastnortheasthead}
+\savebox{\northeasteastnortheasthead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 9806%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\divide\ystep by -5%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\neenehead}{\usebox{\northeasteastnortheasthead}}
+
+\newsavebox{\northeastnorthnortheasthead}
+\savebox{\northeastnorthnortheasthead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 9806%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\divide\ystep by 5%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\nennehead}{\usebox{\northeastnorthnortheasthead}}
+
+\newsavebox{\southwestsouthsouthwesthead}
+\savebox{\southwestsouthsouthwesthead}{%
+\xstep=\basicstep%
+\multiply\xstep by 9806%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\divide\ystep by 5%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\swsswhead}{\usebox{\southwestsouthsouthwesthead}}
+
+\newsavebox{\southwestwestsouthwesthead}
+\savebox{\southwestwestsouthwesthead}{%
+\xstep=\basicstep%
+\multiply\xstep by 9806%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\divide\ystep by -5%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\swwswhead}{\usebox{\southwestwestsouthwesthead}}
+
+\newsavebox{\northwestwestnorthwesthead}
+\savebox{\northwestwestnorthwesthead}{%
+\xstep=\basicstep%
+\multiply\xstep by 1961%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\multiply\ystep by -5%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\nwwnwhead}{\usebox{\northwestwestnorthwesthead}}
+
+\newsavebox{\southeasteastsoutheasthead}
+\savebox{\southeasteastsoutheasthead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 1961%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\multiply\ystep by -5%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\seesehead}{\usebox{\southeasteastsoutheasthead}}
+
+\newsavebox{\northwestnorthnorthwesthead}
+\savebox{\northwestnorthnorthwesthead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 1961%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\multiply\ystep by 5%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\nwnnwhead}{\usebox{\northwestnorthnorthwesthead}}
+
+\newsavebox{\southeastsouthsoutheasthead}
+\savebox{\southeastsouthsoutheasthead}{%
+\xstep=\basicstep%
+\multiply\xstep by 1961%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\multiply\ystep by 5%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\sessehead}{\usebox{\southeastsouthsoutheasthead}}
+
+%%% Restoring the standard unitlength
+\setlength{\unitlength}{1pt}
+
+
+% MACROS FOR MARKED ARROWS
+
+\newsavebox{\isomorphismmark}
+\newcommand{\isomark}[1]{\savebox{\isomorphismmark}{#1}}
+\isomark{$\cong$}
+\newcommand{\isosign}{\usebox{\isomorphismmark}}
+
+\newif\ifuserdist
+\newsavebox{\distributormark}
+\newcommand{\distmark}[1]{\ifx#1\distcircle\userdistfalse\else%
+\userdisttrue\savebox{\distributormark}{#1}\fi}
+\newsavebox{\distributorcircle}
+\savebox{\distributorcircle}{\begin{picture}(0,0)%
+\put(0,0){\circle{4}}\end{picture}}
+\newcommand{\distsign}{\ifuserdist\usebox{\distributormark}\else%
+\usebox{\distributorcircle}\fi}
+\userdistfalse
+
+
+
+% MACROS FOR ADJUSTING THE LENGTH OF MONOMORPHISMS AND EPIMORPHISMS
+
+\newcount\monolength
+\newcount\epilength
+\newcount\bimolength
+\newcount\secondmonolength
+\newcount\secondepilength
+
+\newcount\monotail%
+\global\monotail=\headsize%
+\global\multiply\monotail by 7070%
+\global\divide\monotail by 10000%
+
+\newcount\truemonotail%
+\newcount\trueepihead%
+
+\def\truetail{\truemonotail=\monotail%
+\multiply\truemonotail by 100%
+\divide\truemonotail by \SCALE}
+
+\def\truehead{\trueepihead=\epihead%
+\multiply\trueepihead by 100%
+\divide\trueepihead by \SCALE}
+
+\newcount\Monotail%
+\global\Monotail=\headsize%
+\global\divide\Monotail by 2%
+
+\newcount\Epihead%
+\global\Epihead=\epihead%
+\global\multiply\Epihead by 7070%
+\global\divide\Epihead by 10000%
+
+\newcount\Truemonotail%
+\newcount\Trueepihead%
+
+\def\Truetail{\Truemonotail=\Monotail%
+\multiply\Truemonotail by 100%
+\divide\Truemonotail by \SCALE}%
+
+\def\Truehead{\Trueepihead=\Epihead%
+\multiply\Trueepihead by 100%
+\divide\Trueepihead by \SCALE}
+
+\newcount\MonoTail%
+\global\MonoTail=\headsize%
+\global\multiply\MonoTail by 6324%
+\global\divide\MonoTail by 10000%
+
+\newcount\EpiHead%
+\global\EpiHead=\epihead%
+\global\multiply\EpiHead by 8944%
+\global\divide\EpiHead by 10000%
+
+\newcount\TrueMonoTail%
+\newcount\TrueEpiHead%
+
+\def\TrueTail{\TrueMonoTail=\MonoTail%
+\multiply\TrueMonoTail by 100%
+\divide\TrueMonoTail by \SCALE}%
+
+\def\TrueHead{\TrueEpiHead=\EpiHead%
+\multiply\TrueEpiHead by 100%
+\divide\TrueEpiHead by \SCALE}
+
+\newcount\monotaiL%
+\global\monotaiL=\headsize%
+\global\multiply\monotaiL by 3162%
+\global\divide\monotaiL by 10000%
+
+\newcount\epiheaD%
+\global\epiheaD=\epihead%
+\global\multiply\epiheaD by 4472%
+\global\divide\epiheaD by 10000%
+
+\newcount\truemonotaiL%
+\newcount\trueepiheaD%
+
+\def\truetaiL{\truemonotaiL=\monotaiL%
+\multiply\truemonotaiL by 100%
+\divide\truemonotaiL by \SCALE}%
+
+\def\trueheaD{\trueepiheaD=\epiheaD%
+\multiply\trueepiheaD by 100%
+\divide\trueepiheaD by \SCALE}
+
+
+% 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
+
+% moving a name up
+\newcommand{\TUP}[1]{\raisebox{0pt}[0pt][3pt]{}#1}
+
+% moving a name down
+\newcommand{\TDOWN}[1]{\raisebox{0pt}[6pt][0pt]{}#1}
+
+% \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
+
+% moving a name up
+\newcommand{\DUP}[1]{\raisebox{0pt}[0pt][4pt]{}#1}
+
+% moving a name down
+\newcommand{\DDOWN}[1]{\raisebox{0pt}[9pt][0pt]{}#1}
+
+% \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){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\end{picture}}%
+
+% \DIST{n} draws a distributor of length n units
+\newcommand{\DIST}[1]%
+{\begin{picture}(#1,0)%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\NUMBER=#1%
+\divide\NUMBER by 2%
+\put(\NUMBER,0){\circle{400}}%
+\end{picture}}%
+
+% \DOTAR{n} draws a dotted arrow of length n units
+\newcommand{\DOTAR}[1]%
+{\NUMBEROFDOTS=#1%
+\divide\NUMBEROFDOTS by 300%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(#1,0)%
+\multiput(0,0)(300,0){\NUMBEROFDOTS}{\circle*{100}}%
+\put(#1,0){\ehead}%
+\end{picture}}%
+
+% \MONO{n} draws a monomorphism of length n units
+\newcommand{\MONO}[1]%
+{\monolength=#1%
+\advance\monolength by -\monotail%
+\begin{picture}(#1,0)%
+\put(\monotail,0){\line(1,0){\monolength}}%
+\put(#1,0){\ehead}%
+\put(\monotail,0){\ehead}%
+\end{picture}}%
+
+% \EPI{n} draws an epimorphism of length n units
+\newcommand{\EPI}[1]%
+{\epilength=#1%
+\advance\epilength by -\epihead%
+\begin{picture}(#1,0)(-#1,0)%
+\put(-#1,0){\line(1,0){\epilength}}%
+\put(-\epihead,0){\ehead}%
+\put(0,0){\ehead}%
+\end{picture}}%
+
+% \BIMO{n} draws a bimorphism of length n units
+\newcommand{\BIMO}[1]%
+{\monolength=#1%
+\advance\monolength by -\monotail%
+\epilength=\monolength%
+\advance\epilength by -\epihead%
+\begin{picture}(#1,0)(-#1,0)%
+\put(-\monolength,0){\line(1,0){\epilength}}%
+\put(-\monolength,0){\ehead}%
+\put(-\epihead,0){\ehead}%
+\put(0,0){\ehead}%
+\end{picture}}%
+
+% \BIAR{n} draws a pair of arrows of length n units
+\newcommand{\BIAR}[1]%
+{\begin{picture}(#1,700)%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(0,700){\line(1,0){#1}}%
+\put(#1,700){\ehead}%
+\end{picture}}%
+
+% \BIDIST{n} draws a pair of distributors of length n units
+\newcommand{\BIDIST}[1]%
+{\begin{picture}(#1,700)%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(0,700){\line(1,0){#1}}%
+\put(#1,700){\ehead}%
+\NUMBER=#1%
+\divide\NUMBER by 2%
+\put(\NUMBER,0){\circle{400}}%
+\put(\NUMBER,700){\circle{400}}%
+\end{picture}}%
+
+% \EQL{n} draws an equality of length n units
+\newcommand{\EQL}[1]%
+{\begin{picture}(#1,0)%
+\put(0,100){\line(1,0){#1}}%
+\put(0,-100){\line(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){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(#1,700){\line(-1,0){#1}}%
+\put(0,700){\whead}
+\end{picture}}%
+
+% \ADJDIST{n} draws a pair of adjoint distibutors of length n units
+\newcommand{\ADJDIST}[1]%
+{\begin{picture}(#1,700)%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(#1,700){\line(-1,0){#1}}%
+\put(0,700){\whead}
+\NUMBER=#1%
+\divide\NUMBER by 2%
+\put(\NUMBER,0){\circle{400}}%
+\put(\NUMBER,700){\circle{400}}%
+\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}%
+
+% distributor
+\newcommand{\dist}{\ifinner\tcase{\DIST}\else\dcase{\DIST}\fi}%
+
+% distributor with upper name [1]
+\newcommand{\Dist}[1]{\ifinner\Tcase{\DIST}{\TUP{#1}}%
+\else\Dcase{\DIST}{\TUP{#1}}\fi}%
+
+% dotted arrow
+\newcommand{\dotar}{\ifinner\tcase{\DOTAR}\else\dcase{\DOTAR}\fi}%
+
+% dotted arrow with upper name [1]
+\newcommand{\Dotar}[1]{\ifinner\Tcase{\DOTAR}{#1}%
+\else\Dcase{\DOTAR}{#1}\fi}%
+
+% monomorphism
+\newcommand{\mono}{\ifinner\tcase{\MONO}\else\dcase{\MONO}\fi}%
+
+% monomorphism with upper name [1]
+\newcommand{\Mono}[1]{\ifinner\Tcase{\MONO}{#1}\else\Dcase{\MONO}{#1}\fi}%
+
+% epimorphism
+\newcommand{\epi}{\ifinner\tcase{\EPI}\else\dcase{\EPI}\fi}%
+
+% epimorphism with upper name [1]
+\newcommand{\Epi}[1]{\ifinner\Tcase{\EPI}{#1}\else\Dcase{\EPI}{#1}\fi}%
+
+% bimorphism
+\newcommand{\bimo}{\ifinner\tcase{\BIMO}\else\dcase{\BIMO}\fi}%
+
+% bimorphism with upper name [1]
+\newcommand{\Bimo}[1]{\ifinner\Tcase{\BIMO}{#1}%
+\else\Dcase{\BIMO}{#1}\fi}%
+
+% isomorphism
+\newcommand{\iso}{\ifinner\Tcase{\AR}{\cong}\else\Dcase{\AR}{\cong}\fi}%
+
+% isomorphism with upper name [1]
+\newcommand{\Iso}[1]{\ifinner\Tcase{\AR}{\cong{#1}}%
+\else\Dcase{\AR}{\cong{#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 distributors
+\newcommand{\bidist}{\ifinner\tbicase{\BIDIST}\else\dbicase{\BIDIST}\fi}%
+
+% pair of distributors with names [1],[2]
+\newcommand{\Bidist}[2]{\ifinner\Tbicase{\BIDIST}{\TUP{#1}}{\TDOWN{#2}}%
+\else\Dbicase{\BIDIST}{\DUP{#1}}{\DDOWN{#2}}\fi}%
+
+% equality
+\newcommand{\eql}{\ifinner\tcase{\EQL}\else\dcase{\EQL}\fi}%
+
+% equality with name [1]
+\newcommand{\Eql}[1]{\ifinner\Tcase{\EQL}{\TUP{#1}}%
+\else\Dcase{\EQL}{\DUP{#1}}\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}%
+
+% pair of adjoint distributors
+\newcommand{\adjdist}{\ifinner\tbicase{\ADJDIST}\else\dbicase{\ADJDIST}\fi}%
+
+% pair of adjoint distributors with names [1],[2]
+\newcommand{\Adjdist}[2]{\ifinner\Tbicase{\ADJDIST}{\TUP{#1}}{\TDOWN{#2}}%
+\else\Dbicase{\ADJDIST}{\DUP{#1}}{\DDOWN{#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){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\end{picture}}%
+
+% \BKDIST{n} draws a pointing back distributor of length n units
+\newcommand{\BKDIST}[1]%
+{\begin{picture}(#1,0)%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\NUMBER=#1%
+\divide\NUMBER by 2%
+\put(\NUMBER,0){\circle{400}}%
+\end{picture}}%
+
+% \BKDOTAR{n} draws a backward dotted arrow
+% of length n units
+\newcommand{\BKDOTAR}[1]%
+{\NUMBEROFDOTS=#1%
+\divide\NUMBEROFDOTS by 300%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(#1,0)%
+\multiput(#1,0)(-300,0){\NUMBEROFDOTS}{\circle*{100}}%
+\put(0,0){\whead}%
+\end{picture}}%
+
+% \BKMONO{n} draws a pointing back monomorphism of length n units
+\newcommand{\BKMONO}[1]%
+{\monolength=#1%
+\advance\monolength by -\monotail%
+\begin{picture}(#1,0)(-#1,0)%
+\put(-\monotail,0){\line(-1,0){\monolength}}%
+\put(-\monotail,0){\whead}%
+\put(-#1,0){\whead}%
+\end{picture}}%
+
+% \BKEPI{n} draws a pointing back epimorphism of length n units
+\newcommand{\BKEPI}[1]%
+{\epilength=#1%
+\advance\epilength by -\epihead%
+\begin{picture}(#1,0)%
+\put(#1,0){\line(-1,0){\epilength}}%
+\put(\epihead,0){\whead}%
+\put(0,0){\whead}%
+\end{picture}}%
+
+% \BKBIMO{n} draws a pointing back bimorphism of length n units
+\newcommand{\BKBIMO}[1]%
+{\monolength=#1%
+\advance\monolength by -\monotail%
+\epilength=\monolength%
+\advance\epilength by -\epihead%
+\begin{picture}(#1,0)%
+\put(\monolength,0){\line(-1,0){\epilength}}%
+\put(\monolength,0){\whead}%
+\put(\epihead,0){\whead}%
+\put(0,0){\whead}%
+\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){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\put(#1,700){\line(-1,0){#1}}%
+\put(0,700){\whead}%
+\end{picture}}%
+
+% \BKBIDIST{n} draws a pair of pointing back distributors of length n units
+\newcommand{\BKBIDIST}[1]%
+{\begin{picture}(#1,700)%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\put(#1,700){\line(-1,0){#1}}%
+\put(0,700){\whead}%
+\NUMBER=#1%
+\divide\NUMBER by 2%
+\put(\NUMBER,0){\circle{400}}%
+\put(\NUMBER,700){\circle{400}}%
+\end{picture}}%
+
+% \BKADJAR{n} draws a pair of adjoint arrows of length n units
+\newcommand{\BKADJAR}[1]%
+{\begin{picture}(#1,700)%
+\put(0,700){\line(1,0){#1}}%
+\put(#1,700){\ehead}%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\end{picture}}%
+
+% \BKADJDIST{n} draws a pair of adjoint distributors of length n units
+\newcommand{\BKADJDIST}[1]%
+{\begin{picture}(#1,700)%
+\put(0,700){\line(1,0){#1}}%
+\put(#1,700){\ehead}%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\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}%
+
+% back distributor
+\newcommand{\bkdist}{\ifinner\tcase{\BKDIST}\else\dcase{\BKDIST}\fi}%
+
+% back distributor with upper name [1]
+\newcommand{\Bkdist}[1]{\ifinner\Tcase{\BKDIST}{\TUP{#1}}%
+\else\Dcase{\BKDIST}{\TUP{#1}}\fi}%
+
+% backward dotted arrow
+\newcommand{\bkdotar}{\ifinner\tcase{\BKDOTAR}\else\dcase{\BKDOTAR}\fi}%
+
+% backward dotted arrow with upper name [1]
+\newcommand{\Bkdotar}[1]{\ifinner\Tcase{\BKDOTAR}{#1}%
+\else\Dcase{\BKDOTAR}{#1}\fi}%
+
+% back monomorphism
+\newcommand{\bkmono}{\ifinner\tcase{\BKMONO}\else\dcase{\BKMONO}\fi}%
+
+% back monomorphism with upper name [1]
+\newcommand{\Bkmono}[1]{\ifinner\Tcase{\BKMONO}{#1}%
+\else\Dcase{\BKMONO}{#1}\fi}%
+
+% back epimorphism
+\newcommand{\bkepi}{\ifinner\tcase{\BKEPI}\else\dcase{\BKEPI}\fi}%
+
+% back epimorphism with upper name [1]
+\newcommand{\Bkepi}[1]{\ifinner\Tcase{\BKEPI}{#1}%
+\else\Dcase{\BKEPI}{#1}\fi}%
+
+% back bimorphism
+\newcommand{\bkbimo}{\ifinner\tcase{\BKBIMO}\else\dcase{\BKBIMO}\fi}%
+
+% back bimorphism with upper name [1]
+\newcommand{\Bkbimo}[1]{\ifinner\Tcase{\BKBIMO}{\hspace{9pt}#1}%
+\else\Dcase{\BKBIMO}{\hspace{9pt}#1}\fi}%
+
+% back isomorphism
+\newcommand{\bkiso}{\ifinner\Tcase{\BKAR}{\cong}%
+\else\Dcase{\BKAR}{\cong}\fi}%
+
+% back isomorphism with upper name [1]
+\newcommand{\Bkiso}[1]{\ifinner\Tcase{\BKAR}{\cong{#1}}%
+\else\Dcase{\BKAR}{\cong{#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}%
+
+% pair of back distributors
+\newcommand{\bkbidist}{\ifinner\tbicase{\BKBIDIST}%
+\else\dbicase{\BKBIDIST}\fi}%
+
+% pair of back distributors with names [1],[2]
+\newcommand{\Bkbidist}[2]{\ifinner\Tbicase{\BKBIDIST}{\TUP{#1}}{\TDOWN{#2}}%
+\else\Tbicase{\BKBIDIST}{\DUP{#1}}{\DDOWN{#2}}\fi}%
+
+% back equality
+\let\bkeql=\eql%
+
+% back equality with name [1]
+\let\Bkeql=\Eql%
+
+% 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}%
+
+% back pair of adjoint distributors
+\newcommand{\bkadjdist}{\ifinner\tbicase{\BKADJDIST}%
+\else\dbicase{\BKADJDIST}\fi}%
+
+% back pair of adjoint distributors with names [1],[2]
+\newcommand{\Bkadjdist}[2]{\ifinner\Tbicase{\BKADJDIST}{\TUP{#1}}{\TDOWN{#2}}%
+\else\Dbicase{\BKADJDIST}{\TUP{#1}}{\TDOWN{#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}}}}%
+
+% \Hisocase{P}{f}{g}{n} draws an arrow P with names f, g
+% and length n units.
+\newcommand{\Hisocase}[4]%
+{\testdiagrammode\makebox[0pt]
+{\raisebox{-8pt}[0pt][0pt]%
+{$\stackrel{\makebox[0pt]{$\textstyle{#2}$}}%
+{\mbox{\lowername{#1{#4}}{#3}}}$}}}%
+
+% \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){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\end{picture}}%
+
+% \EDIST{n} draws an east distributor of length n units
+\newcommand{\EDIST}[1]%
+{\begin{picture}(#1,0)%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\truex{400}
+\NUMBER=#1%
+\divide\NUMBER by 2%
+\put(\NUMBER,0){\circle{\value{x}}}
+\end{picture}}%
+
+% \EDOTAR draws a dotted arrow of length n units
+\newcommand{\EDOTAR}[1]%
+{\truex{100}\truey{300}%
+\NUMBEROFDOTS=#1%
+\divide\NUMBEROFDOTS by \value{y}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(#1,0)%
+\multiput(0,0)(\value{y},0){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(#1,0){\ehead}%
+\end{picture}}%
+
+
+% \EMONO{n} draws an east monomorphism of length n units
+\newcommand{\EMONO}[1]%
+{\truetail
+\monolength=#1%
+\advance\monolength by -\truemonotail%
+\begin{picture}(#1,0)%
+\put(\truemonotail,0){\line(1,0){\monolength}}%
+\put(#1,0){\ehead}%
+\put(\truemonotail,0){\ehead}%
+\end{picture}}%
+
+
+% \EEPI{n} draws an east epimorphism of length n units
+\newcommand{\EEPI}[1]%
+{\truehead%
+\epilength=#1%
+\advance\epilength by -\trueepihead%
+\begin{picture}(#1,0)(-#1,0)%
+\put(-#1,0){\line(1,0){\epilength}}%
+\put(-\trueepihead,0){\ehead}%
+\put(0,0){\ehead}%
+\end{picture}}%
+
+
+% \EBIMO{n} draws an east bimorphism of length n units
+\newcommand{\EBIMO}[1]%
+{\truehead\truetail%
+\monolength=#1%
+\advance\monolength by -\truemonotail%
+\epilength=\monolength%
+\advance\epilength by -\trueepihead%
+\begin{picture}(#1,0)(-#1,0)%
+\put(-\monolength,0){\line(1,0){\epilength}}%
+\put(-\monolength,0){\ehead}%
+\put(-\trueepihead,0){\ehead}%
+\put(0,0){\ehead}%
+\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){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(0,\value{x}){\line(1,0){#1}}%
+\put(#1,\value{x}){\ehead}%
+\end{picture}}%
+
+% \EBIDIST{n} draws an east pair of distributors of length n units
+\newcommand{\EBIDIST}[1]%
+{\truex{700}%
+\begin{picture}(#1,\value{x})%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(0,\value{x}){\line(1,0){#1}}%
+\put(#1,\value{x}){\ehead}%
+\truey{400}%
+\NUMBER=#1%
+\divide\NUMBER by 2%
+\put(\NUMBER,0){\circle{\value{y}}}
+\put(\NUMBER,\value{x}){\circle{\value{y}}}%
+\end{picture}}%
+
+% \EEQL{n} draws an east equality of length n units
+\newcommand{\EEQL}[1]%
+{\begin{picture}(#1,0)%
+\truex{200}%
+\put(0,\value{x}){\line(1,0){#1}}%
+\put(0,0){\line(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){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(#1,\value{x}){\line(-1,0){#1}}%
+\put(0,\value{x}){\whead}%
+\end{picture}}%
+
+% \EADJDIST{n} draws an east pair of adjoint distributors of length n
+% units
+\newcommand{\EADJDIST}[1]%
+{\truex{700}%
+\begin{picture}(#1,\value{x})%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(#1,\value{x}){\line(-1,0){#1}}%
+\put(0,\value{x}){\whead}%
+\truey{400}%
+\NUMBER=#1%
+\divide\NUMBER by 2%
+\put(\NUMBER,0){\circle{\value{y}}}
+\put(\NUMBER,\value{x}){\circle{\value{y}}}%
+\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 east distributor
+\def\basicedist[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\EDIST}{\Z}}%
+
+% east distributor
+\newcommand{\edist}{\@ifnextchar[{\basicedist}%
+{\hspace{\SOURCE\unitlength}\basicedist[\ARROWLENGTH]}}%
+
+% basic east distributor with upper name
+\def\basicEdist[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\EDIST}{\DUP{#2}}{\Z}}%
+
+% east distributor with upper name
+\newcommand{\Edist}{\@ifnextchar[{\basicEdist}%
+{\hspace{\SOURCE\unitlength}\basicEdist[\ARROWLENGTH]}}%
+
+% basic east distributor with lower name
+\def\basicedisT[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\EDIST}{\DDOWN{#2}}{\Z}}%
+
+% east distributor with lower name
+\newcommand{\edisT}{\@ifnextchar[{\basicedisT}%
+{\hspace{\SOURCE\unitlength}\basicedisT[\ARROWLENGTH]}}%
+
+% basic east dotted arrow
+\def\basicedotar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\EDOTAR}{\Z}}%
+
+% east dotted arrow
+\newcommand{\edotar}{\@ifnextchar[{\basicedotar}%
+{\hspace{\SOURCE\unitlength}\basicedotar[\ARROWLENGTH]}}%
+
+% basic east dotted arrow with upper name
+\def\basicEdotar[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\EDOTAR}{#2}{\Z}}%
+
+% east dotted arrow with upper name
+\newcommand{\Edotar}{\@ifnextchar[{\basicEdotar}%
+{\hspace{\SOURCE\unitlength}\basicEdotar[\ARROWLENGTH]}}%
+
+% basic east dotted arrow with lower name
+\def\basicedotaR[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\EDOTAR}{#2}{\Z}}%
+
+% east dotted arrow with lower name
+\newcommand{\edotaR}{\@ifnextchar[{\basicedotaR}%
+{\hspace{\SOURCE\unitlength}\basicedotaR[\ARROWLENGTH]}}%
+
+% basic east monomorphism
+\def\basicemono[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\EMONO}{\Z}}%
+
+% east arrow
+\newcommand{\emono}{\@ifnextchar[{\basicemono}%
+{\hspace{\SOURCE\unitlength}\basicemono[\ARROWLENGTH]}}%
+
+% basic east monomorphism with upper name
+\def\basicEmono[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\EMONO}{#2}{\Z}}%
+
+% east monomorphism with upper name
+\newcommand{\Emono}{\@ifnextchar[{\basicEmono}%
+{\hspace{\SOURCE\unitlength}\basicEmono[\ARROWLENGTH]}}%
+
+% basic east monomorphism with lower name
+\def\basicemonO[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\EMONO}{#2}{\Z}}%
+
+% east monomorphism with lower name
+\newcommand{\emonO}{\@ifnextchar[{\basicemonO}%
+{\hspace{\SOURCE\unitlength}\basicemonO[\ARROWLENGTH]}}%
+
+% basic east epimorphism
+\def\basiceepi[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\EEPI}{\Z}}%
+
+% east epimorphism
+\newcommand{\eepi}{\@ifnextchar[{\basiceepi}%
+{\hspace{\SOURCE\unitlength}\basiceepi[\ARROWLENGTH]}}%
+
+% basic east epimorphism with upper name
+\def\basicEepi[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\EEPI}{#2}{\Z}}%
+
+% east epimorphism with upper name
+\newcommand{\Eepi}{\@ifnextchar[{\basicEepi}%
+{\hspace{\SOURCE\unitlength}\basicEepi[\ARROWLENGTH]}}%
+
+% basic east epimorphism with lower name
+\def\basiceepI[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\EEPI}{#2}{\Z}}%
+
+% east epimorphism with lower name
+\newcommand{\eepI}{\@ifnextchar[{\basiceepI}%
+{\hspace{\SOURCE\unitlength}\basiceepI[\ARROWLENGTH]}}%
+
+% basic east bimorphism
+\def\basicebimo[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\EBIMO}{\Z}}%
+
+% east bimorphism
+\newcommand{\ebimo}{\@ifnextchar[{\basicebimo}%
+{\hspace{\SOURCE\unitlength}\basicebimo[\ARROWLENGTH]}}%
+
+% basic east bimorphism with upper name
+\def\basicEbimo[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\EBIMO}{#2}{\Z}}%
+
+% east bimorphism with upper name
+\newcommand{\Ebimo}{\@ifnextchar[{\basicEbimo}%
+{\hspace{\SOURCE\unitlength}\basicEbimo[\ARROWLENGTH]}}%
+
+% basic east bimorphism with lower name
+\def\basicebimO[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\EBIMO}{#2}{\Z}}%
+
+% east bimorphism with lower name
+\newcommand{\ebimO}{\@ifnextchar[{\basicebimO}%
+{\hspace{\SOURCE\unitlength}\basicebimO[\ARROWLENGTH]}}%
+
+% basic east isomorphism
+\def\basiceiso[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\Hisocase{\EAR}{\cong}{}{\Z}}%
+
+% east isomorphism
+\newcommand{\eiso}{\@ifnextchar[{\basiceiso}%
+{\hspace{\SOURCE\unitlength}\basiceiso[\ARROWLENGTH]}}%
+
+% basic east isomorphism with upper name
+\def\basicEiso[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hisocase{\EAR}{#2}{\cong}{\Z}}%
+
+% east isomorphism with upper name
+\newcommand{\Eiso}{\@ifnextchar[{\basicEiso}%
+{\hspace{\SOURCE\unitlength}\basicEiso[\ARROWLENGTH]}}%
+
+% basic east isomorphism with lower name
+\def\basiceisO[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hisocase{\EAR}{\cong}{#2}{\Z}}%
+
+% east isomorphism with lower name
+\newcommand{\eisO}{\@ifnextchar[{\basiceisO}%
+{\hspace{\SOURCE\unitlength}\basiceisO[\ARROWLENGTH]}}%
+
+% basic east equality
+\def\basiceeql[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\EEQL}{\Z}}%
+
+% east equality
+\newcommand{\eeql}{\@ifnextchar[{\basiceeql}%
+{\hspace{\SOURCE\unitlength}\basiceeql[\ARROWLENGTH]}}%
+
+% basic east equality with upper name
+\def\basicEeql[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\EEQL}{\DUP{#2}}{\Z}}%
+
+% east equality with upper name
+\newcommand{\Eeql}{\@ifnextchar[{\basicEeql}%
+{\hspace{\SOURCE\unitlength}\basicEeql[\ARROWLENGTH]}}%
+
+% basic east equality with lower name
+\def\basiceeqL[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\EEQL}{#2}{\Z}}%
+
+% east equality with lower name
+\newcommand{\eeqL}{\@ifnextchar[{\basiceeqL}%
+{\hspace{\SOURCE\unitlength}\basiceeqL[\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 distributors
+\def\basicebidist[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hbicase{\EBIDIST}{\Z}}%
+
+% pair of east distributors
+\newcommand{\ebidist}{\@ifnextchar[{\basicebidist}%
+{\hspace{\SOURCE\unitlength}\basicebidist[\ARROWLENGTH]}}%
+
+% basic pair of east distributors with names
+\def\basicEbidist[#1]#2#3{%
+\Z=#1%
+\multiply \Z by 100%
+\Hbicase{\EBIDIST}{\DUP{#2}}{\DDOWN{#3}}{\Z}}%
+
+% pair of east distributors with names
+\newcommand{\Ebidist}{\@ifnextchar[{\basicEbidist}%
+{\hspace{\SOURCE\unitlength}\basicEbidist[\ARROWLENGTH]}}%
+\let\ebidisT=\Ebidist
+
+% 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
+
+% basic pair of east adjoint distributors
+\def\basiceadjdist[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hbicase{\EADJDIST}{\Z}}%
+
+% pair of east adjoint distributors
+\newcommand{\eadjdist}{\@ifnextchar[{\basiceadjdist}%
+{\hspace{\SOURCE\unitlength}\basiceadjdist[\ARROWLENGTH]}}%
+
+% basic pair of east adjoint distributors with names
+\def\basicEadjdist[#1]#2#3{%
+\Z=#1%
+\multiply \Z by 100%
+\Hbicase{\EADJDIST}{\DUP{#2}}{\DDOWN{#3}}{\Z}}%
+
+% pair of east adjoint distributors with names
+\newcommand{\Eadjdist}{\@ifnextchar[{\basicEadjdist}%
+{\hspace{\SOURCE\unitlength}\basicEadjdist[\ARROWLENGTH]}}%
+\let\eadjdisT=\Eadjdist
+
+% WEST ARROWS
+
+% \WAR{n} draws a pointing back arrow of length n units
+\newcommand{\WAR}[1]%
+{\begin{picture}(#1,0)%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\end{picture}}%
+
+% \WDIST{n} draws a pointing back distributor of length n units
+\newcommand{\WDIST}[1]%
+{\begin{picture}(#1,0)%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\truex{400}%
+\NUMBER=#1%
+\divide\NUMBER by 2%
+\put(\NUMBER,0){\circle{\value{x}}}%
+\end{picture}}%
+
+% \WDOTAR draws a dotted arrow of length n units
+\newcommand{\WDOTAR}[1]%
+{\truex{100}\truey{300}%
+\NUMBEROFDOTS=#1%
+\divide\NUMBEROFDOTS by \value{y}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(#1,0)%
+\multiput(#1,0)(-\value{y},0){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(0,0){\whead}%
+\end{picture}}%
+
+% \WMONO{n} draws a pointing back monomorphism of length n units
+\newcommand{\WMONO}[1]%
+{\truetail%
+\monolength=#1%
+\advance\monolength by -\truemonotail%
+\begin{picture}(#1,0)(-#1,0)%
+\put(-\truemonotail,0){\line(-1,0){\monolength}}%
+\put(-\truemonotail,0){\whead}%
+\put(-#1,0){\whead}%
+\end{picture}}%
+
+
+% \WEPI{n} draws a pointing back epimorphism of length n units
+\newcommand{\WEPI}[1]%
+{\truehead%
+\epilength=#1%
+\advance\epilength by -\trueepihead%
+\begin{picture}(#1,0)%
+\put(#1,0){\line(-1,0){\epilength}}%
+\put(\trueepihead,0){\whead}%
+\put(0,0){\whead}%
+\end{picture}}%
+
+% \WBIMO{n} draws a pointing back bimorphism of length n units
+\newcommand{\WBIMO}[1]%
+{\truehead\truetail%
+\monolength=#1
+\advance\monolength by -\truemonotail%
+\epilength=\monolength%
+\advance\epilength by -\trueepihead%
+\begin{picture}(#1,0)%
+\put(\monolength,0){\line(-1,0){\epilength}}%
+\put(\monolength,0){\whead}%
+\put(\trueepihead,0){\whead}%
+\put(0,0){\whead}%
+\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){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\put(#1,\value{x}){\line(-1,0){#1}}%
+\put(0,\value{x}){\whead}%
+\end{picture}}%
+
+% \WBIDIST{n} draws a pair of pointing back distributors of length n units
+\newcommand{\WBIDIST}[1]%
+{\truex{700}%
+\begin{picture}(#1,\value{x})%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\put(#1,\value{x}){\line(-1,0){#1}}%
+\put(0,\value{x}){\whead}%
+\truey{400}%
+\NUMBER=#1%
+\divide\NUMBER by 2%
+\put(\NUMBER,0){\circle{\value{y}}}%
+\put(\NUMBER,\value{x}){\circle{\value{y}}}%
+\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}){\line(1,0){#1}}%
+\put(#1,\value{x}){\ehead}%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\end{picture}}%
+
+% \WADJDIST{n} draws a pair of adjoint distributors of length n units
+\newcommand{\WADJDIST}[1]%
+{\truex{700}%
+\begin{picture}(#1,\value{x})%
+\put(0,\value{x}){\line(1,0){#1}}%
+\put(#1,\value{x}){\ehead}%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\truey{400}%
+\NUMBER=#1%
+\divide\NUMBER by 2%
+\put(\NUMBER,0){\circle{\value{y}}}%
+\put(\NUMBER,\value{x}){\circle{\value{y}}}%
+\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 west distributor
+\def\basicwdist[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\WDIST}{\Z}}%
+
+% west distributor
+\newcommand{\wdist}{\@ifnextchar[{\basicwdist}%
+{\hspace{\SOURCE\unitlength}\basicwdist[\ARROWLENGTH]}}%
+
+% basic west distributor with upper name
+\def\basicWdist[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\WDIST}{\DUP{#2}}{\Z}}%
+
+% west distributor with upper name
+\newcommand{\Wdist}{\@ifnextchar[{\basicWdist}%
+{\hspace{\SOURCE\unitlength}\basicWdist[\ARROWLENGTH]}}%
+
+% basic west distributor with lower name
+\def\basicwdisT[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\WDIST}{\DDOWN{#2}}{\Z}}%
+
+% west distributor with lower name
+\newcommand{\wdisT}{\@ifnextchar[{\basicwdisT}%
+{\hspace{\SOURCE\unitlength}\basicwdisT[\ARROWLENGTH]}}%
+
+% basic west dotted arrow
+\def\basicwdotar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\WDOTAR}{\Z}}%
+
+% west dotted arrow
+\newcommand{\wdotar}{\@ifnextchar[{\basicwdotar}%
+{\hspace{\SOURCE\unitlength}\basicwdotar[\ARROWLENGTH]}}%
+
+% basic west dotted arrow with upper name
+\def\basicWdotar[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\WDOTAR}{#2}{\Z}}%
+
+% west dotted arrow with upper name
+\newcommand{\Wdotar}{\@ifnextchar[{\basicWdotar}%
+{\hspace{\SOURCE\unitlength}\basicWdotar[\ARROWLENGTH]}}%
+
+% basic west dotted arrow with lower name
+\def\basicwdotaR[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\WDOTAR}{#2}{\Z}}%
+
+% west dotted arrow with lower name
+\newcommand{\wdotaR}{\@ifnextchar[{\basicwdotaR}%
+{\hspace{\SOURCE\unitlength}\basicwdotaR[\ARROWLENGTH]}}%
+
+% basic west monomorphism
+\def\basicwmono[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\WMONO}{\Z}}%
+
+% west arrow
+\newcommand{\wmono}{\@ifnextchar[{\basicwmono}%
+{\hspace{\SOURCE\unitlength}\basicwmono[\ARROWLENGTH]}}%
+
+% basic west monomorphism with upper name
+\def\basicWmono[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\WMONO}{#2}{\Z}}%
+
+% west monomorphism with upper name
+\newcommand{\Wmono}{\@ifnextchar[{\basicWmono}%
+{\hspace{\SOURCE\unitlength}\basicWmono[\ARROWLENGTH]}}%
+
+% basic west monomorphism with lower name
+\def\basicwmonO[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\WMONO}{#2}{\Z}}%
+
+% west monomorphism with lower name
+\newcommand{\wmonO}{\@ifnextchar[{\basicwmonO}%
+{\hspace{\SOURCE\unitlength}\basicwmonO[\ARROWLENGTH]}}%
+
+% basic west epimorphism
+\def\basicwepi[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\WEPI}{\Z}}%
+
+% west epimorphism
+\newcommand{\wepi}{\@ifnextchar[{\basicwepi}%
+{\hspace{\SOURCE\unitlength}\basicwepi[\ARROWLENGTH]}}%
+
+% basic west epimorphism with upper name
+\def\basicWepi[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\WEPI}{#2}{\Z}}%
+
+% west epimorphism with upper name
+\newcommand{\Wepi}{\@ifnextchar[{\basicWepi}%
+{\hspace{\SOURCE\unitlength}\basicWepi[\ARROWLENGTH]}}%
+
+% basic west epimorphism with lower name
+\def\basicwepI[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\WEPI}{#2}{\Z}}%
+
+% west epimorphism with lower name
+\newcommand{\wepI}{\@ifnextchar[{\basicwepI}%
+{\hspace{\SOURCE\unitlength}\basicwepI[\ARROWLENGTH]}}%
+
+% basic west bimorphism
+\def\basicwbimo[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\WBIMO}{\Z}}%
+
+% west bimorphism
+\newcommand{\wbimo}{\@ifnextchar[{\basicwbimo}%
+{\hspace{\SOURCE\unitlength}\basicwbimo[\ARROWLENGTH]}}%
+
+% basic west bimorphism with upper name
+\def\basicWbimo[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\WBIMO}{#2}{\Z}}%
+
+% west bimorphism with upper name
+\newcommand{\Wbimo}{\@ifnextchar[{\basicWbimo}%
+{\hspace{\SOURCE\unitlength}\basicWbimo[\ARROWLENGTH]}}%
+
+% basic west bimorphism with lower name
+\def\basicwbimO[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\WBIMO}{#2}{\Z}}%
+
+% west bimorphism with lower name
+\newcommand{\wbimO}{\@ifnextchar[{\basicwbimO}%
+{\hspace{\SOURCE\unitlength}\basicwbimO[\ARROWLENGTH]}}%
+
+% basic west isomorphism
+\def\basicwiso[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\Hisocase{\WAR}{\cong}{}{\Z}}%
+
+% west isomorphism
+\newcommand{\wiso}{\@ifnextchar[{\basicwiso}%
+{\hspace{\SOURCE\unitlength}\basicwiso[\ARROWLENGTH]}}%
+
+% basic west isomorphism with upper name
+\def\basicWiso[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hisocase{\WAR}{#2}{\cong}{\Z}}%
+
+% west isomorphism with upper name
+\newcommand{\Wiso}{\@ifnextchar[{\basicWiso}%
+{\hspace{\SOURCE\unitlength}\basicWiso[\ARROWLENGTH]}}%
+
+% basic west isomorphism with lower name
+\def\basicwisO[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hisocase{\WAR}{\cong}{#2}{\Z}}%
+
+% west isomorphism with lower name
+\newcommand{\wisO}{\@ifnextchar[{\basicwisO}%
+{\hspace{\SOURCE\unitlength}\basicwisO[\ARROWLENGTH]}}%
+
+% west equality
+\let\weql=\eeql%
+
+% west equality with upper name
+\let\Weql=\Eeql%
+
+% west equality with lower name
+\let\weqL=\eeqL%
+
+% 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 distributors
+\def\basicwbidist[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hbicase{\WBIDIST}{\Z}}%
+
+% pair of west distributors
+\newcommand{\wbidist}{\@ifnextchar[{\basicwbidist}%
+{\hspace{\SOURCE\unitlength}\basicwbidist[\ARROWLENGTH]}}%
+
+% basic pair of west distributors with names
+\def\basicWbidist[#1]#2#3{%
+\Z=#1%
+\multiply \Z by 100%
+\Hbicase{\WBIDIST}{\DUP{#2}}{\DDOWN{#3}}{\Z}}%
+
+% pair of west distributors with names
+\newcommand{\Wbidist}{\@ifnextchar[{\basicWbidist}%
+{\hspace{\SOURCE\unitlength}\basicWbidist[\ARROWLENGTH]}}%
+\let\wbidisT=\Wbidist
+
+% 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
+
+% basic pair of west adjoint distributors
+\def\basicwadjdist[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hbicase{\WADJDIST}{\Z}}%
+
+% pair of west adjoint distributors
+\newcommand{\wadjdist}{\@ifnextchar[{\basicwadjdist}%
+{\hspace{\SOURCE\unitlength}\basicwadjdist[\ARROWLENGTH]}}%
+
+% basic pair of west adjoint distributors with names
+\def\basicWadjdist[#1]#2#3{%
+\Z=#1%
+\multiply \Z by 100%
+\Hbicase{\WADJDIST}{\DUP{#2}}{\DDOWN{#3}}{\Z}}%
+
+% pair of west adjoint distributors with names
+\newcommand{\Wadjdist}{\@ifnextchar[{\basicWadjdist}%
+{\hspace{\SOURCE\unitlength}\basicWadjdist[\ARROWLENGTH]}}%
+\let\wadjdisT=\Wadjdist
+
+
+% 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$}}}}%
+
+% \Visocase{P}{f}{g}{n} draws the vertical picture P
+% with names f, g and length n units.
+\newcommand{\Visocase}[4]{\testdiagrammode\makebox[0pt]%
+{\makebox[0pt][r]{\raisebox{0pt}[0pt][0pt]{$#2$\hspace{2pt}}}#1{#4}%
+\makebox[0pt][l]{\raisebox{0pt}[0pt][0pt]{\hspace{2pt}$#3$}}}}%
+
+% \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){\line(0,-1){#1}}%
+\put(0,0){\shead}%
+\end{picture}}}\end{picture}}%
+
+% \SDIST{n} draws a south distributor of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\SDIST}[1]%
+{\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(0,#1){\line(0,-1){#1}}%
+\put(0,0){\shead}%
+\end{picture}}}%
+\truex{400}%
+\put(0,0){\circle{\value{x}}}%
+\end{picture}}%
+
+% \SDOTAR{n} draws a south dotted arrow of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\SDOTAR}[1]%
+{\truex{100}\truey{300}%
+\NUMBEROFDOTS=#1%
+\divide\NUMBEROFDOTS by \value{y}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\multiput(0,#1)(0,-\value{y}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(0,0){\shead}%
+\end{picture}}}\end{picture}}%
+
+% \SMONO{n} draws a south monomorphism of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\SMONO}[1]%
+{\truetail%
+\monolength=#1%
+\advance\monolength by -\truemonotail%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(0,\monolength){\line(0,-1){\monolength}}%
+\put(0,\monolength){\shead}%
+\put(0,0){\shead}%
+\end{picture}}}\end{picture}}%
+
+
+% \SEPI{n} draws a south epimorphism of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\SEPI}[1]%
+{\truehead%
+\epilength=#1%
+\advance\epilength by -\trueepihead%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(0,#1){\line(0,-1){\epilength}}%
+\put(0,\trueepihead){\shead}%
+\put(0,0){\shead}%
+\end{picture}}}\end{picture}}%
+
+% \SBIMO{n} draws a south bimorphism of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\SBIMO}[1]%
+{\truehead\truetail%
+\monolength=#1%
+\advance\monolength by -\truemonotail%
+\epilength=\monolength%
+\advance\epilength by -\trueepihead%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(0,\monolength){\line(0,-1){\epilength}}%
+\put(0,\monolength){\shead}%
+\put(0,\trueepihead){\shead}%
+\put(0,0){\shead}%
+\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){\line(0,-1){#1}}%
+\put(-\value{x},0){\shead}%
+\put(\value{x},#1){\line(0,-1){#1}}%
+\put(\value{x},0){\shead}%
+\end{picture}}}\end{picture}}%
+
+% \SBIDIST{n} draws a pair of south distributors of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\SBIDIST}[1]%
+{\begin{picture}(0,0)%
+\truex{350}%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{x},#1){\line(0,-1){#1}}%
+\put(-\value{x},0){\shead}%
+\put(\value{x},#1){\line(0,-1){#1}}%
+\put(\value{x},0){\shead}%
+\end{picture}}}%
+\truey{400}%
+\put(-\value{x},0){\circle{\value{y}}}%
+\put(\value{x},0){\circle{\value{y}}}%
+\end{picture}}%
+
+% \SEQL{n} draws a vertical equality of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\SEQL}[1]%
+{\begin{picture}(0,0)%
+\truex{100}%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)\put(-\value{x},#1){\line(0,-1){#1}}%
+\put(\value{x},#1){\line(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){\line(0,-1){#1}}%
+\put(-\value{x},0){\shead}%
+\put(\value{x},0){\line(0,1){#1}}%
+\put(\value{x},#1){\nhead}%
+\end{picture}}}\end{picture}}%
+
+% \SADJDIST{n} draws a pair of vertical adjoint distributors of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\SADJDIST}[1]{\begin{picture}(0,0)%
+\truex{350}%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{x},#1){\line(0,-1){#1}}%
+\put(-\value{x},0){\shead}%
+\put(\value{x},0){\line(0,1){#1}}%
+\put(\value{x},#1){\nhead}%
+\end{picture}}}%
+\truey{400}%
+\put(-\value{x},0){\circle{\value{y}}}%
+\put(\value{x},0){\circle{\value{y}}}%
+\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 south distributor
+\def\basicsdist[#1]{\vcase{\SDIST}{#100}}%
+
+% south distributor
+\newcommand{\sdist}{\@ifnextchar[{\basicsdist}{\basicsdist[50]}}%
+
+% basic south distributor with left name
+\def\basicSdist[#1]#2{\Vcase{\SDIST}{#2\hspace*{2pt}}{#100}}%
+
+% south distributor with left name
+\newcommand{\Sdist}{\@ifnextchar[{\basicSdist}{\basicSdist[50]}}%
+
+% basic south distributor with right name
+\def\basicsdisT[#1]#2{\vcasE{\SDIST}{\hspace*{2pt}#2}{#100}}%
+
+% south distributor with right name
+\newcommand{\sdisT}{\@ifnextchar[{\basicsdisT}{\basicsdisT[50]}}%
+
+% basic south dotted arrow
+\def\basicsdotar[#1]{\vcase{\SDOTAR}{#100}}%
+
+% south dotted arrow
+\newcommand{\sdotar}{\@ifnextchar[{\basicsdotar}{\basicsdotar[50]}}%
+
+% basic south dotted arrow with left name
+\def\basicSdotar[#1]#2{\Vcase{\SDOTAR}{#2}{#100}}%
+
+% south dotted arrow with left name
+\newcommand{\Sdotar}{\@ifnextchar[{\basicSdotar}{\basicSdotar[50]}}%
+
+% basic south dotted arrow with right name
+\def\basicsdotaR[#1]#2{\vcasE{\SDOTAR}{#2}{#100}}%
+
+% south dotted arrow with right name
+\newcommand{\sdotaR}{\@ifnextchar[{\basicsdotaR}{\basicsdotaR[50]}}%
+
+% basic south monomorphism
+\def\basicsmono[#1]{\vcase{\SMONO}{#100}}%
+
+% south arrow
+\newcommand{\smono}{\@ifnextchar[{\basicsmono}{\basicsmono[50]}}%
+
+% basic south monomorphism with left name
+\def\basicSmono[#1]#2{\Vcase{\SMONO}{#2}{#100}}%
+
+% south monomorphism with left name
+\newcommand{\Smono}{\@ifnextchar[{\basicSmono}{\basicSmono[50]}}%
+
+% basic south monomorphism with right name
+\def\basicsmonO[#1]#2{\vcasE{\SMONO}{#2}{#100}}%
+
+% south monomorphism with right name
+\newcommand{\smonO}{\@ifnextchar[{\basicsmonO}{\basicsmonO[50]}}%
+
+% basic south epimorphism
+\def\basicsepi[#1]{\vcase{\SEPI}{#100}}%
+
+% south epimorphism
+\newcommand{\sepi}{\@ifnextchar[{\basicsepi}{\basicsepi[50]}}%
+
+% basic south epimorphism with left name
+\def\basicSepi[#1]#2{\Vcase{\SEPI}{#2}{#100}}%
+
+% south epimorphism with left name
+\newcommand{\Sepi}{\@ifnextchar[{\basicSepi}{\basicSepi[50]}}%
+
+% basic south epimorphism with right name
+\def\basicsepI[#1]#2{\vcasE{\SEPI}{#2}{#100}}%
+
+% south epimorphism with right name
+\newcommand{\sepI}{\@ifnextchar[{\basicsepI}{\basicsepI[50]}}%
+
+% basic south bimorphism
+\def\basicsbimo[#1]{\vcase{\SBIMO}{#100}}%
+
+% south bimorphism
+\newcommand{\sbimo}{\@ifnextchar[{\basicsbimo}{\basicsbimo[50]}}%
+
+% basic south bimorphism with left name
+\def\basicSbimo[#1]#2{\Vcase{\SBIMO}{#2}{#100}}%
+
+% south bimorphism with left name
+\newcommand{\Sbimo}{\@ifnextchar[{\basicSbimo}{\basicSbimo[50]}}%
+
+% basic south bimorphism with right name
+\def\basicsbimO[#1]#2{\vcasE{\SBIMO}{#2}{#100}}%
+
+% south bimorphism with right name
+\newcommand{\sbimO}{\@ifnextchar[{\basicsbimO}{\basicsbimO[50]}}%
+
+% basic south isomorphism
+\def\basicsiso[#1]{\Visocase{\SAR}{\cong}{}{#100}}%
+
+% south isomorphism
+\newcommand{\siso}{\@ifnextchar[{\basicsiso}{\basicsiso[50]}}%
+
+% basic south isomorphism with left name
+\def\basicSiso[#1]#2{\Visocase{\SAR}{#2}{\cong}{#100}}%
+
+% south isomorphism with left name
+\newcommand{\Siso}{\@ifnextchar[{\basicSiso}{\basicSiso[50]}}%
+
+% basic south isomorphism with right name
+\def\basicsisO[#1]#2{\Visocase{\SAR}{\cong}{#2}{#100}}%
+
+% south isomorphism with right name
+\newcommand{\sisO}{\@ifnextchar[{\basicsisO}{\basicsisO[50]}}%
+
+% basic south equality
+\def\basicseql[#1]{\vcase{\SEQL}{#100}}%
+
+% south equality
+\newcommand{\seql}{\@ifnextchar[{\basicseql}{\basicseql[50]}}%
+
+% basic south equality with left name
+\def\basicSeql[#1]#2{\Vcase{\SEQL}{#2\hspace*{2pt}}{#100}}%
+
+% south equality with left name
+\newcommand{\Seql}{\@ifnextchar[{\basicSeql}{\basicSeql[50]}}%
+
+% basic south equality with right name
+\def\basicseqL[#1]#2{\vcasE{\SEQL}{\hspace*{2pt}#2}{#100}}%
+
+% south equality with right name
+\newcommand{\seqL}{\@ifnextchar[{\basicseqL}{\basicseqL[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 distributors
+\def\basicsbidist[#1]{\vbicase{\SBIDIST}{#100}}%
+
+% pair of south distributors
+\newcommand{\sbidist}{\@ifnextchar[{\basicsbidist}{\basicsbidist[50]}}%
+
+% basic pair of south distributors with names
+\def\basicSbidist[#1]#2#3%
+{\Vbicase{\SBIDIST}{#2\hspace*{2pt}}{\hspace*{2pt}#3}{#100}}%
+
+% pair of south distributors with names
+\newcommand{\Sbidist}{\@ifnextchar[{\basicSbidist}{\basicSbidist[50]}}%
+\let\sbidisT=\Sbidist
+
+% 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
+
+% basic pair of south adjoint distributors
+\def\basicsadjdist[#1]{\vbicase{\SADJDIST}{#100}}%
+
+% pair of south adjoint distributors
+\newcommand{\sadjdist}{\@ifnextchar[{\basicsadjdist}{\basicsadjdist[50]}}%
+
+% basic pair of south adjoint distributors with names
+\def\basicSadjdist[#1]#2#3%
+{\Vbicase{\SADJDIST}{#2\hspace*{2pt}}{\hspace*{2pt}#3}{#100}}%
+
+% pair of south adjoint distributors with names
+\newcommand{\Sadjdist}{\@ifnextchar[{\basicSadjdist}{\basicSadjdist[50]}}%
+\let\sadjdisT=\Sadjdist
+
+
+% 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){\line(0,1){#1}}%
+\put(0,#1){\nhead}%
+\end{picture}}}\end{picture}}%
+
+% \NDIST{n} draws a north distributor of length n pt
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NDIST}[1]%
+{\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(0,0){\line(0,1){#1}}%
+\put(0,#1){\nhead}%
+\end{picture}}}
+\truex{400}%
+\put(0,0){\circle{\value{x}}}%
+\end{picture}}%
+
+% \NDOTAR{n} draws a north dotted arrow of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NDOTAR}[1]%
+{\truex{100}\truey{300}%
+\NUMBEROFDOTS=#1%
+\divide\NUMBEROFDOTS by \value{y}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\multiput(0,0)(0,\value{y}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(0,#1){\nhead}%
+\end{picture}}}\end{picture}}%
+
+
+% \NMONO{n} draws a north monomorphism of length n pt
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NMONO}[1]%
+{\truetail%
+\monolength=#1%
+\advance\monolength by -\truemonotail%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(0,\truemonotail){\line(0,1){\monolength}}%
+\put(0,#1){\nhead}%
+\put(0,\truemonotail){\nhead}%
+\end{picture}}}\end{picture}}%
+
+% \NEPI{n} draws a north epimorphism of length n pt
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NEPI}[1]%
+{\truehead%
+\epilength=#1%
+\advance\epilength by -\trueepihead%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(0,0){\line(0,1){\epilength}}%
+\put(0,#1){\nhead}%
+\put(0,\epilength){\nhead}%
+\end{picture}}}\end{picture}}%
+
+% \NBIMO{n} draws a north bimorphism of length n pt
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NBIMO}[1]%
+{\truehead\truetail%
+\epilength=#1%
+\advance\epilength by -\trueepihead%
+\monolength=\epilength%
+\advance\monolength by -\truemonotail%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(0,\truemonotail){\line(0,1){\monolength}}%
+\put(0,#1){\nhead}%
+\put(0,\truemonotail){\nhead}%
+\put(0,\epilength){\nhead}%
+\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){\line(0,1){#1}}%
+\put(-\value{x},#1){\nhead}%
+\put(\value{x},0){\line(0,1){#1}}%
+\put(\value{x},#1){\nhead}%
+\end{picture}}}\end{picture}}%
+
+% \NBIDIST{n} draws a pair of north distributors of length n pt
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NBIDIST}[1]%
+{\begin{picture}(0,0)%
+\truex{350}%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{x},0){\line(0,1){#1}}%
+\put(-\value{x},#1){\nhead}%
+\put(\value{x},0){\line(0,1){#1}}%
+\put(\value{x},#1){\nhead}%
+\end{picture}}}
+\truey{400}%
+\put(-\value{x},0){\circle{\value{y}}}%
+\put(\value{x},0){\circle{\value{y}}}%
+\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){\line(0,-1){#1}}%
+\put(\value{x},0){\shead}%
+\put(-\value{x},0){\line(0,1){#1}}%
+\put(-\value{x},#1){\nhead}%
+\end{picture}}}\end{picture}}%
+
+% \NADJDIST{n} draws a pair of vertical adjoint distributors of length n pt
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NADJDIST}[1]{\begin{picture}(0,0)%
+\truex{350}%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(\value{x},#1){\line(0,-1){#1}}%
+\put(\value{x},0){\shead}%
+\put(-\value{x},0){\line(0,1){#1}}%
+\put(-\value{x},#1){\nhead}%
+\end{picture}}}
+\truey{400}%
+\put(-\value{x},0){\circle{\value{y}}}%
+\put(\value{x},0){\circle{\value{y}}}%
+\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 north distributor
+\def\basicndist[#1]{\vcase{\NDIST}{#100}}%
+
+% north distributor
+\newcommand{\ndist}{\@ifnextchar[{\basicndist}{\basicndist[50]}}%
+
+% basic north distributor with left name
+\def\basicNdist[#1]#2{\Vcase{\NDIST}{#2\hspace*{2pt}}{#100}}%
+
+% north distributor with left name
+\newcommand{\Ndist}{\@ifnextchar[{\basicNdist}{\basicNdist[50]}}%
+
+% basic north distributor with right name
+\def\basicndisT[#1]#2{\vcasE{\NDIST}{\hspace*{2pt}#2}{#100}}%
+
+% north distributor with right name
+\newcommand{\ndisT}{\@ifnextchar[{\basicndisT}{\basicndisT[50]}}%
+
+% basic north dotted arrow
+\def\basicndotar[#1]{\vcase{\NDOTAR}{#100}}%
+
+% north dotted arrow
+\newcommand{\ndotar}{\@ifnextchar[{\basicndotar}{\basicndotar[50]}}%
+
+% basic north dotted arrow with left name
+\def\basicNdotar[#1]#2{\Vcase{\NDOTAR}{#2}{#100}}%
+
+% north dotted arrow with left name
+\newcommand{\Ndotar}{\@ifnextchar[{\basicNdotar}{\basicNdotar[50]}}%
+
+% basic north dotted arrow with right name
+\def\basicndotaR[#1]#2{\vcasE{\NDOTAR}{#2}{#100}}%
+
+% north dotted arrow with right name
+\newcommand{\ndotaR}{\@ifnextchar[{\basicndotaR}{\basicndotaR[50]}}%
+
+% basic north monomorphism
+\def\basicnmono[#1]{\vcase{\NMONO}{#100}}%
+
+% north arrow
+\newcommand{\nmono}{\@ifnextchar[{\basicnmono}%
+{\basicnmono[50]}}%
+
+% basic north monomorphism with left name
+\def\basicNmono[#1]#2{\Vcase{\NMONO}{#2}{#100}}%
+
+% north monomorphism with left name
+\newcommand{\Nmono}{\@ifnextchar[{\basicNmono}{\basicNmono[50]}}%
+
+% basic north monomorphism with right name
+\def\basicnmonO[#1]#2{\vcasE{\NMONO}{#2}{#100}}%
+
+% north monomorphism with right name
+\newcommand{\nmonO}{\@ifnextchar[{\basicnmonO}{\basicnmonO[50]}}%
+
+% basic north epimorphism
+\def\basicnepi[#1]{\vcase{\NEPI}{#100}}%
+
+% north epimorphism
+\newcommand{\nepi}{\@ifnextchar[{\basicnepi}{\basicnepi[50]}}%
+
+% basic north epimorphism with left name
+\def\basicNepi[#1]#2{\Vcase{\NEPI}{#2}{#100}}%
+
+% north epimorphism with left name
+\newcommand{\Nepi}{\@ifnextchar[{\basicNepi}{\basicNepi[50]}}%
+
+% basic north epimorphism with right name
+\def\basicnepI[#1]#2{\vcasE{\NEPI}{#2}{#100}}%
+
+% north epimorphism with right name
+\newcommand{\nepI}{\@ifnextchar[{\basicnepI}{\basicnepI[50]}}%
+
+% basic north bimorphism
+\def\basicnbimo[#1]{\vcase{\NBIMO}{#100}}%
+
+% north bimorphism
+\newcommand{\nbimo}{\@ifnextchar[{\basicnbimo}{\basicnbimo[50]}}%
+
+% basic north bimorphism with left name
+\def\basicNbimo[#1]#2{\Vcase{\NBIMO}{#2}{#100}}%
+
+% north bimorphism with left name
+\newcommand{\Nbimo}{\@ifnextchar[{\basicNbimo}{\basicNbimo[50]}}%
+
+% basic north bimorphism with right name
+\def\basicnbimO[#1]#2{\vcasE{\NBIMO}{#2}{#100}}%
+
+% north bimorphism with right name
+\newcommand{\nbimO}{\@ifnextchar[{\basicnbimO}{\basicnbimO[50]}}%
+
+% basic north isomorphism
+\def\basicniso[#1]{\Visocase{\NAR}{\cong}{}{#100}}%
+
+% north isomorphism
+\newcommand{\niso}{\@ifnextchar[{\basicniso}{\basicniso[50]}}%
+
+% basic north isomorphism with left name
+\def\basicNiso[#1]#2{\Visocase{\NAR}{#2}{\cong}{#100}}%
+
+% north isomorphism with left name
+\newcommand{\Niso}{\@ifnextchar[{\basicNiso}{\basicNiso[50]}}%
+
+% basic north isomorphism with right name
+\def\basicnisO[#1]#2{\Visocase{\NAR}{\cong}{#2}{#100}}%
+
+% north isomorphism with right name
+\newcommand{\nisO}{\@ifnextchar[{\basicnisO}{\basicnisO[50]}}%
+
+% north equality
+\let\neql=\seql%
+
+% north equality with left name
+\let\Neql=\Seql%
+
+% north equality with right name
+\let\neqL=\seqL%
+
+% 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 distributors
+\def\basicnbidist[#1]{\vbicase{\NBIDIST}{#100}}%
+
+% pair of north distributors
+\newcommand{\nbidist}{\@ifnextchar[{\basicnbidist}{\basicnbidist[50]}}%
+
+% basic pair of north distributors with names
+\def\basicNbidist[#1]#2#3%
+{\Vbicase{\NBIDIST}{#2\hspace*{2pt}}{\hspace*{2pt}#3}{#100}}%
+
+% pair of north distributors with names
+\newcommand{\Nbidist}{\@ifnextchar[{\basicNbidist}{\basicNbidist[50]}}%
+\let\nbidisT=\Nbidist
+
+% 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
+
+% basic pair of north adjoint distributors
+\def\basicnadjdist[#1]{\vbicase{\NADJDIST}{#100}}%
+
+% pair of north adjoint distributors
+\newcommand{\nadjdist}{\@ifnextchar[{\basicnadjdist}{\basicnadjdist[50]}}%
+
+% basic pair of north adjoint distributors with names
+\def\basicNadjdist[#1]#2#3%
+{\Vbicase{\NADJDIST}{#2\hspace*{2pt}}{\hspace*{2pt}#3}{#100}}%
+
+% pair of north adjoint distributors with names
+\newcommand{\Nadjdist}{\@ifnextchar[{\basicNadjdist}{\basicNadjdist[50]}}%
+\let\nadjdisT=\Nadjdist
+
+
+
+% 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){\line(1,1){#1}}%
+\put(\Y,\Y){\nehead}%
+\end{picture}}%
+
+% \NEDIST{n} draws a north-east distributor of length n units
+\newcommand{\NEDIST}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-\Y){\line(1,1){#1}}%
+\put(\Y,\Y){\nehead}%
+\truex{400}%
+\put(0,0){\circle{\value{x}}}%
+\end{picture}}%
+
+% \NEDOTAR{n} draws a north-east dotted arrow of length n units
+\newcommand{\NEDOTAR}[1]%
+{\truex{100}\truey{212}%
+\Y=#1%
+\divide\Y by 2%
+\NUMBEROFDOTS=#1%
+\divide\NUMBEROFDOTS by \value{y}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\multiput(-\Y,-\Y)(\value{y},\value{y}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(\Y,\Y){\nehead}%
+\end{picture}}%
+
+% \NEMONO{n} draws a north-east monomorphism of length n units
+\newcommand{\NEMONO}[1]{%
+\Y=#1%
+\divide \Y by 2%
+\Truetail%
+\bimolength=#1%
+\advance\bimolength by -\Truemonotail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\begin{picture}(0,0)%
+\put(-\monolength,-\monolength){\line(1,1){\bimolength}}%
+\put(-\monolength,-\monolength){\nehead}%
+\put(\Y,\Y){\nehead}%
+\end{picture}}%
+
+% \NEEPI{n} draws a north-east epimorphism of length n units
+\newcommand{\NEEPI}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\Truehead%
+\bimolength=#1%
+\advance\bimolength by -\Trueepihead%
+\epilength=\bimolength%
+\advance\epilength by -\Y%
+\begin{picture}(0,0)%
+\put(-\Y,-\Y){\line(1,1){\bimolength}}%
+\put(\epilength,\epilength){\nehead}%
+\put(\Y,\Y){\nehead}%
+\end{picture}}%
+
+% \NEBIMO{n} draws a north-east bimorphism of length n units
+\newcommand{\NEBIMO}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\Truetail\Truehead%
+\bimolength=#1%
+\advance\bimolength by -\Truemonotail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\advance\bimolength by -\Trueepihead%
+\epilength=\bimolength%
+\advance\epilength by -\monolength%
+\begin{picture}(0,0)%
+\put(-\monolength,-\monolength){\line(1,1){\bimolength}}%
+\put(-\monolength,-\monolength){\nehead}%
+\put(\epilength,\epilength){\nehead}%
+\put(\Y,\Y){\nehead}%
+\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}){\line(1,1){#1}}%
+\put(\value{x},-\value{x}){\line(1,1){#1}}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(\monolength,\epilength){\nehead}%
+\put(\epilength,\monolength){\nehead}%
+\end{picture}}\end{picture}}%
+
+% \NEBIDIST{n} draws a pair of north-east distributors of length n units
+\newcommand{\NEBIDIST}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\truey{400}%
+\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}){\line(1,1){#1}}%
+\put(\epilength,\monolength){\nehead}%
+\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}){\line(1,1){#1}}%
+\put(\epilength,\monolength){\nehead}%
+\end{picture}}%
+\put(-\value{x},\value{x}){\circle{\value{y}}}%
+\put(\value{x},-\value{x}){\circle{\value{y}}}%
+\end{picture}}%
+
+% \NEEQL{n} draws a north-east equality of length n units
+\newcommand{\NEEQL}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-\Y){\begin{picture}(0,0)%
+\truex{70}%
+\put(-\value{x},\value{x}){\line(1,1){#1}}%
+\put(\value{x},-\value{x}){\line(1,1){#1}}%
+\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}){\line(1,1){#1}}%
+\put(\epilength,\monolength){\nehead}%
+\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}){\line(-1,-1){#1}}%
+\put(-\epilength,-\monolength){\swhead}%
+\end{picture}}\end{picture}}%
+
+% \NEADJDIST{n} draws a north-east pair of adjoint distributors of length n units
+\newcommand{\NEADJDIST}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\truey{400}%
+\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}){\line(1,1){#1}}%
+\put(\epilength,\monolength){\nehead}%
+\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}){\line(-1,-1){#1}}%
+\put(-\epilength,-\monolength){\swhead}%
+\end{picture}}%
+\put(-\value{x},\value{x}){\circle{\value{y}}}%
+\put(\value{x},-\value{x}){\circle{\value{y}}}%
+\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]}}%
+
+% north-east distributor of length nx100 units
+\def\basicnedist[#1]{\fdcase{\NEDIST}{}{}{#100}}%
+
+% north-east distributor
+\newcommand{\nedist}{\@ifnextchar[{\basicnedist}{\basicnedist[59]}}%
+
+% north-east distributor with upper name [1] and length nx100 units
+\def\basicNedist[#1]#2{\fdcase{\NEDIST}{#2}{}{#100}}%
+
+% north-east distributor with upper name
+\newcommand{\Nedist}{\@ifnextchar[{\basicNedist}{\basicNedist[59]}}%
+
+% north-east distributor with lower name [1] and length nx100 units
+\def\basicnedisT[#1]#2{\fdcase{\NEDIST}{}{#2}{#100}}%
+
+% north-east distributor with lower name [1]
+\newcommand{\nedisT}{\@ifnextchar[{\basicnedisT}{\basicnedisT[59]}}%
+
+% north-east dotted arrow of length nx100 units
+\def\basicnedotar[#1]{\fdcase{\NEDOTAR}{}{}{#100}}%
+
+% north-east dotted arrow
+\newcommand{\nedotar}{\@ifnextchar[{\basicnedotar}{\basicnedotar[59]}}%
+
+% north-east dotted arrow with upper name [1] and length nx100 units
+\def\basicNedotar[#1]#2{\fdcase{\NEDOTAR}{#2}{}{#100}}%
+
+% north-east dotted arrow with upper name
+\newcommand{\Nedotar}{\@ifnextchar[{\basicNedotar}{\basicNedotar[59]}}%
+
+% north-east dotted arrow with lower name [1] and length nx100 units
+\def\basicnedotaR[#1]#2{\fdcase{\NEDOTAR}{}{#2}{#100}}%
+
+% north-east dotted arrow with lower name [1]
+\newcommand{\nedotaR}{\@ifnextchar[{\basicnedotaR}{\basicnedotaR[59]}}%
+
+% north-east monomorphism of length nx100 units
+\def\basicnemono[#1]{\fdcase{\NEMONO}{}{}{#100}}%
+
+% north-east monomorphism
+\newcommand{\nemono}{\@ifnextchar[{\basicnemono}{\basicnemono[59]}}%
+
+% north-east monomorphism with upper name [1] and length nx100 units
+\def\basicNemono[#1]#2{\fdcase{\NEMONO}{#2}{}{#100}}%
+
+% north-east monomophism with upper name
+\newcommand{\Nemono}{\@ifnextchar[{\basicNemono}{\basicNemono[59]}}%
+
+% north-east monomorphism with lower name [1] and length nx100 units
+\def\basicnemonO[#1]#2{\fdcase{\NEMONO}{}{#2}{#100}}%
+
+% north-east monomorphism with lower name [1]
+\newcommand{\nemonO}{\@ifnextchar[{\basicnemonO}{\basicnemonO[59]}}%
+
+% north-east epimorphism of length nx100 units
+\def\basicneepi[#1]{\fdcase{\NEEPI}{}{}{#100}}%
+
+% north-east epimorphism
+\newcommand{\neepi}{\@ifnextchar[{\basicneepi}{\basicneepi[59]}}%
+
+% north-east epimorphism with upper name [1] and length nx100 units
+\def\basicNeepi[#1]#2{\fdcase{\NEEPI}{#2}{}{#100}}%
+
+% north-east epimorphism with upper name
+\newcommand{\Neepi}{\@ifnextchar[{\basicNeepi}{\basicNeepi[59]}}%
+
+% north-east epimorphism with lower name [1] and length nx100 units
+\def\basicneepI[#1]#2{\fdcase{\NEEPI}{}{#2}{#100}}%
+
+% north-east epimorphism with lower name [1]
+\newcommand{\neepI}{\@ifnextchar[{\basicneepI}{\basicneepI[59]}}%
+
+% north-east bimorphism of length nx100 units
+\def\basicnebimo[#1]{\fdcase{\NEBIMO}{}{}{#100}}%
+
+% north-east bimorphism
+\newcommand{\nebimo}{\@ifnextchar[{\basicnebimo}{\basicnebimo[59]}}%
+
+% north-east bimorphism with upper name [1] and length nx100 units
+\def\basicNebimo[#1]#2{\fdcase{\NEBIMO}{#2}{}{#100}}%
+
+% north-east bimorphism with upper name
+\newcommand{\Nebimo}{\@ifnextchar[{\basicNebimo}{\basicNebimo[59]}}%
+
+% north-east bimorphism with lower name [1] and length nx100 units
+\def\basicnebimO[#1]#2{\fdcase{\NEBIMO}{}{#2}{#100}}%
+
+% north-east bimorphism with lower name [1]
+\newcommand{\nebimO}{\@ifnextchar[{\basicnebimO}{\basicnebimO[59]}}%
+
+% north-east isomorphism of length nx100 units
+\def\basicneiso[#1]{\fdcase{\NEAR}{\hspace{-2pt}\cong}{}{#100}}%
+
+% north-east isomorphism
+\newcommand{\neiso}{\@ifnextchar[{\basicneiso}{\basicneiso[59]}}%
+
+% north-east isomorphism with upper name [1] and length nx100 units
+\def\basicNeiso[#1]#2{\fdcase{\NEAR}{#2}{\cong}{#100}}%
+
+% north-east isomorphism with upper name
+\newcommand{\Neiso}{\@ifnextchar[{\basicNeiso}{\basicNeiso[59]}}%
+
+% north-east isomorphism with lower name [1] and length nx100 units
+\def\basicneisO[#1]#2{\fdcase{\NEAR}{\hspace{-2pt}\cong}{#2}{#100}}%
+
+% north-east isomorphism with lower name [1]
+\newcommand{\neisO}{\@ifnextchar[{\basicneisO}{\basicneisO[59]}}%
+
+% north-east equality of length nx100 units
+\def\basicneeql[#1]{\fdcase{\NEEQL}{}{}{#100}}%
+
+% north-east equality
+\newcommand{\neeql}{\@ifnextchar[{\basicneeql}{\basicneeql[59]}}%
+
+% north-east equality with upper name [1] and length nx100 units
+\def\basicNeeql[#1]#2{\fdcase{\NEEQL}{#2}{}{#100}}%
+
+% north-east equality with upper name
+\newcommand{\Neeql}{\@ifnextchar[{\basicNeeql}{\basicNeeql[59]}}%
+
+% north-east equality with lower name [1] and length nx100 units
+\def\basicneeqL[#1]#2{\fdcase{\NEEQL}{}{#2}{#100}}%
+
+% north-east equality with lower name [1]
+\newcommand{\neeqL}{\@ifnextchar[{\basicneeqL}{\basicneeqL[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
+
+% pair of north-east distributors of length nx100 units
+\def\basicnebidist[#1]{\fdbicase{\NEBIDIST}{}{}{#100}}%
+
+% pair of north-east distributors
+\newcommand{\nebidist}{\@ifnextchar[{\basicnebidist}{\basicnebidist[59]}}%
+
+% pair of north-east distributors with names [1][2] and length nx100 units
+\def\basicNebidist[#1]#2#3{\fdbicase{\NEBIDIST}{#2}{#3}{#100}}%
+
+% pair of north-east distributors with names
+\newcommand{\Nebidist}{\@ifnextchar[{\basicNebidist}{\basicNebidist[59]}}%
+\let\nebidisT=\Nebidist
+
+% pair of north-east adjoint distributors of length nx100 units
+\def\basicneadjdist[#1]{\fdbicase{\NEADJDIST}{}{}{#100}}%
+
+% pair of north-east adjoint distributors
+\newcommand{\neadjdist}{\@ifnextchar[{\basicneadjdist}{\basicneadjdist[59]}}%
+
+% pair of north-east adjoint distributors with names [1][2] and length nx100 units
+\def\basicNeadjdist[#1]#2#3{\fdbicase{\NEADJDIST}{#2}{#3}{#100}}%
+
+% pair of north-east adjoint distributors with names
+\newcommand{\Neadjdist}{\@ifnextchar[{\basicNeadjdist}{\basicNeadjdist[59]}}%
+\let\neadjdisT=\Neadjdist
+
+
+
+% 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){\line(-1,-1){#1}}%
+\put(-\Y,-\Y){\swhead}%
+\end{picture}}%
+
+% \SWDIST{n} draws a south-west distributor of length n units
+\newcommand{\SWDIST}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(\Y,\Y){\line(-1,-1){#1}}%
+\put(-\Y,-\Y){\swhead}%
+\truex{400}%
+\put(0,0){\circle{\value{x}}}%
+\end{picture}}%
+
+% \SWDOTAR{n} draws a south-west dotted arrow of length n units
+\newcommand{\SWDOTAR}[1]%
+{\truex{100}\truey{212}%
+\Y=#1%
+\divide\Y by 2%
+\NUMBEROFDOTS=#1%
+\divide\NUMBEROFDOTS by \value{y}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\multiput(\Y,\Y)(-\value{y},-\value{y}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(-\Y,-\Y){\swhead}%
+\end{picture}}%
+
+% \SWMONO{n} draws a south-west monomorphism of length n units
+\newcommand{\SWMONO}[1]{%
+\Y=#1%
+\divide \Y by 2%
+\Truetail%
+\bimolength=#1%
+\advance\bimolength by -\Truemonotail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\begin{picture}(0,0)%
+\put(\monolength,\monolength){\line(-1,-1){\bimolength}}%
+\put(\monolength,\monolength){\swhead}%
+\put(-\Y,-\Y){\swhead}%
+\end{picture}}%
+
+% \SWEPI{n} draws a south-west epimorphism of length n units
+\newcommand{\SWEPI}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\Truehead%
+\bimolength=#1%
+\advance\bimolength by -\Trueepihead%
+\epilength=\bimolength%
+\advance\epilength by -\Y%
+\begin{picture}(0,0)%
+\put(\Y,\Y){\line(-1,-1){\bimolength}}%
+\put(-\epilength,-\epilength){\swhead}%
+\put(-\Y,-\Y){\swhead}%
+\end{picture}}%
+
+% \SWBIMO{n} draws a south-west bimorphism of length n units
+\newcommand{\SWBIMO}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\Truetail\Truehead%
+\bimolength=#1%
+\advance\bimolength by -\Truemonotail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\advance\bimolength by -\Trueepihead%
+\epilength=\bimolength%
+\advance\epilength by -\monolength%
+\begin{picture}(0,0)%
+\put(\monolength,\monolength){\line(-1,-1){\bimolength}}%
+\put(\monolength,\monolength){\swhead}%
+\put(-\epilength,-\epilength){\swhead}%
+\put(-\Y,-\Y){\swhead}%
+\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}){\line(-1,-1){#1}}%
+\put(-\value{x},\value{x}){\line(-1,-1){#1}}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(-\monolength,-\epilength){\swhead}%
+\put(-\epilength,-\monolength){\swhead}%
+\end{picture}}\end{picture}}%
+
+% \SWBIDIST{n} draws a pair of south-west distributors of length n units
+\newcommand{\SWBIDIST}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\truey{400}%
+\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}){\line(-1,-1){#1}}%
+\put(-\epilength,-\monolength){\swhead}%
+\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}){\line(-1,-1){#1}}%
+\put(-\epilength,-\monolength){\swhead}%
+\end{picture}}%
+\put(\value{x},-\value{x}){\circle{\value{y}}}%
+\put(-\value{x},\value{x}){\circle{\value{y}}}%
+\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}){\line(-1,-1){#1}}%
+\put(-\monolength,-\epilength){\swhead}%
+\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}){\line(1,1){#1}}%
+\put(\monolength,\epilength){\nehead}%
+\end{picture}}\end{picture}}%
+
+% \SWADJDIST{n} draws a south-west pair of adjoint distributors of length n units
+\newcommand{\SWADJDIST}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\truey{400}%
+\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}){\line(-1,-1){#1}}%
+\put(-\monolength,-\epilength){\swhead}%
+\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}){\line(1,1){#1}}%
+\put(\monolength,\epilength){\nehead}%
+\end{picture}}%
+\put(-\value{x},\value{x}){\circle{\value{y}}}%
+\put(\value{x},-\value{x}){\circle{\value{y}}}%
+\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]}}%
+
+% south-west distributor of length nx100 units
+\def\basicswdist[#1]{\fdcase{\SWDIST}{}{}{#100}}%
+
+% south-west distributor
+\newcommand{\swdist}{\@ifnextchar[{\basicswdist}{\basicswdist[59]}}%
+
+% south-west distributor with upper name [1] and length nx100 units
+\def\basicSwdist[#1]#2{\fdcase{\SWDIST}{#2}{}{#100}}%
+
+% south-west distributor with upper name
+\newcommand{\Swdist}{\@ifnextchar[{\basicSwdist}{\basicSwdist[59]}}%
+
+% south-west distributor with lower name [1] and length nx100 units
+\def\basicswdisT[#1]#2{\fdcase{\SWDIST}{}{#2}{#100}}%
+
+% south-west distributor with lower name [1]
+\newcommand{\swdisT}{\@ifnextchar[{\basicswdisT}{\basicswdisT[59]}}%
+
+% south-west dotted arrow of length nx100 units
+\def\basicswdotar[#1]{\fdcase{\SWDOTAR}{}{}{#100}}%
+
+% south-west dotted arrow
+\newcommand{\swdotar}{\@ifnextchar[{\basicswdotar}{\basicswdotar[59]}}%
+
+% south-west dotted arrow with upper name [1] and length nx100 units
+\def\basicSwdotar[#1]#2{\fdcase{\SWDOTAR}{#2}{}{#100}}%
+
+% south-west dotted arrow with upper name
+\newcommand{\Swdotar}{\@ifnextchar[{\basicSwdotar}{\basicSwdotar[59]}}%
+
+% south-west dotted arrow with lower name [1] and length nx100 units
+\def\basicswdotaR[#1]#2{\fdcase{\SWDOTAR}{}{#2}{#100}}%
+
+% south-west dotted arrow with lower name [1]
+\newcommand{\swdotaR}{\@ifnextchar[{\basicswdotaR}{\basicswdotaR[59]}}%
+
+% south-west monomorphism of length nx100 units
+\def\basicswmono[#1]{\fdcase{\SWMONO}{}{}{#100}}%
+
+% south-west monomorphism
+\newcommand{\swmono}{\@ifnextchar[{\basicswmono}{\basicswmono[59]}}%
+
+% south-west monomorphism with upper name [1] and length nx100 units
+\def\basicSwmono[#1]#2{\fdcase{\SWMONO}{#2}{}{#100}}%
+
+% south-west monomophism with upper name
+\newcommand{\Swmono}{\@ifnextchar[{\basicSwmono}{\basicSwmono[59]}}%
+
+% south-west monomorphism with lower name [1] and length nx100 units
+\def\basicswmonO[#1]#2{\fdcase{\SWMONO}{}{#2}{#100}}%
+
+% south-west monomorphism with lower name [1]
+\newcommand{\swmonO}{\@ifnextchar[{\basicswmonO}{\basicswmonO[59]}}%
+
+% south-west epimorphism of length nx100 units
+\def\basicswepi[#1]{\fdcase{\SWEPI}{}{}{#100}}%
+
+% south-west epimorphism
+\newcommand{\swepi}{\@ifnextchar[{\basicswepi}{\basicswepi[59]}}%
+
+% south-west epimorphism with upper name [1] and length nx100 units
+\def\basicSwepi[#1]#2{\fdcase{\SWEPI}{#2}{}{#100}}%
+
+% south-west epimorphism with upper name
+\newcommand{\Swepi}{\@ifnextchar[{\basicSwepi}{\basicSwepi[59]}}%
+
+% south-west epimorphism with lower name [1] and length nx100 units
+\def\basicswepI[#1]#2{\fdcase{\SWEPI}{}{#2}{#100}}%
+
+% south-west epimorphism with lower name [1]
+\newcommand{\swepI}{\@ifnextchar[{\basicswepI}{\basicswepI[59]}}%
+
+% south-west bimorphism of length nx100 units
+\def\basicswbimo[#1]{\fdcase{\SWBIMO}{}{}{#100}}%
+
+% south-west bimorphism
+\newcommand{\swbimo}{\@ifnextchar[{\basicswbimo}{\basicswbimo[59]}}%
+
+% south-west bimorphism with upper name [1] and length nx100 units
+\def\basicSwbimo[#1]#2{\fdcase{\SWBIMO}{#2}{}{#100}}%
+
+% south-west bimorphism with upper name
+\newcommand{\Swbimo}{\@ifnextchar[{\basicSwbimo}{\basicSwbimo[59]}}%
+
+% south-west bimorphism with lower name [1] and length nx100 units
+\def\basicswbimO[#1]#2{\fdcase{\SWBIMO}{}{#2}{#100}}%
+
+% south-west bimorphism with lower name [1]
+\newcommand{\swbimO}{\@ifnextchar[{\basicswbimO}{\basicswbimO[59]}}%
+
+% south-west isomorphism of length nx100 units
+\def\basicswiso[#1]{\fdcase{\SWAR}{\hspace{-2pt}\cong}{}{#100}}%
+
+% south-west isomorphism
+\newcommand{\swiso}{\@ifnextchar[{\basicswiso}{\basicswiso[59]}}%
+
+% south-west isomorphism with upper name [1] and length nx100 units
+\def\basicSwiso[#1]#2{\fdcase{\SWAR}{#2}{\cong}{#100}}%
+
+% south-west isomorphism with upper name
+\newcommand{\Swiso}{\@ifnextchar[{\basicSwiso}{\basicSwiso[59]}}%
+
+% south-west isomorphism with lower name [1] and length nx100 units
+\def\basicswisO[#1]#2{\fdcase{\SWAR}{\hspace{-2pt}\cong}{#2}{#100}}%
+
+% south-west isomorphism with lower name [1]
+\newcommand{\swisO}{\@ifnextchar[{\basicswisO}{\basicswisO[59]}}%
+
+% south-west equality
+\let\sweql\neeql%
+
+% south-west equality with upper name [1]
+\let\Sweql=\Neeql%
+
+% south-west equality with lower name [1]
+\let\sweqL=\neeqL%
+
+% 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
+
+% pair of south-west distributors of length nx100 units
+\def\basicswbidist[#1]{\fdbicase{\SWBIDIST}{}{}{#100}}%
+
+% pair of south-west distributors
+\newcommand{\swbidist}{\@ifnextchar[{\basicswbidist}{\basicswbidist[59]}}%
+
+% pair of south-west distributors with names [1][2] and length nx100 units
+\def\basicSwbidist[#1]#2#3{\fdbicase{\SWBIDIST}{#2}{#3}{#100}}%
+
+% pair of south-west distributors with names
+\newcommand{\Swbidist}{\@ifnextchar[{\basicSwbidist}{\basicSwbidist[59]}}%
+\let\swbidisT=\Swbidist
+
+% pair of south-west adjoint distributors of length nx100 units
+\def\basicswadjdist[#1]{\fdbicase{\SWADJDIST}{}{}{#100}}%
+
+% pair of south-west adjoint distributors
+\newcommand{\swadjdist}{\@ifnextchar[{\basicswadjdist}{\basicswadjdist[59]}}%
+
+% pair of south-west adjoint distributors with names [1][2] and length nx100 units
+\def\basicSwadjdist[#1]#2#3{\fdbicase{\SWADJDIST}{#2}{#3}{#100}}%
+
+% pair of south-west adjoint distributors with names
+\newcommand{\Swadjdist}{\@ifnextchar[{\basicSwadjdist}{\basicSwadjdist[59]}}%
+\let\swadjdisT=\Swadjdist
+
+
+
+% 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){\line(1,-1){#1}}%
+\put(\Y,-\Y){\sehead}%
+\end{picture}}%
+
+% \SEDIST{n} draws a south-east distributor of length n units
+\newcommand{\SEDIST}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(-\Y,\Y){\line(1,-1){#1}}%
+\put(\Y,-\Y){\sehead}%
+\truex{400}%
+\put(0,0){\circle{\value{x}}}%
+\end{picture}}%
+
+% \SEDOTAR{n} draws a south-east dotted arrow of length n units
+\newcommand{\SEDOTAR}[1]%
+{\truex{100}\truey{212}%
+\Y=#1%
+\divide\Y by 2%
+\NUMBEROFDOTS=#1%
+\divide\NUMBEROFDOTS by \value{y}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\multiput(-\Y,\Y)(\value{y},-\value{y}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(\Y,-\Y){\sehead}%
+\end{picture}}%
+
+% \SEMONO{n} draws a south-east monomorphism of length n units
+\newcommand{\SEMONO}[1]{%
+\Y=#1%
+\divide \Y by 2%
+\Truetail%
+\bimolength=#1%
+\advance\bimolength by -\Truemonotail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\begin{picture}(0,0)%
+\put(-\monolength,\monolength){\line(1,-1){\bimolength}}%
+\put(-\monolength,\monolength){\sehead}%
+\put(\Y,-\Y){\sehead}%
+\end{picture}}%
+
+% \SEEPI{n} draws a south-east epimorphism of length n units
+\newcommand{\SEEPI}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\Truehead%
+\bimolength=#1%
+\advance\bimolength by -\Trueepihead%
+\epilength=\bimolength%
+\advance\epilength by -\Y%
+\begin{picture}(0,0)%
+\put(-\Y,\Y){\line(1,-1){\bimolength}}%
+\put(\epilength,-\epilength){\sehead}%
+\put(\Y,-\Y){\sehead}%
+\end{picture}}%
+
+% \SEBIMO{n} draws a south-east bimorphism of length n units
+\newcommand{\SEBIMO}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\Truetail\Truehead%
+\bimolength=#1%
+\advance\bimolength by -\Truemonotail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\advance\bimolength by -\Trueepihead%
+\epilength=\bimolength%
+\advance\epilength by -\monolength%
+\begin{picture}(0,0)%
+\put(-\monolength,\monolength){\line(1,-1){\bimolength}}%
+\put(-\monolength,\monolength){\sehead}%
+\put(\epilength,-\epilength){\sehead}%
+\put(\Y,-\Y){\sehead}%
+\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}){\line(1,-1){#1}}%
+\put(\value{x},\value{x}){\line(1,-1){#1}}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(\monolength,-\epilength){\sehead}%
+\put(\epilength,-\monolength){\sehead}%
+\end{picture}}\end{picture}}%
+
+% \SEBIDIST{n} draws a pair of south-east distributors of length n units
+\newcommand{\SEBIDIST}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\truey{400}%
+\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}){\line(1,-1){#1}}%
+\put(\epilength,-\monolength){\sehead}%
+\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}){\line(1,-1){#1}}%
+\put(\epilength,-\monolength){\sehead}%
+\end{picture}}%
+\put(-\value{x},-\value{x}){\circle{\value{y}}}%
+\put(\value{x},\value{x}){\circle{\value{y}}}%
+\end{picture}}%
+
+% \SEEQL{n} draws a south-east equality of length n units
+\newcommand{\SEEQL}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(-\Y,\Y){\begin{picture}(0,0)%
+\truex{70}%
+\put(-\value{x},-\value{x}){\line(1,-1){#1}}%
+\put(\value{x},\value{x}){\line(1,-1){#1}}%
+\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}){\line(1,-1){#1}}%
+\put(\monolength,-\epilength){\sehead}%
+\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}){\line(-1,1){#1}}%
+\put(-\monolength,\epilength){\nwhead}%
+\end{picture}}\end{picture}}%
+
+% \SEADJDIST{n} draws a south-east pair of adjoint distributors of length n units
+\newcommand{\SEADJDIST}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\truey{400}%
+\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}){\line(1,-1){#1}}%
+\put(\monolength,-\epilength){\sehead}%
+\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}){\line(-1,1){#1}}%
+\put(-\monolength,\epilength){\nwhead}%
+\end{picture}}%
+\put(-\value{x},-\value{x}){\circle{\value{y}}}%
+\put(\value{x},\value{x}){\circle{\value{y}}}%
+\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]}}%
+
+% south-east distributor of length nx100 units
+\def\basicsedist[#1]{\sdcase{\SEDIST}{}{}{#100}}%
+
+% south-east distributor
+\newcommand{\sedist}{\@ifnextchar[{\basicsedist}{\basicsedist[59]}}%
+
+% south-east distributor with upper name [1] and length nx100 units
+\def\basicSedist[#1]#2{\sdcase{\SEDIST}{#2}{}{#100}}%
+
+% south-east distributor with upper name
+\newcommand{\Sedist}{\@ifnextchar[{\basicSedist}{\basicSedist[59]}}%
+
+% south-east distributor with lower name [1] and length nx100 units
+\def\basicsedisT[#1]#2{\sdcase{\SEDIST}{}{#2}{#100}}%
+
+% south-east distributor with lower name [1]
+\newcommand{\sedisT}{\@ifnextchar[{\basicsedisT}{\basicsedisT[59]}}%
+
+% south-east dotted arrow of length nx100 units
+\def\basicsedotar[#1]{\sdcase{\SEDOTAR}{}{}{#100}}%
+
+% south-east dotted arrow
+\newcommand{\sedotar}{\@ifnextchar[{\basicsedotar}{\basicsedotar[59]}}%
+
+% south-east dotted arrow with upper name [1] and length nx100 units
+\def\basicSedotar[#1]#2{\sdcase{\SEDOTAR}{#2}{}{#100}}%
+
+% south-east dotted arrow with upper name
+\newcommand{\Sedotar}{\@ifnextchar[{\basicSedotar}{\basicSedotar[59]}}%
+
+% south-east dotted arrow with lower name [1] and length nx100 units
+\def\basicsedotaR[#1]#2{\sdcase{\SEDOTAR}{}{#2}{#100}}%
+
+% south-east dotted arrow with lower name [1]
+\newcommand{\sedotaR}{\@ifnextchar[{\basicsedotaR}{\basicsedotaR[59]}}%
+
+% south-east monomorphism of length nx100 units
+\def\basicsemono[#1]{\sdcase{\SEMONO}{}{}{#100}}%
+
+% south-east monomorphism
+\newcommand{\semono}{\@ifnextchar[{\basicsemono}{\basicsemono[59]}}%
+
+% south-east monomorphism with upper name [1] and length nx100 units
+\def\basicSemono[#1]#2{\sdcase{\SEMONO}{#2}{}{#100}}%
+
+% south-east monomophism with upper name
+\newcommand{\Semono}{\@ifnextchar[{\basicSemono}{\basicSemono[59]}}%
+
+% south-east monomorphism with lower name [1] and length nx100 units
+\def\basicsemonO[#1]#2{\sdcase{\SEMONO}{}{#2}{#100}}%
+
+% south-east monomorphism with lower name [1]
+\newcommand{\semonO}{\@ifnextchar[{\basicsemonO}{\basicsemonO[59]}}%
+
+% south-east epimorphism of length nx100 units
+\def\basicseepi[#1]{\sdcase{\SEEPI}{}{}{#100}}%
+
+% south-east epimorphism
+\newcommand{\seepi}{\@ifnextchar[{\basicseepi}{\basicseepi[59]}}%
+
+% south-east epimorphism with upper name [1] and length nx100 units
+\def\basicSeepi[#1]#2{\sdcase{\SEEPI}{#2}{}{#100}}%
+
+% south-east epimorphism with upper name
+\newcommand{\Seepi}{\@ifnextchar[{\basicSeepi}{\basicSeepi[59]}}%
+
+% south-east epimorphism with lower name [1] and length nx100 units
+\def\basicseepI[#1]#2{\sdcase{\SEEPI}{}{#2}{#100}}%
+
+% south-east epimorphism with lower name [1]
+\newcommand{\seepI}{\@ifnextchar[{\basicseepI}{\basicseepI[59]}}%
+
+% south-east bimorphism of length nx100 units
+\def\basicsebimo[#1]{\sdcase{\SEBIMO}{}{}{#100}}%
+
+% south-east bimorphism
+\newcommand{\sebimo}{\@ifnextchar[{\basicsebimo}{\basicsebimo[59]}}%
+
+% south-east bimorphism with upper name [1] and length nx100 units
+\def\basicSebimo[#1]#2{\sdcase{\SEBIMO}{#2}{}{#100}}%
+
+% south-east bimorphism with upper name
+\newcommand{\Sebimo}{\@ifnextchar[{\basicSebimo}{\basicSebimo[59]}}%
+
+% south-east bimorphism with lower name [1] and length nx100 units
+\def\basicsebimO[#1]#2{\sdcase{\SEBIMO}{}{#2}{#100}}%
+
+% south-east bimorphism with lower name [1]
+\newcommand{\sebimO}{\@ifnextchar[{\basicsebimO}{\basicsebimO[59]}}%
+
+% south-east isomorphism of length nx100 units
+\def\basicseiso[#1]{\sdcase{\SEAR}{\hspace{-2pt}\cong}{}{#100}}%
+
+% south-east isomorphism
+\newcommand{\seiso}{\@ifnextchar[{\basicseiso}{\basicseiso[59]}}%
+
+% south-east isomorphism with upper name [1] and length nx100 units
+\def\basicSeiso[#1]#2{\sdcase{\SEAR}{#2}{\cong}{#100}}%
+
+% south-east isomorphism with upper name
+\newcommand{\Seiso}{\@ifnextchar[{\basicSeiso}{\basicSeiso[59]}}%
+
+% south-east isomorphism with lower name [1] and length nx100 units
+\def\basicseisO[#1]#2{\sdcase{\SEAR}{\hspace{-2pt}\cong}{#2}{#100}}%
+
+% south-east isomorphism with lower name [1]
+\newcommand{\seisO}{\@ifnextchar[{\basicseisO}{\basicseisO[59]}}%
+
+% south-east equality of length nx100 units
+\def\basicseeql[#1]{\sdcase{\SEEQL}{}{}{#100}}%
+
+% south-east equality
+\newcommand{\seeql}{\@ifnextchar[{\basicseeql}{\basicseeql[59]}}%
+
+% south-east equality with upper name [1] and length nx100 units
+\def\basicSeeql[#1]#2{\sdcase{\SEEQL}{#2}{}{#100}}%
+
+% south-east equality with upper name
+\newcommand{\Seeql}{\@ifnextchar[{\basicSeeql}{\basicSeeql[59]}}%
+
+% south-east equality with lower name [1] and length nx100 units
+\def\basicseeqL[#1]#2{\sdcase{\SEEQL}{}{#2}{#100}}%
+
+% south-east equality with lower name [1]
+\newcommand{\seeqL}{\@ifnextchar[{\basicseeqL}{\basicseeqL[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
+
+% pair of south-east distributors of length nx100 units
+\def\basicsebidist[#1]{\sdbicase{\SEBIDIST}{}{}{#100}}%
+
+% pair of south-east distributors
+\newcommand{\sebidist}{\@ifnextchar[{\basicsebidist}{\basicsebidist[59]}}%
+
+% pair of south-east distributors with names [1][2] and length nx100 units
+\def\basicSebidist[#1]#2#3{\sdbicase{\SEBIDIST}{#2}{#3}{#100}}%
+
+% pair of south-east distributors with names
+\newcommand{\Sebidist}{\@ifnextchar[{\basicSebidist}{\basicSebidist[59]}}%
+\let\sebidisT=\Sebidist
+
+% pair of south-east adjoint distributors of length nx100 units
+\def\basicseadjdist[#1]{\sdbicase{\SEADJDIST}{}{}{#100}}%
+
+% pair of south-east adjoint distributors
+\newcommand{\seadjdist}{\@ifnextchar[{\basicseadjdist}{\basicseadjdist[59]}}%
+
+% pair of south-east adjoint distributors with names [1][2] and length nx100 units
+\def\basicSeadjdist[#1]#2#3{\sdbicase{\SEADJDIST}{#2}{#3}{#100}}%
+
+% pair of south-east adjoint distributors with names
+\newcommand{\Seadjdist}{\@ifnextchar[{\basicSeadjdist}{\basicSeadjdist[59]}}%
+\let\seadjdisT=\Seadjdist
+
+
+% 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){\line(-1,1){#1}}%
+\put(-\Y,\Y){\nwhead}%
+\end{picture}}%
+
+% \NWDIST{n} draws a north-west distributor of length n units
+\newcommand{\NWDIST}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(\Y,-\Y){\line(-1,1){#1}}%
+\put(-\Y,\Y){\nwhead}%
+\truex{400}%
+\put(0,0){\circle{\value{x}}}%
+\end{picture}}%
+
+% \NWDOTAR{n} draws a north-west dotted arrow of length n units
+\newcommand{\NWDOTAR}[1]%
+{\truex{100}\truey{212}%
+\Y=#1%
+\divide\Y by 2%
+\NUMBEROFDOTS=#1%
+\divide\NUMBEROFDOTS by \value{y}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\multiput(\Y,-\Y)(-\value{y},\value{y}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(-\Y,\Y){\nwhead}%
+\end{picture}}%
+
+% \NWMONO{n} draws a north-west monomorphism of length n units
+\newcommand{\NWMONO}[1]{%
+\Y=#1%
+\divide \Y by 2%
+\Truetail%
+\bimolength=#1%
+\advance\bimolength by -\Truemonotail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\begin{picture}(0,0)%
+\put(\monolength,-\monolength){\line(-1,1){\bimolength}}%
+\put(\monolength,-\monolength){\nwhead}%
+\put(-\Y,\Y){\nwhead}%
+\end{picture}}%
+
+% \NWEPI{n} draws a north-west epimorphism of length n units
+\newcommand{\NWEPI}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\Truehead%
+\bimolength=#1%
+\advance\bimolength by -\Trueepihead%
+\epilength=\bimolength%
+\advance\epilength by -\Y%
+\begin{picture}(0,0)%
+\put(\Y,-\Y){\line(-1,1){\bimolength}}%
+\put(-\epilength,\epilength){\nwhead}%
+\put(-\Y,\Y){\nwhead}%
+\end{picture}}%
+
+% \NWBIMO{n} draws a north-west bimorphism of length n units
+\newcommand{\NWBIMO}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\Truetail\Truehead%
+\bimolength=#1%
+\advance\bimolength by -\Truemonotail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\advance\bimolength by -\Trueepihead%
+\epilength=\bimolength%
+\advance\epilength by -\monolength%
+\begin{picture}(0,0)%
+\put(\monolength,-\monolength){\line(-1,1){\bimolength}}%
+\put(\monolength,-\monolength){\nwhead}%
+\put(-\epilength,\epilength){\nwhead}%
+\put(-\Y,\Y){\nwhead}%
+\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}){\line(-1,1){#1}}%
+\put(\value{x},\value{x}){\line(-1,1){#1}}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(-\monolength,\epilength){\nwhead}%
+\put(-\epilength,\monolength){\nwhead}%
+\end{picture}}\end{picture}}%
+
+% \NWBIDIST{n} draws a pair of north-west distributors of length n units
+\newcommand{\NWBIDIST}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\truey{400}%
+\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}){\line(-1,1){#1}}%
+\put(-\epilength,\monolength){\nwhead}%
+\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}){\line(-1,1){#1}}%
+\put(-\epilength,\monolength){\nwhead}%
+\end{picture}}%
+\put(-\value{x},-\value{x}){\circle{\value{y}}}%
+\put(\value{x},\value{x}){\circle{\value{y}}}%
+\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}){\line(-1,1){#1}}%
+\put(-\epilength,\monolength){\nwhead}%
+\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}){\line(1,-1){#1}}%
+\put(\epilength,-\monolength){\sehead}%
+\end{picture}}\end{picture}}%
+
+% \NWADJDIST{n} draws a north-west pair of adjoint distributors of length n units
+\newcommand{\NWADJDIST}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\truey{400}%
+\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}){\line(-1,1){#1}}%
+\put(-\epilength,\monolength){\nwhead}%
+\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}){\line(1,-1){#1}}%
+\put(\epilength,-\monolength){\sehead}%
+\end{picture}}%
+\put(-\value{x},-\value{x}){\circle{\value{y}}}%
+\put(\value{x},\value{x}){\circle{\value{y}}}%
+\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]}}%
+
+% north-west distributor of length nx100 units
+\def\basicnwdist[#1]{\sdcase{\NWDIST}{}{}{#100}}%
+
+% north-west distributor
+\newcommand{\nwdist}{\@ifnextchar[{\basicnwdist}{\basicnwdist[59]}}%
+
+% north-west distributor with upper name [1] and length nx100 units
+\def\basicNwdist[#1]#2{\sdcase{\NWDIST}{#2}{}{#100}}%
+
+% north-west distributor with upper name
+\newcommand{\Nwdist}{\@ifnextchar[{\basicNwdist}{\basicNwdist[59]}}%
+
+% north-west distributor with lower name [1] and length nx100 units
+\def\basicnwdisT[#1]#2{\sdcase{\NWDIST}{}{#2}{#100}}%
+
+% north-west distributor with lower name [1]
+\newcommand{\nwdisT}{\@ifnextchar[{\basicnwdisT}{\basicnwdisT[59]}}%
+
+% north-west dotted arrow of length nx100 units
+\def\basicnwdotar[#1]{\sdcase{\NWDOTAR}{}{}{#100}}%
+
+% north-west dotted arrow
+\newcommand{\nwdotar}{\@ifnextchar[{\basicnwdotar}{\basicnwdotar[59]}}%
+
+% north-west dotted arrow with upper name [1] and length nx100 units
+\def\basicNwdotar[#1]#2{\sdcase{\NWDOTAR}{#2}{}{#100}}%
+
+% north-west dotted arrow with upper name
+\newcommand{\Nwdotar}{\@ifnextchar[{\basicNwdotar}{\basicNwdotar[59]}}%
+
+% north-west dotted arrow with lower name [1] and length nx100 units
+\def\basicnwdotaR[#1]#2{\sdcase{\NWDOTAR}{}{#2}{#100}}%
+
+% north-west dotted arrow with lower name [1]
+\newcommand{\nwdotaR}{\@ifnextchar[{\basicnwdotaR}{\basicnwdotaR[59]}}%
+
+% north-west monomorphism of length nx100 units
+\def\basicnwmono[#1]{\sdcase{\NWMONO}{}{}{#100}}%
+
+% north-west monomorphism
+\newcommand{\nwmono}{\@ifnextchar[{\basicnwmono}{\basicnwmono[59]}}%
+
+% north-west monomorphism with upper name [1] and length nx100 units
+\def\basicNwmono[#1]#2{\sdcase{\NWMONO}{#2}{}{#100}}%
+
+% north-west monomophism with upper name
+\newcommand{\Nwmono}{\@ifnextchar[{\basicNwmono}{\basicNwmono[59]}}%
+
+% north-west monomorphism with lower name [1] and length nx100 units
+\def\basicnwmonO[#1]#2{\sdcase{\NWMONO}{}{#2}{#100}}%
+
+% north-west monomorphism with lower name [1]
+\newcommand{\nwmonO}{\@ifnextchar[{\basicnwmonO}{\basicnwmonO[59]}}%
+
+% north-west epimorphism of length nx100 units
+\def\basicnwepi[#1]{\sdcase{\NWEPI}{}{}{#100}}%
+
+% north-west epimorphism
+\newcommand{\nwepi}{\@ifnextchar[{\basicnwepi}{\basicnwepi[59]}}%
+
+% north-west epimorphism with upper name [1] and length nx100 units
+\def\basicNwepi[#1]#2{\sdcase{\NWEPI}{#2}{}{#100}}%
+
+% north-west epimorphism with upper name
+\newcommand{\Nwepi}{\@ifnextchar[{\basicNwepi}{\basicNwepi[59]}}%
+
+% north-west epimorphism with lower name [1] and length nx100 units
+\def\basicnwepI[#1]#2{\sdcase{\NWEPI}{}{#2}{#100}}%
+
+% north-west epimorphism with lower name [1]
+\newcommand{\nwepI}{\@ifnextchar[{\basicnwepI}{\basicnwepI[59]}}%
+
+% north-west bimorphism of length nx100 units
+\def\basicnwbimo[#1]{\sdcase{\NWBIMO}{}{}{#100}}%
+
+% north-west bimorphism
+\newcommand{\nwbimo}{\@ifnextchar[{\basicnwbimo}{\basicnwbimo[59]}}%
+
+% north-west bimorphism with upper name [1] and length nx100 units
+\def\basicNwbimo[#1]#2{\sdcase{\NWBIMO}{#2}{}{#100}}%
+
+% north-west bimorphism with upper name
+\newcommand{\Nwbimo}{\@ifnextchar[{\basicNwbimo}{\basicNwbimo[59]}}%
+
+% north-west bimorphism with lower name [1] and length nx100 units
+\def\basicnwbimO[#1]#2{\sdcase{\NWBIMO}{}{#2}{#100}}%
+
+% north-west bimorphism with lower name [1]
+\newcommand{\nwbimO}{\@ifnextchar[{\basicnwbimO}{\basicnwbimO[59]}}%
+
+% north-west isomorphism of length nx100 units
+\def\basicnwiso[#1]{\sdcase{\NWAR}{\hspace{-2pt}\cong}{}{#100}}%
+
+% north-west isomorphism
+\newcommand{\nwiso}{\@ifnextchar[{\basicnwiso}{\basicnwiso[59]}}%
+
+% north-west isomorphism with upper name [1] and length nx100 units
+\def\basicNwiso[#1]#2{\sdcase{\NWAR}{#2}{\cong}{#100}}%
+
+% north-west isomorphism with upper name
+\newcommand{\Nwiso}{\@ifnextchar[{\basicNwiso}{\basicNwiso[59]}}%
+
+% north-west isomorphism with lower name [1] and length nx100 units
+\def\basicnwisO[#1]#2{\sdcase{\NWAR}{\hspace{-2pt}\cong}{#2}{#100}}%
+
+% north-west isomorphism with lower name [1]
+\newcommand{\nwisO}{\@ifnextchar[{\basicnwisO}{\basicnwisO[59]}}%
+
+% north-west equality
+\let\nweql=\seeql%
+
+% north-west equality with upper name
+\let\Nweql=\Seeql%
+
+% north-west equality with lower name [1]
+\let\nweqL=\seeqL%
+
+% 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
+
+% pair of north-west distributors of length nx100 units
+\def\basicnwbidist[#1]{\sdbicase{\NWBIDIST}{}{}{#100}}%
+
+% pair of north-west distributors
+\newcommand{\nwbidist}{\@ifnextchar[{\basicnwbidist}{\basicnwbidist[59]}}%
+
+% pair of north-west distributors with names [1][2] and length nx100 units
+\def\basicNwbidist[#1]#2#3{\sdbicase{\NWBIDIST}{#2}{#3}{#100}}%
+
+% pair of north-west distributors with names
+\newcommand{\Nwbidist}{\@ifnextchar[{\basicNwbidist}{\basicNwbidist[59]}}%
+\let\nwbidisT=\Nwbidist
+
+% pair of north-west adjoint distributors of length nx100 units
+\def\basicnwadjdist[#1]{\sdbicase{\NWADJDIST}{}{}{#100}}%
+
+% pair of north-west adjoint distributors
+\newcommand{\nwadjdist}{\@ifnextchar[{\basicnwadjdist}{\basicnwadjdist[59]}}%
+
+% pair of north-west adjoint distributors with names [1][2] and length nx100 units
+\def\basicNwadjdist[#1]#2#3{\sdbicase{\NWADJDIST}{#2}{#3}{#100}}%
+
+% pair of north-west adjoint distributors with names
+\newcommand{\Nwadjdist}{\@ifnextchar[{\basicNwadjdist}{\basicNwadjdist[59]}}%
+\let\nwadjdisT=\Nwadjdist
+
+
+% 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){\line(2,1){#3}}%
+\put(\Y,\Z){\enehead}%
+\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}}%
+
+% \ENEDIST{f}{g}{n} draws a east-north-east distributor
+% with names f, g and length n units
+\newcommand{\ENEDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-\Z){\line(2,1){#3}}%
+\put(\Y,\Z){\enehead}%
+\truex{400}%
+\put(0,0){\circle{\value{x}}}%
+\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}}%
+
+% \ENEDOTAR{f}{g}{n} draws a north-east dotted arrow
+% with names f,g and length n units
+\newcommand{\ENEDOTAR}[3]{\testdiagrammode%
+\truex{100}\truey{268}\truez{134}%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\NUMBEROFDOTS=#3%
+\divide\NUMBEROFDOTS by \value{y}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\multiput(-\Y,-\Z)(\value{y},\value{z}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(\Y,\Z){\enehead}%
+\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}}%
+
+% \ENEMONO{f}{g}{n} draws a east-north-east monomorphism
+% with names f,g and length n units
+\newcommand{\ENEMONO}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\TrueTail%
+\bimolength=#3%
+\advance\bimolength by -\TrueMonoTail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\secondmonolength=\monolength%
+\divide\secondmonolength by 2%
+\begin{picture}(0,0)%
+\put(-\monolength,-\secondmonolength){\line(2,1){\bimolength}}%
+\put(-\monolength,-\secondmonolength){\enehead}%
+\put(\Y,\Z){\enehead}%
+\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}}%
+
+% \ENEEPI{f}{g}{n} draws a east-north-east epimorphism
+% with names f, g and length n units
+\newcommand{\ENEEPI}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\TrueHead%
+\bimolength=#3%
+\advance\bimolength by -\TrueEpiHead%
+\epilength=\bimolength%
+\advance\epilength by -\Y%
+\secondepilength=\epilength%
+\divide\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-\Z){\line(2,1){\bimolength}}%
+\put(\epilength,\secondepilength){\enehead}%
+\put(\Y,\Z){\enehead}%
+\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}}%
+
+% \ENEBIMO{f}{g}{n} draws a east-north-east bimorphism
+% with names f,g and length n units
+\newcommand{\ENEBIMO}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\TrueTail\TrueHead%
+\bimolength=#3%
+\advance\bimolength by -\TrueMonoTail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\advance\bimolength by -\TrueEpiHead%
+\epilength=\bimolength%
+\advance\epilength by -\monolength%
+\secondmonolength=\monolength%
+\divide\secondmonolength by 2%
+\secondepilength=\epilength%
+\divide\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(-\monolength,-\secondmonolength){\line(2,1){\bimolength}}%
+\put(-\monolength,-\secondmonolength){\enehead}%
+\put(\epilength,\secondepilength){\enehead}%
+\put(\Y,\Z){\enehead}%
+\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}}%
+
+% \ENEEQL{f}{g}{n} draws a east-north-east equality
+% with names f,g and length n units
+\newcommand{\ENEEQL}[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{44}\truey{89}%
+\put(-\value{x},\value{y}){\line(2,1){#3}}%
+\put(\value{x},-\value{y}){\line(2,1){#3}}%
+\end{picture}}%
+\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}){\line(2,1){#3}}%
+\put(\value{x},-\value{y}){\line(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}%
+\put(\monolength,\secondepilength){\enehead}%
+\put(\epilength,\secondmonolength){\enehead}%
+\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}}%
+
+% \ENEBIDIST{f}{g}{n} draws a pair of east-north-east distributors
+% with names f,g and length n units
+\newcommand{\ENEBIDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\truex{156}\truey{313}\truez{400}%
+\put(-\Y,-\Z){\begin{picture}(0,0)%
+\put(-\value{x},\value{y}){\line(2,1){#3}}%
+\put(\value{x},-\value{y}){\line(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}%
+\put(\monolength,\secondepilength){\enehead}%
+\put(\epilength,\secondmonolength){\enehead}%
+\end{picture}}
+\put(-\value{x},\value{y}){\circle{\value{z}}}%
+\put(\value{x},-\value{y}){\circle{\value{z}}}%
+\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}){\line(2,1){#3}}%
+\put(\epilength,\secondmonolength){\enehead}%
+\put(\monolength,\secondepilength){\line(-2,-1){#3}}%
+\put(-\value{x},\value{y}){\wswhead}%
+\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}}%
+
+% \ENEADJDIST{f}{g}{n} draws a east-north-east pair of adjoint distributors
+% with names f,g and length n units
+\newcommand{\ENEADJDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\truex{156}\truey{313}\truez{400}%
+\put(-\Y,-\Z){\begin{picture}(0,0)%
+\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}){\line(2,1){#3}}%
+\put(\epilength,\secondmonolength){\enehead}%
+\put(\monolength,\secondepilength){\line(-2,-1){#3}}%
+\put(-\value{x},\value{y}){\wswhead}%
+\end{picture}}
+\put(-\value{x},\value{y}){\circle{\value{z}}}%
+\put(\value{x},-\value{y}){\circle{\value{z}}}%
+\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 distributor
+\def\basicenedist[#1]{\ENEDIST{}{}{#100}}%
+
+% east-north-east distributor
+\newcommand{\enedist}{\@ifnextchar[{\basicenedist}{\basicenedist[133]}}%
+
+% basic east-north-east distributor with upper name
+\def\basicEnedist[#1]#2{\ENEDIST{#2}{}{#100}}%
+
+% east-north-east distributor with upper name
+\newcommand{\Enedist}{\@ifnextchar[{\basicEnedist}{\basicEnedist[133]}}%
+
+% basic east-north-east distributor with lower name
+\def\basicenedisT[#1]#2{\ENEDIST{}{#2}{#100}}%
+
+% east-north-east distributor with lower name
+\newcommand{\enedisT}{\@ifnextchar[{\basicenedisT}{\basicenedisT[133]}}%
+
+% basic east-north-east dotted arrow
+\def\basicenedotar[#1]{\ENEDOTAR{}{}{#100}}%
+
+% east-north-east dotted arrow
+\newcommand{\enedotar}{\@ifnextchar[{\basicenedotar}{\basicenedotar[133]}}%
+
+% basic east-north-east dotted arrow with upper name
+\def\basicEnedotar[#1]#2{\ENEDOTAR{#2}{}{#100}}%
+
+% east-north-east dotted arrow with upper name
+\newcommand{\Enedotar}{\@ifnextchar[{\basicEnedotar}{\basicEnedotar[133]}}%
+
+% basic east-north-east dotted arrow with lower name
+\def\basicenedotaR[#1]#2{\ENEDOTAR{}{#2}{#100}}%
+
+% east-north-east dotted arrow with lower name
+\newcommand{\enedotaR}{\@ifnextchar[{\basicenedotaR}{\basicenedotaR[133]}}%
+
+% basic east-north-east monomorphism
+\def\basicenemono[#1]{\ENEMONO{}{}{#100}}%
+
+% east-north-east monomorphism
+\newcommand{\enemono}{\@ifnextchar[{\basicenemono}{\basicenemono[133]}}%
+
+% basic east-north-east monomorphism with upper name
+\def\basicEnemono[#1]#2{\ENEMONO{#2}{}{#100}}%
+
+% east-north-east monomorphism with upper name
+\newcommand{\Enemono}{\@ifnextchar[{\basicEnemono}{\basicEnemono[133]}}%
+
+% basic east-north-east monomorphism with lower name
+\def\basicenemonO[#1]#2{\ENEMONO{}{#2}{#100}}%
+
+% east-north-east monomorphism with lower name
+\newcommand{\enemonO}{\@ifnextchar[{\basicenemonO}{\basicenemonO[133]}}%
+
+% basic east-north-east epimorphism
+\def\basiceneepi[#1]{\ENEEPI{}{}{#100}}%
+
+% east-north-east epimorphism
+\newcommand{\eneepi}{\@ifnextchar[{\basiceneepi}{\basiceneepi[133]}}%
+
+% basic east-north-east epimorphism with upper name
+\def\basicEneepi[#1]#2{\ENEEPI{#2}{}{#100}}%
+
+% east-north-east epimorphism with upper name
+\newcommand{\Eneepi}{\@ifnextchar[{\basicEneepi}{\basicEneepi[133]}}%
+
+% basic east-north-east epimorphism with lower name
+\def\basiceneepI[#1]#2{\ENEEPI{}{#2}{#100}}%
+
+% east-north-east epimorphism with lower name
+\newcommand{\eneepI}{\@ifnextchar[{\basiceneepI}{\basiceneepI[133]}}%
+
+% basic east-north-east bimorphism
+\def\basicenebimo[#1]{\ENEBIMO{}{}{#100}}%
+
+% east-north-east bimorphism
+\newcommand{\enebimo}{\@ifnextchar[{\basicenebimo}{\basicenebimo[133]}}%
+
+% basic east-north-east bimorphism with upper name
+\def\basicEnebimo[#1]#2{\ENEBIMO{#2}{}{#100}}%
+
+% east-north-east bimorphism with upper name
+\newcommand{\Enebimo}{\@ifnextchar[{\basicEnebimo}{\basicEnebimo[133]}}%
+
+% basic east-north-east bimorphism with lower name
+\def\basicenebimO[#1]#2{\ENEBIMO{}{#2}{#100}}%
+
+% east-north-east bimorphism with lower name
+\newcommand{\enebimO}{\@ifnextchar[{\basicenebimO}{\basicenebimO[133]}}%
+
+% basic east-north-east isomorphism
+\def\basiceneiso[#1]{\ENEAR{\cong}{}{#100}}%
+
+% east-north-east isomorphism
+\newcommand{\eneiso}{\@ifnextchar[{\basiceneiso}{\basiceneiso[133]}}%
+
+% basic east-north-east isomorphism with upper name
+\def\basicEneiso[#1]#2{\ENEAR{#2}{\cong}{#100}}%
+
+% east-north-east isomorphism with upper name
+\newcommand{\Eneiso}{\@ifnextchar[{\basicEneiso}{\basicEneiso[133]}}%
+
+% basic east-north-east isomorphism with lower name
+\def\basiceneisO[#1]#2{\ENEAR{\cong}{#2}{#100}}%
+
+% east-north-east isomorphism with lower name
+\newcommand{\eneisO}{\@ifnextchar[{\basiceneisO}{\basiceneisO[133]}}%
+
+% basic east-north-east equality
+\def\basiceneeql[#1]{\ENEEQL{}{}{#100}}%
+
+% east-north-east equality
+\newcommand{\eneeql}{\@ifnextchar[{\basiceneeql}{\basiceneeql[133]}}%
+
+% basic east-north-east equality with upper name
+\def\basicEneeql[#1]#2{\ENEEQL{#2}{}{#100}}%
+
+% east-north-east equality with upper name
+\newcommand{\Eneeql}{\@ifnextchar[{\basicEneeql}{\basicEneeql[133]}}%
+
+% basic east-north-east equality with lower name
+\def\basiceneeqL[#1]#2{\ENEEQL{}{#2}{#100}}%
+
+% east-north-east equality with lower name
+\newcommand{\eneeqL}{\@ifnextchar[{\basiceneeqL}{\basiceneeqL[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 distributors
+\def\basicenebidist[#1]{\ENEBIDIST{}{}{#100}}%
+
+% east-north-east pair of distributors
+\newcommand{\enebidist}{\@ifnextchar[{\basicenebidist}{\basicenebidist[133]}}%
+
+% basic east-north-east pair of distributors with names
+\def\basicEnebidist[#1]#2#3{\ENEBIDIST{#2}{#3}{#100}}%
+
+% east-north-east pair of distributors with names
+\newcommand{\Enebidist}{\@ifnextchar[{\basicEnebidist}{\basicEnebidist[133]}}%
+\let\enebidisT=\Enebidist
+
+% 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
+
+% basic east-north-east pair of adjoint distributors
+\def\basiceneadjdist[#1]{\ENEADJDIST{}{}{#100}}%
+
+% east-north-east pair of adjoint distributors
+\newcommand{\eneadjdist}{\@ifnextchar[{\basiceneadjdist}{\basiceneadjdist[133]}}%
+
+% basic east-north-east pair of adjoint distributors with names
+\def\basicEneadjdist[#1]#2#3{\ENEADJDIST{#2}{#3}{#100}}%
+
+% east-north-east pair of adjoint distributors with names
+\newcommand{\Eneadjdist}{\@ifnextchar[{\basicEneadjdist}{\basicEneadjdist[133]}}%
+\let\eneadjdisT=\Eneadjdist
+
+
+% 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){\line(2,-1){#3}}%
+\put(\Y,-\Z){\esehead}%
+\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}}%
+
+% \ESEDIST{f}{g}{n} draws a east-south-east distributor
+% with names f, g and length n units
+\newcommand{\ESEDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,\Z){\line(2,-1){#3}}%
+\put(\Y,-\Z){\esehead}%
+\truex{400}%
+\put(0,0){\circle{\value{x}}}%
+\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}}%
+
+% \ESEDOTAR{f}{g}{n} draws a north-east dotted arrow
+% with names f,g and length n units
+\newcommand{\ESEDOTAR}[3]{\testdiagrammode%
+\truex{100}\truey{268}\truez{134}%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\NUMBEROFDOTS=#3%
+\divide\NUMBEROFDOTS by \value{y}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\multiput(-\Y,\Z)(\value{y},-\value{z}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(\Y,-\Z){\esehead}%
+\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}}%
+
+% \ESEMONO{f}{g}{n} draws a east-south-east monomorphism
+% with names f,g and length n units
+\newcommand{\ESEMONO}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\TrueTail%
+\bimolength=#3%
+\advance\bimolength by -\TrueMonoTail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\secondmonolength=\monolength%
+\divide\secondmonolength by 2%
+\begin{picture}(0,0)%
+\put(-\monolength,\secondmonolength){\line(2,-1){\bimolength}}%
+\put(-\monolength,\secondmonolength){\esehead}%
+\put(\Y,-\Z){\esehead}%
+\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}}%
+
+% \ESEEPI{f}{g}{n} draws a east-south-east epimorphism
+% with names f, g and length n units
+\newcommand{\ESEEPI}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\TrueHead%
+\bimolength=#3%
+\advance\bimolength by -\TrueEpiHead%
+\epilength=\bimolength%
+\advance\epilength by -\Y%
+\secondepilength=\epilength%
+\divide\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(-\Y,\Z){\line(2,-1){\bimolength}}%
+\put(\epilength,-\secondepilength){\esehead}%
+\put(\Y,-\Z){\esehead}%
+\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}}%
+
+% \ESEBIMO{f}{g}{n} draws a east-south-east bimorphism
+% with names f,g and length n units
+\newcommand{\ESEBIMO}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\TrueTail\TrueHead%
+\bimolength=#3%
+\advance\bimolength by -\TrueMonoTail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\advance\bimolength by -\TrueEpiHead%
+\epilength=\bimolength%
+\advance\epilength by -\monolength%
+\secondmonolength=\monolength%
+\divide\secondmonolength by 2%
+\secondepilength=\epilength%
+\divide\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(-\monolength,\secondmonolength){\line(2,-1){\bimolength}}%
+\put(-\monolength,\secondmonolength){\esehead}%
+\put(\epilength,-\secondepilength){\esehead}%
+\put(\Y,-\Z){\esehead}%
+\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}}%
+
+% \ESEEQL{f}{g}{n} draws a east-south-east equality
+% with names f,g and length n units
+\newcommand{\ESEEQL}[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{44}\truey{89}%
+\put(-\value{x},-\value{y}){\line(2,-1){#3}}%
+\put(\value{x},\value{y}){\line(2,-1){#3}}%
+\end{picture}}%
+\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]{%
+\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}){\line(2,-1){#3}}%
+\put(\value{x},\value{y}){\line(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}%
+\put(\monolength,-\secondepilength){\esehead}%
+\put(\epilength,-\secondmonolength){\esehead}%
+\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}}%
+
+% \ESEBIDIST{f}{g}{n} draws a pair of east-south-east distributors
+% with names f,g and length n units
+\newcommand{\ESEBIDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\truex{156}\truey{313}\truez{400}%
+\put(-\Y,\Z){\begin{picture}(0,0)%
+\put(-\value{x},-\value{y}){\line(2,-1){#3}}%
+\put(\value{x},\value{y}){\line(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}%
+\put(\monolength,-\secondepilength){\esehead}%
+\put(\epilength,-\secondmonolength){\esehead}%
+\end{picture}}
+\put(\value{x},\value{y}){\circle{\value{z}}}%
+\put(-\value{x},-\value{y}){\circle{\value{z}}}%
+\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}){\line(2,-1){#3}}%
+\put(\monolength,-\secondepilength){\esehead}%
+\put(\epilength,-\secondmonolength){\line(-2,1){#3}}%
+\put(\value{x},\value{y}){\wnwhead}%
+\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}}%
+
+% \ESEADJDIST{f}{g}{n} draws a east-south-east pair of adjoint distributors
+% with names f,g and length n units
+\newcommand{\ESEADJDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\truex{156}\truey{313}\truez{400}%
+\put(-\Y,\Z){\begin{picture}(0,0)%
+\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}){\line(2,-1){#3}}%
+\put(\monolength,-\secondepilength){\esehead}%
+\put(\epilength,-\secondmonolength){\line(-2,1){#3}}%
+\put(\value{x},\value{y}){\wnwhead}%
+\end{picture}}
+\put(\value{x},\value{y}){\circle{\value{z}}}%
+\put(-\value{x},-\value{y}){\circle{\value{z}}}%
+\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 distributor
+\def\basicesedist[#1]{\ESEDIST{}{}{#100}}%
+
+% east-south-east distributor
+\newcommand{\esedist}{\@ifnextchar[{\basicesedist}{\basicesedist[133]}}%
+
+% basic east-south-east distributor with upper name
+\def\basicEsedist[#1]#2{\ESEDIST{#2}{}{#100}}%
+
+% east-south-east distributor with upper name
+\newcommand{\Esedist}{\@ifnextchar[{\basicEsedist}{\basicEsedist[133]}}%
+
+% basic east-south-east distributor with lower name
+\def\basicesedisT[#1]#2{\ESEDIST{}{#2}{#100}}%
+
+% east-south-east distributor with lower name
+\newcommand{\esedisT}{\@ifnextchar[{\basicesedisT}{\basicesedisT[133]}}%
+
+% basic east-south-east dotted arrow
+\def\basicesedotar[#1]{\ESEDOTAR{}{}{#100}}%
+
+% east-south-east dotted arrow
+\newcommand{\esedotar}{\@ifnextchar[{\basicesedotar}{\basicesedotar[133]}}%
+
+% basic east-south-east dotted arrow with upper name
+\def\basicEsedotar[#1]#2{\ESEDOTAR{#2}{}{#100}}%
+
+% east-south-east dotted arrow with upper name
+\newcommand{\Esedotar}{\@ifnextchar[{\basicEsedotar}{\basicEsedotar[133]}}%
+
+% basic east-south-east dotted arrow with lower name
+\def\basicesedotaR[#1]#2{\ESEDOTAR{}{#2}{#100}}%
+
+% east-south-east dotted arrow with lower name
+\newcommand{\esedotaR}{\@ifnextchar[{\basicesedotaR}{\basicesedotaR[133]}}%
+
+% basic east-south-east monomorphism
+\def\basicesemono[#1]{\ESEMONO{}{}{#100}}%
+
+% east-south-east monomorphism
+\newcommand{\esemono}{\@ifnextchar[{\basicesemono}{\basicesemono[133]}}%
+
+% basic east-south-east monomorphism with upper name
+\def\basicEsemono[#1]#2{\ESEMONO{#2}{}{#100}}%
+
+% east-south-east monomorphism with upper name
+\newcommand{\Esemono}{\@ifnextchar[{\basicEsemono}{\basicEsemono[133]}}%
+
+% basic east-south-east monomorphism with lower name
+\def\basicesemonO[#1]#2{\ESEMONO{}{#2}{#100}}%
+
+% east-south-east monomorphism with lower name
+\newcommand{\esemonO}{\@ifnextchar[{\basicesemonO}{\basicesemonO[133]}}%
+
+% basic east-south-east epimorphism
+\def\basiceseepi[#1]{\ESEEPI{}{}{#100}}%
+
+% east-south-east epimorphism
+\newcommand{\eseepi}{\@ifnextchar[{\basiceseepi}{\basiceseepi[133]}}%
+
+% basic east-south-east epimorphism with upper name
+\def\basicEseepi[#1]#2{\ESEEPI{#2}{}{#100}}%
+
+% east-south-east epimorphism with upper name
+\newcommand{\Eseepi}{\@ifnextchar[{\basicEseepi}{\basicEseepi[133]}}%
+
+% basic east-south-east epimorphism with lower name
+\def\basiceseepI[#1]#2{\ESEEPI{}{#2}{#100}}%
+
+% east-south-east epimorphism with lower name
+\newcommand{\eseepI}{\@ifnextchar[{\basiceseepI}{\basiceseepI[133]}}%
+
+% basic east-south-east bimorphism
+\def\basicesebimo[#1]{\ESEBIMO{}{}{#100}}%
+
+% east-south-east bimorphism
+\newcommand{\esebimo}{\@ifnextchar[{\basicesebimo}{\basicesebimo[133]}}%
+
+% basic east-south-east bimorphism with upper name
+\def\basicEsebimo[#1]#2{\ESEBIMO{#2}{}{#100}}%
+
+% east-south-east bimorphism with upper name
+\newcommand{\Esebimo}{\@ifnextchar[{\basicEsebimo}{\basicEsebimo[133]}}%
+
+% basic east-south-east bimorphism with lower name
+\def\basicesebimO[#1]#2{\ESEBIMO{}{#2}{#100}}%
+
+% east-south-east bimorphism with lower name
+\newcommand{\esebimO}{\@ifnextchar[{\basicesebimO}{\basicesebimO[133]}}%
+
+% basic east-south-east isomorphism
+\def\basiceseiso[#1]{\ESEAR{\cong}{}{#100}}%
+
+% east-south-east isomorphism
+\newcommand{\eseiso}{\@ifnextchar[{\basiceseiso}{\basiceseiso[133]}}%
+
+% basic east-south-east isomorphism with upper name
+\def\basicEseiso[#1]#2{\ESEAR{#2}{\cong}{#100}}%
+
+% east-south-east isomorphism with upper name
+\newcommand{\Eseiso}{\@ifnextchar[{\basicEseiso}{\basicEseiso[133]}}%
+
+% basic east-south-east isomorphism with lower name
+\def\basiceseisO[#1]#2{\ESEAR{\cong}{#2}{#100}}%
+
+% east-south-east isomorphism with lower name
+\newcommand{\eseisO}{\@ifnextchar[{\basiceseisO}{\basiceseisO[133]}}%
+
+% basic east-south-east equality
+\def\basiceseeql[#1]{\ESEEQL{}{}{#100}}%
+
+% east-south-east equality
+\newcommand{\eseeql}{\@ifnextchar[{\basiceseeql}{\basiceseeql[133]}}%
+
+% basic east-south-east equality with upper name
+\def\basicEseeql[#1]#2{\ESEEQL{#2}{}{#100}}%
+
+% east-south-east equality with upper name
+\newcommand{\Eseeql}{\@ifnextchar[{\basicEseeql}{\basicEseeql[133]}}%
+
+% basic east-south-east equality with lower name
+\def\basiceseeqL[#1]#2{\ESEEQL{}{#2}{#100}}%
+
+% east-south-east equality with lower name
+\newcommand{\eseeqL}{\@ifnextchar[{\basiceseeqL}{\basiceseeqL[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 distributors
+\def\basicesebidist[#1]{\ESEBIDIST{}{}{#100}}%
+
+% east-south-east pair of distributors
+\newcommand{\esebidist}{\@ifnextchar[{\basicesebidist}{\basicesebidist[133]}}%
+
+% basic east-south-east pair of distributors with names
+\def\basicEsebidist[#1]#2#3{\ESEBIDIST{#2}{#3}{#100}}%
+
+% east-south-east pair of distributors with names
+\newcommand{\Esebidist}{\@ifnextchar[{\basicEsebidist}{\basicEsebidist[133]}}%
+\let\esebidisT=\Esebidist
+
+% 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
+
+% basic east-south-east pair of adjoint distributors
+\def\basiceseadjdist[#1]{\ESEADJDIST{}{}{#100}}%
+
+% east-south-east pair of adjoint distributors
+\newcommand{\eseadjdist}{\@ifnextchar[{\basiceseadjdist}{\basiceseadjdist[133]}}%
+
+% basic east-south-east pair of adjoint distributors with names
+\def\basicEseadjdist[#1]#2#3{\ESEADJDIST{#2}{#3}{#100}}%
+
+% east-south-east pair of adjoint distributors with names
+\newcommand{\Eseadjdist}{\@ifnextchar[{\basicEseadjdist}{\basicEseadjdist[133]}}%
+\let\eseadjdisT=\Eseadjdist
+
+% 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){\line(-2,-1){#3}}%
+\put(-\Y,-\Z){\wswhead}%
+\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}}%
+
+% \WSWDIST{f}{g}{n} draws a west-south-west distributor
+% with names f, g and length n units
+\newcommand{\WSWDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(\Y,\Z){\line(-2,-1){#3}}%
+\put(-\Y,-\Z){\wswhead}%
+\truex{400}%
+\put(0,0){\circle{\value{x}}}%
+\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}}%
+
+% \WSWDOTAR{f}{g}{n} draws a north-east dotted arrow
+% with names f,g and length n units
+\newcommand{\WSWDOTAR}[3]{\testdiagrammode%
+\truex{100}\truey{268}\truez{134}%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\NUMBEROFDOTS=#3%
+\divide\NUMBEROFDOTS by \value{y}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\multiput(\Y,\Z)(-\value{y},-\value{z}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(-\Y,-\Z){\wswhead}%
+\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}}%
+
+% \WSWMONO{f}{g}{n} draws a west-south-west monomorphism
+% with names f,g and length n units
+\newcommand{\WSWMONO}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\TrueTail%
+\bimolength=#3%
+\advance\bimolength by -\TrueMonoTail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\secondmonolength=\monolength%
+\divide\secondmonolength by 2%
+\begin{picture}(0,0)%
+\put(\monolength,\secondmonolength){\line(-2,-1){\bimolength}}%
+\put(\monolength,\secondmonolength){\wswhead}%
+\put(-\Y,-\Z){\wswhead}%
+\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}}%
+
+% \WSWEPI{f}{g}{n} draws a west-south-west epimorphism
+% with names f, g and length n units
+\newcommand{\WSWEPI}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\TrueHead%
+\bimolength=#3%
+\advance\bimolength by -\TrueEpiHead%
+\epilength=\bimolength%
+\advance\epilength by -\Y%
+\secondepilength=\epilength%
+\divide\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(\Y,\Z){\line(-2,-1){\bimolength}}%
+\put(-\epilength,-\secondepilength){\wswhead}%
+\put(-\Y,-\Z){\wswhead}%
+\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}}%
+
+% \WSWBIMO{f}{g}{n} draws a west-south-west bimorphism
+% with names f,g and length n units
+\newcommand{\WSWBIMO}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\TrueTail\TrueHead%
+\bimolength=#3%
+\advance\bimolength by -\TrueMonoTail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\advance\bimolength by -\TrueEpiHead%
+\epilength=\bimolength%
+\advance\epilength by -\monolength%
+\secondmonolength=\monolength%
+\divide\secondmonolength by 2%
+\secondepilength=\epilength%
+\divide\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(\monolength,\secondmonolength){\line(-2,-1){\bimolength}}%
+\put(\monolength,\secondmonolength){\wswhead}%
+\put(-\epilength,-\secondepilength){\wswhead}%
+\put(-\Y,-\Z){\wswhead}%
+\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}){\line(-2,-1){#3}}%
+\put(\value{x},-\value{y}){\line(-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}%
+\put(-\monolength,-\secondepilength){\wswhead}%
+\put(-\epilength,-\secondmonolength){\wswhead}%
+\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}}%
+
+% \WSWBIDIST{f}{g}{n} draws a pair of west-south-west distributors
+% with names f,g and length n units
+\newcommand{\WSWBIDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\truex{156}\truey{313}\truez{400}%
+\put(\Y,\Z){\begin{picture}(0,0)%
+\put(-\value{x},\value{y}){\line(-2,-1){#3}}%
+\put(\value{x},-\value{y}){\line(-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}%
+\put(-\monolength,-\secondepilength){\wswhead}%
+\put(-\epilength,-\secondmonolength){\wswhead}%
+\end{picture}}
+\put(-\value{x},\value{y}){\circle{\value{z}}}%
+\put(\value{x},-\value{y}){\circle{\value{z}}}%
+\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}){\line(-2,-1){#3}}%
+\put(-\monolength,-\secondepilength){\wswhead}%
+\put(-\epilength,-\secondmonolength){\line(2,1){#3}}%
+\put(-\value{x},\value{y}){\enehead}%
+\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}}%
+
+% \WSWADJDIST{f}{g}{n} draws a west-south-west pair of adjoint distributors
+% with names f,g and length n units
+\newcommand{\WSWADJDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\truex{156}\truey{313}\truez{400}%
+\put(\Y,\Z){\begin{picture}(0,0)%
+\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}){\line(-2,-1){#3}}%
+\put(-\monolength,-\secondepilength){\wswhead}%
+\put(-\epilength,-\secondmonolength){\line(2,1){#3}}%
+\put(-\value{x},\value{y}){\enehead}%
+\end{picture}}
+\put(-\value{x},\value{y}){\circle{\value{z}}}%
+\put(\value{x},-\value{y}){\circle{\value{z}}}%
+\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 distributor
+\def\basicwswdist[#1]{\WSWDIST{}{}{#100}}%
+
+% west-south-west distributor
+\newcommand{\wswdist}{\@ifnextchar[{\basicwswdist}{\basicwswdist[133]}}%
+
+% basic west-south-west distributor with upper name
+\def\basicWswdist[#1]#2{\WSWDIST{#2}{}{#100}}%
+
+% west-south-west distributor with upper name
+\newcommand{\Wswdist}{\@ifnextchar[{\basicWswdist}{\basicWswdist[133]}}%
+
+% basic west-south-west distributor with lower name
+\def\basicwswdisT[#1]#2{\WSWDIST{}{#2}{#100}}%
+
+% west-south-west distributor with lower name
+\newcommand{\wswdisT}{\@ifnextchar[{\basicwswdisT}{\basicwswdisT[133]}}%
+
+% basic west-south-west dotted arrow
+\def\basicwswdotar[#1]{\WSWDOTAR{}{}{#100}}%
+
+% west-south-west dotted arrow
+\newcommand{\wswdotar}{\@ifnextchar[{\basicwswdotar}{\basicwswdotar[133]}}%
+
+% basic west-south-west dotted arrow with upper name
+\def\basicWswdotar[#1]#2{\WSWDOTAR{#2}{}{#100}}%
+
+% west-south-west dotted arrow with upper name
+\newcommand{\Wswdotar}{\@ifnextchar[{\basicWswdotar}{\basicWswdotar[133]}}%
+
+% basic west-south-west dotted arrow with lower name
+\def\basicwswdotaR[#1]#2{\WSWDOTAR{}{#2}{#100}}%
+
+% west-south-west dotted arrow with lower name
+\newcommand{\wswdotaR}{\@ifnextchar[{\basicwswdotaR}{\basicwswdotaR[133]}}%
+
+% basic west-south-west monomorphism
+\def\basicwswmono[#1]{\WSWMONO{}{}{#100}}%
+
+% west-south-west monomorphism
+\newcommand{\wswmono}{\@ifnextchar[{\basicwswmono}{\basicwswmono[133]}}%
+
+% basic west-south-west monomorphism with upper name
+\def\basicWswmono[#1]#2{\WSWMONO{#2}{}{#100}}%
+
+% west-south-west monomorphism with upper name
+\newcommand{\Wswmono}{\@ifnextchar[{\basicWswmono}{\basicWswmono[133]}}%
+
+% basic west-south-west monomorphism with lower name
+\def\basicwswmonO[#1]#2{\WSWMONO{}{#2}{#100}}%
+
+% west-south-west monomorphism with lower name
+\newcommand{\wswmonO}{\@ifnextchar[{\basicwswmonO}{\basicwswmonO[133]}}%
+
+% basic west-south-west epimorphism
+\def\basicwswepi[#1]{\WSWEPI{}{}{#100}}%
+
+% west-south-west epimorphism
+\newcommand{\wswepi}{\@ifnextchar[{\basicwswepi}{\basicwswepi[133]}}%
+
+% basic west-south-west epimorphism with upper name
+\def\basicWswepi[#1]#2{\WSWEPI{#2}{}{#100}}%
+
+% west-south-west epimorphism with upper name
+\newcommand{\Wswepi}{\@ifnextchar[{\basicWswepi}{\basicWswepi[133]}}%
+
+% basic west-south-west epimorphism with lower name
+\def\basicwswepI[#1]#2{\WSWEPI{}{#2}{#100}}%
+
+% west-south-west epimorphism with lower name
+\newcommand{\wswepI}{\@ifnextchar[{\basicwswepI}{\basicwswepI[133]}}%
+
+% basic west-south-west bimorphism
+\def\basicwswbimo[#1]{\WSWBIMO{}{}{#100}}%
+
+% west-south-west bimorphism
+\newcommand{\wswbimo}{\@ifnextchar[{\basicwswbimo}{\basicwswbimo[133]}}%
+
+% basic west-south-west bimorphism with upper name
+\def\basicWswbimo[#1]#2{\WSWBIMO{#2}{}{#100}}%
+
+% west-south-west bimorphism with upper name
+\newcommand{\Wswbimo}{\@ifnextchar[{\basicWswbimo}{\basicWswbimo[133]}}%
+
+% basic west-south-west bimorphism with lower name
+\def\basicwswbimO[#1]#2{\WSWBIMO{}{#2}{#100}}%
+
+% west-south-west bimorphism with lower name
+\newcommand{\wswbimO}{\@ifnextchar[{\basicwswbimO}{\basicwswbimO[133]}}%
+
+% basic west-south-west isomorphism
+\def\basicwswiso[#1]{\WSWAR{\cong}{}{#100}}%
+
+% west-south-west isomorphism
+\newcommand{\wswiso}{\@ifnextchar[{\basicwswiso}{\basicwswiso[133]}}%
+
+% basic west-south-west isomorphism with upper name
+\def\basicWswiso[#1]#2{\WSWAR{#2}{\cong}{#100}}%
+
+% west-south-west isomorphism with upper name
+\newcommand{\Wswiso}{\@ifnextchar[{\basicWswiso}{\basicWswiso[133]}}%
+
+% basic west-south-west isomorphism with lower name
+\def\basicwswisO[#1]#2{\WSWAR{\cong}{#2}{#100}}%
+
+% west-south-west isomorphism with lower name
+\newcommand{\wswisO}{\@ifnextchar[{\basicwswisO}{\basicwswisO[133]}}%
+
+% west-south-west equality
+\let\wsweql=\eneeql%
+
+% west-south-west equality with upper name
+\let\Wsweql=\Eneeql%
+
+% west-south-west equality with lower name
+\let\wsweqL=\eneeqL%
+
+% 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 distributors
+\def\basicwswbidist[#1]{\WSWBIDIST{}{}{#100}}%
+
+% west-south-west pair of distributors
+\newcommand{\wswbidist}{\@ifnextchar[{\basicwswbidist}{\basicwswbidist[133]}}%
+
+% basic west-south-west pair of distributors with names
+\def\basicWswbidist[#1]#2#3{\WSWBIDIST{#2}{#3}{#100}}%
+
+% west-south-west pair of distributors with names
+\newcommand{\Wswbidist}{\@ifnextchar[{\basicWswbidist}{\basicWswbidist[133]}}%
+\let\wswbidisT=\Wswbidist
+
+% 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
+
+% basic west-south-west pair of adjoint distributors
+\def\basicwswadjdist[#1]{\WSWADJDIST{}{}{#100}}%
+
+% west-south-west pair of adjoint distributors
+\newcommand{\wswadjdist}{\@ifnextchar[{\basicwswadjdist}{\basicwswadjdist[133]}}%
+
+% basic west-south-west pair of adjoint distributors with names
+\def\basicWswadjdist[#1]#2#3{\WSWADJDIST{#2}{#3}{#100}}%
+
+% west-south-west pair of adjoint distributors with names
+\newcommand{\Wswadjdist}{\@ifnextchar[{\basicWswadjdist}{\basicWswadjdist[133]}}%
+\let\wswadjdisT=\Wswadjdist
+
+
+% 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){\line(-2,1){#3}}%
+\put(-\Y,\Z){\wnwhead}%
+\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}}%
+
+% \WNWDIST{f}{g}{n} draws a west-north-west distributor
+% with names f, g and length n units
+\newcommand{\WNWDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(\Y,-\Z){\line(-2,1){#3}}%
+\put(-\Y,\Z){\wnwhead}%
+\truex{400}%
+\put(0,0){\circle{\value{x}}}%
+\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}}%
+
+% \WNWDOTAR{f}{g}{n} draws a north-east dotted arrow
+% with names f,g and length n units
+\newcommand{\WNWDOTAR}[3]{\testdiagrammode%
+\truex{100}\truey{268}\truez{134}%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\NUMBEROFDOTS=#3%
+\divide\NUMBEROFDOTS by \value{y}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\multiput(\Y,-\Z)(-\value{y},\value{z}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(-\Y,\Z){\wnwhead}%
+\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}}%
+
+% \WNWMONO{f}{g}{n} draws a west-north-west monomorphism
+% with names f,g and length n units
+\newcommand{\WNWMONO}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\TrueTail%
+\bimolength=#3%
+\advance\bimolength by -\TrueMonoTail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\secondmonolength=\monolength%
+\divide\secondmonolength by 2%
+\begin{picture}(0,0)%
+\put(\monolength,-\secondmonolength){\line(-2,1){\bimolength}}%
+\put(\monolength,-\secondmonolength){\wnwhead}%
+\put(-\Y,\Z){\wnwhead}%
+\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}}%
+
+% \WNWEPI{f}{g}{n} draws a west-north-west epimorphism
+% with names f, g and length n units
+\newcommand{\WNWEPI}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\TrueHead%
+\bimolength=#3%
+\advance\bimolength by -\TrueEpiHead%
+\epilength=\bimolength%
+\advance\epilength by -\Y%
+\secondepilength=\epilength%
+\divide\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(\Y,-\Z){\line(-2,1){\bimolength}}%
+\put(-\epilength,\secondepilength){\wnwhead}%
+\put(-\Y,\Z){\wnwhead}%
+\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}}%
+
+% \WNWBIMO{f}{g}{n} draws a west-north-west bimorphism
+% with names f,g and length n units
+\newcommand{\WNWBIMO}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\TrueTail\TrueHead%
+\bimolength=#3%
+\advance\bimolength by -\TrueMonoTail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\advance\bimolength by -\TrueEpiHead%
+\epilength=\bimolength%
+\advance\epilength by -\monolength%
+\secondmonolength=\monolength%
+\divide\secondmonolength by 2%
+\secondepilength=\epilength%
+\divide\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(\monolength,-\secondmonolength){\line(-2,1){\bimolength}}%
+\put(\monolength,-\secondmonolength){\wnwhead}%
+\put(-\epilength,\secondepilength){\wnwhead}%
+\put(-\Y,\Z){\wnwhead}%
+\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}){\line(-2,1){#3}}%
+\put(\value{x},\value{y}){\line(-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}%
+\put(-\monolength,\secondepilength){\wnwhead}%
+\put(-\epilength,\secondmonolength){\wnwhead}%
+\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}}%
+
+% \WNWBIDIST{f}{g}{n} draws a pair of west-north-west distributors
+% with names f,g and length n units
+\newcommand{\WNWBIDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\truex{156}\truey{313}\truez{400}%
+\put(\Y,-\Z){\begin{picture}(0,0)%
+\put(-\value{x},-\value{y}){\line(-2,1){#3}}%
+\put(\value{x},\value{y}){\line(-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}%
+\put(-\monolength,\secondepilength){\wnwhead}%
+\put(-\epilength,\secondmonolength){\wnwhead}%
+\end{picture}}
+\put(\value{x},\value{y}){\circle{\value{z}}}%
+\put(-\value{x},-\value{y}){\circle{\value{z}}}%
+\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}){\line(-2,1){#3}}%
+\put(-\epilength,\secondmonolength){\wnwhead}%
+\put(-\monolength,\secondepilength){\line(2,-1){#3}}%
+\put(\value{x},\value{y}){\esehead}%
+\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}}%
+
+% \WNWADJDIST{f}{g}{n} draws a west-north-west pair of adjoint distributors
+% with names f,g and length n units
+\newcommand{\WNWADJDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\truex{156}\truey{313}\truez{400}%
+\put(\Y,-\Z){\begin{picture}(0,0)%
+\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}){\line(-2,1){#3}}%
+\put(-\epilength,\secondmonolength){\wnwhead}%
+\put(-\monolength,\secondepilength){\line(2,-1){#3}}%
+\put(\value{x},\value{y}){\esehead}%
+\end{picture}}
+\put(\value{x},\value{y}){\circle{\value{z}}}%
+\put(-\value{x},-\value{y}){\circle{\value{z}}}%
+\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}}%
+
+% west-north-west distributor
+\newcommand{\wnwdist}{\@ifnextchar[{\basicwnwdist}{\basicwnwdist[133]}}%
+
+% basic west-north-west distributor with upper name
+\def\basicWnwdist[#1]#2{\WNWDIST{#2}{}{#100}}%
+
+% west-north-west distributor with upper name
+\newcommand{\Wnwdist}{\@ifnextchar[{\basicWnwdist}{\basicWnwdist[133]}}%
+
+% basic west-north-west distributor with lower name
+\def\basicwnwdisT[#1]#2{\WNWDIST{}{#2}{#100}}%
+
+% west-north-west distributor with lower name
+\newcommand{\wnwdisT}{\@ifnextchar[{\basicwnwdisT}{\basicwnwdisT[133]}}%
+
+% basic west-north-west dotted arrow
+\def\basicwnwdotar[#1]{\WNWDOTAR{}{}{#100}}%
+
+% west-north-west dotted arrow
+\newcommand{\wnwdotar}{\@ifnextchar[{\basicwnwdotar}{\basicwnwdotar[133]}}%
+
+% basic west-north-west dotted arrow with upper name
+\def\basicWnwdotar[#1]#2{\WNWDOTAR{#2}{}{#100}}%
+
+% west-north-west dotted arrow with upper name
+\newcommand{\Wnwdotar}{\@ifnextchar[{\basicWnwdotar}{\basicWnwdotar[133]}}%
+
+% basic west-north-west dotted arrow with lower name
+\def\basicwnwdotaR[#1]#2{\WNWDOTAR{}{#2}{#100}}%
+
+% west-north-west dotted arrow with lower name
+\newcommand{\wnwdotaR}{\@ifnextchar[{\basicwnwdotaR}{\basicwnwdotaR[133]}}%
+
+% basic west-north-west monomorphism
+\def\basicwnwmono[#1]{\WNWMONO{}{}{#100}}%
+
+% west-north-west monomorphism
+\newcommand{\wnwmono}{\@ifnextchar[{\basicwnwmono}{\basicwnwmono[133]}}%
+
+% basic west-north-west monomorphism with upper name
+\def\basicWnwmono[#1]#2{\WNWMONO{#2}{}{#100}}%
+
+% west-north-west monomorphism with upper name
+\newcommand{\Wnwmono}{\@ifnextchar[{\basicWnwmono}{\basicWnwmono[133]}}%
+
+% basic west-north-west monomorphism with lower name
+\def\basicwnwmonO[#1]#2{\WNWMONO{}{#2}{#100}}%
+
+% west-north-west monomorphism with lower name
+\newcommand{\wnwmonO}{\@ifnextchar[{\basicwnwmonO}{\basicwnwmonO[133]}}%
+
+% basic west-north-west epimorphism
+\def\basicwnwepi[#1]{\WNWEPI{}{}{#100}}%
+
+% west-north-west epimorphism
+\newcommand{\wnwepi}{\@ifnextchar[{\basicwnwepi}{\basicwnwepi[133]}}%
+
+% basic west-north-west epimorphism with upper name
+\def\basicWnwepi[#1]#2{\WNWEPI{#2}{}{#100}}%
+
+% west-north-west epimorphism with upper name
+\newcommand{\Wnwepi}{\@ifnextchar[{\basicWnwepi}{\basicWnwepi[133]}}%
+
+% basic west-north-west epimorphism with lower name
+\def\basicwnwepI[#1]#2{\WNWEPI{}{#2}{#100}}%
+
+% west-north-west epimorphism with lower name
+\newcommand{\wnwepI}{\@ifnextchar[{\basicwnwepI}{\basicwnwepI[133]}}%
+
+% basic west-north-west bimorphism
+\def\basicwnwbimo[#1]{\WNWBIMO{}{}{#100}}%
+
+% west-north-west bimorphism
+\newcommand{\wnwbimo}{\@ifnextchar[{\basicwnwbimo}{\basicwnwbimo[133]}}%
+
+% basic west-north-west bimorphism with upper name
+\def\basicWnwbimo[#1]#2{\WNWBIMO{#2}{}{#100}}%
+
+% west-north-west bimorphism with upper name
+\newcommand{\Wnwbimo}{\@ifnextchar[{\basicWnwbimo}{\basicWnwbimo[133]}}%
+
+% basic west-north-west bimorphism with lower name
+\def\basicwnwbimO[#1]#2{\WNWBIMO{}{#2}{#100}}%
+
+% west-north-west bimorphism with lower name
+\newcommand{\wnwbimO}{\@ifnextchar[{\basicwnwbimO}{\basicwnwbimO[133]}}%
+
+% basic west-north-west isomorphism
+\def\basicwnwiso[#1]{\WNWAR{\cong}{}{#100}}%
+
+% west-north-west isomorphism
+\newcommand{\wnwiso}{\@ifnextchar[{\basicwnwiso}{\basicwnwiso[133]}}%
+
+% basic west-north-west isomorphism with upper name
+\def\basicWnwiso[#1]#2{\WNWAR{#2}{\cong}{#100}}%
+
+% west-north-west isomorphism with upper name
+\newcommand{\Wnwiso}{\@ifnextchar[{\basicWnwiso}{\basicWnwiso[133]}}%
+
+% basic west-north-west isomorphism with lower name
+\def\basicwnwisO[#1]#2{\WNWAR{\cong}{#2}{#100}}%
+
+% west-north-west isomorphism with lower name
+\newcommand{\wnwisO}{\@ifnextchar[{\basicwnwisO}{\basicwnwisO[133]}}%
+
+% west-north-west equality
+\let\wnweql=\eseeql%
+
+% west-north-west equality with upper name
+\let\Wnweql=\Eseeql%
+
+% west-north-west equality with lower name
+\let\wnweqL=\eseeqL%
+
+% 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 distributors
+\def\basicwnwbidist[#1]{\WNWBIDIST{}{}{#100}}%
+
+% west-north-west pair of distributors
+\newcommand{\wnwbidist}{\@ifnextchar[{\basicwnwbidist}{\basicwnwbidist[133]}}%
+
+% basic west-north-west pair of distributors with names
+\def\basicWnwbidist[#1]#2#3{\WNWBIDIST{#2}{#3}{#100}}%
+
+% west-north-west pair of distributors with names
+\newcommand{\Wnwbidist}{\@ifnextchar[{\basicWnwbidist}{\basicWnwbidist[133]}}%
+\let\wnwbidisT=\Wnwbidist
+
+% 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
+
+% basic west-north-west pair of adjoint distributors
+\def\basicwnwadjdist[#1]{\WNWADJDIST{}{}{#100}}%
+
+% west-north-west pair of adjoint distributors
+\newcommand{\wnwadjdist}{\@ifnextchar[{\basicwnwadjdist}{\basicwnwadjdist[133]}}%
+
+% basic west-north-west pair of adjoint distributors with names
+\def\basicWnwadjdist[#1]#2#3{\WNWADJDIST{#2}{#3}{#100}}%
+
+% west-north-west pair of adjoint distributors with names
+\newcommand{\Wnwadjdist}{\@ifnextchar[{\basicWnwadjdist}{\basicWnwadjdist[133]}}%
+\let\wnwadjdisT=\Wnwadjdist
+
+
+% 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){\line(1,2){#3}}%
+\put(\Z,#3){\nnehead}%
+\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}}%
+
+% \NNEDIST{f}{g}{n} draws a north-north-east distributor
+% with names f, g and length n units
+\newcommand{\NNEDIST}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Z,-#3){\line(1,2){#3}}%
+\put(\Z,#3){\nnehead}%
+\truex{400}%
+\put(0,0){\circle{\value{x}}}%
+\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}}%
+
+% \NNEDOTAR{f}{g}{n} draws a north-east dotted arrow
+% with names f,g and length n units
+\newcommand{\NNEDOTAR}[3]{\testdiagrammode%
+\truex{100}\truey{268}\truez{134}%
+\Z=#3%
+\divide\Z by 2%
+\NUMBEROFDOTS=#3%
+\divide\NUMBEROFDOTS by \value{z}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\multiput(-\Z,-#3)(\value{z},\value{y}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(\Z,#3){\nnehead}%
+\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}}%
+
+% \NNEMONO{f}{g}{n} draws a north-north-east monomorphism
+% with names f,g and length n units
+\newcommand{\NNEMONO}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\truetaiL%
+\bimolength=#3%
+\advance\bimolength by -\truemonotaiL%
+\monolength=\bimolength%
+\advance\monolength by -\Z%
+\secondmonolength=\monolength%
+\multiply\secondmonolength by 2%
+\begin{picture}(0,0)%
+\put(-\monolength,-\secondmonolength){\line(1,2){\bimolength}}%
+\put(-\monolength,-\secondmonolength){\nnehead}%
+\put(\Z,#3){\nnehead}%
+\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}}%
+
+% \NNEEPI{f}{g}{n} draws a north-north-east epimorphism
+% with names f, g and length n units
+\newcommand{\NNEEPI}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\trueheaD%
+\bimolength=#3%
+\advance\bimolength by -\trueepiheaD%
+\epilength=\bimolength%
+\advance\epilength by -\Z%
+\secondepilength=\epilength%
+\multiply\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(-\Z,-#3){\line(1,2){\bimolength}}%
+\put(\epilength,\secondepilength){\nnehead}%
+\put(\Z,#3){\nnehead}%
+\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}}%
+
+% \NNEBIMO{f}{g}{n} draws a north-north-east bimorphism
+% with names f,g and length n units
+\newcommand{\NNEBIMO}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\truetaiL\trueheaD%
+\bimolength=#3%
+\advance\bimolength by -\truemonotaiL%
+\monolength=\bimolength%
+\advance\monolength by -\Z%
+\advance\bimolength by -\trueepiheaD%
+\epilength=\bimolength%
+\advance\epilength by -\monolength%
+\secondmonolength=\monolength%
+\multiply\secondmonolength by 2%
+\secondepilength=\epilength%
+\multiply\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(-\monolength,-\secondmonolength){\line(1,2){\bimolength}}%
+\put(-\monolength,-\secondmonolength){\nnehead}%
+\put(\epilength,\secondepilength){\nnehead}%
+\put(\Z,#3){\nnehead}%
+\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}}%
+
+% \NNEEQL{f}{g}{n} draws a north-north-east equality
+% with names f,g and length n units
+\newcommand{\NNEEQL}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Z,-#3){\begin{picture}(0,0)%
+\truex{44}\truey{89}%
+\put(-\value{y},\value{x}){\line(1,2){#3}}%
+\put(\value{y},-\value{x}){\line(1,2){#3}}%
+\end{picture}}%
+\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}){\line(1,2){#3}}%
+\put(\value{x},-\value{y}){\line(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}%
+\put(\monolength,\secondepilength){\nnehead}%
+\put(\epilength,\secondmonolength){\nnehead}%
+\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}}%
+
+% \NNEBIDIST{f}{g}{n} draws a pair of north-north-east distributors
+% with names f,g and length n units
+\newcommand{\NNEBIDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\truex{313}\truey{156}\truez{400}%
+\put(-\Y,-#3){\begin{picture}(0,0)%
+\put(-\value{x},\value{y}){\line(1,2){#3}}%
+\put(\value{x},-\value{y}){\line(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}%
+\put(\monolength,\secondepilength){\nnehead}%
+\put(\epilength,\secondmonolength){\nnehead}%
+\end{picture}}
+\put(-\value{x},\value{y}){\circle{\value{z}}}%
+\put(\value{x},-\value{y}){\circle{\value{z}}}%
+\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}){\line(1,2){#3}}%
+\put(\epilength,\secondmonolength){\nnehead}%
+\put(\monolength,\secondepilength){\line(-1,-2){#3}}%
+\put(-\value{x},\value{y}){\sswhead}%
+\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}}%
+
+% \NNEADJDIST{f}{g}{n} draws a north-north-east pair of adjoint distributors
+% with names f,g and length n units
+\newcommand{\NNEADJDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\truex{313}\truey{156}\truez{400}%
+\put(-\Y,-#3){\begin{picture}(0,0)%
+\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}){\line(1,2){#3}}%
+\put(\epilength,\secondmonolength){\nnehead}%
+\put(\monolength,\secondepilength){\line(-1,-2){#3}}%
+\put(-\value{x},\value{y}){\sswhead}%
+\end{picture}}
+\put(-\value{x},\value{y}){\circle{\value{z}}}%
+\put(\value{x},-\value{y}){\circle{\value{z}}}%
+\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 distributor
+\def\basicnnedist[#1]{\NNEDIST{}{}{#100}}%
+
+% north-north-east distributor
+\newcommand{\nnedist}{\@ifnextchar[{\basicnnedist}{\basicnnedist[67]}}%
+
+% basic north-north-east distributor with upper name
+\def\basicNnedist[#1]#2{\NNEDIST{#2}{}{#100}}%
+
+% north-north-east distributor with upper name
+\newcommand{\Nnedist}{\@ifnextchar[{\basicNnedist}{\basicNnedist[67]}}%
+
+% basic north-north-east distributor with lower name
+\def\basicnnedisT[#1]#2{\NNEDIST{}{#2}{#100}}%
+
+% north-north-east distributor with lower name
+\newcommand{\nnedisT}{\@ifnextchar[{\basicnnedisT}{\basicnnedisT[67]}}%
+
+% basic north-north-east dotted arrow
+\def\basicnnedotar[#1]{\NNEDOTAR{}{}{#100}}%
+
+% north-north-east dotted arrow
+\newcommand{\nnedotar}{\@ifnextchar[{\basicnnedotar}{\basicnnedotar[67]}}%
+
+% basic north-north-east dotted arrow with upper name
+\def\basicNnedotar[#1]#2{\NNEDOTAR{#2}{}{#100}}%
+
+% north-north-east dotted arrow with upper name
+\newcommand{\Nnedotar}{\@ifnextchar[{\basicNnedotar}{\basicNnedotar[67]}}%
+
+% basic north-north-east dotted arrow with lower name
+\def\basicnnedotaR[#1]#2{\NNEDOTAR{}{#2}{#100}}%
+
+% north-north-east dotted arrow with lower name
+\newcommand{\nnedotaR}{\@ifnextchar[{\basicnnedotaR}{\basicnnedotaR[67]}}%
+
+% basic north-north-east monomorphism
+\def\basicnnemono[#1]{\NNEMONO{}{}{#100}}%
+
+% north-north-east monomorphism
+\newcommand{\nnemono}{\@ifnextchar[{\basicnnemono}{\basicnnemono[67]}}%
+
+% basic north-north-east monomorphism with upper name
+\def\basicNnemono[#1]#2{\NNEMONO{#2}{}{#100}}%
+
+% north-north-east monomorphism with upper name
+\newcommand{\Nnemono}{\@ifnextchar[{\basicNnemono}{\basicNnemono[67]}}%
+
+% basic north-north-east monomorphism with lower name
+\def\basicnnemonO[#1]#2{\NNEMONO{}{#2}{#100}}%
+
+% north-north-east monomorphism with lower name
+\newcommand{\nnemonO}{\@ifnextchar[{\basicnnemonO}{\basicnnemonO[67]}}%
+
+% basic north-north-east epimorphism
+\def\basicnneepi[#1]{\NNEEPI{}{}{#100}}%
+
+% north-north-east epimorphism
+\newcommand{\nneepi}{\@ifnextchar[{\basicnneepi}{\basicnneepi[67]}}%
+
+% basic north-north-east epimorphism with upper name
+\def\basicNneepi[#1]#2{\NNEEPI{#2}{}{#100}}%
+
+% north-north-east epimorphism with upper name
+\newcommand{\Nneepi}{\@ifnextchar[{\basicNneepi}{\basicNneepi[67]}}%
+
+% basic north-north-east epimorphism with lower name
+\def\basicnneepI[#1]#2{\NNEEPI{}{#2}{#100}}%
+
+% north-north-east epimorphism with lower name
+\newcommand{\nneepI}{\@ifnextchar[{\basicnneepI}{\basicnneepI[67]}}%
+
+% basic north-north-east bimorphism
+\def\basicnnebimo[#1]{\NNEBIMO{}{}{#100}}%
+
+% north-north-east bimorphism
+\newcommand{\nnebimo}{\@ifnextchar[{\basicnnebimo}{\basicnnebimo[67]}}%
+
+% basic north-north-east bimorphism with upper name
+\def\basicNnebimo[#1]#2{\NNEBIMO{#2}{}{#100}}%
+
+% north-north-east bimorphism with upper name
+\newcommand{\Nnebimo}{\@ifnextchar[{\basicNnebimo}{\basicNnebimo[67]}}%
+
+% basic north-north-east bimorphism with lower name
+\def\basicnnebimO[#1]#2{\NNEBIMO{}{#2}{#100}}%
+
+% north-north-east bimorphism with lower name
+\newcommand{\nnebimO}{\@ifnextchar[{\basicnnebimO}{\basicnnebimO[67]}}%
+
+% basic north-north-east isomorphism
+\def\basicnneiso[#1]{\NNEAR{\cong}{}{#100}}%
+
+% north-north-east isomorphism
+\newcommand{\nneiso}{\@ifnextchar[{\basicnneiso}{\basicnneiso[67]}}%
+
+% basic north-north-east isomorphism with upper name
+\def\basicNneiso[#1]#2{\NNEAR{#2}{\cong}{#100}}%
+
+% north-north-east isomorphism with upper name
+\newcommand{\Nneiso}{\@ifnextchar[{\basicNneiso}{\basicNneiso[67]}}%
+
+% basic north-north-east isomorphism with lower name
+\def\basicnneisO[#1]#2{\NNEAR{\cong}{#2}{#100}}%
+
+% north-north-east isomorphism with lower name
+\newcommand{\nneisO}{\@ifnextchar[{\basicnneisO}{\basicnneisO[67]}}%
+
+% basic north-north-east equality
+\def\basicnneeql[#1]{\NNEEQL{}{}{#100}}%
+
+% north-north-east equality
+\newcommand{\nneeql}{\@ifnextchar[{\basicnneeql}{\basicnneeql[67]}}%
+
+% basic north-north-east equality with upper name
+\def\basicNneeql[#1]#2{\NNEEQL{#2}{}{#100}}%
+
+% north-north-east equality with upper name
+\newcommand{\Nneeql}{\@ifnextchar[{\basicNneeql}{\basicNneeql[67]}}%
+
+% basic north-north-east equality with lower name
+\def\basicnneeqL[#1]#2{\NNEEQL{}{#2}{#100}}%
+
+% north-north-east equality with lower name
+\newcommand{\nneeqL}{\@ifnextchar[{\basicnneeqL}{\basicnneeqL[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 distributors
+\def\basicnnebidist[#1]{\NNEBIDIST{}{}{#100}}%
+
+% north-north-east pair of distributors
+\newcommand{\nnebidist}{\@ifnextchar[{\basicnnebidist}{\basicnnebidist[67]}}%
+
+% basic north-north-east pair of distributors with names
+\def\basicNnebidist[#1]#2#3{\NNEBIDIST{#2}{#3}{#100}}%
+
+% north-north-east pair of distributors with names
+\newcommand{\Nnebidist}{\@ifnextchar[{\basicNnebidist}{\basicNnebidist[67]}}%
+\let\nnebidisT=\Nnebidist
+
+% 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
+
+% basic north-north-east pair of adjoint distributors
+\def\basicnneadjdist[#1]{\NNEADJDIST{}{}{#100}}%
+
+% north-north-east pair of adjoint distributors
+\newcommand{\nneadjdist}{\@ifnextchar[{\basicnneadjdist}{\basicnneadjdist[67]}}%
+
+% basic north-north-east pair of adjoint distributors with names
+\def\basicNneadjdist[#1]#2#3{\NNEADJDIST{#2}{#3}{#100}}%
+
+% north-north-east pair of adjoint distributors with names
+\newcommand{\Nneadjdist}{\@ifnextchar[{\basicNneadjdist}{\basicNneadjdist[67]}}%
+\let\nneadjdisT=\Nneadjdist
+
+
+% 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){\line(1,-2){#3}}%
+\put(\Z,-#3){\ssehead}%
+\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}}%
+
+% \SSEDIST{f}{g}{n} draws a south-south-east distributor
+% with names f, g and length n units
+\newcommand{\SSEDIST}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Z,#3){\line(1,-2){#3}}%
+\put(\Z,-#3){\ssehead}%
+\truex{400}%
+\put(0,0){\circle{\value{x}}}%
+\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}}%
+
+% \SSEDOTAR{f}{g}{n} draws a north-east dotted arrow
+% with names f,g and length n units
+\newcommand{\SSEDOTAR}[3]{\testdiagrammode%
+\truex{100}\truey{268}\truez{134}%
+\Z=#3%
+\divide\Z by 2%
+\NUMBEROFDOTS=#3%
+\divide\NUMBEROFDOTS by \value{z}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\multiput(-\Z,#3)(\value{z},-\value{y}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(\Z,-#3){\ssehead}%
+\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}}%
+
+% \SSEMONO{f}{g}{n} draws a south-south-east monomorphism
+% with names f,g and length n units
+\newcommand{\SSEMONO}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\truetaiL%
+\bimolength=#3%
+\advance\bimolength by -\truemonotaiL%
+\monolength=\bimolength%
+\advance\monolength by -\Z%
+\secondmonolength=\monolength%
+\multiply\secondmonolength by 2%
+\begin{picture}(0,0)%
+\put(-\monolength,\secondmonolength){\line(1,-2){\bimolength}}%
+\put(-\monolength,\secondmonolength){\ssehead}%
+\put(\Z,-#3){\ssehead}%
+\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}}%
+
+% \SSEEPI{f}{g}{n} draws a south-south-east epimorphism
+% with names f, g and length n units
+\newcommand{\SSEEPI}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\trueheaD%
+\bimolength=#3%
+\advance\bimolength by -\trueepiheaD%
+\epilength=\bimolength%
+\advance\epilength by -\Z%
+\secondepilength=\epilength%
+\multiply\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(-\Z,#3){\line(1,-2){\bimolength}}%
+\put(\epilength,-\secondepilength){\ssehead}%
+\put(\Z,-#3){\ssehead}%
+\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}}%
+
+% \SSEBIMO{f}{g}{n} draws a south-south-east bimorphism
+% with names f,g and length n units
+\newcommand{\SSEBIMO}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\truetaiL\trueheaD%
+\bimolength=#3%
+\advance\bimolength by -\truemonotaiL%
+\monolength=\bimolength%
+\advance\monolength by -\Z%
+\advance\bimolength by -\trueepiheaD%
+\epilength=\bimolength%
+\advance\epilength by -\monolength%
+\secondmonolength=\monolength%
+\multiply\secondmonolength by 2%
+\secondepilength=\epilength%
+\multiply\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(-\monolength,\secondmonolength){\line(1,-2){\bimolength}}%
+\put(-\monolength,\secondmonolength){\ssehead}%
+\put(\epilength,-\secondepilength){\ssehead}%
+\put(\Z,-#3){\ssehead}%
+\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}}%
+
+% \SSEEQL{f}{g}{n} draws a south-south-east equality
+% with names f,g and length n units
+\newcommand{\SSEEQL}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Z,#3){\begin{picture}(0,0)%
+\truex{44}\truey{89}%
+\put(-\value{y},-\value{x}){\line(1,-2){#3}}%
+\put(\value{y},\value{x}){\line(1,-2){#3}}%
+\end{picture}}%
+\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}){\line(1,-2){#3}}%
+\put(\value{x},\value{y}){\line(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}%
+\put(\monolength,-\secondepilength){\ssehead}%
+\put(\epilength,-\secondmonolength){\ssehead}%
+\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}}%
+
+% \SSEBIDIST{f}{g}{n} draws a pair of south-south-east distributors
+% with names f,g and length n units
+\newcommand{\SSEBIDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\truex{313}\truey{156}\truez{400}%
+\put(-\Y,#3){\begin{picture}(0,0)%
+\put(-\value{x},-\value{y}){\line(1,-2){#3}}%
+\put(\value{x},\value{y}){\line(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}%
+\put(\monolength,-\secondepilength){\ssehead}%
+\put(\epilength,-\secondmonolength){\ssehead}%
+\end{picture}}
+\put(-\value{x},-\value{y}){\circle{\value{z}}}%
+\put(\value{x},\value{y}){\circle{\value{z}}}%
+\truex{500}\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}){\line(1,-2){#3}}%
+\put(\monolength,-\secondepilength){\ssehead}%
+\put(\epilength,-\secondmonolength){\line(-1,2){#3}}%
+\put(\value{x},\value{y}){\nnwhead}%
+\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}}%
+
+% \SSEADJDIST{f}{g}{n} draws a south-south-east pair of adjoint distributors
+% with names f,g and length n units
+\newcommand{\SSEADJDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\truex{313}\truey{156}\truez{400}%
+\put(-\Y,#3){\begin{picture}(0,0)%
+\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}){\line(1,-2){#3}}%
+\put(\monolength,-\secondepilength){\ssehead}%
+\put(\epilength,-\secondmonolength){\line(-1,2){#3}}%
+\put(\value{x},\value{y}){\nnwhead}%
+\end{picture}}
+\put(\value{x},\value{y}){\circle{\value{z}}}%
+\put(-\value{x},-\value{y}){\circle{\value{z}}}%
+\truex{500}\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 distributor
+\def\basicssedist[#1]{\SSEDIST{}{}{#100}}%
+
+% south-south-east distributor
+\newcommand{\ssedist}{\@ifnextchar[{\basicssedist}{\basicssedist[67]}}%
+
+% basic south-south-east distributor with upper name
+\def\basicSsedist[#1]#2{\SSEDIST{#2}{}{#100}}%
+
+% south-south-east distributor with upper name
+\newcommand{\Ssedist}{\@ifnextchar[{\basicSsedist}{\basicSsedist[67]}}%
+
+% basic south-south-east distributor with lower name
+\def\basicssedisT[#1]#2{\SSEDIST{}{#2}{#100}}%
+
+% south-south-east distributor with lower name
+\newcommand{\ssedisT}{\@ifnextchar[{\basicssedisT}{\basicssedisT[67]}}%
+
+% basic south-south-east dotted arrow
+\def\basicssedotar[#1]{\SSEDOTAR{}{}{#100}}%
+
+% south-south-east dotted arrow
+\newcommand{\ssedotar}{\@ifnextchar[{\basicssedotar}{\basicssedotar[67]}}%
+
+% basic south-south-east dotted arrow with upper name
+\def\basicSsedotar[#1]#2{\SSEDOTAR{#2}{}{#100}}%
+
+% south-south-east dotted arrow with upper name
+\newcommand{\Ssedotar}{\@ifnextchar[{\basicSsedotar}{\basicSsedotar[67]}}%
+
+% basic south-south-east dotted arrow with lower name
+\def\basicssedotaR[#1]#2{\SSEDOTAR{}{#2}{#100}}%
+
+% south-south-east dotted arrow with lower name
+\newcommand{\ssedotaR}{\@ifnextchar[{\basicssedotaR}{\basicssedotaR[67]}}%
+
+% basic south-south-east monomorphism
+\def\basicssemono[#1]{\SSEMONO{}{}{#100}}%
+
+% south-south-east monomorphism
+\newcommand{\ssemono}{\@ifnextchar[{\basicssemono}{\basicssemono[67]}}%
+
+% basic south-south-east monomorphism with upper name
+\def\basicSsemono[#1]#2{\SSEMONO{#2}{}{#100}}%
+
+% south-south-east monomorphism with upper name
+\newcommand{\Ssemono}{\@ifnextchar[{\basicSsemono}{\basicSsemono[67]}}%
+
+% basic south-south-east monomorphism with lower name
+\def\basicssemonO[#1]#2{\SSEMONO{}{#2}{#100}}%
+
+% south-south-east monomorphism with lower name
+\newcommand{\ssemonO}{\@ifnextchar[{\basicssemonO}{\basicssemonO[67]}}%
+
+% basic south-south-east epimorphism
+\def\basicsseepi[#1]{\SSEEPI{}{}{#100}}%
+
+% south-south-east epimorphism
+\newcommand{\sseepi}{\@ifnextchar[{\basicsseepi}{\basicsseepi[67]}}%
+
+% basic south-south-east epimorphism with upper name
+\def\basicSseepi[#1]#2{\SSEEPI{#2}{}{#100}}%
+
+% south-south-east epimorphism with upper name
+\newcommand{\Sseepi}{\@ifnextchar[{\basicSseepi}{\basicSseepi[67]}}%
+
+% basic south-south-east epimorphism with lower name
+\def\basicsseepI[#1]#2{\SSEEPI{}{#2}{#100}}%
+
+% south-south-east epimorphism with lower name
+\newcommand{\sseepI}{\@ifnextchar[{\basicsseepI}{\basicsseepI[67]}}%
+
+% basic south-south-east bimorphism
+\def\basicssebimo[#1]{\SSEBIMO{}{}{#100}}%
+
+% south-south-east bimorphism
+\newcommand{\ssebimo}{\@ifnextchar[{\basicssebimo}{\basicssebimo[67]}}%
+
+% basic south-south-east bimorphism with upper name
+\def\basicSsebimo[#1]#2{\SSEBIMO{#2}{}{#100}}%
+
+% south-south-east bimorphism with upper name
+\newcommand{\Ssebimo}{\@ifnextchar[{\basicSsebimo}{\basicSsebimo[67]}}%
+
+% basic south-south-east bimorphism with lower name
+\def\basicssebimO[#1]#2{\SSEBIMO{}{#2}{#100}}%
+
+% south-south-east bimorphism with lower name
+\newcommand{\ssebimO}{\@ifnextchar[{\basicssebimO}{\basicssebimO[67]}}%
+
+% basic south-south-east isomorphism
+\def\basicsseiso[#1]{\SSEAR{\cong}{}{#100}}%
+
+% south-south-east isomorphism
+\newcommand{\sseiso}{\@ifnextchar[{\basicsseiso}{\basicsseiso[67]}}%
+
+% basic south-south-east isomorphism with upper name
+\def\basicSseiso[#1]#2{\SSEAR{#2}{\cong}{#100}}%
+
+% south-south-east isomorphism with upper name
+\newcommand{\Sseiso}{\@ifnextchar[{\basicSseiso}{\basicSseiso[67]}}%
+
+% basic south-south-east isomorphism with lower name
+\def\basicsseisO[#1]#2{\SSEAR{\cong}{#2}{#100}}%
+
+% south-south-east isomorphism with lower name
+\newcommand{\sseisO}{\@ifnextchar[{\basicsseisO}{\basicsseisO[67]}}%
+
+% basic south-south-east equality
+\def\basicsseeql[#1]{\SSEEQL{}{}{#100}}%
+
+% south-south-east equality
+\newcommand{\sseeql}{\@ifnextchar[{\basicsseeql}{\basicsseeql[67]}}%
+
+% basic south-south-east equality with upper name
+\def\basicSseeql[#1]#2{\SSEEQL{#2}{}{#100}}%
+
+% south-south-east equality with upper name
+\newcommand{\Sseeql}{\@ifnextchar[{\basicSseeql}{\basicSseeql[67]}}%
+
+% basic south-south-east equality with lower name
+\def\basicsseeqL[#1]#2{\SSEEQL{}{#2}{#100}}%
+
+% south-south-east equality with lower name
+\newcommand{\sseeqL}{\@ifnextchar[{\basicsseeqL}{\basicsseeqL[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 distributors
+\def\basicssebidist[#1]{\SSEBIDIST{}{}{#100}}%
+
+% south-south-east pair of distributors
+\newcommand{\ssebidist}{\@ifnextchar[{\basicssebidist}{\basicssebidist[67]}}%
+
+% basic south-south-east pair of distributors with names
+\def\basicSsebidist[#1]#2#3{\SSEBIDIST{#2}{#3}{#100}}%
+
+% south-south-east pair of distributors with names
+\newcommand{\Ssebidist}{\@ifnextchar[{\basicSsebidist}{\basicSsebidist[67]}}%
+\let\ssebidisT=\Ssebidist
+
+% 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
+
+% basic south-south-east pair of adjoint distributors
+\def\basicsseadjdist[#1]{\SSEADJDIST{}{}{#100}}%
+
+% south-south-east pair of adjoint distributors
+\newcommand{\sseadjdist}{\@ifnextchar[{\basicsseadjdist}{\basicsseadjdist[67]}}%
+
+% basic south-south-east pair of adjoint distributors with names
+\def\basicSseadjdist[#1]#2#3{\SSEADJDIST{#2}{#3}{#100}}%
+
+% south-south-east pair of adjoint distributors with names
+\newcommand{\Sseadjdist}{\@ifnextchar[{\basicSseadjdist}{\basicSseadjdist[67]}}%
+\let\sseadjdisT=\Sseadjdist
+
+
+% 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){\line(-1,-2){#3}}%
+\put(-\Z,-#3){\sswhead}%
+\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}}%
+
+% \SSWDIST{f}{g}{n} draws a south-south-west distributor
+% with names f, g and length n units
+\newcommand{\SSWDIST}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(\Z,#3){\line(-1,-2){#3}}%
+\put(-\Z,-#3){\sswhead}%
+\truex{400}%
+\put(0,0){\circle{\value{x}}}%
+\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}}%
+
+% \SSWDOTAR{f}{g}{n} draws a north-east dotted arrow
+% with names f,g and length n units
+\newcommand{\SSWDOTAR}[3]{\testdiagrammode%
+\truex{100}\truey{268}\truez{134}%
+\Z=#3%
+\divide\Z by 2%
+\NUMBEROFDOTS=#3%
+\divide\NUMBEROFDOTS by \value{z}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\multiput(\Z,#3)(-\value{z},-\value{y}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(-\Z,-#3){\sswhead}%
+\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}}%
+
+% \SSWMONO{f}{g}{n} draws a south-south-west monomorphism
+% with names f,g and length n units
+\newcommand{\SSWMONO}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\truetaiL%
+\bimolength=#3%
+\advance\bimolength by -\truemonotaiL%
+\monolength=\bimolength%
+\advance\monolength by -\Z%
+\secondmonolength=\monolength%
+\multiply\secondmonolength by 2%
+\begin{picture}(0,0)%
+\put(\monolength,\secondmonolength){\line(-1,-2){\bimolength}}%
+\put(\monolength,\secondmonolength){\sswhead}%
+\put(-\Z,-#3){\sswhead}%
+\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}}%
+
+% \SSWEPI{f}{g}{n} draws a south-south-west epimorphism
+% with names f, g and length n units
+\newcommand{\SSWEPI}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\trueheaD%
+\bimolength=#3%
+\advance\bimolength by -\trueepiheaD%
+\epilength=\bimolength%
+\advance\epilength by -\Z%
+\secondepilength=\epilength%
+\multiply\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(\Z,#3){\line(-1,-2){\bimolength}}%
+\put(-\epilength,-\secondepilength){\sswhead}%
+\put(-\Z,-#3){\sswhead}%
+\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}}%
+
+% \SSWBIMO{f}{g}{n} draws a south-south-west bimorphism
+% with names f,g and length n units
+\newcommand{\SSWBIMO}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\truetaiL\trueheaD%
+\bimolength=#3%
+\advance\bimolength by -\truemonotaiL%
+\monolength=\bimolength%
+\advance\monolength by -\Z%
+\advance\bimolength by -\trueepiheaD%
+\epilength=\bimolength%
+\advance\epilength by -\monolength%
+\secondmonolength=\monolength%
+\multiply\secondmonolength by 2%
+\secondepilength=\epilength%
+\multiply\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(\monolength,\secondmonolength){\line(-1,-2){\bimolength}}%
+\put(\monolength,\secondmonolength){\sswhead}%
+\put(-\epilength,-\secondepilength){\sswhead}%
+\put(-\Z,-#3){\sswhead}%
+\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}){\line(-1,-2){#3}}%
+\put(\value{x},-\value{y}){\line(-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}%
+\put(-\monolength,-\secondepilength){\sswhead}%
+\put(-\epilength,-\secondmonolength){\sswhead}%
+\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}}%
+
+% \SSWBIDIST{f}{g}{n} draws a pair of south-south-west distributors
+% with names f,g and length n units
+\newcommand{\SSWBIDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\truex{313}\truey{156}\truez{400}%
+\put(\Y,#3){\begin{picture}(0,0)%
+\put(-\value{x},\value{y}){\line(-1,-2){#3}}%
+\put(\value{x},-\value{y}){\line(-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}%
+\put(-\monolength,-\secondepilength){\sswhead}%
+\put(-\epilength,-\secondmonolength){\sswhead}%
+\end{picture}}
+\put(-\value{x},\value{y}){\circle{\value{z}}}%
+\put(\value{x},-\value{y}){\circle{\value{z}}}%
+\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}){\line(-1,-2){#3}}%
+\put(-\monolength,-\secondepilength){\sswhead}%
+\put(-\epilength,-\secondmonolength){\line(1,2){#3}}%
+\put(-\value{x},\value{y}){\nnehead}%
+\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}}%
+
+% \SSWADJDIST{f}{g}{n} draws a south-south-west pair of adjoint distributors
+% with names f,g and length n units
+\newcommand{\SSWADJDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\truex{313}\truey{156}\truez{400}%
+\put(\Y,#3){\begin{picture}(0,0)%
+\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}){\line(-1,-2){#3}}%
+\put(-\monolength,-\secondepilength){\sswhead}%
+\put(-\epilength,-\secondmonolength){\line(1,2){#3}}%
+\put(-\value{x},\value{y}){\nnehead}%
+\end{picture}}
+\put(-\value{x},\value{y}){\circle{\value{z}}}%
+\put(\value{x},-\value{y}){\circle{\value{z}}}%
+\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 distributor
+\def\basicsswdist[#1]{\SSWDIST{}{}{#100}}%
+
+% south-south-west distributor
+\newcommand{\sswdist}{\@ifnextchar[{\basicsswdist}{\basicsswdist[67]}}%
+
+% basic south-south-west distributor with upper name
+\def\basicSswdist[#1]#2{\SSWDIST{#2}{}{#100}}%
+
+% south-south-west distributor with upper name
+\newcommand{\Sswdist}{\@ifnextchar[{\basicSswdist}{\basicSswdist[67]}}%
+
+% basic south-south-west distributor with lower name
+\def\basicsswdisT[#1]#2{\SSWDIST{}{#2}{#100}}%
+
+% south-south-west distributor with lower name
+\newcommand{\sswdisT}{\@ifnextchar[{\basicsswdisT}{\basicsswdisT[67]}}%
+
+% basic south-south-west dotted arrow
+\def\basicsswdotar[#1]{\SSWDOTAR{}{}{#100}}%
+
+% south-south-west dotted arrow
+\newcommand{\sswdotar}{\@ifnextchar[{\basicsswdotar}{\basicsswdotar[67]}}%
+
+% basic south-south-west dotted arrow with upper name
+\def\basicSswdotar[#1]#2{\SSWDOTAR{#2}{}{#100}}%
+
+% south-south-west dotted arrow with upper name
+\newcommand{\Sswdotar}{\@ifnextchar[{\basicSswdotar}{\basicSswdotar[67]}}%
+
+% basic south-south-west dotted arrow with lower name
+\def\basicsswdotaR[#1]#2{\SSWDOTAR{}{#2}{#100}}%
+
+% south-south-west dotted arrow with lower name
+\newcommand{\sswdotaR}{\@ifnextchar[{\basicsswdotaR}{\basicsswdotaR[67]}}%
+
+% basic south-south-west monomorphism
+\def\basicsswmono[#1]{\SSWMONO{}{}{#100}}%
+
+% south-south-west monomorphism
+\newcommand{\sswmono}{\@ifnextchar[{\basicsswmono}{\basicsswmono[67]}}%
+
+% basic south-south-west monomorphism with upper name
+\def\basicSswmono[#1]#2{\SSWMONO{#2}{}{#100}}%
+
+% south-south-west monomorphism with upper name
+\newcommand{\Sswmono}{\@ifnextchar[{\basicSswmono}{\basicSswmono[67]}}%
+
+% basic south-south-west monomorphism with lower name
+\def\basicsswmonO[#1]#2{\SSWMONO{}{#2}{#100}}%
+
+% south-south-west monomorphism with lower name
+\newcommand{\sswmonO}{\@ifnextchar[{\basicsswmonO}{\basicsswmonO[67]}}%
+
+% basic south-south-west epimorphism
+\def\basicsswepi[#1]{\SSWEPI{}{}{#100}}%
+
+% south-south-west epimorphism
+\newcommand{\sswepi}{\@ifnextchar[{\basicsswepi}{\basicsswepi[67]}}%
+
+% basic south-south-west epimorphism with upper name
+\def\basicSswepi[#1]#2{\SSWEPI{#2}{}{#100}}%
+
+% south-south-west epimorphism with upper name
+\newcommand{\Sswepi}{\@ifnextchar[{\basicSswepi}{\basicSswepi[67]}}%
+
+% basic south-south-west epimorphism with lower name
+\def\basicsswepI[#1]#2{\SSWEPI{}{#2}{#100}}%
+
+% south-south-west epimorphism with lower name
+\newcommand{\sswepI}{\@ifnextchar[{\basicsswepI}{\basicsswepI[67]}}%
+
+% basic south-south-west bimorphism
+\def\basicsswbimo[#1]{\SSWBIMO{}{}{#100}}%
+
+% south-south-west bimorphism
+\newcommand{\sswbimo}{\@ifnextchar[{\basicsswbimo}{\basicsswbimo[67]}}%
+
+% basic south-south-west bimorphism with upper name
+\def\basicSswbimo[#1]#2{\SSWBIMO{#2}{}{#100}}%
+
+% south-south-west bimorphism with upper name
+\newcommand{\Sswbimo}{\@ifnextchar[{\basicSswbimo}{\basicSswbimo[67]}}%
+
+% basic south-south-west bimorphism with lower name
+\def\basicsswbimO[#1]#2{\SSWBIMO{}{#2}{#100}}%
+
+% south-south-west bimorphism with lower name
+\newcommand{\sswbimO}{\@ifnextchar[{\basicsswbimO}{\basicsswbimO[67]}}%
+
+% basic south-south-west isomorphism
+\def\basicsswiso[#1]{\SSWAR{\cong}{}{#100}}%
+
+% south-south-west isomorphism
+\newcommand{\sswiso}{\@ifnextchar[{\basicsswiso}{\basicsswiso[67]}}%
+
+% basic south-south-west isomorphism with upper name
+\def\basicSswiso[#1]#2{\SSWAR{#2}{\cong}{#100}}%
+
+% south-south-west isomorphism with upper name
+\newcommand{\Sswiso}{\@ifnextchar[{\basicSswiso}{\basicSswiso[67]}}%
+
+% basic south-south-west isomorphism with lower name
+\def\basicsswisO[#1]#2{\SSWAR{\cong}{#2}{#100}}%
+
+% south-south-west isomorphism with lower name
+\newcommand{\sswisO}{\@ifnextchar[{\basicsswisO}{\basicsswisO[67]}}%
+
+% south-south-west equality
+\let\ssweql=\nneeql%
+
+% south-south-west equality with upper name
+\let\Ssweql=\Nneeql%
+
+% south-south-west equality with lower name
+\let\ssweqL=\nneeqL%
+
+% 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 distributors
+\def\basicsswbidist[#1]{\SSWBIDIST{}{}{#100}}%
+
+% south-south-west pair of distributors
+\newcommand{\sswbidist}{\@ifnextchar[{\basicsswbidist}{\basicsswbidist[67]}}%
+
+% basic south-south-west pair of distributors with names
+\def\basicSswbidist[#1]#2#3{\SSWBIDIST{#2}{#3}{#100}}%
+
+% south-south-west pair of distributors with names
+\newcommand{\Sswbidist}{\@ifnextchar[{\basicSswbidist}{\basicSswbidist[67]}}%
+\let\sswbidisT=\Sswbidist
+
+% 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
+
+% basic south-south-west pair of adjoint distributors
+\def\basicsswadjdist[#1]{\SSWADJDIST{}{}{#100}}%
+
+% south-south-west pair of adjoint distributors
+\newcommand{\sswadjdist}{\@ifnextchar[{\basicsswadjdist}{\basicsswadjdist[67]}}%
+
+% basic south-south-west pair of adjoint distributors with names
+\def\basicSswadjdist[#1]#2#3{\SSWADJDIST{#2}{#3}{#100}}%
+
+% south-south-west pair of adjoint distributors with names
+\newcommand{\Sswadjdist}{\@ifnextchar[{\basicSswadjdist}{\basicSswadjdist[67]}}%
+\let\sswadjdisT=\Sswadjdist
+
+
+% 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){\line(-1,2){#3}}%
+\put(-\Z,#3){\nnwhead}%
+\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}}%
+
+% \NNWDIST{f}{g}{n} draws a north-north-west distributor
+% with names f, g and length n units
+\newcommand{\NNWDIST}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(\Z,-#3){\line(-1,2){#3}}%
+\put(-\Z,#3){\nnwhead}%
+\truex{400}%
+\put(0,0){\circle{\value{x}}}%
+\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}}%
+
+% \NNWDOTAR{f}{g}{n} draws a north-east dotted arrow
+% with names f,g and length n units
+\newcommand{\NNWDOTAR}[3]{\testdiagrammode%
+\truex{100}\truey{268}\truez{134}%
+\Z=#3%
+\divide\Z by 2%
+\NUMBEROFDOTS=#3%
+\divide\NUMBEROFDOTS by \value{z}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\multiput(\Z,-#3)(-\value{z},\value{y}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(-\Z,#3){\nnwhead}%
+\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}}%
+
+% \NNWMONO{f}{g}{n} draws a north-north-west monomorphism
+% with names f,g and length n units
+\newcommand{\NNWMONO}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\truetaiL%
+\bimolength=#3%
+\advance\bimolength by -\truemonotaiL%
+\monolength=\bimolength%
+\advance\monolength by -\Z%
+\secondmonolength=\monolength%
+\multiply\secondmonolength by 2%
+\begin{picture}(0,0)%
+\put(\monolength,-\secondmonolength){\line(-1,2){\bimolength}}%
+\put(\monolength,-\secondmonolength){\nnwhead}%
+\put(-\Z,#3){\nnwhead}%
+\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}}%
+
+% \NNWEPI{f}{g}{n} draws a north-north-west epimorphism
+% with names f, g and length n units
+\newcommand{\NNWEPI}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\trueheaD%
+\bimolength=#3%
+\advance\bimolength by -\trueepiheaD%
+\epilength=\bimolength%
+\advance\epilength by -\Z%
+\secondepilength=\epilength%
+\multiply\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(\Z,-#3){\line(-1,2){\bimolength}}%
+\put(-\epilength,\secondepilength){\nnwhead}%
+\put(-\Z,#3){\nnwhead}%
+\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}}%
+
+% \NNWBIMO{f}{g}{n} draws a north-north-west bimorphism
+% with names f,g and length n units
+\newcommand{\NNWBIMO}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\truetaiL\trueheaD%
+\bimolength=#3%
+\advance\bimolength by -\truemonotaiL%
+\monolength=\bimolength%
+\advance\monolength by -\Z%
+\advance\bimolength by -\trueepiheaD%
+\epilength=\bimolength%
+\advance\epilength by -\monolength%
+\secondmonolength=\monolength%
+\multiply\secondmonolength by 2%
+\secondepilength=\epilength%
+\multiply\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(\monolength,-\secondmonolength){\line(-1,2){\bimolength}}%
+\put(\monolength,-\secondmonolength){\nnwhead}%
+\put(-\epilength,\secondepilength){\nnwhead}%
+\put(-\Z,#3){\nnwhead}%
+\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}){\line(-1,2){#3}}%
+\put(\value{x},\value{y}){\line(-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}%
+\put(-\monolength,\secondepilength){\nnwhead}%
+\put(-\epilength,\secondmonolength){\nnwhead}%
+\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}}%
+
+% \NNWBIDIST{f}{g}{n} draws a pair of north-north-west distributors
+% with names f,g and length n units
+\newcommand{\NNWBIDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\truex{313}\truey{156}\truez{400}%
+\put(\Y,-#3){\begin{picture}(0,0)%
+\put(-\value{x},-\value{y}){\line(-1,2){#3}}%
+\put(\value{x},\value{y}){\line(-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}%
+\put(-\monolength,\secondepilength){\nnwhead}%
+\put(-\epilength,\secondmonolength){\nnwhead}%
+\end{picture}}
+\put(-\value{x},-\value{y}){\circle{\value{z}}}%
+\put(\value{x},\value{y}){\circle{\value{z}}}%
+\truex{500}\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}){\line(-1,2){#3}}%
+\put(-\epilength,\secondmonolength){\nnwhead}%
+\put(-\monolength,\secondepilength){\line(1,-2){#3}}%
+\put(\value{x},\value{y}){\ssehead}%
+\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}}%
+
+% \NNWADJDIST{f}{g}{n} draws a north-north-west pair of adjoint distributors
+% with names f,g and length n units
+\newcommand{\NNWADJDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\truex{313}\truey{156}\truez{400}%
+\put(\Y,-#3){\begin{picture}(0,0)%
+\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}){\line(-1,2){#3}}%
+\put(-\epilength,\secondmonolength){\nnwhead}%
+\put(-\monolength,\secondepilength){\line(1,-2){#3}}%
+\put(\value{x},\value{y}){\ssehead}%
+\end{picture}}
+\put(\value{x},\value{y}){\circle{\value{z}}}%
+\put(-\value{x},-\value{y}){\circle{\value{z}}}%
+\truex{500}\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-west distributor
+\def\basicnnwdist[#1]{\NNWDIST{}{}{#100}}%
+
+% north-north-west distributor
+\newcommand{\nnwdist}{\@ifnextchar[{\basicnnwdist}{\basicnnwdist[67]}}%
+
+% basic north-north-west distributor with upper name
+\def\basicNnwdist[#1]#2{\NNWDIST{#2}{}{#100}}%
+
+% north-north-west distributor with upper name
+\newcommand{\Nnwdist}{\@ifnextchar[{\basicNnwdist}{\basicNnwdist[67]}}%
+
+% basic north-north-west distributor with lower name
+\def\basicnnwdisT[#1]#2{\NNWDIST{}{#2}{#100}}%
+
+% north-north-west distributor with lower name
+\newcommand{\nnwdisT}{\@ifnextchar[{\basicnnwdisT}{\basicnnwdisT[67]}}%
+
+% basic north-north-west dotted arrow
+\def\basicnnwdotar[#1]{\NNWDOTAR{}{}{#100}}%
+
+% north-north-west dotted arrow
+\newcommand{\nnwdotar}{\@ifnextchar[{\basicnnwdotar}{\basicnnwdotar[67]}}%
+
+% basic north-north-west dotted arrow with upper name
+\def\basicNnwdotar[#1]#2{\NNWDOTAR{#2}{}{#100}}%
+
+% north-north-west dotted arrow with upper name
+\newcommand{\Nnwdotar}{\@ifnextchar[{\basicNnwdotar}{\basicNnwdotar[67]}}%
+
+% basic north-north-west dotted arrow with lower name
+\def\basicnnwdotaR[#1]#2{\NNWDOTAR{}{#2}{#100}}%
+
+% north-north-west dotted arrow with lower name
+\newcommand{\nnwdotaR}{\@ifnextchar[{\basicnnwdotaR}{\basicnnwdotaR[67]}}%
+
+% basic north-north-west monomorphism
+\def\basicnnwmono[#1]{\NNWMONO{}{}{#100}}%
+
+% north-north-west monomorphism
+\newcommand{\nnwmono}{\@ifnextchar[{\basicnnwmono}{\basicnnwmono[67]}}%
+
+% basic north-north-west monomorphism with upper name
+\def\basicNnwmono[#1]#2{\NNWMONO{#2}{}{#100}}%
+
+% north-north-west monomorphism with upper name
+\newcommand{\Nnwmono}{\@ifnextchar[{\basicNnwmono}{\basicNnwmono[67]}}%
+
+% basic north-north-west monomorphism with lower name
+\def\basicnnwmonO[#1]#2{\NNWMONO{}{#2}{#100}}%
+
+% north-north-west monomorphism with lower name
+\newcommand{\nnwmonO}{\@ifnextchar[{\basicnnwmonO}{\basicnnwmonO[67]}}%
+
+% basic north-north-west epimorphism
+\def\basicnnwepi[#1]{\NNWEPI{}{}{#100}}%
+
+% north-north-west epimorphism
+\newcommand{\nnwepi}{\@ifnextchar[{\basicnnwepi}{\basicnnwepi[67]}}%
+
+% basic north-north-west epimorphism with upper name
+\def\basicNnwepi[#1]#2{\NNWEPI{#2}{}{#100}}%
+
+% north-north-west epimorphism with upper name
+\newcommand{\Nnwepi}{\@ifnextchar[{\basicNnwepi}{\basicNnwepi[67]}}%
+
+% basic north-north-west epimorphism with lower name
+\def\basicnnwepI[#1]#2{\NNWEPI{}{#2}{#100}}%
+
+% north-north-west epimorphism with lower name
+\newcommand{\nnwepI}{\@ifnextchar[{\basicnnwepI}{\basicnnwepI[67]}}%
+
+% basic north-north-west bimorphism
+\def\basicnnwbimo[#1]{\NNWBIMO{}{}{#100}}%
+
+% north-north-west bimorphism
+\newcommand{\nnwbimo}{\@ifnextchar[{\basicnnwbimo}{\basicnnwbimo[67]}}%
+
+% basic north-north-west bimorphism with upper name
+\def\basicNnwbimo[#1]#2{\NNWBIMO{#2}{}{#100}}%
+
+% north-north-west bimorphism with upper name
+\newcommand{\Nnwbimo}{\@ifnextchar[{\basicNnwbimo}{\basicNnwbimo[67]}}%
+
+% basic north-north-west bimorphism with lower name
+\def\basicnnwbimO[#1]#2{\NNWBIMO{}{#2}{#100}}%
+
+% north-north-west bimorphism with lower name
+\newcommand{\nnwbimO}{\@ifnextchar[{\basicnnwbimO}{\basicnnwbimO[67]}}%
+
+% basic north-north-west isomorphism
+\def\basicnnwiso[#1]{\NNWAR{\cong}{}{#100}}%
+
+% north-north-west isomorphism
+\newcommand{\nnwiso}{\@ifnextchar[{\basicnnwiso}{\basicnnwiso[67]}}%
+
+% basic north-north-west isomorphism with upper name
+\def\basicNnwiso[#1]#2{\NNWAR{#2}{\cong}{#100}}%
+
+% north-north-west isomorphism with upper name
+\newcommand{\Nnwiso}{\@ifnextchar[{\basicNnwiso}{\basicNnwiso[67]}}%
+
+% basic north-north-west isomorphism with lower name
+\def\basicnnwisO[#1]#2{\NNWAR{\cong}{#2}{#100}}%
+
+% north-north-west isomorphism with lower name
+\newcommand{\nnwisO}{\@ifnextchar[{\basicnnwisO}{\basicnnwisO[67]}}%
+
+% north-north-west equality
+\let\nnweql=\sseeql%
+
+% north-north-west equality with upper name
+\let\Nnweql=\Sseeql%
+
+% north-north-west equality with lower name
+\let\nnweqL=\sseeqL%
+
+% 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 distributors
+\def\basicnnwbidist[#1]{\NNWBIDIST{}{}{#100}}%
+
+% north-north-east pair of distributors
+\newcommand{\nnwbidist}{\@ifnextchar[{\basicnnwbidist}{\basicnnwbidist[67]}}%
+
+% basic north-north-east pair of distributors with names
+\def\basicNnwbidist[#1]#2#3{\NNWBIDIST{#2}{#3}{#100}}%
+
+% north-north-east pair of distributors with names
+\newcommand{\Nnwbidist}{\@ifnextchar[{\basicNnwbidist}{\basicNnwbidist[67]}}%
+\let\nnwbidisT=\Nnwbidist
+
+% 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
+
+% basic north-north-east pair of adjoint distributors
+\def\basicnnwadjdist[#1]{\NNWADJDIST{}{}{#100}}%
+
+% north-north-east pair of adjoint distributors
+\newcommand{\nnwadjdist}{\@ifnextchar[{\basicnnwadjdist}{\basicnnwadjdist[67]}}%
+
+% basic north-north-east pair of adjoint distributors with names
+\def\basicNnwadjdist[#1]#2#3{\NNWADJDIST{#2}{#3}{#100}}%
+
+% north-north-east pair of adjoint distributors with names
+\newcommand{\Nnwadjdist}{\@ifnextchar[{\basicNnwadjdist}{\basicNnwadjdist[67]}}%
+\let\nnwadjdisT=\Nnwadjdist
+
+
+% 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){\line(3,1){#3}}%
+\put(\Y,\Z){\eenehead}%
+\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){\line(3,-1){#3}}%
+\put(\Y,-\Z){\eesehead}%
+\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){\line(-3,1){#3}}%
+\put(-\Y,\Z){\wwnwhead}%
+\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){\line(-3,-1){#3}}%
+\put(-\Y,-\Z){\wwswhead}%
+\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){\line(1,3){#3}}%
+\put(\Y,\Z){\nnnehead}%
+\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){\line(-1,-3){#3}}%
+\put(-\Y,-\Z){\ssswhead}%
+\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){\line(1,-3){#3}}%
+\put(\Y,-\Z){\sssehead}%
+\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){\line(-1,3){#3}}%
+\put(-\Y,\Z){\nnnwhead}%
+\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){\line(3,2){#3}}%
+\put(\Y,\Z){\neenehead}%
+\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){\line(3,-2){#3}}%
+\put(\Y,-\Z){\seesehead}%
+\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-WEST-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){\line(-3,2){#3}}%
+\put(-\Y,\Z){\nwwnwhead}%
+\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){\line(-3,-2){#3}}%
+\put(-\Y,-\Z){\swwswhead}%
+\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){\line(2,3){#3}}%
+\put(\Y,\Z){\nennehead}%
+\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){\line(-2,-3){#3}}%
+\put(-\Y,-\Z){\swsswhead}%
+\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){\line(2,-3){#3}}%
+\put(\Y,-\Z){\sessehead}%
+\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){\line(-2,3){#3}}%
+\put(-\Y,\Z){\nwnnwhead}%
+\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
diff --git a/Master/texmf-dist/tex/generic/borceux/MaxiDiagram b/Master/texmf-dist/tex/generic/borceux/MaxiDiagram
new file mode 100644
index 00000000000..c5d3537322d
--- /dev/null
+++ b/Master/texmf-dist/tex/generic/borceux/MaxiDiagram
@@ -0,0 +1,10213 @@
+% DIAGRAM MACROS (version 3.1)
+% MAXI-DIAGRAM FILE
+% FILE DIAGRAM AUGMENTED WITH triar, triadjar (with or without names)
+% AND quadriar, quadriadjar, quintiar, quintiadjar (without names)
+
+\catcode`\@=11
+
+%%%%% FIXING SOME PARAMETERS
+
+%%% Fixing the printerresolution
+%%% unit = 1 dpi
+\newcount\printerresolution
+\global\printerresolution=300
+
+%%% Fixing the length of a segment in an arrowhead
+%%% unit = 0.01pt
+\newcount\headsize
+\global\headsize=450
+
+%%% Fixing the thickness of an arrowhead
+%%% value = 1/5 of the font size
+\font\dotfont = lcircle10 at 3pt
+
+%%% Fixing the distance between the two heads of an epimorphism
+%%% unit = 0.01pt
+\newcount\epihead
+\global\epihead=200
+
+%%% 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
+
+%%%%% DESIGING THE ARROW HEADS
+
+%%% Customizing the unitlength for the sake of precision
+\setlength{\unitlength}{0.01pt}
+
+%%% Printing one dot at the required scale
+\def\DOT{{\dotfont q}}
+
+%%% Computing the distance between two dots in an arrowhead
+\newcount\basicstep
+\basicstep=7227
+\global\divide\basicstep by \printerresolution
+
+%%% Computing the number of dots in an arrowhead
+\newcount\numberofsteps
+\numberofsteps=\headsize
+\global\divide\numberofsteps by \basicstep
+
+%%% Producing an arrow head
+\newcommand{\makehead}[3]{%
+\begin{picture}(0,0)%
+\multiput(0,0)(#1,#2){#3}{\DOT}%
+\multiput(0,0)(-#2,#1){#3}{\DOT}%
+\end{picture}}
+
+%%% Creating bitmap images of the arrowheads
+\newcount\xstep
+\newcount\ystep
+
+\newsavebox{\northhead}
+\savebox{\northhead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 7071%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\nhead}{\usebox{\northhead}}
+
+\newsavebox{\easthead}
+\savebox{\easthead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 7071%
+\divide\xstep by 10000%
+\ystep=-\xstep%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\ehead}{\usebox{\easthead}}
+
+\newsavebox{\southhead}
+\savebox{\southhead}{%
+\xstep=\basicstep%
+\multiply\xstep by 7071%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\shead}{\usebox{\southhead}}
+
+\newsavebox{\westhead}
+\savebox{\westhead}{%
+\xstep=\basicstep%
+\multiply\xstep by 7071%
+\divide\xstep by 10000%
+\ystep=-\xstep%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\whead}{\usebox{\westhead}}
+
+\newsavebox{\northwesthead}
+\savebox{\northwesthead}{%
+\makehead{0}{-\basicstep}{\numberofsteps}}
+\newcommand{\nwhead}{\usebox{\northwesthead}}
+
+\newsavebox{\northeasthead}
+\savebox{\northeasthead}{%
+\makehead{-\basicstep}{0}{\numberofsteps}}
+\newcommand{\nehead}{\usebox{\northeasthead}}
+
+\newsavebox{\southwesthead}
+\savebox{\southwesthead}{%
+\makehead{\basicstep}{0}{\numberofsteps}}
+\newcommand{\swhead}{\usebox{\southwesthead}}
+
+\newsavebox{\southeasthead}
+\savebox{\southeasthead}{%
+\makehead{0}{\basicstep}{\numberofsteps}}
+\newcommand{\sehead}{\usebox{\southeasthead}}
+
+\newsavebox{\eastnortheasthead}
+\savebox{\eastnortheasthead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 9486%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\divide\ystep by -3%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\enehead}{\usebox{\eastnortheasthead}}
+
+\newsavebox{\northnortheasthead}
+\savebox{\northnortheasthead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 9486%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\divide\ystep by 3%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\nnehead}{\usebox{\northnortheasthead}}
+
+\newsavebox{\southsouthwesthead}
+\savebox{\southsouthwesthead}{%
+\xstep=\basicstep%
+\multiply\xstep by 9486%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\divide\ystep by 3%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\sswhead}{\usebox{\southsouthwesthead}}
+
+\newsavebox{\westsouthwesthead}
+\savebox{\westsouthwesthead}{%
+\xstep=\basicstep%
+\multiply\xstep by 9486%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\divide\ystep by -3%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\wswhead}{\usebox{\westsouthwesthead}}
+
+\newsavebox{\westnorthwesthead}
+\savebox{\westnorthwesthead}{%
+\xstep=\basicstep%
+\multiply\xstep by 3162%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\multiply\ystep by -3%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\wnwhead}{\usebox{\westnorthwesthead}}
+
+\newsavebox{\eastsoutheasthead}
+\savebox{\eastsoutheasthead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 3162%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\multiply\ystep by -3%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\esehead}{\usebox{\eastsoutheasthead}}
+
+\newsavebox{\northnorthwesthead}
+\savebox{\northnorthwesthead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 3162%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\multiply\ystep by 3%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\nnwhead}{\usebox{\northnorthwesthead}}
+
+\newsavebox{\southsoutheasthead}
+\savebox{\southsoutheasthead}{%
+\xstep=\basicstep%
+\multiply\xstep by 3162%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\multiply\ystep by 3%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\ssehead}{\usebox{\southsoutheasthead}}
+
+\newsavebox{\easteastnortheasthead}
+\savebox{\easteastnortheasthead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 8944%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\divide\ystep by -2%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\eenehead}{\usebox{\easteastnortheasthead}}
+
+\newsavebox{\northnorthnortheasthead}
+\savebox{\northnorthnortheasthead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 8944%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\divide\ystep by 2%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\nnnehead}{\usebox{\northnorthnortheasthead}}
+
+\newsavebox{\southsouthsouthwesthead}
+\savebox{\southsouthsouthwesthead}{%
+\xstep=\basicstep%
+\multiply\xstep by 8944%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\divide\ystep by 2%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\ssswhead}{\usebox{\southsouthsouthwesthead}}
+
+\newsavebox{\westwestsouthwesthead}
+\savebox{\westwestsouthwesthead}{%
+\xstep=\basicstep%
+\multiply\xstep by 8944%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\divide\ystep by -2%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\wwswhead}{\usebox{\westwestsouthwesthead}}
+
+\newsavebox{\westwestnorthwesthead}
+\savebox{\westwestnorthwesthead}{%
+\xstep=\basicstep%
+\multiply\xstep by 4472%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\multiply\ystep by -2%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\wwnwhead}{\usebox{\westwestnorthwesthead}}
+
+\newsavebox{\easteastsoutheasthead}
+\savebox{\easteastsoutheasthead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 4472%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\multiply\ystep by -2%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\eesehead}{\usebox{\easteastsoutheasthead}}
+
+\newsavebox{\northnorthnorthwesthead}
+\savebox{\northnorthnorthwesthead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 4472%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\multiply\ystep by 2%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\nnnwhead}{\usebox{\northnorthnorthwesthead}}
+
+\newsavebox{\southsouthsoutheasthead}
+\savebox{\southsouthsoutheasthead}{%
+\xstep=\basicstep%
+\multiply\xstep by 4472%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\multiply\ystep by 2%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\sssehead}{\usebox{\southsouthsoutheasthead}}
+
+\newsavebox{\northeasteastnortheasthead}
+\savebox{\northeasteastnortheasthead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 9806%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\divide\ystep by -5%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\neenehead}{\usebox{\northeasteastnortheasthead}}
+
+\newsavebox{\northeastnorthnortheasthead}
+\savebox{\northeastnorthnortheasthead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 9806%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\divide\ystep by 5%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\nennehead}{\usebox{\northeastnorthnortheasthead}}
+
+\newsavebox{\southwestsouthsouthwesthead}
+\savebox{\southwestsouthsouthwesthead}{%
+\xstep=\basicstep%
+\multiply\xstep by 9806%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\divide\ystep by 5%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\swsswhead}{\usebox{\southwestsouthsouthwesthead}}
+
+\newsavebox{\southwestwestsouthwesthead}
+\savebox{\southwestwestsouthwesthead}{%
+\xstep=\basicstep%
+\multiply\xstep by 9806%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\divide\ystep by -5%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\swwswhead}{\usebox{\southwestwestsouthwesthead}}
+
+\newsavebox{\northwestwestnorthwesthead}
+\savebox{\northwestwestnorthwesthead}{%
+\xstep=\basicstep%
+\multiply\xstep by 1961%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\multiply\ystep by -5%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\nwwnwhead}{\usebox{\northwestwestnorthwesthead}}
+
+\newsavebox{\southeasteastsoutheasthead}
+\savebox{\southeasteastsoutheasthead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 1961%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\multiply\ystep by -5%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\seesehead}{\usebox{\southeasteastsoutheasthead}}
+
+\newsavebox{\northwestnorthnorthwesthead}
+\savebox{\northwestnorthnorthwesthead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 1961%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\multiply\ystep by 5%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\nwnnwhead}{\usebox{\northwestnorthnorthwesthead}}
+
+\newsavebox{\southeastsouthsoutheasthead}
+\savebox{\southeastsouthsoutheasthead}{%
+\xstep=\basicstep%
+\multiply\xstep by 1961%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\multiply\ystep by 5%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\sessehead}{\usebox{\southeastsouthsoutheasthead}}
+
+%%% Restoring the standard unitlength
+\setlength{\unitlength}{1pt}
+
+
+% MACROS FOR MARKED ARROWS
+
+\newsavebox{\isomorphismmark}
+\newcommand{\isomark}[1]{\savebox{\isomorphismmark}{#1}}
+\isomark{$\cong$}
+\newcommand{\isosign}{\usebox{\isomorphismmark}}
+
+\newif\ifuserdist
+\newsavebox{\distributormark}
+\newcommand{\distmark}[1]{\ifx#1\distcircle\userdistfalse\else%
+\userdisttrue\savebox{\distributormark}{#1}\fi}
+\newsavebox{\distributorcircle}
+\savebox{\distributorcircle}{\begin{picture}(0,0)%
+\put(0,0){\circle{4}}\end{picture}}
+\newcommand{\distsign}{\ifuserdist\usebox{\distributormark}\else%
+\usebox{\distributorcircle}\fi}
+\userdistfalse
+
+
+
+% MACROS FOR ADJUSTING THE LENGTH OF MONOMORPHISMS AND EPIMORPHISMS
+
+\newcount\monolength
+\newcount\epilength
+\newcount\bimolength
+\newcount\secondmonolength
+\newcount\secondepilength
+
+\newcount\monotail%
+\global\monotail=\headsize%
+\global\multiply\monotail by 7070%
+\global\divide\monotail by 10000%
+
+\newcount\truemonotail%
+\newcount\trueepihead%
+
+\def\truetail{\truemonotail=\monotail%
+\multiply\truemonotail by 100%
+\divide\truemonotail by \SCALE}
+
+\def\truehead{\trueepihead=\epihead%
+\multiply\trueepihead by 100%
+\divide\trueepihead by \SCALE}
+
+\newcount\Monotail%
+\global\Monotail=\headsize%
+\global\divide\Monotail by 2%
+
+\newcount\Epihead%
+\global\Epihead=\epihead%
+\global\multiply\Epihead by 7070%
+\global\divide\Epihead by 10000%
+
+\newcount\Truemonotail%
+\newcount\Trueepihead%
+
+\def\Truetail{\Truemonotail=\Monotail%
+\multiply\Truemonotail by 100%
+\divide\Truemonotail by \SCALE}%
+
+\def\Truehead{\Trueepihead=\Epihead%
+\multiply\Trueepihead by 100%
+\divide\Trueepihead by \SCALE}
+
+\newcount\MonoTail%
+\global\MonoTail=\headsize%
+\global\multiply\MonoTail by 6324%
+\global\divide\MonoTail by 10000%
+
+\newcount\EpiHead%
+\global\EpiHead=\epihead%
+\global\multiply\EpiHead by 8944%
+\global\divide\EpiHead by 10000%
+
+\newcount\TrueMonoTail%
+\newcount\TrueEpiHead%
+
+\def\TrueTail{\TrueMonoTail=\MonoTail%
+\multiply\TrueMonoTail by 100%
+\divide\TrueMonoTail by \SCALE}%
+
+\def\TrueHead{\TrueEpiHead=\EpiHead%
+\multiply\TrueEpiHead by 100%
+\divide\TrueEpiHead by \SCALE}
+
+\newcount\monotaiL%
+\global\monotaiL=\headsize%
+\global\multiply\monotaiL by 3162%
+\global\divide\monotaiL by 10000%
+
+\newcount\epiheaD%
+\global\epiheaD=\epihead%
+\global\multiply\epiheaD by 4472%
+\global\divide\epiheaD by 10000%
+
+\newcount\truemonotaiL%
+\newcount\trueepiheaD%
+
+\def\truetaiL{\truemonotaiL=\monotaiL%
+\multiply\truemonotaiL by 100%
+\divide\truemonotaiL by \SCALE}%
+
+\def\trueheaD{\trueepiheaD=\epiheaD%
+\multiply\trueepiheaD by 100%
+\divide\trueepiheaD by \SCALE}
+
+
+% 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
+
+% moving a name up
+\newcommand{\TUP}[1]{\raisebox{0pt}[0pt][3pt]{}#1}
+
+% moving a name down
+\newcommand{\TDOWN}[1]{\raisebox{0pt}[6pt][0pt]{}#1}
+
+% \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}}%
+
+% \ttricase{P} draws the tri-picture P
+% with length \textarrowlength pt.
+\newcommand{\ttricase}[1]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\makebox[\actualtextarrowspace pt]%
+{\raisebox{4pt}{#1{\actualtextarrowlength}%
+{\rule{0pt}{6pt}}{\rule{0pt}{6pt}}{\rule{0pt}{6pt}}}}%
+\setlength{\unitlength}{1pt}}%
+
+% \Ttricase{P}{f}{g}{h} draws the tri-picture P with names f, g, h
+% and length \textarrowlength pt.
+\newcommand{\Ttricase}[4]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\makebox[\actualtextarrowspace pt]%
+{\raisebox{4pt}%
+{#1{\actualtextarrowlength}{\rule{0pt}{6pt}\scriptstyle #2}%
+{\rule{0pt}{6pt}\scriptstyle #3}{\rule{0pt}{6pt}\scriptstyle #4}}}%
+\setlength{\unitlength}{1pt}}%
+
+% \tmulticase{P} draws the multi-picture P
+% with length \textarrowlength pt.
+\newcommand{\tmulticase}[1]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\makebox[\actualtextarrowspace pt]%
+{\raisebox{1pt}{#1{\actualtextarrowlength}}}%
+\setlength{\unitlength}{1pt}}%
+
+
+% MACROS FOR DRAWING DISPLAYED PICTURES
+
+% moving a name up
+\newcommand{\DUP}[1]{\raisebox{0pt}[0pt][4pt]{}#1}
+
+% moving a name down
+\newcommand{\DDOWN}[1]{\raisebox{0pt}[9pt][0pt]{}#1}
+
+% \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}}%
+
+% \dtricase{P} draws the tri-picture P
+% with length \displayarrowlength pt.
+\newcommand{\dtricase}[1]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\makebox[\actualdisplayarrowspace pt]%
+{\raisebox{4pt}{#1{\actualdisplayarrowlength}%
+{\rule{0pt}{6pt}}{\rule{0pt}{6pt}}{\rule{0pt}{6pt}}}}%
+\setlength{\unitlength}{1pt}}%
+
+% \Dtricase{P}{f}{g}{h} draws the tri-picture P with names f, g, h
+% and length \displayarrowlength pt.
+\newcommand{\Dtricase}[4]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\makebox[\actualdisplayarrowspace pt]%
+{\raisebox{4pt}%
+{#1{\actualdisplayarrowlength}{\rule{0pt}{6pt}\textstyle #2}%
+{\rule{0pt}{6pt}\textstyle #3}{\rule{0pt}{6pt}\textstyle #4}}}%
+\setlength{\unitlength}{1pt}}%
+
+% \dmulticase{P} draws the multi-picture P
+% with length \displayarrowlength pt.
+\newcommand{\dmulticase}[1]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\makebox[\actualdisplayarrowspace pt]%
+{\raisebox{1pt}{#1{\actualdisplayarrowlength}}}%
+\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){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\end{picture}}%
+
+% \DIST{n} draws a distributor of length n units
+\newcommand{\DIST}[1]%
+{\begin{picture}(#1,0)%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\NUMBER=#1%
+\divide\NUMBER by 2%
+\put(\NUMBER,0){\distsign}%
+\end{picture}}%
+
+% \DOTAR{n} draws a dotted arrow of length n units
+\newcommand{\DOTAR}[1]%
+{\NUMBEROFDOTS=#1%
+\divide\NUMBEROFDOTS by 300%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(#1,0)%
+\multiput(0,0)(300,0){\NUMBEROFDOTS}{\circle*{100}}%
+\put(#1,0){\ehead}%
+\end{picture}}%
+
+% \MONO{n} draws a monomorphism of length n units
+\newcommand{\MONO}[1]%
+{\monolength=#1%
+\advance\monolength by -\monotail%
+\begin{picture}(#1,0)%
+\put(\monotail,0){\line(1,0){\monolength}}%
+\put(#1,0){\ehead}%
+\put(\monotail,0){\ehead}%
+\end{picture}}%
+
+% \EPI{n} draws an epimorphism of length n units
+\newcommand{\EPI}[1]%
+{\epilength=#1%
+\advance\epilength by -\epihead%
+\begin{picture}(#1,0)(-#1,0)%
+\put(-#1,0){\line(1,0){\epilength}}%
+\put(-\epihead,0){\ehead}%
+\put(0,0){\ehead}%
+\end{picture}}%
+
+% \BIMO{n} draws a bimorphism of length n units
+\newcommand{\BIMO}[1]%
+{\monolength=#1%
+\advance\monolength by -\monotail%
+\epilength=\monolength%
+\advance\epilength by -\epihead%
+\begin{picture}(#1,0)(-#1,0)%
+\put(-\monolength,0){\line(1,0){\epilength}}%
+\put(-\monolength,0){\ehead}%
+\put(-\epihead,0){\ehead}%
+\put(0,0){\ehead}%
+\end{picture}}%
+
+% \BIAR{n} draws a pair of arrows of length n units
+\newcommand{\BIAR}[1]%
+{\begin{picture}(#1,700)%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(0,700){\line(1,0){#1}}%
+\put(#1,700){\ehead}%
+\end{picture}}%
+
+% \BIDIST{n} draws a pair of distributors of length n units
+\newcommand{\BIDIST}[1]%
+{\begin{picture}(#1,700)%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(0,700){\line(1,0){#1}}%
+\put(#1,700){\ehead}%
+\NUMBER=#1%
+\divide\NUMBER by 2%
+\put(\NUMBER,0){\distsign}%
+\put(\NUMBER,700){\distsign}%
+\end{picture}}%
+
+% \EQL{n} draws an equality of length n units
+\newcommand{\EQL}[1]%
+{\begin{picture}(#1,0)%
+\put(0,100){\line(1,0){#1}}%
+\put(0,-100){\line(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){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(#1,700){\line(-1,0){#1}}%
+\put(0,700){\whead}
+\end{picture}}%
+
+% \ADJDIST{n} draws a pair of adjoint distibutors of length n units
+\newcommand{\ADJDIST}[1]%
+{\begin{picture}(#1,700)%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(#1,700){\line(-1,0){#1}}%
+\put(0,700){\whead}
+\NUMBER=#1%
+\divide\NUMBER by 2%
+\put(\NUMBER,0){\distsign}%
+\put(\NUMBER,700){\distsign}%
+\end{picture}}%
+
+% \TRIAR{n}{f}{g}{h} draws a triple of arrows of length n units
+% and names f, g, h
+\newcommand{\TRIAR}[4]%
+{\renewcommand{\arraystretch}{0.2}%
+\begin{tabular}{c}%
+\mbox{$#2$}\\ \AR{#1}\\%
+\mbox{$#3$}\\ \AR{#1}\\%
+\mbox{$#4$}\\ \AR{#1}%
+\end{tabular}%
+\renewcommand{\arraystretch}{1}}%
+
+% \TRIADJAR{n} draws a triple of adjoint arrows of length n units
+% and names f, g, h
+\newcommand{\TRIADJAR}[4]%
+{\renewcommand{\arraystretch}{0.2}%
+\begin{tabular}{c}%
+\mbox{$#2$}\\ \BKAR{#1}\\%
+\mbox{$#3$}\\ \AR{#1}\\%
+\mbox{$#4$}\\ \BKAR{#1}%
+\end{tabular}%
+\renewcommand{\arraystretch}{1}}%
+
+% \QUADRIAR{n} draws a quadruple of arrows of length n units
+\newcommand{\QUADRIAR}[1]%
+{\renewcommand{\arraystretch}{0.2}%
+\begin{tabular}{c}%
+\AR{#1}\\%
+\rule{0pt}{3pt}\\ \AR{#1}\\%
+\rule{0pt}{3pt}\\ \AR{#1}\\%
+\rule{0pt}{3pt}\\ \AR{#1}%
+\end{tabular}%
+\renewcommand{\arraystretch}{1}}%
+
+% \QUADRIADJAR{n} draws a quadruple of adjoint arrows
+% of length n units
+\newcommand{\QUADRIADJAR}[1]%
+{\renewcommand{\arraystretch}{0.2}%
+\begin{tabular}{c}%
+\BKAR{#1}\\%
+\rule{0pt}{3pt}\\ \AR{#1}\\%
+\rule{0pt}{3pt}\\ \BKAR{#1}\\%
+\rule{0pt}{3pt}\\ \AR{#1}%
+\end{tabular}%
+\renewcommand{\arraystretch}{1}}%
+
+% \QUINTIAR{n} draws a quintuple of arrows of length n units
+\newcommand{\QUINTIAR}[1]%
+{\renewcommand{\arraystretch}{0.2}%
+\begin{tabular}{c}%
+\AR{#1}\\%
+\rule{0pt}{2pt}\\ \AR{#1}\\%
+\rule{0pt}{2pt}\\ \AR{#1}\\%
+\rule{0pt}{2pt}\\ \AR{#1}\\%
+\rule{0pt}{2pt}\\ \AR{#1}%
+\end{tabular}%
+\renewcommand{\arraystretch}{1}}%
+
+% \QUINTIADJAR{n} draws a quintuple of adjoint arrows
+% of length n units
+\newcommand{\QUINTIADJAR}[1]%
+{\renewcommand{\arraystretch}{0.2}%
+\begin{tabular}{c}%
+\AR{#1}\\%
+\rule{0pt}{2pt}\\ \BKAR{#1}\\%
+\rule{0pt}{2pt}\\ \AR{#1}\\%
+\rule{0pt}{2pt}\\ \BKAR{#1}\\%
+\rule{0pt}{2pt}\\ \AR{#1}%
+\end{tabular}%
+\renewcommand{\arraystretch}{1}}%
+
+% 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}%
+
+% distributor
+\newcommand{\dist}{\ifinner\tcase{\DIST}\else\dcase{\DIST}\fi}%
+
+% distributor with upper name [1]
+\newcommand{\Dist}[1]{\ifinner\Tcase{\DIST}{\TUP{#1}}%
+\else\Dcase{\DIST}{\TUP{#1}}\fi}%
+
+% dotted arrow
+\newcommand{\dotar}{\ifinner\tcase{\DOTAR}\else\dcase{\DOTAR}\fi}%
+
+% dotted arrow with upper name [1]
+\newcommand{\Dotar}[1]{\ifinner\Tcase{\DOTAR}{#1}%
+\else\Dcase{\DOTAR}{#1}\fi}%
+
+% monomorphism
+\newcommand{\mono}{\ifinner\tcase{\MONO}\else\dcase{\MONO}\fi}%
+
+% monomorphism with upper name [1]
+\newcommand{\Mono}[1]{\ifinner\Tcase{\MONO}{#1}\else\Dcase{\MONO}{#1}\fi}%
+
+% epimorphism
+\newcommand{\epi}{\ifinner\tcase{\EPI}\else\dcase{\EPI}\fi}%
+
+% epimorphism with upper name [1]
+\newcommand{\Epi}[1]{\ifinner\Tcase{\EPI}{#1}\else\Dcase{\EPI}{#1}\fi}%
+
+% bimorphism
+\newcommand{\bimo}{\ifinner\tcase{\BIMO}\else\dcase{\BIMO}\fi}%
+
+% bimorphism with upper name [1]
+\newcommand{\Bimo}[1]{\ifinner\Tcase{\BIMO}{#1}%
+\else\Dcase{\BIMO}{#1}\fi}%
+
+% isomorphism
+\newcommand{\iso}{\ifinner\Tcase{\AR}{\isosign}\else\Dcase{\AR}{\isosign}\fi}%
+
+% isomorphism with upper name [1]
+\newcommand{\Iso}[1]{\ifinner\Tcase{\AR}{\isosign{#1}}%
+\else\Dcase{\AR}{\isosign{#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 distributors
+\newcommand{\bidist}{\ifinner\tbicase{\BIDIST}\else\dbicase{\BIDIST}\fi}%
+
+% pair of distributors with names [1],[2]
+\newcommand{\Bidist}[2]{\ifinner\Tbicase{\BIDIST}{\TUP{#1}}{\TDOWN{#2}}%
+\else\Dbicase{\BIDIST}{\DUP{#1}}{\DDOWN{#2}}\fi}%
+
+% equality
+\newcommand{\eql}{\ifinner\tcase{\EQL}\else\dcase{\EQL}\fi}%
+
+% equality with name [1]
+\newcommand{\Eql}[1]{\ifinner\Tcase{\EQL}{\TUP{#1}}%
+\else\Dcase{\EQL}{\DUP{#1}}\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}%
+
+% pair of adjoint distributors
+\newcommand{\adjdist}{\ifinner\tbicase{\ADJDIST}\else\dbicase{\ADJDIST}\fi}%
+
+% pair of adjoint distributors with names [1],[2]
+\newcommand{\Adjdist}[2]{\ifinner\Tbicase{\ADJDIST}{\TUP{#1}}{\TDOWN{#2}}%
+\else\Dbicase{\ADJDIST}{\DUP{#1}}{\DDOWN{#2}}\fi}%
+
+% triple of arrows
+\newcommand{\triar}{\ifinner\ttricase{\TRIAR}\else\dtricase{\TRIAR}\fi}%
+
+% triple of arrows with names [1],[2],[3]
+\newcommand{\Triar}[3]{\ifinner\Ttricase{\TRIAR}{#1}{#2}{#3}%
+\else\Dtricase{\TRIAR}{#1}{#2}{#3}\fi}%
+
+% triple of adjoint arrows
+\newcommand{\triadjar}{\ifinner\ttricase{\TRIADJAR}%
+\else\dtricase{\TRIADJAR}\fi}%
+
+% triple of adjoint arrows with names [1],[2],[3]
+\newcommand{\Triadjar}[3]{\ifinner\Ttricase{\TRIADJAR}{#1}{#2}{#3}%
+\else\Dtricase{\TRIADJAR}{#1}{#2}{#3}\fi}%
+
+% quadruple of arrows
+\newcommand{\quadriar}{\ifinner\tquadricase{\QUADRIAR}%
+\else\dmulticase{\QUADRIAR}\fi}%
+
+% quadruple of adjoint arrows
+\newcommand{\quadriadjar}{\ifinner\tmulticase{\QUADRIADJAR}%
+\else\dmulticase{\QUADRIADJAR}\fi}%
+
+% quintuple of arrows
+\newcommand{\quintiar}{\ifinner\tmulticase{\QUINTIAR}%
+\else\dmulticase{\QUINTIAR}\fi}%
+
+% quintuple of adjoint arrows
+\newcommand{\quintiadjar}{\ifinner\tmulticase{\QUINTIADJAR}%
+\else\dmulticase{\QUINTIADJAR}\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){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\end{picture}}%
+
+% \BKDIST{n} draws a pointing back distributor of length n units
+\newcommand{\BKDIST}[1]%
+{\begin{picture}(#1,0)%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\NUMBER=#1%
+\divide\NUMBER by 2%
+\put(\NUMBER,0){\distsign}%
+\end{picture}}%
+
+% \BKDOTAR{n} draws a backward dotted arrow
+% of length n units
+\newcommand{\BKDOTAR}[1]%
+{\NUMBEROFDOTS=#1%
+\divide\NUMBEROFDOTS by 300%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(#1,0)%
+\multiput(#1,0)(-300,0){\NUMBEROFDOTS}{\circle*{100}}%
+\put(0,0){\whead}%
+\end{picture}}%
+
+% \BKMONO{n} draws a pointing back monomorphism of length n units
+\newcommand{\BKMONO}[1]%
+{\monolength=#1%
+\advance\monolength by -\monotail%
+\begin{picture}(#1,0)(-#1,0)%
+\put(-\monotail,0){\line(-1,0){\monolength}}%
+\put(-\monotail,0){\whead}%
+\put(-#1,0){\whead}%
+\end{picture}}%
+
+% \BKEPI{n} draws a pointing back epimorphism of length n units
+\newcommand{\BKEPI}[1]%
+{\epilength=#1%
+\advance\epilength by -\epihead%
+\begin{picture}(#1,0)%
+\put(#1,0){\line(-1,0){\epilength}}%
+\put(\epihead,0){\whead}%
+\put(0,0){\whead}%
+\end{picture}}%
+
+% \BKBIMO{n} draws a pointing back bimorphism of length n units
+\newcommand{\BKBIMO}[1]%
+{\monolength=#1%
+\advance\monolength by -\monotail%
+\epilength=\monolength%
+\advance\epilength by -\epihead%
+\begin{picture}(#1,0)%
+\put(\monolength,0){\line(-1,0){\epilength}}%
+\put(\monolength,0){\whead}%
+\put(\epihead,0){\whead}%
+\put(0,0){\whead}%
+\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){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\put(#1,700){\line(-1,0){#1}}%
+\put(0,700){\whead}%
+\end{picture}}%
+
+% \BKBIDIST{n} draws a pair of pointing back distributors of length n units
+\newcommand{\BKBIDIST}[1]%
+{\begin{picture}(#1,700)%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\put(#1,700){\line(-1,0){#1}}%
+\put(0,700){\whead}%
+\NUMBER=#1%
+\divide\NUMBER by 2%
+\put(\NUMBER,0){\distsign}%
+\put(\NUMBER,700){\distsign}%
+\end{picture}}%
+
+% \BKADJAR{n} draws a pair of adjoint arrows of length n units
+\newcommand{\BKADJAR}[1]%
+{\begin{picture}(#1,700)%
+\put(0,700){\line(1,0){#1}}%
+\put(#1,700){\ehead}%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\end{picture}}%
+
+% \BKADJDIST{n} draws a pair of adjoint distributors of length n units
+\newcommand{\BKADJDIST}[1]%
+{\begin{picture}(#1,700)%
+\put(0,700){\line(1,0){#1}}%
+\put(#1,700){\ehead}%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\NUMBER=#1%
+\divide\NUMBER by 2%
+\put(\NUMBER,0){\distsign}%
+\put(\NUMBER,700){\distsign}%
+\end{picture}}%
+
+% \BKTRIAR{n}{f}{g}{h} draws a triple of back arrows of length n units
+% and names f, g, h
+\newcommand{\BKTRIAR}[4]%
+{\renewcommand{\arraystretch}{0.2}%
+\begin{tabular}{c}%
+\mbox{$#2$}\\ \BKAR{#1}\\%
+\mbox{$#3$}\\ \BKAR{#1}\\%
+\mbox{$#4$}\\ \BKAR{#1}%
+\end{tabular}%
+\renewcommand{\arraystretch}{1}}%
+
+% \BKTRIADJAR{n} draws a back triple of adjoint arrows of length n units
+% and names f, g, h
+\newcommand{\BKTRIADJAR}[4]%
+{\renewcommand{\arraystretch}{0.2}%
+\begin{tabular}{c}%
+\mbox{$#2$}\\ \AR{#1}\\%
+\mbox{$#3$}\\ \BKAR{#1}\\%
+\mbox{$#4$}\\ \AR{#1}%
+\end{tabular}%
+\renewcommand{\arraystretch}{1}}%
+
+% \BKQUADRIAR{n} draws a quadruple of back arrows of length n units
+\newcommand{\BKQUADRIAR}[1]%
+{\renewcommand{\arraystretch}{0.2}%
+\begin{tabular}{c}%
+\BKAR{#1}\\%
+\rule{0pt}{3pt}\\ \BKAR{#1}\\%
+\rule{0pt}{3pt}\\ \BKAR{#1}\\%
+\rule{0pt}{3pt}\\ \BKAR{#1}%
+\end{tabular}%
+\renewcommand{\arraystretch}{1}}%
+
+% \BKQUADRIADJAR{n} draws a back quadruple of adjoint arrows
+% of length n units
+\newcommand{\BKQUADRIADJAR}[1]%
+{\renewcommand{\arraystretch}{0.2}%
+\begin{tabular}{c}%
+\AR{#1}\\%
+\rule{0pt}{3pt}\\ \BKAR{#1}\\%
+\rule{0pt}{3pt}\\ \AR{#1}\\%
+\rule{0pt}{3pt}\\ \BKAR{#1}%
+\end{tabular}%
+\renewcommand{\arraystretch}{1}}%
+
+% \BKQUINTIAR{n} draws a quintuple of back arrows of length n units
+\newcommand{\BKQUINTIAR}[1]%
+{\renewcommand{\arraystretch}{0.2}%
+\begin{tabular}{c}%
+\BKAR{#1}\\%
+\rule{0pt}{2pt}\\ \BKAR{#1}\\%
+\rule{0pt}{2pt}\\ \BKAR{#1}\\%
+\rule{0pt}{2pt}\\ \BKAR{#1}\\%
+\rule{0pt}{2pt}\\ \BKAR{#1}%
+\end{tabular}%
+\renewcommand{\arraystretch}{1}}%
+
+% \BKQUINTIADJAR{n} draws a back quintuple of adjoint arrows
+% of length n units
+\newcommand{\BKQUINTIADJAR}[1]%
+{\renewcommand{\arraystretch}{0.2}%
+\begin{tabular}{c}%
+\BKAR{#1}\\%
+\rule{0pt}{2pt}\\ \AR{#1}\\%
+\rule{0pt}{2pt}\\ \BKAR{#1}\\%
+\rule{0pt}{2pt}\\ \AR{#1}\\%
+\rule{0pt}{2pt}\\ \BKAR{#1}%
+\end{tabular}%
+\renewcommand{\arraystretch}{1}}%
+
+% 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}%
+
+% back distributor
+\newcommand{\bkdist}{\ifinner\tcase{\BKDIST}\else\dcase{\BKDIST}\fi}%
+
+% back distributor with upper name [1]
+\newcommand{\Bkdist}[1]{\ifinner\Tcase{\BKDIST}{\TUP{#1}}%
+\else\Dcase{\BKDIST}{\TUP{#1}}\fi}%
+
+% backward dotted arrow
+\newcommand{\bkdotar}{\ifinner\tcase{\BKDOTAR}\else\dcase{\BKDOTAR}\fi}%
+
+% backward dotted arrow with upper name [1]
+\newcommand{\Bkdotar}[1]{\ifinner\Tcase{\BKDOTAR}{#1}%
+\else\Dcase{\BKDOTAR}{#1}\fi}%
+
+% back monomorphism
+\newcommand{\bkmono}{\ifinner\tcase{\BKMONO}\else\dcase{\BKMONO}\fi}%
+
+% back monomorphism with upper name [1]
+\newcommand{\Bkmono}[1]{\ifinner\Tcase{\BKMONO}{#1}%
+\else\Dcase{\BKMONO}{#1}\fi}%
+
+% back epimorphism
+\newcommand{\bkepi}{\ifinner\tcase{\BKEPI}\else\dcase{\BKEPI}\fi}%
+
+% back epimorphism with upper name [1]
+\newcommand{\Bkepi}[1]{\ifinner\Tcase{\BKEPI}{#1}%
+\else\Dcase{\BKEPI}{#1}\fi}%
+
+% back bimorphism
+\newcommand{\bkbimo}{\ifinner\tcase{\BKBIMO}\else\dcase{\BKBIMO}\fi}%
+
+% back bimorphism with upper name [1]
+\newcommand{\Bkbimo}[1]{\ifinner\Tcase{\BKBIMO}{\hspace{9pt}#1}%
+\else\Dcase{\BKBIMO}{\hspace{9pt}#1}\fi}%
+
+% back isomorphism
+\newcommand{\bkiso}{\ifinner\Tcase{\BKAR}{\isosign}%
+\else\Dcase{\BKAR}{\isosign}\fi}%
+
+% back isomorphism with upper name [1]
+\newcommand{\Bkiso}[1]{\ifinner\Tcase{\BKAR}{\isosign{#1}}%
+\else\Dcase{\BKAR}{\isosign{#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}%
+
+% pair of back distributors
+\newcommand{\bkbidist}{\ifinner\tbicase{\BKBIDIST}%
+\else\dbicase{\BKBIDIST}\fi}%
+
+% pair of back distributors with names [1],[2]
+\newcommand{\Bkbidist}[2]{\ifinner\Tbicase{\BKBIDIST}{\TUP{#1}}{\TDOWN{#2}}%
+\else\Tbicase{\BKBIDIST}{\DUP{#1}}{\DDOWN{#2}}\fi}%
+
+% back equality
+\let\bkeql=\eql%
+
+% back equality with name [1]
+\let\Bkeql=\Eql%
+
+% 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}%
+
+% back pair of adjoint distributors
+\newcommand{\bkadjdist}{\ifinner\tbicase{\BKADJDIST}%
+\else\dbicase{\BKADJDIST}\fi}%
+
+% back pair of adjoint distributors with names [1],[2]
+\newcommand{\Bkadjdist}[2]{\ifinner\Tbicase{\BKADJDIST}{\TUP{#1}}{\TDOWN{#2}}%
+\else\Dbicase{\BKADJDIST}{\TUP{#1}}{\TDOWN{#2}}\fi}%
+
+% triple of back arrows
+\newcommand{\bktriar}{\ifinner\ttricase{\BKTRIAR}\else\dtricase{\BKTRIAR}\fi}%
+
+% triple of back arrows with names [1],[2],[3]
+\newcommand{\Bktriar}[3]{\ifinner\Ttricase{\BKTRIAR}{#1}{#2}{#3}%
+\else\Dtricase{\BKTRIAR}{#1}{#2}{#3}\fi}%
+
+% back triple of adjoint arrows
+\newcommand{\bktriadjar}{\ifinner\ttricase{\BKTRIADJAR}%
+\else\dtricase{\BKTRIADJAR}\fi}%
+
+% back triple of adjoint arrows with names [1],[2],[3]
+\newcommand{\Bktriadjar}[3]{\ifinner\Ttricase{\BKTRIADJAR}{#1}{#2}{#3}%
+\else\Dtricase{\BKTRIADJAR}{#1}{#2}{#3}\fi}%
+
+% back quadruple of arrows
+\newcommand{\bkquadriar}{\ifinner\tquadricase{\BKQUADRIAR}%
+\else\dmulticase{\BKQUADRIAR}\fi}%
+
+% back quadruple of adjoint arrows
+\newcommand{\bkquadriadjar}{\ifinner\tmulticase{\BKQUADRIADJAR}%
+\else\dmulticase{\BKQUADRIADJAR}\fi}%
+
+% back quintuple of arrows
+\newcommand{\bkquintiar}{\ifinner\tmulticase{\BKQUINTIAR}%
+\else\dmulticase{\BKQUINTIAR}\fi}%
+
+% back quintuple of adjoint arrows
+\newcommand{\bkquintiadjar}{\ifinner\tmulticase{\BKQUINTIADJAR}%
+\else\dmulticase{\BKQUINTIADJAR}\fi}%
+
+
+% SPECIAL SYMBOLS
+
+% adjoint symbol
+\newcommand{\adj}{\begin{picture}(9,6)%
+\put(1,3){\line(1,0){6}}\put(7,0){\line(0,1){6}}%
+\end{picture}}%
+
+% commutative diagram symbol
+\newcommand{\com}{\begin{picture}(12,8)%
+\put(6,4){\oval(8,8)[b]}\put(6,4){\oval(8,8)[r]}%
+\put(6,8){\line(-1,0){2}}\end{picture}}%
+
+% natural transformation with names [1],[2],[3]
+\newcommand{\Nat}[3]{\raisebox{-2pt}%
+{\begin{picture}(34,15)%
+\put(2,10){\line(1,0){30}}%
+\put(32,10){\ehead}%
+\put(2,0){\line(1,0){30}}%
+\put(32,0){\ehead}%
+\put(13,2){$\Downarrow$}%
+\put(20,3){$\scriptstyle{#2}$}%
+\put(4,11){$\scriptstyle{#1}$}%
+\put(4,1){$\scriptstyle{#3}$}%
+\end{picture}}}%
+
+% natural transformation
+\newcommand{\nat}{\raisebox{-2pt}%
+{\begin{picture}(34,10)%
+\put(2,10){\line(1,0){30}}%
+\put(32,10){\ehead}%
+\put(2,0){\line(1,0){30}}%
+\put(32,0){\ehead}%
+\put(13,2){$\Downarrow$}%
+\end{picture}}}%
+
+% pair of natural transformations with names [1],[2],[3],[4],[5]
+\newcommand{\Binat}[5]{\raisebox{-7.5pt}%
+{\begin{picture}(34,25)%
+\put(2,20){\line(1,0){30}}%
+\put(32,20){\ehead}%
+\put(2,10){\line(1,0){30}}%
+\put(32,10){\ehead}%
+\put(2,0){\line(1,0){30}}%
+\put(32,0){\ehead}%
+\put(13,12){$\Downarrow$}%
+\put(13,2){$\Downarrow$}%
+\put(20,13){$\scriptstyle{#2}$}%
+\put(20,3){$\scriptstyle{#4}$}%
+\put(4,21){$\scriptstyle{#1}$}%
+\put(4,11){$\scriptstyle{#3}$}%
+\put(4,1){$\scriptstyle{#5}$}%
+\end{picture}}}%
+
+% pair of natural transformations
+\newcommand{\binat}{\raisebox{-7.5pt}%
+{\begin{picture}(34,20)%
+\put(2,20){\line(1,0){30}}%
+\put(32,20){\ehead}%
+\put(2,10){\line(1,0){30}}%
+\put(32,10){\ehead}%
+\put(2,0){\line(1,0){30}}%
+\put(32,0){\ehead}%
+\put(13,12){$\Downarrow$}%
+\put(13,2){$\Downarrow$}%
+\end{picture}}}%
+
+% display natural transformation with names [1],[2],[3]
+\newcommand{\Dnat}[3]{\raisebox{-2pt}%
+{\begin{picture}(54,15)%
+\put(2,10){\line(1,0){50}}%
+\put(52,10){\ehead}%
+\put(2,0){\line(1,0){50}}%
+\put(52,0){\ehead}%
+\put(23,2){$\Downarrow$}%
+\put(30,1){$\textstyle{#2}$}%
+\put(4,11){$\textstyle{#1}$}%
+\put(4,1){$\textstyle{#3}$}%
+\end{picture}}}%
+
+% display natural transformation
+\newcommand{\dnat}{\raisebox{-2pt}%
+{\begin{picture}(54,10)%
+\put(2,10){\line(1,0){50}}%
+\put(52,10){\ehead}%
+\put(2,0){\line(1,0){50}}%
+\put(52,0){\ehead}%
+\put(23,2){$\Downarrow$}%
+\end{picture}}}%
+
+% display pair of natural transformations with names [1],[2],[3],[4],[5]
+\newcommand{\Dbinat}[5]{\raisebox{-7.5pt}%
+{\begin{picture}(54,25)%
+\put(2,20){\line(1,0){50}}%
+\put(52,20){\ehead}%
+\put(2,10){\line(1,0){50}}%
+\put(52,10){\ehead}%
+\put(2,0){\line(1,0){50}}%
+\put(52,0){\ehead}%
+\put(23,12){$\Downarrow$}%
+\put(23,2){$\Downarrow$}%
+\put(30,11){$\textstyle{#2}$}%
+\put(30,1){$\textstyle{#4}$}%
+\put(4,21){$\textstyle{#1}$}%
+\put(4,11){$\textstyle{#3}$}%
+\put(4,1){$\textstyle{#5}$}%
+\end{picture}}}%
+
+% display pair of natural transformations
+\newcommand{\dbinat}{\raisebox{-7.5pt}%
+{\begin{picture}(54,20)%
+\put(2,20){\line(1,0){50}}%
+\put(52,20){\ehead}%
+\put(2,10){\line(1,0){50}}%
+\put(52,10){\ehead}%
+\put(2,0){\line(1,0){50}}%
+\put(52,0){\ehead}%
+\put(23,12){$\Downarrow$}%
+\put(23,2){$\Downarrow$}%
+\end{picture}}}%
+
+% 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}}}}%
+
+% \Hisocase{P}{f}{g}{n} draws an arrow P with names f, g
+% and length n units.
+\newcommand{\Hisocase}[4]%
+{\testdiagrammode\makebox[0pt]
+{\raisebox{-8pt}[0pt][0pt]%
+{$\stackrel{\makebox[0pt]{$\textstyle{#2}$}}%
+{\mbox{\lowername{#1{#4}}{#3}}}$}}}%
+
+% \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}}}$}}}%
+
+% \htricase{P}{n} draws the tri-picture P with length n units.
+\newcommand{\htricase}[2]%
+{\testdiagrammode\makebox[0pt]%
+{\raisebox{-12pt}[0pt][0pt]{#1{#2}{}{}{}{}}}}%
+
+% \Htricase{P}{f}{g}{h}{i}{n} draws the tri-picture P
+% with names f, g, h, i and length n units.
+\newcommand{\Htricase}[6]%
+{\testdiagrammode\makebox[0pt]%
+{\raisebox{-12pt}[0pt][0pt]{#1{#6}{#2}{#3}{#4}{#5}}}}%
+
+% \hmulticase{P}{n} draws the multi-picture P with length n units.
+\newcommand{\hmulticase}[2]%
+{\testdiagrammode\makebox[0pt]{\raisebox{-12pt}[0pt][0pt]{#1{#2}}}}%
+
+
+% EAST ARROWS
+
+% \EAR{n} draws an east arrow of length n units
+\newcommand{\EAR}[1]%
+{\begin{picture}(#1,0)%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\end{picture}}%
+
+% \EDIST{n} draws an east distributor of length n units
+\newcommand{\EDIST}[1]%
+{\begin{picture}(#1,0)%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\truex{400}
+\NUMBER=#1%
+\divide\NUMBER by 2%
+\put(\NUMBER,0){\distsign}
+\end{picture}}%
+
+% \EDOTAR draws a dotted arrow of length n units
+\newcommand{\EDOTAR}[1]%
+{\truex{100}\truey{300}%
+\NUMBEROFDOTS=#1%
+\divide\NUMBEROFDOTS by \value{y}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(#1,0)%
+\multiput(0,0)(\value{y},0){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(#1,0){\ehead}%
+\end{picture}}%
+
+
+% \EMONO{n} draws an east monomorphism of length n units
+\newcommand{\EMONO}[1]%
+{\truetail
+\monolength=#1%
+\advance\monolength by -\truemonotail%
+\begin{picture}(#1,0)%
+\put(\truemonotail,0){\line(1,0){\monolength}}%
+\put(#1,0){\ehead}%
+\put(\truemonotail,0){\ehead}%
+\end{picture}}%
+
+
+% \EEPI{n} draws an east epimorphism of length n units
+\newcommand{\EEPI}[1]%
+{\truehead%
+\epilength=#1%
+\advance\epilength by -\trueepihead%
+\begin{picture}(#1,0)(-#1,0)%
+\put(-#1,0){\line(1,0){\epilength}}%
+\put(-\trueepihead,0){\ehead}%
+\put(0,0){\ehead}%
+\end{picture}}%
+
+
+% \EBIMO{n} draws an east bimorphism of length n units
+\newcommand{\EBIMO}[1]%
+{\truehead\truetail%
+\monolength=#1%
+\advance\monolength by -\truemonotail%
+\epilength=\monolength%
+\advance\epilength by -\trueepihead%
+\begin{picture}(#1,0)(-#1,0)%
+\put(-\monolength,0){\line(1,0){\epilength}}%
+\put(-\monolength,0){\ehead}%
+\put(-\trueepihead,0){\ehead}%
+\put(0,0){\ehead}%
+\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){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(0,\value{x}){\line(1,0){#1}}%
+\put(#1,\value{x}){\ehead}%
+\end{picture}}%
+
+% \EBIDIST{n} draws an east pair of distributors of length n units
+\newcommand{\EBIDIST}[1]%
+{\truex{700}%
+\begin{picture}(#1,\value{x})%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(0,\value{x}){\line(1,0){#1}}%
+\put(#1,\value{x}){\ehead}%
+\NUMBER=#1%
+\divide\NUMBER by 2%
+\put(\NUMBER,0){\distsign}
+\put(\NUMBER,\value{x}){\distsign}%
+\end{picture}}%
+
+% \EEQL{n} draws an east equality of length n units
+\newcommand{\EEQL}[1]%
+{\begin{picture}(#1,0)%
+\truex{200}%
+\put(0,\value{x}){\line(1,0){#1}}%
+\put(0,0){\line(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){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(#1,\value{x}){\line(-1,0){#1}}%
+\put(0,\value{x}){\whead}%
+\end{picture}}%
+
+% \EADJDIST{n} draws an east pair of adjoint distributors of length n
+% units
+\newcommand{\EADJDIST}[1]%
+{\truex{700}%
+\begin{picture}(#1,\value{x})%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(#1,\value{x}){\line(-1,0){#1}}%
+\put(0,\value{x}){\whead}%
+\NUMBER=#1%
+\divide\NUMBER by 2%
+\put(\NUMBER,0){\distsign}
+\put(\NUMBER,\value{x}){\distsign}%
+\end{picture}}%
+
+% \ETRIAR{n}{f}{g}{h}{i} draws an east triple of arrows
+% of length n units with names f, g, h, i
+\newcommand{\ETRIAR}[5]%
+{\truex{1200}%
+\X=\value{x}%
+\multiply\X by 2%
+\begin{picture}(#1,\X)%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(0,\value{x}){\line(1,0){#1}}%
+\put(#1,\value{x}){\ehead}%
+\put(0,\X){\line(1,0){#1}}%
+\put(#1,\X){\ehead}%
+\X=#1%
+\divide\X by 2%
+\truex{-600}%
+\put(\X,\value{x}){\makebox(0,0){$#5$}}%
+\truex{600}%
+\put(\X,\value{x}){\makebox(0,0){$#4$}}%
+\truex{1800}%
+\put(\X,\value{x}){\makebox(0,0){$#3$}}%
+\truex{3000}%
+\put(\X,\value{x}){\makebox(0,0){$#2$}}%
+\end{picture}}%
+
+% \ETRIADJAR{n}{f}{g}{h}{i} draws an east triple of adjoint arrows
+% of length n units and names f, g, h, i
+\newcommand{\ETRIADJAR}[5]%
+{\truex{1200}%
+\X=\value{x}%
+\multiply\X by 2%
+\begin{picture}(#1,\X)%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\put(0,\value{x}){\line(1,0){#1}}%
+\put(#1,\value{x}){\ehead}%
+\put(#1,\X){\line(-1,0){#1}}%
+\put(0,\X){\whead}%
+\X=#1%
+\divide\X by 2%
+\truex{-600}%
+\put(\X,\value{x}){\makebox(0,0){$#5$}}%
+\truex{600}%
+\put(\X,\value{x}){\makebox(0,0){$#4$}}%
+\truex{1800}%
+\put(\X,\value{x}){\makebox(0,0){$#3$}}%
+\truex{3000}%
+\put(\X,\value{x}){\makebox(0,0){$#2$}}%
+\end{picture}}%
+
+% \EQUADRIAR{n} draws an east quadruple of arrows
+% of length n units
+\newcommand{\EQUADRIAR}[1]%
+{\truex{800}%
+\truey{1600}%
+\X=\value{x}%
+\multiply\X by 3%
+\begin{picture}(#1,\X)%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(0,\value{x}){\line(1,0){#1}}%
+\put(#1,\value{x}){\ehead}%
+\put(0,\value{y}){\line(1,0){#1}}%
+\put(#1,\value{y}){\ehead}%
+\put(0,\X){\line(1,0){#1}}%
+\put(#1,\X){\ehead}%
+\end{picture}}%
+
+% \EQUADRIADJAR{n} draws an east quadruple of adjoint arrows
+% of length n units
+\newcommand{\EQUADRIADJAR}[1]%
+{\truex{800}%
+\truey{1600}%
+\X=\value{x}%
+\multiply\X by 3%
+\begin{picture}(#1,\X)%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(#1,\value{x}){\line(-1,0){#1}}%
+\put(0,\value{x}){\whead}%
+\put(0,\value{y}){\line(1,0){#1}}%
+\put(#1,\value{y}){\ehead}%
+\put(#1,\X){\line(-1,0){#1}}%
+\put(0,\X){\whead}%
+\end{picture}}%
+
+% \EQUINTIAR{n} draws an east quintuple of arrows
+% of length n units
+\newcommand{\EQUINTIAR}[1]%
+{\truex{600}%
+\truey{1200}%
+\truez{1800}%
+\X=\value{x}%
+\multiply\X by 4%
+\begin{picture}(#1,\X)%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(0,\value{x}){\line(1,0){#1}}%
+\put(#1,\value{x}){\ehead}%
+\put(0,\value{y}){\line(1,0){#1}}%
+\put(#1,\value{y}){\ehead}%
+\put(0,\value{z}){\line(1,0){#1}}%
+\put(#1,\value{z}){\ehead}%
+\put(0,\X){\line(1,0){#1}}%
+\put(#1,\X){\ehead}%
+\end{picture}}%
+
+% \EQUINTIADJAR{n} draws an east quintuple of adjoint arrows
+% of length n units
+\newcommand{\EQUINTIADJAR}[1]%
+{\truex{600}%
+\truey{1200}%
+\truez{1800}%
+\X=\value{x}%
+\multiply\X by 4%
+\begin{picture}(#1,\X)%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(#1,\value{x}){\line(-1,0){#1}}%
+\put(0,\value{x}){\whead}%
+\put(0,\value{y}){\line(1,0){#1}}%
+\put(#1,\value{y}){\ehead}%
+\put(#1,\value{z}){\line(-1,0){#1}}%
+\put(0,\value{z}){\whead}%
+\put(0,\X){\line(1,0){#1}}%
+\put(#1,\X){\ehead}%
+\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 east distributor
+\def\basicedist[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\EDIST}{\Z}}%
+
+% east distributor
+\newcommand{\edist}{\@ifnextchar[{\basicedist}%
+{\hspace{\SOURCE\unitlength}\basicedist[\ARROWLENGTH]}}%
+
+% basic east distributor with upper name
+\def\basicEdist[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\EDIST}{\DUP{#2}}{\Z}}%
+
+% east distributor with upper name
+\newcommand{\Edist}{\@ifnextchar[{\basicEdist}%
+{\hspace{\SOURCE\unitlength}\basicEdist[\ARROWLENGTH]}}%
+
+% basic east distributor with lower name
+\def\basicedisT[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\EDIST}{\DDOWN{#2}}{\Z}}%
+
+% east distributor with lower name
+\newcommand{\edisT}{\@ifnextchar[{\basicedisT}%
+{\hspace{\SOURCE\unitlength}\basicedisT[\ARROWLENGTH]}}%
+
+% basic east dotted arrow
+\def\basicedotar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\EDOTAR}{\Z}}%
+
+% east dotted arrow
+\newcommand{\edotar}{\@ifnextchar[{\basicedotar}%
+{\hspace{\SOURCE\unitlength}\basicedotar[\ARROWLENGTH]}}%
+
+% basic east dotted arrow with upper name
+\def\basicEdotar[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\EDOTAR}{#2}{\Z}}%
+
+% east dotted arrow with upper name
+\newcommand{\Edotar}{\@ifnextchar[{\basicEdotar}%
+{\hspace{\SOURCE\unitlength}\basicEdotar[\ARROWLENGTH]}}%
+
+% basic east dotted arrow with lower name
+\def\basicedotaR[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\EDOTAR}{#2}{\Z}}%
+
+% east dotted arrow with lower name
+\newcommand{\edotaR}{\@ifnextchar[{\basicedotaR}%
+{\hspace{\SOURCE\unitlength}\basicedotaR[\ARROWLENGTH]}}%
+
+% basic east monomorphism
+\def\basicemono[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\EMONO}{\Z}}%
+
+% east arrow
+\newcommand{\emono}{\@ifnextchar[{\basicemono}%
+{\hspace{\SOURCE\unitlength}\basicemono[\ARROWLENGTH]}}%
+
+% basic east monomorphism with upper name
+\def\basicEmono[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\EMONO}{#2}{\Z}}%
+
+% east monomorphism with upper name
+\newcommand{\Emono}{\@ifnextchar[{\basicEmono}%
+{\hspace{\SOURCE\unitlength}\basicEmono[\ARROWLENGTH]}}%
+
+% basic east monomorphism with lower name
+\def\basicemonO[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\EMONO}{#2}{\Z}}%
+
+% east monomorphism with lower name
+\newcommand{\emonO}{\@ifnextchar[{\basicemonO}%
+{\hspace{\SOURCE\unitlength}\basicemonO[\ARROWLENGTH]}}%
+
+% basic east epimorphism
+\def\basiceepi[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\EEPI}{\Z}}%
+
+% east epimorphism
+\newcommand{\eepi}{\@ifnextchar[{\basiceepi}%
+{\hspace{\SOURCE\unitlength}\basiceepi[\ARROWLENGTH]}}%
+
+% basic east epimorphism with upper name
+\def\basicEepi[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\EEPI}{#2}{\Z}}%
+
+% east epimorphism with upper name
+\newcommand{\Eepi}{\@ifnextchar[{\basicEepi}%
+{\hspace{\SOURCE\unitlength}\basicEepi[\ARROWLENGTH]}}%
+
+% basic east epimorphism with lower name
+\def\basiceepI[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\EEPI}{#2}{\Z}}%
+
+% east epimorphism with lower name
+\newcommand{\eepI}{\@ifnextchar[{\basiceepI}%
+{\hspace{\SOURCE\unitlength}\basiceepI[\ARROWLENGTH]}}%
+
+% basic east bimorphism
+\def\basicebimo[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\EBIMO}{\Z}}%
+
+% east bimorphism
+\newcommand{\ebimo}{\@ifnextchar[{\basicebimo}%
+{\hspace{\SOURCE\unitlength}\basicebimo[\ARROWLENGTH]}}%
+
+% basic east bimorphism with upper name
+\def\basicEbimo[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\EBIMO}{#2}{\Z}}%
+
+% east bimorphism with upper name
+\newcommand{\Ebimo}{\@ifnextchar[{\basicEbimo}%
+{\hspace{\SOURCE\unitlength}\basicEbimo[\ARROWLENGTH]}}%
+
+% basic east bimorphism with lower name
+\def\basicebimO[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\EBIMO}{#2}{\Z}}%
+
+% east bimorphism with lower name
+\newcommand{\ebimO}{\@ifnextchar[{\basicebimO}%
+{\hspace{\SOURCE\unitlength}\basicebimO[\ARROWLENGTH]}}%
+
+% basic east isomorphism
+\def\basiceiso[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\Hisocase{\EAR}{\isosign}{}{\Z}}%
+
+% east isomorphism
+\newcommand{\eiso}{\@ifnextchar[{\basiceiso}%
+{\hspace{\SOURCE\unitlength}\basiceiso[\ARROWLENGTH]}}%
+
+% basic east isomorphism with upper name
+\def\basicEiso[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hisocase{\EAR}{#2}{\isosign}{\Z}}%
+
+% east isomorphism with upper name
+\newcommand{\Eiso}{\@ifnextchar[{\basicEiso}%
+{\hspace{\SOURCE\unitlength}\basicEiso[\ARROWLENGTH]}}%
+
+% basic east isomorphism with lower name
+\def\basiceisO[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hisocase{\EAR}{\isosign}{#2}{\Z}}%
+
+% east isomorphism with lower name
+\newcommand{\eisO}{\@ifnextchar[{\basiceisO}%
+{\hspace{\SOURCE\unitlength}\basiceisO[\ARROWLENGTH]}}%
+
+% basic east equality
+\def\basiceeql[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\EEQL}{\Z}}%
+
+% east equality
+\newcommand{\eeql}{\@ifnextchar[{\basiceeql}%
+{\hspace{\SOURCE\unitlength}\basiceeql[\ARROWLENGTH]}}%
+
+% basic east equality with upper name
+\def\basicEeql[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\EEQL}{\DUP{#2}}{\Z}}%
+
+% east equality with upper name
+\newcommand{\Eeql}{\@ifnextchar[{\basicEeql}%
+{\hspace{\SOURCE\unitlength}\basicEeql[\ARROWLENGTH]}}%
+
+% basic east equality with lower name
+\def\basiceeqL[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\EEQL}{#2}{\Z}}%
+
+% east equality with lower name
+\newcommand{\eeqL}{\@ifnextchar[{\basiceeqL}%
+{\hspace{\SOURCE\unitlength}\basiceeqL[\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 distributors
+\def\basicebidist[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hbicase{\EBIDIST}{\Z}}%
+
+% pair of east distributors
+\newcommand{\ebidist}{\@ifnextchar[{\basicebidist}%
+{\hspace{\SOURCE\unitlength}\basicebidist[\ARROWLENGTH]}}%
+
+% basic pair of east distributors with names
+\def\basicEbidist[#1]#2#3{%
+\Z=#1%
+\multiply \Z by 100%
+\Hbicase{\EBIDIST}{\DUP{#2}}{\DDOWN{#3}}{\Z}}%
+
+% pair of east distributors with names
+\newcommand{\Ebidist}{\@ifnextchar[{\basicEbidist}%
+{\hspace{\SOURCE\unitlength}\basicEbidist[\ARROWLENGTH]}}%
+\let\ebidisT=\Ebidist
+
+% 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
+
+% basic pair of east adjoint distributors
+\def\basiceadjdist[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hbicase{\EADJDIST}{\Z}}%
+
+% pair of east adjoint distributors
+\newcommand{\eadjdist}{\@ifnextchar[{\basiceadjdist}%
+{\hspace{\SOURCE\unitlength}\basiceadjdist[\ARROWLENGTH]}}%
+
+% basic pair of east adjoint distributors with names
+\def\basicEadjdist[#1]#2#3{%
+\Z=#1%
+\multiply \Z by 100%
+\Hbicase{\EADJDIST}{\DUP{#2}}{\DDOWN{#3}}{\Z}}%
+
+% pair of east adjoint distributors with names
+\newcommand{\Eadjdist}{\@ifnextchar[{\basicEadjdist}%
+{\hspace{\SOURCE\unitlength}\basicEadjdist[\ARROWLENGTH]}}%
+\let\eadjdisT=\Eadjdist
+
+% basic east triple of arrows
+\def\basicetriar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\htricase{\ETRIAR}{\Z}}%
+
+% east triple of arrows
+\newcommand{\etriar}{\@ifnextchar[{\basicetriar}%
+{\hspace{\SOURCE\unitlength}\basicetriar[\ARROWLENGTH]}}%
+
+% basic east triple of arrows with upper names
+\def\basicEtriar[#1]#2#3#4{%
+\Z=#1%
+\multiply \Z by 100%
+\Htricase{\ETRIAR}{#2}{#3}{#4}{}{\Z}}%
+
+% east triple of arrows with upper names
+\newcommand{\Etriar}{\@ifnextchar[{\basicEtriar}%
+{\hspace{\SOURCE\unitlength}\basicEtriar[\ARROWLENGTH]}}%
+
+% basic east triple of arrows with lower names
+\def\basicetriaR[#1]#2#3#4{%
+\Z=#1%
+\multiply \Z by 100%
+\Htricase{\ETRIAR}{}{#2}{#3}{#4}{\Z}}%
+
+% east triple of arrows with lower name
+\newcommand{\etriaR}{\@ifnextchar[{\basicetriaR}%
+{\hspace{\SOURCE\unitlength}\basicetriaR[\ARROWLENGTH]}}%
+
+% basic east triple of adjoint arrows
+\def\basicetriadjar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\htricase{\ETRIADJAR}{\Z}}%
+
+% east triple of adjoint arrows
+\newcommand{\etriadjar}{\@ifnextchar[{\basicetriadjar}%
+{\hspace{\SOURCE\unitlength}\basicetriadjar[\ARROWLENGTH]}}%
+
+% basic east triple of adjoint arrows with upper names
+\def\basicEtriadjar[#1]#2#3#4{%
+\Z=#1%
+\multiply \Z by 100%
+\Htricase{\ETRIADJAR}{#2}{#3}{#4}{}{\Z}}%
+
+% east triple of adjoint arrows with upper names
+\newcommand{\Etriadjar}{\@ifnextchar[{\basicEtriadjar}%
+{\hspace{\SOURCE\unitlength}\basicEtriadjar[\ARROWLENGTH]}}%
+
+% basic east triple of adjoint arrows with lower names
+\def\basicetriadjaR[#1]#2#3#4{%
+\Z=#1%
+\multiply \Z by 100%
+\Htricase{\ETRIADJAR}{}{#2}{#3}{#4}{\Z}}%
+
+% east triple of adjoint arrows with lower name
+\newcommand{\etriadjaR}{\@ifnextchar[{\basicetriadjaR}%
+{\hspace{\SOURCE\unitlength}\basicetriadjaR[\ARROWLENGTH]}}%
+
+% basic east quadruple of arrows
+\def\basicequadriar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hmulticase{\EQUADRIAR}{\Z}}%
+
+% east quadruple of arrows
+\newcommand{\equadriar}{\@ifnextchar[{\basicequadriar}%
+{\hspace{\SOURCE\unitlength}\basicequadriar[\ARROWLENGTH]}}%
+
+% basic east quadruple of adjoint arrows
+\def\basicequadriadjar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hmulticase{\EQUADRIADJAR}{\Z}}%
+
+% east quadruple of adjoint arrows
+\newcommand{\equadriadjar}{\@ifnextchar[{\basicequadriadjar}%
+{\hspace{\SOURCE\unitlength}\basicequadriadjar[\ARROWLENGTH]}}%
+
+% basic east quintuple of arrows
+\def\basicequintiar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hmulticase{\EQUINTIAR}{\Z}}%
+
+% east quintuple of arrows
+\newcommand{\equintiar}{\@ifnextchar[{\basicequintiar}%
+{\hspace{\SOURCE\unitlength}\basicequintiar[\ARROWLENGTH]}}%
+
+% basic east quintuple of adjoint arrows
+\def\basicequintiadjar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hmulticase{\EQUINTIADJAR}{\Z}}%
+
+% east quintuple of adjoint arrows
+\newcommand{\equintiadjar}{\@ifnextchar[{\basicequintiadjar}%
+{\hspace{\SOURCE\unitlength}\basicequintiadjar[\ARROWLENGTH]}}%
+
+
+% WEST ARROWS
+
+% \WAR{n} draws a pointing back arrow of length n units
+\newcommand{\WAR}[1]%
+{\begin{picture}(#1,0)%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\end{picture}}%
+
+% \WDIST{n} draws a pointing back distributor of length n units
+\newcommand{\WDIST}[1]%
+{\begin{picture}(#1,0)%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\NUMBER=#1%
+\divide\NUMBER by 2%
+\put(\NUMBER,0){\distsign}%
+\end{picture}}%
+
+% \WDOTAR draws a dotted arrow of length n units
+\newcommand{\WDOTAR}[1]%
+{\truex{100}\truey{300}%
+\NUMBEROFDOTS=#1%
+\divide\NUMBEROFDOTS by \value{y}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(#1,0)%
+\multiput(#1,0)(-\value{y},0){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(0,0){\whead}%
+\end{picture}}%
+
+% \WMONO{n} draws a pointing back monomorphism of length n units
+\newcommand{\WMONO}[1]%
+{\truetail%
+\monolength=#1%
+\advance\monolength by -\truemonotail%
+\begin{picture}(#1,0)(-#1,0)%
+\put(-\truemonotail,0){\line(-1,0){\monolength}}%
+\put(-\truemonotail,0){\whead}%
+\put(-#1,0){\whead}%
+\end{picture}}%
+
+
+% \WEPI{n} draws a pointing back epimorphism of length n units
+\newcommand{\WEPI}[1]%
+{\truehead%
+\epilength=#1%
+\advance\epilength by -\trueepihead%
+\begin{picture}(#1,0)%
+\put(#1,0){\line(-1,0){\epilength}}%
+\put(\trueepihead,0){\whead}%
+\put(0,0){\whead}%
+\end{picture}}%
+
+% \WBIMO{n} draws a pointing back bimorphism of length n units
+\newcommand{\WBIMO}[1]%
+{\truehead\truetail%
+\monolength=#1
+\advance\monolength by -\truemonotail%
+\epilength=\monolength%
+\advance\epilength by -\trueepihead%
+\begin{picture}(#1,0)%
+\put(\monolength,0){\line(-1,0){\epilength}}%
+\put(\monolength,0){\whead}%
+\put(\trueepihead,0){\whead}%
+\put(0,0){\whead}%
+\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){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\put(#1,\value{x}){\line(-1,0){#1}}%
+\put(0,\value{x}){\whead}%
+\end{picture}}%
+
+% \WBIDIST{n} draws a pair of pointing back distributors of length n units
+\newcommand{\WBIDIST}[1]%
+{\truex{700}%
+\begin{picture}(#1,\value{x})%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\put(#1,\value{x}){\line(-1,0){#1}}%
+\put(0,\value{x}){\whead}%
+\NUMBER=#1%
+\divide\NUMBER by 2%
+\put(\NUMBER,0){\distsign}%
+\put(\NUMBER,\value{x}){\distsign}%
+\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}){\line(1,0){#1}}%
+\put(#1,\value{x}){\ehead}%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\end{picture}}%
+
+% \WADJDIST{n} draws a pair of adjoint distributors of length n units
+\newcommand{\WADJDIST}[1]%
+{\truex{700}%
+\begin{picture}(#1,\value{x})%
+\put(0,\value{x}){\line(1,0){#1}}%
+\put(#1,\value{x}){\ehead}%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\NUMBER=#1%
+\divide\NUMBER by 2%
+\put(\NUMBER,0){\distsign}%
+\put(\NUMBER,\value{x}){\distsign}%
+\end{picture}}%
+
+% \WTRIAR{n}{f}{g}{h}{i} draws a west triple of arrows
+% of length n units and names f, g, h, i
+\newcommand{\WTRIAR}[5]%
+{\truex{1200}%
+\X=\value{x}%
+\multiply\X by 2%
+\begin{picture}(#1,\X)%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\put(#1,\value{x}){\line(-1,0){#1}}%
+\put(0,\value{x}){\whead}%
+\put(#1,\X){\line(-1,0){#1}}%
+\put(0,\X){\whead}%
+\X=#1%
+\divide\X by 2%
+\truex{-600}%
+\put(\X,\value{x}){\makebox(0,0){$#5$}}%
+\truex{600}%
+\put(\X,\value{x}){\makebox(0,0){$#4$}}%
+\truex{1800}%
+\put(\X,\value{x}){\makebox(0,0){$#3$}}%
+\truex{3000}%
+\put(\X,\value{x}){\makebox(0,0){$#2$}}%
+\end{picture}}%
+
+% \WTRIADJAR{n}{f}{g}{h}{i} draws a west triple of adjoint arrows
+% of length n units and names f, g, h, i
+\newcommand{\WTRIADJAR}[5]%
+{\truex{1200}%
+\X=\value{x}%
+\multiply\X by 2%
+\begin{picture}(#1,\X)%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(#1,\value{x}){\line(-1,0){#1}}%
+\put(0,\value{x}){\whead}%
+\put(0,\X){\line(1,0){#1}}%
+\put(#1,\X){\ehead}%
+\X=#1%
+\divide\X by 2%
+\truex{-600}%
+\put(\X,\value{x}){\makebox(0,0){$#5$}}%
+\truex{600}%
+\put(\X,\value{x}){\makebox(0,0){$#4$}}%
+\truex{1800}%
+\put(\X,\value{x}){\makebox(0,0){$#3$}}%
+\truex{3000}%
+\put(\X,\value{x}){\makebox(0,0){$#2$}}%
+\end{picture}}%
+
+% \WQUADRIAR{n} draws a west quadruple of arrows
+% of length n units
+\newcommand{\WQUADRIAR}[1]%
+{\truex{800}%
+\truey{1600}%
+\X=\value{x}%
+\multiply\X by 3%
+\begin{picture}(#1,\X)%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\put(#1,\value{x}){\line(-1,0){#1}}%
+\put(0,\value{x}){\whead}%
+\put(#1,\value{y}){\line(-1,0){#1}}%
+\put(0,\value{y}){\whead}%
+\put(#1,\X){\line(-1,0){#1}}%
+\put(0,\X){\whead}%
+\end{picture}}%
+
+% \WQUADRIADJAR{n} draws a west quadruple of adjoint arrows
+% of length n units
+\newcommand{\WQUADRIADJAR}[1]%
+{\truex{800}%
+\truey{1600}%
+\X=\value{x}%
+\multiply\X by 3%
+\begin{picture}(#1,\X)%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\put(0,\value{x}){\line(1,0){#1}}%
+\put(#1,\value{x}){\ehead}%
+\put(#1,\value{y}){\line(-1,0){#1}}%
+\put(0,\value{y}){\whead}%
+\put(0,\X){\line(1,0){#1}}%
+\put(#1,\X){\ehead}%
+\end{picture}}%
+
+% \WQUINTIAR{n} draws a west quintuple of arrows
+% of length n units
+\newcommand{\WQUINTIAR}[1]%
+{\truex{600}%
+\truey{1200}%
+\truez{1800}%
+\X=\value{x}%
+\multiply\X by 4%
+\begin{picture}(#1,\X)%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\put(#1,\value{x}){\line(-1,0){#1}}%
+\put(0,\value{x}){\whead}%
+\put(#1,\value{y}){\line(-1,0){#1}}%
+\put(0,\value{y}){\whead}%
+\put(#1,\value{z}){\line(-1,0){#1}}%
+\put(0,\value{z}){\whead}%
+\put(#1,\X){\line(-1,0){#1}}%
+\put(0,\X){\whead}%
+\end{picture}}%
+
+% \WQUINTIADJAR{n} draws a west quintuple of adjoint arrows
+% of length n units
+\newcommand{\WQUINTIADJAR}[1]%
+{\truex{600}%
+\truey{1200}%
+\truez{1800}%
+\X=\value{x}%
+\multiply\X by 4%
+\begin{picture}(#1,\X)%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\put(0,\value{x}){\line(1,0){#1}}%
+\put(#1,\value{x}){\ehead}%
+\put(#1,\value{y}){\line(-1,0){#1}}%
+\put(0,\value{y}){\whead}%
+\put(0,\value{z}){\line(1,0){#1}}%
+\put(#1,\value{z}){\ehead}%
+\put(#1,\X){\line(-1,0){#1}}%
+\put(0,\X){\whead}%
+\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 west distributor
+\def\basicwdist[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\WDIST}{\Z}}%
+
+% west distributor
+\newcommand{\wdist}{\@ifnextchar[{\basicwdist}%
+{\hspace{\SOURCE\unitlength}\basicwdist[\ARROWLENGTH]}}%
+
+% basic west distributor with upper name
+\def\basicWdist[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\WDIST}{\DUP{#2}}{\Z}}%
+
+% west distributor with upper name
+\newcommand{\Wdist}{\@ifnextchar[{\basicWdist}%
+{\hspace{\SOURCE\unitlength}\basicWdist[\ARROWLENGTH]}}%
+
+% basic west distributor with lower name
+\def\basicwdisT[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\WDIST}{\DDOWN{#2}}{\Z}}%
+
+% west distributor with lower name
+\newcommand{\wdisT}{\@ifnextchar[{\basicwdisT}%
+{\hspace{\SOURCE\unitlength}\basicwdisT[\ARROWLENGTH]}}%
+
+% basic west dotted arrow
+\def\basicwdotar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\WDOTAR}{\Z}}%
+
+% west dotted arrow
+\newcommand{\wdotar}{\@ifnextchar[{\basicwdotar}%
+{\hspace{\SOURCE\unitlength}\basicwdotar[\ARROWLENGTH]}}%
+
+% basic west dotted arrow with upper name
+\def\basicWdotar[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\WDOTAR}{#2}{\Z}}%
+
+% west dotted arrow with upper name
+\newcommand{\Wdotar}{\@ifnextchar[{\basicWdotar}%
+{\hspace{\SOURCE\unitlength}\basicWdotar[\ARROWLENGTH]}}%
+
+% basic west dotted arrow with lower name
+\def\basicwdotaR[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\WDOTAR}{#2}{\Z}}%
+
+% west dotted arrow with lower name
+\newcommand{\wdotaR}{\@ifnextchar[{\basicwdotaR}%
+{\hspace{\SOURCE\unitlength}\basicwdotaR[\ARROWLENGTH]}}%
+
+% basic west monomorphism
+\def\basicwmono[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\WMONO}{\Z}}%
+
+% west arrow
+\newcommand{\wmono}{\@ifnextchar[{\basicwmono}%
+{\hspace{\SOURCE\unitlength}\basicwmono[\ARROWLENGTH]}}%
+
+% basic west monomorphism with upper name
+\def\basicWmono[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\WMONO}{#2}{\Z}}%
+
+% west monomorphism with upper name
+\newcommand{\Wmono}{\@ifnextchar[{\basicWmono}%
+{\hspace{\SOURCE\unitlength}\basicWmono[\ARROWLENGTH]}}%
+
+% basic west monomorphism with lower name
+\def\basicwmonO[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\WMONO}{#2}{\Z}}%
+
+% west monomorphism with lower name
+\newcommand{\wmonO}{\@ifnextchar[{\basicwmonO}%
+{\hspace{\SOURCE\unitlength}\basicwmonO[\ARROWLENGTH]}}%
+
+% basic west epimorphism
+\def\basicwepi[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\WEPI}{\Z}}%
+
+% west epimorphism
+\newcommand{\wepi}{\@ifnextchar[{\basicwepi}%
+{\hspace{\SOURCE\unitlength}\basicwepi[\ARROWLENGTH]}}%
+
+% basic west epimorphism with upper name
+\def\basicWepi[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\WEPI}{#2}{\Z}}%
+
+% west epimorphism with upper name
+\newcommand{\Wepi}{\@ifnextchar[{\basicWepi}%
+{\hspace{\SOURCE\unitlength}\basicWepi[\ARROWLENGTH]}}%
+
+% basic west epimorphism with lower name
+\def\basicwepI[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\WEPI}{#2}{\Z}}%
+
+% west epimorphism with lower name
+\newcommand{\wepI}{\@ifnextchar[{\basicwepI}%
+{\hspace{\SOURCE\unitlength}\basicwepI[\ARROWLENGTH]}}%
+
+% basic west bimorphism
+\def\basicwbimo[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\WBIMO}{\Z}}%
+
+% west bimorphism
+\newcommand{\wbimo}{\@ifnextchar[{\basicwbimo}%
+{\hspace{\SOURCE\unitlength}\basicwbimo[\ARROWLENGTH]}}%
+
+% basic west bimorphism with upper name
+\def\basicWbimo[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\WBIMO}{#2}{\Z}}%
+
+% west bimorphism with upper name
+\newcommand{\Wbimo}{\@ifnextchar[{\basicWbimo}%
+{\hspace{\SOURCE\unitlength}\basicWbimo[\ARROWLENGTH]}}%
+
+% basic west bimorphism with lower name
+\def\basicwbimO[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\WBIMO}{#2}{\Z}}%
+
+% west bimorphism with lower name
+\newcommand{\wbimO}{\@ifnextchar[{\basicwbimO}%
+{\hspace{\SOURCE\unitlength}\basicwbimO[\ARROWLENGTH]}}%
+
+% basic west isomorphism
+\def\basicwiso[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\Hisocase{\WAR}{\isosign}{}{\Z}}%
+
+% west isomorphism
+\newcommand{\wiso}{\@ifnextchar[{\basicwiso}%
+{\hspace{\SOURCE\unitlength}\basicwiso[\ARROWLENGTH]}}%
+
+% basic west isomorphism with upper name
+\def\basicWiso[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hisocase{\WAR}{#2}{\isosign}{\Z}}%
+
+% west isomorphism with upper name
+\newcommand{\Wiso}{\@ifnextchar[{\basicWiso}%
+{\hspace{\SOURCE\unitlength}\basicWiso[\ARROWLENGTH]}}%
+
+% basic west isomorphism with lower name
+\def\basicwisO[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hisocase{\WAR}{\isosign}{#2}{\Z}}%
+
+% west isomorphism with lower name
+\newcommand{\wisO}{\@ifnextchar[{\basicwisO}%
+{\hspace{\SOURCE\unitlength}\basicwisO[\ARROWLENGTH]}}%
+
+% west equality
+\let\weql=\eeql%
+
+% west equality with upper name
+\let\Weql=\Eeql%
+
+% west equality with lower name
+\let\weqL=\eeqL%
+
+% 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 distributors
+\def\basicwbidist[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hbicase{\WBIDIST}{\Z}}%
+
+% pair of west distributors
+\newcommand{\wbidist}{\@ifnextchar[{\basicwbidist}%
+{\hspace{\SOURCE\unitlength}\basicwbidist[\ARROWLENGTH]}}%
+
+% basic pair of west distributors with names
+\def\basicWbidist[#1]#2#3{%
+\Z=#1%
+\multiply \Z by 100%
+\Hbicase{\WBIDIST}{\DUP{#2}}{\DDOWN{#3}}{\Z}}%
+
+% pair of west distributors with names
+\newcommand{\Wbidist}{\@ifnextchar[{\basicWbidist}%
+{\hspace{\SOURCE\unitlength}\basicWbidist[\ARROWLENGTH]}}%
+\let\wbidisT=\Wbidist
+
+% 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
+
+% basic pair of west adjoint distributors
+\def\basicwadjdist[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hbicase{\WADJDIST}{\Z}}%
+
+% pair of west adjoint distributors
+\newcommand{\wadjdist}{\@ifnextchar[{\basicwadjdist}%
+{\hspace{\SOURCE\unitlength}\basicwadjdist[\ARROWLENGTH]}}%
+
+% basic pair of west adjoint distributors with names
+\def\basicWadjdist[#1]#2#3{%
+\Z=#1%
+\multiply \Z by 100%
+\Hbicase{\WADJDIST}{\DUP{#2}}{\DDOWN{#3}}{\Z}}%
+
+% pair of west adjoint distributors with names
+\newcommand{\Wadjdist}{\@ifnextchar[{\basicWadjdist}%
+{\hspace{\SOURCE\unitlength}\basicWadjdist[\ARROWLENGTH]}}%
+\let\wadjdisT=\Wadjdist
+
+% basic west triple of arrows
+\def\basicwtriar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\htricase{\WTRIAR}{\Z}}%
+
+% west triple of arrows
+\newcommand{\wtriar}{\@ifnextchar[{\basicwtriar}%
+{\hspace{\SOURCE\unitlength}\basicwtriar[\ARROWLENGTH]}}%
+
+% basic west triple of arrows with upper names
+\def\basicWtriar[#1]#2#3#4{%
+\Z=#1%
+\multiply \Z by 100%
+\Htricase{\WTRIAR}{#2}{#3}{#4}{}{\Z}}%
+
+% west triple of arrows with upper names
+\newcommand{\Wtriar}{\@ifnextchar[{\basicWtriar}%
+{\hspace{\SOURCE\unitlength}\basicWtriar[\ARROWLENGTH]}}%
+
+% basic west triple of arrows with lower names
+\def\basicwtriaR[#1]#2#3#4{%
+\Z=#1%
+\multiply \Z by 100%
+\Htricase{\WTRIAR}{}{#2}{#3}{#4}{\Z}}%
+
+% west triple of arrows with lower name
+\newcommand{\wtriaR}{\@ifnextchar[{\basicwtriaR}%
+{\hspace{\SOURCE\unitlength}\basicwtriaR[\ARROWLENGTH]}}%
+
+% basic west triple of adjoint arrows
+\def\basicwtriadjar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\htricase{\WTRIADJAR}{\Z}}%
+
+% west triple of adjoint arrows
+\newcommand{\wtriadjar}{\@ifnextchar[{\basicwtriadjar}%
+{\hspace{\SOURCE\unitlength}\basicwtriadjar[\ARROWLENGTH]}}%
+
+% basic west triple of adjoint arrows with upper names
+\def\basicWtriadjar[#1]#2#3#4{%
+\Z=#1%
+\multiply \Z by 100%
+\Htricase{\WTRIADJAR}{#2}{#3}{#4}{}{\Z}}%
+
+% west triple of adjoint arrows with upper names
+\newcommand{\Wtriadjar}{\@ifnextchar[{\basicWtriadjar}%
+{\hspace{\SOURCE\unitlength}\basicWtriadjar[\ARROWLENGTH]}}%
+
+% basic west triple of adjoint arrows with lower names
+\def\basicwtriadjaR[#1]#2#3#4{%
+\Z=#1%
+\multiply \Z by 100%
+\Htricase{\WTRIADJAR}{}{#2}{#3}{#4}{\Z}}%
+
+% west triple of adjoint arrows with lower name
+\newcommand{\wtriadjaR}{\@ifnextchar[{\basicwtriadjaR}%
+{\hspace{\SOURCE\unitlength}\basicwtriadjaR[\ARROWLENGTH]}}%
+
+% basic west quadruple of arrows
+\def\basicwquadriar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hmulticase{\WQUADRIAR}{\Z}}%
+
+% west quadruple of arrows
+\newcommand{\wquadriar}{\@ifnextchar[{\basicwquadriar}%
+{\hspace{\SOURCE\unitlength}\basicwquadriar[\ARROWLENGTH]}}%
+
+% basic west quadruple of adjoint arrows
+\def\basicwquadriadjar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hmulticase{\WQUADRIADJAR}{\Z}}%
+
+% west quadruple of adjoint arrows
+\newcommand{\wquadriadjar}{\@ifnextchar[{\basicwquadriadjar}%
+{\hspace{\SOURCE\unitlength}\basicwquadriadjar[\ARROWLENGTH]}}%
+
+% basic west quintuple of arrows
+\def\basicwquintiar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hmulticase{\WQUINTIAR}{\Z}}%
+
+% west quintuple of arrows
+\newcommand{\wquintiar}{\@ifnextchar[{\basicwquintiar}%
+{\hspace{\SOURCE\unitlength}\basicwquintiar[\ARROWLENGTH]}}%
+
+% basic west quintuple of adjoint arrows
+\def\basicwquintiadjar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hmulticase{\WQUINTIADJAR}{\Z}}%
+
+% west quintuple of adjoint arrows
+\newcommand{\wquintiadjar}{\@ifnextchar[{\basicwquintiadjar}%
+{\hspace{\SOURCE\unitlength}\basicwquintiadjar[\ARROWLENGTH]}}%
+
+
+% 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$}}}}%
+
+% \Visocase{P}{f}{g}{n} draws the vertical picture P
+% with names f, g and length n units.
+\newcommand{\Visocase}[4]{\testdiagrammode\makebox[0pt]%
+{\makebox[0pt][r]{\raisebox{0pt}[0pt][0pt]{$#2$\hspace{2pt}}}#1{#4}%
+\makebox[0pt][l]{\raisebox{0pt}[0pt][0pt]{\hspace{2pt}$#3$}}}}%
+
+% \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$}}}}%
+
+% \vtricase{P}{n} draws the vertical tri-picture P
+% with length n units
+\newcommand{\vtricase}[2]%
+{\testdiagrammode\makebox[0pt]{#1{}{}{}{}{#2}}}%
+
+% \Vtricase{P}{f}{g}{h}{i}{n} draws the vertical tri-picture P
+% with length n units and names f, g, h, i.
+\newcommand{\Vtricase}[6]%
+{\testdiagrammode\makebox[0pt]{#1{#2}{#3}{#4}{#5}{#6}}}%
+
+% \vmulticase{P}{n} draws the vertical multi-picture P
+% with length n units.
+\newcommand{\vmulticase}[2]{\testdiagrammode\makebox[0pt]{#1{#2}}}%
+
+
+% 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){\line(0,-1){#1}}%
+\put(0,0){\shead}%
+\end{picture}}}\end{picture}}%
+
+% \SDIST{n} draws a south distributor of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\SDIST}[1]%
+{\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(0,#1){\line(0,-1){#1}}%
+\put(0,0){\shead}%
+\end{picture}}}%
+\put(0,0){\distsign}%
+\end{picture}}%
+
+% \SDOTAR{n} draws a south dotted arrow of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\SDOTAR}[1]%
+{\truex{100}\truey{300}%
+\NUMBEROFDOTS=#1%
+\divide\NUMBEROFDOTS by \value{y}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\multiput(0,#1)(0,-\value{y}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(0,0){\shead}%
+\end{picture}}}\end{picture}}%
+
+% \SMONO{n} draws a south monomorphism of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\SMONO}[1]%
+{\truetail%
+\monolength=#1%
+\advance\monolength by -\truemonotail%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(0,\monolength){\line(0,-1){\monolength}}%
+\put(0,\monolength){\shead}%
+\put(0,0){\shead}%
+\end{picture}}}\end{picture}}%
+
+
+% \SEPI{n} draws a south epimorphism of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\SEPI}[1]%
+{\truehead%
+\epilength=#1%
+\advance\epilength by -\trueepihead%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(0,#1){\line(0,-1){\epilength}}%
+\put(0,\trueepihead){\shead}%
+\put(0,0){\shead}%
+\end{picture}}}\end{picture}}%
+
+% \SBIMO{n} draws a south bimorphism of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\SBIMO}[1]%
+{\truehead\truetail%
+\monolength=#1%
+\advance\monolength by -\truemonotail%
+\epilength=\monolength%
+\advance\epilength by -\trueepihead%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(0,\monolength){\line(0,-1){\epilength}}%
+\put(0,\monolength){\shead}%
+\put(0,\trueepihead){\shead}%
+\put(0,0){\shead}%
+\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){\line(0,-1){#1}}%
+\put(-\value{x},0){\shead}%
+\put(\value{x},#1){\line(0,-1){#1}}%
+\put(\value{x},0){\shead}%
+\end{picture}}}\end{picture}}%
+
+% \SBIDIST{n} draws a pair of south distributors of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\SBIDIST}[1]%
+{\begin{picture}(0,0)%
+\truex{350}%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{x},#1){\line(0,-1){#1}}%
+\put(-\value{x},0){\shead}%
+\put(\value{x},#1){\line(0,-1){#1}}%
+\put(\value{x},0){\shead}%
+\end{picture}}}%
+\put(-\value{x},0){\distsign}%
+\put(\value{x},0){\distsign}%
+\end{picture}}%
+
+% \SEQL{n} draws a vertical equality of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\SEQL}[1]%
+{\begin{picture}(0,0)%
+\truex{100}%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)\put(-\value{x},#1){\line(0,-1){#1}}%
+\put(\value{x},#1){\line(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){\line(0,-1){#1}}%
+\put(-\value{x},0){\shead}%
+\put(\value{x},0){\line(0,1){#1}}%
+\put(\value{x},#1){\nhead}%
+\end{picture}}}\end{picture}}%
+
+% \SADJDIST{n} draws a pair of vertical adjoint distributors of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\SADJDIST}[1]{\begin{picture}(0,0)%
+\truex{350}%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{x},#1){\line(0,-1){#1}}%
+\put(-\value{x},0){\shead}%
+\put(\value{x},0){\line(0,1){#1}}%
+\put(\value{x},#1){\nhead}%
+\end{picture}}}%
+\put(-\value{x},0){\distsign}%
+\put(\value{x},0){\distsign}%
+\end{picture}}%
+
+% \STRIAR{f}{g}{h}{i}{n} draws a triple of south arrows
+% of length n units with names f, g, h, i
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\STRIAR}[5]%
+{\truex{1200}%
+\truey{1800}%
+\truez{600}%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#5)%
+\X=#5\divide\X by 2%
+\put(-\value{x},#5){\line(0,-1){#5}}%
+\put(-\value{x},0){\shead}%
+\put(0,#5){\line(0,-1){#5}}%
+\put(0,0){\shead}%
+\put(\value{x},#5){\line(0,-1){#5}}%
+\put(\value{x},0){\shead}%
+\put(-\value{y},\X){\makebox(0,0){$#1$}}%
+\put(\value{y},\X){\makebox(0,0){$#4$}}%
+\put(-\value{z},\X){\makebox(0,0){$#2$}}%
+\put(\value{z},\X){\makebox(0,0){$#3$}}%
+\end{picture}}}\end{picture}}%
+
+% \STRIADJAR{f}{g}{h}{i}{n} draws a south triple of adjoint
+% arrows of length n units with names f, g, h, i
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\STRIADJAR}[5]%
+{\truex{1200}%
+\truey{1800}%
+\truez{600}%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#5)%
+\X=#5\divide\X by 2%
+\put(-\value{x},0){\line(0,1){#5}}%
+\put(-\value{x},#5){\nhead}%
+\put(0,#5){\line(0,-1){#5}}%
+\put(0,0){\shead}%
+\put(\value{x},0){\line(0,1){#5}}%
+\put(\value{x},#5){\nhead}%
+\put(-\value{y},\X){\makebox(0,0){$#1$}}%
+\put(\value{y},\X){\makebox(0,0){$#4$}}%
+\put(-\value{z},\X){\makebox(0,0){$#2$}}%
+\put(\value{z},\X){\makebox(0,0){$#3$}}%
+\end{picture}}}\end{picture}}%
+
+% \SQUADRIAR{n} draws a quadruple of south arrows of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\SQUADRIAR}[1]%
+{\truex{400}%
+\truey{1200}%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{y},#1){\line(0,-1){#1}}%
+\put(-\value{y},0){\shead}%
+\put(-\value{x},#1){\line(0,-1){#1}}%
+\put(-\value{x},0){\shead}%
+\put(\value{x},#1){\line(0,-1){#1}}%
+\put(\value{x},0){\shead}%
+\put(\value{y},#1){\line(0,-1){#1}}%
+\put(\value{y},0){\shead}%
+\end{picture}}}\end{picture}}%
+
+% \SQUADRIADJAR{n} draws a south quadruple of adjoint arrows
+% of length n units and centers it in a box of width 0pt and height 0pt
+\newcommand{\SQUADRIADJAR}[1]%
+{\truex{400}%
+\truey{1200}%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{y},#1){\line(0,-1){#1}}%
+\put(-\value{y},0){\shead}%
+\put(-\value{x},0){\line(0,1){#1}}%
+\put(-\value{x},#1){\nhead}%
+\put(\value{x},#1){\line(0,-1){#1}}%
+\put(\value{x},0){\shead}%
+\put(\value{y},0){\line(0,1){#1}}%
+\put(\value{y},#1){\nhead}%
+\end{picture}}}\end{picture}}%
+
+% \SQUINTIAR{n} draws a quintuple of south arrows of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\SQUINTIAR}[1]%
+{\truex{600}%
+\truey{1200}%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{y},#1){\line(0,-1){#1}}%
+\put(-\value{y},0){\shead}%
+\put(-\value{x},#1){\line(0,-1){#1}}%
+\put(-\value{x},0){\shead}%
+\put(0,#1){\line(0,-1){#1}}%
+\put(0,0){\shead}%
+\put(\value{x},#1){\line(0,-1){#1}}%
+\put(\value{x},0){\shead}%
+\put(\value{y},#1){\line(0,-1){#1}}%
+\put(\value{y},0){\shead}%
+\end{picture}}}\end{picture}}%
+
+% \SQUINTIADJAR{n} draws a south quintuple of adjoint arrows
+% of length n units and centers it in a box of width 0pt and height 0pt
+\newcommand{\SQUINTIADJAR}[1]%
+{\truex{600}%
+\truey{1200}%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{y},#1){\line(0,-1){#1}}%
+\put(-\value{y},0){\shead}%
+\put(-\value{x},0){\line(0,1){#1}}%
+\put(-\value{x},#1){\nhead}%
+\put(0,#1){\line(0,-1){#1}}%
+\put(0,0){\shead}%
+\put(\value{x},0){\line(0,1){#1}}%
+\put(\value{x},#1){\nhead}%
+\put(\value{y},#1){\line(0,-1){#1}}%
+\put(\value{y},0){\shead}%
+\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 south distributor
+\def\basicsdist[#1]{\vcase{\SDIST}{#100}}%
+
+% south distributor
+\newcommand{\sdist}{\@ifnextchar[{\basicsdist}{\basicsdist[50]}}%
+
+% basic south distributor with left name
+\def\basicSdist[#1]#2{\Vcase{\SDIST}{#2\hspace*{2pt}}{#100}}%
+
+% south distributor with left name
+\newcommand{\Sdist}{\@ifnextchar[{\basicSdist}{\basicSdist[50]}}%
+
+% basic south distributor with right name
+\def\basicsdisT[#1]#2{\vcasE{\SDIST}{\hspace*{2pt}#2}{#100}}%
+
+% south distributor with right name
+\newcommand{\sdisT}{\@ifnextchar[{\basicsdisT}{\basicsdisT[50]}}%
+
+% basic south dotted arrow
+\def\basicsdotar[#1]{\vcase{\SDOTAR}{#100}}%
+
+% south dotted arrow
+\newcommand{\sdotar}{\@ifnextchar[{\basicsdotar}{\basicsdotar[50]}}%
+
+% basic south dotted arrow with left name
+\def\basicSdotar[#1]#2{\Vcase{\SDOTAR}{#2}{#100}}%
+
+% south dotted arrow with left name
+\newcommand{\Sdotar}{\@ifnextchar[{\basicSdotar}{\basicSdotar[50]}}%
+
+% basic south dotted arrow with right name
+\def\basicsdotaR[#1]#2{\vcasE{\SDOTAR}{#2}{#100}}%
+
+% south dotted arrow with right name
+\newcommand{\sdotaR}{\@ifnextchar[{\basicsdotaR}{\basicsdotaR[50]}}%
+
+% basic south monomorphism
+\def\basicsmono[#1]{\vcase{\SMONO}{#100}}%
+
+% south arrow
+\newcommand{\smono}{\@ifnextchar[{\basicsmono}{\basicsmono[50]}}%
+
+% basic south monomorphism with left name
+\def\basicSmono[#1]#2{\Vcase{\SMONO}{#2}{#100}}%
+
+% south monomorphism with left name
+\newcommand{\Smono}{\@ifnextchar[{\basicSmono}{\basicSmono[50]}}%
+
+% basic south monomorphism with right name
+\def\basicsmonO[#1]#2{\vcasE{\SMONO}{#2}{#100}}%
+
+% south monomorphism with right name
+\newcommand{\smonO}{\@ifnextchar[{\basicsmonO}{\basicsmonO[50]}}%
+
+% basic south epimorphism
+\def\basicsepi[#1]{\vcase{\SEPI}{#100}}%
+
+% south epimorphism
+\newcommand{\sepi}{\@ifnextchar[{\basicsepi}{\basicsepi[50]}}%
+
+% basic south epimorphism with left name
+\def\basicSepi[#1]#2{\Vcase{\SEPI}{#2}{#100}}%
+
+% south epimorphism with left name
+\newcommand{\Sepi}{\@ifnextchar[{\basicSepi}{\basicSepi[50]}}%
+
+% basic south epimorphism with right name
+\def\basicsepI[#1]#2{\vcasE{\SEPI}{#2}{#100}}%
+
+% south epimorphism with right name
+\newcommand{\sepI}{\@ifnextchar[{\basicsepI}{\basicsepI[50]}}%
+
+% basic south bimorphism
+\def\basicsbimo[#1]{\vcase{\SBIMO}{#100}}%
+
+% south bimorphism
+\newcommand{\sbimo}{\@ifnextchar[{\basicsbimo}{\basicsbimo[50]}}%
+
+% basic south bimorphism with left name
+\def\basicSbimo[#1]#2{\Vcase{\SBIMO}{#2}{#100}}%
+
+% south bimorphism with left name
+\newcommand{\Sbimo}{\@ifnextchar[{\basicSbimo}{\basicSbimo[50]}}%
+
+% basic south bimorphism with right name
+\def\basicsbimO[#1]#2{\vcasE{\SBIMO}{#2}{#100}}%
+
+% south bimorphism with right name
+\newcommand{\sbimO}{\@ifnextchar[{\basicsbimO}{\basicsbimO[50]}}%
+
+% basic south isomorphism
+\def\basicsiso[#1]{\Visocase{\SAR}{\isosign}{}{#100}}%
+
+% south isomorphism
+\newcommand{\siso}{\@ifnextchar[{\basicsiso}{\basicsiso[50]}}%
+
+% basic south isomorphism with left name
+\def\basicSiso[#1]#2{\Visocase{\SAR}{#2}{\isosign}{#100}}%
+
+% south isomorphism with left name
+\newcommand{\Siso}{\@ifnextchar[{\basicSiso}{\basicSiso[50]}}%
+
+% basic south isomorphism with right name
+\def\basicsisO[#1]#2{\Visocase{\SAR}{\isosign}{#2}{#100}}%
+
+% south isomorphism with right name
+\newcommand{\sisO}{\@ifnextchar[{\basicsisO}{\basicsisO[50]}}%
+
+% basic south equality
+\def\basicseql[#1]{\vcase{\SEQL}{#100}}%
+
+% south equality
+\newcommand{\seql}{\@ifnextchar[{\basicseql}{\basicseql[50]}}%
+
+% basic south equality with left name
+\def\basicSeql[#1]#2{\Vcase{\SEQL}{#2\hspace*{2pt}}{#100}}%
+
+% south equality with left name
+\newcommand{\Seql}{\@ifnextchar[{\basicSeql}{\basicSeql[50]}}%
+
+% basic south equality with right name
+\def\basicseqL[#1]#2{\vcasE{\SEQL}{\hspace*{2pt}#2}{#100}}%
+
+% south equality with right name
+\newcommand{\seqL}{\@ifnextchar[{\basicseqL}{\basicseqL[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 distributors
+\def\basicsbidist[#1]{\vbicase{\SBIDIST}{#100}}%
+
+% pair of south distributors
+\newcommand{\sbidist}{\@ifnextchar[{\basicsbidist}{\basicsbidist[50]}}%
+
+% basic pair of south distributors with names
+\def\basicSbidist[#1]#2#3%
+{\Vbicase{\SBIDIST}{#2\hspace*{2pt}}{\hspace*{2pt}#3}{#100}}%
+
+% pair of south distributors with names
+\newcommand{\Sbidist}{\@ifnextchar[{\basicSbidist}{\basicSbidist[50]}}%
+\let\sbidisT=\Sbidist
+
+% 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
+
+% basic pair of south adjoint distributors
+\def\basicsadjdist[#1]{\vbicase{\SADJDIST}{#100}}%
+
+% pair of south adjoint distributors
+\newcommand{\sadjdist}{\@ifnextchar[{\basicsadjdist}{\basicsadjdist[50]}}%
+
+% basic pair of south adjoint distributors with names
+\def\basicSadjdist[#1]#2#3%
+{\Vbicase{\SADJDIST}{#2\hspace*{2pt}}{\hspace*{2pt}#3}{#100}}%
+
+% pair of south adjoint distributors with names
+\newcommand{\Sadjdist}{\@ifnextchar[{\basicSadjdist}{\basicSadjdist[50]}}%
+\let\sadjdisT=\Sadjdist
+
+% basic south triple of arrows
+\def\basicstriar[#1]{\vtricase{\STRIAR}{#100}}%
+
+% south triple of arrows
+\newcommand{\striar}{\@ifnextchar[{\basicstriar}{\basicstriar[50]}}%
+
+% basic south triple of arrows with left names
+\def\basicStriar[#1]#2#3#4{\Vtricase{\STRIAR}{#2}{#3}{#4}{}{#100}}%
+
+% south triple of arrows with left names
+\newcommand{\Striar}{\@ifnextchar[{\basicStriar}{\basicStriar[50]}}%
+
+% basic south triple of arrows with right names
+\def\basicstriaR[#1]#2#3#4{\Vtricase{\STRIAR}{}{#2}{#3}{#4}{#100}}%
+
+% south triple of arrows with right name
+\newcommand{\striaR}{\@ifnextchar[{\basicstriaR}{\basicstriaR[50]}}%
+
+% basic south triple of adjoint arrows
+\def\basicstriadjar[#1]{\vtricase{\STRIADJAR}{#100}}%
+
+% south triple of adjoint arrows
+\newcommand{\striadjar}{\@ifnextchar[{\basicstriadjar}{\basicstriadjar[50]}}%
+
+% basic south triple of adjoint arrows with left names
+\def\basicStriadjar[#1]#2#3#4{\Vtricase{\STRIADJAR}{#2}{#3}{#4}{}{#100}}%
+
+% south triple of adjoint arrows with left names
+\newcommand{\Striadjar}{\@ifnextchar[{\basicStriadjar}{\basicStriadjar[50]}}%
+
+% basic south triple of adjoint arrows with right names
+\def\basicstriadjaR[#1]#2#3#4{\Vtricase{\STRIADJAR}{}{#2}{#3}{#4}{#100}}%
+
+% south triple of adjoint arrows with right name
+\newcommand{\striadjaR}{\@ifnextchar[{\basicstriadjaR}{\basicstriadjaR[50]}}%
+
+% basic south quadruple of arrows
+\def\basicsquadriar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\vmulticase{\SQUADRIAR}{\Z}}%
+
+% south quadruple of arrows
+\newcommand{\squadriar}{\@ifnextchar[{\basicsquadriar}%
+{\hspace{\SOURCE\unitlength}\basicsquadriar[\ARROWLENGTH]}}%
+
+% basic south quadruple of adjoint arrows
+\def\basicsquadriadjar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\vmulticase{\SQUADRIADJAR}{\Z}}%
+
+% south quadruple of adjoint arrows
+\newcommand{\squadriadjar}{\@ifnextchar[{\basicsquadriadjar}%
+{\hspace{\SOURCE\unitlength}\basicsquadriadjar[\ARROWLENGTH]}}%
+
+% basic south quintuple of arrows
+\def\basicsquintiar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\vmulticase{\SQUINTIAR}{\Z}}%
+
+% south quintuple of arrows
+\newcommand{\squintiar}{\@ifnextchar[{\basicsquintiar}%
+{\hspace{\SOURCE\unitlength}\basicsquintiar[\ARROWLENGTH]}}%
+
+% basic south quintuple of adjoint arrows
+\def\basicsquintiadjar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\vmulticase{\SQUINTIADJAR}{\Z}}%
+
+% south quintuple of adjoint arrows
+\newcommand{\squintiadjar}{\@ifnextchar[{\basicsquintiadjar}%
+{\hspace{\SOURCE\unitlength}\basicsquintiadjar[\ARROWLENGTH]}}%
+
+
+% 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){\line(0,1){#1}}%
+\put(0,#1){\nhead}%
+\end{picture}}}\end{picture}}%
+
+% \NDIST{n} draws a north distributor of length n pt
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NDIST}[1]%
+{\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(0,0){\line(0,1){#1}}%
+\put(0,#1){\nhead}%
+\end{picture}}}
+\put(0,0){\distsign}%
+\end{picture}}%
+
+% \NDOTAR{n} draws a north dotted arrow of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NDOTAR}[1]%
+{\truex{100}\truey{300}%
+\NUMBEROFDOTS=#1%
+\divide\NUMBEROFDOTS by \value{y}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\multiput(0,0)(0,\value{y}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(0,#1){\nhead}%
+\end{picture}}}\end{picture}}%
+
+
+% \NMONO{n} draws a north monomorphism of length n pt
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NMONO}[1]%
+{\truetail%
+\monolength=#1%
+\advance\monolength by -\truemonotail%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(0,\truemonotail){\line(0,1){\monolength}}%
+\put(0,#1){\nhead}%
+\put(0,\truemonotail){\nhead}%
+\end{picture}}}\end{picture}}%
+
+% \NEPI{n} draws a north epimorphism of length n pt
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NEPI}[1]%
+{\truehead%
+\epilength=#1%
+\advance\epilength by -\trueepihead%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(0,0){\line(0,1){\epilength}}%
+\put(0,#1){\nhead}%
+\put(0,\epilength){\nhead}%
+\end{picture}}}\end{picture}}%
+
+% \NBIMO{n} draws a north bimorphism of length n pt
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NBIMO}[1]%
+{\truehead\truetail%
+\epilength=#1%
+\advance\epilength by -\trueepihead%
+\monolength=\epilength%
+\advance\monolength by -\truemonotail%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(0,\truemonotail){\line(0,1){\monolength}}%
+\put(0,#1){\nhead}%
+\put(0,\truemonotail){\nhead}%
+\put(0,\epilength){\nhead}%
+\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){\line(0,1){#1}}%
+\put(-\value{x},#1){\nhead}%
+\put(\value{x},0){\line(0,1){#1}}%
+\put(\value{x},#1){\nhead}%
+\end{picture}}}\end{picture}}%
+
+% \NBIDIST{n} draws a pair of north distributors of length n pt
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NBIDIST}[1]%
+{\begin{picture}(0,0)%
+\truex{350}%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{x},0){\line(0,1){#1}}%
+\put(-\value{x},#1){\nhead}%
+\put(\value{x},0){\line(0,1){#1}}%
+\put(\value{x},#1){\nhead}%
+\end{picture}}}
+\put(-\value{x},0){\distsign}%
+\put(\value{x},0){\distsign}%
+\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){\line(0,-1){#1}}%
+\put(\value{x},0){\shead}%
+\put(-\value{x},0){\line(0,1){#1}}%
+\put(-\value{x},#1){\nhead}%
+\end{picture}}}\end{picture}}%
+
+% \NADJDIST{n} draws a pair of vertical adjoint distributors of length n pt
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NADJDIST}[1]{\begin{picture}(0,0)%
+\truex{350}%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(\value{x},#1){\line(0,-1){#1}}%
+\put(\value{x},0){\shead}%
+\put(-\value{x},0){\line(0,1){#1}}%
+\put(-\value{x},#1){\nhead}%
+\end{picture}}}
+\put(-\value{x},0){\distsign}%
+\put(\value{x},0){\distsign}%
+\end{picture}}%
+
+% \NTRIAR{f}{g}{h}{i}{n} draws a triple of north arrows
+% of length n units with names f, g, h, i
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NTRIAR}[5]%
+{\truex{1200}%
+\truey{1800}%
+\truez{600}%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#5)%
+\X=#5\divide\X by 2%
+\put(-\value{x},0){\line(0,1){#5}}%
+\put(-\value{x},#5){\nhead}%
+\put(0,0){\line(0,1){#5}}%
+\put(0,#5){\nhead}%
+\put(\value{x},0){\line(0,1){#5}}%
+\put(\value{x},#5){\nhead}%
+\put(-\value{y},\X){\makebox(0,0){$#1$}}%
+\put(\value{y},\X){\makebox(0,0){$#4$}}%
+\put(-\value{z},\X){\makebox(0,0){$#2$}}%
+\put(\value{z},\X){\makebox(0,0){$#3$}}%
+\end{picture}}}\end{picture}}%
+
+% \NTRIADJAR{f}{g}{h}{i}{n} draws a north triple of adjoint
+% arrows of length n units with names f, g, h, i
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NTRIADJAR}[5]%
+{\truex{1200}%
+\truey{1800}%
+\truez{600}%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#5)%
+\X=#5\divide\X by 2%
+\put(-\value{x},#5){\line(0,-1){#5}}%
+\put(-\value{x},0){\shead}%
+\put(0,0){\line(0,1){#5}}%
+\put(0,#5){\nhead}%
+\put(\value{x},#5){\line(0,-1){#5}}%
+\put(\value{x},0){\shead}%
+\put(-\value{y},\X){\makebox(0,0){$#1$}}%
+\put(\value{y},\X){\makebox(0,0){$#4$}}%
+\put(-\value{z},\X){\makebox(0,0){$#2$}}%
+\put(\value{z},\X){\makebox(0,0){$#3$}}%
+\end{picture}}}\end{picture}}%
+
+% \NQUADRIAR{n} draws a quadruple of north arrows of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NQUADRIAR}[1]%
+{\truex{400}%
+\truey{1200}%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{y},0){\line(0,1){#1}}%
+\put(-\value{y},#1){\nhead}%
+\put(-\value{x},0){\line(0,1){#1}}%
+\put(-\value{x},#1){\nhead}%
+\put(\value{x},0){\line(0,1){#1}}%
+\put(\value{x},#1){\nhead}%
+\put(\value{y},0){\line(0,1){#1}}%
+\put(\value{y},#1){\nhead}%
+\end{picture}}}\end{picture}}%
+
+% \NQUADRIADJAR{n} draws a north quadruple of adjoint arrows
+% of length n units and centers it in a box of width 0pt and height 0pt
+\newcommand{\NQUADRIADJAR}[1]%
+{\truex{400}%
+\truey{1200}%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{y},0){\line(0,1){#1}}%
+\put(-\value{y},#1){\nhead}%
+\put(-\value{x},#1){\line(0,-1){#1}}%
+\put(-\value{x},0){\shead}%
+\put(\value{x},0){\line(0,1){#1}}%
+\put(\value{x},#1){\nhead}%
+\put(\value{y},#1){\line(0,-1){#1}}%
+\put(\value{y},0){\shead}%
+\end{picture}}}\end{picture}}%
+
+% \NQUINTIAR{n} draws a quintuple of north arrows of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NQUINTIAR}[1]%
+{\truex{600}%
+\truey{1200}%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{y},0){\line(0,1){#1}}%
+\put(-\value{y},#1){\nhead}%
+\put(-\value{x},0){\line(0,1){#1}}%
+\put(-\value{x},#1){\nhead}%
+\put(0,0){\line(0,1){#1}}%
+\put(0,#1){\nhead}%
+\put(\value{x},0){\line(0,1){#1}}%
+\put(\value{x},#1){\nhead}%
+\put(\value{y},0){\line(0,1){#1}}%
+\put(\value{y},#1){\nhead}%
+\end{picture}}}\end{picture}}%
+
+% \NQUINTIADJAR{n} draws a north quintuple of adjoint arrows
+% of length n units and centers it in a box of width 0pt and height 0pt
+\newcommand{\NQUINTIADJAR}[1]%
+{\truex{600}%
+\truey{1200}%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{y},0){\line(0,1){#1}}%
+\put(-\value{y},#1){\nhead}%
+\put(-\value{x},#1){\line(0,-1){#1}}%
+\put(-\value{x},0){\shead}%
+\put(0,0){\line(0,1){#1}}%
+\put(0,#1){\nhead}%
+\put(\value{x},#1){\line(0,-1){#1}}%
+\put(\value{x},0){\shead}%
+\put(\value{y},0){\line(0,1){#1}}%
+\put(\value{y},#1){\nhead}%
+\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 north distributor
+\def\basicndist[#1]{\vcase{\NDIST}{#100}}%
+
+% north distributor
+\newcommand{\ndist}{\@ifnextchar[{\basicndist}{\basicndist[50]}}%
+
+% basic north distributor with left name
+\def\basicNdist[#1]#2{\Vcase{\NDIST}{#2\hspace*{2pt}}{#100}}%
+
+% north distributor with left name
+\newcommand{\Ndist}{\@ifnextchar[{\basicNdist}{\basicNdist[50]}}%
+
+% basic north distributor with right name
+\def\basicndisT[#1]#2{\vcasE{\NDIST}{\hspace*{2pt}#2}{#100}}%
+
+% north distributor with right name
+\newcommand{\ndisT}{\@ifnextchar[{\basicndisT}{\basicndisT[50]}}%
+
+% basic north dotted arrow
+\def\basicndotar[#1]{\vcase{\NDOTAR}{#100}}%
+
+% north dotted arrow
+\newcommand{\ndotar}{\@ifnextchar[{\basicndotar}{\basicndotar[50]}}%
+
+% basic north dotted arrow with left name
+\def\basicNdotar[#1]#2{\Vcase{\NDOTAR}{#2}{#100}}%
+
+% north dotted arrow with left name
+\newcommand{\Ndotar}{\@ifnextchar[{\basicNdotar}{\basicNdotar[50]}}%
+
+% basic north dotted arrow with right name
+\def\basicndotaR[#1]#2{\vcasE{\NDOTAR}{#2}{#100}}%
+
+% north dotted arrow with right name
+\newcommand{\ndotaR}{\@ifnextchar[{\basicndotaR}{\basicndotaR[50]}}%
+
+% basic north monomorphism
+\def\basicnmono[#1]{\vcase{\NMONO}{#100}}%
+
+% north arrow
+\newcommand{\nmono}{\@ifnextchar[{\basicnmono}%
+{\basicnmono[50]}}%
+
+% basic north monomorphism with left name
+\def\basicNmono[#1]#2{\Vcase{\NMONO}{#2}{#100}}%
+
+% north monomorphism with left name
+\newcommand{\Nmono}{\@ifnextchar[{\basicNmono}{\basicNmono[50]}}%
+
+% basic north monomorphism with right name
+\def\basicnmonO[#1]#2{\vcasE{\NMONO}{#2}{#100}}%
+
+% north monomorphism with right name
+\newcommand{\nmonO}{\@ifnextchar[{\basicnmonO}{\basicnmonO[50]}}%
+
+% basic north epimorphism
+\def\basicnepi[#1]{\vcase{\NEPI}{#100}}%
+
+% north epimorphism
+\newcommand{\nepi}{\@ifnextchar[{\basicnepi}{\basicnepi[50]}}%
+
+% basic north epimorphism with left name
+\def\basicNepi[#1]#2{\Vcase{\NEPI}{#2}{#100}}%
+
+% north epimorphism with left name
+\newcommand{\Nepi}{\@ifnextchar[{\basicNepi}{\basicNepi[50]}}%
+
+% basic north epimorphism with right name
+\def\basicnepI[#1]#2{\vcasE{\NEPI}{#2}{#100}}%
+
+% north epimorphism with right name
+\newcommand{\nepI}{\@ifnextchar[{\basicnepI}{\basicnepI[50]}}%
+
+% basic north bimorphism
+\def\basicnbimo[#1]{\vcase{\NBIMO}{#100}}%
+
+% north bimorphism
+\newcommand{\nbimo}{\@ifnextchar[{\basicnbimo}{\basicnbimo[50]}}%
+
+% basic north bimorphism with left name
+\def\basicNbimo[#1]#2{\Vcase{\NBIMO}{#2}{#100}}%
+
+% north bimorphism with left name
+\newcommand{\Nbimo}{\@ifnextchar[{\basicNbimo}{\basicNbimo[50]}}%
+
+% basic north bimorphism with right name
+\def\basicnbimO[#1]#2{\vcasE{\NBIMO}{#2}{#100}}%
+
+% north bimorphism with right name
+\newcommand{\nbimO}{\@ifnextchar[{\basicnbimO}{\basicnbimO[50]}}%
+
+% basic north isomorphism
+\def\basicniso[#1]{\Visocase{\NAR}{\isosign}{}{#100}}%
+
+% north isomorphism
+\newcommand{\niso}{\@ifnextchar[{\basicniso}{\basicniso[50]}}%
+
+% basic north isomorphism with left name
+\def\basicNiso[#1]#2{\Visocase{\NAR}{#2}{\isosign}{#100}}%
+
+% north isomorphism with left name
+\newcommand{\Niso}{\@ifnextchar[{\basicNiso}{\basicNiso[50]}}%
+
+% basic north isomorphism with right name
+\def\basicnisO[#1]#2{\Visocase{\NAR}{\isosign}{#2}{#100}}%
+
+% north isomorphism with right name
+\newcommand{\nisO}{\@ifnextchar[{\basicnisO}{\basicnisO[50]}}%
+
+% north equality
+\let\neql=\seql%
+
+% north equality with left name
+\let\Neql=\Seql%
+
+% north equality with right name
+\let\neqL=\seqL%
+
+% 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 distributors
+\def\basicnbidist[#1]{\vbicase{\NBIDIST}{#100}}%
+
+% pair of north distributors
+\newcommand{\nbidist}{\@ifnextchar[{\basicnbidist}{\basicnbidist[50]}}%
+
+% basic pair of north distributors with names
+\def\basicNbidist[#1]#2#3%
+{\Vbicase{\NBIDIST}{#2\hspace*{2pt}}{\hspace*{2pt}#3}{#100}}%
+
+% pair of north distributors with names
+\newcommand{\Nbidist}{\@ifnextchar[{\basicNbidist}{\basicNbidist[50]}}%
+\let\nbidisT=\Nbidist
+
+% 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
+
+% basic pair of north adjoint distributors
+\def\basicnadjdist[#1]{\vbicase{\NADJDIST}{#100}}%
+
+% pair of north adjoint distributors
+\newcommand{\nadjdist}{\@ifnextchar[{\basicnadjdist}{\basicnadjdist[50]}}%
+
+% basic pair of north adjoint distributors with names
+\def\basicNadjdist[#1]#2#3%
+{\Vbicase{\NADJDIST}{#2\hspace*{2pt}}{\hspace*{2pt}#3}{#100}}%
+
+% pair of north adjoint distributors with names
+\newcommand{\Nadjdist}{\@ifnextchar[{\basicNadjdist}{\basicNadjdist[50]}}%
+\let\nadjdisT=\Nadjdist
+
+% basic north triple of arrows
+\def\basicntriar[#1]{\vtricase{\NTRIAR}{#100}}%
+
+% north triple of arrows
+\newcommand{\ntriar}{\@ifnextchar[{\basicntriar}{\basicntriar[50]}}%
+
+% basic north triple of arrows with left names
+\def\basicNtriar[#1]#2#3#4{\Vtricase{\NTRIAR}{#2}{#3}{#4}{}{#100}}%
+
+% north triple of arrows with left names
+\newcommand{\Ntriar}{\@ifnextchar[{\basicNtriar}{\basicNtriar[50]}}%
+
+% basic north triple of arrows with right names
+\def\basicntriaR[#1]#2#3#4{\Vtricase{\NTRIAR}{}{#2}{#3}{#4}{#100}}%
+
+% north triple of arrows with right name
+\newcommand{\ntriaR}{\@ifnextchar[{\basicntriaR}{\basicntriaR[50]}}%
+
+% basic north triple of adjoint arrows
+\def\basicntriadjar[#1]{\vtricase{\NTRIADJAR}{#100}}%
+
+% north triple of adjoint arrows
+\newcommand{\ntriadjar}{\@ifnextchar[{\basicntriadjar}{\basicntriadjar[50]}}%
+
+% basic north triple of adjoint arrows with left names
+\def\basicNtriadjar[#1]#2#3#4{\Vtricase{\NTRIADJAR}{#2}{#3}{#4}{}{#100}}%
+
+% north triple of adjoint arrows with left names
+\newcommand{\Ntriadjar}{\@ifnextchar[{\basicNtriadjar}{\basicNtriadjar[50]}}%
+
+% basic north triple of adjoint arrows with right names
+\def\basicntriadjaR[#1]#2#3#4{\Vtricase{\NTRIADJAR}{}{#2}{#3}{#4}{#100}}%
+
+% north triple of adjoint arrows with right name
+\newcommand{\ntriadjaR}{\@ifnextchar[{\basicntriadjaR}{\basicntriadjaR[50]}}%
+
+% basic north quadruple of arrows
+\def\basicnquadriar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\vmulticase{\NQUADRIAR}{\Z}}%
+
+% north quadruple of arrows
+\newcommand{\nquadriar}{\@ifnextchar[{\basicnquadriar}%
+{\hspace{\SOURCE\unitlength}\basicnquadriar[\ARROWLENGTH]}}%
+
+% basic north quadruple of adjoint arrows
+\def\basicnquadriadjar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\vmulticase{\NQUADRIADJAR}{\Z}}%
+
+% north quadruple of adjoint arrows
+\newcommand{\nquadriadjar}{\@ifnextchar[{\basicnquadriadjar}%
+{\hspace{\SOURCE\unitlength}\basicnquadriadjar[\ARROWLENGTH]}}%
+
+% basic north quintuple of arrows
+\def\basicnquintiar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\vmulticase{\NQUINTIAR}{\Z}}%
+
+% north quintuple of arrows
+\newcommand{\nquintiar}{\@ifnextchar[{\basicnquintiar}%
+{\hspace{\SOURCE\unitlength}\basicnquintiar[\ARROWLENGTH]}}%
+
+% basic north quintuple of adjoint arrows
+\def\basicnquintiadjar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\vmulticase{\NQUINTIADJAR}{\Z}}%
+
+% north quintuple of adjoint arrows
+\newcommand{\nquintiadjar}{\@ifnextchar[{\basicnquintiadjar}%
+{\hspace{\SOURCE\unitlength}\basicnquintiadjar[\ARROWLENGTH]}}%
+
+
+% 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){\line(1,1){#1}}%
+\put(\Y,\Y){\nehead}%
+\end{picture}}%
+
+% \NEDIST{n} draws a north-east distributor of length n units
+\newcommand{\NEDIST}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-\Y){\line(1,1){#1}}%
+\put(\Y,\Y){\nehead}%
+\put(0,0){\distsign}%
+\end{picture}}%
+
+% \NEDOTAR{n} draws a north-east dotted arrow of length n units
+\newcommand{\NEDOTAR}[1]%
+{\truex{100}\truey{212}%
+\Y=#1%
+\divide\Y by 2%
+\NUMBEROFDOTS=#1%
+\divide\NUMBEROFDOTS by \value{y}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\multiput(-\Y,-\Y)(\value{y},\value{y}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(\Y,\Y){\nehead}%
+\end{picture}}%
+
+% \NEMONO{n} draws a north-east monomorphism of length n units
+\newcommand{\NEMONO}[1]{%
+\Y=#1%
+\divide \Y by 2%
+\Truetail%
+\bimolength=#1%
+\advance\bimolength by -\Truemonotail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\begin{picture}(0,0)%
+\put(-\monolength,-\monolength){\line(1,1){\bimolength}}%
+\put(-\monolength,-\monolength){\nehead}%
+\put(\Y,\Y){\nehead}%
+\end{picture}}%
+
+% \NEEPI{n} draws a north-east epimorphism of length n units
+\newcommand{\NEEPI}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\Truehead%
+\bimolength=#1%
+\advance\bimolength by -\Trueepihead%
+\epilength=\bimolength%
+\advance\epilength by -\Y%
+\begin{picture}(0,0)%
+\put(-\Y,-\Y){\line(1,1){\bimolength}}%
+\put(\epilength,\epilength){\nehead}%
+\put(\Y,\Y){\nehead}%
+\end{picture}}%
+
+% \NEBIMO{n} draws a north-east bimorphism of length n units
+\newcommand{\NEBIMO}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\Truetail\Truehead%
+\bimolength=#1%
+\advance\bimolength by -\Truemonotail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\advance\bimolength by -\Trueepihead%
+\epilength=\bimolength%
+\advance\epilength by -\monolength%
+\begin{picture}(0,0)%
+\put(-\monolength,-\monolength){\line(1,1){\bimolength}}%
+\put(-\monolength,-\monolength){\nehead}%
+\put(\epilength,\epilength){\nehead}%
+\put(\Y,\Y){\nehead}%
+\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}){\line(1,1){#1}}%
+\put(\value{x},-\value{x}){\line(1,1){#1}}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(\monolength,\epilength){\nehead}%
+\put(\epilength,\monolength){\nehead}%
+\end{picture}}\end{picture}}%
+
+% \NEBIDIST{n} draws a pair of north-east distributors of length n units
+\newcommand{\NEBIDIST}[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}){\line(1,1){#1}}%
+\put(\epilength,\monolength){\nehead}%
+\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}){\line(1,1){#1}}%
+\put(\epilength,\monolength){\nehead}%
+\end{picture}}%
+\put(-\value{x},\value{x}){\distsign}%
+\put(\value{x},-\value{x}){\distsign}%
+\end{picture}}%
+
+% \NEEQL{n} draws a north-east equality of length n units
+\newcommand{\NEEQL}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-\Y){\begin{picture}(0,0)%
+\truex{70}%
+\put(-\value{x},\value{x}){\line(1,1){#1}}%
+\put(\value{x},-\value{x}){\line(1,1){#1}}%
+\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}){\line(1,1){#1}}%
+\put(\epilength,\monolength){\nehead}%
+\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}){\line(-1,-1){#1}}%
+\put(-\epilength,-\monolength){\swhead}%
+\end{picture}}\end{picture}}%
+
+% \NEADJDIST{n} draws a north-east pair of adjoint distributors of length n units
+\newcommand{\NEADJDIST}[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}){\line(1,1){#1}}%
+\put(\epilength,\monolength){\nehead}%
+\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}){\line(-1,-1){#1}}%
+\put(-\epilength,-\monolength){\swhead}%
+\end{picture}}%
+\put(-\value{x},\value{x}){\distsign}%
+\put(\value{x},-\value{x}){\distsign}%
+\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]}}%
+
+% north-east distributor of length nx100 units
+\def\basicnedist[#1]{\fdcase{\NEDIST}{}{}{#100}}%
+
+% north-east distributor
+\newcommand{\nedist}{\@ifnextchar[{\basicnedist}{\basicnedist[59]}}%
+
+% north-east distributor with upper name [1] and length nx100 units
+\def\basicNedist[#1]#2{\fdcase{\NEDIST}{#2}{}{#100}}%
+
+% north-east distributor with upper name
+\newcommand{\Nedist}{\@ifnextchar[{\basicNedist}{\basicNedist[59]}}%
+
+% north-east distributor with lower name [1] and length nx100 units
+\def\basicnedisT[#1]#2{\fdcase{\NEDIST}{}{#2}{#100}}%
+
+% north-east distributor with lower name [1]
+\newcommand{\nedisT}{\@ifnextchar[{\basicnedisT}{\basicnedisT[59]}}%
+
+% north-east dotted arrow of length nx100 units
+\def\basicnedotar[#1]{\fdcase{\NEDOTAR}{}{}{#100}}%
+
+% north-east dotted arrow
+\newcommand{\nedotar}{\@ifnextchar[{\basicnedotar}{\basicnedotar[59]}}%
+
+% north-east dotted arrow with upper name [1] and length nx100 units
+\def\basicNedotar[#1]#2{\fdcase{\NEDOTAR}{#2}{}{#100}}%
+
+% north-east dotted arrow with upper name
+\newcommand{\Nedotar}{\@ifnextchar[{\basicNedotar}{\basicNedotar[59]}}%
+
+% north-east dotted arrow with lower name [1] and length nx100 units
+\def\basicnedotaR[#1]#2{\fdcase{\NEDOTAR}{}{#2}{#100}}%
+
+% north-east dotted arrow with lower name [1]
+\newcommand{\nedotaR}{\@ifnextchar[{\basicnedotaR}{\basicnedotaR[59]}}%
+
+% north-east monomorphism of length nx100 units
+\def\basicnemono[#1]{\fdcase{\NEMONO}{}{}{#100}}%
+
+% north-east monomorphism
+\newcommand{\nemono}{\@ifnextchar[{\basicnemono}{\basicnemono[59]}}%
+
+% north-east monomorphism with upper name [1] and length nx100 units
+\def\basicNemono[#1]#2{\fdcase{\NEMONO}{#2}{}{#100}}%
+
+% north-east monomophism with upper name
+\newcommand{\Nemono}{\@ifnextchar[{\basicNemono}{\basicNemono[59]}}%
+
+% north-east monomorphism with lower name [1] and length nx100 units
+\def\basicnemonO[#1]#2{\fdcase{\NEMONO}{}{#2}{#100}}%
+
+% north-east monomorphism with lower name [1]
+\newcommand{\nemonO}{\@ifnextchar[{\basicnemonO}{\basicnemonO[59]}}%
+
+% north-east epimorphism of length nx100 units
+\def\basicneepi[#1]{\fdcase{\NEEPI}{}{}{#100}}%
+
+% north-east epimorphism
+\newcommand{\neepi}{\@ifnextchar[{\basicneepi}{\basicneepi[59]}}%
+
+% north-east epimorphism with upper name [1] and length nx100 units
+\def\basicNeepi[#1]#2{\fdcase{\NEEPI}{#2}{}{#100}}%
+
+% north-east epimorphism with upper name
+\newcommand{\Neepi}{\@ifnextchar[{\basicNeepi}{\basicNeepi[59]}}%
+
+% north-east epimorphism with lower name [1] and length nx100 units
+\def\basicneepI[#1]#2{\fdcase{\NEEPI}{}{#2}{#100}}%
+
+% north-east epimorphism with lower name [1]
+\newcommand{\neepI}{\@ifnextchar[{\basicneepI}{\basicneepI[59]}}%
+
+% north-east bimorphism of length nx100 units
+\def\basicnebimo[#1]{\fdcase{\NEBIMO}{}{}{#100}}%
+
+% north-east bimorphism
+\newcommand{\nebimo}{\@ifnextchar[{\basicnebimo}{\basicnebimo[59]}}%
+
+% north-east bimorphism with upper name [1] and length nx100 units
+\def\basicNebimo[#1]#2{\fdcase{\NEBIMO}{#2}{}{#100}}%
+
+% north-east bimorphism with upper name
+\newcommand{\Nebimo}{\@ifnextchar[{\basicNebimo}{\basicNebimo[59]}}%
+
+% north-east bimorphism with lower name [1] and length nx100 units
+\def\basicnebimO[#1]#2{\fdcase{\NEBIMO}{}{#2}{#100}}%
+
+% north-east bimorphism with lower name [1]
+\newcommand{\nebimO}{\@ifnextchar[{\basicnebimO}{\basicnebimO[59]}}%
+
+% north-east isomorphism of length nx100 units
+\def\basicneiso[#1]{\fdcase{\NEAR}{\hspace{-2pt}\isosign}{}{#100}}%
+
+% north-east isomorphism
+\newcommand{\neiso}{\@ifnextchar[{\basicneiso}{\basicneiso[59]}}%
+
+% north-east isomorphism with upper name [1] and length nx100 units
+\def\basicNeiso[#1]#2{\fdcase{\NEAR}{#2}{\isosign}{#100}}%
+
+% north-east isomorphism with upper name
+\newcommand{\Neiso}{\@ifnextchar[{\basicNeiso}{\basicNeiso[59]}}%
+
+% north-east isomorphism with lower name [1] and length nx100 units
+\def\basicneisO[#1]#2{\fdcase{\NEAR}{\hspace{-2pt}\isosign}{#2}{#100}}%
+
+% north-east isomorphism with lower name [1]
+\newcommand{\neisO}{\@ifnextchar[{\basicneisO}{\basicneisO[59]}}%
+
+% north-east equality of length nx100 units
+\def\basicneeql[#1]{\fdcase{\NEEQL}{}{}{#100}}%
+
+% north-east equality
+\newcommand{\neeql}{\@ifnextchar[{\basicneeql}{\basicneeql[59]}}%
+
+% north-east equality with upper name [1] and length nx100 units
+\def\basicNeeql[#1]#2{\fdcase{\NEEQL}{#2}{}{#100}}%
+
+% north-east equality with upper name
+\newcommand{\Neeql}{\@ifnextchar[{\basicNeeql}{\basicNeeql[59]}}%
+
+% north-east equality with lower name [1] and length nx100 units
+\def\basicneeqL[#1]#2{\fdcase{\NEEQL}{}{#2}{#100}}%
+
+% north-east equality with lower name [1]
+\newcommand{\neeqL}{\@ifnextchar[{\basicneeqL}{\basicneeqL[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
+
+% pair of north-east distributors of length nx100 units
+\def\basicnebidist[#1]{\fdbicase{\NEBIDIST}{}{}{#100}}%
+
+% pair of north-east distributors
+\newcommand{\nebidist}{\@ifnextchar[{\basicnebidist}{\basicnebidist[59]}}%
+
+% pair of north-east distributors with names [1][2] and length nx100 units
+\def\basicNebidist[#1]#2#3{\fdbicase{\NEBIDIST}{#2}{#3}{#100}}%
+
+% pair of north-east distributors with names
+\newcommand{\Nebidist}{\@ifnextchar[{\basicNebidist}{\basicNebidist[59]}}%
+\let\nebidisT=\Nebidist
+
+% pair of north-east adjoint distributors of length nx100 units
+\def\basicneadjdist[#1]{\fdbicase{\NEADJDIST}{}{}{#100}}%
+
+% pair of north-east adjoint distributors
+\newcommand{\neadjdist}{\@ifnextchar[{\basicneadjdist}{\basicneadjdist[59]}}%
+
+% pair of north-east adjoint distributors with names [1][2] and length nx100 units
+\def\basicNeadjdist[#1]#2#3{\fdbicase{\NEADJDIST}{#2}{#3}{#100}}%
+
+% pair of north-east adjoint distributors with names
+\newcommand{\Neadjdist}{\@ifnextchar[{\basicNeadjdist}{\basicNeadjdist[59]}}%
+\let\neadjdisT=\Neadjdist
+
+
+
+% 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){\line(-1,-1){#1}}%
+\put(-\Y,-\Y){\swhead}%
+\end{picture}}%
+
+% \SWDIST{n} draws a south-west distributor of length n units
+\newcommand{\SWDIST}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(\Y,\Y){\line(-1,-1){#1}}%
+\put(-\Y,-\Y){\swhead}%
+\put(0,0){\distsign}%
+\end{picture}}%
+
+% \SWDOTAR{n} draws a south-west dotted arrow of length n units
+\newcommand{\SWDOTAR}[1]%
+{\truex{100}\truey{212}%
+\Y=#1%
+\divide\Y by 2%
+\NUMBEROFDOTS=#1%
+\divide\NUMBEROFDOTS by \value{y}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\multiput(\Y,\Y)(-\value{y},-\value{y}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(-\Y,-\Y){\swhead}%
+\end{picture}}%
+
+% \SWMONO{n} draws a south-west monomorphism of length n units
+\newcommand{\SWMONO}[1]{%
+\Y=#1%
+\divide \Y by 2%
+\Truetail%
+\bimolength=#1%
+\advance\bimolength by -\Truemonotail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\begin{picture}(0,0)%
+\put(\monolength,\monolength){\line(-1,-1){\bimolength}}%
+\put(\monolength,\monolength){\swhead}%
+\put(-\Y,-\Y){\swhead}%
+\end{picture}}%
+
+% \SWEPI{n} draws a south-west epimorphism of length n units
+\newcommand{\SWEPI}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\Truehead%
+\bimolength=#1%
+\advance\bimolength by -\Trueepihead%
+\epilength=\bimolength%
+\advance\epilength by -\Y%
+\begin{picture}(0,0)%
+\put(\Y,\Y){\line(-1,-1){\bimolength}}%
+\put(-\epilength,-\epilength){\swhead}%
+\put(-\Y,-\Y){\swhead}%
+\end{picture}}%
+
+% \SWBIMO{n} draws a south-west bimorphism of length n units
+\newcommand{\SWBIMO}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\Truetail\Truehead%
+\bimolength=#1%
+\advance\bimolength by -\Truemonotail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\advance\bimolength by -\Trueepihead%
+\epilength=\bimolength%
+\advance\epilength by -\monolength%
+\begin{picture}(0,0)%
+\put(\monolength,\monolength){\line(-1,-1){\bimolength}}%
+\put(\monolength,\monolength){\swhead}%
+\put(-\epilength,-\epilength){\swhead}%
+\put(-\Y,-\Y){\swhead}%
+\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}){\line(-1,-1){#1}}%
+\put(-\value{x},\value{x}){\line(-1,-1){#1}}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(-\monolength,-\epilength){\swhead}%
+\put(-\epilength,-\monolength){\swhead}%
+\end{picture}}\end{picture}}%
+
+% \SWBIDIST{n} draws a pair of south-west distributors of length n units
+\newcommand{\SWBIDIST}[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}){\line(-1,-1){#1}}%
+\put(-\epilength,-\monolength){\swhead}%
+\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}){\line(-1,-1){#1}}%
+\put(-\epilength,-\monolength){\swhead}%
+\end{picture}}%
+\put(\value{x},-\value{x}){\distsign}%
+\put(-\value{x},\value{x}){\distsign}%
+\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}){\line(-1,-1){#1}}%
+\put(-\monolength,-\epilength){\swhead}%
+\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}){\line(1,1){#1}}%
+\put(\monolength,\epilength){\nehead}%
+\end{picture}}\end{picture}}%
+
+% \SWADJDIST{n} draws a south-west pair of adjoint distributors of length n units
+\newcommand{\SWADJDIST}[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}){\line(-1,-1){#1}}%
+\put(-\monolength,-\epilength){\swhead}%
+\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}){\line(1,1){#1}}%
+\put(\monolength,\epilength){\nehead}%
+\end{picture}}%
+\put(-\value{x},\value{x}){\distsign}%
+\put(\value{x},-\value{x}){\distsign}%
+\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]}}%
+
+% south-west distributor of length nx100 units
+\def\basicswdist[#1]{\fdcase{\SWDIST}{}{}{#100}}%
+
+% south-west distributor
+\newcommand{\swdist}{\@ifnextchar[{\basicswdist}{\basicswdist[59]}}%
+
+% south-west distributor with upper name [1] and length nx100 units
+\def\basicSwdist[#1]#2{\fdcase{\SWDIST}{#2}{}{#100}}%
+
+% south-west distributor with upper name
+\newcommand{\Swdist}{\@ifnextchar[{\basicSwdist}{\basicSwdist[59]}}%
+
+% south-west distributor with lower name [1] and length nx100 units
+\def\basicswdisT[#1]#2{\fdcase{\SWDIST}{}{#2}{#100}}%
+
+% south-west distributor with lower name [1]
+\newcommand{\swdisT}{\@ifnextchar[{\basicswdisT}{\basicswdisT[59]}}%
+
+% south-west dotted arrow of length nx100 units
+\def\basicswdotar[#1]{\fdcase{\SWDOTAR}{}{}{#100}}%
+
+% south-west dotted arrow
+\newcommand{\swdotar}{\@ifnextchar[{\basicswdotar}{\basicswdotar[59]}}%
+
+% south-west dotted arrow with upper name [1] and length nx100 units
+\def\basicSwdotar[#1]#2{\fdcase{\SWDOTAR}{#2}{}{#100}}%
+
+% south-west dotted arrow with upper name
+\newcommand{\Swdotar}{\@ifnextchar[{\basicSwdotar}{\basicSwdotar[59]}}%
+
+% south-west dotted arrow with lower name [1] and length nx100 units
+\def\basicswdotaR[#1]#2{\fdcase{\SWDOTAR}{}{#2}{#100}}%
+
+% south-west dotted arrow with lower name [1]
+\newcommand{\swdotaR}{\@ifnextchar[{\basicswdotaR}{\basicswdotaR[59]}}%
+
+% south-west monomorphism of length nx100 units
+\def\basicswmono[#1]{\fdcase{\SWMONO}{}{}{#100}}%
+
+% south-west monomorphism
+\newcommand{\swmono}{\@ifnextchar[{\basicswmono}{\basicswmono[59]}}%
+
+% south-west monomorphism with upper name [1] and length nx100 units
+\def\basicSwmono[#1]#2{\fdcase{\SWMONO}{#2}{}{#100}}%
+
+% south-west monomophism with upper name
+\newcommand{\Swmono}{\@ifnextchar[{\basicSwmono}{\basicSwmono[59]}}%
+
+% south-west monomorphism with lower name [1] and length nx100 units
+\def\basicswmonO[#1]#2{\fdcase{\SWMONO}{}{#2}{#100}}%
+
+% south-west monomorphism with lower name [1]
+\newcommand{\swmonO}{\@ifnextchar[{\basicswmonO}{\basicswmonO[59]}}%
+
+% south-west epimorphism of length nx100 units
+\def\basicswepi[#1]{\fdcase{\SWEPI}{}{}{#100}}%
+
+% south-west epimorphism
+\newcommand{\swepi}{\@ifnextchar[{\basicswepi}{\basicswepi[59]}}%
+
+% south-west epimorphism with upper name [1] and length nx100 units
+\def\basicSwepi[#1]#2{\fdcase{\SWEPI}{#2}{}{#100}}%
+
+% south-west epimorphism with upper name
+\newcommand{\Swepi}{\@ifnextchar[{\basicSwepi}{\basicSwepi[59]}}%
+
+% south-west epimorphism with lower name [1] and length nx100 units
+\def\basicswepI[#1]#2{\fdcase{\SWEPI}{}{#2}{#100}}%
+
+% south-west epimorphism with lower name [1]
+\newcommand{\swepI}{\@ifnextchar[{\basicswepI}{\basicswepI[59]}}%
+
+% south-west bimorphism of length nx100 units
+\def\basicswbimo[#1]{\fdcase{\SWBIMO}{}{}{#100}}%
+
+% south-west bimorphism
+\newcommand{\swbimo}{\@ifnextchar[{\basicswbimo}{\basicswbimo[59]}}%
+
+% south-west bimorphism with upper name [1] and length nx100 units
+\def\basicSwbimo[#1]#2{\fdcase{\SWBIMO}{#2}{}{#100}}%
+
+% south-west bimorphism with upper name
+\newcommand{\Swbimo}{\@ifnextchar[{\basicSwbimo}{\basicSwbimo[59]}}%
+
+% south-west bimorphism with lower name [1] and length nx100 units
+\def\basicswbimO[#1]#2{\fdcase{\SWBIMO}{}{#2}{#100}}%
+
+% south-west bimorphism with lower name [1]
+\newcommand{\swbimO}{\@ifnextchar[{\basicswbimO}{\basicswbimO[59]}}%
+
+% south-west isomorphism of length nx100 units
+\def\basicswiso[#1]{\fdcase{\SWAR}{\hspace{-2pt}\isosign}{}{#100}}%
+
+% south-west isomorphism
+\newcommand{\swiso}{\@ifnextchar[{\basicswiso}{\basicswiso[59]}}%
+
+% south-west isomorphism with upper name [1] and length nx100 units
+\def\basicSwiso[#1]#2{\fdcase{\SWAR}{#2}{\isosign}{#100}}%
+
+% south-west isomorphism with upper name
+\newcommand{\Swiso}{\@ifnextchar[{\basicSwiso}{\basicSwiso[59]}}%
+
+% south-west isomorphism with lower name [1] and length nx100 units
+\def\basicswisO[#1]#2{\fdcase{\SWAR}{\hspace{-2pt}\isosign}{#2}{#100}}%
+
+% south-west isomorphism with lower name [1]
+\newcommand{\swisO}{\@ifnextchar[{\basicswisO}{\basicswisO[59]}}%
+
+% south-west equality
+\let\sweql\neeql%
+
+% south-west equality with upper name [1]
+\let\Sweql=\Neeql%
+
+% south-west equality with lower name [1]
+\let\sweqL=\neeqL%
+
+% 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
+
+% pair of south-west distributors of length nx100 units
+\def\basicswbidist[#1]{\fdbicase{\SWBIDIST}{}{}{#100}}%
+
+% pair of south-west distributors
+\newcommand{\swbidist}{\@ifnextchar[{\basicswbidist}{\basicswbidist[59]}}%
+
+% pair of south-west distributors with names [1][2] and length nx100 units
+\def\basicSwbidist[#1]#2#3{\fdbicase{\SWBIDIST}{#2}{#3}{#100}}%
+
+% pair of south-west distributors with names
+\newcommand{\Swbidist}{\@ifnextchar[{\basicSwbidist}{\basicSwbidist[59]}}%
+\let\swbidisT=\Swbidist
+
+% pair of south-west adjoint distributors of length nx100 units
+\def\basicswadjdist[#1]{\fdbicase{\SWADJDIST}{}{}{#100}}%
+
+% pair of south-west adjoint distributors
+\newcommand{\swadjdist}{\@ifnextchar[{\basicswadjdist}{\basicswadjdist[59]}}%
+
+% pair of south-west adjoint distributors with names [1][2] and length nx100 units
+\def\basicSwadjdist[#1]#2#3{\fdbicase{\SWADJDIST}{#2}{#3}{#100}}%
+
+% pair of south-west adjoint distributors with names
+\newcommand{\Swadjdist}{\@ifnextchar[{\basicSwadjdist}{\basicSwadjdist[59]}}%
+\let\swadjdisT=\Swadjdist
+
+
+
+% 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){\line(1,-1){#1}}%
+\put(\Y,-\Y){\sehead}%
+\end{picture}}%
+
+% \SEDIST{n} draws a south-east distributor of length n units
+\newcommand{\SEDIST}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(-\Y,\Y){\line(1,-1){#1}}%
+\put(\Y,-\Y){\sehead}%
+\put(0,0){\distsign}%
+\end{picture}}%
+
+% \SEDOTAR{n} draws a south-east dotted arrow of length n units
+\newcommand{\SEDOTAR}[1]%
+{\truex{100}\truey{212}%
+\Y=#1%
+\divide\Y by 2%
+\NUMBEROFDOTS=#1%
+\divide\NUMBEROFDOTS by \value{y}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\multiput(-\Y,\Y)(\value{y},-\value{y}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(\Y,-\Y){\sehead}%
+\end{picture}}%
+
+% \SEMONO{n} draws a south-east monomorphism of length n units
+\newcommand{\SEMONO}[1]{%
+\Y=#1%
+\divide \Y by 2%
+\Truetail%
+\bimolength=#1%
+\advance\bimolength by -\Truemonotail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\begin{picture}(0,0)%
+\put(-\monolength,\monolength){\line(1,-1){\bimolength}}%
+\put(-\monolength,\monolength){\sehead}%
+\put(\Y,-\Y){\sehead}%
+\end{picture}}%
+
+% \SEEPI{n} draws a south-east epimorphism of length n units
+\newcommand{\SEEPI}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\Truehead%
+\bimolength=#1%
+\advance\bimolength by -\Trueepihead%
+\epilength=\bimolength%
+\advance\epilength by -\Y%
+\begin{picture}(0,0)%
+\put(-\Y,\Y){\line(1,-1){\bimolength}}%
+\put(\epilength,-\epilength){\sehead}%
+\put(\Y,-\Y){\sehead}%
+\end{picture}}%
+
+% \SEBIMO{n} draws a south-east bimorphism of length n units
+\newcommand{\SEBIMO}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\Truetail\Truehead%
+\bimolength=#1%
+\advance\bimolength by -\Truemonotail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\advance\bimolength by -\Trueepihead%
+\epilength=\bimolength%
+\advance\epilength by -\monolength%
+\begin{picture}(0,0)%
+\put(-\monolength,\monolength){\line(1,-1){\bimolength}}%
+\put(-\monolength,\monolength){\sehead}%
+\put(\epilength,-\epilength){\sehead}%
+\put(\Y,-\Y){\sehead}%
+\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}){\line(1,-1){#1}}%
+\put(\value{x},\value{x}){\line(1,-1){#1}}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(\monolength,-\epilength){\sehead}%
+\put(\epilength,-\monolength){\sehead}%
+\end{picture}}\end{picture}}%
+
+% \SEBIDIST{n} draws a pair of south-east distributors of length n units
+\newcommand{\SEBIDIST}[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}){\line(1,-1){#1}}%
+\put(\epilength,-\monolength){\sehead}%
+\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}){\line(1,-1){#1}}%
+\put(\epilength,-\monolength){\sehead}%
+\end{picture}}%
+\put(-\value{x},-\value{x}){\distsign}%
+\put(\value{x},\value{x}){\distsign}%
+\end{picture}}%
+
+% \SEEQL{n} draws a south-east equality of length n units
+\newcommand{\SEEQL}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(-\Y,\Y){\begin{picture}(0,0)%
+\truex{70}%
+\put(-\value{x},-\value{x}){\line(1,-1){#1}}%
+\put(\value{x},\value{x}){\line(1,-1){#1}}%
+\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}){\line(1,-1){#1}}%
+\put(\monolength,-\epilength){\sehead}%
+\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}){\line(-1,1){#1}}%
+\put(-\monolength,\epilength){\nwhead}%
+\end{picture}}\end{picture}}%
+
+% \SEADJDIST{n} draws a south-east pair of adjoint distributors of length n units
+\newcommand{\SEADJDIST}[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}){\line(1,-1){#1}}%
+\put(\monolength,-\epilength){\sehead}%
+\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}){\line(-1,1){#1}}%
+\put(-\monolength,\epilength){\nwhead}%
+\end{picture}}%
+\put(-\value{x},-\value{x}){\distsign}%
+\put(\value{x},\value{x}){\distsign}%
+\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]}}%
+
+% south-east distributor of length nx100 units
+\def\basicsedist[#1]{\sdcase{\SEDIST}{}{}{#100}}%
+
+% south-east distributor
+\newcommand{\sedist}{\@ifnextchar[{\basicsedist}{\basicsedist[59]}}%
+
+% south-east distributor with upper name [1] and length nx100 units
+\def\basicSedist[#1]#2{\sdcase{\SEDIST}{#2}{}{#100}}%
+
+% south-east distributor with upper name
+\newcommand{\Sedist}{\@ifnextchar[{\basicSedist}{\basicSedist[59]}}%
+
+% south-east distributor with lower name [1] and length nx100 units
+\def\basicsedisT[#1]#2{\sdcase{\SEDIST}{}{#2}{#100}}%
+
+% south-east distributor with lower name [1]
+\newcommand{\sedisT}{\@ifnextchar[{\basicsedisT}{\basicsedisT[59]}}%
+
+% south-east dotted arrow of length nx100 units
+\def\basicsedotar[#1]{\sdcase{\SEDOTAR}{}{}{#100}}%
+
+% south-east dotted arrow
+\newcommand{\sedotar}{\@ifnextchar[{\basicsedotar}{\basicsedotar[59]}}%
+
+% south-east dotted arrow with upper name [1] and length nx100 units
+\def\basicSedotar[#1]#2{\sdcase{\SEDOTAR}{#2}{}{#100}}%
+
+% south-east dotted arrow with upper name
+\newcommand{\Sedotar}{\@ifnextchar[{\basicSedotar}{\basicSedotar[59]}}%
+
+% south-east dotted arrow with lower name [1] and length nx100 units
+\def\basicsedotaR[#1]#2{\sdcase{\SEDOTAR}{}{#2}{#100}}%
+
+% south-east dotted arrow with lower name [1]
+\newcommand{\sedotaR}{\@ifnextchar[{\basicsedotaR}{\basicsedotaR[59]}}%
+
+% south-east monomorphism of length nx100 units
+\def\basicsemono[#1]{\sdcase{\SEMONO}{}{}{#100}}%
+
+% south-east monomorphism
+\newcommand{\semono}{\@ifnextchar[{\basicsemono}{\basicsemono[59]}}%
+
+% south-east monomorphism with upper name [1] and length nx100 units
+\def\basicSemono[#1]#2{\sdcase{\SEMONO}{#2}{}{#100}}%
+
+% south-east monomophism with upper name
+\newcommand{\Semono}{\@ifnextchar[{\basicSemono}{\basicSemono[59]}}%
+
+% south-east monomorphism with lower name [1] and length nx100 units
+\def\basicsemonO[#1]#2{\sdcase{\SEMONO}{}{#2}{#100}}%
+
+% south-east monomorphism with lower name [1]
+\newcommand{\semonO}{\@ifnextchar[{\basicsemonO}{\basicsemonO[59]}}%
+
+% south-east epimorphism of length nx100 units
+\def\basicseepi[#1]{\sdcase{\SEEPI}{}{}{#100}}%
+
+% south-east epimorphism
+\newcommand{\seepi}{\@ifnextchar[{\basicseepi}{\basicseepi[59]}}%
+
+% south-east epimorphism with upper name [1] and length nx100 units
+\def\basicSeepi[#1]#2{\sdcase{\SEEPI}{#2}{}{#100}}%
+
+% south-east epimorphism with upper name
+\newcommand{\Seepi}{\@ifnextchar[{\basicSeepi}{\basicSeepi[59]}}%
+
+% south-east epimorphism with lower name [1] and length nx100 units
+\def\basicseepI[#1]#2{\sdcase{\SEEPI}{}{#2}{#100}}%
+
+% south-east epimorphism with lower name [1]
+\newcommand{\seepI}{\@ifnextchar[{\basicseepI}{\basicseepI[59]}}%
+
+% south-east bimorphism of length nx100 units
+\def\basicsebimo[#1]{\sdcase{\SEBIMO}{}{}{#100}}%
+
+% south-east bimorphism
+\newcommand{\sebimo}{\@ifnextchar[{\basicsebimo}{\basicsebimo[59]}}%
+
+% south-east bimorphism with upper name [1] and length nx100 units
+\def\basicSebimo[#1]#2{\sdcase{\SEBIMO}{#2}{}{#100}}%
+
+% south-east bimorphism with upper name
+\newcommand{\Sebimo}{\@ifnextchar[{\basicSebimo}{\basicSebimo[59]}}%
+
+% south-east bimorphism with lower name [1] and length nx100 units
+\def\basicsebimO[#1]#2{\sdcase{\SEBIMO}{}{#2}{#100}}%
+
+% south-east bimorphism with lower name [1]
+\newcommand{\sebimO}{\@ifnextchar[{\basicsebimO}{\basicsebimO[59]}}%
+
+% south-east isomorphism of length nx100 units
+\def\basicseiso[#1]{\sdcase{\SEAR}{\hspace{-2pt}\isosign}{}{#100}}%
+
+% south-east isomorphism
+\newcommand{\seiso}{\@ifnextchar[{\basicseiso}{\basicseiso[59]}}%
+
+% south-east isomorphism with upper name [1] and length nx100 units
+\def\basicSeiso[#1]#2{\sdcase{\SEAR}{#2}{\isosign}{#100}}%
+
+% south-east isomorphism with upper name
+\newcommand{\Seiso}{\@ifnextchar[{\basicSeiso}{\basicSeiso[59]}}%
+
+% south-east isomorphism with lower name [1] and length nx100 units
+\def\basicseisO[#1]#2{\sdcase{\SEAR}{\hspace{-2pt}\isosign}{#2}{#100}}%
+
+% south-east isomorphism with lower name [1]
+\newcommand{\seisO}{\@ifnextchar[{\basicseisO}{\basicseisO[59]}}%
+
+% south-east equality of length nx100 units
+\def\basicseeql[#1]{\sdcase{\SEEQL}{}{}{#100}}%
+
+% south-east equality
+\newcommand{\seeql}{\@ifnextchar[{\basicseeql}{\basicseeql[59]}}%
+
+% south-east equality with upper name [1] and length nx100 units
+\def\basicSeeql[#1]#2{\sdcase{\SEEQL}{#2}{}{#100}}%
+
+% south-east equality with upper name
+\newcommand{\Seeql}{\@ifnextchar[{\basicSeeql}{\basicSeeql[59]}}%
+
+% south-east equality with lower name [1] and length nx100 units
+\def\basicseeqL[#1]#2{\sdcase{\SEEQL}{}{#2}{#100}}%
+
+% south-east equality with lower name [1]
+\newcommand{\seeqL}{\@ifnextchar[{\basicseeqL}{\basicseeqL[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
+
+% pair of south-east distributors of length nx100 units
+\def\basicsebidist[#1]{\sdbicase{\SEBIDIST}{}{}{#100}}%
+
+% pair of south-east distributors
+\newcommand{\sebidist}{\@ifnextchar[{\basicsebidist}{\basicsebidist[59]}}%
+
+% pair of south-east distributors with names [1][2] and length nx100 units
+\def\basicSebidist[#1]#2#3{\sdbicase{\SEBIDIST}{#2}{#3}{#100}}%
+
+% pair of south-east distributors with names
+\newcommand{\Sebidist}{\@ifnextchar[{\basicSebidist}{\basicSebidist[59]}}%
+\let\sebidisT=\Sebidist
+
+% pair of south-east adjoint distributors of length nx100 units
+\def\basicseadjdist[#1]{\sdbicase{\SEADJDIST}{}{}{#100}}%
+
+% pair of south-east adjoint distributors
+\newcommand{\seadjdist}{\@ifnextchar[{\basicseadjdist}{\basicseadjdist[59]}}%
+
+% pair of south-east adjoint distributors with names [1][2] and length nx100 units
+\def\basicSeadjdist[#1]#2#3{\sdbicase{\SEADJDIST}{#2}{#3}{#100}}%
+
+% pair of south-east adjoint distributors with names
+\newcommand{\Seadjdist}{\@ifnextchar[{\basicSeadjdist}{\basicSeadjdist[59]}}%
+\let\seadjdisT=\Seadjdist
+
+
+% 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){\line(-1,1){#1}}%
+\put(-\Y,\Y){\nwhead}%
+\end{picture}}%
+
+% \NWDIST{n} draws a north-west distributor of length n units
+\newcommand{\NWDIST}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(\Y,-\Y){\line(-1,1){#1}}%
+\put(-\Y,\Y){\nwhead}%
+\put(0,0){\distsign}%
+\end{picture}}%
+
+% \NWDOTAR{n} draws a north-west dotted arrow of length n units
+\newcommand{\NWDOTAR}[1]%
+{\truex{100}\truey{212}%
+\Y=#1%
+\divide\Y by 2%
+\NUMBEROFDOTS=#1%
+\divide\NUMBEROFDOTS by \value{y}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\multiput(\Y,-\Y)(-\value{y},\value{y}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(-\Y,\Y){\nwhead}%
+\end{picture}}%
+
+% \NWMONO{n} draws a north-west monomorphism of length n units
+\newcommand{\NWMONO}[1]{%
+\Y=#1%
+\divide \Y by 2%
+\Truetail%
+\bimolength=#1%
+\advance\bimolength by -\Truemonotail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\begin{picture}(0,0)%
+\put(\monolength,-\monolength){\line(-1,1){\bimolength}}%
+\put(\monolength,-\monolength){\nwhead}%
+\put(-\Y,\Y){\nwhead}%
+\end{picture}}%
+
+% \NWEPI{n} draws a north-west epimorphism of length n units
+\newcommand{\NWEPI}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\Truehead%
+\bimolength=#1%
+\advance\bimolength by -\Trueepihead%
+\epilength=\bimolength%
+\advance\epilength by -\Y%
+\begin{picture}(0,0)%
+\put(\Y,-\Y){\line(-1,1){\bimolength}}%
+\put(-\epilength,\epilength){\nwhead}%
+\put(-\Y,\Y){\nwhead}%
+\end{picture}}%
+
+% \NWBIMO{n} draws a north-west bimorphism of length n units
+\newcommand{\NWBIMO}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\Truetail\Truehead%
+\bimolength=#1%
+\advance\bimolength by -\Truemonotail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\advance\bimolength by -\Trueepihead%
+\epilength=\bimolength%
+\advance\epilength by -\monolength%
+\begin{picture}(0,0)%
+\put(\monolength,-\monolength){\line(-1,1){\bimolength}}%
+\put(\monolength,-\monolength){\nwhead}%
+\put(-\epilength,\epilength){\nwhead}%
+\put(-\Y,\Y){\nwhead}%
+\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}){\line(-1,1){#1}}%
+\put(\value{x},\value{x}){\line(-1,1){#1}}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(-\monolength,\epilength){\nwhead}%
+\put(-\epilength,\monolength){\nwhead}%
+\end{picture}}\end{picture}}%
+
+% \NWBIDIST{n} draws a pair of north-west distributors of length n units
+\newcommand{\NWBIDIST}[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}){\line(-1,1){#1}}%
+\put(-\epilength,\monolength){\nwhead}%
+\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}){\line(-1,1){#1}}%
+\put(-\epilength,\monolength){\nwhead}%
+\end{picture}}%
+\put(-\value{x},-\value{x}){\distsign}%
+\put(\value{x},\value{x}){\distsign}%
+\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}){\line(-1,1){#1}}%
+\put(-\epilength,\monolength){\nwhead}%
+\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}){\line(1,-1){#1}}%
+\put(\epilength,-\monolength){\sehead}%
+\end{picture}}\end{picture}}%
+
+% \NWADJDIST{n} draws a north-west pair of adjoint distributors of length n units
+\newcommand{\NWADJDIST}[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}){\line(-1,1){#1}}%
+\put(-\epilength,\monolength){\nwhead}%
+\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}){\line(1,-1){#1}}%
+\put(\epilength,-\monolength){\sehead}%
+\end{picture}}%
+\put(-\value{x},-\value{x}){\distsign}%
+\put(\value{x},\value{x}){\distsign}%
+\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]}}%
+
+% north-west distributor of length nx100 units
+\def\basicnwdist[#1]{\sdcase{\NWDIST}{}{}{#100}}%
+
+% north-west distributor
+\newcommand{\nwdist}{\@ifnextchar[{\basicnwdist}{\basicnwdist[59]}}%
+
+% north-west distributor with upper name [1] and length nx100 units
+\def\basicNwdist[#1]#2{\sdcase{\NWDIST}{#2}{}{#100}}%
+
+% north-west distributor with upper name
+\newcommand{\Nwdist}{\@ifnextchar[{\basicNwdist}{\basicNwdist[59]}}%
+
+% north-west distributor with lower name [1] and length nx100 units
+\def\basicnwdisT[#1]#2{\sdcase{\NWDIST}{}{#2}{#100}}%
+
+% north-west distributor with lower name [1]
+\newcommand{\nwdisT}{\@ifnextchar[{\basicnwdisT}{\basicnwdisT[59]}}%
+
+% north-west dotted arrow of length nx100 units
+\def\basicnwdotar[#1]{\sdcase{\NWDOTAR}{}{}{#100}}%
+
+% north-west dotted arrow
+\newcommand{\nwdotar}{\@ifnextchar[{\basicnwdotar}{\basicnwdotar[59]}}%
+
+% north-west dotted arrow with upper name [1] and length nx100 units
+\def\basicNwdotar[#1]#2{\sdcase{\NWDOTAR}{#2}{}{#100}}%
+
+% north-west dotted arrow with upper name
+\newcommand{\Nwdotar}{\@ifnextchar[{\basicNwdotar}{\basicNwdotar[59]}}%
+
+% north-west dotted arrow with lower name [1] and length nx100 units
+\def\basicnwdotaR[#1]#2{\sdcase{\NWDOTAR}{}{#2}{#100}}%
+
+% north-west dotted arrow with lower name [1]
+\newcommand{\nwdotaR}{\@ifnextchar[{\basicnwdotaR}{\basicnwdotaR[59]}}%
+
+% north-west monomorphism of length nx100 units
+\def\basicnwmono[#1]{\sdcase{\NWMONO}{}{}{#100}}%
+
+% north-west monomorphism
+\newcommand{\nwmono}{\@ifnextchar[{\basicnwmono}{\basicnwmono[59]}}%
+
+% north-west monomorphism with upper name [1] and length nx100 units
+\def\basicNwmono[#1]#2{\sdcase{\NWMONO}{#2}{}{#100}}%
+
+% north-west monomophism with upper name
+\newcommand{\Nwmono}{\@ifnextchar[{\basicNwmono}{\basicNwmono[59]}}%
+
+% north-west monomorphism with lower name [1] and length nx100 units
+\def\basicnwmonO[#1]#2{\sdcase{\NWMONO}{}{#2}{#100}}%
+
+% north-west monomorphism with lower name [1]
+\newcommand{\nwmonO}{\@ifnextchar[{\basicnwmonO}{\basicnwmonO[59]}}%
+
+% north-west epimorphism of length nx100 units
+\def\basicnwepi[#1]{\sdcase{\NWEPI}{}{}{#100}}%
+
+% north-west epimorphism
+\newcommand{\nwepi}{\@ifnextchar[{\basicnwepi}{\basicnwepi[59]}}%
+
+% north-west epimorphism with upper name [1] and length nx100 units
+\def\basicNwepi[#1]#2{\sdcase{\NWEPI}{#2}{}{#100}}%
+
+% north-west epimorphism with upper name
+\newcommand{\Nwepi}{\@ifnextchar[{\basicNwepi}{\basicNwepi[59]}}%
+
+% north-west epimorphism with lower name [1] and length nx100 units
+\def\basicnwepI[#1]#2{\sdcase{\NWEPI}{}{#2}{#100}}%
+
+% north-west epimorphism with lower name [1]
+\newcommand{\nwepI}{\@ifnextchar[{\basicnwepI}{\basicnwepI[59]}}%
+
+% north-west bimorphism of length nx100 units
+\def\basicnwbimo[#1]{\sdcase{\NWBIMO}{}{}{#100}}%
+
+% north-west bimorphism
+\newcommand{\nwbimo}{\@ifnextchar[{\basicnwbimo}{\basicnwbimo[59]}}%
+
+% north-west bimorphism with upper name [1] and length nx100 units
+\def\basicNwbimo[#1]#2{\sdcase{\NWBIMO}{#2}{}{#100}}%
+
+% north-west bimorphism with upper name
+\newcommand{\Nwbimo}{\@ifnextchar[{\basicNwbimo}{\basicNwbimo[59]}}%
+
+% north-west bimorphism with lower name [1] and length nx100 units
+\def\basicnwbimO[#1]#2{\sdcase{\NWBIMO}{}{#2}{#100}}%
+
+% north-west bimorphism with lower name [1]
+\newcommand{\nwbimO}{\@ifnextchar[{\basicnwbimO}{\basicnwbimO[59]}}%
+
+% north-west isomorphism of length nx100 units
+\def\basicnwiso[#1]{\sdcase{\NWAR}{\hspace{-2pt}\isosign}{}{#100}}%
+
+% north-west isomorphism
+\newcommand{\nwiso}{\@ifnextchar[{\basicnwiso}{\basicnwiso[59]}}%
+
+% north-west isomorphism with upper name [1] and length nx100 units
+\def\basicNwiso[#1]#2{\sdcase{\NWAR}{#2}{\isosign}{#100}}%
+
+% north-west isomorphism with upper name
+\newcommand{\Nwiso}{\@ifnextchar[{\basicNwiso}{\basicNwiso[59]}}%
+
+% north-west isomorphism with lower name [1] and length nx100 units
+\def\basicnwisO[#1]#2{\sdcase{\NWAR}{\hspace{-2pt}\isosign}{#2}{#100}}%
+
+% north-west isomorphism with lower name [1]
+\newcommand{\nwisO}{\@ifnextchar[{\basicnwisO}{\basicnwisO[59]}}%
+
+% north-west equality
+\let\nweql=\seeql%
+
+% north-west equality with upper name
+\let\Nweql=\Seeql%
+
+% north-west equality with lower name [1]
+\let\nweqL=\seeqL%
+
+% 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
+
+% pair of north-west distributors of length nx100 units
+\def\basicnwbidist[#1]{\sdbicase{\NWBIDIST}{}{}{#100}}%
+
+% pair of north-west distributors
+\newcommand{\nwbidist}{\@ifnextchar[{\basicnwbidist}{\basicnwbidist[59]}}%
+
+% pair of north-west distributors with names [1][2] and length nx100 units
+\def\basicNwbidist[#1]#2#3{\sdbicase{\NWBIDIST}{#2}{#3}{#100}}%
+
+% pair of north-west distributors with names
+\newcommand{\Nwbidist}{\@ifnextchar[{\basicNwbidist}{\basicNwbidist[59]}}%
+\let\nwbidisT=\Nwbidist
+
+% pair of north-west adjoint distributors of length nx100 units
+\def\basicnwadjdist[#1]{\sdbicase{\NWADJDIST}{}{}{#100}}%
+
+% pair of north-west adjoint distributors
+\newcommand{\nwadjdist}{\@ifnextchar[{\basicnwadjdist}{\basicnwadjdist[59]}}%
+
+% pair of north-west adjoint distributors with names [1][2] and length nx100 units
+\def\basicNwadjdist[#1]#2#3{\sdbicase{\NWADJDIST}{#2}{#3}{#100}}%
+
+% pair of north-west adjoint distributors with names
+\newcommand{\Nwadjdist}{\@ifnextchar[{\basicNwadjdist}{\basicNwadjdist[59]}}%
+\let\nwadjdisT=\Nwadjdist
+
+
+% 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){\line(2,1){#3}}%
+\put(\Y,\Z){\enehead}%
+\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}}%
+
+% \ENEDIST{f}{g}{n} draws a east-north-east distributor
+% with names f, g and length n units
+\newcommand{\ENEDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-\Z){\line(2,1){#3}}%
+\put(\Y,\Z){\enehead}%
+\put(0,0){\distsign}%
+\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}}%
+
+% \ENEDOTAR{f}{g}{n} draws a north-east dotted arrow
+% with names f,g and length n units
+\newcommand{\ENEDOTAR}[3]{\testdiagrammode%
+\truex{100}\truey{268}\truez{134}%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\NUMBEROFDOTS=#3%
+\divide\NUMBEROFDOTS by \value{y}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\multiput(-\Y,-\Z)(\value{y},\value{z}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(\Y,\Z){\enehead}%
+\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}}%
+
+% \ENEMONO{f}{g}{n} draws a east-north-east monomorphism
+% with names f,g and length n units
+\newcommand{\ENEMONO}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\TrueTail%
+\bimolength=#3%
+\advance\bimolength by -\TrueMonoTail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\secondmonolength=\monolength%
+\divide\secondmonolength by 2%
+\begin{picture}(0,0)%
+\put(-\monolength,-\secondmonolength){\line(2,1){\bimolength}}%
+\put(-\monolength,-\secondmonolength){\enehead}%
+\put(\Y,\Z){\enehead}%
+\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}}%
+
+% \ENEEPI{f}{g}{n} draws a east-north-east epimorphism
+% with names f, g and length n units
+\newcommand{\ENEEPI}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\TrueHead%
+\bimolength=#3%
+\advance\bimolength by -\TrueEpiHead%
+\epilength=\bimolength%
+\advance\epilength by -\Y%
+\secondepilength=\epilength%
+\divide\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-\Z){\line(2,1){\bimolength}}%
+\put(\epilength,\secondepilength){\enehead}%
+\put(\Y,\Z){\enehead}%
+\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}}%
+
+% \ENEBIMO{f}{g}{n} draws a east-north-east bimorphism
+% with names f,g and length n units
+\newcommand{\ENEBIMO}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\TrueTail\TrueHead%
+\bimolength=#3%
+\advance\bimolength by -\TrueMonoTail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\advance\bimolength by -\TrueEpiHead%
+\epilength=\bimolength%
+\advance\epilength by -\monolength%
+\secondmonolength=\monolength%
+\divide\secondmonolength by 2%
+\secondepilength=\epilength%
+\divide\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(-\monolength,-\secondmonolength){\line(2,1){\bimolength}}%
+\put(-\monolength,-\secondmonolength){\enehead}%
+\put(\epilength,\secondepilength){\enehead}%
+\put(\Y,\Z){\enehead}%
+\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}}%
+
+% \ENEEQL{f}{g}{n} draws a east-north-east equality
+% with names f,g and length n units
+\newcommand{\ENEEQL}[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{44}\truey{89}%
+\put(-\value{x},\value{y}){\line(2,1){#3}}%
+\put(\value{x},-\value{y}){\line(2,1){#3}}%
+\end{picture}}%
+\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}){\line(2,1){#3}}%
+\put(\value{x},-\value{y}){\line(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}%
+\put(\monolength,\secondepilength){\enehead}%
+\put(\epilength,\secondmonolength){\enehead}%
+\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}}%
+
+% \ENEBIDIST{f}{g}{n} draws a pair of east-north-east distributors
+% with names f,g and length n units
+\newcommand{\ENEBIDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\truex{156}\truey{313}\truez{400}%
+\put(-\Y,-\Z){\begin{picture}(0,0)%
+\put(-\value{x},\value{y}){\line(2,1){#3}}%
+\put(\value{x},-\value{y}){\line(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}%
+\put(\monolength,\secondepilength){\enehead}%
+\put(\epilength,\secondmonolength){\enehead}%
+\end{picture}}
+\put(-\value{x},\value{y}){\distsign}%
+\put(\value{x},-\value{y}){\distsign}%
+\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}){\line(2,1){#3}}%
+\put(\epilength,\secondmonolength){\enehead}%
+\put(\monolength,\secondepilength){\line(-2,-1){#3}}%
+\put(-\value{x},\value{y}){\wswhead}%
+\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}}%
+
+% \ENEADJDIST{f}{g}{n} draws a east-north-east pair of adjoint distributors
+% with names f,g and length n units
+\newcommand{\ENEADJDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\truex{156}\truey{313}\truez{400}%
+\put(-\Y,-\Z){\begin{picture}(0,0)%
+\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}){\line(2,1){#3}}%
+\put(\epilength,\secondmonolength){\enehead}%
+\put(\monolength,\secondepilength){\line(-2,-1){#3}}%
+\put(-\value{x},\value{y}){\wswhead}%
+\end{picture}}
+\put(-\value{x},\value{y}){\distsign}%
+\put(\value{x},-\value{y}){\distsign}%
+\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 distributor
+\def\basicenedist[#1]{\ENEDIST{}{}{#100}}%
+
+% east-north-east distributor
+\newcommand{\enedist}{\@ifnextchar[{\basicenedist}{\basicenedist[133]}}%
+
+% basic east-north-east distributor with upper name
+\def\basicEnedist[#1]#2{\ENEDIST{#2}{}{#100}}%
+
+% east-north-east distributor with upper name
+\newcommand{\Enedist}{\@ifnextchar[{\basicEnedist}{\basicEnedist[133]}}%
+
+% basic east-north-east distributor with lower name
+\def\basicenedisT[#1]#2{\ENEDIST{}{#2}{#100}}%
+
+% east-north-east distributor with lower name
+\newcommand{\enedisT}{\@ifnextchar[{\basicenedisT}{\basicenedisT[133]}}%
+
+% basic east-north-east dotted arrow
+\def\basicenedotar[#1]{\ENEDOTAR{}{}{#100}}%
+
+% east-north-east dotted arrow
+\newcommand{\enedotar}{\@ifnextchar[{\basicenedotar}{\basicenedotar[133]}}%
+
+% basic east-north-east dotted arrow with upper name
+\def\basicEnedotar[#1]#2{\ENEDOTAR{#2}{}{#100}}%
+
+% east-north-east dotted arrow with upper name
+\newcommand{\Enedotar}{\@ifnextchar[{\basicEnedotar}{\basicEnedotar[133]}}%
+
+% basic east-north-east dotted arrow with lower name
+\def\basicenedotaR[#1]#2{\ENEDOTAR{}{#2}{#100}}%
+
+% east-north-east dotted arrow with lower name
+\newcommand{\enedotaR}{\@ifnextchar[{\basicenedotaR}{\basicenedotaR[133]}}%
+
+% basic east-north-east monomorphism
+\def\basicenemono[#1]{\ENEMONO{}{}{#100}}%
+
+% east-north-east monomorphism
+\newcommand{\enemono}{\@ifnextchar[{\basicenemono}{\basicenemono[133]}}%
+
+% basic east-north-east monomorphism with upper name
+\def\basicEnemono[#1]#2{\ENEMONO{#2}{}{#100}}%
+
+% east-north-east monomorphism with upper name
+\newcommand{\Enemono}{\@ifnextchar[{\basicEnemono}{\basicEnemono[133]}}%
+
+% basic east-north-east monomorphism with lower name
+\def\basicenemonO[#1]#2{\ENEMONO{}{#2}{#100}}%
+
+% east-north-east monomorphism with lower name
+\newcommand{\enemonO}{\@ifnextchar[{\basicenemonO}{\basicenemonO[133]}}%
+
+% basic east-north-east epimorphism
+\def\basiceneepi[#1]{\ENEEPI{}{}{#100}}%
+
+% east-north-east epimorphism
+\newcommand{\eneepi}{\@ifnextchar[{\basiceneepi}{\basiceneepi[133]}}%
+
+% basic east-north-east epimorphism with upper name
+\def\basicEneepi[#1]#2{\ENEEPI{#2}{}{#100}}%
+
+% east-north-east epimorphism with upper name
+\newcommand{\Eneepi}{\@ifnextchar[{\basicEneepi}{\basicEneepi[133]}}%
+
+% basic east-north-east epimorphism with lower name
+\def\basiceneepI[#1]#2{\ENEEPI{}{#2}{#100}}%
+
+% east-north-east epimorphism with lower name
+\newcommand{\eneepI}{\@ifnextchar[{\basiceneepI}{\basiceneepI[133]}}%
+
+% basic east-north-east bimorphism
+\def\basicenebimo[#1]{\ENEBIMO{}{}{#100}}%
+
+% east-north-east bimorphism
+\newcommand{\enebimo}{\@ifnextchar[{\basicenebimo}{\basicenebimo[133]}}%
+
+% basic east-north-east bimorphism with upper name
+\def\basicEnebimo[#1]#2{\ENEBIMO{#2}{}{#100}}%
+
+% east-north-east bimorphism with upper name
+\newcommand{\Enebimo}{\@ifnextchar[{\basicEnebimo}{\basicEnebimo[133]}}%
+
+% basic east-north-east bimorphism with lower name
+\def\basicenebimO[#1]#2{\ENEBIMO{}{#2}{#100}}%
+
+% east-north-east bimorphism with lower name
+\newcommand{\enebimO}{\@ifnextchar[{\basicenebimO}{\basicenebimO[133]}}%
+
+% basic east-north-east isomorphism
+\def\basiceneiso[#1]{\ENEAR{\isosign}{}{#100}}%
+
+% east-north-east isomorphism
+\newcommand{\eneiso}{\@ifnextchar[{\basiceneiso}{\basiceneiso[133]}}%
+
+% basic east-north-east isomorphism with upper name
+\def\basicEneiso[#1]#2{\ENEAR{#2}{\isosign}{#100}}%
+
+% east-north-east isomorphism with upper name
+\newcommand{\Eneiso}{\@ifnextchar[{\basicEneiso}{\basicEneiso[133]}}%
+
+% basic east-north-east isomorphism with lower name
+\def\basiceneisO[#1]#2{\ENEAR{\isosign}{#2}{#100}}%
+
+% east-north-east isomorphism with lower name
+\newcommand{\eneisO}{\@ifnextchar[{\basiceneisO}{\basiceneisO[133]}}%
+
+% basic east-north-east equality
+\def\basiceneeql[#1]{\ENEEQL{}{}{#100}}%
+
+% east-north-east equality
+\newcommand{\eneeql}{\@ifnextchar[{\basiceneeql}{\basiceneeql[133]}}%
+
+% basic east-north-east equality with upper name
+\def\basicEneeql[#1]#2{\ENEEQL{#2}{}{#100}}%
+
+% east-north-east equality with upper name
+\newcommand{\Eneeql}{\@ifnextchar[{\basicEneeql}{\basicEneeql[133]}}%
+
+% basic east-north-east equality with lower name
+\def\basiceneeqL[#1]#2{\ENEEQL{}{#2}{#100}}%
+
+% east-north-east equality with lower name
+\newcommand{\eneeqL}{\@ifnextchar[{\basiceneeqL}{\basiceneeqL[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 distributors
+\def\basicenebidist[#1]{\ENEBIDIST{}{}{#100}}%
+
+% east-north-east pair of distributors
+\newcommand{\enebidist}{\@ifnextchar[{\basicenebidist}{\basicenebidist[133]}}%
+
+% basic east-north-east pair of distributors with names
+\def\basicEnebidist[#1]#2#3{\ENEBIDIST{#2}{#3}{#100}}%
+
+% east-north-east pair of distributors with names
+\newcommand{\Enebidist}{\@ifnextchar[{\basicEnebidist}{\basicEnebidist[133]}}%
+\let\enebidisT=\Enebidist
+
+% 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
+
+% basic east-north-east pair of adjoint distributors
+\def\basiceneadjdist[#1]{\ENEADJDIST{}{}{#100}}%
+
+% east-north-east pair of adjoint distributors
+\newcommand{\eneadjdist}{\@ifnextchar[{\basiceneadjdist}{\basiceneadjdist[133]}}%
+
+% basic east-north-east pair of adjoint distributors with names
+\def\basicEneadjdist[#1]#2#3{\ENEADJDIST{#2}{#3}{#100}}%
+
+% east-north-east pair of adjoint distributors with names
+\newcommand{\Eneadjdist}{\@ifnextchar[{\basicEneadjdist}{\basicEneadjdist[133]}}%
+\let\eneadjdisT=\Eneadjdist
+
+
+% 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){\line(2,-1){#3}}%
+\put(\Y,-\Z){\esehead}%
+\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}}%
+
+% \ESEDIST{f}{g}{n} draws a east-south-east distributor
+% with names f, g and length n units
+\newcommand{\ESEDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,\Z){\line(2,-1){#3}}%
+\put(\Y,-\Z){\esehead}%
+\put(0,0){\distsign}%
+\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}}%
+
+% \ESEDOTAR{f}{g}{n} draws a north-east dotted arrow
+% with names f,g and length n units
+\newcommand{\ESEDOTAR}[3]{\testdiagrammode%
+\truex{100}\truey{268}\truez{134}%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\NUMBEROFDOTS=#3%
+\divide\NUMBEROFDOTS by \value{y}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\multiput(-\Y,\Z)(\value{y},-\value{z}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(\Y,-\Z){\esehead}%
+\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}}%
+
+% \ESEMONO{f}{g}{n} draws a east-south-east monomorphism
+% with names f,g and length n units
+\newcommand{\ESEMONO}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\TrueTail%
+\bimolength=#3%
+\advance\bimolength by -\TrueMonoTail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\secondmonolength=\monolength%
+\divide\secondmonolength by 2%
+\begin{picture}(0,0)%
+\put(-\monolength,\secondmonolength){\line(2,-1){\bimolength}}%
+\put(-\monolength,\secondmonolength){\esehead}%
+\put(\Y,-\Z){\esehead}%
+\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}}%
+
+% \ESEEPI{f}{g}{n} draws a east-south-east epimorphism
+% with names f, g and length n units
+\newcommand{\ESEEPI}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\TrueHead%
+\bimolength=#3%
+\advance\bimolength by -\TrueEpiHead%
+\epilength=\bimolength%
+\advance\epilength by -\Y%
+\secondepilength=\epilength%
+\divide\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(-\Y,\Z){\line(2,-1){\bimolength}}%
+\put(\epilength,-\secondepilength){\esehead}%
+\put(\Y,-\Z){\esehead}%
+\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}}%
+
+% \ESEBIMO{f}{g}{n} draws a east-south-east bimorphism
+% with names f,g and length n units
+\newcommand{\ESEBIMO}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\TrueTail\TrueHead%
+\bimolength=#3%
+\advance\bimolength by -\TrueMonoTail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\advance\bimolength by -\TrueEpiHead%
+\epilength=\bimolength%
+\advance\epilength by -\monolength%
+\secondmonolength=\monolength%
+\divide\secondmonolength by 2%
+\secondepilength=\epilength%
+\divide\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(-\monolength,\secondmonolength){\line(2,-1){\bimolength}}%
+\put(-\monolength,\secondmonolength){\esehead}%
+\put(\epilength,-\secondepilength){\esehead}%
+\put(\Y,-\Z){\esehead}%
+\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}}%
+
+% \ESEEQL{f}{g}{n} draws a east-south-east equality
+% with names f,g and length n units
+\newcommand{\ESEEQL}[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{44}\truey{89}%
+\put(-\value{x},-\value{y}){\line(2,-1){#3}}%
+\put(\value{x},\value{y}){\line(2,-1){#3}}%
+\end{picture}}%
+\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}){\line(2,-1){#3}}%
+\put(\value{x},\value{y}){\line(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}%
+\put(\monolength,-\secondepilength){\esehead}%
+\put(\epilength,-\secondmonolength){\esehead}%
+\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}}%
+
+% \ESEBIDIST{f}{g}{n} draws a pair of east-south-east distributors
+% with names f,g and length n units
+\newcommand{\ESEBIDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\truex{156}\truey{313}\truez{400}%
+\put(-\Y,\Z){\begin{picture}(0,0)%
+\put(-\value{x},-\value{y}){\line(2,-1){#3}}%
+\put(\value{x},\value{y}){\line(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}%
+\put(\monolength,-\secondepilength){\esehead}%
+\put(\epilength,-\secondmonolength){\esehead}%
+\end{picture}}
+\put(\value{x},\value{y}){\distsign}%
+\put(-\value{x},-\value{y}){\distsign}%
+\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}){\line(2,-1){#3}}%
+\put(\monolength,-\secondepilength){\esehead}%
+\put(\epilength,-\secondmonolength){\line(-2,1){#3}}%
+\put(\value{x},\value{y}){\wnwhead}%
+\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}}%
+
+% \ESEADJDIST{f}{g}{n} draws a east-south-east pair of adjoint distributors
+% with names f,g and length n units
+\newcommand{\ESEADJDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\truex{156}\truey{313}\truez{400}%
+\put(-\Y,\Z){\begin{picture}(0,0)%
+\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}){\line(2,-1){#3}}%
+\put(\monolength,-\secondepilength){\esehead}%
+\put(\epilength,-\secondmonolength){\line(-2,1){#3}}%
+\put(\value{x},\value{y}){\wnwhead}%
+\end{picture}}
+\put(\value{x},\value{y}){\distsign}%
+\put(-\value{x},-\value{y}){\distsign}%
+\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 distributor
+\def\basicesedist[#1]{\ESEDIST{}{}{#100}}%
+
+% east-south-east distributor
+\newcommand{\esedist}{\@ifnextchar[{\basicesedist}{\basicesedist[133]}}%
+
+% basic east-south-east distributor with upper name
+\def\basicEsedist[#1]#2{\ESEDIST{#2}{}{#100}}%
+
+% east-south-east distributor with upper name
+\newcommand{\Esedist}{\@ifnextchar[{\basicEsedist}{\basicEsedist[133]}}%
+
+% basic east-south-east distributor with lower name
+\def\basicesedisT[#1]#2{\ESEDIST{}{#2}{#100}}%
+
+% east-south-east distributor with lower name
+\newcommand{\esedisT}{\@ifnextchar[{\basicesedisT}{\basicesedisT[133]}}%
+
+% basic east-south-east dotted arrow
+\def\basicesedotar[#1]{\ESEDOTAR{}{}{#100}}%
+
+% east-south-east dotted arrow
+\newcommand{\esedotar}{\@ifnextchar[{\basicesedotar}{\basicesedotar[133]}}%
+
+% basic east-south-east dotted arrow with upper name
+\def\basicEsedotar[#1]#2{\ESEDOTAR{#2}{}{#100}}%
+
+% east-south-east dotted arrow with upper name
+\newcommand{\Esedotar}{\@ifnextchar[{\basicEsedotar}{\basicEsedotar[133]}}%
+
+% basic east-south-east dotted arrow with lower name
+\def\basicesedotaR[#1]#2{\ESEDOTAR{}{#2}{#100}}%
+
+% east-south-east dotted arrow with lower name
+\newcommand{\esedotaR}{\@ifnextchar[{\basicesedotaR}{\basicesedotaR[133]}}%
+
+% basic east-south-east monomorphism
+\def\basicesemono[#1]{\ESEMONO{}{}{#100}}%
+
+% east-south-east monomorphism
+\newcommand{\esemono}{\@ifnextchar[{\basicesemono}{\basicesemono[133]}}%
+
+% basic east-south-east monomorphism with upper name
+\def\basicEsemono[#1]#2{\ESEMONO{#2}{}{#100}}%
+
+% east-south-east monomorphism with upper name
+\newcommand{\Esemono}{\@ifnextchar[{\basicEsemono}{\basicEsemono[133]}}%
+
+% basic east-south-east monomorphism with lower name
+\def\basicesemonO[#1]#2{\ESEMONO{}{#2}{#100}}%
+
+% east-south-east monomorphism with lower name
+\newcommand{\esemonO}{\@ifnextchar[{\basicesemonO}{\basicesemonO[133]}}%
+
+% basic east-south-east epimorphism
+\def\basiceseepi[#1]{\ESEEPI{}{}{#100}}%
+
+% east-south-east epimorphism
+\newcommand{\eseepi}{\@ifnextchar[{\basiceseepi}{\basiceseepi[133]}}%
+
+% basic east-south-east epimorphism with upper name
+\def\basicEseepi[#1]#2{\ESEEPI{#2}{}{#100}}%
+
+% east-south-east epimorphism with upper name
+\newcommand{\Eseepi}{\@ifnextchar[{\basicEseepi}{\basicEseepi[133]}}%
+
+% basic east-south-east epimorphism with lower name
+\def\basiceseepI[#1]#2{\ESEEPI{}{#2}{#100}}%
+
+% east-south-east epimorphism with lower name
+\newcommand{\eseepI}{\@ifnextchar[{\basiceseepI}{\basiceseepI[133]}}%
+
+% basic east-south-east bimorphism
+\def\basicesebimo[#1]{\ESEBIMO{}{}{#100}}%
+
+% east-south-east bimorphism
+\newcommand{\esebimo}{\@ifnextchar[{\basicesebimo}{\basicesebimo[133]}}%
+
+% basic east-south-east bimorphism with upper name
+\def\basicEsebimo[#1]#2{\ESEBIMO{#2}{}{#100}}%
+
+% east-south-east bimorphism with upper name
+\newcommand{\Esebimo}{\@ifnextchar[{\basicEsebimo}{\basicEsebimo[133]}}%
+
+% basic east-south-east bimorphism with lower name
+\def\basicesebimO[#1]#2{\ESEBIMO{}{#2}{#100}}%
+
+% east-south-east bimorphism with lower name
+\newcommand{\esebimO}{\@ifnextchar[{\basicesebimO}{\basicesebimO[133]}}%
+
+% basic east-south-east isomorphism
+\def\basiceseiso[#1]{\ESEAR{\isosign}{}{#100}}%
+
+% east-south-east isomorphism
+\newcommand{\eseiso}{\@ifnextchar[{\basiceseiso}{\basiceseiso[133]}}%
+
+% basic east-south-east isomorphism with upper name
+\def\basicEseiso[#1]#2{\ESEAR{#2}{\isosign}{#100}}%
+
+% east-south-east isomorphism with upper name
+\newcommand{\Eseiso}{\@ifnextchar[{\basicEseiso}{\basicEseiso[133]}}%
+
+% basic east-south-east isomorphism with lower name
+\def\basiceseisO[#1]#2{\ESEAR{\isosign}{#2}{#100}}%
+
+% east-south-east isomorphism with lower name
+\newcommand{\eseisO}{\@ifnextchar[{\basiceseisO}{\basiceseisO[133]}}%
+
+% basic east-south-east equality
+\def\basiceseeql[#1]{\ESEEQL{}{}{#100}}%
+
+% east-south-east equality
+\newcommand{\eseeql}{\@ifnextchar[{\basiceseeql}{\basiceseeql[133]}}%
+
+% basic east-south-east equality with upper name
+\def\basicEseeql[#1]#2{\ESEEQL{#2}{}{#100}}%
+
+% east-south-east equality with upper name
+\newcommand{\Eseeql}{\@ifnextchar[{\basicEseeql}{\basicEseeql[133]}}%
+
+% basic east-south-east equality with lower name
+\def\basiceseeqL[#1]#2{\ESEEQL{}{#2}{#100}}%
+
+% east-south-east equality with lower name
+\newcommand{\eseeqL}{\@ifnextchar[{\basiceseeqL}{\basiceseeqL[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 distributors
+\def\basicesebidist[#1]{\ESEBIDIST{}{}{#100}}%
+
+% east-south-east pair of distributors
+\newcommand{\esebidist}{\@ifnextchar[{\basicesebidist}{\basicesebidist[133]}}%
+
+% basic east-south-east pair of distributors with names
+\def\basicEsebidist[#1]#2#3{\ESEBIDIST{#2}{#3}{#100}}%
+
+% east-south-east pair of distributors with names
+\newcommand{\Esebidist}{\@ifnextchar[{\basicEsebidist}{\basicEsebidist[133]}}%
+\let\esebidisT=\Esebidist
+
+% 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
+
+% basic east-south-east pair of adjoint distributors
+\def\basiceseadjdist[#1]{\ESEADJDIST{}{}{#100}}%
+
+% east-south-east pair of adjoint distributors
+\newcommand{\eseadjdist}{\@ifnextchar[{\basiceseadjdist}{\basiceseadjdist[133]}}%
+
+% basic east-south-east pair of adjoint distributors with names
+\def\basicEseadjdist[#1]#2#3{\ESEADJDIST{#2}{#3}{#100}}%
+
+% east-south-east pair of adjoint distributors with names
+\newcommand{\Eseadjdist}{\@ifnextchar[{\basicEseadjdist}{\basicEseadjdist[133]}}%
+\let\eseadjdisT=\Eseadjdist
+
+% 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){\line(-2,-1){#3}}%
+\put(-\Y,-\Z){\wswhead}%
+\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}}%
+
+% \WSWDIST{f}{g}{n} draws a west-south-west distributor
+% with names f, g and length n units
+\newcommand{\WSWDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(\Y,\Z){\line(-2,-1){#3}}%
+\put(-\Y,-\Z){\wswhead}%
+\truex{400}%
+\put(0,0){\distsign}%
+\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}}%
+
+% \WSWDOTAR{f}{g}{n} draws a north-east dotted arrow
+% with names f,g and length n units
+\newcommand{\WSWDOTAR}[3]{\testdiagrammode%
+\truex{100}\truey{268}\truez{134}%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\NUMBEROFDOTS=#3%
+\divide\NUMBEROFDOTS by \value{y}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\multiput(\Y,\Z)(-\value{y},-\value{z}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(-\Y,-\Z){\wswhead}%
+\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}}%
+
+% \WSWMONO{f}{g}{n} draws a west-south-west monomorphism
+% with names f,g and length n units
+\newcommand{\WSWMONO}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\TrueTail%
+\bimolength=#3%
+\advance\bimolength by -\TrueMonoTail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\secondmonolength=\monolength%
+\divide\secondmonolength by 2%
+\begin{picture}(0,0)%
+\put(\monolength,\secondmonolength){\line(-2,-1){\bimolength}}%
+\put(\monolength,\secondmonolength){\wswhead}%
+\put(-\Y,-\Z){\wswhead}%
+\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}}%
+
+% \WSWEPI{f}{g}{n} draws a west-south-west epimorphism
+% with names f, g and length n units
+\newcommand{\WSWEPI}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\TrueHead%
+\bimolength=#3%
+\advance\bimolength by -\TrueEpiHead%
+\epilength=\bimolength%
+\advance\epilength by -\Y%
+\secondepilength=\epilength%
+\divide\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(\Y,\Z){\line(-2,-1){\bimolength}}%
+\put(-\epilength,-\secondepilength){\wswhead}%
+\put(-\Y,-\Z){\wswhead}%
+\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}}%
+
+% \WSWBIMO{f}{g}{n} draws a west-south-west bimorphism
+% with names f,g and length n units
+\newcommand{\WSWBIMO}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\TrueTail\TrueHead%
+\bimolength=#3%
+\advance\bimolength by -\TrueMonoTail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\advance\bimolength by -\TrueEpiHead%
+\epilength=\bimolength%
+\advance\epilength by -\monolength%
+\secondmonolength=\monolength%
+\divide\secondmonolength by 2%
+\secondepilength=\epilength%
+\divide\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(\monolength,\secondmonolength){\line(-2,-1){\bimolength}}%
+\put(\monolength,\secondmonolength){\wswhead}%
+\put(-\epilength,-\secondepilength){\wswhead}%
+\put(-\Y,-\Z){\wswhead}%
+\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}){\line(-2,-1){#3}}%
+\put(\value{x},-\value{y}){\line(-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}%
+\put(-\monolength,-\secondepilength){\wswhead}%
+\put(-\epilength,-\secondmonolength){\wswhead}%
+\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}}%
+
+% \WSWBIDIST{f}{g}{n} draws a pair of west-south-west distributors
+% with names f,g and length n units
+\newcommand{\WSWBIDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\truex{156}\truey{313}\truez{400}%
+\put(\Y,\Z){\begin{picture}(0,0)%
+\put(-\value{x},\value{y}){\line(-2,-1){#3}}%
+\put(\value{x},-\value{y}){\line(-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}%
+\put(-\monolength,-\secondepilength){\wswhead}%
+\put(-\epilength,-\secondmonolength){\wswhead}%
+\end{picture}}
+\put(-\value{x},\value{y}){\distsign}%
+\put(\value{x},-\value{y}){\distsign}%
+\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}){\line(-2,-1){#3}}%
+\put(-\monolength,-\secondepilength){\wswhead}%
+\put(-\epilength,-\secondmonolength){\line(2,1){#3}}%
+\put(-\value{x},\value{y}){\enehead}%
+\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}}%
+
+% \WSWADJDIST{f}{g}{n} draws a west-south-west pair of adjoint distributors
+% with names f,g and length n units
+\newcommand{\WSWADJDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\truex{156}\truey{313}\truez{400}%
+\put(\Y,\Z){\begin{picture}(0,0)%
+\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}){\line(-2,-1){#3}}%
+\put(-\monolength,-\secondepilength){\wswhead}%
+\put(-\epilength,-\secondmonolength){\line(2,1){#3}}%
+\put(-\value{x},\value{y}){\enehead}%
+\end{picture}}
+\put(-\value{x},\value{y}){\distsign}%
+\put(\value{x},-\value{y}){\distsign}%
+\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 distributor
+\def\basicwswdist[#1]{\WSWDIST{}{}{#100}}%
+
+% west-south-west distributor
+\newcommand{\wswdist}{\@ifnextchar[{\basicwswdist}{\basicwswdist[133]}}%
+
+% basic west-south-west distributor with upper name
+\def\basicWswdist[#1]#2{\WSWDIST{#2}{}{#100}}%
+
+% west-south-west distributor with upper name
+\newcommand{\Wswdist}{\@ifnextchar[{\basicWswdist}{\basicWswdist[133]}}%
+
+% basic west-south-west distributor with lower name
+\def\basicwswdisT[#1]#2{\WSWDIST{}{#2}{#100}}%
+
+% west-south-west distributor with lower name
+\newcommand{\wswdisT}{\@ifnextchar[{\basicwswdisT}{\basicwswdisT[133]}}%
+
+% basic west-south-west dotted arrow
+\def\basicwswdotar[#1]{\WSWDOTAR{}{}{#100}}%
+
+% west-south-west dotted arrow
+\newcommand{\wswdotar}{\@ifnextchar[{\basicwswdotar}{\basicwswdotar[133]}}%
+
+% basic west-south-west dotted arrow with upper name
+\def\basicWswdotar[#1]#2{\WSWDOTAR{#2}{}{#100}}%
+
+% west-south-west dotted arrow with upper name
+\newcommand{\Wswdotar}{\@ifnextchar[{\basicWswdotar}{\basicWswdotar[133]}}%
+
+% basic west-south-west dotted arrow with lower name
+\def\basicwswdotaR[#1]#2{\WSWDOTAR{}{#2}{#100}}%
+
+% west-south-west dotted arrow with lower name
+\newcommand{\wswdotaR}{\@ifnextchar[{\basicwswdotaR}{\basicwswdotaR[133]}}%
+
+% basic west-south-west monomorphism
+\def\basicwswmono[#1]{\WSWMONO{}{}{#100}}%
+
+% west-south-west monomorphism
+\newcommand{\wswmono}{\@ifnextchar[{\basicwswmono}{\basicwswmono[133]}}%
+
+% basic west-south-west monomorphism with upper name
+\def\basicWswmono[#1]#2{\WSWMONO{#2}{}{#100}}%
+
+% west-south-west monomorphism with upper name
+\newcommand{\Wswmono}{\@ifnextchar[{\basicWswmono}{\basicWswmono[133]}}%
+
+% basic west-south-west monomorphism with lower name
+\def\basicwswmonO[#1]#2{\WSWMONO{}{#2}{#100}}%
+
+% west-south-west monomorphism with lower name
+\newcommand{\wswmonO}{\@ifnextchar[{\basicwswmonO}{\basicwswmonO[133]}}%
+
+% basic west-south-west epimorphism
+\def\basicwswepi[#1]{\WSWEPI{}{}{#100}}%
+
+% west-south-west epimorphism
+\newcommand{\wswepi}{\@ifnextchar[{\basicwswepi}{\basicwswepi[133]}}%
+
+% basic west-south-west epimorphism with upper name
+\def\basicWswepi[#1]#2{\WSWEPI{#2}{}{#100}}%
+
+% west-south-west epimorphism with upper name
+\newcommand{\Wswepi}{\@ifnextchar[{\basicWswepi}{\basicWswepi[133]}}%
+
+% basic west-south-west epimorphism with lower name
+\def\basicwswepI[#1]#2{\WSWEPI{}{#2}{#100}}%
+
+% west-south-west epimorphism with lower name
+\newcommand{\wswepI}{\@ifnextchar[{\basicwswepI}{\basicwswepI[133]}}%
+
+% basic west-south-west bimorphism
+\def\basicwswbimo[#1]{\WSWBIMO{}{}{#100}}%
+
+% west-south-west bimorphism
+\newcommand{\wswbimo}{\@ifnextchar[{\basicwswbimo}{\basicwswbimo[133]}}%
+
+% basic west-south-west bimorphism with upper name
+\def\basicWswbimo[#1]#2{\WSWBIMO{#2}{}{#100}}%
+
+% west-south-west bimorphism with upper name
+\newcommand{\Wswbimo}{\@ifnextchar[{\basicWswbimo}{\basicWswbimo[133]}}%
+
+% basic west-south-west bimorphism with lower name
+\def\basicwswbimO[#1]#2{\WSWBIMO{}{#2}{#100}}%
+
+% west-south-west bimorphism with lower name
+\newcommand{\wswbimO}{\@ifnextchar[{\basicwswbimO}{\basicwswbimO[133]}}%
+
+% basic west-south-west isomorphism
+\def\basicwswiso[#1]{\WSWAR{\isosign}{}{#100}}%
+
+% west-south-west isomorphism
+\newcommand{\wswiso}{\@ifnextchar[{\basicwswiso}{\basicwswiso[133]}}%
+
+% basic west-south-west isomorphism with upper name
+\def\basicWswiso[#1]#2{\WSWAR{#2}{\isosign}{#100}}%
+
+% west-south-west isomorphism with upper name
+\newcommand{\Wswiso}{\@ifnextchar[{\basicWswiso}{\basicWswiso[133]}}%
+
+% basic west-south-west isomorphism with lower name
+\def\basicwswisO[#1]#2{\WSWAR{\isosign}{#2}{#100}}%
+
+% west-south-west isomorphism with lower name
+\newcommand{\wswisO}{\@ifnextchar[{\basicwswisO}{\basicwswisO[133]}}%
+
+% west-south-west equality
+\let\wsweql=\eneeql%
+
+% west-south-west equality with upper name
+\let\Wsweql=\Eneeql%
+
+% west-south-west equality with lower name
+\let\wsweqL=\eneeqL%
+
+% 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 distributors
+\def\basicwswbidist[#1]{\WSWBIDIST{}{}{#100}}%
+
+% west-south-west pair of distributors
+\newcommand{\wswbidist}{\@ifnextchar[{\basicwswbidist}{\basicwswbidist[133]}}%
+
+% basic west-south-west pair of distributors with names
+\def\basicWswbidist[#1]#2#3{\WSWBIDIST{#2}{#3}{#100}}%
+
+% west-south-west pair of distributors with names
+\newcommand{\Wswbidist}{\@ifnextchar[{\basicWswbidist}{\basicWswbidist[133]}}%
+\let\wswbidisT=\Wswbidist
+
+% 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
+
+% basic west-south-west pair of adjoint distributors
+\def\basicwswadjdist[#1]{\WSWADJDIST{}{}{#100}}%
+
+% west-south-west pair of adjoint distributors
+\newcommand{\wswadjdist}{\@ifnextchar[{\basicwswadjdist}{\basicwswadjdist[133]}}%
+
+% basic west-south-west pair of adjoint distributors with names
+\def\basicWswadjdist[#1]#2#3{\WSWADJDIST{#2}{#3}{#100}}%
+
+% west-south-west pair of adjoint distributors with names
+\newcommand{\Wswadjdist}{\@ifnextchar[{\basicWswadjdist}{\basicWswadjdist[133]}}%
+\let\wswadjdisT=\Wswadjdist
+
+
+% 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){\line(-2,1){#3}}%
+\put(-\Y,\Z){\wnwhead}%
+\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}}%
+
+% \WNWDIST{f}{g}{n} draws a west-north-west distributor
+% with names f, g and length n units
+\newcommand{\WNWDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(\Y,-\Z){\line(-2,1){#3}}%
+\put(-\Y,\Z){\wnwhead}%
+\truex{400}%
+\put(0,0){\distsign}%
+\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}}%
+
+% \WNWDOTAR{f}{g}{n} draws a north-east dotted arrow
+% with names f,g and length n units
+\newcommand{\WNWDOTAR}[3]{\testdiagrammode%
+\truex{100}\truey{268}\truez{134}%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\NUMBEROFDOTS=#3%
+\divide\NUMBEROFDOTS by \value{y}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\multiput(\Y,-\Z)(-\value{y},\value{z}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(-\Y,\Z){\wnwhead}%
+\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}}%
+
+% \WNWMONO{f}{g}{n} draws a west-north-west monomorphism
+% with names f,g and length n units
+\newcommand{\WNWMONO}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\TrueTail%
+\bimolength=#3%
+\advance\bimolength by -\TrueMonoTail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\secondmonolength=\monolength%
+\divide\secondmonolength by 2%
+\begin{picture}(0,0)%
+\put(\monolength,-\secondmonolength){\line(-2,1){\bimolength}}%
+\put(\monolength,-\secondmonolength){\wnwhead}%
+\put(-\Y,\Z){\wnwhead}%
+\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}}%
+
+% \WNWEPI{f}{g}{n} draws a west-north-west epimorphism
+% with names f, g and length n units
+\newcommand{\WNWEPI}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\TrueHead%
+\bimolength=#3%
+\advance\bimolength by -\TrueEpiHead%
+\epilength=\bimolength%
+\advance\epilength by -\Y%
+\secondepilength=\epilength%
+\divide\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(\Y,-\Z){\line(-2,1){\bimolength}}%
+\put(-\epilength,\secondepilength){\wnwhead}%
+\put(-\Y,\Z){\wnwhead}%
+\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}}%
+
+% \WNWBIMO{f}{g}{n} draws a west-north-west bimorphism
+% with names f,g and length n units
+\newcommand{\WNWBIMO}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\TrueTail\TrueHead%
+\bimolength=#3%
+\advance\bimolength by -\TrueMonoTail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\advance\bimolength by -\TrueEpiHead%
+\epilength=\bimolength%
+\advance\epilength by -\monolength%
+\secondmonolength=\monolength%
+\divide\secondmonolength by 2%
+\secondepilength=\epilength%
+\divide\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(\monolength,-\secondmonolength){\line(-2,1){\bimolength}}%
+\put(\monolength,-\secondmonolength){\wnwhead}%
+\put(-\epilength,\secondepilength){\wnwhead}%
+\put(-\Y,\Z){\wnwhead}%
+\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}){\line(-2,1){#3}}%
+\put(\value{x},\value{y}){\line(-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}%
+\put(-\monolength,\secondepilength){\wnwhead}%
+\put(-\epilength,\secondmonolength){\wnwhead}%
+\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}}%
+
+% \WNWBIDIST{f}{g}{n} draws a pair of west-north-west distributors
+% with names f,g and length n units
+\newcommand{\WNWBIDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\truex{156}\truey{313}\truez{400}%
+\put(\Y,-\Z){\begin{picture}(0,0)%
+\put(-\value{x},-\value{y}){\line(-2,1){#3}}%
+\put(\value{x},\value{y}){\line(-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}%
+\put(-\monolength,\secondepilength){\wnwhead}%
+\put(-\epilength,\secondmonolength){\wnwhead}%
+\end{picture}}
+\put(\value{x},\value{y}){\distsign}%
+\put(-\value{x},-\value{y}){\distsign}%
+\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}){\line(-2,1){#3}}%
+\put(-\epilength,\secondmonolength){\wnwhead}%
+\put(-\monolength,\secondepilength){\line(2,-1){#3}}%
+\put(\value{x},\value{y}){\esehead}%
+\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}}%
+
+% \WNWADJDIST{f}{g}{n} draws a west-north-west pair of adjoint distributors
+% with names f,g and length n units
+\newcommand{\WNWADJDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\truex{156}\truey{313}\truez{400}%
+\put(\Y,-\Z){\begin{picture}(0,0)%
+\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}){\line(-2,1){#3}}%
+\put(-\epilength,\secondmonolength){\wnwhead}%
+\put(-\monolength,\secondepilength){\line(2,-1){#3}}%
+\put(\value{x},\value{y}){\esehead}%
+\end{picture}}
+\put(\value{x},\value{y}){\distsign}%
+\put(-\value{x},-\value{y}){\distsign}%
+\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}}%
+
+% west-north-west distributor
+\newcommand{\wnwdist}{\@ifnextchar[{\basicwnwdist}{\basicwnwdist[133]}}%
+
+% basic west-north-west distributor with upper name
+\def\basicWnwdist[#1]#2{\WNWDIST{#2}{}{#100}}%
+
+% west-north-west distributor with upper name
+\newcommand{\Wnwdist}{\@ifnextchar[{\basicWnwdist}{\basicWnwdist[133]}}%
+
+% basic west-north-west distributor with lower name
+\def\basicwnwdisT[#1]#2{\WNWDIST{}{#2}{#100}}%
+
+% west-north-west distributor with lower name
+\newcommand{\wnwdisT}{\@ifnextchar[{\basicwnwdisT}{\basicwnwdisT[133]}}%
+
+% basic west-north-west dotted arrow
+\def\basicwnwdotar[#1]{\WNWDOTAR{}{}{#100}}%
+
+% west-north-west dotted arrow
+\newcommand{\wnwdotar}{\@ifnextchar[{\basicwnwdotar}{\basicwnwdotar[133]}}%
+
+% basic west-north-west dotted arrow with upper name
+\def\basicWnwdotar[#1]#2{\WNWDOTAR{#2}{}{#100}}%
+
+% west-north-west dotted arrow with upper name
+\newcommand{\Wnwdotar}{\@ifnextchar[{\basicWnwdotar}{\basicWnwdotar[133]}}%
+
+% basic west-north-west dotted arrow with lower name
+\def\basicwnwdotaR[#1]#2{\WNWDOTAR{}{#2}{#100}}%
+
+% west-north-west dotted arrow with lower name
+\newcommand{\wnwdotaR}{\@ifnextchar[{\basicwnwdotaR}{\basicwnwdotaR[133]}}%
+
+% basic west-north-west monomorphism
+\def\basicwnwmono[#1]{\WNWMONO{}{}{#100}}%
+
+% west-north-west monomorphism
+\newcommand{\wnwmono}{\@ifnextchar[{\basicwnwmono}{\basicwnwmono[133]}}%
+
+% basic west-north-west monomorphism with upper name
+\def\basicWnwmono[#1]#2{\WNWMONO{#2}{}{#100}}%
+
+% west-north-west monomorphism with upper name
+\newcommand{\Wnwmono}{\@ifnextchar[{\basicWnwmono}{\basicWnwmono[133]}}%
+
+% basic west-north-west monomorphism with lower name
+\def\basicwnwmonO[#1]#2{\WNWMONO{}{#2}{#100}}%
+
+% west-north-west monomorphism with lower name
+\newcommand{\wnwmonO}{\@ifnextchar[{\basicwnwmonO}{\basicwnwmonO[133]}}%
+
+% basic west-north-west epimorphism
+\def\basicwnwepi[#1]{\WNWEPI{}{}{#100}}%
+
+% west-north-west epimorphism
+\newcommand{\wnwepi}{\@ifnextchar[{\basicwnwepi}{\basicwnwepi[133]}}%
+
+% basic west-north-west epimorphism with upper name
+\def\basicWnwepi[#1]#2{\WNWEPI{#2}{}{#100}}%
+
+% west-north-west epimorphism with upper name
+\newcommand{\Wnwepi}{\@ifnextchar[{\basicWnwepi}{\basicWnwepi[133]}}%
+
+% basic west-north-west epimorphism with lower name
+\def\basicwnwepI[#1]#2{\WNWEPI{}{#2}{#100}}%
+
+% west-north-west epimorphism with lower name
+\newcommand{\wnwepI}{\@ifnextchar[{\basicwnwepI}{\basicwnwepI[133]}}%
+
+% basic west-north-west bimorphism
+\def\basicwnwbimo[#1]{\WNWBIMO{}{}{#100}}%
+
+% west-north-west bimorphism
+\newcommand{\wnwbimo}{\@ifnextchar[{\basicwnwbimo}{\basicwnwbimo[133]}}%
+
+% basic west-north-west bimorphism with upper name
+\def\basicWnwbimo[#1]#2{\WNWBIMO{#2}{}{#100}}%
+
+% west-north-west bimorphism with upper name
+\newcommand{\Wnwbimo}{\@ifnextchar[{\basicWnwbimo}{\basicWnwbimo[133]}}%
+
+% basic west-north-west bimorphism with lower name
+\def\basicwnwbimO[#1]#2{\WNWBIMO{}{#2}{#100}}%
+
+% west-north-west bimorphism with lower name
+\newcommand{\wnwbimO}{\@ifnextchar[{\basicwnwbimO}{\basicwnwbimO[133]}}%
+
+% basic west-north-west isomorphism
+\def\basicwnwiso[#1]{\WNWAR{\isosign}{}{#100}}%
+
+% west-north-west isomorphism
+\newcommand{\wnwiso}{\@ifnextchar[{\basicwnwiso}{\basicwnwiso[133]}}%
+
+% basic west-north-west isomorphism with upper name
+\def\basicWnwiso[#1]#2{\WNWAR{#2}{\isosign}{#100}}%
+
+% west-north-west isomorphism with upper name
+\newcommand{\Wnwiso}{\@ifnextchar[{\basicWnwiso}{\basicWnwiso[133]}}%
+
+% basic west-north-west isomorphism with lower name
+\def\basicwnwisO[#1]#2{\WNWAR{\isosign}{#2}{#100}}%
+
+% west-north-west isomorphism with lower name
+\newcommand{\wnwisO}{\@ifnextchar[{\basicwnwisO}{\basicwnwisO[133]}}%
+
+% west-north-west equality
+\let\wnweql=\eseeql%
+
+% west-north-west equality with upper name
+\let\Wnweql=\Eseeql%
+
+% west-north-west equality with lower name
+\let\wnweqL=\eseeqL%
+
+% 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 distributors
+\def\basicwnwbidist[#1]{\WNWBIDIST{}{}{#100}}%
+
+% west-north-west pair of distributors
+\newcommand{\wnwbidist}{\@ifnextchar[{\basicwnwbidist}{\basicwnwbidist[133]}}%
+
+% basic west-north-west pair of distributors with names
+\def\basicWnwbidist[#1]#2#3{\WNWBIDIST{#2}{#3}{#100}}%
+
+% west-north-west pair of distributors with names
+\newcommand{\Wnwbidist}{\@ifnextchar[{\basicWnwbidist}{\basicWnwbidist[133]}}%
+\let\wnwbidisT=\Wnwbidist
+
+% 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
+
+% basic west-north-west pair of adjoint distributors
+\def\basicwnwadjdist[#1]{\WNWADJDIST{}{}{#100}}%
+
+% west-north-west pair of adjoint distributors
+\newcommand{\wnwadjdist}{\@ifnextchar[{\basicwnwadjdist}{\basicwnwadjdist[133]}}%
+
+% basic west-north-west pair of adjoint distributors with names
+\def\basicWnwadjdist[#1]#2#3{\WNWADJDIST{#2}{#3}{#100}}%
+
+% west-north-west pair of adjoint distributors with names
+\newcommand{\Wnwadjdist}{\@ifnextchar[{\basicWnwadjdist}{\basicWnwadjdist[133]}}%
+\let\wnwadjdisT=\Wnwadjdist
+
+
+% 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){\line(1,2){#3}}%
+\put(\Z,#3){\nnehead}%
+\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}}%
+
+% \NNEDIST{f}{g}{n} draws a north-north-east distributor
+% with names f, g and length n units
+\newcommand{\NNEDIST}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Z,-#3){\line(1,2){#3}}%
+\put(\Z,#3){\nnehead}%
+\truex{400}%
+\put(0,0){\distsign}%
+\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}}%
+
+% \NNEDOTAR{f}{g}{n} draws a north-east dotted arrow
+% with names f,g and length n units
+\newcommand{\NNEDOTAR}[3]{\testdiagrammode%
+\truex{100}\truey{268}\truez{134}%
+\Z=#3%
+\divide\Z by 2%
+\NUMBEROFDOTS=#3%
+\divide\NUMBEROFDOTS by \value{z}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\multiput(-\Z,-#3)(\value{z},\value{y}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(\Z,#3){\nnehead}%
+\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}}%
+
+% \NNEMONO{f}{g}{n} draws a north-north-east monomorphism
+% with names f,g and length n units
+\newcommand{\NNEMONO}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\truetaiL%
+\bimolength=#3%
+\advance\bimolength by -\truemonotaiL%
+\monolength=\bimolength%
+\advance\monolength by -\Z%
+\secondmonolength=\monolength%
+\multiply\secondmonolength by 2%
+\begin{picture}(0,0)%
+\put(-\monolength,-\secondmonolength){\line(1,2){\bimolength}}%
+\put(-\monolength,-\secondmonolength){\nnehead}%
+\put(\Z,#3){\nnehead}%
+\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}}%
+
+% \NNEEPI{f}{g}{n} draws a north-north-east epimorphism
+% with names f, g and length n units
+\newcommand{\NNEEPI}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\trueheaD%
+\bimolength=#3%
+\advance\bimolength by -\trueepiheaD%
+\epilength=\bimolength%
+\advance\epilength by -\Z%
+\secondepilength=\epilength%
+\multiply\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(-\Z,-#3){\line(1,2){\bimolength}}%
+\put(\epilength,\secondepilength){\nnehead}%
+\put(\Z,#3){\nnehead}%
+\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}}%
+
+% \NNEBIMO{f}{g}{n} draws a north-north-east bimorphism
+% with names f,g and length n units
+\newcommand{\NNEBIMO}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\truetaiL\trueheaD%
+\bimolength=#3%
+\advance\bimolength by -\truemonotaiL%
+\monolength=\bimolength%
+\advance\monolength by -\Z%
+\advance\bimolength by -\trueepiheaD%
+\epilength=\bimolength%
+\advance\epilength by -\monolength%
+\secondmonolength=\monolength%
+\multiply\secondmonolength by 2%
+\secondepilength=\epilength%
+\multiply\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(-\monolength,-\secondmonolength){\line(1,2){\bimolength}}%
+\put(-\monolength,-\secondmonolength){\nnehead}%
+\put(\epilength,\secondepilength){\nnehead}%
+\put(\Z,#3){\nnehead}%
+\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}}%
+
+% \NNEEQL{f}{g}{n} draws a north-north-east equality
+% with names f,g and length n units
+\newcommand{\NNEEQL}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Z,-#3){\begin{picture}(0,0)%
+\truex{44}\truey{89}%
+\put(-\value{y},\value{x}){\line(1,2){#3}}%
+\put(\value{y},-\value{x}){\line(1,2){#3}}%
+\end{picture}}%
+\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}){\line(1,2){#3}}%
+\put(\value{x},-\value{y}){\line(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}%
+\put(\monolength,\secondepilength){\nnehead}%
+\put(\epilength,\secondmonolength){\nnehead}%
+\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}}%
+
+% \NNEBIDIST{f}{g}{n} draws a pair of north-north-east distributors
+% with names f,g and length n units
+\newcommand{\NNEBIDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\truex{313}\truey{156}\truez{400}%
+\put(-\Y,-#3){\begin{picture}(0,0)%
+\put(-\value{x},\value{y}){\line(1,2){#3}}%
+\put(\value{x},-\value{y}){\line(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}%
+\put(\monolength,\secondepilength){\nnehead}%
+\put(\epilength,\secondmonolength){\nnehead}%
+\end{picture}}
+\put(-\value{x},\value{y}){\distsign}%
+\put(\value{x},-\value{y}){\distsign}%
+\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}){\line(1,2){#3}}%
+\put(\epilength,\secondmonolength){\nnehead}%
+\put(\monolength,\secondepilength){\line(-1,-2){#3}}%
+\put(-\value{x},\value{y}){\sswhead}%
+\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}}%
+
+% \NNEADJDIST{f}{g}{n} draws a north-north-east pair of adjoint distributors
+% with names f,g and length n units
+\newcommand{\NNEADJDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\truex{313}\truey{156}\truez{400}%
+\put(-\Y,-#3){\begin{picture}(0,0)%
+\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}){\line(1,2){#3}}%
+\put(\epilength,\secondmonolength){\nnehead}%
+\put(\monolength,\secondepilength){\line(-1,-2){#3}}%
+\put(-\value{x},\value{y}){\sswhead}%
+\end{picture}}
+\put(-\value{x},\value{y}){\distsign}%
+\put(\value{x},-\value{y}){\distsign}%
+\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 distributor
+\def\basicnnedist[#1]{\NNEDIST{}{}{#100}}%
+
+% north-north-east distributor
+\newcommand{\nnedist}{\@ifnextchar[{\basicnnedist}{\basicnnedist[67]}}%
+
+% basic north-north-east distributor with upper name
+\def\basicNnedist[#1]#2{\NNEDIST{#2}{}{#100}}%
+
+% north-north-east distributor with upper name
+\newcommand{\Nnedist}{\@ifnextchar[{\basicNnedist}{\basicNnedist[67]}}%
+
+% basic north-north-east distributor with lower name
+\def\basicnnedisT[#1]#2{\NNEDIST{}{#2}{#100}}%
+
+% north-north-east distributor with lower name
+\newcommand{\nnedisT}{\@ifnextchar[{\basicnnedisT}{\basicnnedisT[67]}}%
+
+% basic north-north-east dotted arrow
+\def\basicnnedotar[#1]{\NNEDOTAR{}{}{#100}}%
+
+% north-north-east dotted arrow
+\newcommand{\nnedotar}{\@ifnextchar[{\basicnnedotar}{\basicnnedotar[67]}}%
+
+% basic north-north-east dotted arrow with upper name
+\def\basicNnedotar[#1]#2{\NNEDOTAR{#2}{}{#100}}%
+
+% north-north-east dotted arrow with upper name
+\newcommand{\Nnedotar}{\@ifnextchar[{\basicNnedotar}{\basicNnedotar[67]}}%
+
+% basic north-north-east dotted arrow with lower name
+\def\basicnnedotaR[#1]#2{\NNEDOTAR{}{#2}{#100}}%
+
+% north-north-east dotted arrow with lower name
+\newcommand{\nnedotaR}{\@ifnextchar[{\basicnnedotaR}{\basicnnedotaR[67]}}%
+
+% basic north-north-east monomorphism
+\def\basicnnemono[#1]{\NNEMONO{}{}{#100}}%
+
+% north-north-east monomorphism
+\newcommand{\nnemono}{\@ifnextchar[{\basicnnemono}{\basicnnemono[67]}}%
+
+% basic north-north-east monomorphism with upper name
+\def\basicNnemono[#1]#2{\NNEMONO{#2}{}{#100}}%
+
+% north-north-east monomorphism with upper name
+\newcommand{\Nnemono}{\@ifnextchar[{\basicNnemono}{\basicNnemono[67]}}%
+
+% basic north-north-east monomorphism with lower name
+\def\basicnnemonO[#1]#2{\NNEMONO{}{#2}{#100}}%
+
+% north-north-east monomorphism with lower name
+\newcommand{\nnemonO}{\@ifnextchar[{\basicnnemonO}{\basicnnemonO[67]}}%
+
+% basic north-north-east epimorphism
+\def\basicnneepi[#1]{\NNEEPI{}{}{#100}}%
+
+% north-north-east epimorphism
+\newcommand{\nneepi}{\@ifnextchar[{\basicnneepi}{\basicnneepi[67]}}%
+
+% basic north-north-east epimorphism with upper name
+\def\basicNneepi[#1]#2{\NNEEPI{#2}{}{#100}}%
+
+% north-north-east epimorphism with upper name
+\newcommand{\Nneepi}{\@ifnextchar[{\basicNneepi}{\basicNneepi[67]}}%
+
+% basic north-north-east epimorphism with lower name
+\def\basicnneepI[#1]#2{\NNEEPI{}{#2}{#100}}%
+
+% north-north-east epimorphism with lower name
+\newcommand{\nneepI}{\@ifnextchar[{\basicnneepI}{\basicnneepI[67]}}%
+
+% basic north-north-east bimorphism
+\def\basicnnebimo[#1]{\NNEBIMO{}{}{#100}}%
+
+% north-north-east bimorphism
+\newcommand{\nnebimo}{\@ifnextchar[{\basicnnebimo}{\basicnnebimo[67]}}%
+
+% basic north-north-east bimorphism with upper name
+\def\basicNnebimo[#1]#2{\NNEBIMO{#2}{}{#100}}%
+
+% north-north-east bimorphism with upper name
+\newcommand{\Nnebimo}{\@ifnextchar[{\basicNnebimo}{\basicNnebimo[67]}}%
+
+% basic north-north-east bimorphism with lower name
+\def\basicnnebimO[#1]#2{\NNEBIMO{}{#2}{#100}}%
+
+% north-north-east bimorphism with lower name
+\newcommand{\nnebimO}{\@ifnextchar[{\basicnnebimO}{\basicnnebimO[67]}}%
+
+% basic north-north-east isomorphism
+\def\basicnneiso[#1]{\NNEAR{\isosign}{}{#100}}%
+
+% north-north-east isomorphism
+\newcommand{\nneiso}{\@ifnextchar[{\basicnneiso}{\basicnneiso[67]}}%
+
+% basic north-north-east isomorphism with upper name
+\def\basicNneiso[#1]#2{\NNEAR{#2}{\isosign}{#100}}%
+
+% north-north-east isomorphism with upper name
+\newcommand{\Nneiso}{\@ifnextchar[{\basicNneiso}{\basicNneiso[67]}}%
+
+% basic north-north-east isomorphism with lower name
+\def\basicnneisO[#1]#2{\NNEAR{\isosign}{#2}{#100}}%
+
+% north-north-east isomorphism with lower name
+\newcommand{\nneisO}{\@ifnextchar[{\basicnneisO}{\basicnneisO[67]}}%
+
+% basic north-north-east equality
+\def\basicnneeql[#1]{\NNEEQL{}{}{#100}}%
+
+% north-north-east equality
+\newcommand{\nneeql}{\@ifnextchar[{\basicnneeql}{\basicnneeql[67]}}%
+
+% basic north-north-east equality with upper name
+\def\basicNneeql[#1]#2{\NNEEQL{#2}{}{#100}}%
+
+% north-north-east equality with upper name
+\newcommand{\Nneeql}{\@ifnextchar[{\basicNneeql}{\basicNneeql[67]}}%
+
+% basic north-north-east equality with lower name
+\def\basicnneeqL[#1]#2{\NNEEQL{}{#2}{#100}}%
+
+% north-north-east equality with lower name
+\newcommand{\nneeqL}{\@ifnextchar[{\basicnneeqL}{\basicnneeqL[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 distributors
+\def\basicnnebidist[#1]{\NNEBIDIST{}{}{#100}}%
+
+% north-north-east pair of distributors
+\newcommand{\nnebidist}{\@ifnextchar[{\basicnnebidist}{\basicnnebidist[67]}}%
+
+% basic north-north-east pair of distributors with names
+\def\basicNnebidist[#1]#2#3{\NNEBIDIST{#2}{#3}{#100}}%
+
+% north-north-east pair of distributors with names
+\newcommand{\Nnebidist}{\@ifnextchar[{\basicNnebidist}{\basicNnebidist[67]}}%
+\let\nnebidisT=\Nnebidist
+
+% 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
+
+% basic north-north-east pair of adjoint distributors
+\def\basicnneadjdist[#1]{\NNEADJDIST{}{}{#100}}%
+
+% north-north-east pair of adjoint distributors
+\newcommand{\nneadjdist}{\@ifnextchar[{\basicnneadjdist}{\basicnneadjdist[67]}}%
+
+% basic north-north-east pair of adjoint distributors with names
+\def\basicNneadjdist[#1]#2#3{\NNEADJDIST{#2}{#3}{#100}}%
+
+% north-north-east pair of adjoint distributors with names
+\newcommand{\Nneadjdist}{\@ifnextchar[{\basicNneadjdist}{\basicNneadjdist[67]}}%
+\let\nneadjdisT=\Nneadjdist
+
+
+% 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){\line(1,-2){#3}}%
+\put(\Z,-#3){\ssehead}%
+\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}}%
+
+% \SSEDIST{f}{g}{n} draws a south-south-east distributor
+% with names f, g and length n units
+\newcommand{\SSEDIST}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Z,#3){\line(1,-2){#3}}%
+\put(\Z,-#3){\ssehead}%
+\truex{400}%
+\put(0,0){\distsign}%
+\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}}%
+
+% \SSEDOTAR{f}{g}{n} draws a north-east dotted arrow
+% with names f,g and length n units
+\newcommand{\SSEDOTAR}[3]{\testdiagrammode%
+\truex{100}\truey{268}\truez{134}%
+\Z=#3%
+\divide\Z by 2%
+\NUMBEROFDOTS=#3%
+\divide\NUMBEROFDOTS by \value{z}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\multiput(-\Z,#3)(\value{z},-\value{y}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(\Z,-#3){\ssehead}%
+\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}}%
+
+% \SSEMONO{f}{g}{n} draws a south-south-east monomorphism
+% with names f,g and length n units
+\newcommand{\SSEMONO}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\truetaiL%
+\bimolength=#3%
+\advance\bimolength by -\truemonotaiL%
+\monolength=\bimolength%
+\advance\monolength by -\Z%
+\secondmonolength=\monolength%
+\multiply\secondmonolength by 2%
+\begin{picture}(0,0)%
+\put(-\monolength,\secondmonolength){\line(1,-2){\bimolength}}%
+\put(-\monolength,\secondmonolength){\ssehead}%
+\put(\Z,-#3){\ssehead}%
+\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}}%
+
+% \SSEEPI{f}{g}{n} draws a south-south-east epimorphism
+% with names f, g and length n units
+\newcommand{\SSEEPI}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\trueheaD%
+\bimolength=#3%
+\advance\bimolength by -\trueepiheaD%
+\epilength=\bimolength%
+\advance\epilength by -\Z%
+\secondepilength=\epilength%
+\multiply\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(-\Z,#3){\line(1,-2){\bimolength}}%
+\put(\epilength,-\secondepilength){\ssehead}%
+\put(\Z,-#3){\ssehead}%
+\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}}%
+
+% \SSEBIMO{f}{g}{n} draws a south-south-east bimorphism
+% with names f,g and length n units
+\newcommand{\SSEBIMO}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\truetaiL\trueheaD%
+\bimolength=#3%
+\advance\bimolength by -\truemonotaiL%
+\monolength=\bimolength%
+\advance\monolength by -\Z%
+\advance\bimolength by -\trueepiheaD%
+\epilength=\bimolength%
+\advance\epilength by -\monolength%
+\secondmonolength=\monolength%
+\multiply\secondmonolength by 2%
+\secondepilength=\epilength%
+\multiply\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(-\monolength,\secondmonolength){\line(1,-2){\bimolength}}%
+\put(-\monolength,\secondmonolength){\ssehead}%
+\put(\epilength,-\secondepilength){\ssehead}%
+\put(\Z,-#3){\ssehead}%
+\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}}%
+
+% \SSEEQL{f}{g}{n} draws a south-south-east equality
+% with names f,g and length n units
+\newcommand{\SSEEQL}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Z,#3){\begin{picture}(0,0)%
+\truex{44}\truey{89}%
+\put(-\value{y},-\value{x}){\line(1,-2){#3}}%
+\put(\value{y},\value{x}){\line(1,-2){#3}}%
+\end{picture}}%
+\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}){\line(1,-2){#3}}%
+\put(\value{x},\value{y}){\line(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}%
+\put(\monolength,-\secondepilength){\ssehead}%
+\put(\epilength,-\secondmonolength){\ssehead}%
+\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}}%
+
+% \SSEBIDIST{f}{g}{n} draws a pair of south-south-east distributors
+% with names f,g and length n units
+\newcommand{\SSEBIDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\truex{313}\truey{156}\truez{400}%
+\put(-\Y,#3){\begin{picture}(0,0)%
+\put(-\value{x},-\value{y}){\line(1,-2){#3}}%
+\put(\value{x},\value{y}){\line(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}%
+\put(\monolength,-\secondepilength){\ssehead}%
+\put(\epilength,-\secondmonolength){\ssehead}%
+\end{picture}}
+\put(-\value{x},-\value{y}){\distsign}%
+\put(\value{x},\value{y}){\distsign}%
+\truex{500}\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}){\line(1,-2){#3}}%
+\put(\monolength,-\secondepilength){\ssehead}%
+\put(\epilength,-\secondmonolength){\line(-1,2){#3}}%
+\put(\value{x},\value{y}){\nnwhead}%
+\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}}%
+
+% \SSEADJDIST{f}{g}{n} draws a south-south-east pair of adjoint distributors
+% with names f,g and length n units
+\newcommand{\SSEADJDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\truex{313}\truey{156}\truez{400}%
+\put(-\Y,#3){\begin{picture}(0,0)%
+\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}){\line(1,-2){#3}}%
+\put(\monolength,-\secondepilength){\ssehead}%
+\put(\epilength,-\secondmonolength){\line(-1,2){#3}}%
+\put(\value{x},\value{y}){\nnwhead}%
+\end{picture}}
+\put(\value{x},\value{y}){\distsign}%
+\put(-\value{x},-\value{y}){\distsign}%
+\truex{500}\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 distributor
+\def\basicssedist[#1]{\SSEDIST{}{}{#100}}%
+
+% south-south-east distributor
+\newcommand{\ssedist}{\@ifnextchar[{\basicssedist}{\basicssedist[67]}}%
+
+% basic south-south-east distributor with upper name
+\def\basicSsedist[#1]#2{\SSEDIST{#2}{}{#100}}%
+
+% south-south-east distributor with upper name
+\newcommand{\Ssedist}{\@ifnextchar[{\basicSsedist}{\basicSsedist[67]}}%
+
+% basic south-south-east distributor with lower name
+\def\basicssedisT[#1]#2{\SSEDIST{}{#2}{#100}}%
+
+% south-south-east distributor with lower name
+\newcommand{\ssedisT}{\@ifnextchar[{\basicssedisT}{\basicssedisT[67]}}%
+
+% basic south-south-east dotted arrow
+\def\basicssedotar[#1]{\SSEDOTAR{}{}{#100}}%
+
+% south-south-east dotted arrow
+\newcommand{\ssedotar}{\@ifnextchar[{\basicssedotar}{\basicssedotar[67]}}%
+
+% basic south-south-east dotted arrow with upper name
+\def\basicSsedotar[#1]#2{\SSEDOTAR{#2}{}{#100}}%
+
+% south-south-east dotted arrow with upper name
+\newcommand{\Ssedotar}{\@ifnextchar[{\basicSsedotar}{\basicSsedotar[67]}}%
+
+% basic south-south-east dotted arrow with lower name
+\def\basicssedotaR[#1]#2{\SSEDOTAR{}{#2}{#100}}%
+
+% south-south-east dotted arrow with lower name
+\newcommand{\ssedotaR}{\@ifnextchar[{\basicssedotaR}{\basicssedotaR[67]}}%
+
+% basic south-south-east monomorphism
+\def\basicssemono[#1]{\SSEMONO{}{}{#100}}%
+
+% south-south-east monomorphism
+\newcommand{\ssemono}{\@ifnextchar[{\basicssemono}{\basicssemono[67]}}%
+
+% basic south-south-east monomorphism with upper name
+\def\basicSsemono[#1]#2{\SSEMONO{#2}{}{#100}}%
+
+% south-south-east monomorphism with upper name
+\newcommand{\Ssemono}{\@ifnextchar[{\basicSsemono}{\basicSsemono[67]}}%
+
+% basic south-south-east monomorphism with lower name
+\def\basicssemonO[#1]#2{\SSEMONO{}{#2}{#100}}%
+
+% south-south-east monomorphism with lower name
+\newcommand{\ssemonO}{\@ifnextchar[{\basicssemonO}{\basicssemonO[67]}}%
+
+% basic south-south-east epimorphism
+\def\basicsseepi[#1]{\SSEEPI{}{}{#100}}%
+
+% south-south-east epimorphism
+\newcommand{\sseepi}{\@ifnextchar[{\basicsseepi}{\basicsseepi[67]}}%
+
+% basic south-south-east epimorphism with upper name
+\def\basicSseepi[#1]#2{\SSEEPI{#2}{}{#100}}%
+
+% south-south-east epimorphism with upper name
+\newcommand{\Sseepi}{\@ifnextchar[{\basicSseepi}{\basicSseepi[67]}}%
+
+% basic south-south-east epimorphism with lower name
+\def\basicsseepI[#1]#2{\SSEEPI{}{#2}{#100}}%
+
+% south-south-east epimorphism with lower name
+\newcommand{\sseepI}{\@ifnextchar[{\basicsseepI}{\basicsseepI[67]}}%
+
+% basic south-south-east bimorphism
+\def\basicssebimo[#1]{\SSEBIMO{}{}{#100}}%
+
+% south-south-east bimorphism
+\newcommand{\ssebimo}{\@ifnextchar[{\basicssebimo}{\basicssebimo[67]}}%
+
+% basic south-south-east bimorphism with upper name
+\def\basicSsebimo[#1]#2{\SSEBIMO{#2}{}{#100}}%
+
+% south-south-east bimorphism with upper name
+\newcommand{\Ssebimo}{\@ifnextchar[{\basicSsebimo}{\basicSsebimo[67]}}%
+
+% basic south-south-east bimorphism with lower name
+\def\basicssebimO[#1]#2{\SSEBIMO{}{#2}{#100}}%
+
+% south-south-east bimorphism with lower name
+\newcommand{\ssebimO}{\@ifnextchar[{\basicssebimO}{\basicssebimO[67]}}%
+
+% basic south-south-east isomorphism
+\def\basicsseiso[#1]{\SSEAR{\isosign}{}{#100}}%
+
+% south-south-east isomorphism
+\newcommand{\sseiso}{\@ifnextchar[{\basicsseiso}{\basicsseiso[67]}}%
+
+% basic south-south-east isomorphism with upper name
+\def\basicSseiso[#1]#2{\SSEAR{#2}{\isosign}{#100}}%
+
+% south-south-east isomorphism with upper name
+\newcommand{\Sseiso}{\@ifnextchar[{\basicSseiso}{\basicSseiso[67]}}%
+
+% basic south-south-east isomorphism with lower name
+\def\basicsseisO[#1]#2{\SSEAR{\isosign}{#2}{#100}}%
+
+% south-south-east isomorphism with lower name
+\newcommand{\sseisO}{\@ifnextchar[{\basicsseisO}{\basicsseisO[67]}}%
+
+% basic south-south-east equality
+\def\basicsseeql[#1]{\SSEEQL{}{}{#100}}%
+
+% south-south-east equality
+\newcommand{\sseeql}{\@ifnextchar[{\basicsseeql}{\basicsseeql[67]}}%
+
+% basic south-south-east equality with upper name
+\def\basicSseeql[#1]#2{\SSEEQL{#2}{}{#100}}%
+
+% south-south-east equality with upper name
+\newcommand{\Sseeql}{\@ifnextchar[{\basicSseeql}{\basicSseeql[67]}}%
+
+% basic south-south-east equality with lower name
+\def\basicsseeqL[#1]#2{\SSEEQL{}{#2}{#100}}%
+
+% south-south-east equality with lower name
+\newcommand{\sseeqL}{\@ifnextchar[{\basicsseeqL}{\basicsseeqL[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 distributors
+\def\basicssebidist[#1]{\SSEBIDIST{}{}{#100}}%
+
+% south-south-east pair of distributors
+\newcommand{\ssebidist}{\@ifnextchar[{\basicssebidist}{\basicssebidist[67]}}%
+
+% basic south-south-east pair of distributors with names
+\def\basicSsebidist[#1]#2#3{\SSEBIDIST{#2}{#3}{#100}}%
+
+% south-south-east pair of distributors with names
+\newcommand{\Ssebidist}{\@ifnextchar[{\basicSsebidist}{\basicSsebidist[67]}}%
+\let\ssebidisT=\Ssebidist
+
+% 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
+
+% basic south-south-east pair of adjoint distributors
+\def\basicsseadjdist[#1]{\SSEADJDIST{}{}{#100}}%
+
+% south-south-east pair of adjoint distributors
+\newcommand{\sseadjdist}{\@ifnextchar[{\basicsseadjdist}{\basicsseadjdist[67]}}%
+
+% basic south-south-east pair of adjoint distributors with names
+\def\basicSseadjdist[#1]#2#3{\SSEADJDIST{#2}{#3}{#100}}%
+
+% south-south-east pair of adjoint distributors with names
+\newcommand{\Sseadjdist}{\@ifnextchar[{\basicSseadjdist}{\basicSseadjdist[67]}}%
+\let\sseadjdisT=\Sseadjdist
+
+
+% 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){\line(-1,-2){#3}}%
+\put(-\Z,-#3){\sswhead}%
+\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}}%
+
+% \SSWDIST{f}{g}{n} draws a south-south-west distributor
+% with names f, g and length n units
+\newcommand{\SSWDIST}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(\Z,#3){\line(-1,-2){#3}}%
+\put(-\Z,-#3){\sswhead}%
+\truex{400}%
+\put(0,0){\distsign}%
+\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}}%
+
+% \SSWDOTAR{f}{g}{n} draws a north-east dotted arrow
+% with names f,g and length n units
+\newcommand{\SSWDOTAR}[3]{\testdiagrammode%
+\truex{100}\truey{268}\truez{134}%
+\Z=#3%
+\divide\Z by 2%
+\NUMBEROFDOTS=#3%
+\divide\NUMBEROFDOTS by \value{z}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\multiput(\Z,#3)(-\value{z},-\value{y}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(-\Z,-#3){\sswhead}%
+\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}}%
+
+% \SSWMONO{f}{g}{n} draws a south-south-west monomorphism
+% with names f,g and length n units
+\newcommand{\SSWMONO}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\truetaiL%
+\bimolength=#3%
+\advance\bimolength by -\truemonotaiL%
+\monolength=\bimolength%
+\advance\monolength by -\Z%
+\secondmonolength=\monolength%
+\multiply\secondmonolength by 2%
+\begin{picture}(0,0)%
+\put(\monolength,\secondmonolength){\line(-1,-2){\bimolength}}%
+\put(\monolength,\secondmonolength){\sswhead}%
+\put(-\Z,-#3){\sswhead}%
+\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}}%
+
+% \SSWEPI{f}{g}{n} draws a south-south-west epimorphism
+% with names f, g and length n units
+\newcommand{\SSWEPI}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\trueheaD%
+\bimolength=#3%
+\advance\bimolength by -\trueepiheaD%
+\epilength=\bimolength%
+\advance\epilength by -\Z%
+\secondepilength=\epilength%
+\multiply\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(\Z,#3){\line(-1,-2){\bimolength}}%
+\put(-\epilength,-\secondepilength){\sswhead}%
+\put(-\Z,-#3){\sswhead}%
+\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}}%
+
+% \SSWBIMO{f}{g}{n} draws a south-south-west bimorphism
+% with names f,g and length n units
+\newcommand{\SSWBIMO}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\truetaiL\trueheaD%
+\bimolength=#3%
+\advance\bimolength by -\truemonotaiL%
+\monolength=\bimolength%
+\advance\monolength by -\Z%
+\advance\bimolength by -\trueepiheaD%
+\epilength=\bimolength%
+\advance\epilength by -\monolength%
+\secondmonolength=\monolength%
+\multiply\secondmonolength by 2%
+\secondepilength=\epilength%
+\multiply\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(\monolength,\secondmonolength){\line(-1,-2){\bimolength}}%
+\put(\monolength,\secondmonolength){\sswhead}%
+\put(-\epilength,-\secondepilength){\sswhead}%
+\put(-\Z,-#3){\sswhead}%
+\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}){\line(-1,-2){#3}}%
+\put(\value{x},-\value{y}){\line(-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}%
+\put(-\monolength,-\secondepilength){\sswhead}%
+\put(-\epilength,-\secondmonolength){\sswhead}%
+\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}}%
+
+% \SSWBIDIST{f}{g}{n} draws a pair of south-south-west distributors
+% with names f,g and length n units
+\newcommand{\SSWBIDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\truex{313}\truey{156}\truez{400}%
+\put(\Y,#3){\begin{picture}(0,0)%
+\put(-\value{x},\value{y}){\line(-1,-2){#3}}%
+\put(\value{x},-\value{y}){\line(-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}%
+\put(-\monolength,-\secondepilength){\sswhead}%
+\put(-\epilength,-\secondmonolength){\sswhead}%
+\end{picture}}
+\put(-\value{x},\value{y}){\distsign}%
+\put(\value{x},-\value{y}){\distsign}%
+\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}){\line(-1,-2){#3}}%
+\put(-\monolength,-\secondepilength){\sswhead}%
+\put(-\epilength,-\secondmonolength){\line(1,2){#3}}%
+\put(-\value{x},\value{y}){\nnehead}%
+\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}}%
+
+% \SSWADJDIST{f}{g}{n} draws a south-south-west pair of adjoint distributors
+% with names f,g and length n units
+\newcommand{\SSWADJDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\truex{313}\truey{156}\truez{400}%
+\put(\Y,#3){\begin{picture}(0,0)%
+\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}){\line(-1,-2){#3}}%
+\put(-\monolength,-\secondepilength){\sswhead}%
+\put(-\epilength,-\secondmonolength){\line(1,2){#3}}%
+\put(-\value{x},\value{y}){\nnehead}%
+\end{picture}}
+\put(-\value{x},\value{y}){\distsign}%
+\put(\value{x},-\value{y}){\distsign}%
+\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 distributor
+\def\basicsswdist[#1]{\SSWDIST{}{}{#100}}%
+
+% south-south-west distributor
+\newcommand{\sswdist}{\@ifnextchar[{\basicsswdist}{\basicsswdist[67]}}%
+
+% basic south-south-west distributor with upper name
+\def\basicSswdist[#1]#2{\SSWDIST{#2}{}{#100}}%
+
+% south-south-west distributor with upper name
+\newcommand{\Sswdist}{\@ifnextchar[{\basicSswdist}{\basicSswdist[67]}}%
+
+% basic south-south-west distributor with lower name
+\def\basicsswdisT[#1]#2{\SSWDIST{}{#2}{#100}}%
+
+% south-south-west distributor with lower name
+\newcommand{\sswdisT}{\@ifnextchar[{\basicsswdisT}{\basicsswdisT[67]}}%
+
+% basic south-south-west dotted arrow
+\def\basicsswdotar[#1]{\SSWDOTAR{}{}{#100}}%
+
+% south-south-west dotted arrow
+\newcommand{\sswdotar}{\@ifnextchar[{\basicsswdotar}{\basicsswdotar[67]}}%
+
+% basic south-south-west dotted arrow with upper name
+\def\basicSswdotar[#1]#2{\SSWDOTAR{#2}{}{#100}}%
+
+% south-south-west dotted arrow with upper name
+\newcommand{\Sswdotar}{\@ifnextchar[{\basicSswdotar}{\basicSswdotar[67]}}%
+
+% basic south-south-west dotted arrow with lower name
+\def\basicsswdotaR[#1]#2{\SSWDOTAR{}{#2}{#100}}%
+
+% south-south-west dotted arrow with lower name
+\newcommand{\sswdotaR}{\@ifnextchar[{\basicsswdotaR}{\basicsswdotaR[67]}}%
+
+% basic south-south-west monomorphism
+\def\basicsswmono[#1]{\SSWMONO{}{}{#100}}%
+
+% south-south-west monomorphism
+\newcommand{\sswmono}{\@ifnextchar[{\basicsswmono}{\basicsswmono[67]}}%
+
+% basic south-south-west monomorphism with upper name
+\def\basicSswmono[#1]#2{\SSWMONO{#2}{}{#100}}%
+
+% south-south-west monomorphism with upper name
+\newcommand{\Sswmono}{\@ifnextchar[{\basicSswmono}{\basicSswmono[67]}}%
+
+% basic south-south-west monomorphism with lower name
+\def\basicsswmonO[#1]#2{\SSWMONO{}{#2}{#100}}%
+
+% south-south-west monomorphism with lower name
+\newcommand{\sswmonO}{\@ifnextchar[{\basicsswmonO}{\basicsswmonO[67]}}%
+
+% basic south-south-west epimorphism
+\def\basicsswepi[#1]{\SSWEPI{}{}{#100}}%
+
+% south-south-west epimorphism
+\newcommand{\sswepi}{\@ifnextchar[{\basicsswepi}{\basicsswepi[67]}}%
+
+% basic south-south-west epimorphism with upper name
+\def\basicSswepi[#1]#2{\SSWEPI{#2}{}{#100}}%
+
+% south-south-west epimorphism with upper name
+\newcommand{\Sswepi}{\@ifnextchar[{\basicSswepi}{\basicSswepi[67]}}%
+
+% basic south-south-west epimorphism with lower name
+\def\basicsswepI[#1]#2{\SSWEPI{}{#2}{#100}}%
+
+% south-south-west epimorphism with lower name
+\newcommand{\sswepI}{\@ifnextchar[{\basicsswepI}{\basicsswepI[67]}}%
+
+% basic south-south-west bimorphism
+\def\basicsswbimo[#1]{\SSWBIMO{}{}{#100}}%
+
+% south-south-west bimorphism
+\newcommand{\sswbimo}{\@ifnextchar[{\basicsswbimo}{\basicsswbimo[67]}}%
+
+% basic south-south-west bimorphism with upper name
+\def\basicSswbimo[#1]#2{\SSWBIMO{#2}{}{#100}}%
+
+% south-south-west bimorphism with upper name
+\newcommand{\Sswbimo}{\@ifnextchar[{\basicSswbimo}{\basicSswbimo[67]}}%
+
+% basic south-south-west bimorphism with lower name
+\def\basicsswbimO[#1]#2{\SSWBIMO{}{#2}{#100}}%
+
+% south-south-west bimorphism with lower name
+\newcommand{\sswbimO}{\@ifnextchar[{\basicsswbimO}{\basicsswbimO[67]}}%
+
+% basic south-south-west isomorphism
+\def\basicsswiso[#1]{\SSWAR{\isosign}{}{#100}}%
+
+% south-south-west isomorphism
+\newcommand{\sswiso}{\@ifnextchar[{\basicsswiso}{\basicsswiso[67]}}%
+
+% basic south-south-west isomorphism with upper name
+\def\basicSswiso[#1]#2{\SSWAR{#2}{\isosign}{#100}}%
+
+% south-south-west isomorphism with upper name
+\newcommand{\Sswiso}{\@ifnextchar[{\basicSswiso}{\basicSswiso[67]}}%
+
+% basic south-south-west isomorphism with lower name
+\def\basicsswisO[#1]#2{\SSWAR{\isosign}{#2}{#100}}%
+
+% south-south-west isomorphism with lower name
+\newcommand{\sswisO}{\@ifnextchar[{\basicsswisO}{\basicsswisO[67]}}%
+
+% south-south-west equality
+\let\ssweql=\nneeql%
+
+% south-south-west equality with upper name
+\let\Ssweql=\Nneeql%
+
+% south-south-west equality with lower name
+\let\ssweqL=\nneeqL%
+
+% 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 distributors
+\def\basicsswbidist[#1]{\SSWBIDIST{}{}{#100}}%
+
+% south-south-west pair of distributors
+\newcommand{\sswbidist}{\@ifnextchar[{\basicsswbidist}{\basicsswbidist[67]}}%
+
+% basic south-south-west pair of distributors with names
+\def\basicSswbidist[#1]#2#3{\SSWBIDIST{#2}{#3}{#100}}%
+
+% south-south-west pair of distributors with names
+\newcommand{\Sswbidist}{\@ifnextchar[{\basicSswbidist}{\basicSswbidist[67]}}%
+\let\sswbidisT=\Sswbidist
+
+% 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
+
+% basic south-south-west pair of adjoint distributors
+\def\basicsswadjdist[#1]{\SSWADJDIST{}{}{#100}}%
+
+% south-south-west pair of adjoint distributors
+\newcommand{\sswadjdist}{\@ifnextchar[{\basicsswadjdist}{\basicsswadjdist[67]}}%
+
+% basic south-south-west pair of adjoint distributors with names
+\def\basicSswadjdist[#1]#2#3{\SSWADJDIST{#2}{#3}{#100}}%
+
+% south-south-west pair of adjoint distributors with names
+\newcommand{\Sswadjdist}{\@ifnextchar[{\basicSswadjdist}{\basicSswadjdist[67]}}%
+\let\sswadjdisT=\Sswadjdist
+
+
+% 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){\line(-1,2){#3}}%
+\put(-\Z,#3){\nnwhead}%
+\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}}%
+
+% \NNWDIST{f}{g}{n} draws a north-north-west distributor
+% with names f, g and length n units
+\newcommand{\NNWDIST}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(\Z,-#3){\line(-1,2){#3}}%
+\put(-\Z,#3){\nnwhead}%
+\truex{400}%
+\put(0,0){\distsign}%
+\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}}%
+
+% \NNWDOTAR{f}{g}{n} draws a north-east dotted arrow
+% with names f,g and length n units
+\newcommand{\NNWDOTAR}[3]{\testdiagrammode%
+\truex{100}\truey{268}\truez{134}%
+\Z=#3%
+\divide\Z by 2%
+\NUMBEROFDOTS=#3%
+\divide\NUMBEROFDOTS by \value{z}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\multiput(\Z,-#3)(-\value{z},\value{y}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(-\Z,#3){\nnwhead}%
+\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}}%
+
+% \NNWMONO{f}{g}{n} draws a north-north-west monomorphism
+% with names f,g and length n units
+\newcommand{\NNWMONO}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\truetaiL%
+\bimolength=#3%
+\advance\bimolength by -\truemonotaiL%
+\monolength=\bimolength%
+\advance\monolength by -\Z%
+\secondmonolength=\monolength%
+\multiply\secondmonolength by 2%
+\begin{picture}(0,0)%
+\put(\monolength,-\secondmonolength){\line(-1,2){\bimolength}}%
+\put(\monolength,-\secondmonolength){\nnwhead}%
+\put(-\Z,#3){\nnwhead}%
+\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}}%
+
+% \NNWEPI{f}{g}{n} draws a north-north-west epimorphism
+% with names f, g and length n units
+\newcommand{\NNWEPI}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\trueheaD%
+\bimolength=#3%
+\advance\bimolength by -\trueepiheaD%
+\epilength=\bimolength%
+\advance\epilength by -\Z%
+\secondepilength=\epilength%
+\multiply\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(\Z,-#3){\line(-1,2){\bimolength}}%
+\put(-\epilength,\secondepilength){\nnwhead}%
+\put(-\Z,#3){\nnwhead}%
+\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}}%
+
+% \NNWBIMO{f}{g}{n} draws a north-north-west bimorphism
+% with names f,g and length n units
+\newcommand{\NNWBIMO}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\truetaiL\trueheaD%
+\bimolength=#3%
+\advance\bimolength by -\truemonotaiL%
+\monolength=\bimolength%
+\advance\monolength by -\Z%
+\advance\bimolength by -\trueepiheaD%
+\epilength=\bimolength%
+\advance\epilength by -\monolength%
+\secondmonolength=\monolength%
+\multiply\secondmonolength by 2%
+\secondepilength=\epilength%
+\multiply\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(\monolength,-\secondmonolength){\line(-1,2){\bimolength}}%
+\put(\monolength,-\secondmonolength){\nnwhead}%
+\put(-\epilength,\secondepilength){\nnwhead}%
+\put(-\Z,#3){\nnwhead}%
+\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}){\line(-1,2){#3}}%
+\put(\value{x},\value{y}){\line(-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}%
+\put(-\monolength,\secondepilength){\nnwhead}%
+\put(-\epilength,\secondmonolength){\nnwhead}%
+\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}}%
+
+% \NNWBIDIST{f}{g}{n} draws a pair of north-north-west distributors
+% with names f,g and length n units
+\newcommand{\NNWBIDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\truex{313}\truey{156}\truez{400}%
+\put(\Y,-#3){\begin{picture}(0,0)%
+\put(-\value{x},-\value{y}){\line(-1,2){#3}}%
+\put(\value{x},\value{y}){\line(-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}%
+\put(-\monolength,\secondepilength){\nnwhead}%
+\put(-\epilength,\secondmonolength){\nnwhead}%
+\end{picture}}
+\put(-\value{x},-\value{y}){\distsign}%
+\put(\value{x},\value{y}){\distsign}%
+\truex{500}\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}){\line(-1,2){#3}}%
+\put(-\epilength,\secondmonolength){\nnwhead}%
+\put(-\monolength,\secondepilength){\line(1,-2){#3}}%
+\put(\value{x},\value{y}){\ssehead}%
+\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}}%
+
+% \NNWADJDIST{f}{g}{n} draws a north-north-west pair of adjoint distributors
+% with names f,g and length n units
+\newcommand{\NNWADJDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\truex{313}\truey{156}\truez{400}%
+\put(\Y,-#3){\begin{picture}(0,0)%
+\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}){\line(-1,2){#3}}%
+\put(-\epilength,\secondmonolength){\nnwhead}%
+\put(-\monolength,\secondepilength){\line(1,-2){#3}}%
+\put(\value{x},\value{y}){\ssehead}%
+\end{picture}}
+\put(\value{x},\value{y}){\distsign}%
+\put(-\value{x},-\value{y}){\distsign}%
+\truex{500}\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-west distributor
+\def\basicnnwdist[#1]{\NNWDIST{}{}{#100}}%
+
+% north-north-west distributor
+\newcommand{\nnwdist}{\@ifnextchar[{\basicnnwdist}{\basicnnwdist[67]}}%
+
+% basic north-north-west distributor with upper name
+\def\basicNnwdist[#1]#2{\NNWDIST{#2}{}{#100}}%
+
+% north-north-west distributor with upper name
+\newcommand{\Nnwdist}{\@ifnextchar[{\basicNnwdist}{\basicNnwdist[67]}}%
+
+% basic north-north-west distributor with lower name
+\def\basicnnwdisT[#1]#2{\NNWDIST{}{#2}{#100}}%
+
+% north-north-west distributor with lower name
+\newcommand{\nnwdisT}{\@ifnextchar[{\basicnnwdisT}{\basicnnwdisT[67]}}%
+
+% basic north-north-west dotted arrow
+\def\basicnnwdotar[#1]{\NNWDOTAR{}{}{#100}}%
+
+% north-north-west dotted arrow
+\newcommand{\nnwdotar}{\@ifnextchar[{\basicnnwdotar}{\basicnnwdotar[67]}}%
+
+% basic north-north-west dotted arrow with upper name
+\def\basicNnwdotar[#1]#2{\NNWDOTAR{#2}{}{#100}}%
+
+% north-north-west dotted arrow with upper name
+\newcommand{\Nnwdotar}{\@ifnextchar[{\basicNnwdotar}{\basicNnwdotar[67]}}%
+
+% basic north-north-west dotted arrow with lower name
+\def\basicnnwdotaR[#1]#2{\NNWDOTAR{}{#2}{#100}}%
+
+% north-north-west dotted arrow with lower name
+\newcommand{\nnwdotaR}{\@ifnextchar[{\basicnnwdotaR}{\basicnnwdotaR[67]}}%
+
+% basic north-north-west monomorphism
+\def\basicnnwmono[#1]{\NNWMONO{}{}{#100}}%
+
+% north-north-west monomorphism
+\newcommand{\nnwmono}{\@ifnextchar[{\basicnnwmono}{\basicnnwmono[67]}}%
+
+% basic north-north-west monomorphism with upper name
+\def\basicNnwmono[#1]#2{\NNWMONO{#2}{}{#100}}%
+
+% north-north-west monomorphism with upper name
+\newcommand{\Nnwmono}{\@ifnextchar[{\basicNnwmono}{\basicNnwmono[67]}}%
+
+% basic north-north-west monomorphism with lower name
+\def\basicnnwmonO[#1]#2{\NNWMONO{}{#2}{#100}}%
+
+% north-north-west monomorphism with lower name
+\newcommand{\nnwmonO}{\@ifnextchar[{\basicnnwmonO}{\basicnnwmonO[67]}}%
+
+% basic north-north-west epimorphism
+\def\basicnnwepi[#1]{\NNWEPI{}{}{#100}}%
+
+% north-north-west epimorphism
+\newcommand{\nnwepi}{\@ifnextchar[{\basicnnwepi}{\basicnnwepi[67]}}%
+
+% basic north-north-west epimorphism with upper name
+\def\basicNnwepi[#1]#2{\NNWEPI{#2}{}{#100}}%
+
+% north-north-west epimorphism with upper name
+\newcommand{\Nnwepi}{\@ifnextchar[{\basicNnwepi}{\basicNnwepi[67]}}%
+
+% basic north-north-west epimorphism with lower name
+\def\basicnnwepI[#1]#2{\NNWEPI{}{#2}{#100}}%
+
+% north-north-west epimorphism with lower name
+\newcommand{\nnwepI}{\@ifnextchar[{\basicnnwepI}{\basicnnwepI[67]}}%
+
+% basic north-north-west bimorphism
+\def\basicnnwbimo[#1]{\NNWBIMO{}{}{#100}}%
+
+% north-north-west bimorphism
+\newcommand{\nnwbimo}{\@ifnextchar[{\basicnnwbimo}{\basicnnwbimo[67]}}%
+
+% basic north-north-west bimorphism with upper name
+\def\basicNnwbimo[#1]#2{\NNWBIMO{#2}{}{#100}}%
+
+% north-north-west bimorphism with upper name
+\newcommand{\Nnwbimo}{\@ifnextchar[{\basicNnwbimo}{\basicNnwbimo[67]}}%
+
+% basic north-north-west bimorphism with lower name
+\def\basicnnwbimO[#1]#2{\NNWBIMO{}{#2}{#100}}%
+
+% north-north-west bimorphism with lower name
+\newcommand{\nnwbimO}{\@ifnextchar[{\basicnnwbimO}{\basicnnwbimO[67]}}%
+
+% basic north-north-west isomorphism
+\def\basicnnwiso[#1]{\NNWAR{\isosign}{}{#100}}%
+
+% north-north-west isomorphism
+\newcommand{\nnwiso}{\@ifnextchar[{\basicnnwiso}{\basicnnwiso[67]}}%
+
+% basic north-north-west isomorphism with upper name
+\def\basicNnwiso[#1]#2{\NNWAR{#2}{\isosign}{#100}}%
+
+% north-north-west isomorphism with upper name
+\newcommand{\Nnwiso}{\@ifnextchar[{\basicNnwiso}{\basicNnwiso[67]}}%
+
+% basic north-north-west isomorphism with lower name
+\def\basicnnwisO[#1]#2{\NNWAR{\isosign}{#2}{#100}}%
+
+% north-north-west isomorphism with lower name
+\newcommand{\nnwisO}{\@ifnextchar[{\basicnnwisO}{\basicnnwisO[67]}}%
+
+% north-north-west equality
+\let\nnweql=\sseeql%
+
+% north-north-west equality with upper name
+\let\Nnweql=\Sseeql%
+
+% north-north-west equality with lower name
+\let\nnweqL=\sseeqL%
+
+% 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 distributors
+\def\basicnnwbidist[#1]{\NNWBIDIST{}{}{#100}}%
+
+% north-north-east pair of distributors
+\newcommand{\nnwbidist}{\@ifnextchar[{\basicnnwbidist}{\basicnnwbidist[67]}}%
+
+% basic north-north-east pair of distributors with names
+\def\basicNnwbidist[#1]#2#3{\NNWBIDIST{#2}{#3}{#100}}%
+
+% north-north-east pair of distributors with names
+\newcommand{\Nnwbidist}{\@ifnextchar[{\basicNnwbidist}{\basicNnwbidist[67]}}%
+\let\nnwbidisT=\Nnwbidist
+
+% 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
+
+% basic north-north-east pair of adjoint distributors
+\def\basicnnwadjdist[#1]{\NNWADJDIST{}{}{#100}}%
+
+% north-north-east pair of adjoint distributors
+\newcommand{\nnwadjdist}{\@ifnextchar[{\basicnnwadjdist}{\basicnnwadjdist[67]}}%
+
+% basic north-north-east pair of adjoint distributors with names
+\def\basicNnwadjdist[#1]#2#3{\NNWADJDIST{#2}{#3}{#100}}%
+
+% north-north-east pair of adjoint distributors with names
+\newcommand{\Nnwadjdist}{\@ifnextchar[{\basicNnwadjdist}{\basicNnwadjdist[67]}}%
+\let\nnwadjdisT=\Nnwadjdist
+
+
+% 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){\line(3,1){#3}}%
+\put(\Y,\Z){\eenehead}%
+\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){\line(3,-1){#3}}%
+\put(\Y,-\Z){\eesehead}%
+\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){\line(-3,1){#3}}%
+\put(-\Y,\Z){\wwnwhead}%
+\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){\line(-3,-1){#3}}%
+\put(-\Y,-\Z){\wwswhead}%
+\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){\line(1,3){#3}}%
+\put(\Y,\Z){\nnnehead}%
+\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){\line(-1,-3){#3}}%
+\put(-\Y,-\Z){\ssswhead}%
+\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){\line(1,-3){#3}}%
+\put(\Y,-\Z){\sssehead}%
+\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){\line(-1,3){#3}}%
+\put(-\Y,\Z){\nnnwhead}%
+\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){\line(3,2){#3}}%
+\put(\Y,\Z){\neenehead}%
+\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){\line(3,-2){#3}}%
+\put(\Y,-\Z){\seesehead}%
+\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){\line(-3,2){#3}}%
+\put(-\Y,\Z){\nwwnwhead}%
+\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){\line(-3,-2){#3}}%
+\put(-\Y,-\Z){\swwswhead}%
+\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){\line(2,3){#3}}%
+\put(\Y,\Z){\nennehead}%
+\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){\line(-2,-3){#3}}%
+\put(-\Y,-\Z){\swsswhead}%
+\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){\line(2,-3){#3}}%
+\put(\Y,-\Z){\sessehead}%
+\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){\line(-2,3){#3}}%
+\put(-\Y,\Z){\nwnnwhead}%
+\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
diff --git a/Master/texmf-dist/tex/generic/borceux/MicroDiagram b/Master/texmf-dist/tex/generic/borceux/MicroDiagram
new file mode 100644
index 00000000000..3ab5c4bd852
--- /dev/null
+++ b/Master/texmf-dist/tex/generic/borceux/MicroDiagram
@@ -0,0 +1,1917 @@
+% DIAGRAM MACROS (version 3.1)
+% MICRO-DIAGRAM FILE
+% JUST 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%
+
+\newcounter{x}%
+
+\newcounter{y}%
+
+\newcounter{z}%
+
+\newcounter{horizontal}%
+
+\newcounter{vertical}%
+
+\newskip\itemlength%
+
+\newskip\firstitem%
+
+\newskip\seconditem%
+
+\newcommand{\printarrow}{}%
+
+\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}}%
+
+% 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}}%
+
+% 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}}%
+
+% 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}%
+
+% 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}}%
+
+% 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}%
+
+
+% 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}}}}%
+
+% 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}}%
+
+% 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]}}%
+
+% 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}}%
+
+% 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]}}%
+
+% 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$}}}}%
+
+% 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}}%
+
+% 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]}}%
+
+% 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}}%
+
+% 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]}}%
+
+% 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}}%
+
+% 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}}%
+
+% 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]}}%
+
+% 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}}%
+
+% 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]}}%
+
+% 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}}%
+
+% 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}}%
+
+% 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]}}%
+
+% 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}}%
+
+% 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]}}%
+
+% 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}}%
+
+% 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\basicWnear[#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]}}%
+
+
+% 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}}%
+
+% 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]}}%
+
+% 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}}%
+
+% 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]}}%
+
+% 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}}%
+
+% 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]}}%
+
+% 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}}%
+
+% 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]}}%
+
+
+% 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}}%
+
+% 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]}}%
+
+% 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}}%
+
+% 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]}}%
+
+% 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}}%
+
+% 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]}}%
+
+% 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
diff --git a/Master/texmf-dist/tex/generic/borceux/MiniDiagram b/Master/texmf-dist/tex/generic/borceux/MiniDiagram
new file mode 100644
index 00000000000..39c08f673b5
--- /dev/null
+++ b/Master/texmf-dist/tex/generic/borceux/MiniDiagram
@@ -0,0 +1,3164 @@
+% 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
diff --git a/Master/texmf-dist/tex/generic/borceux/MultipleArrows b/Master/texmf-dist/tex/generic/borceux/MultipleArrows
new file mode 100644
index 00000000000..9ac6aa2f85c
--- /dev/null
+++ b/Master/texmf-dist/tex/generic/borceux/MultipleArrows
@@ -0,0 +1,1313 @@
+%%% MACRO FILE FOR TRIPLE, QUADRUPLE AND QUINTUPLE ARROWS
+
+\catcode`\@=11
+
+% SPECIAL SYMBOLS
+
+% adjoint symbol
+\newcommand{\adj}{\begin{picture}(9,6)%
+\put(1,3){\line(1,0){6}}\put(7,0){\line(0,1){6}}%
+\end{picture}}%
+
+% commutative diagram symbol
+\newcommand{\com}{\begin{picture}(12,8)%
+\put(6,4){\oval(8,8)[b]}\put(6,4){\oval(8,8)[r]}%
+\put(6,8){\line(-1,0){2}}\end{picture}}%
+
+% natural transformation with names [1],[2],[3]
+\newcommand{\Nat}[3]{\raisebox{-2pt}%
+{\begin{picture}(34,15)%
+\put(2,10){\line(1,0){30}}%
+\put(32,10){\ehead}%
+\put(2,0){\line(1,0){30}}%
+\put(32,0){\ehead}%
+\put(13,2){$\Downarrow$}%
+\put(20,3){$\scriptstyle{#2}$}%
+\put(4,11){$\scriptstyle{#1}$}%
+\put(4,1){$\scriptstyle{#3}$}%
+\end{picture}}}%
+
+% natural transformation
+\newcommand{\nat}{\raisebox{-2pt}%
+{\begin{picture}(34,10)%
+\put(2,10){\line(1,0){30}}%
+\put(32,10){\ehead}%
+\put(2,0){\line(1,0){30}}%
+\put(32,0){\ehead}%
+\put(13,2){$\Downarrow$}%
+\end{picture}}}%
+
+% pair of natural transformations with names [1],[2],[3],[4],[5]
+\newcommand{\Binat}[5]{\raisebox{-7.5pt}%
+{\begin{picture}(34,25)%
+\put(2,20){\line(1,0){30}}%
+\put(32,20){\ehead}%
+\put(2,10){\line(1,0){30}}%
+\put(32,10){\ehead}%
+\put(2,0){\line(1,0){30}}%
+\put(32,0){\ehead}%
+\put(13,12){$\Downarrow$}%
+\put(13,2){$\Downarrow$}%
+\put(20,13){$\scriptstyle{#2}$}%
+\put(20,3){$\scriptstyle{#4}$}%
+\put(4,21){$\scriptstyle{#1}$}%
+\put(4,11){$\scriptstyle{#3}$}%
+\put(4,1){$\scriptstyle{#5}$}%
+\end{picture}}}%
+
+% pair of natural transformations
+\newcommand{\binat}{\raisebox{-7.5pt}%
+{\begin{picture}(34,20)%
+\put(2,20){\line(1,0){30}}%
+\put(32,20){\ehead}%
+\put(2,10){\line(1,0){30}}%
+\put(32,10){\ehead}%
+\put(2,0){\line(1,0){30}}%
+\put(32,0){\ehead}%
+\put(13,12){$\Downarrow$}%
+\put(13,2){$\Downarrow$}%
+\end{picture}}}%
+
+% display natural transformation with names [1],[2],[3]
+\newcommand{\Dnat}[3]{\raisebox{-2pt}%
+{\begin{picture}(54,15)%
+\put(2,10){\line(1,0){50}}%
+\put(52,10){\ehead}%
+\put(2,0){\line(1,0){50}}%
+\put(52,0){\ehead}%
+\put(23,2){$\Downarrow$}%
+\put(30,1){$\textstyle{#2}$}%
+\put(4,11){$\textstyle{#1}$}%
+\put(4,1){$\textstyle{#3}$}%
+\end{picture}}}%
+
+% display natural transformation
+\newcommand{\dnat}{\raisebox{-2pt}%
+{\begin{picture}(54,10)%
+\put(2,10){\line(1,0){50}}%
+\put(52,10){\ehead}%
+\put(2,0){\line(1,0){50}}%
+\put(52,0){\ehead}%
+\put(23,2){$\Downarrow$}%
+\end{picture}}}%
+
+% display pair of natural transformations with names [1],[2],[3],[4],[5]
+\newcommand{\Dbinat}[5]{\raisebox{-7.5pt}%
+{\begin{picture}(54,25)%
+\put(2,20){\line(1,0){50}}%
+\put(52,20){\ehead}%
+\put(2,10){\line(1,0){50}}%
+\put(52,10){\ehead}%
+\put(2,0){\line(1,0){50}}%
+\put(52,0){\ehead}%
+\put(23,12){$\Downarrow$}%
+\put(23,2){$\Downarrow$}%
+\put(30,11){$\textstyle{#2}$}%
+\put(30,1){$\textstyle{#4}$}%
+\put(4,21){$\textstyle{#1}$}%
+\put(4,11){$\textstyle{#3}$}%
+\put(4,1){$\textstyle{#5}$}%
+\end{picture}}}%
+
+% display pair of natural transformations
+\newcommand{\dbinat}{\raisebox{-7.5pt}%
+{\begin{picture}(54,20)%
+\put(2,20){\line(1,0){50}}%
+\put(52,20){\ehead}%
+\put(2,10){\line(1,0){50}}%
+\put(52,10){\ehead}%
+\put(2,0){\line(1,0){50}}%
+\put(52,0){\ehead}%
+\put(23,12){$\Downarrow$}%
+\put(23,2){$\Downarrow$}%
+\end{picture}}}%
+
+
+% MACROS FOR TEXT ARROWS
+
+% \ttricase{P} draws the tri-picture P
+% with length \textarrowlength pt.
+\newcommand{\ttricase}[1]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\computetextparameters%
+\makebox[\actualtextarrowspace pt]%
+{\raisebox{4pt}{#1{\actualtextarrowlength}%
+{\rule{0pt}{6pt}}{\rule{0pt}{6pt}}{\rule{0pt}{6pt}}}}%
+\setlength{\unitlength}{1pt}}%
+
+% \Ttricase{P}{f}{g}{h} draws the tri-picture P with names f, g, h
+% and length \textarrowlength pt.
+\newcommand{\Ttricase}[4]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\computetextparameters%
+\makebox[\actualtextarrowspace pt]%
+{\raisebox{4pt}%
+{#1{\actualtextarrowlength}{\rule{0pt}{6pt}\scriptstyle #2}%
+{\rule{0pt}{6pt}\scriptstyle #3}{\rule{0pt}{6pt}\scriptstyle #4}}}%
+\setlength{\unitlength}{1pt}}%
+
+% \tmulticase{P} draws the multi-picture P
+% with length \textarrowlength pt.
+\newcommand{\tmulticase}[1]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\computetextparameters%
+\makebox[\actualtextarrowspace pt]%
+{\raisebox{1pt}{#1{\actualtextarrowlength}}}%
+\setlength{\unitlength}{1pt}}%
+
+% MACROS FOR DISPLAYED ARROWS
+
+% \dtricase{P} draws the tri-picture P
+% with length \displayarrowlength pt.
+\newcommand{\dtricase}[1]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\computedisplayparameters%
+\makebox[\actualdisplayarrowspace pt]%
+{\raisebox{4pt}{#1{\actualdisplayarrowlength}%
+{\rule{0pt}{6pt}}{\rule{0pt}{6pt}}{\rule{0pt}{6pt}}}}%
+\setlength{\unitlength}{1pt}}%
+
+% \Dtricase{P}{f}{g}{h} draws the tri-picture P with names f, g, h
+% and length \displayarrowlength pt.
+\newcommand{\Dtricase}[4]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\computedisplayparameters%
+\makebox[\actualdisplayarrowspace pt]%
+{\raisebox{4pt}%
+{#1{\actualdisplayarrowlength}{\rule{0pt}{6pt}\textstyle #2}%
+{\rule{0pt}{6pt}\textstyle #3}{\rule{0pt}{6pt}\textstyle #4}}}%
+\setlength{\unitlength}{1pt}}%
+
+% \dmulticase{P} draws the multi-picture P
+% with length \displayarrowlength pt.
+\newcommand{\dmulticase}[1]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\computedisplayparameters%
+\makebox[\actualdisplayarrowspace pt]%
+{\raisebox{1pt}{#1{\actualdisplayarrowlength}}}%
+\setlength{\unitlength}{1pt}}%
+
+% TEXT ARROWS
+
+% \TRIAR{n}{f}{g}{h} draws a triple of arrows of length n units
+% and names f, g, h
+\newcommand{\TRIAR}[4]%
+{\renewcommand{\arraystretch}{0.2}%
+\begin{tabular}{c}%
+\mbox{$#2$}\\ \AR{#1}\\%
+\mbox{$#3$}\\ \AR{#1}\\%
+\mbox{$#4$}\\ \AR{#1}%
+\end{tabular}%
+\renewcommand{\arraystretch}{1}}%
+
+% \TRIADJAR{n} draws a triple of adjoint arrows of length n units
+% and names f, g, h
+\newcommand{\TRIADJAR}[4]%
+{\renewcommand{\arraystretch}{0.2}%
+\begin{tabular}{c}%
+\mbox{$#2$}\\ \BKAR{#1}\\%
+\mbox{$#3$}\\ \AR{#1}\\%
+\mbox{$#4$}\\ \BKAR{#1}%
+\end{tabular}%
+\renewcommand{\arraystretch}{1}}%
+
+% \QUADRIAR{n} draws a quadruple of arrows of length n units
+\newcommand{\QUADRIAR}[1]%
+{\renewcommand{\arraystretch}{0.2}%
+\begin{tabular}{c}%
+\AR{#1}\\%
+\rule{0pt}{3pt}\\ \AR{#1}\\%
+\rule{0pt}{3pt}\\ \AR{#1}\\%
+\rule{0pt}{3pt}\\ \AR{#1}%
+\end{tabular}%
+\renewcommand{\arraystretch}{1}}%
+
+% \QUADRIADJAR{n} draws a quadruple of adjoint arrows
+% of length n units
+\newcommand{\QUADRIADJAR}[1]%
+{\renewcommand{\arraystretch}{0.2}%
+\begin{tabular}{c}%
+\BKAR{#1}\\%
+\rule{0pt}{3pt}\\ \AR{#1}\\%
+\rule{0pt}{3pt}\\ \BKAR{#1}\\%
+\rule{0pt}{3pt}\\ \AR{#1}%
+\end{tabular}%
+\renewcommand{\arraystretch}{1}}%
+
+% \QUINTIAR{n} draws a quintuple of arrows of length n units
+\newcommand{\QUINTIAR}[1]%
+{\renewcommand{\arraystretch}{0.2}%
+\begin{tabular}{c}%
+\AR{#1}\\%
+\rule{0pt}{2pt}\\ \AR{#1}\\%
+\rule{0pt}{2pt}\\ \AR{#1}\\%
+\rule{0pt}{2pt}\\ \AR{#1}\\%
+\rule{0pt}{2pt}\\ \AR{#1}%
+\end{tabular}%
+\renewcommand{\arraystretch}{1}}%
+
+% \QUINTIADJAR{n} draws a quintuple of adjoint arrows
+% of length n units
+\newcommand{\QUINTIADJAR}[1]%
+{\renewcommand{\arraystretch}{0.2}%
+\begin{tabular}{c}%
+\AR{#1}\\%
+\rule{0pt}{2pt}\\ \BKAR{#1}\\%
+\rule{0pt}{2pt}\\ \AR{#1}\\%
+\rule{0pt}{2pt}\\ \BKAR{#1}\\%
+\rule{0pt}{2pt}\\ \AR{#1}%
+\end{tabular}%
+\renewcommand{\arraystretch}{1}}%
+
+% USER'S COMMANDS FOR TEXT ARROWS
+
+% triple of arrows
+\newcommand{\triar}{\ifinner\ttricase{\TRIAR}\else\dtricase{\TRIAR}\fi}%
+
+% triple of arrows with names [1],[2],[3]
+\newcommand{\Triar}[3]{\ifinner\Ttricase{\TRIAR}{#1}{#2}{#3}%
+\else\Dtricase{\TRIAR}{#1}{#2}{#3}\fi}%
+
+% triple of adjoint arrows
+\newcommand{\triadjar}{\ifinner\ttricase{\TRIADJAR}%
+\else\dtricase{\TRIADJAR}\fi}%
+
+% triple of adjoint arrows with names [1],[2],[3]
+\newcommand{\Triadjar}[3]{\ifinner\Ttricase{\TRIADJAR}{#1}{#2}{#3}%
+\else\Dtricase{\TRIADJAR}{#1}{#2}{#3}\fi}%
+
+% quadruple of arrows
+\newcommand{\quadriar}{\ifinner\tquadricase{\QUADRIAR}%
+\else\dmulticase{\QUADRIAR}\fi}%
+
+% quadruple of adjoint arrows
+\newcommand{\quadriadjar}{\ifinner\tmulticase{\QUADRIADJAR}%
+\else\dmulticase{\QUADRIADJAR}\fi}%
+
+% quintuple of arrows
+\newcommand{\quintiar}{\ifinner\tmulticase{\QUINTIAR}%
+\else\dmulticase{\QUINTIAR}\fi}%
+
+% quintuple of adjoint arrows
+\newcommand{\quintiadjar}{\ifinner\tmulticase{\QUINTIADJAR}%
+\else\dmulticase{\QUINTIADJAR}\fi}%
+
+
+% BACKWARD TEXT ARROWS
+
+% \BKTRIAR{n}{f}{g}{h} draws a triple of back arrows of length n units
+% and names f, g, h
+\newcommand{\BKTRIAR}[4]%
+{\renewcommand{\arraystretch}{0.2}%
+\begin{tabular}{c}%
+\mbox{$#2$}\\ \BKAR{#1}\\%
+\mbox{$#3$}\\ \BKAR{#1}\\%
+\mbox{$#4$}\\ \BKAR{#1}%
+\end{tabular}%
+\renewcommand{\arraystretch}{1}}%
+
+% \BKTRIADJAR{n} draws a back triple of adjoint arrows of length n units
+% and names f, g, h
+\newcommand{\BKTRIADJAR}[4]%
+{\renewcommand{\arraystretch}{0.2}%
+\begin{tabular}{c}%
+\mbox{$#2$}\\ \AR{#1}\\%
+\mbox{$#3$}\\ \BKAR{#1}\\%
+\mbox{$#4$}\\ \AR{#1}%
+\end{tabular}%
+\renewcommand{\arraystretch}{1}}%
+
+% \BKQUADRIAR{n} draws a quadruple of back arrows of length n units
+\newcommand{\BKQUADRIAR}[1]%
+{\renewcommand{\arraystretch}{0.2}%
+\begin{tabular}{c}%
+\BKAR{#1}\\%
+\rule{0pt}{3pt}\\ \BKAR{#1}\\%
+\rule{0pt}{3pt}\\ \BKAR{#1}\\%
+\rule{0pt}{3pt}\\ \BKAR{#1}%
+\end{tabular}%
+\renewcommand{\arraystretch}{1}}%
+
+% \BKQUADRIADJAR{n} draws a back quadruple of adjoint arrows
+% of length n units
+\newcommand{\BKQUADRIADJAR}[1]%
+{\renewcommand{\arraystretch}{0.2}%
+\begin{tabular}{c}%
+\AR{#1}\\%
+\rule{0pt}{3pt}\\ \BKAR{#1}\\%
+\rule{0pt}{3pt}\\ \AR{#1}\\%
+\rule{0pt}{3pt}\\ \BKAR{#1}%
+\end{tabular}%
+\renewcommand{\arraystretch}{1}}%
+
+% \BKQUINTIAR{n} draws a quintuple of back arrows of length n units
+\newcommand{\BKQUINTIAR}[1]%
+{\renewcommand{\arraystretch}{0.2}%
+\begin{tabular}{c}%
+\BKAR{#1}\\%
+\rule{0pt}{2pt}\\ \BKAR{#1}\\%
+\rule{0pt}{2pt}\\ \BKAR{#1}\\%
+\rule{0pt}{2pt}\\ \BKAR{#1}\\%
+\rule{0pt}{2pt}\\ \BKAR{#1}%
+\end{tabular}%
+\renewcommand{\arraystretch}{1}}%
+
+% \BKQUINTIADJAR{n} draws a back quintuple of adjoint arrows
+% of length n units
+\newcommand{\BKQUINTIADJAR}[1]%
+{\renewcommand{\arraystretch}{0.2}%
+\begin{tabular}{c}%
+\BKAR{#1}\\%
+\rule{0pt}{2pt}\\ \AR{#1}\\%
+\rule{0pt}{2pt}\\ \BKAR{#1}\\%
+\rule{0pt}{2pt}\\ \AR{#1}\\%
+\rule{0pt}{2pt}\\ \BKAR{#1}%
+\end{tabular}%
+\renewcommand{\arraystretch}{1}}%
+
+% USER'S COMMANDS FOR BACKWARD TEXT ARROWS
+
+% triple of back arrows
+\newcommand{\bktriar}{\ifinner\ttricase{\BKTRIAR}\else\dtricase{\BKTRIAR}\fi}%
+
+% triple of back arrows with names [1],[2],[3]
+\newcommand{\Bktriar}[3]{\ifinner\Ttricase{\BKTRIAR}{#1}{#2}{#3}%
+\else\Dtricase{\BKTRIAR}{#1}{#2}{#3}\fi}%
+
+% back triple of adjoint arrows
+\newcommand{\bktriadjar}{\ifinner\ttricase{\BKTRIADJAR}%
+\else\dtricase{\BKTRIADJAR}\fi}%
+
+% back triple of adjoint arrows with names [1],[2],[3]
+\newcommand{\Bktriadjar}[3]{\ifinner\Ttricase{\BKTRIADJAR}{#1}{#2}{#3}%
+\else\Dtricase{\BKTRIADJAR}{#1}{#2}{#3}\fi}%
+
+% back quadruple of arrows
+\newcommand{\bkquadriar}{\ifinner\tquadricase{\BKQUADRIAR}%
+\else\dmulticase{\BKQUADRIAR}\fi}%
+
+% back quadruple of adjoint arrows
+\newcommand{\bkquadriadjar}{\ifinner\tmulticase{\BKQUADRIADJAR}%
+\else\dmulticase{\BKQUADRIADJAR}\fi}%
+
+% back quintuple of arrows
+\newcommand{\bkquintiar}{\ifinner\tmulticase{\BKQUINTIAR}%
+\else\dmulticase{\BKQUINTIAR}\fi}%
+
+% back quintuple of adjoint arrows
+\newcommand{\bkquintiadjar}{\ifinner\tmulticase{\BKQUINTIADJAR}%
+\else\dmulticase{\BKQUINTIADJAR}\fi}%
+
+% MACROS FOR HORIZONTAL DIAGRAM ARROWS
+
+% \htricase{P}{n} draws the tri-picture P with length n units.
+\newcommand{\htricase}[2]%
+{\testdiagrammode\makebox[0pt]%
+{\raisebox{-12pt}[0pt][0pt]{#1{#2}{}{}{}{}}}}%
+
+% \Htricase{P}{f}{g}{h}{i}{n} draws the tri-picture P
+% with names f, g, h, i and length n units.
+\newcommand{\Htricase}[6]%
+{\testdiagrammode\makebox[0pt]%
+{\raisebox{-12pt}[0pt][0pt]{#1{#6}{#2}{#3}{#4}{#5}}}}%
+
+% \hmulticase{P}{n} draws the multi-picture P with length n units.
+\newcommand{\hmulticase}[2]%
+{\testdiagrammode\makebox[0pt]{\raisebox{-12pt}[0pt][0pt]{#1{#2}}}}%
+
+% EAST ARROWS
+
+% \ETRIAR{n}{f}{g}{h}{i} draws an east triple of arrows
+% of length n units with names f, g, h, i
+\newcommand{\ETRIAR}[5]%
+{\truex{1200}%
+\X=\value{x}%
+\multiply\X by 2%
+\begin{picture}(#1,\X)%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(0,\value{x}){\line(1,0){#1}}%
+\put(#1,\value{x}){\ehead}%
+\put(0,\X){\line(1,0){#1}}%
+\put(#1,\X){\ehead}%
+\X=#1%
+\divide\X by 2%
+\truex{-600}%
+\put(\X,\value{x}){\makebox(0,0){$#5$}}%
+\truex{600}%
+\put(\X,\value{x}){\makebox(0,0){$#4$}}%
+\truex{1800}%
+\put(\X,\value{x}){\makebox(0,0){$#3$}}%
+\truex{3000}%
+\put(\X,\value{x}){\makebox(0,0){$#2$}}%
+\end{picture}}%
+
+% \ETRIADJAR{n}{f}{g}{h}{i} draws an east triple of adjoint arrows
+% of length n units and names f, g, h, i
+\newcommand{\ETRIADJAR}[5]%
+{\truex{1200}%
+\X=\value{x}%
+\multiply\X by 2%
+\begin{picture}(#1,\X)%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\put(0,\value{x}){\line(1,0){#1}}%
+\put(#1,\value{x}){\ehead}%
+\put(#1,\X){\line(-1,0){#1}}%
+\put(0,\X){\whead}%
+\X=#1%
+\divide\X by 2%
+\truex{-600}%
+\put(\X,\value{x}){\makebox(0,0){$#5$}}%
+\truex{600}%
+\put(\X,\value{x}){\makebox(0,0){$#4$}}%
+\truex{1800}%
+\put(\X,\value{x}){\makebox(0,0){$#3$}}%
+\truex{3000}%
+\put(\X,\value{x}){\makebox(0,0){$#2$}}%
+\end{picture}}%
+
+% \EQUADRIAR{n} draws an east quadruple of arrows
+% of length n units
+\newcommand{\EQUADRIAR}[1]%
+{\truex{800}%
+\truey{1600}%
+\X=\value{x}%
+\multiply\X by 3%
+\begin{picture}(#1,\X)%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(0,\value{x}){\line(1,0){#1}}%
+\put(#1,\value{x}){\ehead}%
+\put(0,\value{y}){\line(1,0){#1}}%
+\put(#1,\value{y}){\ehead}%
+\put(0,\X){\line(1,0){#1}}%
+\put(#1,\X){\ehead}%
+\end{picture}}%
+
+% \EQUADRIADJAR{n} draws an east quadruple of adjoint arrows
+% of length n units
+\newcommand{\EQUADRIADJAR}[1]%
+{\truex{800}%
+\truey{1600}%
+\X=\value{x}%
+\multiply\X by 3%
+\begin{picture}(#1,\X)%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(#1,\value{x}){\line(-1,0){#1}}%
+\put(0,\value{x}){\whead}%
+\put(0,\value{y}){\line(1,0){#1}}%
+\put(#1,\value{y}){\ehead}%
+\put(#1,\X){\line(-1,0){#1}}%
+\put(0,\X){\whead}%
+\end{picture}}%
+
+% \EQUINTIAR{n} draws an east quintuple of arrows
+% of length n units
+\newcommand{\EQUINTIAR}[1]%
+{\truex{600}%
+\truey{1200}%
+\truez{1800}%
+\X=\value{x}%
+\multiply\X by 4%
+\begin{picture}(#1,\X)%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(0,\value{x}){\line(1,0){#1}}%
+\put(#1,\value{x}){\ehead}%
+\put(0,\value{y}){\line(1,0){#1}}%
+\put(#1,\value{y}){\ehead}%
+\put(0,\value{z}){\line(1,0){#1}}%
+\put(#1,\value{z}){\ehead}%
+\put(0,\X){\line(1,0){#1}}%
+\put(#1,\X){\ehead}%
+\end{picture}}%
+
+% \EQUINTIADJAR{n} draws an east quintuple of adjoint arrows
+% of length n units
+\newcommand{\EQUINTIADJAR}[1]%
+{\truex{600}%
+\truey{1200}%
+\truez{1800}%
+\X=\value{x}%
+\multiply\X by 4%
+\begin{picture}(#1,\X)%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(#1,\value{x}){\line(-1,0){#1}}%
+\put(0,\value{x}){\whead}%
+\put(0,\value{y}){\line(1,0){#1}}%
+\put(#1,\value{y}){\ehead}%
+\put(#1,\value{z}){\line(-1,0){#1}}%
+\put(0,\value{z}){\whead}%
+\put(0,\X){\line(1,0){#1}}%
+\put(#1,\X){\ehead}%
+\end{picture}}%
+
+% USER'S COMMANDS FOR EAST ARROWS
+
+% basic east triple of arrows
+\def\basicetriar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\htricase{\ETRIAR}{\Z}}%
+
+% east triple of arrows
+\newcommand{\etriar}{\@ifnextchar[{\basicetriar}%
+{\hspace{\SOURCE\unitlength}\basicetriar[\ARROWLENGTH]}}%
+
+% basic east triple of arrows with upper names
+\def\basicEtriar[#1]#2#3#4{%
+\Z=#1%
+\multiply \Z by 100%
+\Htricase{\ETRIAR}{#2}{#3}{#4}{}{\Z}}%
+
+% east triple of arrows with upper names
+\newcommand{\Etriar}{\@ifnextchar[{\basicEtriar}%
+{\hspace{\SOURCE\unitlength}\basicEtriar[\ARROWLENGTH]}}%
+
+% basic east triple of arrows with lower names
+\def\basicetriaR[#1]#2#3#4{%
+\Z=#1%
+\multiply \Z by 100%
+\Htricase{\ETRIAR}{}{#2}{#3}{#4}{\Z}}%
+
+% east triple of arrows with lower name
+\newcommand{\etriaR}{\@ifnextchar[{\basicetriaR}%
+{\hspace{\SOURCE\unitlength}\basicetriaR[\ARROWLENGTH]}}%
+
+% basic east triple of adjoint arrows
+\def\basicetriadjar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\htricase{\ETRIADJAR}{\Z}}%
+
+% east triple of adjoint arrows
+\newcommand{\etriadjar}{\@ifnextchar[{\basicetriadjar}%
+{\hspace{\SOURCE\unitlength}\basicetriadjar[\ARROWLENGTH]}}%
+
+% basic east triple of adjoint arrows with upper names
+\def\basicEtriadjar[#1]#2#3#4{%
+\Z=#1%
+\multiply \Z by 100%
+\Htricase{\ETRIADJAR}{#2}{#3}{#4}{}{\Z}}%
+
+% east triple of adjoint arrows with upper names
+\newcommand{\Etriadjar}{\@ifnextchar[{\basicEtriadjar}%
+{\hspace{\SOURCE\unitlength}\basicEtriadjar[\ARROWLENGTH]}}%
+
+% basic east triple of adjoint arrows with lower names
+\def\basicetriadjaR[#1]#2#3#4{%
+\Z=#1%
+\multiply \Z by 100%
+\Htricase{\ETRIADJAR}{}{#2}{#3}{#4}{\Z}}%
+
+% east triple of adjoint arrows with lower name
+\newcommand{\etriadjaR}{\@ifnextchar[{\basicetriadjaR}%
+{\hspace{\SOURCE\unitlength}\basicetriadjaR[\ARROWLENGTH]}}%
+
+% basic east quadruple of arrows
+\def\basicequadriar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hmulticase{\EQUADRIAR}{\Z}}%
+
+% east quadruple of arrows
+\newcommand{\equadriar}{\@ifnextchar[{\basicequadriar}%
+{\hspace{\SOURCE\unitlength}\basicequadriar[\ARROWLENGTH]}}%
+
+% basic east quadruple of adjoint arrows
+\def\basicequadriadjar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hmulticase{\EQUADRIADJAR}{\Z}}%
+
+% east quadruple of adjoint arrows
+\newcommand{\equadriadjar}{\@ifnextchar[{\basicequadriadjar}%
+{\hspace{\SOURCE\unitlength}\basicequadriadjar[\ARROWLENGTH]}}%
+
+% basic east quintuple of arrows
+\def\basicequintiar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hmulticase{\EQUINTIAR}{\Z}}%
+
+% east quintuple of arrows
+\newcommand{\equintiar}{\@ifnextchar[{\basicequintiar}%
+{\hspace{\SOURCE\unitlength}\basicequintiar[\ARROWLENGTH]}}%
+
+% basic east quintuple of adjoint arrows
+\def\basicequintiadjar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hmulticase{\EQUINTIADJAR}{\Z}}%
+
+% east quintuple of adjoint arrows
+\newcommand{\equintiadjar}{\@ifnextchar[{\basicequintiadjar}%
+{\hspace{\SOURCE\unitlength}\basicequintiadjar[\ARROWLENGTH]}}%
+
+
+% WEST ARROWS
+
+% \WTRIAR{n}{f}{g}{h}{i} draws a west triple of arrows
+% of length n units and names f, g, h, i
+\newcommand{\WTRIAR}[5]%
+{\truex{1200}%
+\X=\value{x}%
+\multiply\X by 2%
+\begin{picture}(#1,\X)%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\put(#1,\value{x}){\line(-1,0){#1}}%
+\put(0,\value{x}){\whead}%
+\put(#1,\X){\line(-1,0){#1}}%
+\put(0,\X){\whead}%
+\X=#1%
+\divide\X by 2%
+\truex{-600}%
+\put(\X,\value{x}){\makebox(0,0){$#5$}}%
+\truex{600}%
+\put(\X,\value{x}){\makebox(0,0){$#4$}}%
+\truex{1800}%
+\put(\X,\value{x}){\makebox(0,0){$#3$}}%
+\truex{3000}%
+\put(\X,\value{x}){\makebox(0,0){$#2$}}%
+\end{picture}}%
+
+% \WTRIADJAR{n}{f}{g}{h}{i} draws a west triple of adjoint arrows
+% of length n units and names f, g, h, i
+\newcommand{\WTRIADJAR}[5]%
+{\truex{1200}%
+\X=\value{x}%
+\multiply\X by 2%
+\begin{picture}(#1,\X)%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(#1,\value{x}){\line(-1,0){#1}}%
+\put(0,\value{x}){\whead}%
+\put(0,\X){\line(1,0){#1}}%
+\put(#1,\X){\ehead}%
+\X=#1%
+\divide\X by 2%
+\truex{-600}%
+\put(\X,\value{x}){\makebox(0,0){$#5$}}%
+\truex{600}%
+\put(\X,\value{x}){\makebox(0,0){$#4$}}%
+\truex{1800}%
+\put(\X,\value{x}){\makebox(0,0){$#3$}}%
+\truex{3000}%
+\put(\X,\value{x}){\makebox(0,0){$#2$}}%
+\end{picture}}%
+
+% \WQUADRIAR{n} draws a west quadruple of arrows
+% of length n units
+\newcommand{\WQUADRIAR}[1]%
+{\truex{800}%
+\truey{1600}%
+\X=\value{x}%
+\multiply\X by 3%
+\begin{picture}(#1,\X)%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\put(#1,\value{x}){\line(-1,0){#1}}%
+\put(0,\value{x}){\whead}%
+\put(#1,\value{y}){\line(-1,0){#1}}%
+\put(0,\value{y}){\whead}%
+\put(#1,\X){\line(-1,0){#1}}%
+\put(0,\X){\whead}%
+\end{picture}}%
+
+% \WQUADRIADJAR{n} draws a west quadruple of adjoint arrows
+% of length n units
+\newcommand{\WQUADRIADJAR}[1]%
+{\truex{800}%
+\truey{1600}%
+\X=\value{x}%
+\multiply\X by 3%
+\begin{picture}(#1,\X)%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\put(0,\value{x}){\line(1,0){#1}}%
+\put(#1,\value{x}){\ehead}%
+\put(#1,\value{y}){\line(-1,0){#1}}%
+\put(0,\value{y}){\whead}%
+\put(0,\X){\line(1,0){#1}}%
+\put(#1,\X){\ehead}%
+\end{picture}}%
+
+% \WQUINTIAR{n} draws a west quintuple of arrows
+% of length n units
+\newcommand{\WQUINTIAR}[1]%
+{\truex{600}%
+\truey{1200}%
+\truez{1800}%
+\X=\value{x}%
+\multiply\X by 4%
+\begin{picture}(#1,\X)%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\put(#1,\value{x}){\line(-1,0){#1}}%
+\put(0,\value{x}){\whead}%
+\put(#1,\value{y}){\line(-1,0){#1}}%
+\put(0,\value{y}){\whead}%
+\put(#1,\value{z}){\line(-1,0){#1}}%
+\put(0,\value{z}){\whead}%
+\put(#1,\X){\line(-1,0){#1}}%
+\put(0,\X){\whead}%
+\end{picture}}%
+
+% \WQUINTIADJAR{n} draws a west quintuple of adjoint arrows
+% of length n units
+\newcommand{\WQUINTIADJAR}[1]%
+{\truex{600}%
+\truey{1200}%
+\truez{1800}%
+\X=\value{x}%
+\multiply\X by 4%
+\begin{picture}(#1,\X)%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\put(0,\value{x}){\line(1,0){#1}}%
+\put(#1,\value{x}){\ehead}%
+\put(#1,\value{y}){\line(-1,0){#1}}%
+\put(0,\value{y}){\whead}%
+\put(0,\value{z}){\line(1,0){#1}}%
+\put(#1,\value{z}){\ehead}%
+\put(#1,\X){\line(-1,0){#1}}%
+\put(0,\X){\whead}%
+\end{picture}}%
+
+% USER'S COMMANDS FOR WEST ARROWS
+
+% basic west triple of arrows
+\def\basicwtriar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\htricase{\WTRIAR}{\Z}}%
+
+% west triple of arrows
+\newcommand{\wtriar}{\@ifnextchar[{\basicwtriar}%
+{\hspace{\SOURCE\unitlength}\basicwtriar[\ARROWLENGTH]}}%
+
+% basic west triple of arrows with upper names
+\def\basicWtriar[#1]#2#3#4{%
+\Z=#1%
+\multiply \Z by 100%
+\Htricase{\WTRIAR}{#2}{#3}{#4}{}{\Z}}%
+
+% west triple of arrows with upper names
+\newcommand{\Wtriar}{\@ifnextchar[{\basicWtriar}%
+{\hspace{\SOURCE\unitlength}\basicWtriar[\ARROWLENGTH]}}%
+
+% basic west triple of arrows with lower names
+\def\basicwtriaR[#1]#2#3#4{%
+\Z=#1%
+\multiply \Z by 100%
+\Htricase{\WTRIAR}{}{#2}{#3}{#4}{\Z}}%
+
+% west triple of arrows with lower name
+\newcommand{\wtriaR}{\@ifnextchar[{\basicwtriaR}%
+{\hspace{\SOURCE\unitlength}\basicwtriaR[\ARROWLENGTH]}}%
+
+% basic west triple of adjoint arrows
+\def\basicwtriadjar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\htricase{\WTRIADJAR}{\Z}}%
+
+% west triple of adjoint arrows
+\newcommand{\wtriadjar}{\@ifnextchar[{\basicwtriadjar}%
+{\hspace{\SOURCE\unitlength}\basicwtriadjar[\ARROWLENGTH]}}%
+
+% basic west triple of adjoint arrows with upper names
+\def\basicWtriadjar[#1]#2#3#4{%
+\Z=#1%
+\multiply \Z by 100%
+\Htricase{\WTRIADJAR}{#2}{#3}{#4}{}{\Z}}%
+
+% west triple of adjoint arrows with upper names
+\newcommand{\Wtriadjar}{\@ifnextchar[{\basicWtriadjar}%
+{\hspace{\SOURCE\unitlength}\basicWtriadjar[\ARROWLENGTH]}}%
+
+% basic west triple of adjoint arrows with lower names
+\def\basicwtriadjaR[#1]#2#3#4{%
+\Z=#1%
+\multiply \Z by 100%
+\Htricase{\WTRIADJAR}{}{#2}{#3}{#4}{\Z}}%
+
+% west triple of adjoint arrows with lower name
+\newcommand{\wtriadjaR}{\@ifnextchar[{\basicwtriadjaR}%
+{\hspace{\SOURCE\unitlength}\basicwtriadjaR[\ARROWLENGTH]}}%
+
+% basic west quadruple of arrows
+\def\basicwquadriar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hmulticase{\WQUADRIAR}{\Z}}%
+
+% west quadruple of arrows
+\newcommand{\wquadriar}{\@ifnextchar[{\basicwquadriar}%
+{\hspace{\SOURCE\unitlength}\basicwquadriar[\ARROWLENGTH]}}%
+
+% basic west quadruple of adjoint arrows
+\def\basicwquadriadjar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hmulticase{\WQUADRIADJAR}{\Z}}%
+
+% west quadruple of adjoint arrows
+\newcommand{\wquadriadjar}{\@ifnextchar[{\basicwquadriadjar}%
+{\hspace{\SOURCE\unitlength}\basicwquadriadjar[\ARROWLENGTH]}}%
+
+% basic west quintuple of arrows
+\def\basicwquintiar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hmulticase{\WQUINTIAR}{\Z}}%
+
+% west quintuple of arrows
+\newcommand{\wquintiar}{\@ifnextchar[{\basicwquintiar}%
+{\hspace{\SOURCE\unitlength}\basicwquintiar[\ARROWLENGTH]}}%
+
+% basic west quintuple of adjoint arrows
+\def\basicwquintiadjar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hmulticase{\WQUINTIADJAR}{\Z}}%
+
+% west quintuple of adjoint arrows
+\newcommand{\wquintiadjar}{\@ifnextchar[{\basicwquintiadjar}%
+{\hspace{\SOURCE\unitlength}\basicwquintiadjar[\ARROWLENGTH]}}%
+
+
+
+% MACROS FOR VERTICAL DIAGRAM PICTURES
+
+% \vtricase{P}{n} draws the vertical tri-picture P
+% with length n units
+\newcommand{\vtricase}[2]%
+{\testdiagrammode\makebox[0pt]{#1{}{}{}{}{#2}}}%
+
+% \Vtricase{P}{f}{g}{h}{i}{n} draws the vertical tri-picture P
+% with length n units and names f, g, h, i.
+\newcommand{\Vtricase}[6]%
+{\testdiagrammode\makebox[0pt]{#1{#2}{#3}{#4}{#5}{#6}}}%
+
+% \vmulticase{P}{n} draws the vertical multi-picture P
+% with length n units.
+\newcommand{\vmulticase}[2]{\testdiagrammode\makebox[0pt]{#1{#2}}}%
+
+% SOUTH ARROWS
+
+% \STRIAR{f}{g}{h}{i}{n} draws a triple of south arrows
+% of length n units with names f, g, h, i
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\STRIAR}[5]%
+{\truex{1200}%
+\truey{1800}%
+\truez{600}%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#5)%
+\X=#5\divide\X by 2%
+\put(-\value{x},#5){\line(0,-1){#5}}%
+\put(-\value{x},0){\shead}%
+\put(0,#5){\line(0,-1){#5}}%
+\put(0,0){\shead}%
+\put(\value{x},#5){\line(0,-1){#5}}%
+\put(\value{x},0){\shead}%
+\put(-\value{y},\X){\makebox(0,0){$#1$}}%
+\put(\value{y},\X){\makebox(0,0){$#4$}}%
+\put(-\value{z},\X){\makebox(0,0){$#2$}}%
+\put(\value{z},\X){\makebox(0,0){$#3$}}%
+\end{picture}}}\end{picture}}%
+
+% \STRIADJAR{f}{g}{h}{i}{n} draws a south triple of adjoint
+% arrows of length n units with names f, g, h, i
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\STRIADJAR}[5]%
+{\truex{1200}%
+\truey{1800}%
+\truez{600}%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#5)%
+\X=#5\divide\X by 2%
+\put(-\value{x},0){\line(0,1){#5}}%
+\put(-\value{x},#5){\nhead}%
+\put(0,#5){\line(0,-1){#5}}%
+\put(0,0){\shead}%
+\put(\value{x},0){\line(0,1){#5}}%
+\put(\value{x},#5){\nhead}%
+\put(-\value{y},\X){\makebox(0,0){$#1$}}%
+\put(\value{y},\X){\makebox(0,0){$#4$}}%
+\put(-\value{z},\X){\makebox(0,0){$#2$}}%
+\put(\value{z},\X){\makebox(0,0){$#3$}}%
+\end{picture}}}\end{picture}}%
+
+% \SQUADRIAR{n} draws a quadruple of south arrows of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\SQUADRIAR}[1]%
+{\truex{400}%
+\truey{1200}%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{y},#1){\line(0,-1){#1}}%
+\put(-\value{y},0){\shead}%
+\put(-\value{x},#1){\line(0,-1){#1}}%
+\put(-\value{x},0){\shead}%
+\put(\value{x},#1){\line(0,-1){#1}}%
+\put(\value{x},0){\shead}%
+\put(\value{y},#1){\line(0,-1){#1}}%
+\put(\value{y},0){\shead}%
+\end{picture}}}\end{picture}}%
+
+% \SQUADRIADJAR{n} draws a south quadruple of adjoint arrows
+% of length n units and centers it in a box of width 0pt and height 0pt
+\newcommand{\SQUADRIADJAR}[1]%
+{\truex{400}%
+\truey{1200}%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{y},#1){\line(0,-1){#1}}%
+\put(-\value{y},0){\shead}%
+\put(-\value{x},0){\line(0,1){#1}}%
+\put(-\value{x},#1){\nhead}%
+\put(\value{x},#1){\line(0,-1){#1}}%
+\put(\value{x},0){\shead}%
+\put(\value{y},0){\line(0,1){#1}}%
+\put(\value{y},#1){\nhead}%
+\end{picture}}}\end{picture}}%
+
+% \SQUINTIAR{n} draws a quintuple of south arrows of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\SQUINTIAR}[1]%
+{\truex{600}%
+\truey{1200}%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{y},#1){\line(0,-1){#1}}%
+\put(-\value{y},0){\shead}%
+\put(-\value{x},#1){\line(0,-1){#1}}%
+\put(-\value{x},0){\shead}%
+\put(0,#1){\line(0,-1){#1}}%
+\put(0,0){\shead}%
+\put(\value{x},#1){\line(0,-1){#1}}%
+\put(\value{x},0){\shead}%
+\put(\value{y},#1){\line(0,-1){#1}}%
+\put(\value{y},0){\shead}%
+\end{picture}}}\end{picture}}%
+
+% \SQUINTIADJAR{n} draws a south quintuple of adjoint arrows
+% of length n units and centers it in a box of width 0pt and height 0pt
+\newcommand{\SQUINTIADJAR}[1]%
+{\truex{600}%
+\truey{1200}%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{y},#1){\line(0,-1){#1}}%
+\put(-\value{y},0){\shead}%
+\put(-\value{x},0){\line(0,1){#1}}%
+\put(-\value{x},#1){\nhead}%
+\put(0,#1){\line(0,-1){#1}}%
+\put(0,0){\shead}%
+\put(\value{x},0){\line(0,1){#1}}%
+\put(\value{x},#1){\nhead}%
+\put(\value{y},#1){\line(0,-1){#1}}%
+\put(\value{y},0){\shead}%
+\end{picture}}}\end{picture}}%
+
+% USER'S COMMANDS FOR SOUTH ARROWS
+
+% basic south triple of arrows
+\def\basicstriar[#1]{\vtricase{\STRIAR}{#100}}%
+
+% south triple of arrows
+\newcommand{\striar}{\@ifnextchar[{\basicstriar}{\basicstriar[50]}}%
+
+% basic south triple of arrows with left names
+\def\basicStriar[#1]#2#3#4{\Vtricase{\STRIAR}{#2}{#3}{#4}{}{#100}}%
+
+% south triple of arrows with left names
+\newcommand{\Striar}{\@ifnextchar[{\basicStriar}{\basicStriar[50]}}%
+
+% basic south triple of arrows with right names
+\def\basicstriaR[#1]#2#3#4{\Vtricase{\STRIAR}{}{#2}{#3}{#4}{#100}}%
+
+% south triple of arrows with right name
+\newcommand{\striaR}{\@ifnextchar[{\basicstriaR}{\basicstriaR[50]}}%
+
+% basic south triple of adjoint arrows
+\def\basicstriadjar[#1]{\vtricase{\STRIADJAR}{#100}}%
+
+% south triple of adjoint arrows
+\newcommand{\striadjar}{\@ifnextchar[{\basicstriadjar}{\basicstriadjar[50]}}%
+
+% basic south triple of adjoint arrows with left names
+\def\basicStriadjar[#1]#2#3#4{\Vtricase{\STRIADJAR}{#2}{#3}{#4}{}{#100}}%
+
+% south triple of adjoint arrows with left names
+\newcommand{\Striadjar}{\@ifnextchar[{\basicStriadjar}{\basicStriadjar[50]}}%
+
+% basic south triple of adjoint arrows with right names
+\def\basicstriadjaR[#1]#2#3#4{\Vtricase{\STRIADJAR}{}{#2}{#3}{#4}{#100}}%
+
+% south triple of adjoint arrows with right name
+\newcommand{\striadjaR}{\@ifnextchar[{\basicstriadjaR}{\basicstriadjaR[50]}}%
+
+% basic south quadruple of arrows
+\def\basicsquadriar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\vmulticase{\SQUADRIAR}{\Z}}%
+
+% south quadruple of arrows
+\newcommand{\squadriar}{\@ifnextchar[{\basicsquadriar}%
+{\hspace{\SOURCE\unitlength}\basicsquadriar[\ARROWLENGTH]}}%
+
+% basic south quadruple of adjoint arrows
+\def\basicsquadriadjar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\vmulticase{\SQUADRIADJAR}{\Z}}%
+
+% south quadruple of adjoint arrows
+\newcommand{\squadriadjar}{\@ifnextchar[{\basicsquadriadjar}%
+{\hspace{\SOURCE\unitlength}\basicsquadriadjar[\ARROWLENGTH]}}%
+
+% basic south quintuple of arrows
+\def\basicsquintiar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\vmulticase{\SQUINTIAR}{\Z}}%
+
+% south quintuple of arrows
+\newcommand{\squintiar}{\@ifnextchar[{\basicsquintiar}%
+{\hspace{\SOURCE\unitlength}\basicsquintiar[\ARROWLENGTH]}}%
+
+% basic south quintuple of adjoint arrows
+\def\basicsquintiadjar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\vmulticase{\SQUINTIADJAR}{\Z}}%
+
+% south quintuple of adjoint arrows
+\newcommand{\squintiadjar}{\@ifnextchar[{\basicsquintiadjar}%
+{\hspace{\SOURCE\unitlength}\basicsquintiadjar[\ARROWLENGTH]}}%
+
+
+
+% NORTH ARROWS
+
+% \NTRIAR{f}{g}{h}{i}{n} draws a triple of north arrows
+% of length n units with names f, g, h, i
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NTRIAR}[5]%
+{\truex{1200}%
+\truey{1800}%
+\truez{600}%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#5)%
+\X=#5\divide\X by 2%
+\put(-\value{x},0){\line(0,1){#5}}%
+\put(-\value{x},#5){\nhead}%
+\put(0,0){\line(0,1){#5}}%
+\put(0,#5){\nhead}%
+\put(\value{x},0){\line(0,1){#5}}%
+\put(\value{x},#5){\nhead}%
+\put(-\value{y},\X){\makebox(0,0){$#1$}}%
+\put(\value{y},\X){\makebox(0,0){$#4$}}%
+\put(-\value{z},\X){\makebox(0,0){$#2$}}%
+\put(\value{z},\X){\makebox(0,0){$#3$}}%
+\end{picture}}}\end{picture}}%
+
+% \NTRIADJAR{f}{g}{h}{i}{n} draws a north triple of adjoint
+% arrows of length n units with names f, g, h, i
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NTRIADJAR}[5]%
+{\truex{1200}%
+\truey{1800}%
+\truez{600}%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#5)%
+\X=#5\divide\X by 2%
+\put(-\value{x},#5){\line(0,-1){#5}}%
+\put(-\value{x},0){\shead}%
+\put(0,0){\line(0,1){#5}}%
+\put(0,#5){\nhead}%
+\put(\value{x},#5){\line(0,-1){#5}}%
+\put(\value{x},0){\shead}%
+\put(-\value{y},\X){\makebox(0,0){$#1$}}%
+\put(\value{y},\X){\makebox(0,0){$#4$}}%
+\put(-\value{z},\X){\makebox(0,0){$#2$}}%
+\put(\value{z},\X){\makebox(0,0){$#3$}}%
+\end{picture}}}\end{picture}}%
+
+% \NQUADRIAR{n} draws a quadruple of north arrows of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NQUADRIAR}[1]%
+{\truex{400}%
+\truey{1200}%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{y},0){\line(0,1){#1}}%
+\put(-\value{y},#1){\nhead}%
+\put(-\value{x},0){\line(0,1){#1}}%
+\put(-\value{x},#1){\nhead}%
+\put(\value{x},0){\line(0,1){#1}}%
+\put(\value{x},#1){\nhead}%
+\put(\value{y},0){\line(0,1){#1}}%
+\put(\value{y},#1){\nhead}%
+\end{picture}}}\end{picture}}%
+
+% \NQUADRIADJAR{n} draws a north quadruple of adjoint arrows
+% of length n units and centers it in a box of width 0pt and height 0pt
+\newcommand{\NQUADRIADJAR}[1]%
+{\truex{400}%
+\truey{1200}%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{y},0){\line(0,1){#1}}%
+\put(-\value{y},#1){\nhead}%
+\put(-\value{x},#1){\line(0,-1){#1}}%
+\put(-\value{x},0){\shead}%
+\put(\value{x},0){\line(0,1){#1}}%
+\put(\value{x},#1){\nhead}%
+\put(\value{y},#1){\line(0,-1){#1}}%
+\put(\value{y},0){\shead}%
+\end{picture}}}\end{picture}}%
+
+% \NQUINTIAR{n} draws a quintuple of north arrows of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NQUINTIAR}[1]%
+{\truex{600}%
+\truey{1200}%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{y},0){\line(0,1){#1}}%
+\put(-\value{y},#1){\nhead}%
+\put(-\value{x},0){\line(0,1){#1}}%
+\put(-\value{x},#1){\nhead}%
+\put(0,0){\line(0,1){#1}}%
+\put(0,#1){\nhead}%
+\put(\value{x},0){\line(0,1){#1}}%
+\put(\value{x},#1){\nhead}%
+\put(\value{y},0){\line(0,1){#1}}%
+\put(\value{y},#1){\nhead}%
+\end{picture}}}\end{picture}}%
+
+% \NQUINTIADJAR{n} draws a north quintuple of adjoint arrows
+% of length n units and centers it in a box of width 0pt and height 0pt
+\newcommand{\NQUINTIADJAR}[1]%
+{\truex{600}%
+\truey{1200}%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{y},0){\line(0,1){#1}}%
+\put(-\value{y},#1){\nhead}%
+\put(-\value{x},#1){\line(0,-1){#1}}%
+\put(-\value{x},0){\shead}%
+\put(0,0){\line(0,1){#1}}%
+\put(0,#1){\nhead}%
+\put(\value{x},#1){\line(0,-1){#1}}%
+\put(\value{x},0){\shead}%
+\put(\value{y},0){\line(0,1){#1}}%
+\put(\value{y},#1){\nhead}%
+\end{picture}}}\end{picture}}%
+
+% USER'S COMMANDS FOR NORTH ARROWS
+
+% basic north triple of arrows
+\def\basicntriar[#1]{\vtricase{\NTRIAR}{#100}}%
+
+% north triple of arrows
+\newcommand{\ntriar}{\@ifnextchar[{\basicntriar}{\basicntriar[50]}}%
+
+% basic north triple of arrows with left names
+\def\basicNtriar[#1]#2#3#4{\Vtricase{\NTRIAR}{#2}{#3}{#4}{}{#100}}%
+
+% north triple of arrows with left names
+\newcommand{\Ntriar}{\@ifnextchar[{\basicNtriar}{\basicNtriar[50]}}%
+
+% basic north triple of arrows with right names
+\def\basicntriaR[#1]#2#3#4{\Vtricase{\NTRIAR}{}{#2}{#3}{#4}{#100}}%
+
+% north triple of arrows with right name
+\newcommand{\ntriaR}{\@ifnextchar[{\basicntriaR}{\basicntriaR[50]}}%
+
+% basic north triple of adjoint arrows
+\def\basicntriadjar[#1]{\vtricase{\NTRIADJAR}{#100}}%
+
+% north triple of adjoint arrows
+\newcommand{\ntriadjar}{\@ifnextchar[{\basicntriadjar}{\basicntriadjar[50]}}%
+
+% basic north triple of adjoint arrows with left names
+\def\basicNtriadjar[#1]#2#3#4{\Vtricase{\NTRIADJAR}{#2}{#3}{#4}{}{#100}}%
+
+% north triple of adjoint arrows with left names
+\newcommand{\Ntriadjar}{\@ifnextchar[{\basicNtriadjar}{\basicNtriadjar[50]}}%
+
+% basic north triple of adjoint arrows with right names
+\def\basicntriadjaR[#1]#2#3#4{\Vtricase{\NTRIADJAR}{}{#2}{#3}{#4}{#100}}%
+
+% north triple of adjoint arrows with right name
+\newcommand{\ntriadjaR}{\@ifnextchar[{\basicntriadjaR}{\basicntriadjaR[50]}}%
+
+% basic north quadruple of arrows
+\def\basicnquadriar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\vmulticase{\NQUADRIAR}{\Z}}%
+
+% north quadruple of arrows
+\newcommand{\nquadriar}{\@ifnextchar[{\basicnquadriar}%
+{\hspace{\SOURCE\unitlength}\basicnquadriar[\ARROWLENGTH]}}%
+
+% basic north quadruple of adjoint arrows
+\def\basicnquadriadjar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\vmulticase{\NQUADRIADJAR}{\Z}}%
+
+% north quadruple of adjoint arrows
+\newcommand{\nquadriadjar}{\@ifnextchar[{\basicnquadriadjar}%
+{\hspace{\SOURCE\unitlength}\basicnquadriadjar[\ARROWLENGTH]}}%
+
+% basic north quintuple of arrows
+\def\basicnquintiar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\vmulticase{\NQUINTIAR}{\Z}}%
+
+% north quintuple of arrows
+\newcommand{\nquintiar}{\@ifnextchar[{\basicnquintiar}%
+{\hspace{\SOURCE\unitlength}\basicnquintiar[\ARROWLENGTH]}}%
+
+% basic north quintuple of adjoint arrows
+\def\basicnquintiadjar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\vmulticase{\NQUINTIADJAR}{\Z}}%
+
+% north quintuple of adjoint arrows
+\newcommand{\nquintiadjar}{\@ifnextchar[{\basicnquintiadjar}%
+{\hspace{\SOURCE\unitlength}\basicnquintiadjar[\ARROWLENGTH]}}%
+
+\catcode`\@=12 \ No newline at end of file