You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1042 lines
29 KiB
1042 lines
29 KiB
%%
|
|
%% This is an old release of `multicol.sty',
|
|
%%
|
|
%% The source is maintained by the LaTeX Project team and bug
|
|
%% reports for it can be opened at http://latex-project.org/bugs.html
|
|
%% (but please observe conditions on bug reports sent to that address!)
|
|
%%
|
|
%% Copyright 1993-2016
|
|
%% 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
|
|
%% http://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.
|
|
%%
|
|
%%
|
|
%% Package `multicol' to use with LaTeX2e
|
|
%% Copyright 1989-2016 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}[1997/12/01]
|
|
\ProvidesPackage{multicol}
|
|
[2017/04/11 v1.8q 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>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
|
|
\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
|
|
\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@
|
|
\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
|
|
\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
|
|
\let\ifshr@kingsaved\ifshr@king
|
|
\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}%
|
|
\let\ifshr@king\ifshr@kingsaved
|
|
\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
|
|
\PackageWarningNoLine{multicol}%
|
|
{Floats and marginpars not
|
|
allowed inside `multicols'
|
|
environment!}%
|
|
\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\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}%
|
|
\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
|
|
\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
|
|
|
|
\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{\@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@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
|
|
\let\balance@columns@out
|
|
\multi@column@out
|
|
\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[4][1]{%
|
|
\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}%
|
|
\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
|
|
\ERROR
|
|
\fi
|
|
\edef\next{\write\@auxout
|
|
{\string\mc@set@col@status
|
|
{mc@col-\the\mc@col@check@num}%
|
|
{\mc@col@type}}}%
|
|
\next
|
|
}
|
|
\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'.
|
|
|