%% %% 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 2001 2002 2003 %% 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.3 %% 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.3 or later is part of all distributions of LaTeX %% version 2003/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-2003 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{multicol} [2004/02/14 v1.6e multicolumn formatting (FMi)] %% \CheckSum{1561} %% \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 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}} \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 \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 \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 \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@ \prevdepth\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 \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}% \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{% \process@cols\mult@gfirstbox{% \ifdim\dp\count@>\dimen\tw@ \global\dimen\tw@\dp\count@ \fi \box\count@ \hss{\normalcolor\vrule \@width\columnseprule}\hss}% \ifdim\dp\mult@rightbox>\dimen\tw@ \global\dimen\tw@\dp\mult@rightbox \fi \box\mult@rightbox \rlap{\phantom p}% }% \kern-\dimen\tw@ \ifdim\dimen\tw@ = \mc@gridwarn \PackageWarning{multicol}% {Very deep columns!\MessageBreak Grid alignment might be broken}% \fi } \def\reinsert@footnotes{\ifvoid\footins\else \insert\footins{}\fi} \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 \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 \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 \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\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 \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 \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\vfill}% \ifnum\c@tracingmulticols>\@ne \message{ setting natural (> \the\c@finalcolumnbadness)}% \fi \fi \else \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 \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 \if@boxedmulticols\else \ifdim\dimen@>\@colroom \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 \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 \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*}{\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 \endinput %% %% End of file `multicol.sty'.