Current File : //usr/share/texlive/texmf-dist/tex/latex/tools/multicol.sty |
%%
%% 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.
%%
%% The source is maintained by the LaTeX Project team and bug
%% reports for it can be opened at https://latex-project.org/bugs/
%% (but please observe conditions on bug reports sent to that address!)
%%
%% Copyright (C) 1993-2020
%% 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.3c
%% of this license or (at your option) any later version.
%% The latest version of this license is in
%% https://www.latex-project.org/lppl.txt
%% and version 1.3c or later is part of all distributions of LaTeX
%% version 2005/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-2019 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
%%
%%
%% Determining 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}[2018-04-01]
\providecommand\DeclareRelease[3]{}
\providecommand\DeclareCurrentRelease[2]{}
\DeclareRelease{}{2017-04-11}{multicol-2017-04-11.sty}
\DeclareCurrentRelease{}{2018-04-01}
\ProvidesPackage{multicol}
[2019/12/09 v1.8y multicolumn formatting (FMi)]
%%
\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}
\let\mc@gridwarn\maxdimen
\DeclareOption{grid}{\def\mc@gridwarn{\@maxdepth}}
\DeclareOption{colaction}{%
\def\mc@col@status@write{%
\protected@write\@auxout{}%
{\string\mc@col@status
{\ifmc@firstcol 1\else 2\fi}}%
\mc@firstcolfalse}%
\def\mc@lastcol@status@write{%
\protected@write\@auxout{}%
{\string\mc@col@status{3}}}%
}
\let\mc@col@status@write\relax
\let\mc@lastcol@status@write\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>20
\PackageError{multicol}%
{Too many columns}%
{Current implementation doesn't
support more than 20 columns.%
\MessageBreak
I therefore use 20 columns instead}%
\col@number20 \fi
\ifx\@footnotetext\mult@footnotetext\else
\let\orig@footnotetext\@footnotetext
\let\@footnotetext\mult@footnotetext
\fi
\@ifnextchar[\mult@cols{\mult@cols[]}}
\long\def\mult@footnotetext#1{\begingroup
\columnwidth\textwidth
\orig@footnotetext{#1}\endgroup}
\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
\ifdim \prevdepth = -\@m\p@
\else
\@tempcnta\prevdepth
\@tempcntb\baselineskip
\divide\@tempcnta\@tempcntb
\advance\@tempcnta\@ne
\dimen@\prevdepth
\advance\dimen@ -\@tempcnta\baselineskip
\advance\dimen@ \topskip
\kern-\dimen@
\fi
\begingroup
\prepare@multicols
\if@boxedmulticols
\setbox\mult@box\vbox\bgroup
\color@setgroup
\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
\def\clearpage{%
\ifx\@deferlist\@empty\else
\PackageError{multicol}%
{Deferred floats not cleared}%
{A \string\clearpage\space inside multicols acts like
\string\newpage\space and doesn't clear floats.\MessageBreak
Move it before the multicols environment if you need it.}%
\fi
\newpage}%
\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
\advance\vsize\col@number\baselineskip
#1\advance\vsize
\c@collectmore\baselineskip}
\newdimen\multicol@leftmargin
\mathchardef\@Mvi=10006 % 10005 is \columnbreak
\def\endmulticols{\par
\if@boxedmulticols
\remove@discardable@items\color@endgroup\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
\ifdim\pagegoal=\maxdimen
\ifvoid\colbreak@box\else
\mult@info\@ne{Re-adding forced
break(s) for splitting}%
\unvbox\colbreak@box\fi
\fi
\penalty\z@
\penalty-\@Mvi
\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
\mc@col@status@write
\else
\reinsert@footnotes
\ifdim \pagegoal=\maxdimen
\global\vsize\@colroom
\else
\enough@room\postmulticols
\fi
\fi
\addvspace\multicolsep
\prevdepth\z@
\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
\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}%
\count@\col@number \advance\count@\m@ne
\mult@info\z@
{Column spec: \the\full@width\space = indent
+ columns + sep =\MessageBreak
\the\multicol@leftmargin\space
+ \the\col@number\space
x \the\hsize\space
+ \the\count@\space
x \the\columnsep
}%
\ifvmode\else\errmessage{Multicol Error}\fi
\nointerlineskip
\setbox\z@\hbox{p}\global\dimen\tw@\dp\z@
\moveright\multicol@leftmargin
\hbox to\full@width{%
\mc@align@columns
\rlap{\phantom p}%
}%
\prevdepth\z@
\kern-\dimen\tw@
\ifdim\dimen\tw@ > \mc@gridwarn
\PackageWarning{multicol}%
{Very deep columns!\MessageBreak
Grid alignment might be broken}%
\fi
}
\def\columnseprulecolor{\normalcolor}
\def\reinsert@footnotes{\ifvoid\footins\else
\insert\footins{}\fi}
\def\vfilmaxdepth{\vskip \z@ \@plus .0001fil
\@minus \@maxdepth}
\def\multi@column@out{%
\ifnum\outputpenalty <-\@M
\speci@ls \else
\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
\boxmaxdepth\@maxdepth
\dimen@\@colroom
\divide\skip\footins\col@number
\ifvoid\footins \else
\leave@mult@footins
\fi
\ifvbox \@kludgeins
\advance \dimen@ -\ht\@kludgeins
\ifdim \wd\@kludgeins>\z@
\shr@nkingtrue
\fi
\fi
\process@cols\mult@gfirstbox{%
\setbox\count@
\vsplit\@cclv to\dimen@
\set@keptmarks
\setbox\count@
\vbox to\dimen@
{\unvbox\count@
\ifshr@nking\vfilmaxdepth\fi}%
}%
\setbox\mult@rightbox
\vsplit\@cclv to\dimen@
\set@keptmarks
\setbox\mult@rightbox\vbox to\dimen@
{\unvbox\mult@rightbox
\ifshr@nking\vfilmaxdepth\fi}%
\ifvoid\@cclv \else
\unvbox\@cclv
\ifnum\outputpenalty=\@M
\else
\penalty\outputpenalty
\fi
\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}%
\boxmaxdepth\maxdimen
\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
\global \@mparbottom \z@
\global \@textfloatsheight \z@
\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
\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
\boxmaxdepth\@maxdepth
\setbox\@cclv\vbox{%
\unvbox\@cclv
\remove@discardable@items}%
\dimen@\dp\@cclv
\unvbox\@cclv
\kern-\dimen@
}%
\reinsert@footnotes
\else
\ifnum\outputpenalty = -\@Mvi
\mult@info\@ne{End penalty of multicols seen}%
\outputpenalty\@M % pretend we had a natural forced break
\balance@columns@out
\else
\PackageWarningNoLine{multicol}%
{Floats and marginpars not
allowed inside `multicols'
environment!}%
\unvbox\@cclv\reinsert@footnotes
\xdef\@freelist{\@freelist\@currlist}%
\gdef\@currlist{}%
\fi
\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\shr@nkingtrue\@esphack}
\def\flushcolumns{%
\@bsphack\shr@nkingfalse\@esphack}
\def\balance@columns@out{%
\setbox\mult@box\vbox{%
\ifvoid\colbreak@box\else
\unvbox\colbreak@box
\penalty-\@Mv
\mult@info\@ne{Re-adding
forced break(s) in balancing}%
\fi
\unvbox\@cclv
\remove@discardable@items
}%
\balance@columns
\iftoo@bad
\mult@info\@ne
{Balancing failed ...
cut a normal page}%
\setbox\@cclv\vbox
{\vskip\topskip
\vskip-\splittopskip
\unvbox\mult@box
\penalty-\@Mvi
}%
\multi@column@out
\else
\global\vsize\@colroom
\global\advance\vsize\ht\partial@page
\ifvbox\@kludgeins\insert\@kludgeins
{\unvbox\@kludgeins}\fi
\unvbox\partial@page
\return@nonemptymark{first}\kept@firstmark
\return@nonemptymark{bot}\kept@botmark
\page@sofar
\penalty\z@
\fi
}
\def\balance@columns{%
\get@keptmarks\mult@box
\setbox\mult@box\vbox{%
\penalty-\@M
\unvbox\mult@box
}%
\@tempdima\topskip
\splittopskip\@tempdima
\@plus\multicolundershoot
\@minus\multicolovershoot
\splitmaxdepth\@maxdepth
\boxmaxdepth\@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
\@tempdima\dimexpr
\topskip +\c@minrows\baselineskip-\baselineskip\relax
\ifnum\dimen@<\@tempdima
\mult@info\@ne
{Start value
\the\dimen@ \space ->
\the\@tempdima \space (corrected for minrows)}%
\dimen@\@tempdima
\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 \maxdimen
\last@try-\p@
\loop
{\process@cols\mult@grightbox
{\global\setbox\count@
\box\voidb@x}}%
\global\setbox\mult@grightbox
\copy\mult@box
\too@badfalse
\forcedbreak@leftoverfalse
{\process@cols\mult@firstbox{%
\global\setbox\count@
\vsplit\mult@grightbox to\dimen@
\global\setbox\count@
\vbox to\dimen@
{\unvbox\count@}%
\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
\too@badtrue
\fi
}}%
\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
\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\vfil}%
\ifnum\c@tracingmulticols>\@ne
\message{ setting natural
(> \the\c@finalcolumnbadness)}%
\fi
\fi
\else
\@tempdima\@colroom
\advance\@tempdima \maxbalancingoverflow
\ifdim \dimen@ < \@tempdima
\too@badtrue
\ifnum\c@tracingmulticols>\@ne
\typeout{Rejected: unprocessed
forced break(s) in last column!}%
\fi
\else
\forcedbreak@leftovertrue
\ifnum\c@tracingmulticols>\@ne
\typeout{Failed: columns too large
with unprocessed forced break(s)!}%
\fi
\fi
\fi
\fi
\ifdim\ht\mult@nat@firstbox<\dimen@
\ifdim\ht\mult@nat@firstbox>\last@try
\too@badtrue
\ifnum\c@tracingmulticols>\@ne
\typeout{Retry: using natural
height of first column!}%
\fi
\dimen@\ht\mult@nat@firstbox
\last@try\dimen@
\advance\dimen@-\p@
\fi
\fi
\iftoo@bad
\advance\dimen@\p@
\repeat
\ifforcedbreak@leftover
\too@badtrue
\else
\if@boxedmulticols\else
\ifdim\dimen@>\@colroom
\dimen@\@colroom
\fi
\fi
\process@cols\mult@rightbox
{\@tempcnta\count@
\advance\@tempcnta\@ne
\vfuzz\z@
\setbox\count@\vbox to\dimen@
{%
\vskip \z@
\@plus-\multicolundershoot
\@minus-\multicolovershoot
\unvbox\@tempcnta
\ifshr@nking\vfilmaxdepth\fi
}%
\ifnum\badness>\@M
\vfuzz\maxdimen % no overfull warning
\setbox\@tempboxa \vbox to\dimen@
{\vskip-\maxbalancingoverflow
\unvcopy\count@}%
\ifnum\badness>\@M
\mult@info\@ne
{Balanced column more than
\the\maxbalancingoverflow\space
too large}%
\too@badtrue
\else
\mult@info\@ne
{Balanced column
too large, but less than
\the\maxbalancingoverflow}%
\fi
\fi
}%
\fi
}
\newdimen\maxbalancingoverflow
\maxbalancingoverflow=12pt
\ifnum\numexpr \count20-\count14-1<41 % = 2 * 20 + 1
\count14=\@cclv
\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\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
\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{\@endfloatbox
\@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}
\skip0=0pt
\edef\the@zero@skip{\the\skip0}
\def\remove@discardable@items{%
\unpenalty
\edef\@tempa{\the\lastskip}%
\unskip
\ifx\@tempa\the@zero@skip
\edef\@tempb{\the\lastskip}%
\ifx\@tempb\the@zero@skip
\else
\unskip
\ifnum \lastpenalty=\@M
\vskip\@tempb\vskip\@tempa\relax
\else
\remove@discardable@items
\fi
\fi
\else
\remove@discardable@items
\fi
}
\newif\iftoo@bad
\def\too@badtrue{\global\let\iftoo@bad\iftrue}
\def\too@badfalse{\global\let\iftoo@bad\iffalse}
\newif\ifforcedbreak@leftover
\newcount\c@minrows
\c@minrows=1
\newcount\c@columnbadness
\c@columnbadness=10000
\newcount\c@finalcolumnbadness
\c@finalcolumnbadness=9999
\newdimen\last@try
\newdimen\multicolovershoot
\newdimen\multicolundershoot
\multicolovershoot=0pt
\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
\def\balance@columns@out
{\multi@column@out \penalty-\@Mvi }%
\fi
\begin{multicols}
}
\@namedef{endmulticols*}{%
\par
\ifdim\lastskip>\z@ \vskip-\lastskip \fi
\ifdim \prevdepth>\z@
\vskip-\ifdim\prevdepth>\boxmaxdepth
\boxmaxdepth
\else \prevdepth \fi
\fi
\ifshr@nking\else
\vfil
\fi
\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
\def\LR@column@boxes{%
\process@cols\mult@gfirstbox{%
\ifdim\dp\count@>\dimen\tw@
\global\dimen\tw@\dp\count@ \fi
\mc@col@status@write
\box\count@
\hss{\columnseprulecolor\vrule
\@width\columnseprule}\hss}%
\ifdim\dp\mult@rightbox>\dimen\tw@
\global\dimen\tw@\dp\mult@rightbox \fi
\mc@lastcol@status@write
\box\mult@rightbox
}
\def\RL@column@boxes{%
\process@cols\mult@gfirstbox{%
\hskip\hsize
\hss{\columnseprulecolor\vrule
\@width\columnseprule}\hss
}%
\hskip\hsize
\process@cols\mult@gfirstbox{%
\ifdim\dp\count@>\dimen\tw@
\global\dimen\tw@\dp\count@ \fi
\hskip-\hsize
\mc@col@status@write
\box\count@
\hskip-\hsize
\hskip-\columnsep
}%
\ifdim\dp\mult@rightbox>\dimen\tw@
\global\dimen\tw@\dp\mult@rightbox \fi
\hskip-\hsize
\mc@lastcol@status@write
\box\mult@rightbox
\hskip-\hsize
\hskip\full@width
}
\newcommand\RLmulticolcolumns
{\let\mc@align@columns
\RL@column@boxes}
\newcommand\LRmulticolcolumns
{\let\mc@align@columns
\LR@column@boxes}
\LRmulticolcolumns
\newcount\mc@col@check@num
\newcommand\docolaction{%
\ifx\mc@col@status@write\relax
\PackageError{multicol}%
{Option 'colaction' not selected}%
{\string\docolaction\space
requires the use of the 'colaction'
option on the package}%
\fi
\global\advance\mc@col@check@num\@ne
\edef\mc@col@type{\expandafter\ifx
\csname mc@col-\the\mc@col@check@num
\endcsname\relax
0\else
\csname mc@col-\the\mc@col@check@num
\endcsname
\fi}%
\@ifstar
{\@docolactionstartrue \@docolaction}%
{\@docolactionstarfalse\@docolaction}%
}
\newcommand\@docolaction[4][1]{%
\edef\@docolactioncheck{\write\@auxout
{\string\mc@set@col@status
{mc@col-\the\mc@col@check@num}%
{\mc@col@type}}}%
\if@docolactionstar \@docolactioncheck \fi
\ifcase \mc@col@type\relax
\ifcase #1\or #2\or#3\or#4\fi
\or
#2% % 1 First col
\or
#3% % 2 any middle col
\or
#4% % 3 last col
\else
\ERRORwrongdefaultgiven
\fi
\if@docolactionstar \else \@docolactioncheck \fi
}
\newif\if@docolactionstar
\def\mc@col@status#1{%
\gdef\mc@curr@col@status{#1}}
\def\mc@set@col@status#1#2{%
\global\expandafter\let\csname #1\endcsname
\mc@curr@col@status}
\AtEndDocument{\def\mc@set@col@status#1#2{%
\ifnum #2=\mc@curr@col@status\else
\@tempswatrue
\fi}%
}
\newif\ifmc@firstcol
\mc@firstcoltrue
\endinput
%%
%% End of file `multicol.sty'.