% \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 stfloats.dtx and stfloats.ins % and the derived filebase stfloats.sty. % % \fi % % \iffalse %<*driver> \ProvidesFile{stfloats.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: Improve float mechanism and baselineskip settings %% % %\NeedsTeXFormat{LaTeX2e}[1999/12/01] %\ProvidesPackage{stfloats} %<*package> [2012/05/29 v1.1 Improve float mechanism and baselineskip settings] % % %<*driver> \documentclass{ltxdoc} \usepackage{stfloats}[2012/05/29] \EnableCrossrefs \CodelineIndex \RecordChanges \begin{document} \DocInput{stfloats.dtx} %%\PrintChanges %%\PrintIndex \end{document} % % \fi % % \CheckSum{551} % % \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{v0.1}{1997/08/25}{first version} % \changes{v0.2}{1997/09/10}{standard LaTeX2e macros are used for dblfloats at top} % \changes{v1.0}{1997/10/01}{new commands: \cs{fnbelowfloat} and \cs{fnunderfloat}} % \changes{v2.0}{1998/09/21}{new commands: \cs{setbaselinefloat} and \cs{setbaselinefixed}} % \changes{v2.1}{1999/10/04}{changed dblfloat's output} % \changes{v2.2}{1999/10/22}{changed cs{output} for older LaTeX distributions} % \changes{v3.0}{2012/05/29}{Converted to DTX file} % % \DoNotIndex{\newcommand,\newenvironment} % % \providecommand*{\url}{\texttt} % \GetFileInfo{stfloats.dtx} % \title{The \textsf{stfloats} package} % \author{Sigitas Tolu\v{s}is \\ \url{sigitas@vtex.lt}} % \date{\fileversion~from \filedate} % % \maketitle % % \section{Introduction} % % The package improves dblfloat(s) and footnotes placements mechanism and baselineskip % glue settings. % % \section{Usage} % % To place dblfloat(s) on top or bottom of the page just use optional % [t] or [b]. % % \leftline{Example (to place figure at the page bottom):} % % \begin{verbatim} % \begin{figure*}[b] % ... % \end{figure*} % \end{verbatim} % % \DescribeMacro{\fnbelowfloat} % Puts footnotes below the bottom floats % % \medskip % \DescribeMacro{\fnunderfloat} (default and standard) % Puts footnotes under the bottom floats. % % \medskip % \DescribeMacro{\setbaselinefloat} % Allows |\baselineskip| to stretch and shrink if the |\baselineskip| % is set internally with command |\@setfontsize| (|\linespread| and % |\fontsize| at user level). The settings are calculated and activated % with command |\selectfont| (|\size@update|). % % \medskip % Example: % % \medskip % |\@setfontsize\normalsize\@xpt{12pt plus .1pt minus .1pt}| |\normalsize|% % % \medskip % \DescribeMacro{\setbaselinefixed} (default and standard) % Disables baselineskip to stretch and shrink even if the |\baselineskip| % is set with command |\@setfontsize| as in the previous example in case that % |\baselinestretch| is not empty. % % \medskip % Then line spreading is not used |\baselineskip| glue can be % controlled by ordinary |\baselinestretch| definition: % % \begin{itemize} % \item % |\def\baselinestretch{1}| - removes |\baselineskip| glue. % \item % |\def\baselinestretch{}| - keeps |\baselineskip| glue. % \end{itemize} % % \StopEventually{} % % \section{Implementation} % % \iffalse %<*package> % \fi % % % \begin{macro}{\@dblbotlist} % Used for dblfloat(s) to be placed at the page bottom. % \begin{macrocode} \gdef\@dblbotlist{} % \end{macrocode} % \end{macro} % % Additional counters for dblfloat(s) support at the page bottom. % \begin{macrocode} \newcount\@dblbotnum \newcount\c@dblbotnumber \setcounter{dblbotnumber}{2} % \end{macrocode} % % \begin{macro}{\@dbflt} % With extended set of default args: |[tp] -> [tbp]| % \begin{macrocode} \def\@dbflt#1{\@ifnextchar[{\@xdblfloat{#1}}{\@xdblfloat{#1}[tbp]}} % \end{macrocode} % \end{macro} % % % \begin{macro}{\@dblfloatplacement} % With adds to support dblfoat(s) placement at the page bottom. % \begin{macrocode} \def \@dblfloatplacement {% \global \@dbltopnum \c@dbltopnumber \global \@dblbotnum \c@dblbotnumber \global \@dbltoproom \dbltopfraction\@colht \@textmin \@colht \advance \@textmin -\@dbltoproom \@fpmin \dblfloatpagefraction\textheight \@fptop \@dblfptop \@fpsep \@dblfpsep \@fpbot \@dblfpbot } % \end{macrocode} % \end{macro} % % % \begin{macro}{\@addtodblcol} % With adds to support dblfoat(s) placement at the page bottom. % \begin{macrocode} \def\@addtodblcol{% \begingroup \@insertfalse \@setfloattypecounts \@getfpsbit \tw@ \ifodd\@tempcnta \@flsetnum \@dbltopnum \ifnum \@dbltopnum>\z@ \@tempswafalse \ifdim \@dbltoproom>\ht\@currbox \@tempswatrue \else \ifnum \@fpstype<\sixt@@n \advance \@dbltoproom \@textmin \ifdim \@dbltoproom>\ht\@currbox \@tempswatrue \fi \advance \@dbltoproom -\@textmin \fi \fi \if@tempswa \@bitor \@currtype \@dbldeferlist \if@test \else \@bitor \@currtype \@dblbotlist \if@test \else \@tempdima -\ht\@currbox \advance\@tempdima -\ifx \@dbltoplist\@empty \dbltextfloatsep \else \dblfloatsep \fi \global \advance \@dbltoproom \@tempdima \global \advance \@colht \@tempdima \global \advance \@dbltopnum \m@ne \@cons \@dbltoplist \@currbox \@inserttrue \fi \fi \fi \fi \fi \if@insert \else \@getfpsbit 4\relax \ifodd\@tempcnta \@flsetnum \@dblbotnum \ifnum \@dblbotnum>\z@ \@tempswafalse \ifdim \@dbltoproom>\ht\@currbox \@tempswatrue \else \ifnum \@fpstype<\sixt@@n \advance \@dbltoproom \@textmin \ifdim \@dbltoproom>\ht\@currbox \@tempswatrue \fi \advance \@dbltoproom -\@textmin \fi \fi \if@tempswa \@bitor \@currtype \@dbldeferlist \if@test \else \@tempdima -\ht\@currbox \advance\@tempdima -\ifx \@dblbotlist\@empty \dbltextfloatsep \else \dblfloatsep \fi \global \advance \@dbltoproom \@tempdima \global \advance \@colht \@tempdima \global \advance \@dblbotnum \m@ne \@cons \@dblbotlist \@currbox \@inserttrue \fi \fi \fi \fi \if@insert \else \@cons\@dbldeferlist\@currbox \fi \fi \endgroup } % \end{macrocode} % \end{macro} % % % \begin{macro}{\@combinedblfloats} % Combines outputbox with top and bottom placed dblfloat(s). % \begin{macrocode} \def\@combinedblfloats{% \ifx \@dbltoplist\@empty \else \@cdblflt \fi \ifx \@dblbotlist\@empty \else \@cdblflb \fi } % \end{macrocode} % \end{macro} % % % \begin{macro}{\@cdblflt} % Combines outputbox with top placed dblfloat(s). % \begin{macrocode} \def\@cdblflt{% \setbox\@tempboxa \vbox{}% \let \@elt \@comdblflelt \@dbltoplist \let \@elt \relax \xdef \@freelist {\@freelist\@dbltoplist}% \global\let \@dbltoplist \@empty \setbox\@outputbox \vbox% to\textheight {%\boxmaxdepth\maxdepth %% probably not needed, CAR \unvbox\@tempboxa\vskip-\dblfloatsep \ifnum \@dbltopnum>\m@ne \dblfigrule \fi \vskip \dbltextfloatsep \unvbox \@outputbox }% } % \end{macrocode} % \end{macro} % % % \begin{macro}{\@cdblflb} % Combines outputbox with bottom placed dblfloat(s). % \begin{macrocode} \def\@cdblflb{% \setbox\@tempboxa \vbox{}% \let \@elt \@comdblflelt \@dblbotlist \let \@elt \relax \xdef \@freelist {\@freelist\@dblbotlist}% \global\let \@dblbotlist \@empty \setbox\@outputbox \vbox% to\textheight {%\boxmaxdepth\maxdepth %% probably not needed, CAR \unvbox\@outputbox \vskip \dbltextfloatsep \ifnum \@dblbotnum>\m@ne \dblfigrule \fi \unvbox\@tempboxa \vskip -\dblfloatsep }% } % \end{macrocode} % \end{macro} % % % \begin{macro}{\@doclearpage} % With adds to support dblfoat(s) placement at the page bottom. % \begin{macrocode} \def \@doclearpage {% \ifvoid\footins \ifvbox\@kludgeins {\setbox \@tempboxa \box \@kludgeins}% \fi \setbox\@tempboxa\vsplit\@cclv to\z@ \unvbox\@tempboxa \setbox\@tempboxa\box\@cclv \xdef\@deferlist{\@toplist\@botlist\@deferlist}% \global \let \@toplist \@empty \global \let \@botlist \@empty \global \@colroom \@colht \ifx \@currlist\@empty \else \@latexerr{Float(s) lost}\@ehb \global \let \@currlist \@empty \fi \@makefcolumn\@deferlist \@whilesw\if@fcolmade \fi{\@opcol\@makefcolumn\@deferlist}% \if@twocolumn \if@firstcolumn \xdef\@dbldeferlist{\@dbltoplist\@dblbotlist\@dbldeferlist}% \global \let \@dbltoplist \@empty \global \let \@dblbotlist \@empty \global \@colht \textheight \begingroup \@dblfloatplacement \@makefcolumn\@dbldeferlist \@whilesw\if@fcolmade \fi{\@outputpage \@makefcolumn\@dbldeferlist}% \endgroup \else \vbox{}\clearpage \fi \fi \else \setbox\@cclv\vbox{\box\@cclv\vfil}% \@makecol\@opcol \clearpage \fi } % \end{macrocode} % \end{macro} % % Makes |\@makecol| current definition copy to |\org@makecol|. % \begin{macrocode} \global\let\org@makecol\@makecol % \end{macrocode} % % \begin{macro}{\fn@makecol} % Redefined macro |\@makecol| which puts footnotes below the bottom floats. % \begin{macrocode} \gdef \fn@makecol {% \setbox\@outputbox \box\@cclv \let\@elt\relax \xdef\@freelist{\@freelist\@midlist}% \global \let \@midlist \@empty \@combinefloats \ifvoid\footins \else \setbox\@outputbox \vbox {% \boxmaxdepth \@maxdepth \unvbox \@outputbox \vskip \skip\footins \color@begingroup \normalcolor \footnoterule \unvbox \footins \color@endgroup }% \fi \ifvbox\@kludgeins \@makespecialcolbox \else \setbox\@outputbox \vbox to\@colht {% \@texttop \dimen@ \dp\@outputbox \unvbox \@outputbox \vskip -\dimen@ \@textbottom }% \fi \global \maxdepth \@maxdepth } % \end{macrocode} % \end{macro} % % % \begin{macro}{\fnbelowfloat} % Switch to put footnotes below the bottom floats. % \begin{macrocode} \def\fnbelowfloat{\global\let\@makecol\fn@makecol} % \end{macrocode} % \end{macro} % % % \begin{macro}{\fnunderfloat} % Switch to put footnotes under the bottom floats. % \begin{macrocode} \def\fnunderfloat{\global\let\@makecol\org@makecol} % \end{macrocode} % \end{macro} % % % \begin{macro}{\set@floatfontsize} % Such definition |\baselineskip\f@linespread\baselineskip| removes % any glue from the |\baselineskip| in the case |\f@linespread| is % not empty. To prevent this |\size@update| is redefined. % \begin{macrocode} \def\set@floatfontsize#1#2#3{% \@defaultunits\@tempdimb#2pt\relax\@nnil \edef\f@size{\strip@pt\@tempdimb}% \@defaultunits\@tempskipa#3pt\relax\@nnil \edef\f@baselineskip{\the\@tempskipa}% \edef\f@linespread{#1}% \let\baselinestretch\f@linespread \def\size@update{% % \end{macrocode} % Saving of the |\baselineskip| glue. % \begin{macrocode} \baselineskip\f@baselineskip \@tempskipa\baselineskip\relax\baselineskip=1\baselineskip \advance\@tempskipa by-\baselineskip\baselineskip\f@baselineskip % \end{macrocode} % Removes the |\baselineskip| glue in case |\f@linespread| not empty. % \begin{macrocode} \baselineskip\f@linespread\baselineskip % \end{macrocode} % Restoring of the |\baselineskip| glue. % \begin{macrocode} \advance\@tempskipa by\baselineskip\baselineskip\@tempskipa \normalbaselineskip\baselineskip \setbox\strutbox\hbox{% \vrule\@height.7\baselineskip \@depth.3\baselineskip \@width\z@}% \let\size@update\relax }% } % \end{macrocode} % \end{macro} % % Simple copy of the previous original |\set@fontsize| definition in |\set@@@fontsize|. % % \begin{macrocode} \let\set@@@fontsize\set@fontsize % \end{macrocode} % % % \begin{macro}{\setbaselinefloat} % It allows |\baselineskip| to be set to the value with glue. % \begin{macrocode} \def\setbaselinefloat{\let\set@fontsize\set@floatfontsize} % \end{macrocode} % \end{macro} % % % \begin{macro}{\setbaselinefixed} % It is used to restore macro definition |\set@fontsize| to the % original one. It means that |\baselineskip| is set to the value % without glue in the case |\baselinestretch| is not empty. % \begin{macrocode} \def\setbaselinefixed{% \@tempdima=\baselinestretch\p@ \edef\baselinestretch{\strip@pt\@tempdima}% \let\set@fontsize\set@@@fontsize } % \end{macrocode} % \end{macro} % % % \begin{macro}{\output} % It is removed from this package as the duplicate of the same % definition in kernel since the macro definition change % v.1.2c at 1997/11/09 in |ltoutput|. % \end{macro} % % % \begin{macrocode} %\endinput % \end{macrocode} % % \iffalse % % \fi % % \Finale