%%
%% This is file `multicol.sty',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% multicol.dtx  (with options: `package,badness,check,marktrace,nobalance')
%% 
%% This is a generated file.
%% 
%% Copyright 1993 1994 1995 1996 1997 1998 1999
%% The LaTeX3 Project and any individual authors listed elsewhere
%% in this file.
%% 
%% This file is part of the Standard LaTeX `Tools Bundle'.
%% -------------------------------------------------------
%% 
%%  This file, and all the other files in this bundle as listed below,
%%  may be distributed under the terms of the LaTeX Project Public
%%  License, as described in lppl.txt in the base LaTeX distribution.
%%  Either version 1.0 or, at your option, any later version.
%% 
%% Package `multicol' to use with LaTeX2e
%% Copyright 1989-1999 Frank Mittelbach
%%
%%  This program is free software; you can redistribute it and/or
%%  modify it under the terms of the LaTeX Project Public License
%%  Distributed from CTAN archives in directory latex/base/lppl.txt
%%  either version 1.00 of the License,
%%  or (at your option) any later version.
%%
%%  In addition to the terms of LPPL any distributed version
%%  (unchanged or modified) of multicol has to keep the statement
%%  about the moral obligation for using multicol. In case of major
%%  changes where this would not be appropriate the author of the
%%  changed version should contact the copyright holder.
%%
%%
%%  Moral obligation for using multicol:
%%  ------------------------------------
%%
%%  Users of multicol who wish to include multicol or a modified
%%  version in a proprietary and commercially market product are asked
%%  under certain conditions (see below) for the payment of a license
%%  fee.  The size of this fee is to be determined, in each instance,
%%  by the commercial user, depending on his/her judgment of the value of
%%  multicol for his/her product.
%%
%%  The conditions for this are as follows:
%%
%%   The producer of a proprietary and commercially market product that
%%   involves typesetting using multicol is asked to determine the
%%   value of a license fee if
%%
%%   - the producer has developed the document and decided to include
%%     multicol
%%
%%    - the producer has not developed the document (ie has received it
%%      from somebody else) but has directed the author to include multicol
%%      (for example, by providing a class file to be used by the author)
%%
%%
%%   There is no moral obligation in case
%%
%%   - the producer has not developed the document and not has directed
%%     the author to include multicol (in that case the moral obligation
%%     lies with the author of the document)
%%
%%   - the commercial product does not involve typesetting, e.g.,
%%     consists, for example, of distributing multicol and its
%%     documentation.
%%
%%   - multicol is used for non-commercial purposes
%%
%%   - the developed document is not proprietary, i.e., is made
%%     available as free software itself (which doesn't prohibit its
%%     commercial marketing)
%%
%% Determinating a license fee might result in a license fee of zero
%% (i.e., no payment) in case a producer has determined that the use
%% of multicol has no enhancing effect on the product. This is a
%% plausible scenario, i.e., in the above two cases the producer is
%% only asked to evaluate the value of multicol for the product
%% not for the payment of a license fee per se (which might or might
%% not follow from this evaluation).
%%
%% The license fee, if any, can be payed either to the LaTeX3 fund
%% (see ltx3info.txt in the base LaTeX distribution) or to the author of
%% the program who can be contacted at
%%
%%     Frank.Mittelbach@latex-project.org
%%
\NeedsTeXFormat{LaTeX2e}[1997/12/01]
\ProvidesPackage{multicol}
          [1999/03/22 v1.5t  multicolumn formatting (FMi)]
