%%
%% This is file `multicol.sty',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% multicol.dtx (with options: `package,badness,check,marktrace')
%%
%% IMPORTANT NOTICE:
%%
%% This file is a generated file from the sources of the `tools' bundle
%% in the LaTeX2e distribution.
%%
%% For the copyright notice see the source file(s).
%%
%% You are not allowed to modify this file.
%%
%% You are allowed to distribute this file if and only if
%% it is distributed with the corresponding source files in
%% the `tools' bundle.
%%
%% For the copying and distribution conditions of the source files,
%% see the file readme.txt distributed with the tools bundle.
%%
%% Package `multicol' to use with LaTeX2e
%% Copyright (C) 1989-1996 Frank Mittelbach, all rights reserved.
%%
%%
%% In addition to the general distribution terms for this `tools'
%% bundle, which are specified in readme.txt, this package, multicol,
%% is distributed subject to the following condition:
%%
%% ** The use of this package as part of a commercial application is
%% ** not allowed without the explicit permission of the author of
%% ** this package. Such commercial usage will be subject to 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 judgment of the value of the code for his application.
%%
%%
%% Note that the above condition does not apply to non-commercial use
%% of this package, or to the use of this package in a commercial
%% environment for `private' tasks rather than as part of a commercial
%% application. In these cases the General Terms, as specified in
%% readme.txt, apply.
%%
%% The term `private' tasks in a commercial environment refers to the
%% use of multicol to format documents received by others, for example,
%% to format the documentation of a package which often uses multicol
%% internally. It also refers to the generation of documents that are
%% intended to be available free of charge. It does not refer to the
%% act of producing a commercial product, eg, a book or a
%% journal. Such usage require a license fee.
%% In that case please send email to
%%
%% [email protected]
%%
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{multicol}
[1996/01/13 v1.5l multicolumn formatting (FMi)]
%% \CheckSum{1298}
%% \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 a twocolumn layout}}
\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
\@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
}
\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
\PackageWarning{multicol}%
{Floats and marginpars not
allowed inside `multicols'
environment!
\@gobble}%
\unvbox\@cclv\reinsert@footnotes
\xdef\@freelist{\@freelist\@currlist}%
\gdef\@currlist{}%
\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
\ifshr@nking
\global\setbox\mult@firstbox
\copy\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
\dimen@\ht\mult@firstbox
\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
}
\endinput
%%
%% End of file `multicol.sty'.
|