summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/sttools/cuted.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/sttools/cuted.dtx')
-rw-r--r--macros/latex/contrib/sttools/cuted.dtx1213
1 files changed, 652 insertions, 561 deletions
diff --git a/macros/latex/contrib/sttools/cuted.dtx b/macros/latex/contrib/sttools/cuted.dtx
index 453ba5d051..3f927c1046 100644
--- a/macros/latex/contrib/sttools/cuted.dtx
+++ b/macros/latex/contrib/sttools/cuted.dtx
@@ -1,6 +1,6 @@
-% \iffalse meta-comment
+% \iffalse meta-comment/*% \end{macrocode}*/
%
-% Copyright (C) 2012 by Sigitas Tolu\v{s}is <sigitas@vtex.lt>
+% Copyright (C) 2021 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,13 +20,35 @@
% \fi
%
% \iffalse
+%<*internal>
+\begingroup
+%</internal>
+%<*batchfile>
+\input docstrip.tex
+\keepsilent\askforoverwritefalse
+\preamble
+%%
+%% This is file `cuted.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% cuted.dtx (with options: `package')
+%%
+\endpreamble
+\generate{\file{cuted.sty}{\from{cuted.dtx}{package}}}
+%</batchfile>
+%<batchfile>\endbatchfile
+%<*internal>
+\generate{\file{cuted.ins}{\from{cuted.dtx}{batchfile}}}
+\endgroup
+%</internal>
%<*driver>
\ProvidesFile{cuted.dtx}
%</driver>
%<*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/
+%% Copyright (C) 1997-2021 by Sigitas Tolu\v{s}is <sigitas@vtex.lt>
+%% UAB VTeX, Mokslininkų 2A, LT-08412 Vilnius, Lithuania
%% --------------------------------------------------------------------------
%% This work may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either version 1.3
@@ -42,15 +64,16 @@
%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
%<package>\ProvidesPackage{cuted}
%<*package>
- [2012/10/04 v1.5 Mixing onecolumn and twocolumn modes]
+ [2021/10/04 v2.0 Mixing onecolumn and twocolumn modes]
%</package>
%
%<*driver>
\documentclass{ltxdoc}
-\usepackage{cuted}[2012/10/04]
+\usepackage{cuted}[2021/10/04]
\EnableCrossrefs
\CodelineIndex
\RecordChanges
+\OnlyDescription
\begin{document}
\DocInput{cuted.dtx}
\PrintChanges
@@ -89,6 +112,7 @@
% \changes{}{2000/01/18}{pakeistas \cs{@outputdblcol}}
% \changes{}{2002/06/11}{added options unskipbreak and autobase}
% \changes{v1.4}{2012/05/29}{Converted to DTX file}
+% \changes{v2.0}{2021/10/04}{rewrite with new balance algorithm and options}
%
% \DoNotIndex{\newcommand,\newenvironment}
%
@@ -102,51 +126,82 @@
%
% \section{Introduction}
%
-% It is denoted to place some material in full-width at any place
-% on double-column page (|\twocolumn| mode). The part of material
-% can be placed on the next page. Existing text is placed
-% under inserted material in two columns (it is reformatted).
+% It is denoted to place some material in full-width at any place
+% on double-column page (|\twocolumn| mode). The part of material
+% can be placed on the next page. Existing text is placed
+% under inserted material in two columns (it is reformatted).
%
-% \section{Usage}
+% To compare with the previous version the package is rewritten
+% with new cropped balancing algorithm version and new options
+% from |flushend.sty, v4.0|.
%
+% \section{Usage}
%
% \DescribeMacro{strip}
% Provides new environment:
+% \begin{verbatim}
+% \begin{strip}
+% <wide onecolumn material>
+% \end{strip}
+% \end{verbatim}
+% Puts |\vbox|\marg{wide onecolumn material} in full-width on
+% double-column page.
%
-% \begin{verbatim}
-% \begin{strip}
-% <wide onecolumn material>
-% \end{strip}
-% \end{verbatim}
-%
-% Puts |\vbox|\marg{wide onecolumn material} in full-width on
-% double-column page.
+% \medskip
+% It can be problems with floats and footnotes. In the case of
+% problems with footnotes it is possible to correct the situation
+% using commands |\footnotemark| and |\footnotetext|.
%
-% \medskip
-% Adds |\stripsep| glue before and after
-% (by default: |15pt plus2pt minus 2pt|).
+% \medskip
+% \DescribeMacro{preCutedStrip}\marg{tokens}
+% \\\noindent Before the strip |\stripsep| glue and |\the\preCutedStrip| token list \meta{tokens} are added.
%
-% \medskip
-% It can be problems with floats and footnotes. In the case of
-% problems with footnotes it is possible to correct the situation
-% using commands |\footnotemark| and |\footnotetext|.
+% \medskip
+% \DescribeMacro{postCutedStrip}\marg{tokens}
+% \\\noindent After the strip |\the\postCutedStrip| token list \meta{tokens} and |\stripsep| glue are added.
+%
+% \medskip
+% \DescribeMacro{stripsep}
+% By default: |\stripsep=15pt plus2pt minus 2pt|.
%
% \medskip
% \DescribeMacro{\oldcolsbreak}
% \marg{adds}
-%
-% Adds \meta{adds} in place of original column break if strip is placed
-% on the right column.
+% \\\noindent Adds \meta{adds} in place of original column break if strip is placed
+% on the right column. Seems, it should be unnecessary as current version
+% uses |pagediscards| dimensions to restore original vertical skip.
%
% \subsection{Package options}
%
-% \DescribeMacro{unskipbreak}
-% \indent It is used to change |\hbox{}| to |\unskip| after leftcolumn break on striped page.
+% \begin{description}
+%
+% \item[\meta{|spread|}]
+% \texttt{[default]} It enables columns spreading trying to balance.
+%
+% \item[\meta{|nospread|}]
+% It disables columns spreading trying to balance.
+%
+% \item[\meta{|shrink|}]
+% \texttt{[default]} It enables columns shrinking trying to balance.
+%
+% \item[\meta{|noshrink|}]
+% It disables columns shrinking trying to balance.
%
% \medskip
-% \DescribeMacro{autobase}
-% It is used to guess |\baselineskip| value on original columns break.
+% \textit{Similiar options exist for single column separatly}:
+%
+% |lspread|, |nolspread|, |lshrink|, |nolshrink| -- for left column
%
+% |rspread|, |norspread|, |rshrink|, |norshrink| -- for right column
+%
+% \item[\meta{|debug|}]
+% Adds rules to the bottom of columns (just for debugging)
+% and some additional log info.
+%
+% \item[\meta{|nodebug|}]
+% \texttt{[default]} Skips putting debuging lines and additional info.
+%
+% \end{description}
%
% \StopEventually{}
%
@@ -156,479 +211,529 @@
%<*package>
% \fi
%
-%
-% \begin{macro}{unskipbreak}
+%/*% \begin{macrocode}*/
% \begin{macrocode}
-\def\on@stripcols@break{\hbox{}}
-\DeclareOption{unskipbreak}{\gdef\on@stripcols@break{\unskip}}
-% \end{macrocode}
-% \end{macro}
%
-% \begin{macro}{autobase}
-% \begin{macrocode}
-\newif\if@flushend@auto@baselineskip
-\DeclareOption{autobase}{\global\@flushend@auto@baselineskiptrue}
+
+\newif\if@right@column@spread \@right@column@spreadtrue
+\newif\if@right@column@shrink \@right@column@shrinktrue
+\newif\if@left@column@spread \@left@column@spreadtrue
+\newif\if@left@column@shrink \@left@column@shrinktrue
+\newif\ifcuted@@debug \cuted@@debugfalse
+
+\DeclareOption{spread}{%
+ \global\@left@column@spreadtrue
+ \global\@right@column@spreadtrue
+ }
+\DeclareOption{nospread}{%
+ \global\@left@column@spreadfalse
+ \global\@right@column@spreadfalse
+ }
+\DeclareOption{lspread}{\global\@left@column@spreadtrue}
+\DeclareOption{nolspread}{\global\@left@column@spreadfalse}
+\DeclareOption{rspread}{\global\@right@column@spreadtrue}
+\DeclareOption{norspread}{\global\@right@column@spreadfalse}
+
+\DeclareOption{shrink}{%
+ \global\@left@column@shrinktrue
+ \global\@right@column@shrinktrue
+ }
+\DeclareOption{noshrink}{%
+ \global\@left@column@shrinkfalse
+ \global\@right@column@shrinkfalse
+ }
+\DeclareOption{lshrink}{\global\@left@column@shrinktrue}
+\DeclareOption{nolshrink}{\global\@left@column@shrinkfalse}
+\DeclareOption{rshrink}{\global\@right@column@shrinktrue}
+\DeclareOption{norshrink}{\global\@right@column@shrinkfalse}
+
+\DeclareOption{debug}{\global\cuted@@debugtrue}
+\DeclareOption{nodebug}{\global\cutted@@debugfalse}
+
\ProcessOptions
+\newif\if@lastviper \@lastviperfalse
\newtoks\At@ViperColsBreak \At@ViperColsBreak{}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\oldcolsbreak}
-% \begin{macrocode}
+\newtoks\preCutedStrip \preCutedStrip{}
+\newtoks\postCutedStrip \postCutedStrip{}
+\newbox\cuted@@tempbox@a
+\newbox\cuted@@tempbox@c
+\newbox\cuted@@tempbox@var
+\@ifundefined{hold@viper}
+ {\newbox\hold@viper}{}
+\@ifundefined{@viper}
+ {\newbox\@viper}{}
+\newbox\cuted@@varbox@a
+\newbox\cuted@@varbox@c
+\newdimen\cuted@@tempdim@spread
+\newdimen\cuted@@tempdim@a
+\newdimen\cuted@@tempdim@b
+\newdimen\ht@hold@viper
+\newdimen\ht@viper
+\newdimen\var@@pagediscards@ht \var@@pagediscards@ht=\z@
+\@ifundefined{stripsep}
+ {\newskip\stripsep \stripsep 15\p@ plus 2\p@ minus 2\p@}{}
+\newcount\viper@penalty
+\mathchardef\@Mv=10005
+\def\cuted@@column@badness{101}
+\def\cuted@@page@rule{\z@}
+\savingvdiscards=\@ne
+
+\def\cuted@@wlog@debug#1{\ifcuted@@debug \wlog{#1}\fi}
+
+\def\set@split@topskip@to#1{%
+ \splittopskip=#1\relax
+ \vfuzz=\maxdimen
+ \vbadness=\maxdimen
+ }
+
\def\oldcolsbreak#1{\global\At@ViperColsBreak{#1}}
-\def\viper@top@hook{\splittopskip0pt plus 2pt}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-\newbox\v@aaa
-\newbox\v@ccc
-\@ifundefined{lastskip@a}{\newskip\lastskip@a}{}
-\@ifundefined{lastskip@b}{\newskip\lastskip@b}{}
-\@ifundefined{lastskip@d}{\newskip\lastskip@d}{}
-\@ifundefined{lastbox@a}{\newbox\lastbox@a}{}
-\@ifundefined{stripsep}{\newskip\stripsep \stripsep 15pt plus 2pt minus 2pt}{}
+\def\on@stripcols@break{%
+ %%
+ %% adds original vertical page break skip
+ %%
+ \begingroup
+ \setbox\cuted@@tempbox@var\vbox{\pagediscards}%
+ \ifvoid\cuted@@tempbox@var
+ \else
+ \global\var@@pagediscards@ht=\ht\cuted@@tempbox@var
+ \global\advance\var@@pagediscards@ht by\dp\cuted@@tempbox@var
+ \fi
+ \endgroup
+ \ifdim\var@@pagediscards@ht=\z@
+ \else
+ \vskip\var@@pagediscards@ht
+ \fi
+ }
-\@ifundefined{@viper}{\newbox\@viper}{}
-\newif\if@lastviper \@lastviperfalse
-% \end{macrocode}
-%
-%
-% \begin{macro}{\@outputdblcol}
-% \begin{macrocode}
\def\@outputdblcol{%
- \if@firstcolumn
- \global \@firstcolumnfalse
- \global \setbox\@leftcolumn \box\@outputbox
- \else
- \global \@firstcolumntrue
- \setbox\@outputbox \vbox {%
- \hb@xt@\textwidth {%
- \hb@xt@\columnwidth {%
- \box\@leftcolumn \hss}%
- \hfil
- \vrule \@width\columnseprule
- \hfil
- \hb@xt@\columnwidth {%
- \box\@outputbox \hss}%
- }%
- }%
- \ifvoid\hold@viper
+ \if@firstcolumn
+ \global\@firstcolumnfalse
+ \global\setbox\@leftcolumn\copy\@outputbox
+ \splitmaxdepth\maxdimen
+ \vbadness\maxdimen
+ \setbox\@outputbox\vbox{\unvbox\@outputbox\unskip}%
+ \setbox\@outputbox\vsplit\@outputbox to\maxdimen
+ \toks@\expandafter{\topmark}%
+ \xdef\@firstcoltopmark{\the\toks@}%
+ \toks@\expandafter{\splitfirstmark}%
+ \xdef\@firstcolfirstmark{\the\toks@}%
+ \ifx\@firstcolfirstmark\@empty
+ \global\let\@setmarks\relax
+ \else
+ \gdef\@setmarks{%
+ \let\firstmark\@firstcolfirstmark
+ \let\topmark\@firstcoltopmark
+ }%
+ \fi
\else
- \setbox\@outputbox \vbox to\textheight{%
- \box\hold@viper
- \box\@outputbox
- \vss
- }%
+ \global\@firstcolumntrue
+ \setbox\@outputbox\vbox{%
+ \hb@xt@\textwidth{%
+ \hb@xt@\columnwidth{\box\@leftcolumn \hss}%
+ \hfil
+ {\normalcolor\vrule \@width\columnseprule}%
+ \hfil
+ \hb@xt@\columnwidth{\box\@outputbox \hss}%
+ }%
+ }%
+ \ifvoid\hold@viper
+ \else
+ \setbox\@outputbox\vbox to\textheight{%
+ \box\hold@viper
+ \box\@outputbox
+ \vss
+ }%
+ \fi
+ \@combinedblfloats
+ \@setmarks
+ \@outputpage
+ \begingroup
+ \@dblfloatplacement
+ \@startdblcolumn
+ \@whilesw\if@fcolmade \fi
+ {\@outputpage \@startdblcolumn}%
+ \ifvoid\@viper
+ \else
+ \global\setbox\@viper\vbox{%
+ \vskip-\stripsep
+ \unvbox\@viper
+ }%
+ \@viperoutput
+ \fi
+ \endgroup
\fi
- \@combinedblfloats
- \@outputpage
- \begingroup
- \@dblfloatplacement
- \@startdblcolumn
- \@whilesw\if@fcolmade \fi
- {\@outputpage
- \@startdblcolumn}%
- \ifvoid\@viper
- \else
- \global\setbox\@viper\vbox{%
- \vskip-\stripsep
- \unvbox\@viper
- }%
- \@viperoutput
- \fi
- \endgroup
- \fi
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-\mathchardef\@Mv=10005
-\newcount\viper@penalty
-% \end{macrocode}
-%
-% \begin{macro}{\strip}
-% \begin{macrocode}
+ }
\def\strip{%
- \ifinner
- \@parmoderr\viper@penalty\z@
- \else
- \viper@penalty=-\@Mv\relax
- \fi
- \global \setbox\@viper\vbox\bgroup%
+ \ifinner
+ \@parmoderr
+ \viper@penalty\z@
+ \else
+ \viper@penalty=-\@Mv
+ \fi
+ \global\setbox\@viper\vbox\bgroup
\hsize\textwidth
\@parboxrestore
- \col@number \@ne
+ \col@number=\@ne
\vrule height\topskip width\z@ depth\z@
- }
-% \end{macrocode}
-% \end{macro}
-%
-%
-% \begin{macro}{\endstrip}
-% \begin{macrocode}
+ }
\def\endstrip{%
\egroup
- \ifnum\viper@penalty <-\@Mii
- \penalty -\@Miv
- \ifvmode
- \@tempdima\prevdepth %% saving and restoring \prevdepth added
- \vbox{}% %% 26 May 87 to prevent extra vertical
- \prevdepth\@tempdima %% space when used in vertical mode
- \penalty-\@Mv\relax
- \else
- \par
- \penalty-\@Mv\relax
- \noindent
- \fi
+ \ifnum\viper@penalty<-\@Mii
+ \penalty-\@Miv
+ \ifvmode
+ \@tempdima\prevdepth
+ \vbox{}%
+ \prevdepth\@tempdima
+ \penalty-\@Mv\relax
+ \else
+ \par
+ \penalty-\@Mv
+ \noindent
+ \fi
\fi
}
-% \end{macrocode}
-% \end{macro}
-%
-%
-% \begin{macro}{\@viperoutput}
-% \begin{macrocode}
\gdef\@viperoutput{%
- \global \setbox\@holdpg \vbox{%
- \unvbox\@holdpg
- \unvbox\@cclv
- \setbox\@tempboxa \lastbox
- \unskip
- }%
- \@pagedp \dp\@holdpg
- \@pageht \ht\@holdpg
- \ifvoid\@viper\else
- \advance \@pageht \@pagedp
- \ifvoid\footins \else
- \advance \@pageht \ht\footins
- \advance \@pageht \skip\footins
- \advance \@pageht \dp\footins
- \fi
- \ifvbox \@kludgeins
- \ifdim \wd\@kludgeins=\z@
- \advance \@pageht \ht\@kludgeins
- \fi
- \fi
- \@reinserts
- \@addviper
- \fi
- }
-% \end{macrocode}
-% \end{macro}
-%
-%
-% \begin{macro}{\@specialoutput}
-% \begin{macrocode}
+ \global\setbox\@holdpg\vbox{%
+ \unvbox\@holdpg
+ \unvbox\@cclv
+ \setbox\@tempboxa\lastbox
+ \unskip
+ }%
+ \@pagedp=\dp\@holdpg
+ \@pageht=\ht\@holdpg
+ \ifvoid\@viper
+ \else
+ \advance\@pageht by\@pagedp
+ \ifvoid\footins
+ \else
+ \advance\@pageht by\ht\footins
+ \advance\@pageht by\skip\footins
+ \advance\@pageht by\dp\footins
+ \fi
+ \ifvbox\@kludgeins
+ \ifdim\wd\@kludgeins=\z@
+ \advance\@pageht by\ht\@kludgeins
+ \fi
+ \fi
+ \@reinserts
+ \@addviper
+ \fi
+ }
\gdef\@specialoutput{%
- \ifnum \outputpenalty>-\@Mii
- \@doclearpage
- \else
- \ifnum \outputpenalty<-\@Miii
- \ifnum \outputpenalty<-\@MM \deadcycles \z@ \fi
- \ifnum \outputpenalty=-\@Mv
- \@viperoutput
- \ifnum \outputpenalty<\z@
- \if@nobreak
- \else
- \addpenalty \interlinepenalty
- \fi
- \fi
- \else
- \global \setbox\@holdpg \vbox {\unvbox\@cclv}%
- \fi
- \else
- \global \setbox\@holdpg \vbox{%
- \unvbox\@holdpg
- \unvbox\@cclv
- \setbox\@tempboxa \lastbox
- \unskip
- }%
- \@pagedp \dp\@holdpg
- \@pageht \ht\@holdpg
- \unvbox \@holdpg
- \@next\@currbox\@currlist{%
- \ifnum \count\@currbox>\z@
- \advance \@pageht \@pagedp
- \ifvoid\footins \else
- \advance \@pageht \ht\footins
- \advance \@pageht \skip\footins
- \advance \@pageht \dp\footins
- \fi
- \ifvbox \@kludgeins
- \ifdim \wd\@kludgeins=\z@
- \advance \@pageht \ht\@kludgeins
- \fi
- \fi
- \@reinserts
- \@addtocurcol
- \else
- \@reinserts
- \@addmarginpar
- \fi
- }\@latexbug
- \ifnum \outputpenalty<\z@
- \if@nobreak
- \else
- \addpenalty \interlinepenalty
- \fi
- \fi
- \fi
+ \ifnum\outputpenalty>-\@Mii
+ \@doclearpage
+ \else
+ \ifnum\outputpenalty<-\@Miii
+ \ifnum\outputpenalty<-\@MM \deadcycles \z@ \fi
+ \ifnum\outputpenalty=-\@Mv
+ \@viperoutput
+ \ifnum\outputpenalty<\z@
+ \if@nobreak
+ \else
+ \addpenalty \interlinepenalty
+ \fi
+ \fi
+ \else
+ \global\setbox\@holdpg\vbox{\unvbox\@cclv}%
+ \fi
+ \else
+ \global\setbox\@holdpg\vbox{%
+ \unvbox\@holdpg
+ \unvbox\@cclv
+ \setbox\@tempboxa\lastbox
+ \unskip
+ }%
+ \@pagedp=\dp\@holdpg
+ \@pageht=\ht\@holdpg
+ \unvbox\@holdpg
+ \@next\@currbox\@currlist{%
+ \ifnum\count\@currbox>\z@
+ \advance \@pageht \@pagedp
+ \ifvoid\footins
+ \else
+ \advance\@pageht by\ht\footins
+ \advance\@pageht by\skip\footins
+ \advance\@pageht by\dp\footins
+ \fi
+ \ifvbox\@kludgeins
+ \ifdim\wd\@kludgeins=\z@
+ \advance\@pageht by\ht\@kludgeins
+ \fi
+ \fi
+ \@reinserts
+ \@addtocurcol
+ \else
+ \@reinserts
+ \@addmarginpar
+ \fi
+ }\@latexbug
+ \ifnum\outputpenalty<\z@
+ \if@nobreak
+ \else
+ \addpenalty \interlinepenalty
+ \fi
+ \fi
+ \fi
\fi
}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-\@ifundefined{hold@viper}{\newbox\hold@viper}{}
-\newdimen\ht@viper
-% \end{macrocode}
-%
-% \begin{macro}{\@addviper}
-% \begin{macrocode}
-\def \@addviper {%
- \if@firstcolumn
- \@insertfalse
- \@reqcolroom .5\@pageht
- \ht@viper\@reqcolroom
- \advance \@reqcolroom \ht\@viper
- \advance \@reqcolroom \stripsep
- \ifvoid\hold@viper\@tempdima=\z@\else\@tempdima\ht\hold@viper\fi
-%%
- \@tempdimb \ht@viper
- \loop
- \setbox\v@aaa\copy\@holdpg
- \setbox\v@ccc\vbox to\@tempdimb{%
- \vsplit\v@aaa to\@tempdimb\vss\vsplit\v@aaa to\@tempdimb}%
- \wlog{Extra height:\the\ht\v@aaa\space when \the\@tempdimb}%
- \ifvoid\v@aaa \else \advance\@tempdimb 1pt \repeat
- \loop
- \setbox\v@aaa\copy\@holdpg
- \setbox\v@ccc\vbox to\@tempdimb{%
- \vsplit\v@aaa to\@tempdimb\vss}%
- \wlog{(2)Left:\the\ht\v@ccc\space Right:\the\ht\v@aaa\space Output:\the\@tempdimb}%
- \ifdim \ht\v@ccc<\ht\v@aaa \@tempdimb \the\ht\v@aaa \repeat
- \wlog{- LAST -^^JLeft:\the\ht\v@ccc^^JRight:\the\ht\v@aaa^^JOutput:\the\@tempdimb}%
- \setbox\v@ccc\vbox to\@tempdimb{%
- \vsplit\@holdpg to\@tempdimb\vss}%
-%%
- \setbox\@tempboxa \vbox {%
- \hb@xt@\textwidth {%
- \hb@xt@\columnwidth {%
- \vbox to\ht@viper{\box\v@ccc\vss} \hss}%
- \hfil
- \vrule \@width\columnseprule
- \hfil
- \hb@xt@\columnwidth {%
- \vbox to\ht@viper{\box\@holdpg\vss} \hss}%
- }%
- }%
- \ifvoid\hold@viper
- \global\setbox\hold@viper \vbox {%
- \unvbox\@tempboxa
- \penalty\interlinepenalty
- \vskip\stripsep
- \ifnum\outputpenalty <-\@Mii \vskip -\parskip\fi
- \outputpenalty \z@
- }%
- \else
- \global\setbox\hold@viper \vbox {%
- \unvbox\hold@viper
- \unvbox\@tempboxa
- \penalty\interlinepenalty
- \vskip\stripsep
- \ifnum\outputpenalty <-\@Mii \vskip -\parskip\fi
- \outputpenalty \z@
+\def\@addviper{%
+ \@insertfalse
+ \def\var@@thecol@num{2}%
+ \if@firstcolumn
+ \def\var@@thecol@num{1}%
+ \@reqcolroom=.5\@pageht
+ \ht@viper=\@reqcolroom
+ \advance\@reqcolroom by\ht\@viper
+ \advance\@reqcolroom by\stripsep
+ \else
+ \@reqcolroom=\@colht
+ \advance\@reqcolroom by\@pageht
+ \ht@viper.5\@reqcolroom
+ \@reqcolroom=\ht@viper
+ \advance\@reqcolroom by\ht\@viper
+ \advance\@reqcolroom by\stripsep
+ \global\setbox\@holdpg\vbox{%
+ \setbox\cuted@@tempbox@a\vbox{%
+ \aftergroup\unvbox
+ \unvcopy\@leftcolumn
+ \unskip\unkern\unpenalty
+ \setbox\@tempboxa\lastbox
+ \ifdim\dimexpr\ht\@tempboxa+\wd\@tempboxa+\dp\@tempboxa>\z@
+ %% keeps lastbox
+ \aftergroup\@leftcolumn
+ \else
+ %% removes lastbox
+ \aftergroup\cuted@@tempbox@a
+ \fi
+ }%
+ \unskip\unkern\unpenalty
+ \on@stripcols@break
+ \the\At@ViperColsBreak
+ \unvbox\@holdpg
+ }%
+ \global\At@ViperColsBreak{}%
+ \ht@viper=.5\ht\@holdpg
+ \ifdim\ht@viper>\@colht
+ \ht@viper=\@colht
+ \fi
+ \fi
+ %%
+ %% calculations for breaking
+ %%
+ \ifvoid\hold@viper
+ \ht@hold@viper=\z@
+ \else
+ \ht@hold@viper=\ht\hold@viper
+ \fi
+ \cuted@@tempdim@b\ht@viper
+ \set@split@topskip@to\topskip
+ \loop
+ \xdef\saved@tempdimb{\the\cuted@@tempdim@b}%
+ \setbox\cuted@@varbox@a\copy\@holdpg
+ \setbox\cuted@@tempbox@a\vsplit\cuted@@varbox@a to\cuted@@tempdim@b
+ %% set leftcolumn boxes
+ \setbox\cuted@@tempbox@c\vbox{\unvbox\cuted@@tempbox@a}%
+ \setbox\cuted@@tempbox@a\vbox to\cuted@@tempdim@b{\unvcopy\cuted@@tempbox@c}%
+ \xdef\var@@leftcolumn@badness{\the\badness}%
+ %% set rightcolumn boxes
+ \setbox\cuted@@varbox@c\vbox{\unvbox\cuted@@varbox@a}%
+ \setbox\cuted@@varbox@a\vbox to\cuted@@tempdim@b{\unvcopy\cuted@@varbox@c}%
+ \xdef\var@@rightcolumn@badness{\the\badness}%
+ %% analyzing split goodness
+ \cuted@@tempdim@spread=\ht\cuted@@tempbox@c
+ \advance\cuted@@tempdim@spread by\dp\cuted@@tempbox@c
+ \advance\cuted@@tempdim@spread by-\ht\cuted@@varbox@c
+ \advance\cuted@@tempdim@spread by-\dp\cuted@@varbox@c
+ \cuted@@wlog@debug{CUTED [-----]%
+ ^^JLeft: \the\ht\cuted@@tempbox@c
+ +\the\dp\cuted@@tempbox@c\space/\var@@leftcolumn@badness
+ ^^JRight: \the\ht\cuted@@varbox@c
+ +\the\dp\cuted@@varbox@c\space/\var@@rightcolumn@badness
+ ^^JSplit: \the\cuted@@tempdim@b
+ ^^JExtra height: \the\cuted@@tempdim@spread
+ }%
+ \ifnum\var@@leftcolumn@badness<\cuted@@column@badness
+ \ifnum\var@@rightcolumn@badness<\cuted@@column@badness
+ \cuted@@tempdim@spread=\z@
+ \fi
+ \fi
+ \ifdim\cuted@@tempdim@spread<\z@
+ \if@left@column@spread
+ \if@right@column@shrink
+ \ifdim\dimexpr\cuted@@tempdim@spread+\pageshrink>\z@
+ \cuted@@tempdim@a=\dimexpr\ht\cuted@@tempbox@c-0.5\cuted@@tempdim@spread\relax
+ \else
+ \cuted@@tempdim@a=-\dimexpr\cuted@@tempdim@spread+.5\pageshrink\relax
+ \fi
+ \setbox\cuted@@varbox@a\vbox to\cuted@@tempdim@a{\unvcopy\cuted@@tempbox@c}%
+ \ifnum\badness<\cuted@@column@badness
+ \cuted@@tempdim@b=\cuted@@tempdim@a
+ \cuted@@tempdim@spread=\z@
+ \fi
+ \cuted@@wlog@debug{CUTED [leftcolumn badness]: \number\badness\space on \the\cuted@@tempdim@a}%
+ \setbox\cuted@@varbox@a\vbox to\cuted@@tempdim@a{\unvcopy\cuted@@varbox@c}%
+ \cuted@@wlog@debug{CUTED [rightcolumn badness]: \number\badness\space on \the\cuted@@tempdim@a}%
+ \else
+ \setbox\cuted@@varbox@a\vbox to\ht\cuted@@varbox@c{%
+ \unvcopy\cuted@@tempbox@c
}%
- \fi
- \ifdim \@colroom>\@reqcolroom
- \global\setbox\hold@viper \vbox {%
- \unvbox\hold@viper
- \box\@viper
- \penalty\interlinepenalty
- \vskip\stripsep
- \ifnum\outputpenalty <-\@Mii \vskip -\parskip\fi
- \outputpenalty \z@
+ \ifnum\badness<\cuted@@column@badness
+ \@tempdimb=\ht\cuted@@varbox@c
+ \cuted@@tempdim@spread=\z@
+ \fi
+ \cuted@@wlog@debug{CUTED [leftcolumn badness]: \number\badness on \the\ht\cuted@@varbox@c}%
+ \setbox\cuted@@varbox@a\vbox to\ht\cuted@@varbox@c{%
+ \unvcopy\cuted@@varbox@c
}%
- \@inserttrue
- \advance\@tempdima by-\ht\hold@viper
- \global \advance \@colht \@tempdima
- \ifdim \@colht<2.5\baselineskip
- \@latex@warning@no@line {Optional argument of \noexpand\twocolumn
- too tall on page \thepage (1 stulpelis)}%
- \@emptycol
- \if@firstcolumn
- \else
- \@emptycol
- \fi
- \global\@lastvipertrue
+ \cuted@@wlog@debug{CUTED [rightcolumn badness]: \number\badness on \the\ht\cuted@@varbox@c}%
+ \fi
+ \else
+ \if@right@column@shrink
+ \ifdim\dimexpr\cuted@@tempdim@spread+\pageshrink<\z@
+ \else
+ \cuted@@tempdim@b=\ht\cuted@@tempbox@c
+ \cuted@@tempdim@spread=\z@
+ \fi
+ \fi
+ \fi
+ \else
+ \ifdim\cuted@@tempdim@spread>\z@
+ \ifdim\dimexpr\@tempdimb+\p@\relax>\@colht
+ \cuted@@tempdim@b=\@colht
+ \cuted@@tempdim@spread=\z@
+ \fi
+ \fi
+ \fi
+ \ifdim\cuted@@tempdim@spread<\z@
+ \advance\cuted@@tempdim@b 1\p@
+ \repeat
+ \wlog{CUTED [- LAST -]%
+ ^^JExtra skip:\the\cuted@@tempdim@spread
+ ^^JLeft:\the\ht\cuted@@tempbox@c/\the\dp\cuted@@tempbox@c
+ ^^JRight:\the\ht\cuted@@varbox@c/\the\dp\cuted@@varbox@c
+ ^^JSplit: \saved@tempdimb
+ ^^JOutput:\the\cuted@@tempdim@b
+ ^^JPageshrink: \the\pageshrink
+ ^^JPagestretch: \the\pagestretch
+ ^^J@colht:\the\@colht
+ }%
+ %%
+ %% final construction of the cuted page above strip
+ %%
+ \setbox\cuted@@tempbox@c\vsplit\@holdpg to\saved@tempdimb
+ \setbox\cuted@@tempbox@a\vbox to\cuted@@tempdim@b{%
+ \cuted@@tempdim@a=\dimexpr
+ \cuted@@tempdim@b-\ht\cuted@@tempbox@c
+ \relax
+ \cuted@@tempdim@spread=\dp\cuted@@tempbox@c
+ \unvbox\cuted@@tempbox@c
+ \ifdim\cuted@@tempdim@spread>\dp\strutbox
\else
- \global \vsize \@colht
- \global \@colroom \@colht
- \check@floats
- \ifdim\@tempdima>\z@
- \global\advance\@colroom by-\@tempdima
- \fi
- \ifdim\@colroom<\z@
- \global\@colroom 1pt
- \ifdim\@tempdima>\@colht
- \@latex@warning@no@line {TOP ir/ar BOT FLOAT's
- netelpa lape \thepage (1 stulpelis)}%
- \fi
- \@emptycol
- \if@firstcolumn
- \else
- \@emptycol
- \fi
- \global\@lastvipertrue
- \fi
+ \vskip-\cuted@@tempdim@spread
\fi
- \fi
- \else
- \@insertfalse
- \@reqcolroom\@colht
- \advance\@reqcolroom \@pageht
- \ht@viper.5\@reqcolroom
- \@reqcolroom\ht@viper
- \advance \@reqcolroom \ht\@viper
- \advance \@reqcolroom \stripsep
- \if@flushend@auto@baselineskip
- \setbox\@tempboxa\vbox{\unvcopy\@leftcolumn
- \global\lastskip@d\lastskip
- \global\lastskip@b\lastskip
- \loop
- \global\lastskip@a\lastskip@b
- \unskip\unpenalty
- \global\lastskip@b\lastskip
- \global\advance\lastskip@d by\lastskip
- \ifdim\lastskip@b=-\lastskip@a
- \global\advance\lastskip@d by-\lastskip
- \else
- \repeat
- \ifdim\lastskip@b=-\lastskip@a
- \ifdim\lastskip@b=\z@
- \setbox\lastbox@a\lastbox
- \global\advance\lastskip@d by\ht\lastbox@a
- \global\advance\lastskip@d by\lastskip
- \unskip\unpenalty
- \setbox\lastbox@a\lastbox
- \global\advance\lastskip@d by\dp\lastbox@a
+ \prevdepth\z@
+ \hrule\@height\cuted@@page@rule width\textwidth
+ \vskip-\cuted@@page@rule
+ \ifdim\cuted@@tempdim@a>\z@
+ \if@left@column@spread
\else
- \global\lastskip@d\lastskip
- \global\advance\lastskip@d by\topskip
+ \vss
\fi
- \fi
- \global\advance\lastskip@d by-\topskip
- }%
- \ifdim\ht\@holdpg>\@colht
- \global\setbox\@holdpg\vbox{\unvbox\@leftcolumn\unskip\unpenalty
- \par\eject
- \vbox to \@colht{\unvbox\@holdpg\unskip}%
- }%
- \else
- \global\setbox\@holdpg\vbox{%
- \unvbox\@leftcolumn\unskip\unpenalty
- \vskip\lastskip@d
- \the\At@ViperColsBreak
- \unvbox\@holdpg
- \unskip
- }%
- \fi
- \else
- \global\setbox\@holdpg\vbox{%
- \unvbox\@leftcolumn
- \setbox\@tempboxa\lastbox
- \on@stripcols@break
- \the\At@ViperColsBreak
- \unvbox\@holdpg
- }%
- \fi
- \global\At@ViperColsBreak{}%
- \ht@viper .5\ht\@holdpg
- \ifdim \ht@viper>\@colht
- \ht@viper \@colht
- \fi
- \ifvoid\hold@viper\@tempdima=\z@\else\@tempdima\ht\hold@viper\fi
-% \end{macrocode}
-%%
-% \begin{macrocode}
- \@tempdimb \ht@viper
- \loop
- \setbox\v@aaa\copy\@holdpg
- \setbox\v@ccc\vbox to\@tempdimb{%
- \vsplit\v@aaa to\@tempdimb
+ \else
+ \ifdim\cuted@@tempdim@a<\z@
+ \if@left@column@shrink
+ \else
+ \vss
+ \fi
+ \fi
+ \fi
+ }%
+ \wlog{CUTED [output]: \the\cuted@@tempdim@b
+ ^^JCUTED [leftcolumn badness]: \number\badness
+ }%
+ \setbox\cuted@@varbox@a\vbox to\cuted@@tempdim@b{%
+ \cuted@@tempdim@a=\dimexpr
+ \cuted@@tempdim@b-\ht\@holdpg
+ \relax
+ \unvbox\@holdpg
+ \ifdim\cuted@@tempdim@a>\z@
+ \if@right@column@spread
+ \else
\vss
- \vsplit\v@aaa to\@tempdimb
+ \fi
+ \else
+ \ifdim\cuted@@tempdim@a<\z@
+ \if@right@column@shrink
+ \else
+ \vss
+ \fi
+ \fi
+ \fi
+ }%
+ \wlog{CUTED [rightcolumn badness]: \number\badness}%
+ \setbox\cuted@@tempbox@var\vbox{%
+ \hb@xt@\textwidth{%
+ \hb@xt@\columnwidth{%
+ \vbox to\ht@viper{\box\cuted@@tempbox@a\vss}%
+ \hss
}%
- \wlog{Extra height:\the\ht\v@aaa\space when \the\@tempdimb}%
- \ifvoid\v@aaa
- \else
- \advance\@tempdimb 1\p@
- \repeat
- \loop
- \setbox\v@aaa\copy\@holdpg
- \setbox\v@ccc\vbox to\@tempdimb{\vsplit\v@aaa to\@tempdimb\vss}%
- \wlog{(2)Left:\the\ht\v@ccc\space
- Right:\the\ht\v@aaa\space
- Output:\the\@tempdimb
- }%
- \ifdim\ht\v@ccc<\ht\v@aaa
- \@tempdimb \the\ht\v@aaa
- \repeat
- \wlog{- LAST -^^JLeft:\the\ht\v@ccc
- ^^JRight:\the\ht\v@aaa
- ^^JOutput:\the\@tempdimb
- }%
- \setbox\v@ccc\vbox to\@tempdimb{\vsplit\@holdpg to\@tempdimb\vss}%
-% \end{macrocode}
-%
-% \begin{macrocode}
- \setbox\@tempboxa\vbox{%
- \hb@xt@\textwidth {%
- \hb@xt@\columnwidth{\vbox to\ht@viper{\box\v@ccc\vss} \hss}%
\hfil
- \vrule \@width\columnseprule
+ {\normalcolor\vrule \@width\columnseprule}%
\hfil
- \hb@xt@\columnwidth {\vbox to\ht@viper{\box\@holdpg\vss} \hss}%
+ \hb@xt@\columnwidth{%
+ \vbox to\ht@viper{\box\cuted@@varbox@a\vss}%
+ \hss
+ }%
}%
}%
- \ifvoid\hold@viper
- \global\setbox\hold@viper \vbox {%
- \unvbox\@tempboxa
- \penalty\interlinepenalty
- \vskip\stripsep
- \ifnum\outputpenalty <-\@Mii \vskip -\parskip\fi
- \outputpenalty \z@
- }%
- \else
- \global\setbox\hold@viper \vbox {%
- \unvbox\hold@viper
- \unvbox\@tempboxa
- \penalty\interlinepenalty
- \vskip\stripsep
- \ifnum\outputpenalty <-\@Mii \vskip -\parskip\fi
- \outputpenalty \z@
- }%
- \fi
- \ifdim \@colht>\@reqcolroom
- \global\setbox\hold@viper \vbox {%
- \unvbox\hold@viper
- \box\@viper
- \penalty\interlinepenalty
- \vskip\stripsep
- \ifnum\outputpenalty <-\@Mii \vskip -\parskip\fi
- \outputpenalty \z@
- }%
+ %%
+ %% finalize cuted page
+ %%
+ \ifvoid\hold@viper
+ \global\setbox\hold@viper\vbox{%
+ \unvbox\cuted@@tempbox@var
+ \penalty\interlinepenalty
+ \vskip\stripsep
+ \the\preCutedStrip
+ \ifnum\outputpenalty<-\@Mii
+ \vskip -\parskip
+ \fi
+ \outputpenalty\z@
+ }%
+ \else
+ \global\setbox\hold@viper\vbox{%
+ \unvbox\hold@viper
+ \cuted@@tempbox@var
+ \penalty\interlinepenalty
+ \vskip\stripsep
+ \the\preCutedStrip
+ \ifnum\outputpenalty<-\@Mii
+ \vskip -\parskip
+ \fi
+ \outputpenalty\z@
+ }%
+ \fi
+ \ifdim\@colht>\@reqcolroom
+ \global\setbox\hold@viper\vbox{%
+ \unvbox\hold@viper
+ \box\@viper
+ \penalty\interlinepenalty
+ \the\postCutedStrip
+ \vskip\stripsep
+ \ifnum\outputpenalty<-\@Mii
+ \vskip -\parskip
+ \fi
+ \outputpenalty\z@
+ }%
\@inserttrue
\global\@firstcolumntrue
- \advance\@tempdima by-\ht\hold@viper
- \global \advance \@colht \@tempdima
- \ifdim \@colht<2.5\baselineskip
+ \advance\ht@hold@viper by-\ht\hold@viper
+ \global\advance\@colht by\ht@hold@viper
+ \ifdim\@colht<2.5\baselineskip
\@latex@warning@no@line {Optional argument of \noexpand\twocolumn
- too tall on page \thepage (2 stulpelis)}%
+ too tall on page \thepage (\var@@thecol@num column)}%
\@emptycol
\if@firstcolumn
\else
@@ -636,17 +741,17 @@
\fi
\global\@lastvipertrue
\else
- \global \vsize \@colht
- \global \@colroom \@colht
- \check@floats
- \ifdim\@tempdima>\z@
- \global\advance\@colroom by-\@tempdima
+ \global\vsize\@colht
+ \global\@colroom\@colht
+ \check@floats\cuted@@tempdim@a
+ \ifdim\cuted@@tempdim@a>\z@
+ \global\advance\@colroom by-\cuted@@tempdim@a
\fi
\ifdim\@colroom<\z@
- \global\@colroom 1pt
- \ifdim\@tempdima>\@colht
- \@latex@warning@no@line {TOP ir/ar BOT FLOAT's
- netelpa lape \thepage (2 stulpelis)}%
+ \global\@colroom1\p@
+ \ifdim\cuted@@tempdim@a>\@colht
+ \@latex@warning@no@line{TOP and/or BOT FLOAT's
+ to large on \thepage (\var@@thecol@num column)}%
\fi
\@emptycol
\if@firstcolumn
@@ -656,95 +761,81 @@
\global\@lastvipertrue
\fi
\fi
- \fi
- \fi
- \if@insert
- \else
- \advance\@tempdima by-\ht\hold@viper
- \global \advance \@colht \@tempdima
- \global\setbox\hold@viper \vbox {%
- \unvbox\hold@viper
- \csname viper@top@hook\endcsname
- \vsplit\@viper to \@colht
- \vss
- }%
- \vbox{}%
- \global\@firstcolumnfalse
- \newpage
- \fi
- }
-% \end{macrocode}
-% \end{macro}
-%
-%
-% \begin{macro}{\check@floats}
-% \begin{macrocode}
-
-\def\check@floats{%
- \global\@tempdima\z@
- \let\@elt\ht@comflelt
- \ifx\@toplist\@empty \else \@toplist \fi
- \ifx\@botlist\@empty \else \@botlist \fi
+ \fi
+ \if@insert
+ \else
+ \advance\ht@hold@viper by-\ht\hold@viper
+ \global\advance\@colht by\ht@hold@viper
+ \global\setbox\hold@viper\vbox{%
+ \unvbox\hold@viper
+ \set@split@topskip@to{\z@ plus2\p@}%
+ \vsplit\@viper to\@colht
+ \vss
+ }%
+ \vbox{}%
+ \global\@firstcolumnfalse
+ \newpage
+ \fi
}
-% \end{macrocode}
-% \end{macro}
-%
-%
-% \begin{macro}{\ht@comflelt}
-% \begin{macrocode}
-\def\ht@comflelt#1{%
- \setbox\@tempboxa\vbox{\copy #1\vskip\floatsep}%
- \global\advance\@tempdima by\ht\@tempboxa
- }
-% \end{macrocode}
-% \end{macro}
-% \begin{macro}{output}
-% \begin{macrocode}
-\output {%
- \let \par \@@par
- \ifnum \outputpenalty<-\@M
- \@specialoutput
- \else
- \@makecol
- \@opcol
- \@startcolumn
- \@whilesw \if@fcolmade \fi
- {%
- \@opcol\@startcolumn}%
- \fi
- \ifnum \outputpenalty>-\@Miv
- \ifdim \@colroom<1.5\baselineskip
- \ifdim \@colroom<\textheight
- \@latex@warning@no@line {Text page \thepage\space
- contains only floats}%
- \if@lastviper\else\@emptycol\fi
- \if@twocolumn
- \if@firstcolumn
- \else
- \@emptycol
- \fi
- \fi
- \global\@lastviperfalse
- \else
- \global \vsize \@colroom
- \fi
+\def\check@floats#1{%
+ \begingroup
+ \global#1\z@
+ \def\@elt##1{%
+ \setbox\@tempboxa\vbox{\copy #1\vskip\floatsep}%
+ \global\advance##1 by\ht\@tempboxa
+ }%
+ \ifx\@toplist\@empty \else \@toplist \fi
+ \ifx\@botlist\@empty \else \@botlist \fi
+ \endgroup
+ }
+\output{%
+ \let\par\@@par
+ \ifnum\outputpenalty<-\@M
+ \@specialoutput
\else
- \global \vsize \@colroom
+ \@makecol
+ \@opcol
+ \@startcolumn
+ \@whilesw\if@fcolmade\fi
+ {\@opcol \@startcolumn}%
\fi
- \else
- \ifnum\outputpenalty<-100005
- \global \vsize \maxdimen
+ \ifnum\outputpenalty>-\@Miv
+ \ifdim\@colroom<1.5\baselineskip
+ \ifdim\@colroom<\textheight
+ \@latex@warning@no@line{%
+ Text page \thepage\space contains only floats%
+ }%
+ \if@lastviper
+ \else
+ \@emptycol
+ \fi
+ \if@twocolumn
+ \if@firstcolumn
+ \else
+ \@emptycol
+ \fi
+ \fi
+ \global\@lastviperfalse
+ \else
+ \global\vsize\@colroom
+ \fi
+ \else
+ \global\vsize\@colroom
+ \fi
\else
- \global \vsize \@colroom
+ \ifnum\outputpenalty<-\@Mv
+ \global\vsize\maxdimen
+ \else
+ \global\vsize\@colroom
+ \fi
\fi
- \fi
- }
+ }
+\ifcuted@@debug
+ \xdef\cuted@@page@rule{.4\p@}
+\else
+ \xdef\cuted@@page@rule{\z@}
+\fi
% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-%\endinput
-% \end{macrocode}
%
% \iffalse
%</package>