%%
%% This is file `nomulticol.sty',
%% a tweak in package multicol.sty [2000/07/10 v1.5z multicolumn formatting (FMi)]
%% Tweaked by Dirk Roorda 2003/01/09
%%
%% purpose: to have the \begin{multicols} \end{multicols} functionality without
%% putting the material inside a group
%%
%% reason: in PassiveTeX a fo:flow is embedded in a multicols environment.
%% But the fo:block span="all" must be able to interrupt this.
%% However, sayin \end{multicols} just before and \begin{multicols}{N} just after
%% does not work, because it makes the attributes, set between the start of the flow
%% and the beginning of the block, invisible.
%% That's why a grouping-transparent multicol setup is needed.
%%
%% method:
%% providing macros \nobeginmulticols \noendmulticols that do essentially the same
%% but do not create a group.
%% I just removed the crucial \begingroup and \endgroup from \mult@@cols and \endmulticols.
%% Instead of relying on the TeX group restore mechanism, I have added macros
%% \save@mult@settings and \restore@mult@settings to mimick the grouping as far
%% as the settings for the multicol package are concerned.
%%
%% This is file `multicol.sty',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% multicol.dtx (with options: `package,badness,check,marktrace,nobalance,colbreak')
%%
%% This is a generated file.
%%
%% Copyright 1993 1994 1995 1996 1997 1998 1999 2000
%% The LaTeX3 Project and any individual authors listed elsewhere
%% in this file.
%%
%% This file was generated from file(s) of the Standard LaTeX `Tools Bundle'.
%% --------------------------------------------------------------------------
%%
%% It may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either version 1.2
%% of this license or (at your option) any later version.
%% The latest version of this license is in
%% http://www.latex-project.org/lppl.txt
%% and version 1.2 or later is part of all distributions of LaTeX
%% version 1999/12/01 or later.
%%
%% This file may only be distributed together with a copy of the LaTeX
%% `Tools Bundle'. You may however distribute the LaTeX `Tools Bundle'
%% without such generated files.
%%
%% The list of all files belonging to the LaTeX `Tools Bundle' is
%% given in the file `manifest.txt'.
%%
%% Package `multicol' to use with LaTeX2e
%% Copyright 1989-2000 Frank Mittelbach
%%
%% 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 or use 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 for using multicol if
%%
%% - the product is a document and the producer has decided to
%% include multicol to typeset (parts of) the document or has
%% directed the author of the document to include multicol (for
%% example, by providing a class file to be used by the author)
%%
%% - the product is a LaTeX class or package that includes multicol
%%
%%
%% There is no moral obligation in case
%%
%% - the product is a document but producer has not directed
%% the author to include multicol (in that case the moral obligation
%% lies with the author of the document)
%%
%% - the product does not involve typesetting, e.g., consists, for
%% example, of distributing multicol and its documentation.
%%
%% - the product is not proprietary, i.e., is made available as free
%% software itself (which doesn't prohibit its commercial marketing)
%%
%% - multicol is used for non-commercial purposes
%%
%%
%% 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{nomulticol}
[2003/01/09 v1.5z multicolumn formatting (FMi)]
%% \CheckSum{1451}
%% \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{nomulticol}{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
%%
%% Start Additions by Dirk Roorda
%%
\def\show@mult@settings{%
\typeout{LINEWIDTH=SAVED=\sav@linewidth; CURRENT=\the\linewidth}%
\typeout{COLUMNWIDTH=SAVED=\sav@columnwidth; CURRENT=\the\columnwidth}%
\typeout{FULL@WIDTH=SAVED=\sav@full@width; CURRENT=\the\full@width}%
\typeout{HSIZE=SAVED=\sav@hsize; CURRENT=\the\hsize}%
\typeout{VSIZE=SAVED=\sav@vsize; CURRENT=\the\vsize}%
\typeout{BASELINESKIP=SAVED=\sav@baselineskip; CURRENT=\the\baselineskip}%
\typeout{EMERGENCYSTRETCH=SAVED=\sav@emergencystretch; CURRENT=\the\emergencystretch}%
\typeout{PRETOLERANCE=SAVED=\sav@pretolerance; CURRENT=\the\pretolerance}%
\typeout{TOLERANCE=SAVED=\sav@tolerance; CURRENT=\the\tolerance}%
\typeout{HBADNESS=SAVED=\sav@hbadness; CURRENT=\the\hbadness}%
\typeout{VBADNESS=SAVED=\sav@vbadness; CURRENT=\the\vbadness}%
\typeout{PARSHAPE=SAVED=\sav@parshape; CURRENT=\the\parshape}%
\typeout{@TOTALLEFTMARGIN=SAVED=\sav@totalleftmargin; CURRENT=\the\@totalleftmargin}%
\typeout{MULTICOL@LEFTMARGIN=SAVED=\sav@multicol@leftmargin; CURRENT=\the\multicol@leftmargin}%
\typeout{@COLROOM=SAVED=\sav@colroom; CURRENT=\the\@colroom}%
\typeout{DOUBLECOL@NUMBER=SAVED=\sav@doublecol@number; CURRENT=\the\doublecol@number}%
\typeout{@TEMPDIMA=SAVED=\sav@tempdima; CURRENT=\the\@tempdima}%
\typeout{FOOTINS=SAVED=\sav@count@footins; CURRENT=\the\count\footins}%
\typeout{FOOTINS=SAVED=\sav@skip@footins; CURRENT=\the\skip\footins}%
%
\typeout{COL@NUMBER=SAVED=\sav@col@number; CURRENT=\the\col@number}%
\typeout{PAGE@FREE=SAVED=\sav@page@free; CURRENT=\the\page@free}%
\typeout{@TEMPSKIPA=SAVED=\sav@tempskipa; CURRENT=\the\@tempskipa}%
}
\def\explain@mult@settings{%
\typeout{linewidth=\meaning\linewidth}%
\typeout{columnwidth=\meaning\columnwidth}%
\typeout{full-width=\meaning\full@width}%
\typeout{hsize=\meaning\hsize}%
\typeout{vsize=\meaning\vsize}%
\typeout{baselineskip=\meaning\baselineskip}%
\typeout{emergencystretch=\meaning\emergencystretch}%
\typeout{pretolerance=\meaning\pretolerance}%
\typeout{tolerance=\meaning\tolerance}%
\typeout{hbadness=\meaning\hbadness}%
\typeout{vbadness=\meaning\vbadness}%
\typeout{parshape=\meaning\parshape}%
\typeout{-totalleftmargin=\meaning\@totalleftmargin}%
\typeout{multicol-leftmargin=\meaning\multicol@leftmargin}%
\typeout{-colroom=\meaning\@colroom}%
\typeout{doublecol-number=\meaning\doublecol@number}%
\typeout{-tempdima=\meaning\@tempdima}%
\typeout{-tempskipa=\meaning\@tempskipa}%
\typeout{page-free=\meaning\page@free}%
\typeout{col-number=\meaning\col@number}%
}
\def\save@mult@settings{%
\xdef\sav@linewidth{\the\linewidth}%
\xdef\sav@columnwidth{\the\columnwidth}%
\xdef\sav@full@width{\the\full@width}%
\xdef\sav@hsize{\the\hsize}%
\xdef\sav@vsize{\the\vsize}%
\xdef\sav@baselineskip{\the\baselineskip}%
\xdef\sav@emergencystretch{\the\emergencystretch}%
\xdef\sav@pretolerance{\the\pretolerance}%
\xdef\sav@tolerance{\the\tolerance}%
\xdef\sav@hbadness{\the\hbadness}%
\xdef\sav@vbadness{\the\vbadness}%
\xdef\sav@parshape{\the\parshape}%
\xdef\sav@totalleftmargin{\the\@totalleftmargin}%
\xdef\sav@multicol@leftmargin{\the\multicol@leftmargin}%
\xdef\sav@colroom{\the\@colroom}%
\xdef\sav@doublecol@number{\the\doublecol@number}%
\xdef\sav@tempdima{\the\@tempdima}%
\xdef\sav@count@footins{\the\count\footins}%
\xdef\sav@skip@footins{\the\skip\footins}%
\global\let\sav@dblfloat\@dblfloat
\global\let\sav@end@dblfloat\end@dblfloat
\xdef\sav@output{\the\output}%
\global\let\sav@reserved@c\reserved@c
%
\xdef\sav@col@number{\the\col@number}%
\xdef\sav@page@free{\the\page@free}%
\xdef\sav@tempskipa{\the\@tempskipa}%
\global\let\sav@reserved@a\reserved@a
\global\let\sav@reserved@b\reserved@b
\global\let\sav@reserved@d\reserved@d
\global\let\sav@let@token\@let@token
\global\let\sav@footnotetext\@footnotetext
\global\let\sav@orig@footnotetext\orig@footnotetext
}
\def\restore@mult@settings{%
\global\linewidth\sav@linewidth\relax
\global\columnwidth\sav@columnwidth\relax
\global\full@width\sav@full@width\relax
\global\hsize\sav@hsize\relax
\global\vsize\sav@vsize\relax
\global\baselineskip\sav@baselineskip\relax
\global\emergencystretch\sav@emergencystretch\relax
\global\pretolerance\sav@pretolerance\relax
\global\tolerance\sav@tolerance\relax
\global\hbadness\sav@hbadness\relax
\global\vbadness\sav@vbadness\relax
\global\parshape\sav@parshape\relax
\global\@totalleftmargin\sav@totalleftmargin\relax
\global\multicol@leftmargin\sav@multicol@leftmargin\relax
\global\@colroom\sav@colroom\relax
\global\doublecol@number\sav@doublecol@number\relax
\global\@tempdima\sav@tempdima\relax
\global\count\footins\sav@count@footins\relax
\global\skip\footins\sav@skip@footins\relax
\global\let\@dblfloat\sav@dblfloat
\global\let\end@dblfloat\sav@end@dblfloat
\global\expandafter\output\expandafter{\sav@output}%
\global\let\reserved@c\sav@reserved@c
%
\global\col@number\sav@col@number\relax
\global\page@free\sav@page@free\relax
\global\@tempskipa\sav@tempskipa\relax
\global\let\reserved@a\sav@reserved@a
\global\let\reserved@b\sav@reserved@b
\global\let\reserved@d\sav@reserved@d
\global\let\@let@token\sav@let@token
\global\let\@footnotetext\sav@footnotetext
\global\let\orig@footnotetext\sav@orig@footnotetext
}
\def\nobeginmulticols#1{%
\typeout{^^JSTART #1 COLUMNS}%
\save@mult@settings
\global\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}%
\global\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}%
\global\col@number10 \fi
\global\let\orig@footnotetext\@footnotetext
\long\gdef\@footnotetext##1{\begingroup
\columnwidth\textwidth
\orig@footnotetext{##1}\endgroup}%
\@ifnextchar[\nomult@cols{\nomult@cols[]}}
\def\nomult@cols[#1]{\@ifnextchar[%
{\nomult@@cols{#1}}%
{\nomult@@cols{#1}[\premulticols]}}
\def\nomult@@cols#1[#2]{%
\par
\ifinner \global\@boxedmulticolstrue
\else
\ifnum \doublecol@number>\z@
\global\@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
\global\setbox\mult@box\vbox\bgroup
\fi
\ignorespaces}
\def\noendmulticols{\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@
\global\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
\global\c@unbalance\z@
\if@boxedmulticols\else
\reinsert@footnotes
\ifdim \pagegoal=\maxdimen
\global\vsize\@colroom
\else
\enough@room\postmulticols
\fi
\fi
\addvspace\multicolsep
\mult@info\z@
{Ending environment
\if@boxedmulticols
\space(boxed mode)\fi
}%
\typeout{^^JSTOP \the\col@number\space COLUMNS}%
\restore@mult@settings
}
%%
%% End Additions by Dirk Roorda
%%
%%
%% The following code is unmodified, except that many local
%% statements have been globalized
%%
\newif\if@boxedmulticols
\global\@boxedmulticolsfalse
\newbox\mult@box
\def\enough@room#1{%
\if@boxedmulticols\else
\par
\bgroup\@nobreakfalse\addpenalty\z@\egroup
\global\page@free\pagegoal
\global\advance\page@free -\pagetotal
\global\@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}
\newif\ifmult@just@prepared
\def\prepare@multicols{%
\global\multicol@leftmargin\@totalleftmargin
\global\@totalleftmargin\z@
\global\parshape\z@
\global\doublecol@number\col@number
\global\multiply\doublecol@number\tw@
\global\advance\doublecol@number\mult@rightbox
\if@boxedmulticols
\global\let\l@kept@firstmark\kept@firstmark
\global\let\l@kept@botmark\kept@botmark
\global\let\kept@firstmark\@empty
\global\let\kept@botmark\@empty
\else
\nointerlineskip {\global\topskip\z@\null}%
\global\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
\global\advance\@colroom-\ht\partial@page
\set@mult@vsize\relax
\global\output{\multi@column@out}%
\init@mult@footins
\reinsert@footnotes
\fi
\global\vbadness\@Mi \global\hbadness5000
\global\tolerance\multicoltolerance
\global\pretolerance\multicolpretolerance
\setemergencystretch\col@number\hsize
\set@floatcmds
\global\advance\baselineskip\multicolbaselineskip
\global\hsize\linewidth \global\advance\hsize\columnsep
\global\advance\hsize-\col@number\columnsep
\global\divide\hsize\col@number
\global\full@width\linewidth
\global\linewidth\hsize
\global\columnwidth\hsize
\global\mult@just@preparedtrue
%\typeout{SETTING JUSTPREPARED to TRUE}%
}
\def\refreshmulticols{%
%\typeout{REFRESH?}%
\ifmult@just@prepared
%\typeout{NO, JUSTPREPARED!}%
\else
%\typeout{YES}%
\global\multicol@leftmargin\@totalleftmargin
\global\@totalleftmargin\z@
\global\parshape\z@
\global\doublecol@number\col@number
\global\multiply\doublecol@number\tw@
\global\advance\doublecol@number\mult@rightbox
\if@boxedmulticols
\global\let\l@kept@firstmark\kept@firstmark
\global\let\l@kept@botmark\kept@botmark
\global\let\kept@firstmark\@empty
\global\let\kept@botmark\@empty
\else
\nointerlineskip {\global\topskip\z@\null}%
\global\advance\@colroom-\ht\partial@page
\set@mult@vsize\relax
\init@mult@footins
% \reinsert@footnotes
\fi
\global\vbadness\@Mi \global\hbadness5000
\global\tolerance\multicoltolerance
\global\pretolerance\multicolpretolerance
\setemergencystretch\col@number\hsize
\set@floatcmds
% \global\advance\baselineskip\multicolbaselineskip
\global\hsize\linewidth \global\advance\hsize\columnsep
\global\advance\hsize-\col@number\columnsep
\global\divide\hsize\col@number
\global\full@width\linewidth
\global\linewidth\hsize
\global\columnwidth\hsize
\global\mult@just@preparedtrue
%\typeout{SETTING JUSTPREPARED to TRUE}%
\fi
}
\def\init@mult@footins{%
\global\multiply\count\footins\col@number
\global\multiply\skip \footins\col@number
}
\def\set@mult@vsize#1{%
\global\vsize\@colroom
\global\@tempdima\baselineskip
\global\advance\@tempdima-\topskip
\global\advance\vsize\@tempdima
\global\vsize\col@number\vsize
\global\advance\vsize-\@tempdima
#1\global\advance\vsize\c@collectmore\baselineskip}
\newdimen\multicol@leftmargin
\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
\global\c@unbalance = 0
\global\c@collectmore = 0
\global\col@number = 1
\global\multicoltolerance = 9999
\global\multicolpretolerance = -1
\global\premulticols = 50pt
\global\postmulticols= 20pt
\global\multicolsep = 12pt plus 4pt minus 3pt
\global\multicolbaselineskip=0pt
\def\process@cols#1#2{\global\count@#1\relax
\loop
#2%
\global\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{\normalcolor\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
\global\mult@just@preparedfalse
%\typeout{SETTING JUSTPREPARED TO FALSE}%
\ifvoid\colbreak@box
\else
\mult@info\@ne{Re-adding forced
break(s) for splitting}%
\setbox\@cclv\vbox{%
\unvbox\colbreak@box
\penalty-\@Mv\unvbox\@cclv}%
\fi
\splittopskip\topskip
\splitmaxdepth\maxdepth
\global\dimen@\@colroom
\global\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
}%
\global\setbox\mult@rightbox\vsplit\@cclv to\dimen@
\set@keptmarks
\ifshr@nking
\global\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
\global\let\firstmark\kept@topmark
\global\let\botmark\kept@topmark
\else
\global\let\firstmark\kept@firstmark
\global\let\botmark\kept@botmark
\fi
\global\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{%
\global\advance\dimen@-\skip\footins
\global\advance\dimen@-\ht\footins
}
\def\speci@ls{%
\ifnum\outputpenalty <-\@Mi
\ifnum \outputpenalty<-\@MM
\PackageError{multicol}{Document end
inside multicols environment}\@ehd
\@specialoutput
\else
\ifnum\outputpenalty = -\@Mv
\mult@info\@ne{Forced column
break seen}%
\global\advance\vsize-\pagetotal
\global\setbox\colbreak@box
\vbox{\ifvoid\colbreak@box
\else
\unvbox\colbreak@box
\penalty-\@Mv
\fi
\unvbox\@cclv}
\reinsert@footnotes
\else
\PackageWarning{multicol}%
{Floats and marginpars not
allowed inside `multicols'
environment!
\@gobble}%
\unvbox\@cclv\reinsert@footnotes
\xdef\@freelist{\@freelist\@currlist}%
\gdef\@currlist{}%
\fi
\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\global\shr@nkingtrue\@esphack}
\def\flushcolumns{%
\@bsphack\global\shr@nkingfalse\@esphack}
\def\balance@columns@out{%
\global\setbox\mult@box\vbox{%
\ifvoid\colbreak@box\else
\unvbox\colbreak@box\break
\mult@info\@ne{Re-adding
forced break(s) in balancing}%
\fi
\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
\global\setbox\mult@box\vbox{%
\penalty-\@M
\unvbox\mult@box
\remove@discardable@items
}%
\global\@tempdima\topskip
\global\splittopskip\@tempdima
\@plus\multicolundershoot
\@minus\multicolovershoot
\splitmaxdepth\maxdepth
\setbox\@tempboxa\vsplit\mult@box to\z@
\global\@tempdima\ht\mult@box
\global\advance\@tempdima\dp\mult@box
\global\divide\@tempdima\col@number
\global\count@\@tempdima
\global\divide\count@\baselineskip
\global\dimen@\count@\baselineskip
\global\advance\dimen@\topskip
\ifdim \dimen@ >\@tempdima
\global\advance\dimen@-\baselineskip
\fi
\global\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)}%
\global\dimen@\topskip
\fi
\global\vbadness\@M
\global\vfuzz \col@number\baselineskip
\global\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
}}%
\global\boxmaxdepth\maxdepth
\global\setbox\mult@grightbox
\vbox{\unvbox\mult@grightbox}%
\global\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@
\global\too@badtrue
\ifnum\c@tracingmulticols>\@ne
\typeout{Rejected: last
column too large!}%
\fi
\else
\setbox\@tempboxa
\copy\mult@grightbox
\setbox\z@\vsplit\@tempboxa to\maxdimen
\ifvoid\@tempboxa
\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
\else
\global\too@badtrue
\ifnum\c@tracingmulticols>\@ne
\typeout{Rejected: unprocessed
forced break(s) in last column!}%
\fi
\fi
\fi
\ifdim\ht\mult@nat@firstbox<\dimen@
\ifdim\ht\mult@nat@firstbox>\last@try
\global\too@badtrue
\ifnum\c@tracingmulticols>\@ne
\typeout{Retry: using natural
height of first column!}%
\fi
\global\dimen@\ht\mult@nat@firstbox
\global\last@try\dimen@
\global\advance\dimen@-\p@
\fi
\fi
\iftoo@bad
\global\advance\dimen@\p@
\repeat
\if@boxedmulticols\else
\ifdim\dimen@>\@colroom
\global\dimen@\@colroom
\fi
\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
\global\let\@tempa\relax
\@ifundefined{emergencystretch}
{\newdimen\emergencystretch}{}
\def\setemergencystretch#1#2{%
\global\emergencystretch 4pt
\global\multiply\emergencystretch#1}
\def\set@floatcmds{%
\global\let\@dblfloat\@dbflt
\gdef\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{{}{}}
\global\let\kept@firstmark\@empty
\global\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\gdef\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
\global\c@columnbadness=10000
\newcount\c@finalcolumnbadness
\global\c@finalcolumnbadness=9999
\newdimen\last@try
\newdimen\multicolovershoot
\global\multicolovershoot=2pt
\newdimen\multicolundershoot
\global\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
\global\let\balance@columns@out
\multi@column@out
\fi
\begin{multicols}
}
\@namedef{endmulticols*}{\vfill
\end{multicols}}
\mathchardef\@Mv=10005
\def\columnbreak{%
\ifnum\col@number<\tw@
\PackageError{multicol}%
{\noexpand\columnbreak outside multicols}%
{This command can only be used within
a multicols or multicols* environment.}%
\else
\ifvmode
\penalty -\@Mv\relax
\else
\@bsphack
\vadjust{\penalty -\@Mv\relax}%
\@esphack
\fi
\fi}
\newbox\colbreak@box
\global\let\interbeginmulticols\nobeginmulticols
\global\let\interendmulticols\noendmulticols
\endinput
%%
%% End of file `multicol.sty'.