% \iffalse meta-comment/*%    \end{macrocode}*/
%
% Copyright (C) 2025 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
% 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
%<*internal>
\begingroup
%</internal>
%<*batchfile>
\input docstrip.tex
\keepsilent\askforoverwritefalse
\preamble
%%
%% This is file `stfloats.sty',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% stfloats.dtx  (with options: `package')
%% 
\endpreamble
\generate{\file{stfloats.sty}{\from{stfloats.dtx}{package}}}
%</batchfile>
%<batchfile>\endbatchfile
%<*internal>
\generate{\file{stfloats.ins}{\from{stfloats.dtx}{batchfile}}}
\endgroup
%</internal>
%<*driver>
\ProvidesFile{stfloats.dtx}
%</driver>
%<*package>
%% Copyright (C) 1997-2025 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
%% 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
%%
%</package>
%<package>\NeedsTeXFormat{LaTeX2e}[2015/12/01]
%<package>\ProvidesPackage{stfloats}
%<*package>
    [2025/06/18 v3.4 Improve float mechanism and baselineskip settings]
%</package>
%
%<*driver>
\documentclass{ltxdoc}
\usepackage{stfloats}[2025/06/18]
\EnableCrossrefs
\CodelineIndex
\RecordChanges
\begin{document}
  \DocInput{stfloats.dtx}
  %%\PrintChanges
  %%\PrintIndex
\end{document}
%</driver>
% \fi
%
% \CheckSum{933}
%
% \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}
% \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}
% \changes{v3.4}{2025/06/18}{Compatibility with 2025-06-01 latexrelease}
%
% \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.
%
% With newer \LaTeX\ release from 2015/01/01 using this package two improvements are
% available out of the box:
% \begin{enumerate}
% \item Float output keeps order for the
% same type of floats even with top or bottom dblfloat items.
% \item Dblfloats will appear on the same page where
% they are defined if they are defined on left column and
% enought free place is available on the current column/page. 
% \end{enumerate}
%
% \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}{\if@kernel@version@MMXXV}
% This conditional code is used to check for the 2025 \LaTeX\ release.
%    \begin{macrocode}
\newif\if@kernel@version@MMXXV
\@ifundefined{@makespecialcolbox}{\@kernel@version@MMXXVtrue}{}
%    \end{macrocode}
% \end{macro}
%
%
% \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
%    \end{macrocode}
%
%    This code is used to check the \LaTeX\ release is too old.
%    \begin{macrocode}
\@defaultunits\expandafter\c@dblbotnumber\fmtversion\relax\@nnil
\ifnum\c@dblbotnumber<2015\relax
    \@latex@error{Too old LaTeX format (<2015)!\MessageBreak
                  Update LaTeX system!}\@ehd
\fi
%    \end{macrocode}
%
%    \begin{macrocode}
\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}
%    \begin{macrocode}
\g@addto@macro\@dblfloatplacement{\global\@dblbotnum\c@dblbotnumber}
%    \end{macrocode}
% \end{macro}
%
%
% \begin{macro}{\@addtodblcol}
% With adds to support dblfoat(s) placement on the current page and 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 \@deferlist
                    \@testwrongwidth\@currbox
                    \if@test
                    \else
                        %% [[ stfloats adds
                        \@bitor \@currtype \@dblbotlist
                        \if@test
                        \else
                        %% stfloats adds ]]
                            \@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
                        %% [[ stfloats adds
                        \fi
                        %% stfloats adds ]]
                    \fi
                \fi
            \fi
        \fi
        \if@insert
        \else
            %% [[ stfloats adds
            \@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 \@deferlist
                        \@testwrongwidth\@currbox
                        \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
            %% stfloats adds ]]
                \@cons\@deferlist\@currbox
            %% [[ stfloats adds
            \fi
            %% stfloats adds ]]
        \fi
    \endgroup
    }
