summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/sttools
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2014-03-05 23:17:30 +0000
committerKarl Berry <karl@freefriends.org>2014-03-05 23:17:30 +0000
commit5d7310e773402ac7823bf14a692676781b062ab8 (patch)
treeae3dc241e4c89814c979db993a0e31012fda857d /Master/texmf-dist/tex/latex/sttools
parentee3cc15a5b3f684ee33aabd314448c5343ac8df6 (diff)
sttools (4mar14)
git-svn-id: svn://tug.org/texlive/trunk@33098 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/sttools')
-rw-r--r--Master/texmf-dist/tex/latex/sttools/boundbox.sty117
-rw-r--r--Master/texmf-dist/tex/latex/sttools/flushend.sty626
2 files changed, 508 insertions, 235 deletions
diff --git a/Master/texmf-dist/tex/latex/sttools/boundbox.sty b/Master/texmf-dist/tex/latex/sttools/boundbox.sty
deleted file mode 100644
index 1799613f736..00000000000
--- a/Master/texmf-dist/tex/latex/sttools/boundbox.sty
+++ /dev/null
@@ -1,117 +0,0 @@
-%%
-%% This is file `boundbox.sty',
-%% generated with the docstrip utility.
-%%
-%% The original source files were:
-%%
-%% boundbox.dtx (with options: `package')
-%%
-%% Copyright (C) 1997-2012 by Sigitas Tolu\v{s}is <sigitas@vtex.lt>
-%% VTeX Ltd., Akademijos 4, Vilnius, Lithuania
-%% http://www.vtex.lt/tex/download/macros/
-%% --------------------------------------------------------------------------
-%% This work may be distributed and/or modified under the
-%% conditions of the LaTeX Project Public License, either version 1.3
-%% of this license or (at your option) any later version.
-%% The latest version of this license is in
-%% http://www.latex-project.org/lppl.txt
-%% and version 1.3 or later is part of all distributions of LaTeX
-%% version 2005/12/01 or later.
-%%
-%% PURPOSE: Calculate TeX bounding box in rounded points (LaTeX2e)
-%% from left top corner of the paper
-%%
-\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{boundbox}
- [2012/05/29 v1.3 Calculate TeX bounding box in points]
-%%
-\newif\if@withfoot \@withfoottrue
-\newif\if@output@bbox@special \@output@bbox@specialtrue
-\DeclareOption{nofoot}{\global\@withfootfalse}
-\DeclareOption{nospec}{\global\@output@bbox@specialfalse}
-\ProcessOptions
-%%
-\def\special@bbox@odd@prefix{mt:TeXBBox:odd}
-\def\special@bbox@even@prefix{mt:TeXBBox:even}
-%%
-\def\roundtexdim#1#{\round@tex@dim{#1}}
-\def\round@tex@dim#1#2#3{%
- \expandafter\expandafter\csname get@#1@pt@data\endcsname\the#2\to#3\relax
- }
-\def\get@floor@pt@data#1.#2#3\to#4{%
- \bgroup
- \@tempcnta=#1\relax
- \xdef#4{\the\@tempcnta}%
- \egroup
- }
-\def\get@round@pt@data#1.#2#3\to#4{%
- \bgroup
- \@tempcnta=#1\relax
- \ifnum#2>4\relax
- \advance\@tempcnta by\@ne
- \fi
- \xdef#4{\the\@tempcnta}%
- \egroup
- }
-\let\get@@pt@data\get@round@pt@data
-\def\get@ceil@pt@data#1.#2#3\to#4{%
- \bgroup
- \@tempcnta=#1\relax
- \afterassignment\@gobbletwo
- \@tempcntb=#2#3\relax
- \ifnum\@tempcntb>0\relax
- \advance\@tempcnta by\@ne
- \fi
- \xdef#4{\the\@tempcnta}%
- \egroup
- }
-\def\@calculate@bbox{%
- \bgroup
- \@tempdima=1in\relax
- \advance\@tempdima by\hoffset
- \advance\@tempdima by\oddsidemargin
- \roundtexdim floor{\@tempdima}\bbox@odd@left@pt
- \advance\@tempdima\textwidth
- \roundtexdim ceil{\@tempdima}\bbox@odd@right@pt
- \@tempdima=1in\relax
- \advance\@tempdima by\hoffset
- \advance\@tempdima by\evensidemargin
- \roundtexdim floor{\@tempdima}\bbox@even@left@pt
- \advance\@tempdima\textwidth
- \roundtexdim ceil{\@tempdima}\bbox@even@right@pt
- \@tempdima=1in\relax
- \advance\@tempdima by\voffset
- \advance\@tempdima by\topmargin
- \roundtexdim floor{\@tempdima}\bbox@odd@top@pt
- \global\let\bbox@even@top@pt\bbox@odd@top@pt
- \advance\@tempdima by\headheight
- \advance\@tempdima by\headsep
- \advance\@tempdima\textheight
- \if@withfoot
- \advance\@tempdima\footskip
- \fi
- \roundtexdim ceil{\@tempdima}\bbox@odd@bottom@pt
- \global\let\bbox@even@bottom@pt\bbox@odd@bottom@pt
- \egroup
- }
-%%
-\AtBeginDocument{%
- \@calculate@bbox
- \if@output@bbox@special
- \special{\special@bbox@odd@prefix\space
- left=\csname bbox@odd@left@pt\endcsname\space
- top=\csname bbox@odd@top@pt\endcsname\space
- right=\csname bbox@odd@right@pt\endcsname\space
- bottom=\csname bbox@odd@bottom@pt\endcsname
- }%
- \special{\special@bbox@even@prefix\space
- left=\csname bbox@even@left@pt\endcsname\space
- top=\csname bbox@even@top@pt\endcsname\space
- right=\csname bbox@even@right@pt\endcsname\space
- bottom=\csname bbox@even@bottom@pt\endcsname
- }%
- \fi
- }
-\endinput
-%%
-%% End of file `boundbox.sty'.
diff --git a/Master/texmf-dist/tex/latex/sttools/flushend.sty b/Master/texmf-dist/tex/latex/sttools/flushend.sty
index 486986bd6e2..10600a64bdc 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-2012 by Sigitas Tolu\v{s}is <sigitas@vtex.lt>
+%% Copyright (C) 1997-2014 by Sigitas Tolu\v{s}is <sigitas@vtex.lt>
%% VTeX Ltd., Akademijos 4, Vilnius, Lithuania
%% http://www.vtex.lt/tex/download/macros/
%% --------------------------------------------------------------------------
@@ -22,137 +22,527 @@
%%
\NeedsTeXFormat{LaTeX2e}[1999/12/01]
\ProvidesPackage{flushend}
- [2012/05/29 v1.1 Balancing columns at last page]
+ [2014/03/03 v2.0 Balancing columns in twocolumn mode]
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{flushend}[1997/10/01]
-\newbox\@aaa
-\newbox\@ccc
+\ProvidesPackage{flushend}[2014/03/03 v2.0 Balancing columns in twocolumn mode]
+\newif\if@auto@baselineskip \@auto@baselineskiptrue
+\newif\if@balance@debug \@balance@debugtrue
+\DeclareOption{autobase}{\global\@auto@baselineskiptrue}
+\DeclareOption{noauto}{\global\@auto@baselineskipfalse}
+\DeclareOption{debug}{\global\@balance@debugtrue}
+\ProcessOptions
+\newskip\flushend@@lastskip@a
+\newskip\flushend@@lastskip@b
+\newskip\flushend@@lastskip@c
+\newcount\flushend@@penalty@a
+\newdimen\flushend@@lastkern@a
+\newdimen\var@@temp@spread
+\newdimen\var@@temp@a
+\newdimen\flushend@@page@rule \flushend@@page@rule\z@
+\def\showcolsendrule{\global\flushend@@page@rule=.4pt}
+\gdef\top@@floatbox@min{4\topskip}
+\newbox\flushend@@varbox@a
+\newbox\flushend@@varbox@c
+\newbox\flushend@@tempbox@a
+\newbox\flushend@@tempbox@c
\@ifundefined{@viper}{\newbox\@viper}{}
\@ifundefined{hold@viper}{\newbox\hold@viper}{}
\newtoks\atColsBreak \atColsBreak={}
-\newdimen\@extra@skip \@extra@skip\z@
-\newdimen\@nd@page@rule \@nd@page@rule\z@
+\newtoks\atColsEnd \atColsEnd={}
+\@ifundefined{fmt@box@adds}{\def\fmt@box@adds#1{#1}}{}
+\@ifundefined{fmt@vbox@adds}{\def\fmt@vbox@adds[#1]#2{#2}}{}
+\gdef\remove@lastbox@at@balancing{%
+ \unskip\unkern\unpenalty
+ \unskip\unkern\unpenalty
+ \unskip\unkern\unpenalty
+ {\setbox\z@\lastbox}%
+ \unskip\unkern\unpenalty
+ \unskip\unkern\unpenalty
+ \unskip\unkern\unpenalty
+ }
+\def\show@@box#1{%
+ \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
+ }%
+ }
+\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
+ }
+\def\get@@footnoterule@@box{%
+ \splittopskip\z@ \vfuzz\maxdimen \vbadness\maxdimen
+ \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
+ \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}}%
+ }
+\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
+ \fi
+ \fi
+ \fi
+ }
+\def\check@@baselineskip@@skip#1#2#3{%
+ \ifdim#1>\z@
+ \ifdim#2>\z@
+ \global#3=\the#1%
+ \gdef\check@@baselineskip@@skip##1##2##3{}%
+ \fi
+ \fi
+ }
+\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
+ \loop
+ \flushend@@lastskip@b\ht\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 -\ht\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 -\ht\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@
+ \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{%
\if@firstcolumn
- \global \@firstcolumnfalse
- \global \setbox\@leftcolumn \box\@outputbox
+ \global \@firstcolumnfalse
+ \global \setbox\@leftcolumn \box\@outputbox
\else
- \global \@firstcolumntrue
- \if@lastpage
+ \global \@firstcolumntrue
\@tempdima\ht\@leftcolumn
- \splittopskip\topskip\splitmaxdepth\maxdepth
- \setbox\@tempboxa\vbox{%
- \unvbox\@leftcolumn\setbox0\lastbox\unskip
- \the\atColsBreak
- \unvbox\@outputbox\setbox0\lastbox\unskip
- }%
- \@tempdimb .5\ht\@tempboxa
- \loop
- \setbox\@aaa\copy\@tempboxa
- \setbox\@ccc\vbox to\@tempdimb{%
- \vsplit\@aaa to\@tempdimb
- \vss
- \vsplit\@aaa to\@tempdimb
- }%
- \wlog{Extra height:\the\ht\@aaa\space when \the\@tempdimb}%
- \ifvoid\@aaa
+ \splittopskip\topskip \splitmaxdepth\maxdepth
+ \var@@temp@spread=\wd\@outputbox
+ \if@auto@baselineskip
+ %% Trying guess baselineskip value on column break
+ \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@
+ \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>\topskip
+ \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
- \advance\@tempdimb 1\p@
- \repeat
- \loop
- \setbox\@aaa\copy\@tempboxa
- \setbox\@ccc\vbox to\@tempdimb{%
- \vsplit\@aaa to\@tempdimb
- \vss
- }%
- \wlog{(2)Left:\the\ht\@ccc\space
- Right:\the\ht\@aaa\space
- Output:\the\@tempdimb
- }%
- \ifdim \ht\@ccc<\ht\@aaa
- \@tempdimb \the\ht\@aaa
- \repeat
- \wlog{- LAST -^^JExtra skip:\the\@extra@skip
- ^^JLeft:\the\ht\@ccc
- ^^JRight:\the\ht\@aaa
- ^^JOutput:\the\@tempdimb
- }%
- \setbox\@ccc\vbox to\@tempdimb{%
- \vsplit\@tempboxa to\@tempdimb
- \vss
- }%
- \setbox\@leftcolumn\vbox to\@tempdima{%
- \vbox to\@tempdimb{\unvbox\@ccc}%
- \hrule\@height\@nd@page@rule
- \vss
- }%
- \setbox\@outputbox\vbox to\@tempdima{%
- \vbox to\@tempdimb{%
- \unvbox\@tempboxa
- \vfilneg
- \vskip\@extra@skip
- }%
- \hrule\@height\@nd@page@rule
- \vss
- }%
- \setbox\@outputbox \vbox {%
- \hb@xt@\textwidth {%
- \hb@xt@\columnwidth {\box\@leftcolumn \hss}%
- \hfil
- \vrule \@width\columnseprule
- \hfil
- \hb@xt@\columnwidth {\box\@outputbox \hss}%
- }%
- }%
- \else
+ %% Ignore baselineskip value on column break
+ \ifdim\var@@temp@spread>\z@
+ \setbox\@outputbox\vbox{\strut
+ \vskip\z@
+ \unvbox\@outputbox
+ }%
+ \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
+ +\the\dp\flushend@@tempbox@a=\the\ht\flushend@@varbox@a
+ +\the\dp\flushend@@varbox@a::\the\@tempdimb
+ ^^JLeft 0: \the\ht\flushend@@tempbox@c
+ +\the\dp\flushend@@tempbox@c::\the\@tempdimb
+ ^^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
+ }%
+ \else
+ \setbox\flushend@@varbox@c\vbox{\unvbox\flushend@@varbox@a}%
+ \fi
+ \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
+ +\the\dp\flushend@@tempbox@a=\the\ht\flushend@@varbox@a
+ +\the\dp\flushend@@varbox@a::\the\@tempdimb
+ ^^JLeft 0: \the\ht\flushend@@tempbox@c
+ +\the\dp\flushend@@tempbox@c::\the\@tempdimb
+ ^^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
+ \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@a}%
+ \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{%
+ \vbox spread\var@@temp@spread{%
+ \unvbox\@outputbox
+ \vskip\top@@floatbox@skip
+ \unvbox\@tempboxa
+ }%
+ \vss
+ }%
+ \else
+ \setbox\@outputbox\vbox to\@tempdima{%
+ \vbox spread\var@@temp@spread{\unvbox\@tempboxa}%
+ \vss
+ }%
+ \fi
+ \fi
\setbox\@outputbox \vbox {%
- \hb@xt@\textwidth {%
- \hb@xt@\columnwidth {\box\@leftcolumn \hss}%
- \hfil
- \vrule \@width\columnseprule
- \hfil
- \hb@xt@\columnwidth {\box\@outputbox \hss}%
- }%
- }%
- \fi
- \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
+ \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
- \global\setbox\@viper\vbox{%
- \vskip-\stripsep
- \unvbox\@viper
- }%
- \@viperoutput
+ \setbox\@outputbox\vbox{\box\hold@viper\box\@outputbox}%
\fi
- \endgroup
+ \@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
-}
-\let\prev@enddocument\enddocument
-\newif\if@lastpage \@lastpagefalse
-\def\enddocument{%
- \global\@lastpagetrue
- \let\@outputdblcol\last@outputdblcol
- \prev@enddocument
- }
-\def\raggedend{\global\let\enddocument\prev@enddocument}
-\def\flushend{%
- \gdef\enddocument{%
- \global\@lastpagetrue
- \let\@outputdblcol\last@outputdblcol
- \prev@enddocument
- }%
}
-\def\showcolsendrule{\global\@nd@page@rule=.4pt}
+\usepackage{etoolbox}
+\AtBeginDocument{%
+ \global\let\saved@orig@@outputdblcol\@outputdblcol
+ \global\let\balanced@@outputdblcol\last@outputdblcol
+ \preto\enddocument{\let\@outputdblcol\balanced@@outputdblcol}%
+ \appto\footnoterule{\vskip\z@}%
+ }
+\def\flushcolsend{\global\let\@outputdblcol\last@outputdblcol}
+\def\raggedcolsend{\global\let\@outputdblcol\saved@orig@@outputdblcol}
+\def\flushend{\global\let\balanced@@outputdblcol\last@outputdblcol}
+\def\raggedend{\global\let\balanced@@outputdblcol\saved@orig@@outputdblcol}
+\if@balance@debug
+ \showcolsendrule
+\fi
\endinput
%%
%% End of file `flushend.sty'.