% \iffalse meta-comment % % Copyright (C) 2012 by Sigitas Tolu\v{s}is % --------------------------------------------------------------------------- % 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. % % This work has the LPPL maintenance status `maintained'. % % The Current Maintainer of this work is Sigitas Tolu\v{s}is. % % This work consists of the files cuted.dtx and cuted.ins % and the derived filebase cuted.sty. % % \fi % % \iffalse %<*driver> \ProvidesFile{cuted.dtx} % %<*package> %% Copyright (C) 1997-2012 by Sigitas Tolu\v{s}is %% 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: Insert some onecolumn material in full-width on double-column page. %% % %\NeedsTeXFormat{LaTeX2e}[1999/12/01] %\ProvidesPackage{cuted} %<*package> [2012/10/04 v1.5 Mixing onecolumn and twocolumn modes] % % %<*driver> \documentclass{ltxdoc} \usepackage{cuted}[2012/10/04] \EnableCrossrefs \CodelineIndex \RecordChanges \begin{document} \DocInput{cuted.dtx} \PrintChanges \PrintIndex \end{document} % % \fi % % \CheckSum{1136} % % \CharacterTable % {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z % Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z % Digits \0\1\2\3\4\5\6\7\8\9 % Exclamation \! Double quote \" Hash (number) \# % Dollar \$ Percent \% Ampersand \& % Acute accent \' Left paren \( Right paren \) % Asterisk \* Plus \+ Comma \, % Minus \- Point \. Solidus \/ % Colon \: Semicolon \; Less than \< % Equals \= Greater than \> Question mark \? % Commercial at \@ Left bracket \[ Backslash \\ % Right bracket \] Circumflex \^ Underscore \_ % Grave accent \` Left brace \{ Vertical bar \| % Right brace \} Tilde \~} % % % \changes{}{1997/09/02}{improved column balancing} % \changes{}{1997/09/03}{float control for \cs{@colroom} setting} % \changes{}{1997/09/04}{improved \cs{@colroom} setting} % \changes{}{1997/09/05}{checking for \cs{@viper} and \cs{hold@viper}} % \changes{}{1997/09/09}{compatibility with flushend.sty} % \changes{}{1997/09/22}{improved \cs{output} ir \cs{@specialoutput}} % \changes{}{1997/10/01}{improved \cs{output} ir \cs{@addviper}} % \changes{}{1998/10/23}{pakeistas koloneliu sujungimas} % \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} % % \DoNotIndex{\newcommand,\newenvironment} % % \providecommand*{\url}{\texttt} % \GetFileInfo{cuted.dtx} % \title{The \textsf{cuted} package} % \author{Sigitas Tolu\v{s}is\\ \url{sigitas@vtex.lt}} % \date{\fileversion~from \filedate} % % \maketitle % % \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). % % \section{Usage} % % % \DescribeMacro{strip} % Provides new environment: % % \begin{verbatim} % \begin{strip} % % \end{strip} % \end{verbatim} % % Puts |\vbox|\marg{wide onecolumn material} in full-width on % double-column page. % % \medskip % Adds |\stripsep| glue before and after % (by default: |15pt plus2pt minus 2pt|). % % \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{\oldcolsbreak} % \marg{adds} % % Adds \meta{adds} in place of original column break if strip is placed % on the right column. % % \subsection{Package options} % % \DescribeMacro{unskipbreak} % \indent It is used to change |\hbox{}| to |\unskip| after leftcolumn break on striped page. % % \medskip % \DescribeMacro{autobase} % It is used to guess |\baselineskip| value on original columns break. % % % \StopEventually{} % % \section{Implementation} % % \iffalse %<*package> % \fi % % % \begin{macro}{unskipbreak} % \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} \ProcessOptions \newtoks\At@ViperColsBreak \At@ViperColsBreak{} % \end{macrocode} % \end{macro} % % \begin{macro}{\oldcolsbreak} % \begin{macrocode} \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}{} \@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 \else \setbox\@outputbox \vbox to\textheight{% \box\hold@viper \box\@outputbox \vss }% \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% \hsize\textwidth \@parboxrestore \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 \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} \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 \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@ }% \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@ }% \@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 \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 \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 \else \global\lastskip@d\lastskip \global\advance\lastskip@d by\topskip \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 \vss \vsplit\v@aaa to\@tempdimb }% \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 \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@ }% \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@ }% \@inserttrue \global\@firstcolumntrue \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 (2 stulpelis)}% \@emptycol \if@firstcolumn \else \@emptycol \fi \global\@lastvipertrue \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 (2 stulpelis)}% \fi \@emptycol \if@firstcolumn \else \@emptycol \fi \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 } % \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 \else \global \vsize \@colroom \fi \else \ifnum\outputpenalty<-100005 \global \vsize \maxdimen \else \global \vsize \@colroom \fi \fi } % \end{macrocode} % \end{macro} % % \begin{macrocode} %\endinput % \end{macrocode} % % \iffalse % % \fi % % \Finale