MMCT TEAM
Server IP : 111.118.215.189  /  Your IP : 216.73.216.178
Web Server : Apache
System : Linux md-in-83.webhostbox.net 4.19.286-203.ELK.el7.x86_64 #1 SMP Wed Jun 14 04:33:55 CDT 2023 x86_64
User : a1673wkz ( 2475)
PHP Version : 8.2.25
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON
Directory (0755) :  /usr/share/texlive/texmf-dist/tex/latex/tools/

[  Home  ][  C0mmand  ][  Upload File  ]

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,colbreak')
%% 
%% This is a generated file.
%% 
%% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005
%% 2006 2008 2009
%% 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.
%% 
%% 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-2011 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}
          [2011/06/27 v1.7a  multicolumn formatting (FMi)]
%% \CheckSum{1669}
%% \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@
   \maybe@reverse@columns
   \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{\columnseprulecolor\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\columnseprulecolor{\normalcolor}
\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{\@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}
\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
\newcommand\RLmulticolcolumns
    {\let\maybe@reverse@columns
         \reverse@column@boxes}
\newcommand\LRmulticolcolumns
    {\let\maybe@reverse@columns\relax}
\LRmulticolcolumns

\newcount\multicol@sort@counter

\def\reverse@column@boxes {%
  \ifnum\c@tracingmulticols>\thr@@
    \typeout{reversing columns ...}
  \fi
  \multicol@sort@counter\doublecol@number
  \advance\multicol@sort@counter\m@ne
  \process@cols\mult@gfirstbox{%
     \setbox\multicol@sort@counter
            \box\count@
     \ifnum\c@tracingmulticols>\thr@@
       \typeout{Setting
             \the\multicol@sort@counter\space
                <- \the\count@}%
     \fi
     \advance \multicol@sort@counter -\tw@
  }%
  \ifnum\c@tracingmulticols>\thr@@
    \typeout{Setting last:
                \the\mult@grightbox\space
             <- \the\mult@rightbox}%
  \fi
  \setbox \mult@grightbox \box\mult@rightbox
  \ifnum\c@tracingmulticols>\thr@@
    \typeout{shifting ...}
  \fi
  \multicol@sort@counter\mult@gfirstbox
  \advance\multicol@sort@counter \m@ne
  \process@cols\mult@gfirstbox{%
     \global\setbox\count@
            \box\multicol@sort@counter
     \ifnum\c@tracingmulticols>\thr@@
       \typeout{Setting \the\count@\space
            <- \the\multicol@sort@counter}%
     \fi
     \advance \multicol@sort@counter \tw@
  }%
  \multicol@sort@counter\doublecol@number
  \advance\multicol@sort@counter\m@ne
  \ifnum\c@tracingmulticols>\thr@@
    \typeout{Setting last:
                \the\mult@rightbox\space
             <- \the\multicol@sort@counter}%
  \fi
  \global\setbox \mult@rightbox
                 \box\multicol@sort@counter
}
\endinput
%%
%% End of file `multicol.sty'.

MMCT - 2023