diff options
author | Norbert Preining <preining@logic.at> | 2017-04-04 04:53:44 +0000 |
---|---|---|
committer | Norbert Preining <preining@logic.at> | 2017-04-04 04:53:44 +0000 |
commit | f04e93dee693425394125c4484ebb289861a2d43 (patch) | |
tree | a748a632862501e01ef39932fc7a53cf821c355b /Master/texmf-dist | |
parent | 0c4c6187bf5b5cfdc35556ee4ecd49f812571955 (diff) |
sttools (4Apr)
git-svn-id: svn://tug.org/texlive/trunk@43684 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist')
-rw-r--r-- | Master/texmf-dist/doc/latex/sttools/README.md | 8 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/sttools/flushend.pdf | bin | 138739 -> 147962 bytes | |||
-rw-r--r-- | Master/texmf-dist/doc/latex/sttools/stfloats.pdf | bin | 125950 -> 125623 bytes | |||
-rw-r--r-- | Master/texmf-dist/source/latex/sttools/flushend.dtx | 1301 | ||||
-rw-r--r-- | Master/texmf-dist/source/latex/sttools/stfloats.dtx | 13 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/sttools/flushend.sty | 1138 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/sttools/stfloats.sty | 8 |
7 files changed, 1410 insertions, 1058 deletions
diff --git a/Master/texmf-dist/doc/latex/sttools/README.md b/Master/texmf-dist/doc/latex/sttools/README.md index da5691dbe06..eea5d0d9fc8 100644 --- a/Master/texmf-dist/doc/latex/sttools/README.md +++ b/Master/texmf-dist/doc/latex/sttools/README.md @@ -1,4 +1,4 @@ -README for sttools, v1.9 2016/06/28 +README for sttools, v2.0 2017/03/27 INTRODUCTION ============ @@ -17,7 +17,7 @@ PACKAGES * floatpag.sty, v1.1 2012/05/29: – sets pagestyle for floats page; -* flushend.sty, v3.2 2016/06/21: +* flushend.sty, v3.3 2017/03/27: – balances page in twocolumn mode; (2014/03/03): totally rewritten with new algorithm to support footnotes, top floats and column break before one line section title; @@ -27,6 +27,7 @@ PACKAGES - optional old algorithm for backward compatability; (2015/04/14): set debug option off by default; keeplastbox modified; (2016/06/21): bugfix compatibility with luatexja package; + (2017/03/27): bugfix version with new options for some checks on/off; * marginal.sty, v1.1 2012/05/29: – enlarges room for marginal inserts; @@ -42,9 +43,10 @@ PACKAGES on page boundary; added tabular variant from array package; -* stfloats.sty, v3.2 2016/06/28: +* stfloats.sty, v3.3 2017/03/27: – enriches floats output mechanism; (2016/06/28): compatibility bugfix with 2015 latexrelease; + (2017/03/27): compatibility bugfix with 2017-05-01 latexrelease; * texsort.sty, v1.1 2012/05/29: - sorts numerical values; diff --git a/Master/texmf-dist/doc/latex/sttools/flushend.pdf b/Master/texmf-dist/doc/latex/sttools/flushend.pdf Binary files differindex 53fa550f671..00a66aa2082 100644 --- a/Master/texmf-dist/doc/latex/sttools/flushend.pdf +++ b/Master/texmf-dist/doc/latex/sttools/flushend.pdf diff --git a/Master/texmf-dist/doc/latex/sttools/stfloats.pdf b/Master/texmf-dist/doc/latex/sttools/stfloats.pdf Binary files differindex a8a904a3851..ee3ca96e817 100644 --- a/Master/texmf-dist/doc/latex/sttools/stfloats.pdf +++ b/Master/texmf-dist/doc/latex/sttools/stfloats.pdf diff --git a/Master/texmf-dist/source/latex/sttools/flushend.dtx b/Master/texmf-dist/source/latex/sttools/flushend.dtx index ed592669316..2634f02e804 100644 --- a/Master/texmf-dist/source/latex/sttools/flushend.dtx +++ b/Master/texmf-dist/source/latex/sttools/flushend.dtx @@ -1,6 +1,6 @@ -% \iffalse meta-comment +% \iffalse meta-comment/*% \end{macrocode}*/ % -% Copyright (C) 2016 by Sigitas Tolu\v{s}is <sigitas@vtex.lt> +% Copyright (C) 2017 by Sigitas Tolu\v{s}is <sigitas@vtex.lt> % --------------------------------------------------------------------------- % This work may be distributed and/or modified under the % conditions of the LaTeX Project Public License, either version 1.3 @@ -20,11 +20,25 @@ % \fi % % \iffalse +%<*internal> +\begingroup +%</internal> +%<*batchfile> +\input docstrip.tex +\keepsilent\askforoverwritefalse +\nopreamble\nopostamble +\generate{\file{flushend.sty}{\from{flushend.dtx}{package}}} +%</batchfile> +%<batchfile>\endbatchfile +%<*internal> +\generate{\file{flushend.ins}{\from{flushend.dtx}{batchfile}}} +\endgroup +%</internal> %<*driver> \ProvidesFile{flushend.dtx} %</driver> %<*package> -%% Copyright (C) 1997-2016 by Sigitas Tolu\v{s}is <sigitas@vtex.lt> +%% Copyright (C) 1997-2017 by Sigitas Tolu\v{s}is <sigitas@vtex.lt> %% VTeX Ltd., Mokslinink\k{u} 2a, Vilnius, Lithuania %% http://www.vtex.lt/tex/download/macros/ %% -------------------------------------------------------------------------- @@ -42,7 +56,7 @@ %<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01] %<package>\ProvidesPackage{flushend} %<*package> - [2016/06/21 v3.2 Balancing columns in twocolumn mode] + [2017/03/27 v3.3 Balancing columns in twocolumn mode] %</package> % %<*driver> @@ -51,6 +65,7 @@ \EnableCrossrefs \CodelineIndex %%\RecordChanges +%\OnlyDescription \begin{document} \DocInput{flushend.dtx} %%\PrintChanges @@ -59,7 +74,7 @@ %</driver> % \fi % -% \CheckSum{1738} +% \CheckSum{1855} % % \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 @@ -91,6 +106,7 @@ % removelastbox/keeplastbox} % \changes{v3.1}{2015/04/14}{set debug option off by default; keeplastbox modified;} % \changes{v3.2}{2016/06/21}{bugfix compatibility with luatexja} +% \changes{v3.3}{2017/03/27}{bugfix for get@@footnoterule@@box; options for some checks on/off} % % \DoNotIndex{\newcommand,\newenvironment} % @@ -164,14 +180,18 @@ % \medskip % \DescribeMacro{ancient} % It is used to switch on old version of balancing algorithm. +% This version is not so accurate or "clever" but quite safe. % % \medskip % \DescribeMacro{modern} -% It is used to switch on new version of balancing algorithm. +% [default] It is used to switch on new version of balancing algorithm. +% This version has some heuristic guesses for footnotes, floats +% and section like head skip. So it is more dangerous in the case +% for text misplace or disappear. % % \medskip % \DescribeMacro{autobase} -% It is used to guess |\baselineskip| value on original columns +% [default] It is used to guess |\baselineskip| value on original columns % break. On failure just use |\atColsBreak{...}|. % % \medskip @@ -180,7 +200,7 @@ % % \medskip % \DescribeMacro{spread} -% It adds extra glue to the rightcolumn trying to balance. +% [default] It adds extra glue to the rightcolumn trying to balance. % % \medskip % \DescribeMacro{nospread} @@ -188,11 +208,28 @@ % % \medskip % \DescribeMacro{removelastbox} -% It tries to remove an empty box (some more material) from the last column bottom. +% [default] It tries to remove an empty box (some more material) from the last column bottom. % % \medskip % \DescribeMacro{keeplastbox} -% It skips removing anything from the last column. +% It skips removing anything from the last column. As example it is usefull and can be used +% then document ends by reference item and last line of text should be with indend. +% +% \medskip +% \DescribeMacro{checkfootnote} +% [default] Adds guess for footnote on left column then modern balancing algorithm is in use. +% +% \medskip +% \DescribeMacro{nocheckfootnote} +% Skips guess for footnote then modern balansing algorithm is in use. +% +% \medskip +% \DescribeMacro{checkfloat} +% [default] Adds guess for top float on right column then modern balancing algorithm is in use. +% +% \medskip +% \DescribeMacro{nocheckfloat} +% Skips guess for top float on right column then modern balancing algorithm is in use. % % \medskip % \DescribeMacro{debug} @@ -201,7 +238,7 @@ % % \medskip % \DescribeMacro{nodebug} -% Skips putting debuging lines. +% [default] Skips putting debuging lines. % % \StopEventually{} % @@ -211,7 +248,7 @@ %<*package> % \fi % -% +%/*% \begin{macrocode}*/ % \begin{macrocode} \newif\if@auto@baselineskip \@auto@baselineskiptrue \newif\if@ancient@balance@version \@ancient@balance@versionfalse @@ -226,12 +263,31 @@ \DeclareOption{nospread}{\global\@right@column@spreadfalse} \DeclareOption{removelastbox}{\global\@remove@lastbox@at@balancingtrue} \DeclareOption{keeplastbox}{\global\@remove@lastbox@at@balancingfalse} +\DeclareOption{checkfootnote}{% + \AtEndOfPackage{% + \let\check@@footnoterule@@box\initial@check@@footnoterule@@box + }% + } +\DeclareOption{nocheckfootnote}{% + \AtEndOfPackage{% + \let\check@@footnoterule@@box\@gobblethree + }% + } +\DeclareOption{checkfloat}{% + \AtEndOfPackage{% + \let\top@@floatbox@min\top@@floatbox@min@default + }% + } +\DeclareOption{nocheckfloat}{% + \AtEndOfPackage{% + \let\top@@floatbox@min\maxdimen + }% + } \DeclareOption{debug}{\global\@balance@debugtrue} \DeclareOption{nodebug}{\global\@balance@debugfalse} \ProcessOptions % \end{macrocode} % -% % \begin{macrocode} \newskip\flushend@@lastskip@a \newskip\flushend@@lastskip@b @@ -242,14 +298,14 @@ \newdimen\var@@temp@a \def\top@@skip@@limit{.7\topskip} \newdimen\flushend@@page@rule \flushend@@page@rule\z@ -\def\showcolsendrule{\global\flushend@@page@rule=.4pt} +\def\showcolsendrule{\global\flushend@@page@rule=.4\p@} % \end{macrocode} % -% % \begin{macro}{\top@@floatbox@min}\marg{float size} % This value is used to catch possible float on right column top. % \begin{macrocode} -\gdef\top@@floatbox@min{4\topskip} +\gdef\top@@floatbox@min@default{4\topskip} +\let\top@@floatbox@min\top@@floatbox@min@default % \end{macrocode} % \end{macro} % @@ -276,25 +332,28 @@ % It is used to remove empty box at the right column end. % \begin{macrocode} \def\unskip@three@kern@penalty{% - \unskip\unkern\unpenalty - \unskip\unkern\unpenalty - \unskip\unkern\unpenalty - } + \unskip\unkern\unpenalty + \unskip\unkern\unpenalty + \unskip\unkern\unpenalty + } \gdef\remove@lastbox@at@balancing{% - \unskip@three@kern@penalty - \if@remove@lastbox@at@balancing - \else - \expandafter\null - \fi - \bgroup - \setbox\z@\lastbox - \ifdim\wd\z@>\z@ - \box\z@ + \unskip@three@kern@penalty + \if@remove@lastbox@at@balancing \else - \aftergroup\unskip@three@kern@penalty + \expandafter\null \fi - \egroup - } + \bgroup + \setbox\z@\lastbox + \ifdim\wd\z@>\z@ + \box\z@ + \else + \aftergroup\unskip@three@kern@penalty + \fi + \egroup + } +\def\set@split@topskip@to#1{% + \splittopskip#1\relax \vfuzz\maxdimen \vbadness\maxdimen + } % \end{macrocode} % \end{macro} % @@ -302,11 +361,11 @@ % % \begin{macrocode} \def\show@@box#1{% - \bgroup - \showboxbreadth=20000\showboxdepth=20000% - \showbox#1\relax - \egroup - } + \bgroup + \showboxbreadth=20000\showboxdepth=20000% + \showbox#1\relax + \egroup + } \def\wlog@balance@debug#1{\if@balance@debug \wlog{#1}\fi} \def\log@box@info#1{<box\the#1>(\the\ht#1+\the\dp#1)x\the\wd#1} \let\show@@box@next\@gobble @@ -318,533 +377,682 @@ % % \begin{macrocode} \gdef\analyze@lastbox@box#1{% - \setbox\flushend@@varbox@a\vbox{% - \unvbox#1% - \global\flushend@@lastskip@a\lastskip - \unskip - \global\var@@temp@a\lastkern - \unkern - \global\flushend@@penalty@a\lastpenalty - \unpenalty - \ifdim\lastskip>\z@ - \global\flushend@@lastskip@a\lastskip - \fi - \unskip - \ifdim\lastkern>\z@ - \global\var@@temp@a\lastkern - \fi - \unkern - \ifnum\lastpenalty>\z@ - \global\flushend@@penalty@a\lastpenalty - \fi - \unpenalty - \global\setbox\flushend@@tempbox@a\lastbox - }% - \wlog@balance@debug{^^J::analyze@lastbox@box::\log@box@info{#1}% - ^^J ::unvbox: \log@box@info{\flushend@@varbox@a}% - ^^J::lastbox: \log@box@info{\flushend@@tempbox@a}% - ^^J::lastskip: \the\flushend@@lastskip@a; - lastkern: \the\var@@temp@a; - lastpenalty: \the\flushend@@penalty@a - }% - } + \setbox\flushend@@varbox@a\vbox{% + \unvbox#1% + \global\flushend@@lastskip@a\lastskip + \unskip + \global\var@@temp@a\lastkern + \unkern + \global\flushend@@penalty@a\lastpenalty + \unpenalty + \ifdim\lastskip>\z@ + \global\flushend@@lastskip@a\lastskip + \fi + \unskip + \ifdim\lastkern>\z@ + \global\var@@temp@a\lastkern + \fi + \unkern + \ifnum\lastpenalty>\z@ + \global\flushend@@penalty@a\lastpenalty + \fi + \unpenalty + \global\setbox\flushend@@tempbox@a\lastbox + }% + \wlog@balance@debug{^^J::analyze@lastbox@box::\log@box@info{#1}% + ^^J ::unvbox: \log@box@info{\flushend@@varbox@a}% + ^^J::lastbox: \log@box@info{\flushend@@tempbox@a}% + ^^J::lastskip: \the\flushend@@lastskip@a; + lastkern: \the\var@@temp@a; + lastpenalty: \the\flushend@@penalty@a + }% + } % \end{macrocode} % % \begin{macro}{\analyze@leftcolumn@box}\marg{box} +% +% Fills: +% \begin{itemize} +% \item baselineskip skip from the last boxes to |\flushend@@lastskip@c| +% \item leftcolumn height without the footnote to |\main@box@height| +% \item footnote skip to |\main@box@skip| +% \end{itemize} +% % \begin{macrocode} \gdef\analyze@leftcolumn@box#1{% - \splittopskip\z@ \vfuzz\maxdimen \vbadness\maxdimen - \flushend@@lastskip@b\ht#1% - \wlog@balance@debug{^^Jmainbox: \log@box@info{#1}}% - \setbox\flushend@@varbox@a\vbox{% - \unvbox#1% - \global\flushend@@lastskip@a\lastskip - \unskip - \global\flushend@@lastkern@a\lastkern - \unkern - \global\flushend@@penalty@a\lastpenalty - \unpenalty - \global\setbox\flushend@@tempbox@a\lastbox - }% - \advance\flushend@@lastskip@b -\ht\flushend@@varbox@a - \advance\flushend@@lastskip@b -\ht\flushend@@tempbox@a - \wlog@balance@debug{.-box: \log@box@info{\flushend@@varbox@a}% - ^^J.-lastbox: \log@box@info{\flushend@@tempbox@a}% - ^^J.-lastskip: \the\flushend@@lastskip@a; - lastkern: \the\flushend@@lastkern@a; - lastpenalty: \the\flushend@@penalty@a - ^^J.-diff: \the\flushend@@lastskip@b - }% - \check@@footnoterule@@box\flushend@@tempbox@a\flushend@@lastskip@b\flushend@@varbox@a - \check@@baselineskip@@skip\flushend@@lastskip@a\flushend@@lastskip@b\flushend@@lastskip@c - \ifvoid\flushend@@tempbox@a - \ifdim\ht\flushend@@varbox@a>\topskip - \flushend@@lastskip@b\ht\flushend@@varbox@a - \var@@temp@a\ht\flushend@@varbox@a - \loop - \setbox\flushend@@tempbox@c\vsplit\flushend@@varbox@a to\var@@temp@a - \ifvoid\flushend@@varbox@a - \setbox\flushend@@varbox@a\vbox{\unvbox\flushend@@tempbox@c}% - \advance \var@@temp@a -3\p@ - \else - \var@@temp@a=-1\p@ - \fi - \ifdim \var@@temp@a>\z@ - \repeat - \setbox\flushend@@varbox@a\vbox{\unvbox\flushend@@varbox@a}% - \setbox\flushend@@tempbox@c\vbox{\unvbox\flushend@@tempbox@c}% - \advance\flushend@@lastskip@b -\ht\flushend@@varbox@a - \advance\flushend@@lastskip@b -\ht\flushend@@tempbox@c - \wlog@balance@debug{..--box: \log@box@info{\flushend@@tempbox@c}% - ^^J..--lastbox: \log@box@info{\flushend@@varbox@a}% - ^^J..--diff: \the\flushend@@lastskip@b}% - \check@@footnoterule@@box\flushend@@varbox@a\flushend@@lastskip@b - \flushend@@tempbox@c - \check@@baselineskip@@skip\flushend@@lastskip@a\flushend@@lastskip@b - \flushend@@lastskip@c - \ifdim\ht\flushend@@varbox@a>.5\topskip - \analyze@lastbox@box\flushend@@varbox@a - \fi - \setbox\flushend@@varbox@a\vbox{\unvbox\flushend@@tempbox@c}% - \else - \wlog@balance@debug{lastbox: \log@box@info{\flushend@@varbox@a}}% - \fi - \fi - \ifdim\ht\flushend@@varbox@a>\topskip - \expandafter\analyze@leftcolumn@box\expandafter\flushend@@varbox@a - \fi - } + \set@split@topskip@to\z@ + \flushend@@lastskip@b\ht#1% + \wlog@balance@debug{^^Jmainbox: \log@box@info{#1}}% + \setbox\flushend@@varbox@a\vbox{% + \unvbox#1% + \global\flushend@@lastskip@a\lastskip + \unskip + \global\flushend@@lastkern@a\lastkern + \unkern + \global\flushend@@penalty@a\lastpenalty + \unpenalty + \global\setbox\flushend@@tempbox@a\lastbox + }% + \advance\flushend@@lastskip@b -\ht\flushend@@varbox@a + \advance\flushend@@lastskip@b -\ht\flushend@@tempbox@a + \wlog@balance@debug{.-box: \log@box@info{\flushend@@varbox@a}% + ^^J.-lastbox: \log@box@info{\flushend@@tempbox@a}% + ^^J.-lastskip: \the\flushend@@lastskip@a; + lastkern: \the\flushend@@lastkern@a; + lastpenalty: \the\flushend@@penalty@a + ^^J.-diff: \the\flushend@@lastskip@b + }% + \check@@footnoterule@@box\flushend@@tempbox@a\flushend@@lastskip@b\flushend@@varbox@a + \check@@baselineskip@@skip + \flushend@@lastskip@a + \flushend@@lastskip@b + \flushend@@lastskip@c + \ifx\check@@footnoterule@@box\check@@baselineskip@@skip + \else + \ifvoid\flushend@@tempbox@a + \ifdim\ht\flushend@@varbox@a>\topskip + \flushend@@lastskip@b\ht\flushend@@varbox@a + \var@@temp@a\ht\flushend@@varbox@a + \loop + \setbox\flushend@@tempbox@c\vsplit\flushend@@varbox@a to\var@@temp@a + \ifvoid\flushend@@varbox@a + \setbox\flushend@@varbox@a\vbox{\unvbox\flushend@@tempbox@c}% + \advance \var@@temp@a -3\p@ + \else + \var@@temp@a=-1\p@ + \fi + \ifdim \var@@temp@a>\z@ + \repeat + \setbox\flushend@@varbox@a\vbox{\unvbox\flushend@@varbox@a}% + \setbox\flushend@@tempbox@c\vbox{\unvbox\flushend@@tempbox@c}% + \advance\flushend@@lastskip@b -\ht\flushend@@varbox@a + \advance\flushend@@lastskip@b -\ht\flushend@@tempbox@c + \wlog@balance@debug{..--box: \log@box@info{\flushend@@tempbox@c}% + ^^J..--lastbox: \log@box@info{\flushend@@varbox@a}% + ^^J..--diff: \the\flushend@@lastskip@b + }% + \check@@footnoterule@@box\flushend@@varbox@a\flushend@@lastskip@b + \flushend@@tempbox@c + \check@@baselineskip@@skip\flushend@@lastskip@a\flushend@@lastskip@b + \flushend@@lastskip@c + \ifx\check@@footnoterule@@box\check@@baselineskip@@skip + \else + \ifdim\ht\flushend@@varbox@a>.5\topskip + \analyze@lastbox@box\flushend@@varbox@a + \fi + \setbox\flushend@@varbox@a\vbox{\unvbox\flushend@@tempbox@c}% + \fi + \else + \wlog@balance@debug{lastbox: \log@box@info{\flushend@@varbox@a}}% + \fi + \fi + \ifdim\ht\flushend@@varbox@a>\topskip + \expandafter\analyze@leftcolumn@box\expandafter\flushend@@varbox@a + \fi + \fi + } % \end{macrocode} % \end{macro} % % \begin{macro}{\get@@footnoterule@@box} +% +% Gets dimensions of the box made by |footnoterule| and writes to: +% |\footnoterule@@box@@ht|, |\footnoterule@@box@@dp|, |\footnoterule@@box@@wd|. +% % \begin{macrocode} \def\get@@footnoterule@@box{% - \splittopskip\z@ \vfuzz\maxdimen \vbadness\maxdimen + \set@split@topskip@to\z@ \setbox\flushend@@varbox@a\vbox{\strut \vskip\z@ \footnoterule \unskip\unkern\unpenalty \unskip\unkern\unpenalty }% - \setbox\flushend@@tempbox@c\vsplit\flushend@@varbox@a to\ht\strutbox + \setbox\flushend@@tempbox@c\vsplit\flushend@@varbox@a to\p@ \xdef\footnoterule@@box@@ht{\the\ht\flushend@@varbox@a}% \xdef\footnoterule@@box@@dp{\the\dp\flushend@@varbox@a}% \xdef\footnoterule@@box@@wd{\the\wd\flushend@@varbox@a}% \wlog@balance@debug{:footnoterule: \log@box@info{\flushend@@varbox@a}}% + \setbox\flushend@@tempbox@c\vbox{\unvbox\flushend@@varbox@a}% } % \end{macrocode} % \end{macro} % -% \begin{macro}{\check@@footnoterule@@box}\marg{box}\marg{skip}\marg{box} +% \begin{macro}{\check@@footnoterule@@box}\marg{box1}\marg{skip}\marg{box2} +% +% Checks if \marg{box1} dimensions equals to |footnoterule| box dimensions. +% If so and if \marg{skip} is not |\topskip| we guess it is footnote. +% In that case we define |leftcolumn| height without |footnote| as +% \marg{box2} height and save it as |\main@box@height|. Skip from text to +% footnote define as |\main@box@skip|. +% % \begin{macrocode} +\long\def\@gobblethree#1#2#3{} \def\check@@footnoterule@@box#1#2#3{% \ifdim\ht#1=\footnoterule@@box@@ht - \ifdim\dp#1=\footnoterule@@box@@dp - \ifdim\wd#1=\footnoterule@@box@@wd - \ifdim#2>\topskip - \xdef\main@box@height{\the\ht#3}% - \xdef\main@box@skip{\the#2}% - \fi + \ifdim\dp#1=\footnoterule@@box@@dp + \ifdim\wd#1=\footnoterule@@box@@wd + \ifdim#2=\topskip + \else + \xdef\main@box@height{\the\ht#3}% + \xdef\main@box@skip{\the#2}% + \wlog@balance@debug{^^J:footnoterule found: + main@box <ht=\main@box@height, + skip=\main@box@skip> + }% + \global\let\check@@footnoterule@@box\@gobblethree + \global\let\check@@baselineskip@@skip\reset@check@@baselineskip@@skip + \fi + \fi \fi - \fi \fi - } + } +\let\initial@check@@footnoterule@@box\check@@footnoterule@@box % \end{macrocode} % \end{macro} % -% \begin{macro}{\check@@baselineskip@@skip}\marg{dimension}\marg{dimension}\marg{var} +% \begin{macro}{\check@@baselineskip@@skip}\marg{dimension1}\marg{dimension2}\marg{var} +% +% If both dimensions: \marg{dimension1} and \marg{dimension2} are positive we +% define by \marg{var} value of \marg{dimension1} as last skip between text lines +% and deactivate |\check@@baselineskip@@skip| itself. +% % \begin{macrocode} \def\check@@baselineskip@@skip#1#2#3{% \ifdim#1>\z@ \ifdim#2>\z@ \global#3=\the#1% - \gdef\check@@baselineskip@@skip##1##2##3{}% + \global\let\check@@baselineskip@@skip\@gobblethree \fi \fi - } + } +\let\initial@check@@baselineskip@@skip\check@@baselineskip@@skip +% \end{macrocode} +% +% In the case we found footnote it is necessary to look for the last skip +% between text lines again. For that we use +% |\reset@check@@baselineskip@@skip|. It activates |\check@@baselineskip@@skip|. +% +% \begin{macrocode} +\def\reset@check@@baselineskip@@skip#1#2#3{% + \global#3=\z@ + \global\let\check@@baselineskip@@skip\initial@check@@baselineskip@@skip + } % \end{macrocode} % \end{macro} % % \begin{macro}{\analyze@rightcolumn@box}\marg{box} +% +% Some guess of possible float or section title at the top of right column.\break +% Fills: +% \begin{itemize} +% \item float height to |\top@@floatbox@ht| +% \item float skip to |\top@@floatbox@skip| +% \item head skip to |\top@@section@skip| +% \end{itemize} +% % \begin{macrocode} \def\analyze@rightcolumn@box#1{% - \bgroup - \xdef\top@@floatbox@ht{\z@}% - \xdef\top@@floatbox@skip{\z@}% - \xdef\top@@section@skip{\z@}% - \splittopskip\z@ \vfuzz\maxdimen \vbadness\maxdimen - \wlog@balance@debug{^^J(R)mainbox: \log@box@info{#1}}% - \var@@temp@a3\p@ - \setbox\flushend@@varbox@a\vbox{\strut - \vskip\z@ - \unvcopy#1% - }% - \splittopskip\z@ - \setbox\flushend@@tempbox@c\vsplit\flushend@@varbox@a to\ht\strutbox - \flushend@@lastskip@a\ht\flushend@@varbox@a - \advance\flushend@@lastskip@a\dp\flushend@@varbox@a - \loop - \flushend@@lastskip@b\ht\flushend@@varbox@a - \advance\flushend@@lastskip@b\dp\flushend@@varbox@a - \setbox\flushend@@tempbox@c\vsplit\flushend@@varbox@a to\var@@temp@a - \ifvoid\flushend@@tempbox@c - \advance \var@@temp@a 3\p@ - \ifdim\var@@temp@a>\flushend@@lastskip@b - \var@@temp@a=-1\p@ - \fi - \else - \setbox\flushend@@tempbox@c\vbox{\unvbox\flushend@@tempbox@c}% - \ifdim\ht\flushend@@tempbox@c>\top@@floatbox@min - \advance\flushend@@lastskip@b -\ht\flushend@@tempbox@c - \advance\flushend@@lastskip@b -\dp\flushend@@tempbox@c - \advance\flushend@@lastskip@b -\ht\flushend@@varbox@a - \advance\flushend@@lastskip@b -\dp\flushend@@varbox@a - \xdef\top@@floatbox@skip{\the\flushend@@lastskip@b}% - \flushend@@lastskip@b\flushend@@lastskip@a - \advance\flushend@@lastskip@b -\ht\flushend@@varbox@a - \advance\flushend@@lastskip@b -\top@@floatbox@skip - \xdef\top@@floatbox@ht{\the\flushend@@lastskip@b}% - \var@@temp@a=3\p@ - \else - \advance\flushend@@lastskip@b -\ht\flushend@@tempbox@c - \advance\flushend@@lastskip@b -\dp\flushend@@tempbox@c - \advance\flushend@@lastskip@b -\ht\flushend@@varbox@a - \advance\flushend@@lastskip@b -\dp\flushend@@varbox@a - \ifdim\ht\flushend@@tempbox@c>\topskip - \else - \xdef\top@@section@skip{\the\flushend@@lastskip@b}% - \fi - \var@@temp@a=-1\p@ - \fi - \fi - \ifdim \var@@temp@a>\z@ - \repeat - \ifvoid\flushend@@tempbox@c - \else - \ifdim\top@@section@skip>\z@ - \else - \ifdim\ht\flushend@@tempbox@c>\z@ - \setbox\flushend@@varbox@a\vbox{\unvbox\flushend@@tempbox@c}% - \fi - \flushend@@lastskip@b\ht\flushend@@varbox@a - \var@@temp@a=3\p@ - \loop - \setbox\flushend@@tempbox@c\vsplit\flushend@@varbox@a to\var@@temp@a - \ifvoid\flushend@@tempbox@c - \advance \var@@temp@a 3\p@ - \ifdim\var@@temp@a>\flushend@@lastskip@b - \var@@temp@a=-1\p@ - \fi - \else - \ifdim\ht\flushend@@tempbox@c<\z@ - \else - \var@@temp@a=-1\p@ - \fi - \fi - \ifdim \var@@temp@a>\z@ - \repeat - \loop - \setbox\flushend@@varbox@a\vbox{% - \unvbox\flushend@@tempbox@c - \unskip\unkern\unpenalty - \unskip\unkern\unpenalty - \unskip\unkern\unpenalty - \setbox\flushend@@tempbox@c\lastbox - }% - \flushend@@lastskip@b\ht\flushend@@varbox@a - \setbox\flushend@@varbox@a\vbox{% - \unvbox\flushend@@varbox@a - \unskip\unkern\unpenalty - \unskip\unkern\unpenalty - \unskip\unkern\unpenalty - }% - \advance\flushend@@lastskip@b -\ht\flushend@@varbox@a - \ifdim\flushend@@lastskip@b>\topskip - \xdef\top@@section@skip{\the\flushend@@lastskip@b}% - \fi - \ifdim\ht\flushend@@varbox@a>2\topskip - \setbox\flushend@@tempbox@c\vbox{\unvbox\flushend@@varbox@a}% - \repeat - \fi - \fi - \egroup - } + \bgroup + \xdef\top@@floatbox@ht{\z@}% + \xdef\top@@floatbox@skip{\z@}% + \xdef\top@@section@skip{\z@}% + \set@split@topskip@to\z@ + \setbox\flushend@@varbox@a\vbox{\strut + \vskip\z@ + \unvcopy#1% + }% + \setbox\flushend@@tempbox@c\vsplit\flushend@@varbox@a to\p@ + \wlog@balance@debug{^^J(R)mainbox: \log@box@info{#1}}% + \flushend@@lastskip@a\ht\flushend@@varbox@a + \advance\flushend@@lastskip@a\dp\flushend@@varbox@a + \ifdim\flushend@@lastskip@a>\z@ + \analyze@nonempty@rightcolumn@box + \fi + \egroup + } +\def\analyze@nonempty@rightcolumn@box{% + \bgroup + \var@@temp@a3\p@ + \loop + \flushend@@lastskip@b\ht\flushend@@varbox@a + \advance\flushend@@lastskip@b\dp\flushend@@varbox@a + \setbox\flushend@@tempbox@c\vsplit\flushend@@varbox@a to\var@@temp@a + \ifvoid\flushend@@tempbox@c + \advance \var@@temp@a 3\p@ + \ifdim\var@@temp@a>\flushend@@lastskip@b + \var@@temp@a=-1\p@ + \fi + \else + \setbox\flushend@@tempbox@c\vbox{\unvbox\flushend@@tempbox@c}% + \ifdim\ht\flushend@@tempbox@c>\top@@floatbox@min + \advance\flushend@@lastskip@b -\ht\flushend@@tempbox@c + \advance\flushend@@lastskip@b -\dp\flushend@@tempbox@c + \advance\flushend@@lastskip@b -\ht\flushend@@varbox@a + \advance\flushend@@lastskip@b -\dp\flushend@@varbox@a + \xdef\top@@floatbox@skip{\the\flushend@@lastskip@b}% + \flushend@@lastskip@b\flushend@@lastskip@a + \advance\flushend@@lastskip@b -\ht\flushend@@varbox@a + \advance\flushend@@lastskip@b -\top@@floatbox@skip + \xdef\top@@floatbox@ht{\the\flushend@@lastskip@b}% + \var@@temp@a=3\p@ + \else + \advance\flushend@@lastskip@b -\ht\flushend@@tempbox@c + \advance\flushend@@lastskip@b -\dp\flushend@@tempbox@c + \advance\flushend@@lastskip@b -\ht\flushend@@varbox@a + \advance\flushend@@lastskip@b -\dp\flushend@@varbox@a + \ifdim\ht\flushend@@tempbox@c>\topskip + \else + \xdef\top@@section@skip{\the\flushend@@lastskip@b}% + \fi + \var@@temp@a=-1\p@ + \fi + \fi + \ifdim \var@@temp@a>\z@ + \repeat + \ifvoid\flushend@@tempbox@c + \else + \ifdim\top@@section@skip>\z@ + \else + \ifdim\ht\flushend@@tempbox@c>\z@ + \setbox\flushend@@varbox@a\vbox{\unvbox\flushend@@tempbox@c}% + \fi + \flushend@@lastskip@b\ht\flushend@@varbox@a + \var@@temp@a=3\p@ + \loop + \setbox\flushend@@tempbox@c\vsplit\flushend@@varbox@a to\var@@temp@a + \ifvoid\flushend@@tempbox@c + \advance \var@@temp@a 3\p@ + \ifdim\var@@temp@a>\flushend@@lastskip@b + \var@@temp@a=-1\p@ + \fi + \else + \ifdim\ht\flushend@@tempbox@c<\z@ + \else + \var@@temp@a=-1\p@ + \fi + \fi + \ifdim \var@@temp@a>\z@ + \repeat + \loop + \setbox\flushend@@varbox@a\vbox{% + \unvbox\flushend@@tempbox@c + \unskip\unkern\unpenalty + \unskip\unkern\unpenalty + \unskip\unkern\unpenalty + \setbox\flushend@@tempbox@c\lastbox + }% + \flushend@@lastskip@b\ht\flushend@@varbox@a + \setbox\flushend@@varbox@a\vbox{% + \unvbox\flushend@@varbox@a + \unskip\unkern\unpenalty + \unskip\unkern\unpenalty + \unskip\unkern\unpenalty + }% + \advance\flushend@@lastskip@b -\ht\flushend@@varbox@a + \ifdim\flushend@@lastskip@b>\topskip + \xdef\top@@section@skip{\the\flushend@@lastskip@b}% + \fi + \ifdim\ht\flushend@@varbox@a>2\topskip + \setbox\flushend@@tempbox@c\vbox{\unvbox\flushend@@varbox@a}% + \repeat + \fi + \fi + \egroup + } % \end{macrocode} % \end{macro} % -% \begin{macro}{\last@outputdblcol} +% \begin{macro}{\combine@columns@for@balance} % -% Columns balancing of the twocolumn mode page (modern variant). +% Collects both columns to one box removing left column footnotes +% and right column top float and adding right skip in between them. % % \begin{macrocode} -\def\last@outputdblcol@modern{% - \if@firstcolumn - \global \@firstcolumnfalse - \global \setbox\@leftcolumn \box\@outputbox - \else - \global \@firstcolumntrue - \@tempdima\ht\@leftcolumn - \splittopskip\topskip \splitmaxdepth\maxdepth - \var@@temp@spread=\wd\@outputbox - \get@@footnoterule@@box - \xdef\main@box@height{\the\ht\@leftcolumn}% - \xdef\main@box@skip{\z@}% - \global\flushend@@lastskip@c\z@ - \setbox\flushend@@varbox@a\vbox{\unvcopy\@leftcolumn}% - \analyze@leftcolumn@box\flushend@@varbox@a - \setbox\flushend@@varbox@a\vbox{\unvcopy\@outputbox}% - \analyze@rightcolumn@box\flushend@@varbox@a - \if@auto@baselineskip - %% Trying guess baselineskip value on column break - \ifdim\main@box@skip>\z@ - \splittopskip\z@ - \setbox\flushend@@varbox@a\vsplit\@leftcolumn to\main@box@height - \else - \setbox\flushend@@varbox@a\box\@leftcolumn - \fi - \ifdim\var@@temp@spread>\z@ - \setbox\@outputbox\vbox{\strut - \vskip\z@ - \unvbox\@outputbox - }% - \splittopskip\z@ - \setbox\flushend@@tempbox@c\vsplit\@outputbox to\ht\strutbox - \ifdim\top@@floatbox@skip>\z@ - \setbox\flushend@@tempbox@c\vsplit\@outputbox to\top@@floatbox@ht - \setbox\flushend@@tempbox@c\vbox{\unvbox\flushend@@tempbox@c}% - \fi - \setbox\@tempboxa\vbox{% - \unvbox\flushend@@varbox@a - \unskip\unkern\unpenalty - \vskip\flushend@@lastskip@c - \the\atColsBreak - \hrule\@height\flushend@@page@rule width\columnwidth - \ifdim\top@@section@skip>\top@@skip@@limit - \vskip\top@@section@skip - \fi - \unvbox\@outputbox - \remove@lastbox@at@balancing - \the\atColsEnd - }% - \ifdim\top@@floatbox@skip>\z@ - \setbox\@outputbox\vbox{\unvbox\flushend@@tempbox@c}% - \fi - \else %% rightcolumn empty - \setbox\@tempboxa\vbox{% - \unvbox\flushend@@varbox@a - \remove@lastbox@at@balancing - \the\atColsEnd - }% - \fi - \else - %% Ignore baselineskip value on column break - \ifdim\var@@temp@spread>\z@ - \setbox\@outputbox\vbox{\strut - \vskip\z@ - \unvbox\@outputbox +\def\combine@columns@for@balance{% + \setbox\@outputbox\vbox{\strut + \vskip\z@ + \unvbox\@outputbox + }% + \set@split@topskip@to\z@ + \setbox\flushend@@tempbox@c\vsplit\@outputbox to\p@ + \if@auto@baselineskip + %% Trying guess baselineskip value on column break + \ifdim\top@@floatbox@skip>\z@ + \setbox\flushend@@tempbox@c\vsplit\@outputbox to\top@@floatbox@ht + \setbox\flushend@@tempbox@c\vbox{\unvbox\flushend@@tempbox@c}% + \fi + \setbox\@tempboxa\vbox{% + \unvbox\flushend@@varbox@a + \unskip\unkern\unpenalty + \vskip\flushend@@lastskip@c + \the\atColsBreak + \hrule\@height\flushend@@page@rule width\columnwidth + \ifdim\top@@section@skip>\top@@skip@@limit + \vskip\top@@section@skip + \fi + \unvbox\@outputbox + \remove@lastbox@at@balancing + \the\atColsEnd + }% + \ifdim\top@@floatbox@skip>\z@ + \setbox\@outputbox\vbox{\unvbox\flushend@@tempbox@c}% + \fi + \else + %% Ignore baselineskip value on column break + \setbox\@tempboxa\vbox{% + \unvbox\@leftcolumn + \setbox\z@\lastbox + \unskip\unkern\unpenalty + \the\atColsBreak + \hrule\@height\flushend@@page@rule width\columnwidth + \unvbox\@outputbox + \remove@lastbox@at@balancing + \the\atColsEnd + }% + \fi + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\set@outputbox@with@footnote} +% +% Calculates break position and formats balanced columns in the |\@outputbox| +% with footnotes. +% +% \begin{macrocode} +\def\set@outputbox@with@footnote{% + %% footnote in left column + \@tempdimb\ht\@tempboxa + \ifdim\top@@floatbox@skip>\z@ + \advance\@tempdimb \top@@floatbox@skip + \advance\@tempdimb \top@@floatbox@ht + \fi + \advance\@tempdimb \main@box@skip + \advance\@tempdimb \ht\@leftcolumn + \@tempdimb .5\@tempdimb + \advance\@tempdimb -\main@box@skip + \advance\@tempdimb -\ht\@leftcolumn + \set@split@topskip@to\topskip + \loop + \setbox\flushend@@varbox@a\copy\@tempboxa + \setbox\flushend@@tempbox@a\vsplit\flushend@@varbox@a to\@tempdimb + \setbox\flushend@@tempbox@c\vbox{\unvcopy\flushend@@tempbox@a}% + \ifdim\top@@floatbox@skip>\z@ + \setbox\flushend@@varbox@c\vbox{% + \unvcopy\@outputbox + \vskip\top@@floatbox@skip + \unvbox\flushend@@varbox@a }% - \splittopskip\z@ - \setbox\flushend@@tempbox@c\vsplit\@outputbox to\ht\strutbox - \setbox\@tempboxa\vbox{% - \unvbox\@leftcolumn - \setbox\z@\lastbox - \unskip\unkern\unpenalty - \the\atColsBreak - \hrule\@height\flushend@@page@rule width\columnwidth - \unvbox\@outputbox - \remove@lastbox@at@balancing - \the\atColsEnd - }% - \else - \setbox\@tempboxa\vbox{% - \unvbox\@leftcolumn - \remove@lastbox@at@balancing - \the\atColsEnd - }% - \fi - \fi - \ifdim\main@box@skip>\z@ - \@tempdimb\ht\@tempboxa - \advance\@tempdimb -\main@box@skip - \advance\@tempdimb -\ht\@leftcolumn - \@tempdimb .5\@tempdimb - \splittopskip\topskip \splitmaxdepth\maxdepth - \loop - \setbox\flushend@@varbox@a\copy\@tempboxa - \setbox\flushend@@tempbox@a\vsplit\flushend@@varbox@a to\@tempdimb - \setbox\flushend@@tempbox@c\vbox{% - \unvcopy\flushend@@tempbox@a - \vskip\main@box@skip - \unvcopy\@leftcolumn - }% - \setbox\flushend@@varbox@c\vbox{\unvbox\flushend@@varbox@a}% - \var@@temp@spread=\ht\flushend@@tempbox@c - \advance\var@@temp@spread by-\ht\flushend@@varbox@c - \wlog@balance@debug{Left x: \the\ht\flushend@@tempbox@a + \else + \setbox\flushend@@varbox@c\vbox{\unvbox\flushend@@varbox@a}% + \fi + \var@@temp@spread=\ht\flushend@@tempbox@c + \advance\var@@temp@spread by\dp\flushend@@tempbox@c + \advance\var@@temp@spread \main@box@skip + \advance\var@@temp@spread \ht\@leftcolumn + \advance\var@@temp@spread by-\ht\flushend@@varbox@c + \advance\var@@temp@spread by-\dp\flushend@@varbox@c + \wlog@balance@debug{Left x: \the\ht\flushend@@tempbox@a +\the\dp\flushend@@tempbox@a=\the\ht\flushend@@varbox@a +\the\dp\flushend@@varbox@a::\the\@tempdimb - ^^JLeft 0: \the\ht\flushend@@tempbox@c + ^^JLeft 0: \the\ht\flushend@@tempbox@c +\the\dp\flushend@@tempbox@c::\the\@tempdimb - ^^JRight x: \the\ht\flushend@@varbox@c + ^^JRight x: \the\ht\flushend@@varbox@c +\the\dp\flushend@@varbox@c=\the\ht\flushend@@varbox@a +\the\dp\flushend@@varbox@a::\the\@tempdimb - ^^JExtra height:\the\var@@temp@spread\space when \the\@tempdimb - }% - \ifdim\var@@temp@spread<\z@ \advance\@tempdimb 1\p@ \repeat - \flushend@@lastskip@a\the\ht\flushend@@tempbox@c - \flushend@@lastskip@b\the\@tempdimb - \setbox\flushend@@tempbox@a\vsplit\@tempboxa to\@tempdimb - \setbox\@leftcolumn\vbox to\@tempdima{% - \vbox to \flushend@@lastskip@a{% - \unvbox\flushend@@tempbox@a - \vskip\main@box@skip - \unvbox\@leftcolumn - \vss - }% - \hrule\@height\flushend@@page@rule width\textwidth - \vss - }% - \global\ht\@leftcolumn=\the\@tempdima - \wlog{- LAST -% - ^^JExtra skip:\the\var@@temp@spread - ^^JLeft:\the\ht\@leftcolumn/\the\dp\@leftcolumn - ^^JRight:\the\ht\@tempboxa/\the\dp\@tempboxa - ^^JOutput:\the\@tempdimb - }% - \setbox\@outputbox\vbox to\@tempdima{% - \vbox spread\var@@temp@spread{% - \unvbox\@tempboxa - }% - \vss - }% - \else - \@tempdimb \ht\@tempboxa - \ifdim\top@@floatbox@skip>\z@ - \advance\@tempdimb \top@@floatbox@skip - \advance\@tempdimb \top@@floatbox@ht - \fi - \@tempdimb .5\@tempdimb - \splittopskip\topskip \splitmaxdepth\maxdepth - \loop - \setbox\flushend@@varbox@a\copy\@tempboxa - \setbox\flushend@@tempbox@a\vsplit\flushend@@varbox@a to\@tempdimb - \setbox\flushend@@tempbox@c\vbox{\unvcopy\flushend@@tempbox@a}% - \ifdim\top@@floatbox@skip>\z@ - \setbox\flushend@@varbox@c\vbox{% - \unvcopy\@outputbox - \vskip\top@@floatbox@skip - \unvbox\flushend@@varbox@a + ^^JExtra height:\the\var@@temp@spread\space when \the\@tempdimb + }% + \ifdim\var@@temp@spread<\z@ + \advance\@tempdimb 1\p@ + \repeat + \flushend@@lastskip@a\the\ht\flushend@@tempbox@c + \advance\flushend@@lastskip@a \main@box@skip + \advance\flushend@@lastskip@a \ht\@leftcolumn + \flushend@@lastskip@b\the\@tempdimb + \setbox\flushend@@tempbox@a\vsplit\@tempboxa to\@tempdimb + \setbox\@leftcolumn\vbox to\@tempdima{% + \vbox to \flushend@@lastskip@a{% + \unvbox\flushend@@tempbox@a + \vskip\main@box@skip + \unvbox\@leftcolumn + \vss + }% + \hrule\@height\flushend@@page@rule width\textwidth + \vss + }% + \global\ht\@leftcolumn=\the\@tempdima + \wlog{- LAST -% + ^^JExtra skip:\the\var@@temp@spread + ^^JLeft:\the\ht\@leftcolumn/\the\dp\@leftcolumn + ^^JRight:\the\ht\@tempboxa/\the\dp\@tempboxa + ^^JOutput:\the\@tempdimb + }% + \ifdim\top@@floatbox@skip>\z@ + \setbox\@outputbox\vbox to\@tempdima{% + \if@right@column@spread + \vbox spread\var@@temp@spread{% + \unvbox\@outputbox + \vskip\top@@floatbox@skip + \unvbox\@tempboxa + }% + \else + \vbox spread\var@@temp@spread{% + \unvbox\@outputbox + \vskip\top@@floatbox@skip + \unvbox\@tempboxa + \vss }% - \else - \setbox\flushend@@varbox@c\vbox{\unvbox\flushend@@varbox@a}% - \fi - \var@@temp@spread=\ht\flushend@@tempbox@c - \advance\var@@temp@spread by\dp\flushend@@tempbox@c - \advance\var@@temp@spread by-\ht\flushend@@varbox@c - \advance\var@@temp@spread by-\dp\flushend@@varbox@c - \wlog@balance@debug{Left x: \the\ht\flushend@@tempbox@a + \fi + \vss + }% + \else + \setbox\@outputbox\vbox to\@tempdima{% + \if@right@column@spread + \vbox spread\var@@temp@spread{% + \unvbox\@tempboxa + }% + \else + \vbox spread\var@@temp@spread{% + \unvbox\@tempboxa + \vss + }% + \fi + \vss + }% + \fi + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\set@outputbox@without@footnote} +% +% Calculates break position and formats balanced columns in the |\@outputbox| +% without footnotes. +% +% \begin{macrocode} +\def\set@outputbox@without@footnote{% + %% no footnote in left column + \@tempdimb \ht\@tempboxa + \ifdim\top@@floatbox@skip>\z@ + \advance\@tempdimb \top@@floatbox@skip + \advance\@tempdimb \top@@floatbox@ht + \fi + \@tempdimb .5\@tempdimb + \set@split@topskip@to\topskip + \loop + \setbox\flushend@@varbox@a\copy\@tempboxa + \setbox\flushend@@tempbox@a\vsplit\flushend@@varbox@a to\@tempdimb + \setbox\flushend@@tempbox@c\vbox{\unvcopy\flushend@@tempbox@a}% + \ifdim\top@@floatbox@skip>\z@ + \setbox\flushend@@varbox@c\vbox{% + \unvcopy\@outputbox + \vskip\top@@floatbox@skip + \unvbox\flushend@@varbox@a + }% + \else + \setbox\flushend@@varbox@c\vbox{\unvbox\flushend@@varbox@a}% + \fi + \var@@temp@spread=\ht\flushend@@tempbox@c + \advance\var@@temp@spread by\dp\flushend@@tempbox@c + \advance\var@@temp@spread by-\ht\flushend@@varbox@c + \advance\var@@temp@spread by-\dp\flushend@@varbox@c + \wlog@balance@debug{Left x: \the\ht\flushend@@tempbox@a +\the\dp\flushend@@tempbox@a=\the\ht\flushend@@varbox@a +\the\dp\flushend@@varbox@a::\the\@tempdimb - ^^JLeft 0: \the\ht\flushend@@tempbox@c + ^^JLeft 0: \the\ht\flushend@@tempbox@c +\the\dp\flushend@@tempbox@c::\the\@tempdimb - ^^JRight x: \the\ht\flushend@@varbox@c + ^^JRight x: \the\ht\flushend@@varbox@c +\the\dp\flushend@@varbox@c=\the\ht\flushend@@varbox@a +\the\dp\flushend@@varbox@a::\the\@tempdimb - ^^JExtra height:\the\var@@temp@spread\space when \the\@tempdimb - }% - \ifdim\var@@temp@spread<\z@ \advance\@tempdimb 1\p@ \repeat - %\@tempdimb\ht\flushend@@tempbox@c - %\advance\@tempdimb by\dp\flushend@@tempbox@c - \wlog{- LAST -% - ^^JExtra skip:\the\var@@temp@spread - ^^JLeft:\the\ht\flushend@@tempbox@c/\the\dp\flushend@@tempbox@c - ^^JRight:\the\ht\flushend@@varbox@c/\the\dp\flushend@@varbox@c - ^^JOutput:\the\@tempdimb - }% - \setbox\flushend@@tempbox@c\vsplit\@tempboxa to\@tempdimb - \setbox\flushend@@varbox@c\vbox{\unvbox\flushend@@tempbox@c}% - \setbox\@leftcolumn\vbox to\@tempdima{% - \vbox to\@tempdimb{\unvbox\flushend@@varbox@c\vss}% - \hrule\@height\flushend@@page@rule width\textwidth - \vss - }% - \global\ht\@leftcolumn=\the\@tempdima - \ifdim\top@@floatbox@skip>\z@ - \setbox\@outputbox\vbox to\@tempdima{% - \if@right@column@spread - \vbox spread\var@@temp@spread{% - \unvbox\@outputbox - \vskip\top@@floatbox@skip - \unvbox\@tempboxa - }% - \else - \vbox spread\var@@temp@spread{% - \unvbox\@outputbox - \vskip\top@@floatbox@skip - \unvbox\@tempboxa - \vss - }% - \fi - \vss - }% - \else - \setbox\@outputbox\vbox to\@tempdima{% - \if@right@column@spread - \vbox spread\var@@temp@spread{% - \unvbox\@tempboxa - }% - \else - \vbox spread\var@@temp@spread{% - \unvbox\@tempboxa - \vss - }% - \fi - \vss - }% - \fi - \fi - \setbox\@outputbox \vbox {% - \hb@xt@\textwidth {% - \hb@xt@\columnwidth {% - \fmt@box@adds{\box\@leftcolumn}\hss}% - \hfil - \vrule \@width\columnseprule - \hfil - \hb@xt@\columnwidth {% - \fmt@box@adds{\box\@outputbox}\hss}% - }% - }% - \global\let\@outputdblcol\saved@orig@@outputdblcol - \global\atColsEnd{}% - \ifvoid\hold@viper - \else - \setbox\@outputbox\vbox{\box\hold@viper\box\@outputbox}% - \fi - \@combinedblfloats - \@outputpage - \begingroup - \@dblfloatplacement - \@startdblcolumn - \@whilesw\if@fcolmade\fi - {\@outputpage\@startdblcolumn}% - \ifvoid\@viper - \else - \global\setbox\@viper\vbox{% - \vskip-\stripsep - \unvbox\@viper - }% - \csname @viperoutput\endcsname - \fi - \endgroup - \fi - } + ^^JExtra height:\the\var@@temp@spread\space when \the\@tempdimb + }% + \ifdim\var@@temp@spread<\z@ \advance\@tempdimb 1\p@ \repeat + \wlog{- LAST -% + ^^JExtra skip:\the\var@@temp@spread + ^^JLeft:\the\ht\flushend@@tempbox@c/\the\dp\flushend@@tempbox@c + ^^JRight:\the\ht\flushend@@varbox@c/\the\dp\flushend@@varbox@c + ^^JOutput:\the\@tempdimb + }% + \setbox\flushend@@tempbox@c\vsplit\@tempboxa to\@tempdimb + \setbox\flushend@@varbox@c\vbox{\unvbox\flushend@@tempbox@c}% + \setbox\@leftcolumn\vbox to\@tempdima{% + \vbox to\@tempdimb{\unvbox\flushend@@varbox@c\vss}% + \hrule\@height\flushend@@page@rule width\textwidth + \vss + }% + \global\ht\@leftcolumn=\the\@tempdima + \ifdim\top@@floatbox@skip>\z@ + \setbox\@outputbox\vbox to\@tempdima{% + \if@right@column@spread + \vbox spread\var@@temp@spread{% + \unvbox\@outputbox + \vskip\top@@floatbox@skip + \unvbox\@tempboxa + }% + \else + \vbox spread\var@@temp@spread{% + \unvbox\@outputbox + \vskip\top@@floatbox@skip + \unvbox\@tempboxa + \vss + }% + \fi + \vss + }% + \else + \setbox\@outputbox\vbox to\@tempdima{% + \if@right@column@spread + \vbox spread\var@@temp@spread{% + \unvbox\@tempboxa + }% + \else + \vbox spread\var@@temp@spread{% + \unvbox\@tempboxa + \vss + }% + \fi + \vss + }% + \fi + } +% \end{macrocode} +% \end{macro} +% \begin{macro}{\last@outputdblcol@modern} +% +% Columns balancing of the twocolumn mode page (modern algorithm). +% It is maybe not so safe for text moving or missing at all +% as it uses some heuristic technique to find footnotes, last skip between lines +% at left column and floats or section like heads at right column top +% for replacing them (except heads of course) to other places in text. +% +% \begin{macrocode} +\def\last@outputdblcol@modern{% + \if@firstcolumn + \global \@firstcolumnfalse + \global \setbox\@leftcolumn \box\@outputbox + \else + \global \@firstcolumntrue + \@tempdima\ht\@leftcolumn + \set@split@topskip@to\topskip + \var@@temp@spread=\wd\@outputbox + \get@@footnoterule@@box + \xdef\main@box@height{\the\ht\@leftcolumn}% + \xdef\main@box@skip{\z@}% + \global\flushend@@lastskip@c\z@ + \setbox\flushend@@varbox@a\vbox{\unvcopy\@leftcolumn}% + \analyze@leftcolumn@box\flushend@@varbox@a + \setbox\flushend@@varbox@a\vbox{\unvcopy\@outputbox}% + \analyze@rightcolumn@box\flushend@@varbox@a + \ifdim\main@box@skip>\z@ + %% footnote in left column + \set@split@topskip@to\z@ + \setbox\flushend@@varbox@a\vsplit\@leftcolumn to\main@box@height + \else + %% no footnote in left column + \setbox\flushend@@varbox@a\box\@leftcolumn + \fi + \ifdim\var@@temp@spread>\z@ + %% rightcolumn non empty + \combine@columns@for@balance + \else + %% rightcolumn empty + \setbox\@tempboxa\vbox{% + \unvbox\flushend@@varbox@a + \remove@lastbox@at@balancing + \the\atColsEnd + }% + \fi + \ifdim\main@box@skip>\z@ + %% footnote in left column + \set@outputbox@with@footnote + \else + %% no footnote in left column + \set@outputbox@without@footnote + \fi + \setbox\@outputbox \vbox {% + \hb@xt@\textwidth {% + \hb@xt@\columnwidth {% + \fmt@box@adds{\box\@leftcolumn}\hss}% + \hfil + \vrule \@width\columnseprule + \hfil + \hb@xt@\columnwidth {% + \fmt@box@adds{\box\@outputbox}\hss}% + }% + }% + \global\let\@outputdblcol\saved@orig@@outputdblcol + \global\atColsEnd{}% + \ifvoid\hold@viper + \else + \setbox\@outputbox\vbox{\box\hold@viper\box\@outputbox}% + \fi + \@combinedblfloats + \@outputpage + \begingroup + \@dblfloatplacement + \@startdblcolumn + \@whilesw\if@fcolmade\fi + {\@outputpage\@startdblcolumn}% + \ifvoid\@viper + \else + \global\setbox\@viper\vbox{% + \vskip-\stripsep + \unvbox\@viper + }% + \csname @viperoutput\endcsname + \fi + \endgroup + \fi + } % \end{macrocode} % \end{macro} % \begin{macro}{\last@outputdblcol@old} % % Columns balancing of the twocolumn mode page (ancient algorithm). -% +% It is maybe not so good in some cases but maybe more safe for text +% moving or missing at all. +% % \begin{macrocode} \def\last@outputdblcol@ancient{% \if@firstcolumn @@ -853,47 +1061,46 @@ \else \global\@firstcolumntrue \@tempdima\ht\@leftcolumn - \splittopskip\topskip\splitmaxdepth\maxdepth + \set@split@topskip@to\topskip \if@auto@baselineskip \setbox\@tempboxa\vbox{% \unvcopy\@leftcolumn - \global\flushend@@lastskip@c\lastskip - \global\flushend@@lastskip@b\lastskip + \global\flushend@@lastskip@c\lastskip + \global\flushend@@lastskip@b\lastskip \loop - \global\flushend@@lastskip@a\flushend@@lastskip@b - \unskip\unpenalty - \global\flushend@@lastskip@b\lastskip - \global\advance\flushend@@lastskip@c by\lastskip - \ifdim\flushend@@lastskip@b=-\flushend@@lastskip@a - \global\advance\flushend@@lastskip@c by-\lastskip + \global\flushend@@lastskip@a\flushend@@lastskip@b + \unskip\unpenalty + \global\flushend@@lastskip@b\lastskip + \global\advance\flushend@@lastskip@c by\lastskip + \ifdim\flushend@@lastskip@b=-\flushend@@lastskip@a + \global\advance\flushend@@lastskip@c by-\lastskip \else \repeat - \ifdim\flushend@@lastskip@b=-\flushend@@lastskip@a - \ifdim\flushend@@lastskip@b=\z@ - \setbox\flushend@@varbox@a\lastbox - \global\advance\flushend@@lastskip@c by\ht\flushend@@varbox@a - \global\advance\flushend@@lastskip@c by\lastskip - \unskip\unpenalty - \setbox\flushend@@varbox@a\lastbox - \global\advance\flushend@@lastskip@c by\dp\flushend@@varbox@a - \else - \global\flushend@@lastskip@c\lastskip - \global\advance\flushend@@lastskip@c by\topskip - \fi + \ifdim\flushend@@lastskip@b=-\flushend@@lastskip@a + \ifdim\flushend@@lastskip@b=\z@ + \setbox\flushend@@varbox@a\lastbox + \global\advance\flushend@@lastskip@c by\ht\flushend@@varbox@a + \global\advance\flushend@@lastskip@c by\lastskip + \unskip\unpenalty + \setbox\flushend@@varbox@a\lastbox + \global\advance\flushend@@lastskip@c by\dp\flushend@@varbox@a + \else + \global\flushend@@lastskip@c\lastskip + \global\advance\flushend@@lastskip@c by\topskip + \fi \fi \global\advance\flushend@@lastskip@c by-\topskip - }% + }% \setbox\@tempboxa\vbox{% \unvbox\@leftcolumn \unskip\unpenalty \vskip\flushend@@lastskip@c \hrule\@height\flushend@@page@rule width\columnwidth \the\atColsBreak - \unvbox\@outputbox + \unvbox\@outputbox \remove@lastbox@at@balancing - %%\unskip \the\atColsEnd - }% + }% \else \setbox\@tempboxa\vbox{% \unvbox\@leftcolumn @@ -903,8 +1110,6 @@ \the\atColsBreak \unvbox\@outputbox \remove@lastbox@at@balancing - %%\setbox\z@\lastbox - %%\unskip \the\atColsEnd }% \fi @@ -917,15 +1122,23 @@ \vsplit\flushend@@tempbox@a to\@tempdimb }% \wlog{Extra height:\the\ht\flushend@@tempbox@a\space when \the\@tempdimb}% - \ifvoid\flushend@@tempbox@a \else \advance\@tempdimb 1\p@ \repeat + \ifvoid\flushend@@tempbox@a + \else + \advance\@tempdimb 1\p@ + \repeat \loop \setbox\flushend@@tempbox@a\copy\@tempboxa - \setbox\flushend@@tempbox@c\vbox to\@tempdimb{\vsplit\flushend@@tempbox@a to\@tempdimb\vss}% + \setbox\flushend@@tempbox@c\vbox to\@tempdimb{% + \vsplit\flushend@@tempbox@a to\@tempdimb + \vss + }% \wlog{(2)Left:\the\ht\flushend@@tempbox@c\space - Right:\the\ht\flushend@@tempbox@a\space - Output:\the\@tempdimb - }% - \ifdim\ht\flushend@@tempbox@c<\ht\flushend@@tempbox@a \@tempdimb=\the\ht\flushend@@tempbox@a \repeat + Right:\the\ht\flushend@@tempbox@a\space + Output:\the\@tempdimb + }% + \ifdim\ht\flushend@@tempbox@c<\ht\flushend@@tempbox@a + \@tempdimb=\the\ht\flushend@@tempbox@a + \repeat \wlog{- LAST -^^JExtra skip: \the\z@ ^^JLeft:\the\ht\flushend@@tempbox@c ^^JRight:\the\ht\flushend@@tempbox@a @@ -936,7 +1149,12 @@ \vss }% \setbox\@leftcolumn\vbox to\@tempdima{% - \fmt@vbox@adds[\columnwidth]{\vbox to\@tempdimb{\unvbox\flushend@@tempbox@c}}% + \fmt@vbox@adds[\columnwidth]{% + \vbox to\@tempdimb{% + \unvbox + \flushend@@tempbox@c + }% + }% \hrule\@height\flushend@@page@rule \vss }% @@ -944,11 +1162,10 @@ \fmt@vbox@adds[\columnwidth]{% \vbox to\@tempdimb{% \unvbox\@tempboxa - %\vfilneg \vskip\z@ }% }% - \hrule\@height\flushend@@page@rule + \hrule\@height\flushend@@page@rule \vss }% \setbox\@outputbox\vbox{% @@ -1006,13 +1223,35 @@ % % User interface commands for the balancing pages. % +% \cs{flushcolsend} is used to switch on column balancing on the current page. +% % \begin{macrocode} \def\flushcolsend{\global\let\@outputdblcol\last@outputdblcol} +% \end{macrocode} +% +% \cs{raggedcolsend} is used to switch off column balancing on the current page. +% +% \begin{macrocode} \def\raggedcolsend{\global\let\@outputdblcol\saved@orig@@outputdblcol} +% \end{macrocode} +% +% \cs{flushend} is used to switch on column balancing on the last page. +% It is used by default. +% +% \begin{macrocode} \def\flushend{\global\let\balanced@@outputdblcol\last@outputdblcol} +% \end{macrocode} +% +% \cs{raggedend} is used to switch off column balancing on the last page. +% +% \begin{macrocode} \def\raggedend{\global\let\balanced@@outputdblcol\saved@orig@@outputdblcol} % \end{macrocode} % +% In the case to see some debug information |debug| option is used and it is +% possible to see how package calculates dimensions of balanced columns by +% additional rules on balanced page and some log records in log file. +% % \begin{macrocode} \if@balance@debug \showcolsendrule diff --git a/Master/texmf-dist/source/latex/sttools/stfloats.dtx b/Master/texmf-dist/source/latex/sttools/stfloats.dtx index cbd8781c7fc..bf5ab362dff 100644 --- a/Master/texmf-dist/source/latex/sttools/stfloats.dtx +++ b/Master/texmf-dist/source/latex/sttools/stfloats.dtx @@ -24,7 +24,7 @@ \ProvidesFile{stfloats.dtx} %</driver> %<*package> -%% Copyright (C) 1997-2016 by Sigitas Tolu\v{s}is <sigitas@vtex.lt> +%% Copyright (C) 1997-2017 by Sigitas Tolu\v{s}is <sigitas@vtex.lt> %% VTeX UAB, Mokslininku 2a, Vilnius, Lithuania %% -------------------------------------------------------------------------- %% This work may be distributed and/or modified under the @@ -41,12 +41,12 @@ %<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01] %<package>\ProvidesPackage{stfloats} %<*package> - [2016/06/28 v3.2 Improve float mechanism and baselineskip settings] + [2017/03/27 v3.3 Improve float mechanism and baselineskip settings] %</package> % %<*driver> \documentclass{ltxdoc} -\usepackage{stfloats}[2016/06/28] +\usepackage{stfloats}[2017/03/27] \EnableCrossrefs \CodelineIndex \RecordChanges @@ -86,6 +86,7 @@ % \changes{v3.0}{2012/05/29}{Converted to DTX file} % \changes{v3.1}{2016/02/08}{Compatibility with 2015 latexrelease} % \changes{v3.2}{2016/06/28}{Compatibility bugfix with 2015 latexrelease} +% \changes{v3.3}{2017/03/27}{Compatibility bugfix with 2017-05-01 latexrelease} % % \DoNotIndex{\newcommand,\newenvironment} % @@ -218,11 +219,11 @@ % This conditional code is used to check the \LaTeX\ release age. % \begin{macrocode} \newif\if@before@latex@release -\def\tmp@reserved@a#1/#2/#3\@nil{% - \ifnum #1<2015\relax +\def\tmp@reserved@a#1#2#3#4#5\@nil{% + \ifnum #1#2#3#4<2015\relax \@before@latex@releasetrue \else - \@before@latex@releasefalse + \@before@latex@releasefalse \fi } \expandafter\tmp@reserved@a\fmtversion\@nil diff --git a/Master/texmf-dist/tex/latex/sttools/flushend.sty b/Master/texmf-dist/tex/latex/sttools/flushend.sty index c63fe7fb884..56cea6e0f17 100644 --- a/Master/texmf-dist/tex/latex/sttools/flushend.sty +++ b/Master/texmf-dist/tex/latex/sttools/flushend.sty @@ -6,7 +6,7 @@ %% %% flushend.dtx (with options: `package') %% -%% Copyright (C) 1997-2016 by Sigitas Tolu\v{s}is <sigitas@vtex.lt> +%% Copyright (C) 1997-2017 by Sigitas Tolu\v{s}is <sigitas@vtex.lt> %% VTeX Ltd., Mokslinink\k{u} 2a, Vilnius, Lithuania %% http://www.vtex.lt/tex/download/macros/ %% -------------------------------------------------------------------------- @@ -22,7 +22,7 @@ %% \NeedsTeXFormat{LaTeX2e}[1999/12/01] \ProvidesPackage{flushend} - [2016/06/21 v3.2 Balancing columns in twocolumn mode] + [2017/03/27 v3.3 Balancing columns in twocolumn mode] \newif\if@auto@baselineskip \@auto@baselineskiptrue \newif\if@ancient@balance@version \@ancient@balance@versionfalse \newif\if@right@column@spread \@right@column@spreadtrue @@ -36,6 +36,26 @@ \DeclareOption{nospread}{\global\@right@column@spreadfalse} \DeclareOption{removelastbox}{\global\@remove@lastbox@at@balancingtrue} \DeclareOption{keeplastbox}{\global\@remove@lastbox@at@balancingfalse} +\DeclareOption{checkfootnote}{% + \AtEndOfPackage{% + \let\check@@footnoterule@@box\initial@check@@footnoterule@@box + }% + } +\DeclareOption{nocheckfootnote}{% + \AtEndOfPackage{% + \let\check@@footnoterule@@box\@gobblethree + }% + } +\DeclareOption{checkfloat}{% + \AtEndOfPackage{% + \let\top@@floatbox@min\top@@floatbox@min@default + }% + } +\DeclareOption{nocheckfloat}{% + \AtEndOfPackage{% + \let\top@@floatbox@min\maxdimen + }% + } \DeclareOption{debug}{\global\@balance@debugtrue} \DeclareOption{nodebug}{\global\@balance@debugfalse} \ProcessOptions @@ -48,8 +68,9 @@ \newdimen\var@@temp@a \def\top@@skip@@limit{.7\topskip} \newdimen\flushend@@page@rule \flushend@@page@rule\z@ -\def\showcolsendrule{\global\flushend@@page@rule=.4pt} -\gdef\top@@floatbox@min{4\topskip} +\def\showcolsendrule{\global\flushend@@page@rule=.4\p@} +\gdef\top@@floatbox@min@default{4\topskip} +\let\top@@floatbox@min\top@@floatbox@min@default \newbox\flushend@@varbox@a \newbox\flushend@@varbox@c \newbox\flushend@@tempbox@a @@ -61,524 +82,604 @@ \@ifundefined{fmt@box@adds}{\def\fmt@box@adds#1{#1}}{} \@ifundefined{fmt@vbox@adds}{\def\fmt@vbox@adds[#1]#2{#2}}{} \def\unskip@three@kern@penalty{% - \unskip\unkern\unpenalty - \unskip\unkern\unpenalty - \unskip\unkern\unpenalty - } + \unskip\unkern\unpenalty + \unskip\unkern\unpenalty + \unskip\unkern\unpenalty + } \gdef\remove@lastbox@at@balancing{% - \unskip@three@kern@penalty - \if@remove@lastbox@at@balancing - \else - \expandafter\null - \fi - \bgroup - \setbox\z@\lastbox - \ifdim\wd\z@>\z@ - \box\z@ + \unskip@three@kern@penalty + \if@remove@lastbox@at@balancing \else - \aftergroup\unskip@three@kern@penalty + \expandafter\null \fi - \egroup - } + \bgroup + \setbox\z@\lastbox + \ifdim\wd\z@>\z@ + \box\z@ + \else + \aftergroup\unskip@three@kern@penalty + \fi + \egroup + } +\def\set@split@topskip@to#1{% + \splittopskip#1\relax \vfuzz\maxdimen \vbadness\maxdimen + } \def\show@@box#1{% - \bgroup - \showboxbreadth=20000\showboxdepth=20000% - \showbox#1\relax - \egroup - } + \bgroup + \showboxbreadth=20000\showboxdepth=20000% + \showbox#1\relax + \egroup + } \def\wlog@balance@debug#1{\if@balance@debug \wlog{#1}\fi} \def\log@box@info#1{<box\the#1>(\the\ht#1+\the\dp#1)x\the\wd#1} \let\show@@box@next\@gobble \gdef\analyze@lastbox@box#1{% - \setbox\flushend@@varbox@a\vbox{% - \unvbox#1% - \global\flushend@@lastskip@a\lastskip - \unskip - \global\var@@temp@a\lastkern - \unkern - \global\flushend@@penalty@a\lastpenalty - \unpenalty - \ifdim\lastskip>\z@ - \global\flushend@@lastskip@a\lastskip - \fi - \unskip - \ifdim\lastkern>\z@ - \global\var@@temp@a\lastkern - \fi - \unkern - \ifnum\lastpenalty>\z@ - \global\flushend@@penalty@a\lastpenalty - \fi - \unpenalty - \global\setbox\flushend@@tempbox@a\lastbox - }% - \wlog@balance@debug{^^J::analyze@lastbox@box::\log@box@info{#1}% - ^^J ::unvbox: \log@box@info{\flushend@@varbox@a}% - ^^J::lastbox: \log@box@info{\flushend@@tempbox@a}% - ^^J::lastskip: \the\flushend@@lastskip@a; - lastkern: \the\var@@temp@a; - lastpenalty: \the\flushend@@penalty@a - }% - } + \setbox\flushend@@varbox@a\vbox{% + \unvbox#1% + \global\flushend@@lastskip@a\lastskip + \unskip + \global\var@@temp@a\lastkern + \unkern + \global\flushend@@penalty@a\lastpenalty + \unpenalty + \ifdim\lastskip>\z@ + \global\flushend@@lastskip@a\lastskip + \fi + \unskip + \ifdim\lastkern>\z@ + \global\var@@temp@a\lastkern + \fi + \unkern + \ifnum\lastpenalty>\z@ + \global\flushend@@penalty@a\lastpenalty + \fi + \unpenalty + \global\setbox\flushend@@tempbox@a\lastbox + }% + \wlog@balance@debug{^^J::analyze@lastbox@box::\log@box@info{#1}% + ^^J ::unvbox: \log@box@info{\flushend@@varbox@a}% + ^^J::lastbox: \log@box@info{\flushend@@tempbox@a}% + ^^J::lastskip: \the\flushend@@lastskip@a; + lastkern: \the\var@@temp@a; + lastpenalty: \the\flushend@@penalty@a + }% + } \gdef\analyze@leftcolumn@box#1{% - \splittopskip\z@ \vfuzz\maxdimen \vbadness\maxdimen - \flushend@@lastskip@b\ht#1% - \wlog@balance@debug{^^Jmainbox: \log@box@info{#1}}% - \setbox\flushend@@varbox@a\vbox{% - \unvbox#1% - \global\flushend@@lastskip@a\lastskip - \unskip - \global\flushend@@lastkern@a\lastkern - \unkern - \global\flushend@@penalty@a\lastpenalty - \unpenalty - \global\setbox\flushend@@tempbox@a\lastbox - }% - \advance\flushend@@lastskip@b -\ht\flushend@@varbox@a - \advance\flushend@@lastskip@b -\ht\flushend@@tempbox@a - \wlog@balance@debug{.-box: \log@box@info{\flushend@@varbox@a}% - ^^J.-lastbox: \log@box@info{\flushend@@tempbox@a}% - ^^J.-lastskip: \the\flushend@@lastskip@a; - lastkern: \the\flushend@@lastkern@a; - lastpenalty: \the\flushend@@penalty@a - ^^J.-diff: \the\flushend@@lastskip@b - }% - \check@@footnoterule@@box\flushend@@tempbox@a\flushend@@lastskip@b\flushend@@varbox@a - \check@@baselineskip@@skip\flushend@@lastskip@a\flushend@@lastskip@b\flushend@@lastskip@c - \ifvoid\flushend@@tempbox@a - \ifdim\ht\flushend@@varbox@a>\topskip - \flushend@@lastskip@b\ht\flushend@@varbox@a - \var@@temp@a\ht\flushend@@varbox@a - \loop - \setbox\flushend@@tempbox@c\vsplit\flushend@@varbox@a to\var@@temp@a - \ifvoid\flushend@@varbox@a - \setbox\flushend@@varbox@a\vbox{\unvbox\flushend@@tempbox@c}% - \advance \var@@temp@a -3\p@ - \else - \var@@temp@a=-1\p@ - \fi - \ifdim \var@@temp@a>\z@ - \repeat - \setbox\flushend@@varbox@a\vbox{\unvbox\flushend@@varbox@a}% - \setbox\flushend@@tempbox@c\vbox{\unvbox\flushend@@tempbox@c}% - \advance\flushend@@lastskip@b -\ht\flushend@@varbox@a - \advance\flushend@@lastskip@b -\ht\flushend@@tempbox@c - \wlog@balance@debug{..--box: \log@box@info{\flushend@@tempbox@c}% - ^^J..--lastbox: \log@box@info{\flushend@@varbox@a}% - ^^J..--diff: \the\flushend@@lastskip@b}% - \check@@footnoterule@@box\flushend@@varbox@a\flushend@@lastskip@b - \flushend@@tempbox@c - \check@@baselineskip@@skip\flushend@@lastskip@a\flushend@@lastskip@b - \flushend@@lastskip@c - \ifdim\ht\flushend@@varbox@a>.5\topskip - \analyze@lastbox@box\flushend@@varbox@a - \fi - \setbox\flushend@@varbox@a\vbox{\unvbox\flushend@@tempbox@c}% - \else - \wlog@balance@debug{lastbox: \log@box@info{\flushend@@varbox@a}}% - \fi - \fi - \ifdim\ht\flushend@@varbox@a>\topskip - \expandafter\analyze@leftcolumn@box\expandafter\flushend@@varbox@a - \fi - } + \set@split@topskip@to\z@ + \flushend@@lastskip@b\ht#1% + \wlog@balance@debug{^^Jmainbox: \log@box@info{#1}}% + \setbox\flushend@@varbox@a\vbox{% + \unvbox#1% + \global\flushend@@lastskip@a\lastskip + \unskip + \global\flushend@@lastkern@a\lastkern + \unkern + \global\flushend@@penalty@a\lastpenalty + \unpenalty + \global\setbox\flushend@@tempbox@a\lastbox + }% + \advance\flushend@@lastskip@b -\ht\flushend@@varbox@a + \advance\flushend@@lastskip@b -\ht\flushend@@tempbox@a + \wlog@balance@debug{.-box: \log@box@info{\flushend@@varbox@a}% + ^^J.-lastbox: \log@box@info{\flushend@@tempbox@a}% + ^^J.-lastskip: \the\flushend@@lastskip@a; + lastkern: \the\flushend@@lastkern@a; + lastpenalty: \the\flushend@@penalty@a + ^^J.-diff: \the\flushend@@lastskip@b + }% + \check@@footnoterule@@box\flushend@@tempbox@a\flushend@@lastskip@b\flushend@@varbox@a + \check@@baselineskip@@skip + \flushend@@lastskip@a + \flushend@@lastskip@b + \flushend@@lastskip@c + \ifx\check@@footnoterule@@box\check@@baselineskip@@skip + \else + \ifvoid\flushend@@tempbox@a + \ifdim\ht\flushend@@varbox@a>\topskip + \flushend@@lastskip@b\ht\flushend@@varbox@a + \var@@temp@a\ht\flushend@@varbox@a + \loop + \setbox\flushend@@tempbox@c\vsplit\flushend@@varbox@a to\var@@temp@a + \ifvoid\flushend@@varbox@a + \setbox\flushend@@varbox@a\vbox{\unvbox\flushend@@tempbox@c}% + \advance \var@@temp@a -3\p@ + \else + \var@@temp@a=-1\p@ + \fi + \ifdim \var@@temp@a>\z@ + \repeat + \setbox\flushend@@varbox@a\vbox{\unvbox\flushend@@varbox@a}% + \setbox\flushend@@tempbox@c\vbox{\unvbox\flushend@@tempbox@c}% + \advance\flushend@@lastskip@b -\ht\flushend@@varbox@a + \advance\flushend@@lastskip@b -\ht\flushend@@tempbox@c + \wlog@balance@debug{..--box: \log@box@info{\flushend@@tempbox@c}% + ^^J..--lastbox: \log@box@info{\flushend@@varbox@a}% + ^^J..--diff: \the\flushend@@lastskip@b + }% + \check@@footnoterule@@box\flushend@@varbox@a\flushend@@lastskip@b + \flushend@@tempbox@c + \check@@baselineskip@@skip\flushend@@lastskip@a\flushend@@lastskip@b + \flushend@@lastskip@c + \ifx\check@@footnoterule@@box\check@@baselineskip@@skip + \else + \ifdim\ht\flushend@@varbox@a>.5\topskip + \analyze@lastbox@box\flushend@@varbox@a + \fi + \setbox\flushend@@varbox@a\vbox{\unvbox\flushend@@tempbox@c}% + \fi + \else + \wlog@balance@debug{lastbox: \log@box@info{\flushend@@varbox@a}}% + \fi + \fi + \ifdim\ht\flushend@@varbox@a>\topskip + \expandafter\analyze@leftcolumn@box\expandafter\flushend@@varbox@a + \fi + \fi + } \def\get@@footnoterule@@box{% - \splittopskip\z@ \vfuzz\maxdimen \vbadness\maxdimen + \set@split@topskip@to\z@ \setbox\flushend@@varbox@a\vbox{\strut \vskip\z@ \footnoterule \unskip\unkern\unpenalty \unskip\unkern\unpenalty }% - \setbox\flushend@@tempbox@c\vsplit\flushend@@varbox@a to\ht\strutbox + \setbox\flushend@@tempbox@c\vsplit\flushend@@varbox@a to\p@ \xdef\footnoterule@@box@@ht{\the\ht\flushend@@varbox@a}% \xdef\footnoterule@@box@@dp{\the\dp\flushend@@varbox@a}% \xdef\footnoterule@@box@@wd{\the\wd\flushend@@varbox@a}% \wlog@balance@debug{:footnoterule: \log@box@info{\flushend@@varbox@a}}% + \setbox\flushend@@tempbox@c\vbox{\unvbox\flushend@@varbox@a}% } +\long\def\@gobblethree#1#2#3{} \def\check@@footnoterule@@box#1#2#3{% \ifdim\ht#1=\footnoterule@@box@@ht - \ifdim\dp#1=\footnoterule@@box@@dp - \ifdim\wd#1=\footnoterule@@box@@wd - \ifdim#2>\topskip - \xdef\main@box@height{\the\ht#3}% - \xdef\main@box@skip{\the#2}% - \fi + \ifdim\dp#1=\footnoterule@@box@@dp + \ifdim\wd#1=\footnoterule@@box@@wd + \ifdim#2=\topskip + \else + \xdef\main@box@height{\the\ht#3}% + \xdef\main@box@skip{\the#2}% + \wlog@balance@debug{^^J:footnoterule found: + main@box <ht=\main@box@height, + skip=\main@box@skip> + }% + \global\let\check@@footnoterule@@box\@gobblethree + \global\let\check@@baselineskip@@skip\reset@check@@baselineskip@@skip + \fi + \fi \fi - \fi \fi - } + } +\let\initial@check@@footnoterule@@box\check@@footnoterule@@box \def\check@@baselineskip@@skip#1#2#3{% \ifdim#1>\z@ \ifdim#2>\z@ \global#3=\the#1% - \gdef\check@@baselineskip@@skip##1##2##3{}% + \global\let\check@@baselineskip@@skip\@gobblethree \fi \fi - } + } +\let\initial@check@@baselineskip@@skip\check@@baselineskip@@skip +\def\reset@check@@baselineskip@@skip#1#2#3{% + \global#3=\z@ + \global\let\check@@baselineskip@@skip\initial@check@@baselineskip@@skip + } \def\analyze@rightcolumn@box#1{% - \bgroup - \xdef\top@@floatbox@ht{\z@}% - \xdef\top@@floatbox@skip{\z@}% - \xdef\top@@section@skip{\z@}% - \splittopskip\z@ \vfuzz\maxdimen \vbadness\maxdimen - \wlog@balance@debug{^^J(R)mainbox: \log@box@info{#1}}% - \var@@temp@a3\p@ - \setbox\flushend@@varbox@a\vbox{\strut - \vskip\z@ - \unvcopy#1% - }% - \splittopskip\z@ - \setbox\flushend@@tempbox@c\vsplit\flushend@@varbox@a to\ht\strutbox - \flushend@@lastskip@a\ht\flushend@@varbox@a - \advance\flushend@@lastskip@a\dp\flushend@@varbox@a - \loop - \flushend@@lastskip@b\ht\flushend@@varbox@a - \advance\flushend@@lastskip@b\dp\flushend@@varbox@a - \setbox\flushend@@tempbox@c\vsplit\flushend@@varbox@a to\var@@temp@a - \ifvoid\flushend@@tempbox@c - \advance \var@@temp@a 3\p@ - \ifdim\var@@temp@a>\flushend@@lastskip@b - \var@@temp@a=-1\p@ - \fi - \else - \setbox\flushend@@tempbox@c\vbox{\unvbox\flushend@@tempbox@c}% - \ifdim\ht\flushend@@tempbox@c>\top@@floatbox@min - \advance\flushend@@lastskip@b -\ht\flushend@@tempbox@c - \advance\flushend@@lastskip@b -\dp\flushend@@tempbox@c - \advance\flushend@@lastskip@b -\ht\flushend@@varbox@a - \advance\flushend@@lastskip@b -\dp\flushend@@varbox@a - \xdef\top@@floatbox@skip{\the\flushend@@lastskip@b}% - \flushend@@lastskip@b\flushend@@lastskip@a - \advance\flushend@@lastskip@b -\ht\flushend@@varbox@a - \advance\flushend@@lastskip@b -\top@@floatbox@skip - \xdef\top@@floatbox@ht{\the\flushend@@lastskip@b}% - \var@@temp@a=3\p@ - \else - \advance\flushend@@lastskip@b -\ht\flushend@@tempbox@c - \advance\flushend@@lastskip@b -\dp\flushend@@tempbox@c - \advance\flushend@@lastskip@b -\ht\flushend@@varbox@a - \advance\flushend@@lastskip@b -\dp\flushend@@varbox@a - \ifdim\ht\flushend@@tempbox@c>\topskip - \else - \xdef\top@@section@skip{\the\flushend@@lastskip@b}% - \fi - \var@@temp@a=-1\p@ - \fi - \fi - \ifdim \var@@temp@a>\z@ - \repeat - \ifvoid\flushend@@tempbox@c - \else - \ifdim\top@@section@skip>\z@ - \else - \ifdim\ht\flushend@@tempbox@c>\z@ - \setbox\flushend@@varbox@a\vbox{\unvbox\flushend@@tempbox@c}% - \fi - \flushend@@lastskip@b\ht\flushend@@varbox@a - \var@@temp@a=3\p@ - \loop - \setbox\flushend@@tempbox@c\vsplit\flushend@@varbox@a to\var@@temp@a - \ifvoid\flushend@@tempbox@c - \advance \var@@temp@a 3\p@ - \ifdim\var@@temp@a>\flushend@@lastskip@b - \var@@temp@a=-1\p@ - \fi - \else - \ifdim\ht\flushend@@tempbox@c<\z@ - \else - \var@@temp@a=-1\p@ - \fi - \fi - \ifdim \var@@temp@a>\z@ - \repeat - \loop - \setbox\flushend@@varbox@a\vbox{% - \unvbox\flushend@@tempbox@c - \unskip\unkern\unpenalty - \unskip\unkern\unpenalty - \unskip\unkern\unpenalty - \setbox\flushend@@tempbox@c\lastbox - }% - \flushend@@lastskip@b\ht\flushend@@varbox@a - \setbox\flushend@@varbox@a\vbox{% - \unvbox\flushend@@varbox@a - \unskip\unkern\unpenalty - \unskip\unkern\unpenalty - \unskip\unkern\unpenalty - }% - \advance\flushend@@lastskip@b -\ht\flushend@@varbox@a - \ifdim\flushend@@lastskip@b>\topskip - \xdef\top@@section@skip{\the\flushend@@lastskip@b}% - \fi - \ifdim\ht\flushend@@varbox@a>2\topskip - \setbox\flushend@@tempbox@c\vbox{\unvbox\flushend@@varbox@a}% - \repeat - \fi - \fi - \egroup - } -\def\last@outputdblcol@modern{% - \if@firstcolumn - \global \@firstcolumnfalse - \global \setbox\@leftcolumn \box\@outputbox - \else - \global \@firstcolumntrue - \@tempdima\ht\@leftcolumn - \splittopskip\topskip \splitmaxdepth\maxdepth - \var@@temp@spread=\wd\@outputbox - \get@@footnoterule@@box - \xdef\main@box@height{\the\ht\@leftcolumn}% - \xdef\main@box@skip{\z@}% - \global\flushend@@lastskip@c\z@ - \setbox\flushend@@varbox@a\vbox{\unvcopy\@leftcolumn}% - \analyze@leftcolumn@box\flushend@@varbox@a - \setbox\flushend@@varbox@a\vbox{\unvcopy\@outputbox}% - \analyze@rightcolumn@box\flushend@@varbox@a - \if@auto@baselineskip - %% Trying guess baselineskip value on column break - \ifdim\main@box@skip>\z@ - \splittopskip\z@ - \setbox\flushend@@varbox@a\vsplit\@leftcolumn to\main@box@height - \else - \setbox\flushend@@varbox@a\box\@leftcolumn - \fi - \ifdim\var@@temp@spread>\z@ - \setbox\@outputbox\vbox{\strut - \vskip\z@ - \unvbox\@outputbox - }% - \splittopskip\z@ - \setbox\flushend@@tempbox@c\vsplit\@outputbox to\ht\strutbox - \ifdim\top@@floatbox@skip>\z@ - \setbox\flushend@@tempbox@c\vsplit\@outputbox to\top@@floatbox@ht - \setbox\flushend@@tempbox@c\vbox{\unvbox\flushend@@tempbox@c}% - \fi - \setbox\@tempboxa\vbox{% - \unvbox\flushend@@varbox@a - \unskip\unkern\unpenalty - \vskip\flushend@@lastskip@c - \the\atColsBreak - \hrule\@height\flushend@@page@rule width\columnwidth - \ifdim\top@@section@skip>\top@@skip@@limit - \vskip\top@@section@skip - \fi - \unvbox\@outputbox - \remove@lastbox@at@balancing - \the\atColsEnd - }% - \ifdim\top@@floatbox@skip>\z@ - \setbox\@outputbox\vbox{\unvbox\flushend@@tempbox@c}% - \fi - \else %% rightcolumn empty - \setbox\@tempboxa\vbox{% - \unvbox\flushend@@varbox@a - \remove@lastbox@at@balancing - \the\atColsEnd - }% - \fi - \else - %% Ignore baselineskip value on column break - \ifdim\var@@temp@spread>\z@ - \setbox\@outputbox\vbox{\strut - \vskip\z@ - \unvbox\@outputbox + \bgroup + \xdef\top@@floatbox@ht{\z@}% + \xdef\top@@floatbox@skip{\z@}% + \xdef\top@@section@skip{\z@}% + \set@split@topskip@to\z@ + \setbox\flushend@@varbox@a\vbox{\strut + \vskip\z@ + \unvcopy#1% + }% + \setbox\flushend@@tempbox@c\vsplit\flushend@@varbox@a to\p@ + \wlog@balance@debug{^^J(R)mainbox: \log@box@info{#1}}% + \flushend@@lastskip@a\ht\flushend@@varbox@a + \advance\flushend@@lastskip@a\dp\flushend@@varbox@a + \ifdim\flushend@@lastskip@a>\z@ + \analyze@nonempty@rightcolumn@box + \fi + \egroup + } +\def\analyze@nonempty@rightcolumn@box{% + \bgroup + \var@@temp@a3\p@ + \loop + \flushend@@lastskip@b\ht\flushend@@varbox@a + \advance\flushend@@lastskip@b\dp\flushend@@varbox@a + \setbox\flushend@@tempbox@c\vsplit\flushend@@varbox@a to\var@@temp@a + \ifvoid\flushend@@tempbox@c + \advance \var@@temp@a 3\p@ + \ifdim\var@@temp@a>\flushend@@lastskip@b + \var@@temp@a=-1\p@ + \fi + \else + \setbox\flushend@@tempbox@c\vbox{\unvbox\flushend@@tempbox@c}% + \ifdim\ht\flushend@@tempbox@c>\top@@floatbox@min + \advance\flushend@@lastskip@b -\ht\flushend@@tempbox@c + \advance\flushend@@lastskip@b -\dp\flushend@@tempbox@c + \advance\flushend@@lastskip@b -\ht\flushend@@varbox@a + \advance\flushend@@lastskip@b -\dp\flushend@@varbox@a + \xdef\top@@floatbox@skip{\the\flushend@@lastskip@b}% + \flushend@@lastskip@b\flushend@@lastskip@a + \advance\flushend@@lastskip@b -\ht\flushend@@varbox@a + \advance\flushend@@lastskip@b -\top@@floatbox@skip + \xdef\top@@floatbox@ht{\the\flushend@@lastskip@b}% + \var@@temp@a=3\p@ + \else + \advance\flushend@@lastskip@b -\ht\flushend@@tempbox@c + \advance\flushend@@lastskip@b -\dp\flushend@@tempbox@c + \advance\flushend@@lastskip@b -\ht\flushend@@varbox@a + \advance\flushend@@lastskip@b -\dp\flushend@@varbox@a + \ifdim\ht\flushend@@tempbox@c>\topskip + \else + \xdef\top@@section@skip{\the\flushend@@lastskip@b}% + \fi + \var@@temp@a=-1\p@ + \fi + \fi + \ifdim \var@@temp@a>\z@ + \repeat + \ifvoid\flushend@@tempbox@c + \else + \ifdim\top@@section@skip>\z@ + \else + \ifdim\ht\flushend@@tempbox@c>\z@ + \setbox\flushend@@varbox@a\vbox{\unvbox\flushend@@tempbox@c}% + \fi + \flushend@@lastskip@b\ht\flushend@@varbox@a + \var@@temp@a=3\p@ + \loop + \setbox\flushend@@tempbox@c\vsplit\flushend@@varbox@a to\var@@temp@a + \ifvoid\flushend@@tempbox@c + \advance \var@@temp@a 3\p@ + \ifdim\var@@temp@a>\flushend@@lastskip@b + \var@@temp@a=-1\p@ + \fi + \else + \ifdim\ht\flushend@@tempbox@c<\z@ + \else + \var@@temp@a=-1\p@ + \fi + \fi + \ifdim \var@@temp@a>\z@ + \repeat + \loop + \setbox\flushend@@varbox@a\vbox{% + \unvbox\flushend@@tempbox@c + \unskip\unkern\unpenalty + \unskip\unkern\unpenalty + \unskip\unkern\unpenalty + \setbox\flushend@@tempbox@c\lastbox + }% + \flushend@@lastskip@b\ht\flushend@@varbox@a + \setbox\flushend@@varbox@a\vbox{% + \unvbox\flushend@@varbox@a + \unskip\unkern\unpenalty + \unskip\unkern\unpenalty + \unskip\unkern\unpenalty + }% + \advance\flushend@@lastskip@b -\ht\flushend@@varbox@a + \ifdim\flushend@@lastskip@b>\topskip + \xdef\top@@section@skip{\the\flushend@@lastskip@b}% + \fi + \ifdim\ht\flushend@@varbox@a>2\topskip + \setbox\flushend@@tempbox@c\vbox{\unvbox\flushend@@varbox@a}% + \repeat + \fi + \fi + \egroup + } +\def\combine@columns@for@balance{% + \setbox\@outputbox\vbox{\strut + \vskip\z@ + \unvbox\@outputbox + }% + \set@split@topskip@to\z@ + \setbox\flushend@@tempbox@c\vsplit\@outputbox to\p@ + \if@auto@baselineskip + %% Trying guess baselineskip value on column break + \ifdim\top@@floatbox@skip>\z@ + \setbox\flushend@@tempbox@c\vsplit\@outputbox to\top@@floatbox@ht + \setbox\flushend@@tempbox@c\vbox{\unvbox\flushend@@tempbox@c}% + \fi + \setbox\@tempboxa\vbox{% + \unvbox\flushend@@varbox@a + \unskip\unkern\unpenalty + \vskip\flushend@@lastskip@c + \the\atColsBreak + \hrule\@height\flushend@@page@rule width\columnwidth + \ifdim\top@@section@skip>\top@@skip@@limit + \vskip\top@@section@skip + \fi + \unvbox\@outputbox + \remove@lastbox@at@balancing + \the\atColsEnd + }% + \ifdim\top@@floatbox@skip>\z@ + \setbox\@outputbox\vbox{\unvbox\flushend@@tempbox@c}% + \fi + \else + %% Ignore baselineskip value on column break + \setbox\@tempboxa\vbox{% + \unvbox\@leftcolumn + \setbox\z@\lastbox + \unskip\unkern\unpenalty + \the\atColsBreak + \hrule\@height\flushend@@page@rule width\columnwidth + \unvbox\@outputbox + \remove@lastbox@at@balancing + \the\atColsEnd + }% + \fi + } +\def\set@outputbox@with@footnote{% + %% footnote in left column + \@tempdimb\ht\@tempboxa + \ifdim\top@@floatbox@skip>\z@ + \advance\@tempdimb \top@@floatbox@skip + \advance\@tempdimb \top@@floatbox@ht + \fi + \advance\@tempdimb \main@box@skip + \advance\@tempdimb \ht\@leftcolumn + \@tempdimb .5\@tempdimb + \advance\@tempdimb -\main@box@skip + \advance\@tempdimb -\ht\@leftcolumn + \set@split@topskip@to\topskip + \loop + \setbox\flushend@@varbox@a\copy\@tempboxa + \setbox\flushend@@tempbox@a\vsplit\flushend@@varbox@a to\@tempdimb + \setbox\flushend@@tempbox@c\vbox{\unvcopy\flushend@@tempbox@a}% + \ifdim\top@@floatbox@skip>\z@ + \setbox\flushend@@varbox@c\vbox{% + \unvcopy\@outputbox + \vskip\top@@floatbox@skip + \unvbox\flushend@@varbox@a }% - \splittopskip\z@ - \setbox\flushend@@tempbox@c\vsplit\@outputbox to\ht\strutbox - \setbox\@tempboxa\vbox{% - \unvbox\@leftcolumn - \setbox\z@\lastbox - \unskip\unkern\unpenalty - \the\atColsBreak - \hrule\@height\flushend@@page@rule width\columnwidth - \unvbox\@outputbox - \remove@lastbox@at@balancing - \the\atColsEnd - }% - \else - \setbox\@tempboxa\vbox{% - \unvbox\@leftcolumn - \remove@lastbox@at@balancing - \the\atColsEnd - }% - \fi - \fi - \ifdim\main@box@skip>\z@ - \@tempdimb\ht\@tempboxa - \advance\@tempdimb -\main@box@skip - \advance\@tempdimb -\ht\@leftcolumn - \@tempdimb .5\@tempdimb - \splittopskip\topskip \splitmaxdepth\maxdepth - \loop - \setbox\flushend@@varbox@a\copy\@tempboxa - \setbox\flushend@@tempbox@a\vsplit\flushend@@varbox@a to\@tempdimb - \setbox\flushend@@tempbox@c\vbox{% - \unvcopy\flushend@@tempbox@a - \vskip\main@box@skip - \unvcopy\@leftcolumn - }% - \setbox\flushend@@varbox@c\vbox{\unvbox\flushend@@varbox@a}% - \var@@temp@spread=\ht\flushend@@tempbox@c - \advance\var@@temp@spread by-\ht\flushend@@varbox@c - \wlog@balance@debug{Left x: \the\ht\flushend@@tempbox@a + \else + \setbox\flushend@@varbox@c\vbox{\unvbox\flushend@@varbox@a}% + \fi + \var@@temp@spread=\ht\flushend@@tempbox@c + \advance\var@@temp@spread by\dp\flushend@@tempbox@c + \advance\var@@temp@spread \main@box@skip + \advance\var@@temp@spread \ht\@leftcolumn + \advance\var@@temp@spread by-\ht\flushend@@varbox@c + \advance\var@@temp@spread by-\dp\flushend@@varbox@c + \wlog@balance@debug{Left x: \the\ht\flushend@@tempbox@a +\the\dp\flushend@@tempbox@a=\the\ht\flushend@@varbox@a +\the\dp\flushend@@varbox@a::\the\@tempdimb - ^^JLeft 0: \the\ht\flushend@@tempbox@c + ^^JLeft 0: \the\ht\flushend@@tempbox@c +\the\dp\flushend@@tempbox@c::\the\@tempdimb - ^^JRight x: \the\ht\flushend@@varbox@c + ^^JRight x: \the\ht\flushend@@varbox@c +\the\dp\flushend@@varbox@c=\the\ht\flushend@@varbox@a +\the\dp\flushend@@varbox@a::\the\@tempdimb - ^^JExtra height:\the\var@@temp@spread\space when \the\@tempdimb - }% - \ifdim\var@@temp@spread<\z@ \advance\@tempdimb 1\p@ \repeat - \flushend@@lastskip@a\the\ht\flushend@@tempbox@c - \flushend@@lastskip@b\the\@tempdimb - \setbox\flushend@@tempbox@a\vsplit\@tempboxa to\@tempdimb - \setbox\@leftcolumn\vbox to\@tempdima{% - \vbox to \flushend@@lastskip@a{% - \unvbox\flushend@@tempbox@a - \vskip\main@box@skip - \unvbox\@leftcolumn - \vss - }% - \hrule\@height\flushend@@page@rule width\textwidth - \vss - }% - \global\ht\@leftcolumn=\the\@tempdima - \wlog{- LAST -% - ^^JExtra skip:\the\var@@temp@spread - ^^JLeft:\the\ht\@leftcolumn/\the\dp\@leftcolumn - ^^JRight:\the\ht\@tempboxa/\the\dp\@tempboxa - ^^JOutput:\the\@tempdimb - }% - \setbox\@outputbox\vbox to\@tempdima{% - \vbox spread\var@@temp@spread{% - \unvbox\@tempboxa - }% - \vss - }% - \else - \@tempdimb \ht\@tempboxa - \ifdim\top@@floatbox@skip>\z@ - \advance\@tempdimb \top@@floatbox@skip - \advance\@tempdimb \top@@floatbox@ht - \fi - \@tempdimb .5\@tempdimb - \splittopskip\topskip \splitmaxdepth\maxdepth - \loop - \setbox\flushend@@varbox@a\copy\@tempboxa - \setbox\flushend@@tempbox@a\vsplit\flushend@@varbox@a to\@tempdimb - \setbox\flushend@@tempbox@c\vbox{\unvcopy\flushend@@tempbox@a}% - \ifdim\top@@floatbox@skip>\z@ - \setbox\flushend@@varbox@c\vbox{% - \unvcopy\@outputbox - \vskip\top@@floatbox@skip - \unvbox\flushend@@varbox@a + ^^JExtra height:\the\var@@temp@spread\space when \the\@tempdimb + }% + \ifdim\var@@temp@spread<\z@ + \advance\@tempdimb 1\p@ + \repeat + \flushend@@lastskip@a\the\ht\flushend@@tempbox@c + \advance\flushend@@lastskip@a \main@box@skip + \advance\flushend@@lastskip@a \ht\@leftcolumn + \flushend@@lastskip@b\the\@tempdimb + \setbox\flushend@@tempbox@a\vsplit\@tempboxa to\@tempdimb + \setbox\@leftcolumn\vbox to\@tempdima{% + \vbox to \flushend@@lastskip@a{% + \unvbox\flushend@@tempbox@a + \vskip\main@box@skip + \unvbox\@leftcolumn + \vss + }% + \hrule\@height\flushend@@page@rule width\textwidth + \vss + }% + \global\ht\@leftcolumn=\the\@tempdima + \wlog{- LAST -% + ^^JExtra skip:\the\var@@temp@spread + ^^JLeft:\the\ht\@leftcolumn/\the\dp\@leftcolumn + ^^JRight:\the\ht\@tempboxa/\the\dp\@tempboxa + ^^JOutput:\the\@tempdimb + }% + \ifdim\top@@floatbox@skip>\z@ + \setbox\@outputbox\vbox to\@tempdima{% + \if@right@column@spread + \vbox spread\var@@temp@spread{% + \unvbox\@outputbox + \vskip\top@@floatbox@skip + \unvbox\@tempboxa + }% + \else + \vbox spread\var@@temp@spread{% + \unvbox\@outputbox + \vskip\top@@floatbox@skip + \unvbox\@tempboxa + \vss + }% + \fi + \vss + }% + \else + \setbox\@outputbox\vbox to\@tempdima{% + \if@right@column@spread + \vbox spread\var@@temp@spread{% + \unvbox\@tempboxa }% - \else - \setbox\flushend@@varbox@c\vbox{\unvbox\flushend@@varbox@a}% - \fi - \var@@temp@spread=\ht\flushend@@tempbox@c - \advance\var@@temp@spread by\dp\flushend@@tempbox@c - \advance\var@@temp@spread by-\ht\flushend@@varbox@c - \advance\var@@temp@spread by-\dp\flushend@@varbox@c - \wlog@balance@debug{Left x: \the\ht\flushend@@tempbox@a + \else + \vbox spread\var@@temp@spread{% + \unvbox\@tempboxa + \vss + }% + \fi + \vss + }% + \fi + } +\def\set@outputbox@without@footnote{% + %% no footnote in left column + \@tempdimb \ht\@tempboxa + \ifdim\top@@floatbox@skip>\z@ + \advance\@tempdimb \top@@floatbox@skip + \advance\@tempdimb \top@@floatbox@ht + \fi + \@tempdimb .5\@tempdimb + \set@split@topskip@to\topskip + \loop + \setbox\flushend@@varbox@a\copy\@tempboxa + \setbox\flushend@@tempbox@a\vsplit\flushend@@varbox@a to\@tempdimb + \setbox\flushend@@tempbox@c\vbox{\unvcopy\flushend@@tempbox@a}% + \ifdim\top@@floatbox@skip>\z@ + \setbox\flushend@@varbox@c\vbox{% + \unvcopy\@outputbox + \vskip\top@@floatbox@skip + \unvbox\flushend@@varbox@a + }% + \else + \setbox\flushend@@varbox@c\vbox{\unvbox\flushend@@varbox@a}% + \fi + \var@@temp@spread=\ht\flushend@@tempbox@c + \advance\var@@temp@spread by\dp\flushend@@tempbox@c + \advance\var@@temp@spread by-\ht\flushend@@varbox@c + \advance\var@@temp@spread by-\dp\flushend@@varbox@c + \wlog@balance@debug{Left x: \the\ht\flushend@@tempbox@a +\the\dp\flushend@@tempbox@a=\the\ht\flushend@@varbox@a +\the\dp\flushend@@varbox@a::\the\@tempdimb - ^^JLeft 0: \the\ht\flushend@@tempbox@c + ^^JLeft 0: \the\ht\flushend@@tempbox@c +\the\dp\flushend@@tempbox@c::\the\@tempdimb - ^^JRight x: \the\ht\flushend@@varbox@c + ^^JRight x: \the\ht\flushend@@varbox@c +\the\dp\flushend@@varbox@c=\the\ht\flushend@@varbox@a +\the\dp\flushend@@varbox@a::\the\@tempdimb - ^^JExtra height:\the\var@@temp@spread\space when \the\@tempdimb - }% - \ifdim\var@@temp@spread<\z@ \advance\@tempdimb 1\p@ \repeat - %\@tempdimb\ht\flushend@@tempbox@c - %\advance\@tempdimb by\dp\flushend@@tempbox@c - \wlog{- LAST -% - ^^JExtra skip:\the\var@@temp@spread - ^^JLeft:\the\ht\flushend@@tempbox@c/\the\dp\flushend@@tempbox@c - ^^JRight:\the\ht\flushend@@varbox@c/\the\dp\flushend@@varbox@c - ^^JOutput:\the\@tempdimb - }% - \setbox\flushend@@tempbox@c\vsplit\@tempboxa to\@tempdimb - \setbox\flushend@@varbox@c\vbox{\unvbox\flushend@@tempbox@c}% - \setbox\@leftcolumn\vbox to\@tempdima{% - \vbox to\@tempdimb{\unvbox\flushend@@varbox@c\vss}% - \hrule\@height\flushend@@page@rule width\textwidth - \vss - }% - \global\ht\@leftcolumn=\the\@tempdima - \ifdim\top@@floatbox@skip>\z@ - \setbox\@outputbox\vbox to\@tempdima{% - \if@right@column@spread - \vbox spread\var@@temp@spread{% - \unvbox\@outputbox - \vskip\top@@floatbox@skip - \unvbox\@tempboxa - }% - \else - \vbox spread\var@@temp@spread{% - \unvbox\@outputbox - \vskip\top@@floatbox@skip - \unvbox\@tempboxa - \vss - }% - \fi - \vss - }% - \else - \setbox\@outputbox\vbox to\@tempdima{% - \if@right@column@spread - \vbox spread\var@@temp@spread{% - \unvbox\@tempboxa - }% - \else - \vbox spread\var@@temp@spread{% - \unvbox\@tempboxa - \vss - }% - \fi - \vss - }% - \fi - \fi - \setbox\@outputbox \vbox {% - \hb@xt@\textwidth {% - \hb@xt@\columnwidth {% - \fmt@box@adds{\box\@leftcolumn}\hss}% - \hfil - \vrule \@width\columnseprule - \hfil - \hb@xt@\columnwidth {% - \fmt@box@adds{\box\@outputbox}\hss}% - }% - }% - \global\let\@outputdblcol\saved@orig@@outputdblcol - \global\atColsEnd{}% - \ifvoid\hold@viper - \else - \setbox\@outputbox\vbox{\box\hold@viper\box\@outputbox}% - \fi - \@combinedblfloats - \@outputpage - \begingroup - \@dblfloatplacement - \@startdblcolumn - \@whilesw\if@fcolmade\fi - {\@outputpage\@startdblcolumn}% - \ifvoid\@viper - \else - \global\setbox\@viper\vbox{% - \vskip-\stripsep - \unvbox\@viper - }% - \csname @viperoutput\endcsname - \fi - \endgroup - \fi - } + ^^JExtra height:\the\var@@temp@spread\space when \the\@tempdimb + }% + \ifdim\var@@temp@spread<\z@ \advance\@tempdimb 1\p@ \repeat + \wlog{- LAST -% + ^^JExtra skip:\the\var@@temp@spread + ^^JLeft:\the\ht\flushend@@tempbox@c/\the\dp\flushend@@tempbox@c + ^^JRight:\the\ht\flushend@@varbox@c/\the\dp\flushend@@varbox@c + ^^JOutput:\the\@tempdimb + }% + \setbox\flushend@@tempbox@c\vsplit\@tempboxa to\@tempdimb + \setbox\flushend@@varbox@c\vbox{\unvbox\flushend@@tempbox@c}% + \setbox\@leftcolumn\vbox to\@tempdima{% + \vbox to\@tempdimb{\unvbox\flushend@@varbox@c\vss}% + \hrule\@height\flushend@@page@rule width\textwidth + \vss + }% + \global\ht\@leftcolumn=\the\@tempdima + \ifdim\top@@floatbox@skip>\z@ + \setbox\@outputbox\vbox to\@tempdima{% + \if@right@column@spread + \vbox spread\var@@temp@spread{% + \unvbox\@outputbox + \vskip\top@@floatbox@skip + \unvbox\@tempboxa + }% + \else + \vbox spread\var@@temp@spread{% + \unvbox\@outputbox + \vskip\top@@floatbox@skip + \unvbox\@tempboxa + \vss + }% + \fi + \vss + }% + \else + \setbox\@outputbox\vbox to\@tempdima{% + \if@right@column@spread + \vbox spread\var@@temp@spread{% + \unvbox\@tempboxa + }% + \else + \vbox spread\var@@temp@spread{% + \unvbox\@tempboxa + \vss + }% + \fi + \vss + }% + \fi + } +\def\last@outputdblcol@modern{% + \if@firstcolumn + \global \@firstcolumnfalse + \global \setbox\@leftcolumn \box\@outputbox + \else + \global \@firstcolumntrue + \@tempdima\ht\@leftcolumn + \set@split@topskip@to\topskip + \var@@temp@spread=\wd\@outputbox + \get@@footnoterule@@box + \xdef\main@box@height{\the\ht\@leftcolumn}% + \xdef\main@box@skip{\z@}% + \global\flushend@@lastskip@c\z@ + \setbox\flushend@@varbox@a\vbox{\unvcopy\@leftcolumn}% + \analyze@leftcolumn@box\flushend@@varbox@a + \setbox\flushend@@varbox@a\vbox{\unvcopy\@outputbox}% + \analyze@rightcolumn@box\flushend@@varbox@a + \ifdim\main@box@skip>\z@ + %% footnote in left column + \set@split@topskip@to\z@ + \setbox\flushend@@varbox@a\vsplit\@leftcolumn to\main@box@height + \else + %% no footnote in left column + \setbox\flushend@@varbox@a\box\@leftcolumn + \fi + \ifdim\var@@temp@spread>\z@ + %% rightcolumn non empty + \combine@columns@for@balance + \else + %% rightcolumn empty + \setbox\@tempboxa\vbox{% + \unvbox\flushend@@varbox@a + \remove@lastbox@at@balancing + \the\atColsEnd + }% + \fi + \ifdim\main@box@skip>\z@ + %% footnote in left column + \set@outputbox@with@footnote + \else + %% no footnote in left column + \set@outputbox@without@footnote + \fi + \setbox\@outputbox \vbox {% + \hb@xt@\textwidth {% + \hb@xt@\columnwidth {% + \fmt@box@adds{\box\@leftcolumn}\hss}% + \hfil + \vrule \@width\columnseprule + \hfil + \hb@xt@\columnwidth {% + \fmt@box@adds{\box\@outputbox}\hss}% + }% + }% + \global\let\@outputdblcol\saved@orig@@outputdblcol + \global\atColsEnd{}% + \ifvoid\hold@viper + \else + \setbox\@outputbox\vbox{\box\hold@viper\box\@outputbox}% + \fi + \@combinedblfloats + \@outputpage + \begingroup + \@dblfloatplacement + \@startdblcolumn + \@whilesw\if@fcolmade\fi + {\@outputpage\@startdblcolumn}% + \ifvoid\@viper + \else + \global\setbox\@viper\vbox{% + \vskip-\stripsep + \unvbox\@viper + }% + \csname @viperoutput\endcsname + \fi + \endgroup + \fi + } \def\last@outputdblcol@ancient{% \if@firstcolumn \global\@firstcolumnfalse @@ -586,47 +687,46 @@ \else \global\@firstcolumntrue \@tempdima\ht\@leftcolumn - \splittopskip\topskip\splitmaxdepth\maxdepth + \set@split@topskip@to\topskip \if@auto@baselineskip \setbox\@tempboxa\vbox{% \unvcopy\@leftcolumn - \global\flushend@@lastskip@c\lastskip - \global\flushend@@lastskip@b\lastskip + \global\flushend@@lastskip@c\lastskip + \global\flushend@@lastskip@b\lastskip \loop - \global\flushend@@lastskip@a\flushend@@lastskip@b - \unskip\unpenalty - \global\flushend@@lastskip@b\lastskip - \global\advance\flushend@@lastskip@c by\lastskip - \ifdim\flushend@@lastskip@b=-\flushend@@lastskip@a - \global\advance\flushend@@lastskip@c by-\lastskip + \global\flushend@@lastskip@a\flushend@@lastskip@b + \unskip\unpenalty + \global\flushend@@lastskip@b\lastskip + \global\advance\flushend@@lastskip@c by\lastskip + \ifdim\flushend@@lastskip@b=-\flushend@@lastskip@a + \global\advance\flushend@@lastskip@c by-\lastskip \else \repeat - \ifdim\flushend@@lastskip@b=-\flushend@@lastskip@a - \ifdim\flushend@@lastskip@b=\z@ - \setbox\flushend@@varbox@a\lastbox - \global\advance\flushend@@lastskip@c by\ht\flushend@@varbox@a - \global\advance\flushend@@lastskip@c by\lastskip - \unskip\unpenalty - \setbox\flushend@@varbox@a\lastbox - \global\advance\flushend@@lastskip@c by\dp\flushend@@varbox@a - \else - \global\flushend@@lastskip@c\lastskip - \global\advance\flushend@@lastskip@c by\topskip - \fi + \ifdim\flushend@@lastskip@b=-\flushend@@lastskip@a + \ifdim\flushend@@lastskip@b=\z@ + \setbox\flushend@@varbox@a\lastbox + \global\advance\flushend@@lastskip@c by\ht\flushend@@varbox@a + \global\advance\flushend@@lastskip@c by\lastskip + \unskip\unpenalty + \setbox\flushend@@varbox@a\lastbox + \global\advance\flushend@@lastskip@c by\dp\flushend@@varbox@a + \else + \global\flushend@@lastskip@c\lastskip + \global\advance\flushend@@lastskip@c by\topskip + \fi \fi \global\advance\flushend@@lastskip@c by-\topskip - }% + }% \setbox\@tempboxa\vbox{% \unvbox\@leftcolumn \unskip\unpenalty \vskip\flushend@@lastskip@c \hrule\@height\flushend@@page@rule width\columnwidth \the\atColsBreak - \unvbox\@outputbox + \unvbox\@outputbox \remove@lastbox@at@balancing - %%\unskip \the\atColsEnd - }% + }% \else \setbox\@tempboxa\vbox{% \unvbox\@leftcolumn @@ -636,8 +736,6 @@ \the\atColsBreak \unvbox\@outputbox \remove@lastbox@at@balancing - %%\setbox\z@\lastbox - %%\unskip \the\atColsEnd }% \fi @@ -650,15 +748,23 @@ \vsplit\flushend@@tempbox@a to\@tempdimb }% \wlog{Extra height:\the\ht\flushend@@tempbox@a\space when \the\@tempdimb}% - \ifvoid\flushend@@tempbox@a \else \advance\@tempdimb 1\p@ \repeat + \ifvoid\flushend@@tempbox@a + \else + \advance\@tempdimb 1\p@ + \repeat \loop \setbox\flushend@@tempbox@a\copy\@tempboxa - \setbox\flushend@@tempbox@c\vbox to\@tempdimb{\vsplit\flushend@@tempbox@a to\@tempdimb\vss}% + \setbox\flushend@@tempbox@c\vbox to\@tempdimb{% + \vsplit\flushend@@tempbox@a to\@tempdimb + \vss + }% \wlog{(2)Left:\the\ht\flushend@@tempbox@c\space - Right:\the\ht\flushend@@tempbox@a\space - Output:\the\@tempdimb - }% - \ifdim\ht\flushend@@tempbox@c<\ht\flushend@@tempbox@a \@tempdimb=\the\ht\flushend@@tempbox@a \repeat + Right:\the\ht\flushend@@tempbox@a\space + Output:\the\@tempdimb + }% + \ifdim\ht\flushend@@tempbox@c<\ht\flushend@@tempbox@a + \@tempdimb=\the\ht\flushend@@tempbox@a + \repeat \wlog{- LAST -^^JExtra skip: \the\z@ ^^JLeft:\the\ht\flushend@@tempbox@c ^^JRight:\the\ht\flushend@@tempbox@a @@ -669,7 +775,12 @@ \vss }% \setbox\@leftcolumn\vbox to\@tempdima{% - \fmt@vbox@adds[\columnwidth]{\vbox to\@tempdimb{\unvbox\flushend@@tempbox@c}}% + \fmt@vbox@adds[\columnwidth]{% + \vbox to\@tempdimb{% + \unvbox + \flushend@@tempbox@c + }% + }% \hrule\@height\flushend@@page@rule \vss }% @@ -677,11 +788,10 @@ \fmt@vbox@adds[\columnwidth]{% \vbox to\@tempdimb{% \unvbox\@tempboxa - %\vfilneg \vskip\z@ }% }% - \hrule\@height\flushend@@page@rule + \hrule\@height\flushend@@page@rule \vss }% \setbox\@outputbox\vbox{% diff --git a/Master/texmf-dist/tex/latex/sttools/stfloats.sty b/Master/texmf-dist/tex/latex/sttools/stfloats.sty index 585ee0d61db..efcb7c4ea37 100644 --- a/Master/texmf-dist/tex/latex/sttools/stfloats.sty +++ b/Master/texmf-dist/tex/latex/sttools/stfloats.sty @@ -6,7 +6,7 @@ %% %% stfloats.dtx (with options: `package') %% -%% Copyright (C) 1997-2016 by Sigitas Tolu\v{s}is <sigitas@vtex.lt> +%% Copyright (C) 1997-2017 by Sigitas Tolu\v{s}is <sigitas@vtex.lt> %% VTeX UAB, Mokslininku 2a, Vilnius, Lithuania %% -------------------------------------------------------------------------- %% This work may be distributed and/or modified under the @@ -21,7 +21,7 @@ %% \NeedsTeXFormat{LaTeX2e}[1999/12/01] \ProvidesPackage{stfloats} - [2016/06/28 v3.2 Improve float mechanism and baselineskip settings] + [2017/03/27 v3.3 Improve float mechanism and baselineskip settings] \gdef\@dblbotlist{} \newcount\@dblbotnum \newcount\c@dblbotnumber @@ -40,8 +40,8 @@ \def\f@depth{1sp}% } \newif\if@before@latex@release -\def\tmp@reserved@a#1/#2/#3\@nil{% - \ifnum #1<2015\relax +\def\tmp@reserved@a#1#2#3#4#5\@nil{% + \ifnum #1#2#3#4<2015\relax \@before@latex@releasetrue \else \@before@latex@releasefalse |