project/static/proceedings/sources/ltxgrid.sty
changeset 99 30b754364bbb
equal deleted inserted replaced
98:0a0bddff6847 99:30b754364bbb
       
     1 %%
       
     2 %% This is file `ltxgrid.sty',
       
     3 %% generated with the docstrip utility.
       
     4 %%
       
     5 %% The original source files were:
       
     6 %%
       
     7 %% ltxgrid.dtx  (with options: `ltxgrid,ltxgrid-krn')
       
     8 %% 
       
     9 %% This is a generated file;
       
    10 %% altering it directly is inadvisable;
       
    11 %% instead, modify the original source file.
       
    12 %% See the URL in the file 00readme.txt.
       
    13 %% 
       
    14 %% Copyright notice.
       
    15 %% 
       
    16 %%    These files are distributed
       
    17 %%    WITHOUT ANY WARRANTY; without even the implied warranty of
       
    18 %%    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
       
    19 %% 
       
    20 %%%  @LaTeX-file{
       
    21 %%%     filename        = "ltxgrid.dtx",
       
    22 %%%     version         = "1.0rc5",
       
    23 %%%     date            = "2001/07/26",
       
    24 %%%     time            = "12:23:00 GMT+8",
       
    25 %%%     checksum        = "4234",
       
    26 %%%     author          = "Arthur Ogawa (mailto:ogawa@teleport.com),
       
    27 %%%                        commissioned by the American Physical Society.
       
    28 %%%                        ",
       
    29 %%%     copyright       = "Copyright (C) 1999, 2000 Arthur Ogawa,
       
    30 %%%                        distributed under the terms of the
       
    31 %%%                        LaTeX Project Public License, see
       
    32 %%%                        ftp://ctan.tug.org/macros/latex/base/lppl.txt
       
    33 %%%                        ",
       
    34 %%%     address         = "Arthur Ogawa,
       
    35 %%%                        USA",
       
    36 %%%     telephone       = "",
       
    37 %%%     FAX             = "",
       
    38 %%%     email           = "ogawa@teleport.com",
       
    39 %%%     codetable       = "ISO/ASCII",
       
    40 %%%     keywords        = "latex, page grid, main vertical list",
       
    41 %%%     supported       = "yes",
       
    42 %%%     abstract        = "package to change page grid, MVL",
       
    43 %%%     docstring       = "The checksum field above generated by ltxdoc",
       
    44 %%%  }
       
    45 \NeedsTeXFormat{LaTeX2e}[1995/12/01]%
       
    46 \ProvidesFile{ltxgrid.sty}%
       
    47  [2001/07/26 1.0rc5 page grid package]% \fileversion
       
    48 \def\package@name{ltxgrid}%
       
    49 \expandafter\PackageInfo\expandafter{\package@name}{%
       
    50  Page grid for \protect\LaTeXe,
       
    51  by A. Ogawa (ogawa@teleport.com)%
       
    52 }%
       
    53 \RequirePackage{ltxutil}%
       
    54 \typeout{%
       
    55  ltxgrid: portions licensed from W. E. Baxter (web@superscript.com)%
       
    56 }%
       
    57 \newcounter{linecount}
       
    58 \def\lineloop#1{%
       
    59  \loop
       
    60  \ifnum\c@linecount<#1\relax
       
    61   \global\advance\c@linecount\@ne
       
    62   \par
       
    63   \hb@xt@\hsize{%
       
    64    \ifnum\c@linecount<100 0\fi\ifnum\c@linecount<10 0\fi\number\c@linecount
       
    65    \vrule depth2.5\p@
       
    66    \leaders\hrule\hfil
       
    67   }%
       
    68   \penalty\interlinepenalty
       
    69  \repeat
       
    70 }%
       
    71 \let\@@mark\mark
       
    72 \let\@@topmark\topmark
       
    73 \let\@@firstmark\firstmark
       
    74 \let\@@botmark\botmark
       
    75 \let\@@splitfirstmark\splitfirstmark
       
    76 \let\@@splitbotmark\splitbotmark
       
    77 \def\@themark{{}{}{}{}}%
       
    78 \def\nul@mark{{}{}{}{}\@@nul}%
       
    79 \def\set@mark@netw@#1#2#3#4#5#6#7{\gdef#1{{#6}{#7}{#4}{#5}}\do@mark}%
       
    80 \def\set@marktw@#1#2#3#4#5#6{\gdef#1{{#2}{#6}{#4}{#5}}\do@mark}%
       
    81 \def\set@markthr@@#1#2#3#4#5#6{\gdef#1{{#2}{#3}{#6}{#5}}\do@mark}%
       
    82 \def\get@mark@@ne#1#2#3#4#5\@@nul{#1}%
       
    83 \def\get@mark@tw@#1#2#3#4#5\@@nul{#2}%
       
    84 \def\get@mark@thr@@#1#2#3#4#5\@@nul{#3}%
       
    85 \def\get@mark@f@ur#1#2#3#4#5\@@nul{#4}%
       
    86 \def\mark@netw@{\expandafter\set@mark@netw@\expandafter\@themark\@themark}%
       
    87 \def\marktw@{\expandafter\set@marktw@\expandafter\@themark\@themark}%
       
    88 \def\markthr@@{\expandafter\set@markthr@@\expandafter\@themark\@themark}%
       
    89 \def\do@mark{\do@@mark\@themark\nobreak@mark}%
       
    90 \def\do@@mark#1{%
       
    91  \begingroup
       
    92   \let@mark
       
    93   \@@mark{#1}%
       
    94  \endgroup
       
    95 }%
       
    96 \def\let@mark{%
       
    97  \let\protect\@unexpandable@protect
       
    98  \let\label\relax
       
    99  \let\index\relax
       
   100  \let\glossary\relax
       
   101 }%
       
   102 \def\nobreak@mark{%
       
   103  \@if@sw\if@nobreak\fi{\@ifvmode{\nobreak}{}}{}%
       
   104 }%
       
   105 \def\mark@envir{\markthr@@}%
       
   106 \def\bot@envir{%
       
   107  \expandafter\expandafter
       
   108  \expandafter\get@mark@thr@@
       
   109  \expandafter\@@botmark
       
   110              \nul@mark
       
   111 }%
       
   112 \def\markboth{\mark@netw@}%
       
   113 \def\markright{\marktw@}%
       
   114 \def\leftmark{%
       
   115  \expandafter\expandafter
       
   116  \expandafter\get@mark@@ne
       
   117  \expandafter\saved@@botmark
       
   118              \nul@mark
       
   119 }%
       
   120 \def\rightmark{%
       
   121  \expandafter\expandafter
       
   122  \expandafter\get@mark@tw@
       
   123  \expandafter\saved@@firstmark
       
   124              \nul@mark
       
   125 }%
       
   126 \let\primitive@output\output
       
   127 \long\def\@tempa#1\@@nil{#1}%
       
   128 \toks@
       
   129 \expandafter\expandafter
       
   130 \expandafter{%
       
   131 \expandafter \@tempa
       
   132              \the\output
       
   133              \@@nil
       
   134              }%
       
   135 \newtoks\output
       
   136 \output\expandafter{\the\toks@}%
       
   137 \primitive@output{\dispatch@output}%
       
   138 \def\dispatch@output{%
       
   139  \let\par\@@par
       
   140  \expandafter\let\expandafter\@tempa\csname output@\the\outputpenalty\endcsname
       
   141  \outputdebug@sw{%
       
   142   \saythe\badness
       
   143   \saythe\outputpenalty
       
   144   \saythe\holdinginserts
       
   145   \say\thepagegrid
       
   146   \saythe\pagegrid@col
       
   147   \saythe\pagegrid@cur
       
   148  %\say\bot@envir
       
   149   \saythe\insertpenalties
       
   150  %\say\@@topmark
       
   151  %\say\saved@@topmark
       
   152  %\say\@@firstmark
       
   153  %\say\saved@@firstmark
       
   154   \say\@@botmark
       
   155  %\say\saved@@botmark
       
   156   \saythe\pagegoal
       
   157   \saythe\pagetotal
       
   158   \saythe{\badness\@cclv}%
       
   159   \expandafter\@ifx\expandafter{\csname output@-\the\execute@message@pen\endcsname\@tempa}{%
       
   160    \say\@message@saved
       
   161   }{%
       
   162    \expandafter\say\csname output@\the\outputpenalty\endcsname
       
   163   }%
       
   164   \say\@toplist
       
   165   \say\@botlist
       
   166   \say\@dbltoplist
       
   167   \say\@deferlist
       
   168   {\tracingall\scrollmode
       
   169    \showbox\@cclv
       
   170    \showbox\@cclv@saved
       
   171    \showbox\pagesofar
       
   172    \showbox\footbox
       
   173    \showbox\footins@saved
       
   174    \showbox\footins
       
   175    \showlists
       
   176   }%
       
   177  }{}%
       
   178  \@ifnotrelax\@tempa{\@tempa}{\the\output}%
       
   179 }%
       
   180 \@ifxundefined{\outputdebug@sw}{%
       
   181  \@booleanfalse\outputdebug@sw
       
   182 }{}%
       
   183 \output={\toggle@insert\output@holding\output@moving}%
       
   184 \def\output@holding{%
       
   185 \csname output@init@\bot@envir\endcsname
       
   186 \@if@exceed@pagegoal{\unvcopy\@cclv}{%
       
   187   \setbox\z@\vbox{\unvcopy\@cclv}%
       
   188 \outputdebug@sw{{\tracingall\scrollmode\showbox\z@}}{}%
       
   189 \dimen@\ht\@cclv\advance\dimen@-\ht\z@
       
   190 \dead@cycle@repair\dimen@
       
   191 }{%
       
   192 \dead@cycle
       
   193 }%
       
   194 }%
       
   195 \def\@if@exceed@pagegoal#1{%
       
   196  \begingroup
       
   197   \setbox\z@\vbox{#1}%
       
   198  \dimen@\ht\z@\advance\dimen@\dp\z@
       
   199   \outputdebug@sw{\saythe\dimen@}{}%
       
   200   \@ifdim{\dimen@>\pagegoal}{%
       
   201   \setbox\z@\vbox{\@@mark{}\unvbox\z@}%
       
   202    \splittopskip\topskip
       
   203    \splitmaxdepth\maxdepth
       
   204    \vbadness\@M
       
   205    \vfuzz\maxdimen
       
   206    \setbox\tw@\vsplit\z@ to\pagegoal
       
   207   \outputdebug@sw{{\tracingall\scrollmode\showbox\tw@\showbox\z@}}{}%
       
   208   \setbox\tw@\vbox{\unvbox\tw@}%
       
   209   \@ifdim{\ht\tw@=\z@}{%
       
   210    \ltxgrid@info{Found overly large chunk while preparing to move insertions. Attempting repairs}%
       
   211     \aftergroup\true@sw
       
   212   }{%
       
   213     \aftergroup\false@sw
       
   214   }%
       
   215  }{%
       
   216  \aftergroup\false@sw
       
   217  }%
       
   218 \endgroup
       
   219 }%
       
   220 %% \item
       
   221 %%  Put down the same interrupts as for the non-trivial case above.
       
   222 \def\output@moving{%
       
   223  \set@top@firstmark
       
   224  \@ifnum{\outputpenalty=\do@newpage@pen}{%
       
   225   \setbox\@cclv\vbox{%
       
   226    \unvbox\@cclv
       
   227    \setbox\z@\lastbox
       
   228    \@ifdim{\ht\z@=\ht\@protection@box}{\box\lastbox}{\unskip}%
       
   229   }%
       
   230  }{}%
       
   231  \@cclv@nontrivial@sw{%
       
   232   \csname output@prep@\bot@envir \endcsname
       
   233   \@makecol\csname output@column@\thepagegrid\endcsname
       
   234   \protect@penalty\do@startcolumn@pen
       
   235   \clearpage@sw{%
       
   236    \protect@penalty\do@endpage@pen
       
   237   }{}%
       
   238   \csname output@post@\bot@envir \endcsname
       
   239  }{%
       
   240   {\setbox\z@\box\@cclv}%
       
   241  }%
       
   242  \set@colroom
       
   243  \global\@mparbottom\z@
       
   244  \global\@textfloatsheight\z@ %FIXME: this legacy LaTeX variable is set, but never queried!
       
   245 }%
       
   246 \def\@cclv@nontrivial@sw{%
       
   247 \@ifx@empty\@toplist{%
       
   248 \@ifx@empty\@botlist{%
       
   249 \@ifvoid\footins{%
       
   250  \@ifvoid\@cclv{%
       
   251   \false@sw
       
   252  }{%
       
   253 \setbox\z@\vbox{\unvcopy\@cclv}%
       
   254 \@ifdim{\ht\z@=\topskip}{%
       
   255 \setbox\z@\vbox{%
       
   256 \unvbox\z@
       
   257 \setbox\z@\lastbox\dimen@\lastskip\unskip
       
   258 \@ifdim{\ht\z@=\ht\@protection@box}{%
       
   259 \advance\dimen@\ht\z@
       
   260 \@ifdim{\dimen@=\topskip}{%
       
   261 \aftergroup\true@sw
       
   262 }{%
       
   263 \aftergroup\false@sw
       
   264 }%
       
   265 }{%
       
   266 \aftergroup\false@sw
       
   267 }%
       
   268 }%
       
   269 {%
       
   270 \false@sw % Normal for \clearpage
       
   271 }{%
       
   272 \true@sw
       
   273 }%
       
   274 }{%
       
   275 \@ifdim{\ht\z@=\z@}{%
       
   276 \ltxgrid@info{Found trivial column. Discarding it}%
       
   277 \outputdebug@sw{{\tracingall\scrollmode\showbox\@cclv}}{}%
       
   278 \false@sw
       
   279 }{%
       
   280 \true@sw
       
   281 }%
       
   282 }%
       
   283  }%
       
   284 }{%
       
   285 \true@sw
       
   286 }%
       
   287 }{%
       
   288 \true@sw
       
   289 }%
       
   290 }{%
       
   291 \true@sw
       
   292 }%
       
   293 }%
       
   294 \def\protect@penalty#1{\protection@box\penalty-#1\relax}%
       
   295 \newbox\@protection@box
       
   296 \setbox\@protection@box\vbox to1986sp{\vfil}%
       
   297 \def\protection@box{\nointerlineskip\copy\@protection@box}%
       
   298 \def\dead@cycle@repair#1{%
       
   299 \expandafter\do@@mark
       
   300 \expandafter{%
       
   301 \@@botmark
       
   302 }%
       
   303 \unvbox\@cclv
       
   304 \nointerlineskip
       
   305 \vbox to#1{\vss}%
       
   306 \@ifnum{\outputpenalty<\@M}{\penalty\outputpenalty}{}%
       
   307 }%
       
   308 \def\dead@cycle@repair@protected#1{%
       
   309 \expandafter\do@@mark
       
   310 \expandafter{%
       
   311 \@@botmark
       
   312 }%
       
   313 \begingroup
       
   314   \unvbox\@cclv
       
   315   \setbox\z@\lastbox % Remove protection box
       
   316  \nointerlineskip
       
   317   \advance#1-\ht\@protection@box
       
   318  \vbox to#1{\vss}%
       
   319   \protection@box % Reinsert protection box
       
   320  \@ifnum{\outputpenalty<\@M}{\penalty\outputpenalty}{}%
       
   321 \endgroup
       
   322 }%
       
   323 \def\dead@cycle{%
       
   324  \expandafter\do@@mark
       
   325  \expandafter{%
       
   326               \@@botmark
       
   327              }%
       
   328  \unvbox\@cclv
       
   329  \@ifnum{\outputpenalty<\@M}{\penalty\outputpenalty}{}%
       
   330 }%
       
   331 \def\output@init@document{%
       
   332  \@ifvoid\footbox{}{%
       
   333   \global\advance\vsize-\ht\footbox
       
   334   \global\advance\vsize-\dp\footbox
       
   335  }%
       
   336 }%
       
   337 \def\output@prep@document{%
       
   338  \@ifvoid\footbox{}{%
       
   339   \setbox\footins\vbox{\unvbox\footbox\unvbox\footins}%
       
   340  }%
       
   341 }%
       
   342 \def\output@post@document{}%
       
   343 \let\@opcol\@undefined
       
   344 \def\@makecol{%
       
   345  \setbox\@outputbox\vbox{%
       
   346   \boxmaxdepth\@maxdepth
       
   347   \@tempdima\dp\@cclv
       
   348   \unvbox\@cclv
       
   349   \vskip-\@tempdima
       
   350  }%
       
   351  \xdef\@freelist{\@freelist\@midlist}\global\let\@midlist\@empty
       
   352  \@combinefloats
       
   353  \@combineinserts\@outputbox\footins
       
   354   \set@adj@colht\dimen@
       
   355   \count@\vbadness
       
   356   \vbadness\@M
       
   357   \setbox\@outputbox\vbox to\dimen@{%
       
   358    \@texttop
       
   359    \dimen@\dp\@outputbox
       
   360    \unvbox\@outputbox
       
   361    \vskip-\dimen@
       
   362    \@textbottom
       
   363   }%
       
   364   \vbadness\count@
       
   365  \global\maxdepth\@maxdepth
       
   366 }%
       
   367 \let\@makespecialcolbox\@undefined
       
   368 \def\@combineinserts#1#2{%
       
   369  \setbox#1\vbox{%
       
   370   \unvbox#1%
       
   371   \vbox{%
       
   372    \@ifvoid#2{}{%
       
   373     \vskip\skip\footins
       
   374     \color@begingroup
       
   375     \normalcolor
       
   376     \footnoterule
       
   377     \nointerlineskip
       
   378     \box#2%
       
   379     \color@endgroup
       
   380    }{}%
       
   381   }%
       
   382  }%
       
   383 }%
       
   384 \appdef\@floatplacement{%
       
   385  \global\@fpmin\@fpmin
       
   386 }%
       
   387 \mathchardef\pagebreak@pen=\@M
       
   388 \expandafter\let\csname output@-\the\pagebreak@pen\endcsname\relax
       
   389 \mathchardef\do@startcolumn@pen=10005
       
   390 \@namedef{output@-\the\do@startcolumn@pen}{\do@startcolumn}%
       
   391 \def\do@startcolumn{%
       
   392  \setbox\@cclv\vbox{\unvbox\@cclv\setbox\z@\lastbox\unskip}%
       
   393  \clearpage@sw{\@clearfloatplacement}{\@floatplacement}%
       
   394  \set@colroom
       
   395  \@booleanfalse\pfloat@avail@sw
       
   396  \begingroup
       
   397   \@colht\@colroom
       
   398   \@booleanfalse\float@avail@sw
       
   399   \@tryfcolumn\test@colfloat
       
   400   \float@avail@sw{\aftergroup\@booleantrue\aftergroup\pfloat@avail@sw}{}%
       
   401  \endgroup
       
   402  \fcolmade@sw{%
       
   403   \setbox\@cclv\vbox{\unvbox\@outputbox\unvbox\@cclv}%
       
   404   \outputpenalty-\pagebreak@pen % ask for a return visit, this time with insertions and all.
       
   405   \dead@cycle
       
   406  }{%
       
   407   \begingroup
       
   408    \let\@elt\@scolelt
       
   409    \let\reserved@b\@deferlist\global\let\@deferlist\@empty\reserved@b
       
   410   \endgroup
       
   411   \clearpage@sw{%
       
   412    \outputpenalty\@M
       
   413   }{%
       
   414    \outputpenalty\do@newpage@pen
       
   415   }%
       
   416   \dead@cycle
       
   417  }%
       
   418  \check@deferlist@stuck\do@startcolumn
       
   419  \set@vsize
       
   420 }%
       
   421 \def\@scolelt#1{\def\@currbox{#1}\@addtonextcol}%
       
   422 \def\test@colfloat#1{%
       
   423  \csname @floatselect@sw@\thepagegrid\endcsname#1{}{\@testtrue}%
       
   424  \@if@sw\if@test\fi{}{\aftergroup\@booleantrue\aftergroup\float@avail@sw}%
       
   425 }%
       
   426 \def\@addtonextcol{%
       
   427  \begingroup
       
   428   \@insertfalse
       
   429   \@setfloattypecounts
       
   430   \csname @floatselect@sw@\thepagegrid\endcsname\@currbox{%
       
   431    \@ifnum{\@fpstype=8 }{}{%
       
   432      \@ifnum{\@fpstype=24 }{}{%
       
   433        \@flsettextmin
       
   434        \@reqcolroom \ht\@currbox
       
   435        \advance \@reqcolroom \@textmin
       
   436        \advance \@reqcolroom \vsize % take into account split insertions
       
   437        \advance \@reqcolroom -\pagegoal
       
   438        \@ifdim{\@colroom>\@reqcolroom}{%
       
   439          \@flsetnum \@colnum
       
   440          \@ifnum{\@colnum>\z@}{%
       
   441             \@bitor\@currtype\@deferlist
       
   442             \@if@sw\if@test\fi{}{%
       
   443               \@addtotoporbot
       
   444             }%
       
   445          }{}%
       
   446        }{}%
       
   447      }%
       
   448    }%
       
   449   }{}%
       
   450   \@if@sw\if@insert\fi{}{%
       
   451     \@cons\@deferlist\@currbox
       
   452   }%
       
   453  \endgroup
       
   454 }%
       
   455 \mathchardef\do@startpage@pen=10006
       
   456 \@namedef{output@-\the\do@startpage@pen}{\do@startpage}%
       
   457 \def\do@startpage{%
       
   458  \setbox\@cclv\vbox{\unvbox\@cclv\setbox\z@\lastbox\unskip}%
       
   459  \clearpage@sw{\@clearfloatplacement}{\@dblfloatplacement}%
       
   460  \set@colht
       
   461  \@booleanfalse\pfloat@avail@sw
       
   462  \begingroup
       
   463   \@booleanfalse\float@avail@sw
       
   464   \@tryfcolumn\test@dblfloat
       
   465   \float@avail@sw{\aftergroup\@booleantrue\aftergroup\pfloat@avail@sw}{}%
       
   466  \endgroup
       
   467  \fcolmade@sw{%
       
   468   \global\setbox\pagesofar\vbox{\unvbox\pagesofar\unvbox\@outputbox}%
       
   469   \@combinepage
       
   470   \@combinedblfloats
       
   471   \@outputpage
       
   472   \global\pagegrid@cur\@ne
       
   473   \protect@penalty\do@startpage@pen
       
   474  }{%
       
   475   \begingroup
       
   476    \@booleanfalse\float@avail@sw
       
   477    \let\@elt\@sdblcolelt
       
   478    \let\reserved@b\@deferlist\global\let\@deferlist\@empty\reserved@b
       
   479   \endgroup
       
   480   \@ifdim{\@colht=\textheight}{% No luck...
       
   481    \pfloat@avail@sw{% ...but a float *was* available!
       
   482     \forcefloats@sw{%
       
   483      \ltxgrid@warn{Forced dequeueing of floats stalled}%
       
   484     }{%
       
   485      \ltxgrid@warn{Dequeueing of floats stalled}%
       
   486     }%
       
   487    }{}%
       
   488   }{}%
       
   489   \outputpenalty\@M
       
   490   \dead@cycle
       
   491  }%
       
   492  \check@deferlist@stuck\do@startpage
       
   493  \set@colht
       
   494 }%
       
   495 \def\@sdblcolelt#1{\def\@currbox{#1}\@addtodblcol}%
       
   496 \def\test@dblfloat#1{%
       
   497  \@if@notdblfloat{#1}{\@testtrue}{}%
       
   498  \@if@sw\if@test\fi{}{\aftergroup\@booleantrue\aftergroup\float@avail@sw}%
       
   499 }%
       
   500 \def\@if@notdblfloat#1{\@ifdim{\wd#1<\textwidth}}%
       
   501 \@booleanfalse\forcefloats@sw
       
   502 \def\@addtodblcol{%
       
   503  \begingroup
       
   504   \@if@notdblfloat{\@currbox}{%
       
   505    \false@sw
       
   506   }{%
       
   507    \@setfloattypecounts
       
   508    \@getfpsbit \tw@
       
   509    \@bitor \@currtype \@deferlist
       
   510    \@if@sw\if@test\fi{%
       
   511     \false@sw
       
   512    }{%
       
   513     \@ifodd\@tempcnta{%
       
   514      \aftergroup\@booleantrue\aftergroup\float@avail@sw
       
   515      \@flsetnum \@dbltopnum
       
   516      \@ifnum{\@dbltopnum>\z@}{%
       
   517        \@ifdim{\@dbltoproom>\ht\@currbox}{%
       
   518         \true@sw
       
   519        }{%
       
   520         \@ifnum{\@fpstype<\sixt@@n}{%
       
   521          \begingroup
       
   522           \advance \@dbltoproom \@textmin
       
   523           \@ifdim{\@dbltoproom>\ht\@currbox}{%
       
   524            \endgroup\true@sw
       
   525           }{%
       
   526            \endgroup\false@sw
       
   527           }%
       
   528         }{%
       
   529          \false@sw
       
   530         }%
       
   531        }%
       
   532      }{%
       
   533       \false@sw
       
   534      }%
       
   535     }{%
       
   536      \false@sw
       
   537     }%
       
   538    }%
       
   539   }%
       
   540   {%
       
   541    \@tempdima -\ht\@currbox
       
   542    \advance\@tempdima
       
   543     -\@ifx{\@dbltoplist\@empty}{\dbltextfloatsep}{\dblfloatsep}%
       
   544    \global \advance \@dbltoproom \@tempdima
       
   545    \global \advance \@colht \@tempdima
       
   546    \global \advance \@dbltopnum \m@ne
       
   547    \@cons \@dbltoplist \@currbox
       
   548   }{%
       
   549    \@cons \@deferlist \@currbox
       
   550   }%
       
   551  \endgroup
       
   552 }%
       
   553 \def\@tryfcolumn#1{%
       
   554   \global\@booleanfalse\fcolmade@sw
       
   555   \@ifx@empty\@deferlist{}{%
       
   556     \global\let\@trylist\@deferlist
       
   557     \global\let\@failedlist\@empty
       
   558     \begingroup
       
   559       \dimen@\vsize\advance\dimen@-\pagegoal\@ifdim{\dimen@>\z@}{%
       
   560        \advance\@fpmin-\dimen@
       
   561       }{}%
       
   562       \def\@elt{\@xtryfc#1}\@trylist
       
   563     \endgroup
       
   564     \fcolmade@sw{%
       
   565       \global\setbox\@outputbox\vbox{\vskip \@fptop}%
       
   566       \let \@elt \@wtryfc \@flsucceed
       
   567       \global\setbox\@outputbox\vbox{\unvbox\@outputbox
       
   568         \unskip \vskip \@fpbot
       
   569       }%
       
   570       \let \@elt \relax
       
   571       \xdef\@deferlist{\@failedlist\@flfail}%
       
   572       \xdef\@freelist{\@freelist\@flsucceed}%
       
   573     }{}%
       
   574   }%
       
   575 }%
       
   576 \def\@wtryfc #1{%
       
   577   \global\setbox\@outputbox\vbox{\unvbox\@outputbox
       
   578     \box #1\vskip\@fpsep
       
   579   }%
       
   580 }%
       
   581 \def\@xtryfc#1#2{%
       
   582   \@next\reserved@a\@trylist{}{}% trim \@trylist. Ugly!
       
   583   \@currtype \count #2%
       
   584   \divide\@currtype\@xxxii\multiply\@currtype\@xxxii
       
   585   \@bitor \@currtype \@failedlist
       
   586   \@testfp #2%
       
   587   #1#2%
       
   588   \@ifdim{\ht #2>\@colht   }{\@testtrue}{}%
       
   589   \@if@sw\if@test\fi{%
       
   590    \@cons\@failedlist #2%
       
   591   }{%
       
   592    \begingroup
       
   593      \gdef\@flsucceed{\@elt #2}%
       
   594      \global\let\@flfail\@empty
       
   595      \@tempdima\ht #2%
       
   596      \def \@elt {\@ztryfc#1}\@trylist
       
   597      \@ifdim{\@tempdima >\@fpmin}{%
       
   598        \global\@booleantrue\fcolmade@sw
       
   599      }{%
       
   600        \@cons\@failedlist #2%
       
   601      }%
       
   602    \endgroup
       
   603    \fcolmade@sw{%
       
   604      \let \@elt \@gobble
       
   605    }{}%
       
   606   }%
       
   607 }%
       
   608 \def\@ztryfc #1#2{%
       
   609   \@tempcnta \count#2%
       
   610   \divide\@tempcnta\@xxxii\multiply\@tempcnta\@xxxii
       
   611   \@bitor \@tempcnta {\@failedlist \@flfail}%
       
   612   \@testfp #2%
       
   613   #1#2%
       
   614   \@tempdimb\@tempdima
       
   615   \advance\@tempdimb \ht#2\advance\@tempdimb\@fpsep
       
   616   \@ifdim{\@tempdimb >\@colht}{%
       
   617     \@testtrue
       
   618   }{}%
       
   619   \@if@sw\if@test\fi{%
       
   620     \@cons\@flfail #2%
       
   621   }{%
       
   622     \@cons\@flsucceed #2%
       
   623     \@tempdima\@tempdimb
       
   624   }%
       
   625 }%
       
   626 \def\newpage@prep{%
       
   627   \if@noskipsec
       
   628     \ifx \@nodocument\relax
       
   629       \leavevmode
       
   630       \global \@noskipsecfalse
       
   631     \fi
       
   632   \fi
       
   633   \if@inlabel
       
   634     \leavevmode
       
   635     \global \@inlabelfalse
       
   636   \fi
       
   637   \if@nobreak \@nobreakfalse \everypar{}\fi
       
   638   \par
       
   639 }%
       
   640 \def \newpage {%
       
   641  \newpage@prep
       
   642  \do@output@MVL{%
       
   643   \vfil
       
   644   \penalty-\pagebreak@pen
       
   645  }%
       
   646 }%
       
   647 \def\clearpage{%
       
   648  \newpage@prep
       
   649  \do@output@MVL{%
       
   650   \vfil
       
   651   \penalty-\pagebreak@pen
       
   652   \global\@booleantrue\clearpage@sw
       
   653   \protect@penalty\do@startcolumn@pen
       
   654   \protect@penalty\do@endpage@pen
       
   655  }%
       
   656  \do@output@MVL{%
       
   657   \global\@booleanfalse\clearpage@sw
       
   658  }%
       
   659 }%
       
   660 \def\cleardoublepage{%
       
   661  \clearpage
       
   662  \@if@sw\if@twoside\fi{%
       
   663   \@ifodd\c@page{}{%
       
   664    \null\clearpage
       
   665   }%
       
   666  }{}%
       
   667 }%
       
   668 \@booleanfalse\clearpage@sw
       
   669 \mathchardef\do@endpage@pen=10007
       
   670 \@namedef{output@-\the\do@endpage@pen}{%
       
   671  \csname end@column@\thepagegrid\endcsname
       
   672 }%
       
   673 \mathchardef\do@newpage@pen=10001
       
   674 \expandafter\let\csname output@-\the\do@newpage@pen\endcsname\relax
       
   675 \def\@clearfloatplacement{%
       
   676  \global\@topnum     \maxdimen % \c@topnumber
       
   677  \global\@toproom    \maxdimen % \topfraction\@colht
       
   678  \global\@botnum     \maxdimen % \c@bottomnumber
       
   679  \global\@botroom    \maxdimen % \bottomfraction\@colht
       
   680  \global\@colnum     \maxdimen % \c@totalnumber
       
   681  \global\@dbltopnum  \maxdimen % \c@dbltopnumber
       
   682  \global\@dbltoproom \maxdimen % \dbltopfraction\@colht
       
   683  \global\@textmin    \z@       % \@colht\advance \@textmin -\@dbltoproom
       
   684  \global\@fpmin      \z@       % \dblfloatpagefraction\textheight
       
   685  \let\@testfp\@gobble
       
   686  \appdef\@setfloattypecounts{\@fpstype16\advance\@fpstype\m@ne}%
       
   687 }%
       
   688 \let\@doclearpage\@undefined
       
   689 \let\@makefcolumn\@undefined
       
   690 \def\clr@top@firstmark{%
       
   691  \global\let\saved@@topmark\@undefined
       
   692  \global\let\saved@@firstmark\@empty
       
   693  \global\let\saved@@botmark\@empty
       
   694 }%
       
   695 \clr@top@firstmark
       
   696 \def\set@top@firstmark{%
       
   697  \@ifxundefined\saved@@topmark{\expandafter\gdef\expandafter\saved@@topmark\expandafter{\@@topmark}}{}%
       
   698  \@if@empty\saved@@firstmark{\expandafter\gdef\expandafter\saved@@firstmark\expandafter{\@@firstmark}}{}%
       
   699  \@if@empty\@@botmark{}{\expandafter\gdef\expandafter\saved@@botmark\expandafter{\@@botmark}}%
       
   700 }%
       
   701 \appdef\@outputpage{%
       
   702  \clr@top@firstmark
       
   703 }%
       
   704 \def\@float#1{%
       
   705  \@ifnextchar[{%}]{%Brace-matching klootch
       
   706   \@yfloat\width@float{#1}%
       
   707  }{%
       
   708   \@ifxundefined@cs{fps@#1}{%
       
   709    \edef\reserved@a{\noexpand\@yfloat\noexpand\width@float{#1}[\csname fps@\endcsname]}\reserved@a
       
   710   }{%
       
   711    \edef\reserved@a{\noexpand\@yfloat\noexpand\width@float{#1}[\csname fps@#1\endcsname]}\reserved@a
       
   712   }%
       
   713  }%
       
   714 }%
       
   715 \def\@dblfloat#1{%
       
   716  \@ifnum{\pagegrid@col=\@ne}{%
       
   717   \@float{#1}%
       
   718  }{%
       
   719   \@ifnextchar[{%}]{%Brace-matching klootch
       
   720    \@yfloat\widthd@float{#1}%
       
   721   }{%
       
   722    \@ifxundefined@cs{fpsd@#1}{%
       
   723     \edef\reserved@a{\noexpand\@yfloat\noexpand\widthd@float{#1}[\csname fpsd@\endcsname]}\reserved@a
       
   724    }{%
       
   725     \edef\reserved@a{\noexpand\@yfloat\noexpand\widthd@float{#1}[\csname fpsd@#1\endcsname]}\reserved@a
       
   726    }%
       
   727   }%
       
   728  }%
       
   729 }%
       
   730 \def\@yfloat#1#2[#3]{%
       
   731  \@xfloat{#2}[#3]%
       
   732  \hsize#1\linewidth\hsize
       
   733  \minipagefootnote@init
       
   734 }%
       
   735 \def\fps@{tbp}%
       
   736 \def\fpsd@{tp}%
       
   737 \def\width@float{\columnwidth}%
       
   738 \def\widthd@float{\textwidth}%
       
   739 \def\end@float{%
       
   740  \end@@float{%
       
   741   \check@currbox@count
       
   742  }%
       
   743 }%
       
   744 \def\end@dblfloat{%
       
   745  \@ifnum{\pagegrid@col=\@ne}{%
       
   746   \end@float
       
   747  }{%
       
   748   \end@@float{%
       
   749    \@boxfpsbit\@currbox{1}\@ifodd\@tempcnta{\global\advance\count\@currbox\m@ne}{}%
       
   750    \@boxfpsbit\@currbox{4}\@ifodd\@tempcnta{\global\advance\count\@currbox-4\relax}{}%
       
   751    \global\wd\@currbox\textwidth % Klootch
       
   752    \check@currbox@count
       
   753   }%
       
   754  }%
       
   755 }%
       
   756 \def\end@@float#1{%
       
   757  \minipagefootnote@here
       
   758  \@endfloatbox
       
   759  #1%
       
   760  \@ifnum{\@floatpenalty <\z@}{%
       
   761   \@largefloatcheck
       
   762   \@cons\@currlist\@currbox
       
   763   \@ifnum{\@floatpenalty <-\@Mii}{%
       
   764    \do@output@cclv{\@add@float}%
       
   765   }{%
       
   766    \vadjust{\do@output@cclv{\@add@float}}%
       
   767    \@Esphack
       
   768   }%
       
   769  }{}%
       
   770 }%
       
   771 \def\check@currbox@count{%
       
   772  \@ifnum{\count\@currbox>\z@}{%
       
   773 \count@\count\@currbox\divide\count@\sixt@@n\multiply\count@\sixt@@n
       
   774 \@tempcnta\count\@currbox\advance\@tempcnta-\count@
       
   775 \@ifnum{\@tempcnta=\z@}{%
       
   776    \ltxgrid@warn{Float cannot be placed}%
       
   777 }{}%
       
   778  }{%
       
   779   % Is a \marginpar
       
   780  }%
       
   781 }%
       
   782 \providecommand\minipagefootnote@init{}%
       
   783 \providecommand\minipagefootnote@here{}%
       
   784 \let\@specialoutput\@undefined
       
   785 \def\@add@float{%
       
   786  \@pageht\ht\@cclv\@pagedp\dp\@cclv
       
   787  \unvbox\@cclv
       
   788  \@next\@currbox\@currlist{%
       
   789   \csname @floatselect@sw@\thepagegrid\endcsname\@currbox{%
       
   790    \@ifnum{\count\@currbox>\z@}{%
       
   791     \advance \@pageht \@pagedp
       
   792     \advance \@pageht \vsize \advance \@pageht -\pagegoal % do not assume \holdinginserts is cleared!
       
   793     \@addtocurcol % Commit an h float
       
   794   }{%
       
   795    \@addmarginpar
       
   796   }%
       
   797   }{%
       
   798    \@resethfps
       
   799    \@cons\@deferlist\@currbox
       
   800   }%
       
   801  }{\@latexbug}%
       
   802  \@ifnum{\outputpenalty<\z@}{%
       
   803   \@if@sw\if@nobreak\fi{%
       
   804    \nobreak
       
   805   }{%
       
   806    \addpenalty \interlinepenalty
       
   807   }%
       
   808  }{}%
       
   809  \set@vsize
       
   810 }%
       
   811 \let\@reinserts\@undefined
       
   812 \def \@addtocurcol {%
       
   813    \@insertfalse
       
   814    \@setfloattypecounts
       
   815    \ifnum \@fpstype=8
       
   816    \else
       
   817      \ifnum \@fpstype=24
       
   818      \else
       
   819        \@flsettextmin
       
   820        \advance \@textmin \@textfloatsheight
       
   821        \@reqcolroom \@pageht
       
   822        \ifdim \@textmin>\@reqcolroom
       
   823          \@reqcolroom \@textmin
       
   824        \fi
       
   825        \advance \@reqcolroom \ht\@currbox
       
   826        \ifdim \@colroom>\@reqcolroom
       
   827          \@flsetnum \@colnum
       
   828          \ifnum \@colnum>\z@
       
   829            \@bitor\@currtype\@deferlist
       
   830            \if@test
       
   831            \else
       
   832              \@bitor\@currtype\@botlist
       
   833              \if@test
       
   834                \@addtobot
       
   835              \else
       
   836                \ifodd \count\@currbox
       
   837                  \advance \@reqcolroom \intextsep
       
   838                  \ifdim \@colroom>\@reqcolroom
       
   839                    \global \advance \@colnum \m@ne
       
   840                    \global \advance \@textfloatsheight \ht\@currbox
       
   841                    \global \advance \@textfloatsheight 2\intextsep
       
   842                    \@cons \@midlist \@currbox
       
   843                    \if@nobreak
       
   844                      \nobreak
       
   845                      \@nobreakfalse
       
   846                      \everypar{}%
       
   847                    \else
       
   848                      \addpenalty \interlinepenalty
       
   849                    \fi
       
   850                    \vskip \intextsep
       
   851                    \unvbox\@currbox %AO
       
   852                    \penalty\interlinepenalty
       
   853                    \vskip\intextsep
       
   854                    \ifnum\outputpenalty <-\@Mii \vskip -\parskip\fi
       
   855                    \outputpenalty \z@
       
   856                    \@inserttrue
       
   857                  \fi
       
   858                \fi
       
   859                \if@insert
       
   860                \else
       
   861                  \@addtotoporbot
       
   862                \fi
       
   863              \fi
       
   864            \fi
       
   865          \fi
       
   866        \fi
       
   867      \fi
       
   868    \fi
       
   869    \if@insert
       
   870    \else
       
   871      \@resethfps
       
   872      \@cons\@deferlist\@currbox
       
   873    \fi
       
   874 }%
       
   875 \@twocolumnfalse
       
   876 \let\@twocolumntrue\@twocolumnfalse
       
   877 \def\@addmarginpar{%
       
   878  \@next\@marbox\@currlist{%
       
   879   \@cons\@freelist\@marbox\@cons\@freelist\@currbox
       
   880  }\@latexbug
       
   881  \setbox\@marbox\hb@xt@\columnwidth{%
       
   882   \csname @addmarginpar@\thepagegrid\endcsname{%
       
   883    \hskip-\marginparsep\hskip-\marginparwidth
       
   884    \box\@currbox
       
   885   }{%
       
   886    \hskip\columnwidth\hskip\marginparsep
       
   887    \box\@marbox
       
   888   }%
       
   889   \hss
       
   890  }%
       
   891  \setbox\z@\box\@currbox
       
   892     \@tempdima\@mparbottom
       
   893     \advance\@tempdima -\@pageht
       
   894     \advance\@tempdima\ht\@marbox
       
   895  \@ifdim{\@tempdima >\z@}{%
       
   896    \@latex@warning@no@line {Marginpar on page \thepage\space moved}%
       
   897  }{%
       
   898    \@tempdima\z@
       
   899  }%
       
   900     \global\@mparbottom\@pageht
       
   901     \global\advance\@mparbottom\@tempdima
       
   902     \global\advance\@mparbottom\dp\@marbox
       
   903     \global\advance\@mparbottom\marginparpush
       
   904     \advance\@tempdima -\ht\@marbox
       
   905     \global\setbox \@marbox
       
   906                    \vbox {\vskip \@tempdima
       
   907                           \box \@marbox}%
       
   908     \global \ht\@marbox \z@
       
   909     \global \dp\@marbox \z@
       
   910     \kern -\@pagedp
       
   911     \nointerlineskip
       
   912   \box\@marbox
       
   913     \nointerlineskip
       
   914     \hbox{\vrule \@height\z@ \@width\z@ \@depth\@pagedp}%
       
   915 }%
       
   916 \newenvironment{turnpage}{%
       
   917  \def\width@float{\textheight}%
       
   918  \def\widthd@float{\textheight}%
       
   919  \appdef\@endfloatbox{%
       
   920   \@ifxundefined\@currbox{%
       
   921    \ltxgrid@warn{Cannot rotate! Not a float}%
       
   922   }{%
       
   923    \setbox\@currbox\vbox to\textwidth{\vfil\unvbox\@currbox\vfil}%
       
   924    \global\setbox\@currbox\vbox{\rotatebox{90}{\box\@currbox}}%
       
   925   }%
       
   926  }%
       
   927 }{%
       
   928 }%
       
   929 \def\rotatebox@dummy#1#2{%
       
   930  \ltxgrid@warn{You must load the graphics or graphicx package in order to use the turnpage environment}%
       
   931  #2%
       
   932 }%
       
   933 \AtBeginDocument{%
       
   934  \@ifxundefined\rotatebox{\let\rotatebox\rotatebox@dummy}{}%
       
   935 }%
       
   936 \@namedef{output@-1073741824}{%"40000000
       
   937  \deadcycles\z@
       
   938  \setbox\z@\box\@cclv
       
   939 }%
       
   940 \mathchardef\save@column@pen=10016
       
   941 \@namedef{output@-\the\save@column@pen}{\save@column}%
       
   942 \let \@cclv@saved \@holdpg
       
   943 \let \@holdpg \@undefined
       
   944 \def\save@column{%
       
   945  \@ifvoid\@cclv@saved{%
       
   946 \set@top@firstmark
       
   947 \global\@topmark@saved\expandafter{\@@topmark}%
       
   948  }{}%
       
   949 \global\setbox\@cclv@saved\vbox{%
       
   950   \@ifvoid\@cclv@saved{}{%
       
   951  \unvbox\@cclv@saved
       
   952  \marry@baselines
       
   953 }%
       
   954 \unvbox\@cclv
       
   955 \lose@breaks
       
   956 \setbox\z@\lastbox
       
   957 }%
       
   958 }%
       
   959 \newtoks\@topmark@saved
       
   960 \def\prep@cclv{%
       
   961  \setbox\z@\box\@cclv
       
   962  \setbox\@cclv\box\@cclv@saved
       
   963  \vbadness\@M
       
   964 }%
       
   965 \mathchardef\save@column@insert@pen=10017
       
   966 \@namedef{output@-\the\save@column@insert@pen}{\toggle@insert\savecolumn@holding\savecolumn@moving}%
       
   967 \def\savecolumn@holding{%
       
   968 \@if@exceed@pagegoal{\unvcopy\@cclv\setbox\z@\lastbox}{%
       
   969   \setbox\z@\vbox{\unvcopy\@cclv\setbox\z@\lastbox}%
       
   970   \outputdebug@sw{{\tracingall\scrollmode\showbox\z@}}{}%
       
   971 \dimen@\ht\@cclv\advance\dimen@-\ht\z@
       
   972 \dead@cycle@repair@protected\dimen@
       
   973 }{%
       
   974 \dead@cycle
       
   975 }%
       
   976 }%
       
   977 \def\savecolumn@moving{%
       
   978  \@cclv@nontrivial@sw{%
       
   979   \save@column
       
   980  }{%
       
   981   {\setbox\z@\box\@cclv}%
       
   982  }%
       
   983 \@ifvoid\footins{}{%
       
   984 \outputdebug@sw{{\tracingall\scrollmode\showbox\footins}}{}%
       
   985 \global\setbox\footins@saved\vbox{\unvbox\footins@saved\marry@baselines\unvbox\footins}%
       
   986 \protect@penalty\save@column@insert@pen
       
   987 }%
       
   988 }%
       
   989 \newbox\footins@saved
       
   990 \mathchardef\save@message@pen=10018
       
   991 \@namedef{output@-\the\save@message@pen}{\save@message}%
       
   992 \def\save@message{%
       
   993  \setbox\z@\box\@cclv %FIXME: what if \box\@cclv is not empty?
       
   994  \toks@\expandafter{\@@firstmark}%
       
   995  \expandafter\gdef\expandafter\@message@saved\expandafter{\the\toks@}%
       
   996  \expandafter\do@@mark\expandafter{\the\@topmark@saved}%
       
   997 }%
       
   998 \gdef\@message@saved{}%
       
   999 \mathchardef\execute@message@pen=10019
       
  1000 \@namedef{output@-\the\execute@message@pen}{\@message@saved}%
       
  1001 \def\execute@message{%
       
  1002  \@execute@message\save@column@pen %Implicit #2
       
  1003 }%
       
  1004 \def\execute@message@insert#1{%
       
  1005  \@execute@message\save@column@insert@pen{\setbox\footins\box\footins@saved#1}%
       
  1006 }%
       
  1007 \long\def\@execute@message#1#2{%
       
  1008  \begingroup
       
  1009   \dimen@\prevdepth\@ifdim{\dimen@<\z@}{\dimen@\z@}{}%
       
  1010   \setbox\z@\vbox{%
       
  1011    \protect@penalty#1%
       
  1012    \protection@box
       
  1013    \toks@{\prep@cclv#2}%
       
  1014    \@@mark{\the\toks@}%
       
  1015    \penalty-\save@message@pen
       
  1016    \setbox\z@\null\dp\z@\dimen@\ht\z@-\dimen@
       
  1017    \nointerlineskip\box\z@
       
  1018    \penalty-\execute@message@pen
       
  1019   }\unvbox\z@
       
  1020  \endgroup
       
  1021 }%
       
  1022 \def\do@output@cclv{\execute@message}%
       
  1023 \def\do@output@MVL#1{%
       
  1024  \@ifvmode{%
       
  1025   \begingroup\execute@message{\unvbox\@cclv#1}\endgroup
       
  1026  }{%
       
  1027   \@ifhmode{%
       
  1028    \vadjust{\execute@message{\unvbox\@cclv#1}}%
       
  1029   }{%
       
  1030    \@latexerr{\string\do@output@MVL\space cannot be executed in this mode!}\@eha
       
  1031   }%
       
  1032  }%
       
  1033 }%
       
  1034 \def\lose@breaks{%
       
  1035  \loopwhile{%
       
  1036   \count@\lastpenalty
       
  1037   \@ifnum{\count@=\@M}{% 10000 is a TeX magic number!
       
  1038    \unpenalty\true@sw
       
  1039   }{%
       
  1040    \false@sw
       
  1041   }%
       
  1042  }%
       
  1043 }%
       
  1044 \def\removestuff{\do@output@MVL{\unskip\unpenalty}}%
       
  1045 \def\removephantombox{%
       
  1046  \vadjust{%
       
  1047   \execute@message{%
       
  1048    \unvbox\@cclv
       
  1049    \setbox\z@\lastbox
       
  1050    \unskip
       
  1051    \unskip
       
  1052    \unpenalty
       
  1053    \penalty\predisplaypenalty
       
  1054    \vskip\abovedisplayskip
       
  1055   }%
       
  1056  }%
       
  1057 }%
       
  1058 \def\addstuff#1#2{\edef\@tempa{\noexpand\do@output@MVL{\noexpand\@addstuff{#1}{#2}}}\@tempa}%
       
  1059 \def\@addstuff#1#2{%
       
  1060  \skip@\lastskip\unskip
       
  1061  \count@\lastpenalty\unpenalty
       
  1062  \@if@empty{#1}{}{\penalty#1\relax}%
       
  1063  \@ifnum{\count@=\z@}{}{\penalty\count@}%
       
  1064  \vskip\skip@
       
  1065  \@if@empty{#2}{}{\vskip#2\relax}%
       
  1066 }%
       
  1067 \def\replacestuff#1#2{\edef\@tempa{\noexpand\do@output@MVL{\noexpand\@replacestuff{#1}{#2}}}\@tempa}%
       
  1068 \def\@replacestuff#1#2{%
       
  1069  \skip@\lastskip\unskip
       
  1070  \count@\lastpenalty\unpenalty
       
  1071  \@if@empty{#1}{}{%
       
  1072  \@ifnum{\count@>\@M}{}{%
       
  1073    \@ifnum{\count@=\z@}{\count@=#1\relax}{%
       
  1074     \@ifnum{\count@<#1\relax}{}{%
       
  1075      \count@=#1\relax
       
  1076     }%
       
  1077    }%
       
  1078  }%
       
  1079  }%
       
  1080  \@ifnum{\count@=\z@}{}{\penalty\count@}%
       
  1081  \@if@empty{#2}{}{%
       
  1082   \@tempskipa#2\relax
       
  1083   \@ifdim{\z@>\@tempskipa}{%
       
  1084    \advance\skip@-\@tempskipa
       
  1085   }{%
       
  1086    \@ifdim{\skip@>\@tempskipa}{}{%
       
  1087     \skip@\@tempskipa
       
  1088    }%
       
  1089   }%
       
  1090  }%
       
  1091  \vskip\skip@
       
  1092 }%
       
  1093 \def\move@insertions{\global\holdinginserts\z@}%
       
  1094 \def\hold@insertions{\global\holdinginserts\@ne}%
       
  1095 \hold@insertions
       
  1096 \def\move@insert@sw{\@ifnum{\holdinginserts=\z@}}%
       
  1097 \def\toggle@insert#1#2{%
       
  1098  \@ifnum{\holdinginserts=\z@}{\hold@insertions#2}{\move@insertions#1}%
       
  1099 }%
       
  1100 \def\do@columngrid#1#2{%
       
  1101  \par
       
  1102  \expandafter\let\expandafter\@tempa\csname open@column@#1\endcsname
       
  1103  \@ifx{\relax\@tempa}{%
       
  1104   \ltxgrid@warn{Unknown page grid #1. No action taken}%
       
  1105  }{%
       
  1106   \do@output@MVL{\start@column{#1}{#2}}%
       
  1107  }%
       
  1108 }%
       
  1109 \def\start@column#1#2{%
       
  1110  \def\@tempa{#1}\@ifx{\@tempa\thepagegrid}{%
       
  1111   \ltxgrid@info{Already in page grid \thepagegrid. No action taken}%
       
  1112  }{%
       
  1113   \expandafter\execute@message@insert
       
  1114   \expandafter{%
       
  1115                \csname shut@column@\thepagegrid\expandafter\endcsname
       
  1116                \csname open@column@#1\endcsname{#2}%
       
  1117                \set@vsize
       
  1118              }%
       
  1119  }%
       
  1120 }%
       
  1121 \def\thepagegrid{one}%
       
  1122 \newbox\pagesofar
       
  1123 \newbox\footbox
       
  1124 \newcommand\onecolumngrid{\do@columngrid{one}{\@ne}}%
       
  1125 \let\onecolumn\@undefined
       
  1126 \def\open@column@one#1{%
       
  1127  \unvbox\pagesofar
       
  1128  \gdef\thepagegrid{one}%
       
  1129  \global\pagegrid@col#1%
       
  1130  \global\pagegrid@cur\@ne
       
  1131  \set@colht
       
  1132  \set@column@hsize\pagegrid@col
       
  1133 }%
       
  1134 \def\shut@column@one{%
       
  1135  \@makecol
       
  1136  \global\setbox\pagesofar\vbox{\unvbox\@outputbox\recover@footins}%
       
  1137  \set@colht
       
  1138 }%
       
  1139 \def\float@column@one{%
       
  1140  \@makecol
       
  1141  \@outputpage
       
  1142 }%
       
  1143 \def\end@column@one{%
       
  1144  \unvbox\@cclv\setbox\z@\lastbox
       
  1145  \protect@penalty\do@newpage@pen
       
  1146 }%
       
  1147 \def\output@column@one{%
       
  1148  \@outputpage
       
  1149 }%
       
  1150 \def\@addmarginpar@one{%
       
  1151  \@if@sw\if@mparswitch\fi{%
       
  1152   \@ifodd\c@page{\false@sw}{\true@sw}%
       
  1153  }{\false@sw}{%
       
  1154   \@if@sw\if@reversemargin\fi{\false@sw}{\true@sw}%
       
  1155  }{%
       
  1156   \@if@sw\if@reversemargin\fi{\true@sw}{\false@sw}%
       
  1157  }%
       
  1158 }%
       
  1159 \def\@floatselect@sw@one#1{\true@sw}%
       
  1160 \def\onecolumngrid@push{%
       
  1161  \do@output@MVL{%
       
  1162   \@ifnum{\pagegrid@col=\@ne}{%
       
  1163    \global\let\restorecolumngrid\@empty
       
  1164   }{%
       
  1165    \xdef\restorecolumngrid{%
       
  1166     \noexpand\start@column{\thepagegrid}{\the\pagegrid@col}%
       
  1167    }%
       
  1168    \start@column{one}{\@ne}%
       
  1169   }%
       
  1170  }%
       
  1171 }%
       
  1172 \def\onecolumngrid@pop{%
       
  1173  \do@output@MVL{\restorecolumngrid}%
       
  1174 }%
       
  1175 \newcommand\twocolumngrid{\do@columngrid{mlt}{\tw@}}%
       
  1176 \let\twocolumn\@undefined
       
  1177 \let\@topnewpage\@undefined
       
  1178 \def\open@column@mlt#1{%
       
  1179  \gdef\thepagegrid{mlt}%
       
  1180  \global\pagegrid@col#1%
       
  1181  \global\pagegrid@cur\@ne
       
  1182  \set@column@hsize\pagegrid@col
       
  1183  \set@colht
       
  1184 }%
       
  1185 \def\shut@column@mlt{%
       
  1186  \@cclv@nontrivial@sw{%
       
  1187 \@makecol
       
  1188 \@ifnum{\pagegrid@cur<\pagegrid@col}{%
       
  1189 \expandafter\global\expandafter\setbox\csname col@\the\pagegrid@cur\endcsname\box\@outputbox
       
  1190 \global\advance\pagegrid@cur\@ne
       
  1191 }{}%
       
  1192  }{%
       
  1193   {\setbox\z@\box\@cclv}%
       
  1194  }%
       
  1195 \@ifnum{\pagegrid@cur>\@ne}{%
       
  1196 \csname balance@\the\pagegrid@col\endcsname
       
  1197 \grid@column{}%
       
  1198 \@combinepage
       
  1199 \@combinedblfloats
       
  1200 \global\setbox\pagesofar\box\@outputbox
       
  1201  }{}%
       
  1202  \set@colht
       
  1203 }%
       
  1204 \def\float@column@mlt{%
       
  1205   \@combinepage
       
  1206   \@combinedblfloats
       
  1207   \@outputpage
       
  1208   \global\pagegrid@cur\@ne
       
  1209   \protect@penalty\do@startpage@pen
       
  1210 }%
       
  1211 \def\end@column@mlt{%
       
  1212  \@ifx@empty\@toplist{%
       
  1213   \@ifx@empty\@botlist{%
       
  1214    \@ifx@empty\@dbltoplist{%
       
  1215     \@ifx@empty\@deferlist{%
       
  1216      \@ifnum{\pagegrid@cur=\@ne}{%
       
  1217       \false@sw
       
  1218      }{%
       
  1219       \true@sw
       
  1220      }%
       
  1221     }{%
       
  1222      \true@sw
       
  1223     }%
       
  1224    }{%
       
  1225     \true@sw
       
  1226    }%
       
  1227   }{%
       
  1228    \true@sw
       
  1229   }%
       
  1230  }{%
       
  1231   \true@sw
       
  1232  }%
       
  1233  % true = kick out a column and try again
       
  1234  {%
       
  1235   \@cclv@nontrivial@sw{%
       
  1236    \unvbox\@cclv\setbox\z@\lastbox
       
  1237   }{%
       
  1238    \unvbox\@cclv\setbox\z@\lastbox\unskip\null
       
  1239   }%
       
  1240   \protect@penalty\do@newpage@pen
       
  1241   \protect@penalty\do@endpage@pen
       
  1242  }{%
       
  1243   \unvbox\@cclv\setbox\z@\lastbox
       
  1244  }%
       
  1245 }%
       
  1246 \def\output@column@mlt{%
       
  1247  \@ifnum{\pagegrid@cur<\pagegrid@col}{%
       
  1248   \expandafter\global\expandafter\setbox\csname col@\the\pagegrid@cur\endcsname\box\@outputbox
       
  1249   \global\advance\pagegrid@cur\@ne
       
  1250  }{%
       
  1251   \set@adj@colht\dimen@
       
  1252   \grid@column{}%{\dimen@}%
       
  1253   \@combinepage
       
  1254   \@combinedblfloats
       
  1255   \@outputpage
       
  1256   \global\pagegrid@cur\@ne
       
  1257   \protect@penalty\do@startpage@pen
       
  1258  }%
       
  1259 }%
       
  1260 \let\@outputdblcol\@undefined
       
  1261 \def\@floatselect@sw@mlt#1{\@if@notdblfloat{#1}}%
       
  1262 \def\@addmarginpar@mlt{% emits a boolean
       
  1263  \@ifnum{\pagegrid@cur=\@ne}%
       
  1264 }%
       
  1265 \let\pagegrid@cur\col@number
       
  1266 \let\col@number\@undefined
       
  1267 \newcount\pagegrid@col
       
  1268 \pagegrid@cur\@ne
       
  1269 \expandafter\let\csname col@\the\pagegrid@cur\endcsname\@leftcolumn
       
  1270 \let\@leftcolumn\@undefined
       
  1271 \pagegrid@col\tw@
       
  1272 \def\pagegrid@init{%
       
  1273  \advance\pagegrid@cur\@ne
       
  1274  \@ifnum{\pagegrid@cur<\pagegrid@col}{%
       
  1275   \csname newbox\expandafter\endcsname\csname col@\the\pagegrid@cur\endcsname
       
  1276   \pagegrid@init
       
  1277  }{%
       
  1278  }%
       
  1279 }%
       
  1280 \appdef\class@documenthook{%
       
  1281  \pagegrid@init
       
  1282 }%
       
  1283 \def\grid@column#1{%
       
  1284  \global\setbox\@outputbox\vbox{%
       
  1285   \hb@xt@\textwidth{%
       
  1286    \vrule\@height\z@\@width\z@\@if@empty{#1}{}{\@depth#1}%
       
  1287    \pagegrid@cur\@ne
       
  1288    \append@column
       
  1289    \box@column\@outputbox
       
  1290   }%
       
  1291   \vskip\z@skip % FIXME: page depth!
       
  1292  }%
       
  1293 }%
       
  1294 \def\append@column{%
       
  1295  \@ifnum{\pagegrid@cur<\pagegrid@col}{%
       
  1296   \expandafter\box@column\csname col@\the\pagegrid@cur\endcsname
       
  1297   \hfil
       
  1298   \vrule \@width\columnseprule
       
  1299   \hfil
       
  1300   \advance\pagegrid@cur\@ne
       
  1301   \append@column
       
  1302  }{%
       
  1303  }%
       
  1304 }%
       
  1305 \def\box@column#1{%
       
  1306  \raise\topskip
       
  1307  \hb@xt@\columnwidth{%
       
  1308   \dimen@\ht#1\@ifdim{\dimen@>\@colht}{\dimen@\@colht}{}%
       
  1309   \count@\vbadness\vbadness\@M
       
  1310   \dimen@ii\vfuzz\vfuzz\maxdimen
       
  1311   \outputdebug@sw{\saythe\@colht\saythe\dimen@}{}%
       
  1312   \vtop to\dimen@
       
  1313   {\hrule\@height\z@
       
  1314    \unvbox#1%
       
  1315    \raggedcolumn@skip
       
  1316   }%
       
  1317   \vfuzz\dimen@ii
       
  1318   \vbadness\count@
       
  1319   \hss
       
  1320  }%
       
  1321 }%
       
  1322 \def\marry@baselines{%
       
  1323  \vskip\marry@skip\relax
       
  1324 }%
       
  1325 \gdef\marry@skip{\z@skip}%
       
  1326 \def\set@marry@skip{%
       
  1327 \begingroup
       
  1328   \skip@\baselineskip\advance\skip@-\topskip
       
  1329   \@ifdim{\skip@>\z@}{%
       
  1330    \xdef\marry@skip{\the\skip@}%
       
  1331   }{}%
       
  1332  \endgroup
       
  1333 }%
       
  1334 \AtBeginDocument{%
       
  1335  \@ifxundefined\raggedcolumn@sw{\@booleanfalse\raggedcolumn@sw}{}%
       
  1336 }%
       
  1337 \def\raggedcolumn@skip{%
       
  1338  \vskip\z@\raggedcolumn@sw{\@plus.0001fil\@minus.0001fil}{}\relax
       
  1339 }%
       
  1340 \def\@combinepage{%
       
  1341  \@ifvoid\pagesofar{}{%
       
  1342   \setbox\@outputbox\vbox{%
       
  1343    \unvbox\pagesofar
       
  1344    \marry@baselines
       
  1345    \unvbox\@outputbox
       
  1346   }%
       
  1347  }%
       
  1348  \@ifvoid\footbox{}{%
       
  1349   \setbox\@outputbox\vbox{%
       
  1350    \unvbox\@outputbox
       
  1351    \marry@baselines
       
  1352    \unvbox\footbox
       
  1353   }%
       
  1354  }%
       
  1355 }%
       
  1356 \def\@combinedblfloats{%
       
  1357  \@ifx@empty\@dbltoplist{}{%
       
  1358   \setbox\@tempboxa\vbox{}%
       
  1359   \let\@elt\@comdblflelt\@dbltoplist
       
  1360   \let\@elt\relax\xdef\@freelist{\@freelist\@dbltoplist}%
       
  1361   \global\let\@dbltoplist\@empty
       
  1362   \setbox\@outputbox\vbox{%
       
  1363    %\boxmaxdepth\maxdepth   %% probably not needed, CAR
       
  1364    \unvbox\@tempboxa\unskip
       
  1365    \@ifnum{\@dbltopnum>\m@ne}{\dblfigrule}{}%FIXME: how is \@dbltopnum maintained?
       
  1366    \vskip\dbltextfloatsep
       
  1367    \unvbox\@outputbox
       
  1368   }%
       
  1369  }%
       
  1370 }%
       
  1371 \def\set@column@hsize#1{%
       
  1372  \pagegrid@col#1%
       
  1373  \global\columnwidth\textwidth
       
  1374  \global\advance\columnwidth\columnsep
       
  1375  \global\divide\columnwidth\pagegrid@col
       
  1376  \global\advance\columnwidth-\columnsep
       
  1377  \global\hsize\columnwidth
       
  1378  \global\linewidth\columnwidth
       
  1379  \skip@\baselineskip\advance\skip@-\topskip
       
  1380  \@ifnum{\pagegrid@col>\@ne}{\set@marry@skip}{}%
       
  1381 }%
       
  1382 \def\set@colht{%
       
  1383  \set@adj@textheight\@colht
       
  1384  \global\let\enlarge@colroom\@empty
       
  1385  \set@colroom
       
  1386 }%
       
  1387 \def\set@adj@textheight#1{%
       
  1388  #1\textheight
       
  1389  \def\@elt{\adj@page#1}%
       
  1390  \@booleantrue\firsttime@sw\@dbltoplist
       
  1391  \let\@elt\relax
       
  1392  \global#1#1\relax
       
  1393  \outputdebug@sw{\saythe#1}{}%
       
  1394 }%
       
  1395 \def\set@colroom{%
       
  1396  \set@adj@colht\@colroom
       
  1397  \@if@empty\enlarge@colroom{}{%
       
  1398   \global\advance\@colroom\enlarge@colroom\relax
       
  1399  }%
       
  1400  \outputdebug@sw{\saythe\@colroom}{}%
       
  1401  \@ifdim{\@colroom>\topskip}{}{%
       
  1402   \ltxgrid@info{Not enough room: \string\@colroom=\the\@colroom; increasing to \the\topskip}%
       
  1403   \@colroom\topskip
       
  1404  }%
       
  1405  \global\@colroom\@colroom
       
  1406  \set@vsize
       
  1407 }%
       
  1408 \def\set@vsize{%
       
  1409  \global\vsize\@colroom
       
  1410  \outputdebug@sw{\saythe\vsize}{}%
       
  1411 }%
       
  1412 \def\set@adj@colht#1{%
       
  1413  #1\@colht
       
  1414  \@ifvoid\pagesofar{}{%
       
  1415   \advance#1-\ht\pagesofar\advance#1-\dp\pagesofar
       
  1416  }%
       
  1417  \@ifvoid\footbox{}{%
       
  1418   \advance#1-\ht\footbox\advance#1-\dp\footbox
       
  1419  }%
       
  1420  \def\@elt{\adj@column#1}%
       
  1421  \@booleantrue\firsttime@sw\@toplist
       
  1422  \@booleantrue\firsttime@sw\@botlist
       
  1423  \let\@elt\relax
       
  1424  \outputdebug@sw{\saythe#1}{}%
       
  1425 }%
       
  1426 \def\adj@column#1#2{%
       
  1427  \advance#1-\ht#2%
       
  1428  \advance#1-\firsttime@sw{\textfloatsep\@booleanfalse\firsttime@sw}{\floatsep}%
       
  1429 }%
       
  1430 \def\adj@page#1#2{%
       
  1431  \advance#1-\ht#2%
       
  1432  \advance#1-\firsttime@sw{\dbltextfloatsep\@booleanfalse\firsttime@sw}{\dblfloatsep}%
       
  1433 }%
       
  1434 \appdef\@outputpage{%
       
  1435  \set@colht          % FIXME: needed?
       
  1436  \@floatplacement    % FIXME: needed?
       
  1437  \@dblfloatplacement % FIXME: needed?
       
  1438 }%
       
  1439 \@namedef{balance@2}{%
       
  1440  \expandafter\balance@two\csname col@1\endcsname\@outputbox
       
  1441  % Avoid a bug by preventing a restore when leaving this group
       
  1442  \global\setbox\csname col@1\endcsname\box\csname col@1\endcsname
       
  1443  \@ifvoid\footbox{}{%
       
  1444   \global\setbox\footbox\vbox{%
       
  1445    \setbox\z@\box\@tempboxa
       
  1446    \let\recover@footins\relax
       
  1447    \balance@two\footbox\@tempboxa
       
  1448    \hb@xt@\textwidth{\box\footbox\hfil\box\@tempboxa}%
       
  1449   }%
       
  1450  }%
       
  1451 }%
       
  1452 \def\balance@two#1#2{%
       
  1453 \outputdebug@sw{{\tracingall\scrollmode\showbox#1\showbox#2}}{}%
       
  1454  \setbox\@ne\vbox{%
       
  1455   \@ifvoid#1{}{%
       
  1456    \unvcopy#1\recover@footins
       
  1457    \@ifvoid#2{}{\marry@baselines}%
       
  1458   }%
       
  1459   \@ifvoid#2{}{%
       
  1460    \unvcopy#2\recover@footins
       
  1461   }%
       
  1462  }%
       
  1463  \dimen@\ht\@ne\divide\dimen@\tw@
       
  1464  \dimen@i\dimen@
       
  1465  \vbadness\@M
       
  1466  \vfuzz\maxdimen
       
  1467  \loopwhile{%
       
  1468   \dimen@i=.5\dimen@i
       
  1469   \outputdebug@sw{\saythe\dimen@\saythe\dimen@i\saythe\dimen@ii}{}%
       
  1470   \setbox\z@\copy\@ne\setbox\tw@\vsplit\z@ to\dimen@
       
  1471   \setbox\z@ \vbox{%
       
  1472    \unvcopy\z@
       
  1473    \setbox\z@\vbox{\unvbox\z@ \setbox\z@\lastbox\aftergroup\vskip\aftergroup-\expandafter}\the\dp\z@\relax
       
  1474   }%
       
  1475   \setbox\tw@\vbox{%
       
  1476    \unvcopy\tw@
       
  1477    \setbox\z@\vbox{\unvbox\tw@\setbox\z@\lastbox\aftergroup\vskip\aftergroup-\expandafter}\the\dp\z@\relax
       
  1478   }%
       
  1479   \dimen@ii\ht\tw@\advance\dimen@ii-\ht\z@
       
  1480   \@ifdim{\dimen@i>.5\p@}{%
       
  1481    \advance\dimen@\@ifdim{\dimen@ii<\z@}{}{-}\dimen@i
       
  1482    \true@sw
       
  1483   }{%
       
  1484    \@ifdim{\dimen@ii<\z@}{%
       
  1485     \advance\dimen@\tw@\dimen@i
       
  1486     \true@sw
       
  1487    }{%
       
  1488     \false@sw
       
  1489    }%
       
  1490   }%
       
  1491  }%
       
  1492  \outputdebug@sw{\saythe\dimen@\saythe\dimen@i\saythe\dimen@ii}{}%
       
  1493 \@ifdim{\ht\z@=\z@}{%
       
  1494 \@ifdim{\ht\tw@=\z@}{%
       
  1495 \true@sw
       
  1496 }{%
       
  1497 \false@sw
       
  1498 }%
       
  1499 }{%
       
  1500 \true@sw
       
  1501 }%
       
  1502 {%
       
  1503 }{%
       
  1504 \ltxgrid@info{Unsatifactorily balanced columns: giving up}%
       
  1505 \setbox\tw@\box#1%
       
  1506 \setbox\z@ \box#2%
       
  1507 }%
       
  1508  \setbox\tw@\vbox{\unvbox\tw@\vskip\z@skip}%
       
  1509  \setbox\z@ \vbox{\unvbox\z@ \vskip\z@skip}%
       
  1510  \set@colroom
       
  1511 \dimen@\ht\z@\@ifdim{\dimen@<\ht\tw@}{\dimen@\ht\tw@}{}%
       
  1512 \@ifdim{\dimen@>\@colroom}{\dimen@\@colroom}{}%
       
  1513  \outputdebug@sw{\saythe{\ht\z@}\saythe{\ht\tw@}\saythe\@colroom\saythe\dimen@}{}%
       
  1514 \setbox#1\vbox to\dimen@{\unvbox\tw@\unskip\raggedcolumn@skip}%
       
  1515 \setbox#2\vbox to\dimen@{\unvbox\z@ \unskip\raggedcolumn@skip}%
       
  1516 \outputdebug@sw{{\tracingall\scrollmode\showbox#1\showbox#2}}{}%
       
  1517 }%
       
  1518 \def\recover@footins{%
       
  1519  \skip\z@ \lastskip\unskip
       
  1520  \skip\@ne\lastskip\unskip
       
  1521  \setbox\z@\lastbox
       
  1522  \@ifvbox\z@{%
       
  1523 \setbox\z@\vbox{%
       
  1524 \unvbox\z@
       
  1525 \setbox\z@\lastbox
       
  1526 \@ifvoid\z@{}{%
       
  1527 \global\setbox\footbox\vbox{%
       
  1528  \unvbox\footbox
       
  1529      \@ifvbox\z@{%
       
  1530    \unvbox\z@
       
  1531   }{%
       
  1532    \box\z@
       
  1533   }%
       
  1534 }%
       
  1535 }%
       
  1536 }%
       
  1537  }{}%
       
  1538  \outputdebug@sw{{\tracingall\scrollmode\showbox\footbox}}{}%
       
  1539 }%
       
  1540 \prepdef\@begindocumenthook{%
       
  1541  \open@column@one\@ne
       
  1542  \set@colht
       
  1543  \@floatplacement
       
  1544  \@dblfloatplacement
       
  1545 }%
       
  1546 \def\longtable@longtable{%
       
  1547  \par
       
  1548  \ifx\multicols\@undefined\else\ifnum\col@number>\@ne\@twocolumntrue\fi\fi
       
  1549  \if@twocolumn\LT@err{longtable not in 1-column mode}\@ehc\fi
       
  1550  \begingroup
       
  1551  \@ifnextchar[\LT@array{\LT@array[x]}%
       
  1552 }%
       
  1553 \def\longtable@new{%
       
  1554  \par
       
  1555   \@ifnextchar[\LT@array{\LT@array[x]}%
       
  1556 }%
       
  1557 \def\endlongtable@longtable{%
       
  1558   \crcr
       
  1559   \noalign{%
       
  1560     \let\LT@entry\LT@entry@chop
       
  1561     \xdef\LT@save@row{\LT@save@row}}%
       
  1562   \LT@echunk
       
  1563   \LT@start
       
  1564   \unvbox\z@
       
  1565   \LT@get@widths
       
  1566   \if@filesw
       
  1567     {\let\LT@entry\LT@entry@write\immediate\write\@auxout{%
       
  1568       \gdef\expandafter\noexpand
       
  1569         \csname LT@\romannumeral\c@LT@tables\endcsname
       
  1570           {\LT@save@row}}}%
       
  1571   \fi
       
  1572   \ifx\LT@save@row\LT@@save@row
       
  1573   \else
       
  1574     \LT@warn{Column \@width s have changed\MessageBreak
       
  1575              in table \thetable}%
       
  1576     \LT@final@warn
       
  1577   \fi
       
  1578   \endgraf\penalty -\LT@end@pen
       
  1579   \endgroup
       
  1580   \global\@mparbottom\z@
       
  1581   \pagegoal\vsize
       
  1582   \endgraf\penalty\z@\addvspace\LTpost
       
  1583   \ifvoid\footins\else\insert\footins{}\fi
       
  1584 }%
       
  1585 \def\endlongtable@new{%
       
  1586   \crcr
       
  1587   \noalign{%
       
  1588    \let\LT@entry\LT@entry@chop
       
  1589    \xdef\LT@save@row{\LT@save@row}%
       
  1590   }%
       
  1591   \LT@echunk
       
  1592   \LT@start
       
  1593   \unvbox\z@
       
  1594   \LT@get@widths
       
  1595   \@if@sw\if@filesw\fi{%
       
  1596    {%
       
  1597     \let\LT@entry\LT@entry@write
       
  1598     \immediate\write\@auxout{%
       
  1599      \gdef\expandafter\noexpand\csname LT@\romannumeral\c@LT@tables\endcsname
       
  1600      {\LT@save@row}%
       
  1601     }%
       
  1602    }%
       
  1603   }{}%
       
  1604   \@ifx\LT@save@row\LT@@save@row{}{%
       
  1605    \LT@warn{%
       
  1606     Column \@width s have changed\MessageBreak in table \thetable
       
  1607    }\LT@final@warn
       
  1608   }%
       
  1609   \endgraf
       
  1610   \nobreak
       
  1611   \box\@ifvoid\LT@lastfoot{\LT@foot}{\LT@lastfoot}%
       
  1612  \global\@mparbottom\z@
       
  1613  \endgraf
       
  1614  \LT@post
       
  1615 }%
       
  1616 \def\LT@start@longtable{%
       
  1617  \let\LT@start\endgraf
       
  1618  \endgraf
       
  1619  \penalty\z@
       
  1620  \vskip\LTpre
       
  1621  \dimen@\pagetotal
       
  1622  \advance\dimen@ \ht\ifvoid\LT@firsthead\LT@head\else\LT@firsthead\fi
       
  1623  \advance\dimen@ \dp\ifvoid\LT@firsthead\LT@head\else\LT@firsthead\fi
       
  1624  \advance\dimen@ \ht\LT@foot
       
  1625  \dimen@ii\vfuzz\vfuzz\maxdimen
       
  1626    \setbox\tw@\copy\z@
       
  1627    \setbox\tw@\vsplit\tw@ to \ht\@arstrutbox
       
  1628    \setbox\tw@\vbox{\unvbox\tw@}%
       
  1629  \vfuzz\dimen@ii
       
  1630  \advance\dimen@ \ht
       
  1631        \ifdim\ht\@arstrutbox>\ht\tw@\@arstrutbox\else\tw@\fi
       
  1632  \advance\dimen@\dp
       
  1633        \ifdim\dp\@arstrutbox>\dp\tw@\@arstrutbox\else\tw@\fi
       
  1634  \advance\dimen@ -\pagegoal
       
  1635  \ifdim \dimen@>\z@\vfil\break\fi
       
  1636      \global\@colroom\@colht
       
  1637  \ifvoid\LT@foot\else
       
  1638    \advance\vsize-\ht\LT@foot
       
  1639    \global\advance\@colroom-\ht\LT@foot
       
  1640    \dimen@\pagegoal\advance\dimen@-\ht\LT@foot\pagegoal\dimen@
       
  1641    \maxdepth\z@
       
  1642  \fi
       
  1643  \ifvoid\LT@firsthead\copy\LT@head\else\box\LT@firsthead\fi
       
  1644  \output{\LT@output}%
       
  1645 }%
       
  1646 \def\LT@start@new{%
       
  1647  \let\LT@start\endgraf
       
  1648  \endgraf
       
  1649  \markthr@@{}%
       
  1650  \LT@pre
       
  1651  \@ifvoid\LT@firsthead{\LT@top}{\box\LT@firsthead\nobreak}%
       
  1652  \mark@envir{longtable}%
       
  1653 }%
       
  1654 \def\LT@end@hd@ft@longtable#1{%
       
  1655  \LT@echunk
       
  1656  \ifx\LT@start\endgraf
       
  1657   \LT@err{Longtable head or foot not at start of table}{Increase LTchunksize}%
       
  1658  \fi
       
  1659  \setbox#1\box\z@
       
  1660  \LT@get@widths\LT@bchunk
       
  1661 }%
       
  1662 \def\LT@end@hd@ft@new#1{%
       
  1663  \LT@echunk
       
  1664  \@ifx{\LT@start\endgraf}{%
       
  1665   \LT@err{Longtable head or foot not at start of table}{Increase LTchunksize}%
       
  1666  }%
       
  1667  \global\setbox#1\box\z@
       
  1668  \LT@get@widths
       
  1669  \LT@bchunk
       
  1670 }%
       
  1671 \def\LT@array@longtable[#1]#2{%
       
  1672   \refstepcounter{table}\stepcounter{LT@tables}%
       
  1673   \if l#1%
       
  1674     \LTleft\z@ \LTright\fill
       
  1675   \else\if r#1%
       
  1676     \LTleft\fill \LTright\z@
       
  1677   \else\if c#1%
       
  1678     \LTleft\fill \LTright\fill
       
  1679   \fi\fi\fi
       
  1680   \let\LT@mcol\multicolumn
       
  1681   \let\LT@@tabarray\@tabarray
       
  1682   \let\LT@@hl\hline
       
  1683   \def\@tabarray{%
       
  1684     \let\hline\LT@@hl
       
  1685     \LT@@tabarray}%
       
  1686   \let\\\LT@tabularcr\let\tabularnewline\\%
       
  1687   \def\newpage{\noalign{\break}}%
       
  1688   \def\pagebreak{\noalign{\ifnum`}=0\fi\@testopt{\LT@no@pgbk-}4}%
       
  1689   \def\nopagebreak{\noalign{\ifnum`}=0\fi\@testopt\LT@no@pgbk4}%
       
  1690   \let\hline\LT@hline \let\kill\LT@kill\let\caption\LT@caption
       
  1691   \@tempdima\ht\strutbox
       
  1692   \let\@endpbox\LT@endpbox
       
  1693   \ifx\extrarowheight\@undefined
       
  1694     \let\@acol\@tabacol
       
  1695     \let\@classz\@tabclassz \let\@classiv\@tabclassiv
       
  1696     \def\@startpbox{\vtop\LT@startpbox}%
       
  1697     \let\@@startpbox\@startpbox
       
  1698     \let\@@endpbox\@endpbox
       
  1699     \let\LT@LL@FM@cr\@tabularcr
       
  1700   \else
       
  1701     \advance\@tempdima\extrarowheight
       
  1702     \col@sep\tabcolsep
       
  1703     \let\@startpbox\LT@startpbox\let\LT@LL@FM@cr\@arraycr
       
  1704   \fi
       
  1705   \setbox\@arstrutbox\hbox{\vrule
       
  1706     \@height \arraystretch \@tempdima
       
  1707     \@depth \arraystretch \dp \strutbox
       
  1708     \@width \z@}%
       
  1709   \let\@sharp##\let\protect\relax
       
  1710    \begingroup
       
  1711     \@mkpream{#2}%
       
  1712     \xdef\LT@bchunk{%
       
  1713        \global\advance\c@LT@chunks\@ne
       
  1714        \global\LT@rows\z@\setbox\z@\vbox\bgroup
       
  1715        \LT@setprevdepth
       
  1716        \tabskip\LTleft\halign to\hsize\bgroup
       
  1717       \tabskip\z@ \@arstrut \@preamble \tabskip\LTright \cr}%
       
  1718   \endgroup
       
  1719   \expandafter\LT@nofcols\LT@bchunk&\LT@nofcols
       
  1720   \LT@make@row
       
  1721   \m@th\let\par\@empty
       
  1722   \everycr{}\lineskip\z@\baselineskip\z@
       
  1723   \LT@bchunk
       
  1724 }%
       
  1725 \def\LT@LR@l{\LTleft\z@   \LTright\fill}%
       
  1726 \def\LT@LR@r{\LTleft\fill \LTright\z@  }%
       
  1727 \def\LT@LR@c{\LTleft\fill \LTright\fill}%
       
  1728 \def\LT@array@new[#1]#2{%
       
  1729  \refstepcounter{table}\stepcounter{LT@tables}%
       
  1730  \table@hook
       
  1731  \LTleft\fill \LTright\fill
       
  1732  \csname LT@LR@#1\endcsname
       
  1733  \let\LT@mcol\multicolumn
       
  1734  \let\LT@@hl\hline
       
  1735  \prepdef\@tabarray{\let\hline\LT@@hl}%
       
  1736  \let\\\LT@tabularcr
       
  1737  \let\tabularnewline\\%
       
  1738  \def\newpage{\noalign{\break}}%
       
  1739  \def\pagebreak{\noalign{\ifnum`}=0\fi\@testopt{\LT@no@pgbk-}4}%
       
  1740  \def\nopagebreak{\noalign{\ifnum`}=0\fi\@testopt\LT@no@pgbk4}%
       
  1741  \let\hline\LT@hline
       
  1742  \let\kill\LT@kill
       
  1743  \let\caption\LT@caption
       
  1744  \@tempdima\ht\strutbox
       
  1745  \let\@endpbox\LT@endpbox
       
  1746  \@ifxundefined\extrarowheight{%
       
  1747   \let\@acol\@tabacol
       
  1748   \let\@classz\@tabclassz
       
  1749   \let\@classiv\@tabclassiv
       
  1750   \def\@startpbox{\vtop\LT@startpbox}%
       
  1751   \let\@@startpbox\@startpbox
       
  1752   \let\@@endpbox\@endpbox
       
  1753   \let\LT@LL@FM@cr\@tabularcr
       
  1754  }{%
       
  1755   \advance\@tempdima\extrarowheight
       
  1756   \col@sep\tabcolsep
       
  1757   \let\@startpbox\LT@startpbox
       
  1758   \let\LT@LL@FM@cr\@arraycr
       
  1759  }%
       
  1760  \let\@acoll\@tabacoll
       
  1761  \let\@acolr\@tabacolr
       
  1762  \let\@acol\@tabacol
       
  1763  \setbox\@arstrutbox\hbox{%
       
  1764   \vrule
       
  1765   \@height \arraystretch \@tempdima
       
  1766   \@depth \arraystretch \dp \strutbox
       
  1767   \@width \z@
       
  1768  }%
       
  1769  \let\@sharp##%
       
  1770  \let\protect\relax
       
  1771  \begingroup
       
  1772   \@mkpream{#2}%
       
  1773   \@mkpream@relax
       
  1774   \edef\@preamble{\@preamble}%
       
  1775   \prepdef\@preamble{%
       
  1776    \global\advance\c@LT@chunks\@ne
       
  1777    \global\LT@rows\z@
       
  1778    \setbox\z@\vbox\bgroup
       
  1779     \LT@setprevdepth
       
  1780     \tabskip\LTleft
       
  1781     \halign to\hsize\bgroup
       
  1782      \tabskip\z@
       
  1783      \@arstrut
       
  1784   }%
       
  1785   \appdef\@preamble{%
       
  1786      \tabskip\LTright
       
  1787      \cr
       
  1788   }%
       
  1789   \global\let\LT@bchunk\@preamble
       
  1790  \endgroup
       
  1791  \expandafter\LT@nofcols\LT@bchunk&\LT@nofcols
       
  1792  \LT@make@row
       
  1793  \m@th
       
  1794  \let\par\@empty
       
  1795  \everycr{}%
       
  1796  \lineskip\z@
       
  1797  \baselineskip\z@
       
  1798  \LT@bchunk
       
  1799 }%
       
  1800 \appdef\table@hook{}%
       
  1801 %% Note that it is not enough to define the environment itself; we also have to create the corresponding
       
  1802 %% \cmd\output\ routine procedures, which provide for continued footers and headers
       
  1803 %% (the very feature of \env{longtable} requiring support in the output routine).
       
  1804 %% This same consideration would arise in defining any syntactic extension to \env{longtable}, because
       
  1805 %% the environment name itself is exposed in the output routine.
       
  1806 \def\switch@longtable{%
       
  1807  \@ifpackageloaded{longtable}{%
       
  1808   \@ifx{\longtable\longtable@longtable}{%
       
  1809    \@ifx{\endlongtable\endlongtable@longtable}{%
       
  1810     \@ifx{\LT@start\LT@start@longtable}{%
       
  1811      \@ifx{\LT@end@hd@ft\LT@end@hd@ft@longtable}{%
       
  1812       \@ifx{\LT@array\LT@array@longtable}{%
       
  1813        \true@sw
       
  1814       }{\false@sw}%
       
  1815      }{\false@sw}%
       
  1816     }{\false@sw}%
       
  1817    }{\false@sw}%
       
  1818   }{\false@sw}%
       
  1819   {%
       
  1820    \class@info{Patching longtable package}%
       
  1821   }{%
       
  1822    \class@info{Patching unrecognized longtable package. (Proceeding with fingers crossed)}%
       
  1823   }%
       
  1824   \let\longtable\longtable@new
       
  1825   \let\endlongtable\endlongtable@new
       
  1826   \let\LT@start\LT@start@new
       
  1827   \let\LT@end@hd@ft\LT@end@hd@ft@new
       
  1828   \let\LT@array\LT@array@new
       
  1829   \newenvironment{longtable*}{%
       
  1830    \onecolumngrid@push
       
  1831    \longtable
       
  1832   }{%
       
  1833    \endlongtable
       
  1834    \onecolumngrid@pop
       
  1835   }%
       
  1836  }{}%
       
  1837 }%
       
  1838 \def\LT@pre{\penalty\z@\vskip\LTpre}%
       
  1839 \def\LT@bot{\nobreak\copy\LT@foot\vfil}%
       
  1840 \def\LT@top{\copy\LT@head\nobreak}%
       
  1841 \def\LT@post{\penalty\z@\addvspace\LTpost\mark@envir{\curr@envir}}%
       
  1842 \def\LT@adj{%
       
  1843  \setbox\z@\vbox{\null}\dimen@-\ht\z@
       
  1844  \setbox\z@\vbox{\unvbox\z@\LT@bot}\advance\dimen@\ht\z@
       
  1845  \global\advance\vsize-\dimen@
       
  1846 }%
       
  1847 \def\output@init@longtable{\LT@adj}%
       
  1848 \def\output@prep@longtable{\setbox\@cclv\vbox{\unvbox\@cclv\LT@bot}}%
       
  1849 \def\output@post@longtable{\LT@top}%
       
  1850 \let\output@init@theindex\@empty
       
  1851 \let\output@prep@theindex\@empty
       
  1852 \def\output@post@theindex{%
       
  1853  \@ifodd\c@page{}{%
       
  1854   \@ifnum{\pagegrid@cur=\@ne}{% we have the leftmost column of a verso page
       
  1855    % insert the current top-level continued head
       
  1856   }%
       
  1857  }%
       
  1858 }%
       
  1859 \def\check@aux{\do@output@MVL{\do@check@aux}}%
       
  1860 \def\check@deferlist@stuck#1{%
       
  1861  \@ifx{\@deferlist@postshipout\@empty}{}{%
       
  1862   \@ifx{\@deferlist@postshipout\@deferlist}{%
       
  1863    \@fltstk
       
  1864    \clearpage@sw{%
       
  1865     \ltxgrid@warn{Deferred float stuck during \string\clearpage\space processing}%
       
  1866    }{%
       
  1867     \force@deferlist@stuck#1%
       
  1868    }%
       
  1869   }{%
       
  1870    %Successfully committed float(s)
       
  1871   }%
       
  1872   \global\let\@deferlist@postshipout\@empty
       
  1873  }%
       
  1874 }%
       
  1875 \def\@fltstk{%
       
  1876  \@latex@warning{A float is stuck (cannot be placed without \string\clearpage)}%
       
  1877 }%
       
  1878 \appdef\@outputpage{%
       
  1879  \global\let\@deferlist@postshipout\@deferlist
       
  1880 }%
       
  1881 \def\@next#1#2{%
       
  1882  \@ifx{#2\@empty}{\false@sw}{%
       
  1883   \expandafter\@xnext#2\@@#1#2%
       
  1884   \true@sw
       
  1885  }%
       
  1886 }%
       
  1887 \def\@xnext\@elt#1#2\@@#3#4{%
       
  1888  \def#3{#1}%
       
  1889  \gdef#4{#2}%
       
  1890  \def\@tempa{#4}\def\@tempb{\@freelist}%
       
  1891  \@ifx{\@tempa\@tempb}{%
       
  1892   \@ifx{#4\@empty}{%
       
  1893    \force@deferlist@empty%{Float register pool exhausted}%
       
  1894   }{}%
       
  1895  }{}%
       
  1896 }%
       
  1897 \def\force@deferlist@stuck#1{%
       
  1898 \force@deferlist@sw{%
       
  1899   \@booleantrue\clearpage@sw
       
  1900   \@booleantrue\forcefloats@sw
       
  1901   #1%
       
  1902 }{%
       
  1903 }%
       
  1904 }%
       
  1905 \def\force@deferlist@empty{%
       
  1906  \force@deferlist@sw{%
       
  1907   \penalty-\pagebreak@pen
       
  1908   \protect@penalty\do@forcecolumn@pen
       
  1909  }{%
       
  1910  }%
       
  1911 }%
       
  1912 \@booleanfalse\force@deferlist@sw
       
  1913 \mathchardef\do@forcecolumn@pen=10009
       
  1914 \@namedef{output@-\the\do@forcecolumn@pen}{\do@forcecolumn}%
       
  1915 \def\do@forcecolumn{%
       
  1916  \@booleantrue\clearpage@sw
       
  1917  \@booleantrue\forcefloats@sw
       
  1918  \do@startcolumn
       
  1919 }%
       
  1920 \def\enlargethispage{%
       
  1921 \@ifstar{%
       
  1922 \@enlargethispage{}%
       
  1923 }{%
       
  1924 \@enlargethispage{}%
       
  1925 }%
       
  1926 }%
       
  1927 \def\@enlargethispage#1#2{%
       
  1928  \begingroup
       
  1929   \dimen@#2\relax
       
  1930   \edef\@tempa{#1}%
       
  1931   \edef\@tempa{\noexpand\@@enlargethispage{\@tempa}{\the\dimen@}}%
       
  1932   \expandafter\do@output@MVL\expandafter{\@tempa}%
       
  1933  \endgroup
       
  1934 }%
       
  1935 \def\@@enlargethispage#1#2{%
       
  1936  \def\@tempa{one}%
       
  1937  \@ifx{\thepagegrid\@tempa}{%
       
  1938   \true@sw
       
  1939  }{%
       
  1940   \def\@tempa{mlt}%
       
  1941   \@ifx{\thepagegrid\@tempa}{%
       
  1942    \@ifnum{\pagegrid@cur=\@ne}{% OK to adjust this page
       
  1943     \gdef\enlarge@colroom{#2}%
       
  1944     \true@sw
       
  1945    }{% Can only adjust this column; give up
       
  1946     \ltxgrid@warn{Too late to enlarge this page; move the command to the first column.}%
       
  1947     \false@sw
       
  1948    }%
       
  1949   }{% Unknown page grid
       
  1950    \ltxgrid@warn{Unable to enlarge a page of this kind.}%
       
  1951    \false@sw
       
  1952   }%
       
  1953  }%
       
  1954  {%
       
  1955   \class@info{Enlarging page \thepage\space by #2}%
       
  1956   \global\advance\@colroom#2\relax
       
  1957   \set@vsize
       
  1958  }{%
       
  1959   % Could not adjust this page
       
  1960  }%
       
  1961 }%
       
  1962 \let\enlarge@colroom\@empty
       
  1963 \let\@kludgeins\@undefined
       
  1964 \@booleantrue\textheight@sw
       
  1965 \prepdef\@outputpage{%
       
  1966  \textheight@sw{%
       
  1967   \count@\vbadness\vbadness\@M
       
  1968   \dimen@\vfuzz\vfuzz\maxdimen
       
  1969   \setbox\@outputbox\vbox to\textheight{\unvbox\@outputbox}%
       
  1970   \vfuzz\dimen@
       
  1971   \vbadness\count@
       
  1972  }{}%
       
  1973 }%
       
  1974 \def\ltxgrid@info{%
       
  1975  \ltxgrid@info@sw{\class@info}{\@gobble}%
       
  1976 }%
       
  1977 \@booleanfalse\ltxgrid@info@sw
       
  1978 \def\ltxgrid@warn{%
       
  1979  \ltxgrid@warn@sw{\class@warn}{\@gobble}%
       
  1980 }%
       
  1981 \@booleantrue\ltxgrid@warn@sw
       
  1982 \endinput
       
  1983 %%
       
  1984 %% End of file `ltxgrid.sty'.