%% \CheckSum{1328}
%% \CharacterTable
%%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
%%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
%%   Digits        \0\1\2\3\4\5\6\7\8\9
%%   Exclamation   \!     Double quote  \"     Hash (number) \#
%%   Dollar        \$     Percent       \%     Ampersand     \&
%%   Acute accent  \'     Left paren    \(     Right paren   \)
%%   Asterisk      \*     Plus          \+     Comma         \,
%%   Minus         \-     Point         \.     Solidus       \/
%%   Colon         \:     Semicolon     \;     Less than     \<
%%   Equals        \=     Greater than  \>     Question mark \?
%%   Commercial at \@     Left bracket  \[     Backslash     \\
%%   Right bracket \]     Circumflex    \^     Underscore    \_
%%   Grave accent  \`     Left brace    \{     Vertical bar  \|
%%   Right brace   \}     Tilde         \~}
%%
\DeclareOption{twocolumn}
   {\PackageWarning{multicol}{May not work
             with the twocolumn option}}
\newcount\c@tracingmulticols
\DeclareOption{errorshow}
    {\c@tracingmulticols\z@}
\DeclareOption{infoshow}
    {\c@tracingmulticols\@ne}
\DeclareOption{balancingshow}
    {\c@tracingmulticols\tw@}
\DeclareOption{markshow}
    {\c@tracingmulticols\thr@@}
\DeclareOption{debugshow}
    {\c@tracingmulticols5\relax}
\ProcessOptions
\def\multicols#1{\col@number#1\relax
  \ifnum\col@number<\tw@
     \PackageWarning{multicol}%
      {Using `\number\col@number'
       columns doesn't seem a good idea.^^J
       I therefore use two columns instead}%
     \col@number\tw@ \fi
  \ifnum\col@number>10
     \PackageError{multicol}%
      {Too many columns}%
      {Current implementation doesn't
       support more than 10 columns.%
       \MessageBreak
       I therefore use 10 columns instead}%
     \col@number10 \fi
     \let\orig@footnotetext\@footnotetext
     \def\@footnotetext##1{\begingroup\columnwidth\textwidth
         \orig@footnotetext{##1}\endgroup}%
  \@ifnextchar[\mult@cols{\mult@cols[]}}
\def\mult@cols[#1]{\@ifnextchar[%
  {\mult@@cols{#1}}%
  {\mult@@cols{#1}[\premulticols]}}
\def\mult@@cols#1[#2]{%
  \par
  \ifinner \@boxedmulticolstrue
  \else
    \ifnum \doublecol@number>\z@
       \@boxedmulticolstrue
    \fi
  \fi
  \mult@info\z@
      {Starting environment with
       \the\col@number\space columns%
        \if@boxedmulticols\MessageBreak
           (boxed mode)\fi
      }%
   \enough@room{#2}%
   #1\par\addvspace\multicolsep
   \begingroup
     \prepare@multicols
     \if@boxedmulticols
       \setbox\mult@box\vbox\bgroup
     \fi
     \ignorespaces}
\newif\if@boxedmulticols
\@boxedmulticolsfalse
\newbox\mult@box
\def\enough@room#1{%
   \if@boxedmulticols\else
   \par
   \bgroup\@nobreakfalse\addpenalty\z@\egroup
   \page@free \pagegoal
   \advance \page@free -\pagetotal
     \@tempskipa#1\relax
   \mult@info\z@
       {Current page:\MessageBreak
        height=%
        \the\pagegoal: used \the\pagetotal
        \space -> free=\the\page@free
        \MessageBreak
        needed \the\@tempskipa
              \space(for #1)}%
   \ifdim \page@free <#1\newpage \fi
  \fi}
\def\prepare@multicols{%
  \multicol@leftmargin\@totalleftmargin
  \@totalleftmargin\z@
  \parshape\z@
  \doublecol@number\col@number
  \multiply\doublecol@number\tw@
  \advance\doublecol@number\mult@rightbox
  \if@boxedmulticols
    \let\l@kept@firstmark\kept@firstmark
    \let\l@kept@botmark\kept@botmark
    \global\let\kept@firstmark\@empty
    \global\let\kept@botmark\@empty
  \else
    \nointerlineskip {\topskip\z@\null}%
    \output{%
      \global\setbox\partial@page\vbox
        {%
         \ifvoid\partial@page\else
           \PackageError{multicol}%
            {Error saving partial page}%
            {The part of the page before
             the multicols environment was
             nearly full with^^Jthe result
             that starting the environment
             will produce an overfull
             page.  Some^^Jtext may be lost!
             Please increase \premulticols
             either generally or for this%
             ^^Jenvironment by specifying a
             suitable value in the second
             optional argument to^^Jthe
             multicols environment.}
           \unvbox\partial@page
           \box\last@line
         \fi
         \unvbox\@cclv
         \global\setbox\last@line\lastbox
        }%
           \prep@keptmarks
           \global\let\kept@topmark\firstmark
          }\eject
    \advance\@colroom-\ht\partial@page
    \set@mult@vsize\relax
    \output{\multi@column@out}%
    \init@mult@footins
    \reinsert@footnotes
  \fi
  \vbadness\@Mi \hbadness5000
  \tolerance\multicoltolerance
  \pretolerance\multicolpretolerance
  \setemergencystretch\col@number\hsize
  \set@floatcmds
  \advance\baselineskip\multicolbaselineskip
  \hsize\linewidth \advance\hsize\columnsep
  \advance\hsize-\col@number\columnsep
  \divide\hsize\col@number
  \full@width\linewidth
  \linewidth\hsize
  \columnwidth\hsize
}
\def\init@mult@footins{%
    \multiply\count\footins\col@number
    \multiply\skip \footins\col@number
}
\def\set@mult@vsize#1{%
    \vsize\@colroom
    \@tempdima\baselineskip
    \advance\@tempdima-\topskip
    \advance\vsize\@tempdima
    \vsize\col@number\vsize
    \advance\vsize-\@tempdima
    #1\advance\vsize
        \c@collectmore\baselineskip}
\newdimen\multicol@leftmargin
\def\endmulticols{\par
  \if@boxedmulticols
    \egroup
    \balance@columns
    \return@nonemptymark{first}%
                 \kept@firstmark
    \return@nonemptymark{bot}%
                  \kept@botmark
    \page@sofar
    \global\let\kept@firstmark
               \l@kept@firstmark
    \global\let\kept@botmark
            \l@kept@botmark
    \mult@info\tw@
      {Restore kept marks to\MessageBreak
       first: \meaning\kept@firstmark
       \MessageBreak bot\space\space:
                     \meaning\kept@botmark }%
  \else
   \penalty\z@
    \output{\balance@columns@out}\eject
    \ifvbox\partial@page
         \unvbox\partial@page\fi
     \global\let\kept@firstmark\@empty
     \global\let\kept@botmark\@empty
     \mult@info\tw@
       {Make kept marks empty}%
  \fi
  \@checkend{multicols}%
  \endgroup
  \if@boxedmulticols\else
    \reinsert@footnotes
  \fi
  \global\c@unbalance\z@
  \enough@room\postmulticols
  \addvspace\multicolsep
  \mult@info\z@
     {Ending environment
             \if@boxedmulticols
                \space(boxed mode)\fi
              }}
\newcount\c@unbalance
\newcount\c@collectmore
\newcount\doublecol@number
\newcount\multicoltolerance
\newcount\multicolpretolerance
\newdimen\full@width
\newdimen\page@free
\newdimen\premulticols
\newdimen\postmulticols
\newskip\multicolsep
\newskip\multicolbaselineskip
\newbox\partial@page
\newbox\last@line
\c@unbalance   = 0
\c@collectmore = 0
\col@number = 1
\multicoltolerance = 9999
\multicolpretolerance = -1
\premulticols = 50pt
\postmulticols= 20pt
\multicolsep = 12pt plus 4pt minus 3pt
\multicolbaselineskip=0pt
\def\process@cols#1#2{\count@#1\relax
     \loop
      #2%
     \advance\count@\tw@
     \ifnum\count@<\doublecol@number
   \repeat}
\def\page@sofar{%
   \process@cols\mult@rightbox
       {\ifvoid\count@
          \setbox\count@\hbox to\hsize{}%
        \else
          \wd\count@\hsize
        \fi}%
   \mult@info\z@
    {Column spec:\MessageBreak
       (\the\multicol@leftmargin\space -->
        \the\full@width\space = \the\hsize
        \space x \the\col@number)%
     }%
\ifvmode\else\errmessage{Multicol Error}\fi
   \moveright\multicol@leftmargin
    \hbox to\full@width{%
     \process@cols\mult@gfirstbox{\box\count@
       \hss\vrule\@width\columnseprule\hss}%
     \box\mult@rightbox
      \rlap{\phantom p}%
}%
}
\def\reinsert@footnotes{\ifvoid\footins\else
         \insert\footins{}\fi}
\def\multi@column@out{%
   \ifnum\outputpenalty <-\@M
   \speci@ls \else
   \splittopskip\topskip
   \splitmaxdepth\maxdepth
   \dimen@\@colroom
   \divide\skip\footins\col@number
   \ifvoid\footins \else
      \leave@mult@footins
   \fi
   \process@cols\mult@gfirstbox{%
        \setbox\count@
            \vsplit\@cclv to\dimen@
            \set@keptmarks
            \ifshr@nking
              \setbox\count@
                 \vbox to\dimen@
                  {\unvbox\count@\vfill}%
            \fi
           }%
   \setbox\mult@rightbox
       \vsplit\@cclv to\dimen@
   \set@keptmarks
   \ifshr@nking
      \setbox\mult@rightbox\vbox to\dimen@
          {\unvbox\mult@rightbox\vfill}%
   \fi
   \ifvoid\@cclv \else
       \unvbox\@cclv
       \penalty\outputpenalty
       \ifvoid\footins\else
         \PackageWarning{multicol}%
          {I moved some lines to
           the next page.\MessageBreak
           Footnotes on page
           \thepage\space might be wrong}%
       \fi
       \ifnum \c@tracingmulticols>\thr@@
                    \hrule\allowbreak \fi
   \fi
   \ifx\@empty\kept@firstmark
      \let\firstmark\kept@topmark
      \let\botmark\kept@topmark
   \else
      \let\firstmark\kept@firstmark
      \let\botmark\kept@botmark
   \fi
   \let\topmark\kept@topmark
   \mult@info\tw@
        {Use kept top mark:\MessageBreak
          \meaning\kept@topmark
         \MessageBreak
         Use kept first mark:\MessageBreak
          \meaning\kept@firstmark
        \MessageBreak
         Use kept bot mark:\MessageBreak
          \meaning\kept@botmark
        \MessageBreak
         Produce first mark:\MessageBreak
          \meaning\firstmark
        \MessageBreak
        Produce bot mark:\MessageBreak
          \meaning\botmark
         \@gobbletwo}%
   \setbox\@cclv\vbox{\unvbox\partial@page
                      \page@sofar}%
   \@makecol\@outputpage
     \global\let\kept@topmark\botmark
     \global\let\kept@firstmark\@empty
     \global\let\kept@botmark\@empty
     \mult@info\tw@
        {(Re)Init top mark:\MessageBreak
         \meaning\kept@topmark
         \@gobbletwo}%
   \global\@colroom\@colht
   \process@deferreds
   \@whilesw\if@fcolmade\fi{\@outputpage
      \global\@colroom\@colht
      \process@deferreds}%
   \mult@info\@ne
     {Colroom:\MessageBreak
      \the\@colht\space
              after float space removed
              = \the\@colroom \@gobble}%
    \set@mult@vsize \global
  \fi}
\def\leave@mult@footins{%
   \advance\dimen@-\skip\footins
   \advance\dimen@-\ht\footins
}
\def\speci@ls{%
 \ifnum\outputpenalty <-\@Mi
  \ifnum \outputpenalty<-\@MM
   \PackageError{multicol}{Document end inside
       multicols environment}\@ehd
   \@specialoutput
  \else
   \PackageWarning{multicol}%
           {Floats and marginpars not
            allowed inside `multicols'
            environment!
           \@gobble}%
   \unvbox\@cclv\reinsert@footnotes
   \xdef\@freelist{\@freelist\@currlist}%
   \gdef\@currlist{}%
  \fi
 \else \@doclearpage \fi
}
\def\process@deferreds{%
   \@floatplacement
   \@tryfcolumn\@deferlist
   \if@fcolmade\else
     \begingroup
    \let\@tempb\@deferlist
      \gdef\@deferlist{}%
      \let\@elt\@scolelt
        \@tempb \endgroup
   \fi}
\newif\ifshr@nking
\def\raggedcolumns{%
   \@bsphack\shr@nkingtrue\@esphack}
\def\flushcolumns{%
   \@bsphack\shr@nkingfalse\@esphack}
\def\balance@columns@out{%
   \setbox\mult@box\vbox{\unvbox\@cclv}%
   \balance@columns
   \global\vsize\@colroom
   \global\advance\vsize\ht\partial@page
   \unvbox\partial@page
   \return@nonemptymark{first}\kept@firstmark
   \return@nonemptymark{bot}\kept@botmark
   \page@sofar
   \penalty\z@
}
\def\balance@columns{%
   \get@keptmarks\mult@box
   \setbox\mult@box\vbox{%
        \penalty-\@M
        \unvbox\mult@box
        \remove@discardable@items
        }%
   \@tempdima\topskip
   \splittopskip\@tempdima
       \@plus\multicolundershoot
       \@minus\multicolovershoot
   \splitmaxdepth\maxdepth
   \setbox\@tempboxa\vsplit\mult@box to\z@
   \@tempdima\ht\mult@box
   \advance\@tempdima\dp\mult@box
   \divide\@tempdima\col@number
   \count@\@tempdima
   \divide\count@\baselineskip
   \dimen@\count@\baselineskip
   \advance\dimen@\topskip
   \ifdim \dimen@ >\@tempdima
     \advance\dimen@-\baselineskip
   \fi
   \advance\dimen@\c@unbalance\baselineskip
   \mult@info\@ne
      {Balance columns\on@line:
        \ifnum\c@unbalance=\z@\else
       (off balance=\number\c@unbalance)\fi
      \@gobbletwo}%
   \ifnum\dimen@<\topskip
     \mult@info\@ne
       {Start value
          \the\dimen@  \space ->
          \the\topskip \space (corrected)}%
     \dimen@\topskip
   \fi
   \vbadness\@M
   \vfuzz \col@number\baselineskip
   \last@try-\p@
   \loop
    {\process@cols\mult@grightbox
           {\global\setbox\count@
                   \box\voidb@x}}%
    \global\setbox\mult@grightbox
           \copy\mult@box
   \global\too@badfalse
   {\process@cols\mult@firstbox{%
         \global\setbox\count@
         \vsplit\mult@grightbox to\dimen@
         \ifnum\c@tracingmulticols>\@ne
           \@tempcnta\count@
           \advance\@tempcnta-\mult@grightbox
           \divide\@tempcnta \tw@
           \message{^^JColumn
              \number\@tempcnta\space
               badness: \the\badness\space}%
         \fi
         \ifnum\badness>\c@columnbadness
           \ifnum\c@tracingmulticols>\@ne
             \message{too bad
                  (>\the\c@columnbadness)}%
           \fi
           \global\too@badtrue
         \fi
                        }}%
   \boxmaxdepth\maxdepth
   \global\setbox\mult@grightbox
      \vbox{\unvbox\mult@grightbox}%
   \setbox\mult@nat@firstbox
      \vbox{\unvcopy\mult@firstbox}%
    \ifnum\c@tracingmulticols>\@ne
       \message{^^JFirst column
           = \the\dimen@\space
           (\the\ht\mult@nat@firstbox)}\fi
    \ifnum\c@tracingmulticols>\@ne
      \message{<> last column =
               \the\ht\mult@grightbox^^J}%
     \fi
    \ifdim\ht\mult@grightbox >\dimen@
      \too@badtrue
    \else
      \global\setbox\mult@grightbox
         \vbox to\dimen@
            {\unvbox\mult@grightbox}%
      \ifnum\c@tracingmulticols>\@ne
        \message{Final badness:
                 \the\badness}%
      \fi
      \ifnum\badness>\c@finalcolumnbadness
        \global\setbox\mult@grightbox
         \vbox to\dimen@
              {\unvbox\mult@grightbox\vfill}%
         \ifnum\c@tracingmulticols>\@ne
           \message{ setting natural
              (> \the\c@finalcolumnbadness)}%
         \fi
      \fi
    \fi
    \ifdim\ht\mult@nat@firstbox<\dimen@
      \ifdim\ht\mult@nat@firstbox>\last@try
        \too@badtrue
        \dimen@\ht\mult@nat@firstbox
        \last@try\dimen@
        \advance\dimen@-\p@
      \fi
    \fi
    \iftoo@bad
      \advance\dimen@\p@
    \repeat
   \ifdim\dimen@>\@colroom
      \dimen@\@colroom
   \fi
   \process@cols\mult@rightbox
       {\@tempcnta\count@
        \advance\@tempcnta\@ne
        \setbox\count@\vbox to\dimen@
           {%
            \vskip \z@
              \@plus-\multicolundershoot
              \@minus-\multicolovershoot
            \unvbox\@tempcnta
            \ifshr@nking\vfill\fi}}%
}
\newbox\mult@rightbox
\newbox\mult@grightbox
\newbox\mult@gfirstbox
\newbox\mult@firstbox
\newbox\@tempa\newbox\@tempa
\newbox\@tempa\newbox\@tempa
\newbox\@tempa\newbox\@tempa
\newbox\@tempa\newbox\@tempa
\newbox\@tempa\newbox\@tempa
\newbox\@tempa\newbox\@tempa
\newbox\@tempa\newbox\@tempa
\newbox\@tempa\newbox\@tempa
\newbox\@tempa
\let\@tempa\relax
\@ifundefined{emergencystretch}
     {\newdimen\emergencystretch}{}
\def\setemergencystretch#1#2{%
   \emergencystretch 4pt
   \multiply\emergencystretch#1}

\def\set@floatcmds{%
 \let\@dblfloat\@dbflt
 \def\end@dblfloat{\par
   \vskip\z@
   \egroup
   \color@endbox
   \@largefloatcheck
   \outer@nobreak
   \ifnum\@floatpenalty<\z@
     \@cons\@deferlist\@currbox
   \fi
   \ifnum\@floatpenalty=-\@Mii
     \@Esphack
   \fi}}
\def\kept@topmark{{}{}}
\let\kept@firstmark\@empty
\let\kept@botmark\@empty
\def\return@nonemptymark#1#2{%
  \ifx#2\@empty
  \else
    \mult@info\tw@
      {Returned #1 mark:\MessageBreak
       \meaning#2}%
    \toks@\expandafter{#2}%
    \mark{\the\toks@}%
    \nobreak
  \fi}
\def\get@keptmarks#1{%
  \begingroup
   \vbadness\@M
   \setbox#1\copy#1%
   \setbox#1\vsplit#1to\maxdimen
   \set@keptmarks
 \endgroup
}
\def\set@keptmarks{%
   \ifx\kept@firstmark\@empty
     \expandafter\gdef\expandafter
        \kept@firstmark
        \expandafter{\splitfirstmark}%
     \ifx\kept@firstmark\@empty\else
       \mult@info\tw@
         {Set kept first mark:\MessageBreak
          \meaning\kept@firstmark%
          \@gobbletwo}%
     \fi
   \fi
   \expandafter\def\expandafter\@tempa
      \expandafter{\splitbotmark}%
   \ifx\@tempa\@empty\else
      \global\let\kept@botmark\@tempa
      \mult@info\tw@
        {Set kept bot mark:\MessageBreak
         \meaning\kept@botmark%
         \@gobbletwo}%
   \fi}%
\def\prep@keptmarks{%
   \if@boxedmulticols \else
     \get@keptmarks\partial@page
   \fi}
\def\remove@discardable@items{%
        \unskip\unpenalty\unkern
        \unskip\unpenalty\unkern
        \unskip\unpenalty\unkern
        \unskip\unpenalty\unkern
}
\newif\iftoo@bad
\newcount\c@columnbadness
\c@columnbadness=10000
\newcount\c@finalcolumnbadness
\c@finalcolumnbadness=9999

\newdimen\last@try

\newdimen\multicolovershoot
\multicolovershoot=2pt
\newdimen\multicolundershoot
\multicolundershoot=2pt
\newbox\mult@nat@firstbox
\def\mult@info#1#2{%
  \ifnum\c@tracingmulticols>#1%
   \GenericWarning
       {(multicol)\@spaces\@spaces}%
       {Package multicol: #2}%
  \fi
}
 \@namedef{multicols*}{%
   \ifinner
     \PackageWarning{multicol}%
       {multicols* inside a box does
        not make sense.\MessageBreak
        Going to balance anyway}%
   \else
     \let\balance@columns@out
         \multi@column@out
   \fi
   \begin{multicols}
}
 \@namedef{endmulticols*}{\vfill
   \end{multicols}}
\endinput
%%
%% End of file `multicol.sty'.