%    \end{macrocode}
% \end{macro}
%
% 
% \begin{macro}{\@addtocurcol}
% With adds to support dblfoat(s) placement on the current page and at the page bottom. 
%    \begin{macrocode}
\def\@addtocurcol{%
    \@insertfalse
    \@setfloattypecounts
    \ifnum \@fpstype=8
    \else
        \ifnum \@fpstype=24
        \else
            \@flsettextmin
            \advance \@textmin \@textfloatsheight
            \@reqcolroom \@pageht
            \ifdim \@textmin>\@reqcolroom
                \@reqcolroom \@textmin
            \fi
            \advance \@reqcolroom \ht\@currbox
            \if@kernel@version@MMXXV \saved@reqcolroom \@reqcolroom\fi %% stfloats adds
            \ifdim \@colroom>\@reqcolroom
                \@flsetnum \@colnum
                \ifnum \@colnum>\z@
                    \@bitor\@currtype\@deferlist
                    %% \@testwrongwidth\@currbox % moved deeper
                    \if@test
                    \else
                        %% [[ stfloats adds
                        \@testwrongwidth\@currbox
                        \if@test
                            \if@firstcolumn
                                \@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{\@toplist\@midlist\@botlist\@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 \@colroom \@tempdima
                                                \global \advance \@dbltopnum \m@ne
                                                \@cons \@dbltoplist \@currbox
                                                \@inserttrue
                                            \fi
                                        \fi
                                    \fi
                                \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
                                                \@tempdima -\ht\@currbox
                                                \advance\@tempdima
                                                  -\ifx \@dblbotlist\@empty \dbltextfloatsep \else
                                                                    \dblfloatsep \fi
                                                \global \advance \@dbltoproom \@tempdima
                                                \global \advance \@colht \@tempdima
                                                \global \advance \@colroom \@tempdima
                                                \global \advance \@dblbotnum \m@ne
                                                \@cons \@dblbotlist \@currbox
                                                \@inserttrue
                                            \fi
                                        \fi
                                    \fi
                                \fi
                            \fi
                        \else
                        %% stfloats adds ]]
                            \@bitor\@currtype\@botlist
                            \if@test
                                \@addtobot
                            \else
                                \ifodd \count\@currbox
                                    \advance \@reqcolroom \intextsep
                                    \ifdim \@colroom>\@reqcolroom
                                        \global \advance \@colnum \m@ne
                                        \global \advance \@textfloatsheight \ht\@currbox
                                        \global \advance \@textfloatsheight 2\intextsep
                                        \@cons \@midlist \@currbox
                                        \if@nobreak
                                            \nobreak
                                            \@nobreakfalse
                                            \everypar{}%
                                        \else
                                            \addpenalty \interlinepenalty
                                        \fi
                                        \vskip \intextsep
                                        \box\@currbox
                                        \penalty\interlinepenalty
                                        \vskip\intextsep
                                        \ifnum\outputpenalty <-\@Mii \vskip -\parskip\fi
                                        \outputpenalty \z@
                                        \@inserttrue
                                    \fi
                                \fi
                                \if@insert
                                \else
                                    \@addtotoporbot
                                \fi
                            \fi
                        \fi
                    \fi
                \fi
            \fi
        \fi
    \fi
    \if@insert
    \else
        \@resethfps
        \@cons\@deferlist\@currbox
    \fi
    }%
%    \end{macrocode}
% \end{macro}
%
% 
% \begin{macro}{\@addtotoporbot}
% With adds to support dblfoat(s) placement on the current page and at the page bottom. 
%    \begin{macrocode}
\def\@addtotoporbot{%
    \@getfpsbit \tw@
    \ifodd \@tempcnta
        \@flsetnum \@topnum
        \ifnum \@topnum>\z@
            \@tempswafalse
            \@flcheckspace \@toproom \@toplist
            \if@tempswa
                %% [[ stfloats adds
                %% \@bitor\@currtype{\@midlist\@botlist}%
                \@bitor\@currtype{\@midlist\@botlist\@dblbotlist}%
                %% stfloats adds ]]
                \if@test
                \else
                    \@flupdates \@topnum \@toproom \@toplist
                    \@inserttrue
                \fi
            \fi
        \fi
    \fi
    \if@insert
    \else
        \@addtobot
    \fi
    }
%    \end{macrocode}
% \end{macro}
%
% 
% \begin{macro}{\@addtobot}
% With adds to support dblfoat(s) placement on the current page and at the page bottom. 
%    \begin{macrocode}
\def\@addtobot{%
    \@getfpsbit 4\relax
    \ifodd \@tempcnta
        \@flsetnum \@botnum
        \ifnum \@botnum>\z@
            \@tempswafalse
            \@flcheckspace \@botroom \@botlist
            \if@tempswa
                %% [[ stfloats adds
                \@bitor\@currtype{\@dblbotlist}%
                \if@test
                \else
                    \if@kernel@version@MMXXV\else \global \maxdepth \z@\fi
                %% stfloats adds ]]
                    \@flupdates \@botnum \@botroom \@botlist
                    \@inserttrue
                %% [[ stfloats adds
                \fi
                %% stfloats adds ]]
            \fi
        \fi
    \fi
    }
%    \end{macrocode}
% \end{macro}
%
% 
% \begin{macro}{\@doclearpage}
% With adds to support dblfoat(s) placement on the current page and 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
                %% [[ stfloats adds
                %%\xdef\@deferlist{\@dbltoplist\@deferlist}%
                \xdef\@deferlist{\@dbltoplist\@dblbotlist\@deferlist}%
                \global \let \@dblbotlist \@empty
                %% stfloats adds ]]
                \global \let \@dbltoplist \@empty
                \global \@colht \textheight
                \begingroup
                    \@dblfloatplacement
                    \@makefcolumn\@deferlist
                    \@whilesw\if@fcolmade \fi{\@outputpage
                                              \@makefcolumn\@deferlist}%
                \endgroup
            \else
                \vbox{}\clearpage
            \fi
        \fi
        \ifx\@deferlist\@empty \else\clearpage \fi
    \else
        \setbox\@cclv\vbox{\box\@cclv\vfil}%
        \@makecol\@opcol
        \clearpage
    \fi
    }
