summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/pb-diagram/lamsarrow.sty
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/pb-diagram/lamsarrow.sty
Initial commit
Diffstat (limited to 'macros/latex/contrib/pb-diagram/lamsarrow.sty')
-rw-r--r--macros/latex/contrib/pb-diagram/lamsarrow.sty770
1 files changed, 770 insertions, 0 deletions
diff --git a/macros/latex/contrib/pb-diagram/lamsarrow.sty b/macros/latex/contrib/pb-diagram/lamsarrow.sty
new file mode 100644
index 0000000000..a215c8b1fc
--- /dev/null
+++ b/macros/latex/contrib/pb-diagram/lamsarrow.sty
@@ -0,0 +1,770 @@
+% lamsarrow.sty: fancy arrows using lams fonts
+% Author: extracted from Michael Spivak's LamS-TeX by Paul Burchard
+% Version Number: 4.1
+% Version Date: 24 Jan 1997
+%
+%--------------------- LamS-TeX copyright -------------------------
+% COPYRIGHT (C) 1989, 1990, 1991 by the Texplorators Corporation,
+% 1572 West Gray #377, Houston, TX 77019-4948 (ALL RIGHTS RESERVED)
+%------------------------------------------------------------------
+%
+% This macro package allows LaTeX users to make use of the LamS-TeX
+% arrow fonts and create arrows with
+% * any valid LaTeX \line slope (unlike LaTeX's \vector)
+% * all those fancy head/tail symbols and shaft styles.
+%
+% Actually, these macros will accept any slope and approximate it
+% by the closest LaTeX \line slope. In making the approximation
+% to the desired arrow slope, these macros will work to keep the
+% arrow's *vertical* dimension accurate (at the expense
+% of the horizontal one, if necessary). This requires the
+% opposite strategy from LaTeX's \line and \vector commands,
+% where the *horizontal* dimension can always be precisely
+% specified.
+%
+% The macros seem to have the 10pt font size hardcoded in, so
+% the arrow embellishments will be on the marginally small side
+% in 12pt.
+%
+% Commands defined in this style file:
+%
+% \lamsarrow(#1,#2)
+% Draws an arrow which extends #1 \unitlengths in the
+% x-direction and #2 \unitlengths in the y-direction from the
+% current position. #1 and #2 are arbitrary real numbers,
+% not both zero. Intended for use in the picture environment.
+%
+% \lamsvector(#1,#2){#3}
+% Has the same effect as \lamsarrow, except its usage is
+% completely compatible with LaTeX's \vector command. But
+% with \lamsvector, there are no limits on the size of the
+% integers #1, #2, and it is OK if they have common factors.
+% Only valid LaTeX line slopes will actually be drawn, tho.
+%
+% \lamsshaft{#1}
+% A local declaration which changes the style of the shaft
+% of any subsequent lams arrows within the same environment
+% or {...} group. The symbol #1 may be one of:
+%
+% - solid line (default)
+% . dashed line
+% = long equals sign (no head or tail printed)
+% 0 invisible arrow
+% ? reset to default
+%
+% \lamssource{#1}
+% \lamstarget{#1}
+% Local declarations which change the symbol placed at the
+% initial and final points, respectively, of the arrow shaft.
+% Affects subsequent lams arrows within the same environment
+% or {...} group. For either declaration, the symbol #1 may
+% be any one of:
+%
+% Heads:
+% ^ arrow head (default for \lamstarget)
+% V arrow tail (default for \lamssource)
+% ' left half of arrowhead
+% ` right half of arrowhead
+% A double arrowhead
+% Tails:
+% J left fishhook tail
+% L right fishhook tail
+% S squiggle
+% Other:
+% 0 no symbol
+% ? reset to default
+%
+
+% detente message
+\typeout{ * LAMSTEX ARROWS * }
+\typeout{ The arrows you are using are courtesy of LamS-TeX, a }
+\typeout{ full-featured mathematical typsetting package which its }
+\typeout{ creator, at least, believes to be superior to LaTeX. }
+\typeout{ You can obtain LamS-TeX by anonymous FTP from most TeX }
+\typeout{ archives, or through the TUG user group organization. }
+\typeout{ }
+
+% lams arrow fonts
+\font\lamsfont@i=lams1
+\font\lamsfont@ii=lams2
+\font\lamsfont@iii=lams3
+\font\lamsfont@iv=lams4
+\font\lamsfont@v=lams5
+
+% arrow geom params
+% direction
+\newif\ifN@
+\newif\ifE@
+\newif\ifNESW@
+\newif\ifH@
+\newif\ifV@
+% location of source, target
+\newdimen\lams@firstx
+\newdimen\lams@firsty
+\newdimen\lams@lastx
+\newdimen\lams@lasty
+\newdimen\lams@center %ignore
+% shaft char dims
+\newdimen\lams@ht
+\newdimen\lams@wd
+
+% misc
+\newcount\ten@ \ten@10
+
+
+%%%%%%%%%%%%%%%%%%%% \lamssource, \lamstarget, \lamsshaft
+%
+% Used to set arrow style options.
+%
+% EXTERNAL VARS COMPUTED
+%
+% \lams@source \lams@target \lams@shaft
+
+\newcount\lams@source
+\newcount\lams@target
+\newcount\lams@shaft
+
+\def\lamssource#1{%
+ \if#10\lams@source\m@ne\else
+ \if#1?\lams@source\z@\else
+ \if#1V\lams@source\tw@\else
+ \if#1^\lams@source\thr@@\else
+ \if#1'\lams@source6 \else
+ \if#1`\lams@source7 \else
+ \if#1J\lams@source8 \else
+ \if#1L\lams@source9 \else
+ \if#1S\lams@source12 \else
+ \if#1A\lams@source13 \else
+ \@latexerr{Invalid lamsarrow source style: #1}%
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
+\def\lamstarget#1{%
+ \if#10\lams@target\m@ne\else
+ \if#1?\lams@target\z@\else
+ \if#1^\lams@target\tw@\else
+ \if#1V\lams@target\thr@@\else
+ \if#1'\lams@target4 \else
+ \if#1`\lams@target5 \else
+ \if#1J\lams@target\ten@ \else
+ \if#1L\lams@target11 \else
+ \if#1S\lams@target12 \else
+ \if#1A\lams@target13 \else
+ \@latexerr{Invalid lamsarrow target style: #1}%
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
+\def\lamsshaft#1{%
+ \if#10\lams@shaft\m@ne\else
+ \if#1?\lams@shaft\z@\else
+ \if#1-\lams@shaft\@ne\else
+ \if#1.\lams@shaft\tw@\else
+ \if#1=\lams@shaft\thr@@\else
+ \@latexerr{Invalid lamsarrow shaft style: #1}%
+ \fi\fi\fi\fi\fi}
+
+
+%%%%%%%%%%%%%%%%%%%% \lams@slope
+%
+% Utility macro to calculate arrow shaft character in lamstex arrow
+% fonts, given the x- and y-dimensions of the raw arrow.
+%
+% EXTERNAL VARS USED
+%
+% \lams@firstx \lams@lastx \lams@firsty \lams@lasty
+% \ifN@ \ifE@
+%
+% EXTERNAL VARS COMPUTED
+%
+% \lams@tani \lams@tanii \lams@ang
+%
+% INTERNAL VARS USED
+%
+% \lams@slopei \lams@slopeii
+% \lams@tanip \lams@taniip \lams@slopeip \lams@slopeiip
+% \count@ \lams@extra
+
+\newcount\lams@tani
+\newcount\lams@tanip
+\newcount\lams@tanii
+\newcount\lams@taniip
+\newdimen\lams@slopei
+\newdimen\lams@slopeip
+\newdimen\lams@slopeii
+\newdimen\lams@slopeiip
+\newcount\lams@ang
+\newcount\lams@extra
+
+\def\lams@slopeselect{%
+ \\161\\152\\143\\134\\255\\126\\357\\238\\349\\45{10}%
+ \\56{11}\\11{12}\\65{13}\\54{14}\\43{15}\\32{16}\\53{17}%
+ \\21{18}\\52{19}\\31{20}\\41{21}\\51{22}\\61{23}}
+
+\def\lams@slope{{\lams@slopei\lams@lasty
+ \advance\lams@slopei-\lams@firsty
+ \ifN@\else\multiply\lams@slopei\m@ne\fi
+ \lams@slopeii\lams@lastx\advance\lams@slopeii-\lams@firstx
+ \ifE@\else\multiply\lams@slopeii\m@ne\fi
+ \ifdim\lams@slopeii<\z@
+ \global\lams@tani6 \global\lams@tanii\@ne\global\lams@ang23
+ \else
+ \dimen@\lams@slopei\multiply\dimen@6
+ \ifdim\dimen@<\lams@slopeii
+ \global\lams@tani\@ne\global\lams@tanii6 \global\lams@ang\@ne
+ \else
+ \dimen@\lams@slopeii\multiply\dimen@6
+ \ifdim\dimen@<\lams@slopei
+ \global\lams@tani6 \global\lams@tanii\@ne\global\lams@ang23
+ \else
+ \global\lams@tanip\z@\global\lams@taniip\@ne
+ \def\\##1##2##3{\global\lams@ang##3\relax
+ \lams@slopeip\lams@slopei\lams@slopeiip\lams@slopeii
+ \multiply\lams@slopeiip##1\relax
+ \multiply\lams@slopeip##2\relax
+ \ifdim\lams@slopeiip<\lams@slopeip
+ \global\lams@tanip##1\relax\global\lams@taniip##2\relax
+ \else
+ \global\lams@tani##1\relax\global\lams@tanii##2\relax
+ \def\\####1####2####3{}%
+ \fi}%
+ \lams@slopeselect
+ \lams@slopei\lams@lasty\advance\lams@slopei-\lams@firsty
+ \ifN@\else\multiply\lams@slopei\m@ne\fi
+ \multiply\lams@slopei\lams@tanii
+ \multiply\lams@slopei\lams@taniip
+ \multiply\lams@slopei\tw@
+ \count@\lams@tani\multiply\count@\lams@taniip
+ \lams@extra\lams@tanip\multiply\lams@extra\lams@tanii
+ \advance\count@\lams@extra
+ \lams@slopeii\lams@lastx\advance\lams@slopeii-\lams@firstx
+ \ifE@\else\multiply\lams@slopeii\m@ne\fi
+ \multiply\lams@slopeii\count@
+ \ifdim\lams@slopei<\lams@slopeii
+ \global\lams@tani\lams@tanip\global\lams@tanii\lams@taniip
+ \global\advance\lams@ang\m@ne
+ \fi
+ \fi
+ \fi
+ \fi}%
+}
+
+
+%%%%%%%%%%%%%%%%%%%% \lamsarrow, \lamsvector
+%
+% User macros for lams arrows. They call \lams@arrow, which sets
+% up parameters for \lams@harrow, \lams@varrow, and \lams@darrow.
+%
+% EXTERNAL VARS USED
+%
+% \lams@source \lams@target
+%
+% EXTERNAL VARS COMPUTED
+%
+% \ifNESW@ \ifN@ \ifE@
+% \lams@center \lams@firstx \lams@firsty \lams@lasty
+% \lams@wd \lams@ht
+%
+% INTERNAL VARS USED
+%
+% \lams@xsize \lams@ysize
+
+\newdimen\lams@xsize
+\newdimen\lams@ysize
+
+\def\lamsvector(#1,#2)#3{%
+ \lams@xsize#3\unitlength\relax
+ \ifnum#1<\z@\multiply\lams@xsize\m@ne\fi
+ \lams@ysize\lams@xsize
+ \ifnum#1=\z@
+ \lams@xsize\z@
+ \ifnum#2<\z@\multiply\lams@ysize\m@ne\fi
+ \else
+ \multiply\lams@ysize#2\relax\divide\lams@ysize#1\relax
+ \fi
+ \lams@arrow{\lams@xsize}{\lams@ysize}%
+}
+
+\def\lamsarrow(#1,#2){%
+ \lams@xsize#1\unitlength\relax\lams@ysize#2\unitlength\relax
+ \lams@arrow{\lams@xsize}{\lams@ysize}%
+}
+
+\def\lams@switchsides{%
+ \ifnum\lams@source=6\relax\lams@source7\else
+ \ifnum\lams@source=7\relax\lams@source6\else
+ \ifnum\lams@source=8\relax\lams@source9\else
+ \ifnum\lams@source=9\relax\lams@source8\fi\fi\fi\fi\relax
+ \ifnum\lams@target=4\relax\lams@target5\else
+ \ifnum\lams@target=5\relax\lams@target4\else
+ \ifnum\lams@target=\ten@\relax\lams@target11\else
+ \ifnum\lams@target=11\relax\lams@target\ten@\fi\fi\fi\fi\relax
+}
+
+\def\lams@arrow#1#2{%
+ \lams@firstx\z@\lams@firsty\z@
+ \lams@lastx#1\relax\lams@lasty#2\relax
+ \lams@center\z@
+ %
+ % compute direction flags
+ \N@false\E@false\H@false\V@false
+ \ifdim\lams@lastx>\z@\E@true\fi
+ \ifdim\lams@lastx=\z@\V@true\fi
+ \ifdim\lams@lasty>\z@\N@true\fi
+ \ifdim\lams@lasty=\z@\H@true\fi
+ \NESW@false
+ \ifN@\ifE@\NESW@true\fi\else\ifE@\else\NESW@true\fi\fi
+ %
+ % fix up one-sided embellishments, depending on direction
+ \ifdim\lams@lastx<\z@ \lams@switchsides \fi
+ \ifdim\lams@lastx=\z@ \ifdim\lams@lasty<\z@ \lams@switchsides \fi\fi
+ %
+ % compute shaft char info with help of \lams@slope macro
+ \ifH@\else\ifV@\else
+ \lams@slope
+ \ifnum\lams@tani>\lams@tanii
+ \lams@ht\ten@\p@\lams@wd\ten@\p@
+ \multiply\lams@wd\lams@tanii\divide\lams@wd\lams@tani
+ \else
+ \lams@wd\ten@\p@\lams@ht\ten@\p@
+ \divide\lams@ht\lams@tanii\multiply\lams@ht\lams@tani
+ \fi
+ \fi\fi
+ %
+ % adjust arrow placement for source and target style
+ \ifH@\else\ifV@\else
+ \ifnum\lams@target=\thr@@
+ \ifN@\advance\lams@lasty-.3\lams@ht
+ \else\advance\lams@lasty.3\lams@ht\fi
+ \fi
+ \ifnum\lams@source=\tw@
+ \ifE@\advance\lams@firstx.3\lams@ht
+ \else\advance\lams@firstx-.3\lams@ht\fi
+ \fi
+ \ifnum\lams@target=12
+ \ifN@\advance\lams@lasty-\lams@ht
+ \else\advance\lams@lasty\lams@ht\fi
+ \fi
+ \fi\fi
+ %
+ % draw arrow, special-casing horizontal and vertical ones
+ \ifH@ \lams@harrow
+ \else\ifV@ \lams@varrow
+ \else \lams@darrow
+ \fi\fi
+}
+
+
+%%%%%%%%%%%%%%%%%%%% \lams@darrow
+%
+% Does actual drawing of diagonal arrows,
+% with the help of \lams@cos.
+%
+% EXTERNAL VARS USED
+%
+% \lams@shaft \lams@source \lams@target
+%
+% \ifNESW@ \ifN@ \ifE@ (computed by \lams@arrow)
+% \lams@center \lams@firstx \lams@firsty \lams@lasty (ibid)
+% \lams@wd \lams@ht (computed by \lams@arrow)
+%
+% \lams@ang \lams@tani \lams@tanii (computed by \lams@slope)
+%
+% \lamsfont@i \lamsfont@ii \lamsfont@iii \lamsfont@iv \lamsfont@v
+%
+% INTERNAL VARS USED
+%
+% \lams@sl (from \lams@ang, used by \lams@cos)
+% \lams@S \lams@T (from \lams@ang, \lams@source, \lams@target)
+% \lams@shift (+/- \lams@firsty) \lams@adj
+% \lams@goal (+/-(\lams@lasty-\lams@firsty))
+% \dimen@ \dimen@ii \count@ (computed by \lams@cos)
+% \arrowfont@ \lams@shaftbox \lams@ZERO
+
+\newdimen\lams@goal
+\newdimen\lams@shift
+\newdimen\lams@adj
+\newcount\lams@T
+\newcount\lams@S
+\newbox\lams@shaftbox
+\newcount\lams@sl
+\newbox\lams@ZERO
+
+\def\lams@next{\ifN@\let\next@\raise\else\let\next@\lower\fi}
+
+\def\lams@cos#1{%
+ \ifnum\lams@tani<\lams@tanii
+ \dimen@#1%
+ \ifnum\lams@sl<8 \count@9
+ \else \ifnum\lams@sl<12 \count@8
+ \else \count@7 \fi\fi
+ \multiply\dimen@\count@\divide\dimen@\ten@
+ \dimen@ii\dimen@\multiply\dimen@ii\lams@tani
+ \divide\dimen@ii\lams@tanii
+ \else
+ \dimen@ii#1%
+ \count@-\lams@sl\advance\count@24
+ \ifnum\count@<8 \count@9 \else \ifnum\count@<12 \count@8
+ \else\count@7 \fi\fi
+ \multiply\dimen@ii\count@\divide\dimen@ii\ten@
+ \dimen@\dimen@ii\multiply\dimen@\lams@tanii
+ \divide\dimen@\lams@tani
+ \fi
+}
+
+\def\lams@darrow{\lams@sl\lams@ang
+ \ifNESW@
+ \ifnum\lams@ang<\ten@
+ \let\arrowfont@\lamsfont@i\global\advance\lams@ang\m@ne
+ \global\multiply\lams@ang13
+ \else
+ \ifnum\lams@ang<19
+ \let\arrowfont@\lamsfont@ii\global\advance\lams@ang-\ten@
+ \global\multiply\lams@ang13
+ \else
+ \let\arrowfont@\lamsfont@iii\global\advance\lams@ang-19
+ \global\multiply\lams@ang13
+ \fi\fi
+ \lams@T\lams@ang
+ \else
+ \ifnum\lams@ang<5
+ \let\arrowfont@\lamsfont@iii\global\advance\lams@ang\m@ne
+ \global\multiply\lams@ang13 \global\advance\lams@ang65
+ \else
+ \ifnum\lams@ang<14
+ \let\arrowfont@\lamsfont@iv\global\advance\lams@ang-5
+ \global\multiply\lams@ang13
+ \else
+ \ifnum\lams@ang<23
+ \let\arrowfont@\lamsfont@v\global\advance\lams@ang-14
+ \global\multiply\lams@ang13
+ \else
+ \let\arrowfont@\lamsfont@i\global\lams@ang117
+ \fi\fi\fi
+ \ifnum\lams@ang=117 \lams@T115 \else\lams@T\lams@ang\fi
+ \fi
+ \lams@S\lams@T
+ \ifE@
+ \ifnum\lams@target=\z@\advance\lams@T\tw@
+ \else\ifnum\lams@target=13 \advance\lams@T\tw@
+ \else\advance\lams@T\lams@target\fi\fi
+ \ifnum\lams@source=\z@
+ \else\ifnum\lams@source=13 \advance\lams@S\thr@@
+ \else\advance\lams@S\lams@source\fi\fi
+ \else
+ \ifcase\lams@target\advance\lams@T\thr@@\or
+ \or\advance\lams@T\thr@@\or
+ \advance\lams@T\tw@\or\advance\lams@T6 \or\advance\lams@T7
+ \or\or\or\or\or\advance\lams@T8 \or\advance\lams@T9 \or
+ \advance\lams@T12 \or\advance\lams@T\thr@@\fi
+ \ifcase\lams@source\or\or\advance\lams@S\thr@@
+ \or\advance\lams@S\tw@\or\or\or\advance\lams@S4
+ \or\advance\lams@S5 \or\advance\lams@S\ten@
+ \or\advance\lams@S11 \or\or\or\advance\lams@S12
+ \or\advance\lams@S\tw@\fi
+ \fi
+ \ifcase\lams@shaft\or\or\global\advance\lams@ang\@ne\else\fi
+ \ifN@\lams@shift\lams@firsty\else\lams@shift-\lams@firsty\fi
+ \ifE@\else\advance\lams@shift\lams@ht\fi
+ \lams@goal\lams@lasty\advance\lams@goal-\lams@firsty
+ \ifN@\else\multiply\lams@goal\m@ne\fi
+ \setbox\lams@shaftbox\hbox{\arrowfont@\char\lams@ang}%
+ \ifnum\lams@shaft=\thr@@
+ \lams@cos{1.5\p@}%
+ \setbox\lams@shaftbox\hbox to\wd\lams@shaftbox{\arrowfont@
+ \rlap{\hskip\dimen@ii
+ \smash{\ifNESW@\let\next@\lower\else\let\next@\raise\fi
+ \next@\dimen@\hbox{\arrowfont@\char\lams@ang}}}%
+ \rlap{\hskip-\dimen@ii
+ \smash{\ifNESW@\let\next@\raise\else\let\next@\lower\fi
+ \next@\dimen@\hbox{\arrowfont@\char\lams@ang}}}\hfil}%
+ \fi
+ \rlap{\smash{\hskip\lams@center\hskip\lams@firstx
+ \ifnum\lams@shaft=\m@ne
+ \else
+ \ifnum\lams@shaft=\thr@@
+ \else
+ \ifnum\lams@source=\m@ne
+ \else
+ \ifnum\lams@source=\z@
+ \else
+ \setbox\lams@ZERO\hbox{%
+ \ifnum\lams@ang=117 \lamsfont@v\else\arrowfont@\fi
+ \char\lams@S}%
+ \ifNESW@
+ \ifnum\lams@source=\tw@
+ \dimen@\lams@shift\advance\dimen@-\lams@ht
+ \ifN@\hskip-\wd\lams@ZERO\fi
+ \lams@next
+ \next@\dimen@\copy\lams@ZERO
+ \ifN@\else\hskip-\wd\lams@ZERO\fi
+ \else
+ \lams@next
+ \ifN@\else\hskip-\wd\lams@ZERO\fi
+ \next@\lams@shift\copy\lams@ZERO
+ \ifN@\hskip-\wd\lams@ZERO\fi
+ \fi
+ \ifnum\lams@source=12
+ \advance\lams@shift\lams@ht\advance\lams@goal-\lams@ht
+ \ifN@\hskip\wd\lams@ZERO\else\hskip-\wd\lams@ZERO\fi
+ \fi
+ \ifnum\lams@source=13
+ \lams@cos{\thr@@\p@}%
+ \ifN@\hskip\dimen@\else\hskip-\wd\lams@ZERO\hskip-\dimen@\fi
+ \lams@adj\lams@shift\advance\lams@adj\dimen@ii
+ \lams@next
+ \next@\lams@adj\copy\lams@ZERO
+ \ifN@\hskip-\dimen@\hskip-\wd\lams@ZERO\else\hskip\dimen@\fi
+ \fi
+ \else
+ \ifN@\hskip-\wd\lams@ZERO\fi
+ \ifnum\lams@source=\tw@
+ \ifN@\hskip\wd\lams@ZERO\else\hskip-\wd\lams@ZERO\fi
+ \dimen@\lams@shift\advance\dimen@-\lams@ht
+ \lams@next
+ \next@\dimen@\copy\lams@ZERO
+ \ifN@\hskip-\wd\lams@ZERO\fi
+ \else
+ \lams@next
+ \next@\lams@shift\copy\lams@ZERO
+ \ifN@\else\hskip-\wd\lams@ZERO\fi
+ \fi
+ \ifnum\lams@source=12
+ \advance\lams@shift\lams@ht\advance\lams@goal-\lams@ht
+ \ifN@\hskip-\wd\lams@ZERO\else\hskip\wd\lams@ZERO\fi
+ \fi
+ \ifnum\lams@source=13
+ \lams@cos{\thr@@\p@}%
+ \ifN@\hskip-\wd\lams@ZERO\hskip-\dimen@\else\hskip\dimen@\fi
+ \lams@adj\lams@shift\advance\lams@adj\dimen@ii
+ \lams@next
+ \next@\lams@adj\copy\lams@ZERO
+ \ifN@\hskip\dimen@\else\hskip-\dimen@\hskip-\wd\lams@ZERO\fi
+ \fi
+ \fi
+ \fi\fi\fi\fi
+ \ifnum\lams@shaft=\m@ne
+ \else
+ \loop
+ \ifdim\lams@goal>\lams@ht
+ \ifE@\else\hskip-\lams@wd\fi
+ \lams@next
+ \next@\lams@shift\copy\lams@shaftbox
+ \ifE@\else\hskip-\lams@wd\fi
+ \advance\lams@shift\lams@ht\advance\lams@goal-\lams@ht
+ \repeat
+ \ifdim\lams@goal>\z@
+ \dimen@\lams@ht\advance\dimen@-\lams@goal
+ \divide\dimen@\lams@tani\multiply\dimen@\lams@tanii
+ \ifE@\hskip-\dimen@\else\hskip-\lams@wd\hskip\dimen@\fi
+ \lams@adj\lams@shift\advance\lams@adj-\lams@ht
+ \advance\lams@adj\lams@goal
+ \lams@next
+ \next@\lams@adj\copy\lams@shaftbox
+ \ifE@\else\hskip-\lams@wd\fi
+ \else
+ \lams@adj\lams@shift\advance\lams@adj-\lams@ht
+ \fi
+ \fi
+ \ifnum\lams@shaft=\m@ne
+ \else
+ \ifnum\lams@shaft=\thr@@
+ \else
+ \ifnum\lams@target=\m@ne
+ \else
+ \setbox\lams@ZERO
+ \hbox{\ifnum\lams@ang=117
+ \lamsfont@v\else\arrowfont@\fi\char\lams@T}%
+ \ifnum\lams@target=\thr@@
+ \advance\lams@adj\lams@ht
+ \ifE@\else\ifN@\hskip-\lams@wd\else\hskip-\wd\lams@ZERO\fi\fi
+ \else
+ \ifnum\lams@target=12
+ \advance\lams@adj\lams@ht
+ \ifE@\else\ifN@\hskip-\lams@wd\else\hskip-\wd\lams@ZERO\fi\fi
+ \else
+ \ifE@\hskip-\wd\lams@ZERO\fi
+ \fi\fi
+ \lams@next
+ \next@\lams@adj\copy\lams@ZERO
+ \ifnum\lams@target=13
+ \hskip-\wd\lams@ZERO
+ \lams@cos{\thr@@\p@}%
+ \ifE@\hskip-\dimen@\else\hskip\dimen@\fi
+ \advance\lams@adj-\dimen@ii
+ \lams@next
+ \next@\lams@adj\box\lams@ZERO
+ \fi
+ \fi\fi\fi}}%
+}
+
+
+%%%%%%%%%%%%%%%%%%%% \lams@harrow
+%
+% Performs actual drawing of horizontal arrows.
+%
+% EXTERNAL VARS USED
+%
+% \lams@shaft \lams@source \lams@target
+%
+% \ifE@ (computed by \lams@arrow)
+% \lams@center \lams@firstx \lams@lastx (ibid)
+% \lamsfont@i \lamsfont@ii (lams fonts)
+%
+% \lams@axis (to correct centering of head/tail symbol chars)
+%
+% INTERNAL VARS USED
+%
+% \dimen@ \dimen@ii
+% \leads@ \lams@ZERO
+
+\newdimen\lams@axis \lams@axis90\p@\divide\lams@axis36
+
+\def\lams@harrow{\dimen@\lams@lastx\advance\dimen@-\lams@firstx
+ \ifE@\let\next@\rlap\else\multiply\dimen@\m@ne\let\next@\llap\fi
+ \next@{\ifE@\hskip\lams@center\hskip\lams@firstx\fi
+ \smash{\raise-\lams@axis\hbox to\dimen@
+ {\lamsfont@ii
+ \ifnum\lams@shaft=\m@ne\else\ifnum\lams@shaft=\thr@@\else
+ \ifE@
+ \ifnum\lams@source=\m@ne
+ \else
+ \ifcase\lams@source\or\or\char118 \or\char117 \or
+ \or\or\char119 \or\char120 \or\char121 \or\char122 \or
+ \or\or\lamsfont@i\char125 \or
+ \char117 \hskip\thr@@\p@\char117 \hskip-\thr@@\p@\fi
+ \fi
+ \else
+ \ifnum\lams@target=\m@ne
+ \else
+ \ifcase\lams@target\char117 \or\or\char117 \or\char118 \or
+ \char119 \or\char120 \or\or\or\or\or\char121 \or
+ \char122 \or\lamsfont@i\char125
+ \or\char117 \hskip\thr@@\p@\char117 \hskip-\thr@@\p@\fi
+ \fi
+ \fi
+ \fi\fi
+ \dimen@\lams@axis\advance\dimen@.2\p@
+ \dimen@ii\lams@axis\advance\dimen@ii-.2\p@
+ \ifnum\lams@shaft=\m@ne
+ \let\leads@\null
+ \else
+ \ifcase\lams@shaft
+ \def\leads@{\hrule\@height\dimen@\@depth-\dimen@ii}\or
+ \def\leads@{\hrule\@height\dimen@\@depth-\dimen@ii}\or
+ \def\leads@{\hbox to\ten@\p@{%
+ \leaders\hrule\@height\dimen@\@depth-\dimen@ii\hfil
+ \hfil
+ \leaders\hrule\@height\dimen@\@depth-\dimen@ii
+ \hskip\z@ plus2fil\relax
+ \hfil
+ \leaders\hrule\@height\dimen@\@depth-\dimen@ii\hfil}}\or
+ \def\leads@{\hbox{\hbox to\ten@\p@{%
+ \dimen@\lams@axis\advance\dimen@1.2\p@
+ \dimen@ii\dimen@\advance\dimen@ii-.4\p@
+ \leaders\hrule\@height\dimen@\@depth-\dimen@ii\hfil}%
+ \kern-\ten@\p@
+ \hbox to\ten@\p@{\dimen@\lams@axis\advance\dimen@-1.2\p@
+ \dimen@ii\dimen@\advance\dimen@ii-.4\p@
+ \leaders\hrule\@height\dimen@\@depth-\dimen@ii\hfil}}}\fi
+ \fi
+ \cleaders\leads@\hfil
+ \ifnum\lams@shaft=\m@ne\else\ifnum\lams@shaft=\thr@@\else
+ \lamsfont@i
+ \ifE@
+ \ifnum\lams@target=\m@ne
+ \else
+ \ifcase\lams@target\char119 \or\or\char119 \or\char120 \or
+ \char121 \or\char122 \or \or\or\or\or\char123 \or
+ \char124 \or\char125 \or
+ \char119 \hskip-\thr@@\p@\char119 \hskip\thr@@\p@\fi
+ \fi
+ \else
+ \ifcase\lams@source\or\or\char120 \or\char119 \or
+ \or\or\char121 \or\char122 \or\char123 \or
+ \char124 \or\or\or\char125 \or
+ \char119 \hskip-\thr@@\p@\char119 \hskip\thr@@\p@\fi
+ \fi
+ \fi\fi}}%
+ \ifE@\else\hskip-\lams@firstx\hskip-\lams@center\fi}%
+}
+
+
+%%%%%%%%%%%%%%%%%%%% \lams@varrow
+%
+% Performs actual drawing of vertical arrows.
+%
+% EXTERNAL VARS USED
+%
+% \lams@shaft \lams@source \lams@target
+%
+% \ifN@ (computed by \lams@arrow)
+% \lams@center \lams@firsty \lams@lasty (ibid)
+%
+% \lamsfont@iii \lamsfont@iv (lams fonts)
+%
+% INTERNAL VARS USED
+%
+% \dimen@ \dimen@ii
+% \leads@ \lams@ZERO
+
+\def\lams@varrow{\dimen@\lams@lasty\advance\dimen@-\lams@firsty
+ \ifN@\else\multiply\dimen@\m@ne\fi
+ \setbox\lams@ZERO\vbox to\dimen@
+ {\ifnum\lams@shaft=\m@ne\else\ifnum\lams@shaft=\thr@@\else
+ \hbox{\lamsfont@iii
+ \ifN@
+ \ifnum\lams@target=\m@ne
+ \else
+ \ifcase\lams@target\char117 \or\or\char117 \or
+ \char118 \or\char119 \or\char120 \or\or\or\or
+ \or\char121 \or\char122 \or\char123 \or
+ \vbox{\hbox{\char117}\nointerlineskip\vskip\thr@@\p@
+ \hbox{\char117}\vskip-\thr@@\p@}\fi
+ \fi
+ \else
+ \ifcase\lams@source\or\or\char118 \or\char117 \or\or
+ \or\char119 \or\char120 \or\char121 \or\char122 \or
+ \or\or\char123 \or
+ \vbox{\hbox{\char117}\nointerlineskip\vskip\thr@@\p@
+ \hbox{\char117}\vskip-\thr@@\p@}\fi
+ \fi}%
+ \nointerlineskip
+ \fi\fi
+ \ifnum\lams@shaft=\m@ne
+ \let\leads@\null
+ \else
+ \ifcase\lams@shaft\let\leads@\vrule\or\let\leads@\vrule\or
+ \def\leads@{\vbox to\ten@\p@{%
+ \hrule\@height1.67\p@\@depth\z@\@width.4\p@
+ \vfil
+ \hrule\@height3.33\p@\@depth\z@\@width.4\p@
+ \vfil
+ \hrule\@height1.67\p@\@depth\z@\@width.4\p@}}\or
+ \def\leads@{\hbox{\vrule\@height\p@\hskip\tw@\p@\vrule}}\fi
+ \fi
+ \cleaders\leads@\vfill\nointerlineskip
+ \ifnum\lams@shaft=\m@ne\else\ifnum\lams@shaft=\thr@@\else
+ \hbox{\lamsfont@iv
+ \ifN@
+ \ifcase\lams@source\or\or\char118 \or\char117 \or
+ \or\or\char119 \or\char120 \or\char121 \or\char122 \or
+ \or\or\lamsfont@iii\char123 \or
+ \vbox{\hbox{\char117}\nointerlineskip\vskip-\thr@@\p@
+ \hbox{\char117}\vskip\thr@@\p@}\fi
+ \else
+ \ifnum\lams@target=\m@ne
+ \else
+ \ifcase\lams@target\char117 \or\or\char117 \or\char118 \or
+ \char119 \or\char120 \or\or\or\or\or\char121 \or
+ \char122 \or\lamsfont@iii\char123 \or
+ \vbox{\hbox{\char117}\nointerlineskip\vskip-\thr@@\p@
+ \hbox{\char117}\vskip\thr@@\p@}\fi
+ \fi
+ \fi}%
+ \fi\fi}%
+ \ifN@
+ \dimen@ii\lams@firsty
+ \else
+ \dimen@ii-\lams@firsty\advance\dimen@ii\ht\lams@ZERO
+ \multiply\dimen@ii\m@ne
+ \fi
+ \rlap{\smash{\hskip\lams@center\raise\dimen@ii\box\lams@ZERO}}%
+}
+
+