% \iffalse meta-comment
%
% Copyright (C) 2019-2023 by Jan Hajer
% -----------------------------------
%
% This file may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3c
% 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.3c or later is part of all distributions of LaTeX
% version 2005/12/01 or later.
%
% \fi
%
% \iffalse

%<package>\NeedsTeXFormat{LaTeX2e}[2005/12/01]
%<package>\ProvidesPackage{hep-float}[2025/09/01 v1.4 Float adjustments]
%<documentation>\ProvidesFile{hep-float-documentation.tex}[2025/09/01 v1.4 hep-float documentation]
%
%<*documentation>
\documentclass{ltxdoc}

\renewcommand*\theCodelineNo{\rmfamily\tstyle\footnotesize\arabic{CodelineNo}}
\AtBeginEnvironment{macrocode}{\renewcommand*{\ttdefault}{clmt}}
\renewcommand*{\MacroFont}{\codestyle}
\AtBeginDocument{\DeleteShortVerb{\|}}
\AtBeginDocument{\MakeShortVerb{\"}}
\EnableCrossrefs
\CodelineIndex
\RecordChanges

\usepackage{hologo}

\usepackage[parskip,oldstyle,font=10pt]{hep-paper}
\bibliography{bibliography}
%</documentation>

%<*driver>
\expandafter\newif\csname ifshort\endcsname
\shortfalse
\begin{document}
\DocInput{hep-float-implementation.dtx}
\end{document}
%</driver>
%
% \fi
%
% \CheckSum{364}
%
% \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{v1.0}{2021/09/01}{Initial version of the style file.}
% \changes{v1.1}{2022/11/01}{Bug fixes.}
% \changes{v1.2}{2023/07/01}{Bug fixes.}
% \changes{v1.3}{2024/11/01}{Bug fixes.}
% \changes{v1.4}{2025/09/01}{Bug fixes.}
%
% \ifshort
%<*documentation>
% \fi
%
\GetFileInfo{hep-float.sty}

\title{The \software{hep-float} package\thanks{This document corresponds to \software{hep-float}~\fileversion.}}
\subtitle{Convenience package for float placement}
\author{Jan Hajer \email{jan.hajer@tecnico.ulisboa.pt}}
\date{\filedate}

% \ifshort
\begin{document}
% \fi

\newgeometry{vscale=.8, vmarginratio=3:4, includeheadfoot, left=11em, marginparwidth=4.6cm, marginparsep=3mm, right=7em}

\maketitle

\begin{abstract}
The \software{hep-float} package redefines some \hologo{LaTeX} float placement defaults and defines convenience wrappers for floats.
\end{abstract}

The \software{hep-float} package can be loaded with "\usepackage{hep-float}".

\DescribeEnv{figure}
\DescribeEnv{table}
Automatic float placement is adjusted to place a single float at the top of pages and to reduce the number of float pages, using the \hologo{LaTeX} macros.

"\setcounter{bottomnumber}{0}" \hfill no floats at the bottom of a page (default 1) \\
"\setcounter{topnumber}{1}" \hfill a single float at the top of a page (default 2) \\
"\setcounter{dbltopnumber}{1}" \hfill same for full widths floats in two-column mode \\
"\renewcommand{\textfraction}{.1}" \hfill large floats are allowed (default 0.2)\\
"\renewcommand{\topfraction}{.9}" \hfill (default 0.7) \\
"\renewcommand{\dbltopfraction}{.9}" \hfill (default 0.7) \\
"\renewcommand{\floatpagefraction}{.8}" \hfill float pages must be full (default 0.5)

The most useful float placement is usually archived by placing the float \emph{in front} of the paragraph it is referenced in first.
\DescribeMacro{local}
Additionally, manual float placement can be deactivated using the "local" package option.

\DescribeMacro{\raggedright}
The float environments have been adjusted to center their content.
The usual behaviour can be reactivated using "\raggedright".

\begin{table}
\begin{panels}{2}
\begin{verbatim}
\begin{panels}{2}
  code
\panel
  \begin{tabular}...\end{tabular}
\end{panels}
\end{verbatim}
\caption{Code for this panel environment.}
\label{tab:panels}
\panel
\begin{tabular}{cccc}
\toprule
\multicolumn{2}{c}{one}& \multicolumn{2}{c}{two} \\ \cmidrule(r){1-2} \cmidrule(l){3-4}
\multirow{2}{*}{a} & b & c & d \\
 & b & c & d \\
\bottomrule
\end{tabular}
\caption{The \protecting{"booktabs"} and \protecting{"multirow"} features.}
\label{tab:booktabs}
\end{panels}
\caption{Example use of the \protecting{"panels"} environment in Panel \subref{tab:panels} and the features from the \software{booktabs} and \software{multirow} packages in Panel \subref{tab:booktabs}.
} \label{tab:table}
\end{table}

\DescribeEnv{panels}
\DescribeMacro{\panel}
The "panels" environment makes use of the \software{subcaption} package \cite{subcaption}.
It provides sub-floats and takes as mandatory argument either the number of sub-floats (default~2) or the width of the first sub-float as fraction of the "\linewidth".
Within the "\begin{panels}"\oarg{vertical alignment}\marg{width} environment the "\panel" macro initiates a new sub-float.
In the case that the width of the first sub-float has been given as an optional argument to the "panels" environment the "\panel"\marg{width} macro takes the width of the next sub-float as mandatory argument.
The example code is presented in \cref{tab:panels}.
\DescribeMacro{\panelhspace}
\DescribeMacro{\panelvspace}
The spacing between the panels can be adjusted by adjusting the "\panelvspace" in terms of a "\linewidth" fraction "\renewcommand*{\panelhspace}"{fraction} and the "\panelvspace" in terms of a length "\renewcommand*{\panelvspace}"\marg{length}.

\DescribeEnv{tabular}
The \software{booktabs} \cite{booktabs} and \software{multirow} \cite{multirow} packages are loaded enabling publication quality tabulars such as in \cref{tab:booktabs}.

\DescribeMacro{\graphic}
\DescribeMacro{\graphics}
The \software{graphicx} package \cite{graphicx} is loaded and the "\graphic"\oarg{width}\marg{figure} macro is defined, which is a wrapper for the "\includegraphics"\marg{figure} macro and takes the figure width as fraction of the "\linewidth" as optional argument (default~1).
If the graphics are located in a sub-folder its path can be indicated by "\graphics"\marg{subfolder}.

% \ifshort
\printbibliography

\end{document}
%
%</documentation>
% \fi
%
% \StopEventually{
% \printbibliography
% \PrintChanges
% }
%
% \appendix
% \section{Implementation}
%
%<*package>
%
% Load the \software{kvoptions} package \cite{kvoptions} and define a "hepfloat" namespace.
%    \begin{macrocode}
\RequirePackage{kvoptions}
\SetupKeyvalOptions{
  family=hepfloat,
  prefix=hepfloat@
}
%    \end{macrocode}
%
% \begin{macro}{local}
% Provide the "local" option for reactivating the manual placement of floats.
%    \begin{macrocode}
\DeclareBoolOption[true]{local}
\DeclareComplementaryOption{global}{local}
%    \end{macrocode}
% \end{macro}
%
%    \begin{macrocode}
\ProcessKeyvalOptions*
%    \end{macrocode}
%
% Adjust the \hologo{LaTeX} float placement defaults
%    \begin{macrocode}
\setcounter{bottomnumber}{0} % 1
\setcounter{topnumber}{1} % 2
\setcounter{dbltopnumber}{1} % 2
\renewcommand*{\topfraction}{.9} % .7
\renewcommand*{\dbltopfraction}{.9} % .7
\renewcommand*{\textfraction}{.1} % .2
\renewcommand*{\floatpagefraction}{.8} % .5
%    \end{macrocode}
%
% \begin{environment}{figure}
% \begin{environment}{table}
% Center the content of "figure" and "table" environments.
% Ignore the manual placement if the "local" option is set to false.
%    \begin{macrocode}
\ifhepfloat@local%
  \renewenvironment{figure}[1][tbp]{%
    \@float{figure}[#1]\centering\small%
  }{\end@float}
  \renewenvironment{figure*}[1][tbp]{%
    \@dblfloat{figure}[#1]\centering\small%
  }{\end@dblfloat}
  \renewenvironment{table}[1][tbp]{%
    \@float{table}[#1]\centering\small%
  }{\end@float}
  \renewenvironment{table*}[1][tbp]{%
    \@dblfloat{table}[#1]\centering\small%
  }{\end@dblfloat}
\else%
  \renewenvironment{figure}[1][]{%
    \@float{figure}\centering\small%
  }{\end@float}
  \renewenvironment{figure*}[1][]{%
    \@dblfloat{figure}\centering\small%
  }{\end@dblfloat}
  \renewenvironment{table}[1][]{%
    \@float{table}\centering\small%
  }{\end@float}
  \renewenvironment{table*}[1][]{%
    \@dblfloat{table}\centering\small%
  }{\end@dblfloat}
\fi%
%    \end{macrocode}
% \end{environment}
% \end{environment}
%
%
% \subsection{floats}
%
% \begin{environment}{figures}
% \begin{macro}{\figure}
% Define the "figures" environment that places figures next to each other.
%    \begin{macrocode}
\newcommand*{\figurehspace}{0.0333}
\newcommand*{\figurevspace}{.5\baselineskip}
\newenvironment{figures}[2][b]{%
  \begin{figure}
  \let\oldcaption\caption
  \renewcommand*{\caption}[1]{%
    \renewcommand*{\caption}{\oldcaption}%
    \captionof{figure}{##1}\vspace{\figurevspace}%
  }
  \ifdim#2pt>1pt%
    \newcommand*{\hep@figure@space}{\figurehspace\linewidth/#2}%
    \renewcommand*{\figure}[1][b]{%
      \end{minipage}\hfill%
      \begin{minipage}[##1]{\linewidth/#2-\hep@figure@space}%
    }
    \begin{minipage}[#1]{\linewidth/#2-\hep@figure@space}
  \else%
    \newcommand*{\hep@figure@space}[1]{##1\linewidth*\real{\figurehspace}}
    \renewcommand*{\figure}[2][b]{%
      \end{minipage}\hfill%
      \begin{minipage}[##1]{##2\linewidth-\hep@figure@space{##2}}%
    }
    \begin{minipage}[#1]{#2\linewidth-\hep@figure@space{#2}}
  \fi%
}{%
\end{minipage}\end{figure}%
}
%    \end{macrocode}
% \end{macro}
% \end{environment}
% \begin{environment}{tables}
% \begin{macro}{\table}
% Define the "tables" environment that places tables next to each other.
%    \begin{macrocode}
\newcommand*{\tablehspace}{0.0333}
\newcommand*{\tablevspace}{.5\baselineskip}
\newenvironment{tables}[2][b]{%
  \begin{table}
  \let\oldcaption\caption
  \renewcommand*{\caption}[1]{%
    \renewcommand*{\caption}{\oldcaption}%
    \captionof{table}{##1}\vspace{\tablevspace}%
  }
  \ifdim#2pt>1pt%
    \newcommand*{\hep@table@space}{\tablehspace\linewidth/#2}%
    \renewcommand*{\table}[1][b]{%
      \end{minipage}\hfill%
      \begin{minipage}[##1]{\linewidth/#2-\hep@table@space}\centering%
    }
    \begin{minipage}[#1]{\linewidth/#2-\hep@table@space}\centering
  \else%
    \newcommand*{\hep@table@space}[1]{##1\linewidth*\real{\tablehspace}}
    \renewcommand*{\table}[2][b]{%
      \end{minipage}\hfill%
      \begin{minipage}[##1]{##2\linewidth-\hep@table@space{##2}}%
      \centering%
    }
    \begin{minipage}[#1]{#2\linewidth-\hep@table@space{#2}}%
    \centering
  \fi%
}{%
\end{minipage}\end{table}%
}
%    \end{macrocode}
% \end{macro}
% \end{environment}
%
% \subsection{Sub-floats}
%
% Load the \software{subcaption} package \cite{subcaption}.
%    \begin{macrocode}
\PassOptionsToPackage{subrefformat=parens}{subcaption}
\RequirePackage{subcaption}
\captionsetup{font=small}
\captionsetup[sub]{font=small}
%    \end{macrocode}
% Provide the macros for older versions of the \software{subcaption} package using the \software{xparse} \cite{xparse} package.
%    \begin{macrocode}
\RequirePackage{xparse}
\providecommand*\subcaption@minipage[2]{%
  \minipage#1{#2}\setcaptionsubtype\relax%
}
\ProvideDocumentEnvironment{subcaptionblock}{O{b}m}{%
  \caption@withoptargs\subcaption@minipage[#1]{#2}%
}{\endminipage}
%    \end{macrocode}
% \begin{environment}{panels}
%
% \begin{macro}{\panel}
% \begin{macro}{\panelhspace}
% \begin{macro}{\panelvspace}
% Define the "panels" environment and the "\panel" macro using the \software{calc} \cite{calc} and \software{etoolbox} \cite{etoolbox} packages.
%    \begin{macrocode}
\RequirePackage{calc}
\RequirePackage{etoolbox}
\newcommand*{\panelhspace}{0.0333}
\newcommand*{\panelvspace}{.5\baselineskip}
\newenvironment{panels}[2][b]{%
  \addtolength{\belowcaptionskip}{\panelvspace}%
%    \end{macrocode}
% Define an internal macro for global behaviour.
%    \begin{macrocode}
  \newcommand*{\begin@subcaption@minipage}[2][b]{%
%     \caption@withoptargs\subcaption@minipage[##1]{##2}%
    \subcaptionblock[##1]{##2}%
    \centering\vskip 0pt%
%     \renewcommand*{\hep@panel@vspace}{\panelvspace}%
  }%
%    \end{macrocode}
% Define the "\panel" macro for the case that the number of panels is given.
%    \begin{macrocode}
  \ifdim#2pt>1pt%
    \newcommand*{\hep@panel@space}{\panelhspace\linewidth/#2}%
    \newcommand*{\panel}[1][b]{%
      \endminipage\hfill\begin@subcaption@minipage[#1]{%
        \linewidth/#2-\hep@panel@space%
      }%
    }%
    \begin@subcaption@minipage[#1]{\linewidth/#2-\hep@panel@space}%
%    \end{macrocode}
% Define the "\panel" macro for the case that the width of the panel is given.
%    \begin{macrocode}
  \else%
    \newcommand*{\hep@panel@space}[1]{##1\linewidth*\real{\panelhspace}}%
    \newcommand*{\panel}[2][b]{%
      \endminipage\hfill\begin@subcaption@minipage[#1]{%
        ##2\linewidth-\hep@panel@space{##2}%
      }%
    }%
    \begin@subcaption@minipage[#1]{%
      #2\linewidth-\hep@panel@space{#2}%
    }%
  \fi%
}{%
\endsubcaptionblock%
\vspace{-\panelvspace}%
}
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{environment}
%
% \subsection{Tables}
%
% \begin{environment}{tabular}
% Enhance tabulars with the \software{booktabs} and \software{multirow} packages \cite{booktabs, multirow}.
%    \begin{macrocode}
\RequirePackage{booktabs}
\RequirePackage{multirow}
\newcommand*\header[1]{\multicolumn{1}{c}{#1}}
%    \end{macrocode}
% \end{environment}

% \subsection{Figures}
%
% \begin{macro}{\graphic}
% Provide the "\graphic" macro for the inclusion of figures using the \software{graphicx} package \cite{graphicx}.
%    \begin{macrocode}
\RequirePackage{graphicx}
\providecommand*{\tikzsetnextfilename}[1]{}
\newcommand*{\graphic}[2][1]{\tikzsetnextfilename{#2}{%
  \centering\includegraphics[width=#1\linewidth]{#2}\par%
}}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\graphics}
% Provide the "\graphics" macro for the inclusion of figures located in a subfolder.
%    \begin{macrocode}
\newcommand*{\graphics}[1]{\graphicspath{{./#1/}}}
%    \end{macrocode}
% \end{macro}
%
%</package>
%
% \section{Test}
%
%<*test>
%
%    \begin{macrocode}
\documentclass{article}

\usepackage[showframe]{geometry}
\usepackage{hep-float}

\begin{document}

\begin{figure}
\graphic[.5]{example-image-4x3}
\caption{test}
\end{figure}

\begin{figures}{.3}
\graphic{example-image-4x3}
\caption{one}
\figure{.4}
\graphic{example-image-16x9}
\caption{two}
\figure{.3}
\graphic{example-image-4x3}
\caption{three}
\figure{.3}
\graphic{example-image-4x3}
\caption{one}
\figure{.4}
\graphic{example-image-16x9}
\caption{two}
\figure{.3}
\graphic{example-image-4x3}
\caption{three}
\end{figures}

\begin{figures}{3}
\graphic{example-image-1x1}
\caption{one}
\figure
\graphic{example-image-1x1}
\caption{two}
\figure
\graphic{example-image-1x1}
\caption{three}
\figure
\graphic{example-image-1x1}
\caption{one}
\figure
\graphic{example-image-1x1}
\caption{two}
\figure
\graphic{example-image-1x1}
\caption{three}
\end{figures}


\begin{figure}
\begin{panels}{3}
\graphic{example-image-1x1}
\caption{a}
\panel
\graphic{example-image-1x1}
\caption{b}
\panel
\graphic{example-image-1x1}
\caption{c}
\panel
\graphic{example-image-1x1}
\caption{d}
\panel
\graphic{example-image-1x1}
\caption{e}
\panel
\graphic{example-image-1x1}
\caption{f}
\end{panels}
\caption{Panels}
\end{figure}

\begin{figure}
\begin{panels}{.3}
\graphic{example-image-4x3}
\caption{a}
\panel{.4}
\graphic{example-image-16x9}
\caption{b}
\panel{.3}
\graphic{example-image-4x3}
\caption{c}
\panel{.225}
\graphic{example-image-1x1}
\caption{d}
\panel{.4}
\graphic{example-image-16x9}
\caption{e}
\panel{.225}
\graphic[.8]{example-image-1x1}
\caption{f}
\end{panels}
\caption{Panels 2}
\end{figure}

\begin{tables}{2}
\begin{tabular}{cc}\toprule
a & b \\
\bottomrule\end{tabular}
\caption{a}
\table
\begin{tabular}{cc}\toprule
a & b \\
\bottomrule\end{tabular}
\caption{b}
\end{tables}

\end{document}
%    \end{macrocode}
%
%</test>
%
% \section{Readme}
%
%<*readme>
%
%    \begin{macrocode}
# The `hep-float` package

Convenience package for float placement

## Introduction

The `hep-float` package redefines some `LaTeX` float placement defaults
and defines convenience wrappers for floats. The `hep-float` package can
be loaded with `\usepackage{hep-float}`.

## Author

Jan Hajer

## License

This file may be distributed and/or modified under the conditions of the
`LaTeX` Project Public License, either version 1.3c 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.3c or later is
part of all distributions of LaTeX version 2005/12/01 or later.
%    \end{macrocode}
%
%</readme>
%
% \Finale

\endinput

% \PrintIndex
% makeindex -s gglo.ist -o hep-float-implementation.gls hep-float-implementation.glo
% makeindex -s gglo.ist -o hep-float-implementation.ind hep-float-implementation.idx