%    \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 %% kernel \@combinedblfloats version
    \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
    %% [[ stfloats adds
    %% \setbox\@outputbox \vbox to\textheight
    \setbox\@outputbox \vbox% to\textheight
    %% stfloats adds ]]
        {%
         \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
        {%
         \unvbox\@outputbox
         \vskip \dbltextfloatsep
         \ifnum \@dblbotnum>\m@ne
             \dblfigrule
         \fi
         \unvbox\@tempboxa
         \vskip -\dblfloatsep
         }%
    }
%    \end{macrocode}
% \end{macro}
%
%    Makes |\@makecol| current definition copy to |\org@makecol@stfloats|.
%    \begin{macrocode}
\global\let\org@makecol@stfloats\@makecol
%    \end{macrocode}
%
% \begin{macro}{\fn@makecol}
% Redefined macro |\@makecol| which puts footnotes below the bottom floats for the LaTeX release prior 2025.
%    \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{%
    %% available Socket Plugs: floats-space-footnotes, space-floats-footnotes
    \kernel@ifnextchar[{\fn@below@float}{\fn@below@float[floats-footnotes]}%
    }
\def\fn@below@float[#1]{%
    \if@kernel@version@MMXXV
        \AssignSocketPlug{build/column/outputbox}{#1}%
     \else
        \global\let\@makecol\fn@makecol
    \fi
    }
%    \end{macrocode}
% \end{macro}
%
%
% \begin{macro}{\fnunderfloat}
%    Switch to put footnotes under the bottom floats.
%    \begin{macrocode}
\def\fnunderfloat{%
    %% available Socket Plugs: space-footnotes-floats, footnotes-space-floats, footnotes-floats
    \kernel@ifnextchar[{\fn@under@float}{\fn@under@float[footnotes-floats-legacy]}%
    }
\def\fn@under@float[#1]{%
    \if@kernel@version@MMXXV
        \AssignSocketPlug {build/column/outputbox}{#1}%
    \else
        \global\let\@makecol\org@makecol@stfloats
    \fi
    }
%    \end{macrocode}
%    With 2025 \LaTeX\ release optional arguments are available to choose appropriate Socket Plugins.
%    |floats-space-footnotes|, |space-floats-footnotes| or |floats-footnotes| (default) in the case of \cs{fnbelowfloat}
%    and |space-footnotes-floats|, |footnotes-space-floats|, |footnotes-floats| or |footnotes-floats-legacy| (default)
%    in the case of \cs{fnunderfloat}.
% \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#2\p@\relax\@nnil
    \edef\f@size{\strip@pt\@tempdimb}%
    \@defaultunits\@tempskipa#3\p@\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
%</package>
% \fi
%
% \Finale
