%% %% 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 %% %% Frank.Mittelbach@Uni-Mainz.de %% \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'.