%% marginal.sty
%% Copyright 1997 Sigitas Tolu\v sis
%% VTeX Ltd., Akademijos 4, Vilnius, Lithuania
%% e-mail sigitas@vtex.lt
%% http://www.vtex.lt/tex/download/macros/
%%
% This program can redistributed and/or modified under the terms
% of the LaTeX Project Public License Distributed from CTAN
% archives in directory macros/latex/base/lppl.txt; either
% version 1 of the License, or (at your option) any later version.
%
% PURPOSE:   Enlarge free and show lost marginal inserts
%
% SHORT DESCRIPTION:
%
% \showlostmarginals
% ------------------
%   Outputs lost marginal notes at the left of page
%
% \enlargefreelist 
% ----------------
%   Adds more(34) free inserts to freelist
%
% \onesidemarginals 
% -----------------
%   Outputs marginal notes only on one side. It saves one half 
%   of the available free inserts.
%
\ProvidesPackage{marginal}[1997/04/01]
%
\newif\if@mparlost      \@mparlostfalse
%
\newbox\@mparlostbox
\setbox\@mparlostbox\vbox{}
%
\gdef\@fltovfpar{\global\@mparlosttrue%
  \@latex@warning{Too many unprocessed (marginal)floats}\relax}
\gdef\@fltovfmess{%
  \@latex@error{Too many unprocessed floats}\@ehb}
%
\def\marginpar{\ifhmode \@bsphack\@floatpenalty -\@Mii\else
   \@floatpenalty-\@Miii\fi\ifinner
      \@parmoderr\@floatpenalty\z@
    \else\@next\@currbox\@freelist{}{}\@next\@marbox\@freelist{\global
      \count\@marbox\m@ne}{\@floatpenalty\z@ \@fltovfmess
         \def\@currbox{\@tempboxa}\def\@marbox{\@tempboxa}}\fi
     \@ifnextchar [\@xmpar\@ympar}
%
\long\def \@savemarbox #1#2{%
  \global\setbox #1%
    \color@vbox
      \vtop{%
        \hsize\marginparwidth
        \@parboxrestore
        \@marginparreset
        #2%
        \global\@minipagefalse
        \outer@nobreak
        }%
    \color@endbox%
    \if@mparlost\global\setbox\@mparlostbox\vbox{\unvbox\@mparlostbox\copy#1}%
    \global\@mparlostfalse\fi
}
%
%   \showlostmarginals - outputs lost marginal notes at the left of the page
%
\def\showlostmarginals{%
  \global\let\old@textbottom\@textbottom
  \gdef\@textbottom{\vtop to\z@{\hbox to\z@{\kern-\wd\@mparlostbox\vbox 
  to\z@{\kern-\ht\@mparlostbox\box\@mparlostbox\vfill}}}\old@textbottom}%
  \global\let\@fltovfmess\@fltovfpar}
%
%   \enlargefreelist - Adds more(34) free inserts to freelist
%
\def\enlargefreelist{%
\newinsert\bx@S
\newinsert\bx@T
\newinsert\bx@U
\newinsert\bx@V
\newinsert\bx@W
\newinsert\bx@X
\newinsert\bx@Y
\newinsert\bx@Z
\newinsert\bx@a
\newinsert\bx@b
\newinsert\bx@c
\newinsert\bx@d
\newinsert\bx@e
\newinsert\bx@f
\newinsert\bx@g
\newinsert\bx@h
\newinsert\bx@i
\newinsert\bx@j
\newinsert\bx@k
\newinsert\bx@l
\newinsert\bx@m
\newinsert\bx@n
\newinsert\bx@o
\newinsert\bx@p
\newinsert\bx@q
\newinsert\bx@r
\newinsert\bx@s
\newinsert\bx@t
\newinsert\bx@u
\newinsert\bx@v
\newinsert\bx@w
\newinsert\bx@x
\newinsert\bx@y
\newinsert\bx@z
\gdef\@freelist{\@elt\bx@A\@elt\bx@B\@elt\bx@C\@elt\bx@D\@elt\bx@E
                \@elt\bx@F\@elt\bx@G\@elt\bx@H\@elt\bx@I\@elt\bx@J
                \@elt\bx@K\@elt\bx@L\@elt\bx@M\@elt\bx@N
                \@elt\bx@O\@elt\bx@P\@elt\bx@Q\@elt\bx@R
                \@elt\bx@S\@elt\bx@T\@elt\bx@U\@elt\bx@V
                \@elt\bx@W\@elt\bx@X\@elt\bx@Y\@elt\bx@Z
                \@elt\bx@a\@elt\bx@b\@elt\bx@c\@elt\bx@d\@elt\bx@e
                \@elt\bx@f\@elt\bx@g\@elt\bx@h\@elt\bx@i\@elt\bx@j
                \@elt\bx@k\@elt\bx@l\@elt\bx@m\@elt\bx@n
                \@elt\bx@o\@elt\bx@p\@elt\bx@q\@elt\bx@r
                \@elt\bx@s\@elt\bx@t\@elt\bx@u\@elt\bx@v
                \@elt\bx@w\@elt\bx@x\@elt\bx@y\@elt\bx@z}%
}
%
%   \onesidemarginals - outputs marginals only on one side
%
\def\onesidemarginals{%
\newbox\@marbox
\gdef\@addmarginpar{\@cons\@freelist\@currbox
    \@tempdima\@mparbottom
    \advance\@tempdima -\@pageht
    \advance\@tempdima\ht\@currbox
    \ifdim\@tempdima >\z@
      \@latex@warning@no@line {Marginpar on page \thepage\space moved}%
    \else
      \@tempdima\z@
    \fi
    \global\@mparbottom\@pageht
    \global\advance\@mparbottom\@tempdima
    \global\advance\@mparbottom\dp\@currbox
    \global\advance\@mparbottom\marginparpush
    \advance\@tempdima -\ht\@currbox
    \global\setbox \@currbox
                   \vbox {\vskip \@tempdima
                          \box \@currbox}%
    \global \ht\@currbox \z@
    \global \dp\@currbox \z@
    \kern -\@pagedp
    \nointerlineskip
    \hb@xt@\columnwidth
      {\hskip\columnwidth \hskip\marginparsep \box\@currbox \hss}%
    \nointerlineskip
    \hbox{\vrule \@height\z@ \@width\z@ \@depth\@pagedp}}%
%
\gdef\marginpar{\ifhmode \@bsphack\@floatpenalty -\@Mii\else
   \@floatpenalty-\@Miii\fi\ifinner\@parmoderr\@floatpenalty\z@
    \else\@next\@currbox\@freelist{\global
      \count\@currbox\m@ne}{\@floatpenalty\z@ \@fltovfmess
         \def\@currbox{\@tempboxa}}\fi
     \@ifnextchar [\@xmpar\@ympar}%
%
\long\gdef\@xmpar[##1]##2{\@savemarbox\@currbox{##2}\@xympar}%
\long\gdef\@ympar##1{\@savemarbox\@currbox{##1}\@xympar}%
\def \@xympar{%
%  \ifnum\@floatpenalty <\z@\@cons\@currlist\@marbox\fi
  \setbox\@tempboxa
    \color@vbox
      \vbox \bgroup
  \end@float
  \global \@ignorefalse \@esphack}%
}
\endinput
