%%% 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