\def\filename{endfloat}
\def\fileversion{v2.7}
\def\filedate{2019/04/15}
\def\docdate{2019/04/15}
%
% \CheckSum{872}
%% \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         \~}
%%
%
% \iffalse
%% Description: LaTeX style to put figures and tables at end of article
%% Keywords: LaTeX, style-option, float, figure, table
%% Authors: James Darrell McCauley <jdm5548@diamond.tamu.edu>,
%%          Jeff Goldberg <jeffrey@goldmark.org>,
%%          Axel Sommerfeldt <axel.sommerfeldt@f-m.fm>
%% Maintainer: -none-
%% Latest Version: Version 2.7 <April 2019>
% \fi
%
% \DoNotIndex{\documentclass,\usepackage,\hfuzz,\small,\tt,\begin,\end}
% \DoNotIndex{\NeedsTeXFormat,\filedate,\fileversion,\DoNotIndex}
% \DoNotIndex{\def,\edeg,\xdef,\gdef,\let,\divide,\advance,\multiply}
% \DoNotIndex{\",\-,\H,\',\\,\{,\},\^,\ }
% \DoNotIndex{\begingroup,\endgroup,\catcode,\global,\relax,\space}
% \DoNotIndex{\string,\immediate}
% \DoNotIndex{\normalsize,\large,\Large,\small,\tiny,\bf}
% \DoNotIndex{\@z}
% \DoNotIndex{\ifthenelse,\and,\equal,\whiledo,\if,\fi,\else}
% \DoNotIndex{\CodelineIndex,\EnableCrossrefs,\DisableCrossrefs}
% \DoNotIndex{\DocInput,\AltMacroFont}
% \DoNotIndex{\RecordChanges,\OnlyDescription}
% \DoNotIndex{\@input,\@namedef,\@whilesw,\clearpage,\ifnum,\ifx}
% \DoNotIndex{\jobname,\message,\MessageBreak,\newcommand}
% \DoNotIndex{\protect,\providecommand,\ProvidesPackage,\renewcommand}
% \DoNotIndex{\section,\setlength}
%
% \changes{v0.1}{1992/02/25}{created by Darrell McCauley (jdm)}
% \changes{v1.0}{1992/03/01}{cleaned up and released jdm}
% \changes{v2.0}{1992/06/02}{incorporated changes made by bj (see v1.99). jdm}
% \changes{v2.1}{1994/06/25}{Use LaTeX2e documentation form. jpg}
% \changes{v2.1b}{1994/07/03}{Modify documentation -jpg}
% \changes{v2.1c}{1994/07/20}{Modify documentation -jpg}
% \changes{v2.3}{1995/03/05}{Fix figure* bug and docs -jpg}
%
% \newcommand*{\pkg}[1]{\textsf{#1}}
% \newcommand*{\file}[1]{\texttt{#1}}
% \newcommand*{\cls}[1]{\textsl{#1}}
% \newcommand{\bs}{\texttt{\char'134}}
% \newcommand*\x{\discretionary{-}{}{}}
%
% \title{The \texttt{\filename} package\thanks{This file
%        has version number \fileversion, last
%        revised \filedate, documentation dated \docdate.}}
% \author{James Darrell McCauley
%  \and Jeff Goldberg\thanks{JPG (jeffrey@goldmark.org)
%    is responsible for all modifications
%    from version 2.1 upwards.  Since there is almost no original code
%    left, he has claimed co-authorship from version 2.4.}
%  \and Axel Sommerfeldt\thanks{Axel Sommerfeldt (axel.sommerfeldt@f-m.fm)
%    is responsible for all modifications from version 2.5 to 2.7.}
% }
% 
% \date{\docdate}
%
% \maketitle
%
% \begin{abstract}
% The purpose of this package is to put all figures on pages by themselves
% at the end of an article in a section named Figures. Likewise for tables.
% Markers, like ``[Figure 3 about here]'' appear in the text (by default)
% near where the figure (or table) would normally have occurred.
% This is usually required when preparing submissions to journals.
%
% A number of package options and other mechanisms are provided to
% give the user control over various aspects of the package's behavior.
%
% Loading this package will change the output of \LaTeX.
% \end{abstract}
% 
% \tableofcontents
% \section{In many voices}
%
% \changes{v2.1}{1994/06/25}{Use LaTeX2e documentation form. jpg}
% \changes{v2.1}{1994/06/25}{Modify documentation text. jpg}
% This documentation was put in its current form by Jeff Goldberg,
% who has tried to indicate when he is (when
% I am) speaking.   See \autoref{sec:history} for more detail.
% However, both the original author, Darrell McCauley, and
% a major contributor, Brian Junker, use the first person
% singular.  In this version I no longer work to keep it clear
% who wrote what portions of the documentation and the code, but
% have allowed things to blend together a little more, since the
% constant interpolations were hindering readability.  Generally
% the user documentation was written by Darrell MaCauley (jdm),
% but anything that refers to \LaTeXe\ features was added
% by me (jpg).  Also, where you find spelling and typographical
% errors, you are likely to be reading my text.
%
% Axel Sommerfeldt has added a section about dealing with
% other floating environments than |figure| and |table|, and
% made adaptions to other sections affected by the
% changes of version 2.5, 2.6, and 2.7.
% Furthermore he has added paragraphs about his \pkg{caption}
% package in section \ref{sec:removingcaptions} ``Removing captions''.
%
% This documentation is long.  Most users won't need to read beyond
% the first few pages, but there are a number of ways to customize
% the behavior of \pkg{endfloat} and these are detailed as the
% documentation progresses.  The package is unusual in the way
% it does its job, so it can interact with other packages and
% other aspects of \LaTeX\ in ways that may be surprising.
% Although the package is flexible in some respects, it is
% highly limited in others.
% Tools and hints are provided to help you control these interactions,
% but these do require some reading.  But you only need to take
% a look at these sections when the need arises.
%
% \changes{v2.1}{1994/06/25}{Use LaTeX2e documentation form. jpg}
% \changes{v2.1}{1994/06/25}{Modify documentation text. jpg}
%
% \section{Why write this package?}
% 
% Many journals require tables and figures to be separated from the text
% when you submit those ugly double spaced copies.  They also usually want
% a list of figures/tables before these sections (capability added in v2.0,
% control through package options added in v2.2).
%
% I (jdm) am writing a set of styles that look exactly like a journal, but just
% by adding one style option, I wanted the user to meet the requirements
% for formatting submissions. I encourage others to do the
% same.\footnote{Note that jdm, working in old \LaTeX209
% did not have the distinction between class, package and package
% options available to him at the time he made his comment.
% The most coherent way to do what is needed is to use a class,
% let's say \cls{submit}, which would load \pkg{endfloat} and
% presumably some double spacing packages among other things.  Once
% that class is defined, then other classes which are specific
% to particular journals can be defined.} 
%
% \section{Usage}
% \subsection{Loading}
% \changes{v2.1}{1994/06/25}{Modify documentation text. jpg}
% Just include the package in your preamble
% \begin{quote}
%   |\usepackage[|\ldots|]{endfloat}|
% \end{quote}
% 
% Note that versions 2.1 and beyond will no longer work with
% \LaTeX209.  Get your administrator to upgrade your site
% to the new standard, \LaTeXe.  Although version~2.0 (a \LaTeX209 version)
% will usually work with \LaTeXe, it will not do so in combination
% with certain other packages.
%
% \changes{v2.1}{1994/06/25}{Modify documentation text. jpg}
% \changes{v2.1b}{1994/07/03}{Modify documentation -jpg}
%
% \subsection{What it does}
%
% Merely loading the package will get it working.  Loading it will
% have \LaTeX\ produce two extra files with
% \texttt{.ttt} and \texttt{.fff} extensions
% (for tables and figures, respectively).
%
% This puts all figures and tables at the end of your document
% each on a page by itself\footnote{This
%    is the default.  See \autoref{sec:separator} to see how
%    to have multiple floats per page.}
% and creates a List of Figures and/or List of Tables section
% at the end (when appropriate and controllable by options).
% The floats are processed using |\baselinestretch{1}| irrespective
% of what is used in the document as a whole.  This can be
% reset to, say 1.4, by using
% \begin{quote}
%   |\AtBeginDelayedFloats{%|\\
%   |  \renewcommand{\baselinestretch}{1.4}}|
% \end{quote}
% which is available from version 2.4.  See \autoref{sec:hooks}
% for more discussion.
%
% It also leaves notes in the text (i.e., ``[Figure 4 about here.]'').
% If you would rather not have these, this can be turned off by
% using the |nomarkers| options.  If you
% do not like the look of this marker, you can change
% their text and appearance
% (see \autoref{sec:language}).
%
% \subsection{Starred floats}
% The |figure*| and |table*| versions are supported by the current
% version.\footnote{I (jpg) very stupidly introduced a bug in version 2.2
% which wrecked |figure*|.  It has been brought to my attention and
% fixed.  I offer my thanks and my apologies.}
%
% \subsection{Options} \label{sec:options}
% 
% Under version 2.2 and higher,
% the \pkg{endfloat} package uses package options.  The options
% are summarized in table~\ref{tab:options}.  In addition to these
% options, see sections~\ref{sec:extra} and~\ref{sec:hooks} for more
% advanced ways of controlling output.
%
% \begin{table}
% \caption{Options and defaults} \label{tab:options}
% \smallskip
% \begin{tabular}{lcll}
% \hline
% \multicolumn{1}{c}{Option} &
% \multicolumn{1}{c}{Default}&
% \multicolumn{1}{c}{Default implication} &
% \multicolumn{1}{c}{Descriptions} \\
% \hline
% |nofiglist|    & off  &                          & no list of figures          \\
% |notablist|    & off  &                          & no list of tables           \\
% |nolists|      &      & |nofiglist|, |notablist| & neither list                \\
% |figlist|      & on   &                          & list of figures             \\
% |tablist|      & on   &                          & list of tables              \\
% |lists|        &      & |figlist|, |tablist|     & list of tables and figures  \\
% |nofighead|    & on   &                          & no `Figures' section header \\
% |notabhead|    & on   &                          & no `Tables' section header  \\
% |noheads|      &      & |nofighead|, |notabhead| & neither of the headers      \\
% |fighead|      & off  &                          & `Figures' section header    \\
% |tabhead|      & off  &                          & `Tables' section header     \\
% |heads|        &      & |fighead|, |tabhead|     & Both section headers        \\
% |markers|      & on   &                          & Place markers in the text   \\
% |nomarkers|    & off  &                          & no markers in text          \\
% |tablesfirst|  & off  &                          & Put tables before figures   \\
% |figuresfirst| & on   &                          & Put figures before tables   \\
% |tablesonly|   & off  &                          & Handle tables only          \\
% |figuresonly|  & off  &                          & Handle figures only         \\
% |notables|     & off  &                          & Disregard tables            \\
% |nofigures|    & off  &                          & Disregard figures           \\
% |disable|      &      &                          & Disables the package        \\
% \hline
% \end{tabular}
% \end{table}
%
% The list of tables and figures can be suppressed by using the
% \texttt{nofiglist} and \texttt{notablist} options.  Both
% can be suppressed with the \texttt{nolists} option.\footnote{In
% versions prior to 2.2 the command for turning off the lists turned
% on the headers (the equivalent of the |heads| option).  That is
% not the case with these options.  The |lists| and the |heads|
% options are entirely orthogonal.}
% The default is \texttt{lists}.
%
% A section header for `Tables' and `Figures' can be produced by using
% the option |tabhead|, |fighead|, respectively, and |heads| for both.
% The defaults are |notabhead| and |nofighead|.
%
% If you want the headers instead of the lists you would need to 
% use both the |nolists| and the |heads| options.
%
% If you want to suppress the markers in the text, use the
% option \texttt{nomarkers}.  The default is
% \texttt{markers}.
%
% Normally the figures at the end appear before the tables.
% This can be changed by using the option \texttt{tablesfirst}.
% The default is \texttt{figuresfirst}.
%
% If nothing else if specified, both figures and tables will be handled
% by the \pkg{endfloat} package.
% This can be altered by usage of the options |tables|\x|only|
% resp. |figures|\x|only|.
% 
% \medskip
%
% A typical usage might be something like
% \begin{quote}
%   |\documentclass[a4paper,12pt]{article}|\\
%   |\usepackage[nolists,tablesfirst]{endfloat}|\\
%   \ldots\\
%   |\begin{document}|
% \end{quote}
% which would suppress the list of tables and figures as well as
% the corresponding section headers, and would have the tables
% precede the figures.
%
% \subsubsection{Contradictions and dilemmas}
%
% It is not recommended that one specify conflicting options, but
% if you insist, here are the rules.  In table~\ref{tab:options} the third
% column indicates what other options are implied by default.  That
% is |heads| turns on |fighead| by default, but that implication
% can be overruled by explicitly stating the |nofighead| option.
%
% \begin{enumerate}
% \item \label{rule:elsewhere}
%   When one option is more specific than the other the more specific
%   one holds true, and the more general will only partially hold.
%   So specifying \texttt{fighead} and \texttt{noheads} will be the
%   same as saying \texttt{fighead} and \texttt{notabhead}.
% \item
%   The order in which the options appear is relevant.
% \item
%   If some of the obsolete commands for these options are used
%   all bets are off on these interactions.
% \end{enumerate}
%
% \changes{v2.1}{1994/06/25}{Modify documentation text. jpg}
% 
% \section{Modifying marker text}\label{sec:language}
%
% \changes{v1.0b}{1992/03/10}{adaptation for LaTeX 2.09 and
%                      international namegiving by Ronald Kappert
%                      R.Kappert@urc.kun.nl}
% \DescribeMacro{\tableplace}
% \DescribeMacro{\figureplace}
% \DescribeMacro{\floatplace}
%  Announcements in any language can be generated by 
%   using |\re|\x|new|\x|command| to redefine |\table|\x|place| and
%   |\figure|\x|place|, or by redefining |\float|\x|place|.
%
%  The defaults are
% \changes{v2.1}{1994/06/25}{Use LaTeX2e documentation form. jpg}
% \begin{quote}
%   |\newcommand\figureplace{\floatplace{figure}}|\\
%   |\newcommand\tableplace{\floatplace{table}}|\\
%   \\
%   |\newcommand\floatplace[1]{%|\\
%   |  \begin{center}|\\
%   |    [\csname #1name\endcsname~%|\\
%   |     \csname thepost#1\endcsname\ about here.]|\\
%   |  \end{center}}|
% \end{quote}
%
% These redefinitions may be placed in the \file{endfloat.cfg}
% file (see \autoref{sec:extra} for more information).
%
% WARNING! The name of the counters |post|\x|tbl| and |post|\x|fig|
% have been changed to |post|\x|table| and |post|\x|figure| in version 2.5.
% However, |\the|\x|post|\x|tbl| and |\the|\x|post|\x|fig| are still available for
% usage inside redefined versions of |\table|\x|place| and |\figure|\x|place|
% so old documents (hopefully) will still work.
%
% Hooks for the \texttt{babel} package are not (yet) provided, so
% you will have to do things by hand:
% \begin{quote}
%   |\renewcommand{\figurename}{Abra} % if no babel|\\
%   |\renewcommand{\figureplace}{%|\\
%   |  \begin{center}|\\
%   |    [A(z) \thepostfigure.~\figurename itt legyen.]|\\
%   |  \end{center}}|
% \end{quote}
% 
% If you wish to change the name of the figure or table section
% heading, you can do that in the usual way (via the \texttt{babel}
% package, or by redefining |\figure|\x|section| and |\table|\x|section|
% directly).
%
% \DescribeMacro{\efloatheading}
% Endfloat uses |\efloat|\x|heading| for applying this heading.
% By default it is defined to use |\mark|\x|both| for that purpose:
% \begin{quote}
%   |\newcommand\efloatheading[1]{%|\\
%   |  \markboth{\uppercase{#1}}{\uppercase{#1}}}|
% \end{quote}
% forcing the headings applied in uppercase.  You may change this by using
% |\re|\x|new|\x|command| to redefine |\efloat|\x|heading| as you wish:
% \begin{quote}
%   |\renewcommand\efloatheading[1]{|\meta{code that applies \#1 as heading}|}|
% \end{quote}
% It makes most sense to place such a redefinition in the configuration
% file (see \autoref{sec:extra}).
%
% \changes{v2.1}{1994/06/25}{Modify documentation text. jpg}
% \changes{v1.0b}{1992/03/10}{adaptation for LaTeX 2.09 and
%                      international namegiving by Ronald Kappert
%                      R.Kappert@urc.kun.nl}
% \changes{v1.99}{1992/05/27}{extensive changes by bj}
%
% \section{Commands before processing delayed material} \label{sec:hooks}
%
% \DescribeMacro{\AtBeginFigures}
% \DescribeMacro{\AtBeginTables}
% \DescribeMacro{\AtBeginDelayedFloats}
% If you wish to have some more control over how the tables and figures
% are processed, you can make use of the commands |\At|\x|Begin|\x|Delayed|\x|Floats|,
% |\At|\x|Begin|\x|Figures|, and |\At|\x|Begin|\x|Tables|.
% If you wanted to ensure that the tables begin
% on a recto page, you could for example say something like
% |\At|\x|Begin|\x|Tables{\clear|\x|double|\x|page}| in the preamble  of your
% document.\footnote{It is difficult for me to imagine a situation where
% one would be using \pkg{endfloat} and the class option \texttt{twoside},
% without which \texttt{\bslash cleardoublepage}
% is the same as \texttt{\bslash clearpage}, together.
% Another, more realistic example would be to adjust the
% \texttt{\bslash baselinestretch} for table and figure processing.}
% Material in |\At|\x|Begin|\x|Tables| and |\At|\x|Begin|\x|Figures| is processed after
% the list of tables or list of figures (if those options are set) and
% just before the files with the delayed material in input.  These are
% also processed after the original definitions of the table and figure
% environments are restored.
%
% These commands can be used either in the preamble of your document,
% or in the \file{endfloat.cfg} file (see \autoref{sec:extra}).
% 
% \section{Insert own code into the delayed material} \label{sec:addto}
%
% \DescribeMacro{\addtodelayedfloat}
% |\addtodelayedfloat| will add own code to delayed floats.
% For example
% \begin{quote}
%   |\addtodelayedfloat{figure}{\clearpage}|
% \end{quote}
% will add |\clear|\x|page| to the delayed figures.
%
% Note: The argument will be stored detokenized to the intermediate
% file.
% If this is not what you want, use the starred variant
% |\add|\x|to|\x|delayed|\x|float*| instead, for example
% \begin{quote}
%   |\addtodelayedfloat{figure}{\sometext}|
% \end{quote}
% will add |\some|\x|text| to the delayed figures while
% \begin{quote}
%   |\addtodelayedfloat*{figure}{\sometext}|
% \end{quote}
% will add the current content of |\some|\x|text| to the delayed
% figures.
%
% \section{Processing delayed floats before the end}
%
% \DescribeMacro{\processdelayedfloats}
% If you wish to process
% the floats prior to the end of the document, you may do so with the
% |\processdelayedfloats| command, which has been made available from
% version~2.4 onward.  This will process all of the
% unprocessed tables and figures up to that point.  You may wish
% to use this command at the end of every chapter for example.
%
% If you do use this, there are several points which should be noted.
% \begin{enumerate}
% \item All outstanding floats will be processed at the
%   end of the document.
% \item If you use the |lists| option you will get a list of all
%   tables and figures in the document.  Not just the ones for
%   the current chapter.  Using lists may have other odd consequences.
% \item It is your responsibility to set |\table|\x|place| and
%   |\figure|\x|place| correctly, as well as to possibly reset
%   the counters |\the|\x|post|\x|table| and |\the|\x|post|\x|figure| (\autoref{sec:language})
%   as you wish.  If you do not reset them, they will continue to
%   increase throughout the document.
% \end{enumerate}
% 
% \section{Several floats per page}\label{sec:separator}
%
% \DescribeMacro{\efloatpreamble}
% Endfloat applies |\efloat|\x|preamble| before typesetting the very first
% (delayed) float in their respective files.
% By default it is defined to do nothing.
% You may change this by using
% |\re|\x|new|\x|command| to redefine |\efloat|\x|preamble| as you wish.
%
% \medskip
%
% \DescribeMacro{\efloatseparator}
% Endfloat places |\efloat|\x|separator| between the floats in their
% respective files.  By default it is defined to be |\clear|\x|page|
% forcing one float per page.  You may change this by using
% |\re|\x|new|\x|command| to redefine |\efloat|\x|separator| as you wish.
% One possibility, suggested by a user, is
% \begin{quote}
%   |\renewcommand{\efloatseparator}{\mbox{}}|
% \end{quote}
%
% \DescribeMacro{\efloatpostamble}
% Endfloat applies |\efloat|\x|postamble| after typesetting the very last
% (delayed) float in their respective files.
% By default it is defined to be |\efloat|\x|separator|.
% You may change this by using
% |\re|\x|new|\x|command| to redefine |\efloat|\x|postamble| as you wish.
%
% \iffalse
% \medskip
% It makes most sense to place such redefinitions in the configuration
% file (see \autoref{sec:extra}).
% \fi
%
% \medskip
%
% \DescribeMacro{\efloattype}
% If you need to know what floats are actually processed, you could draw on
% |\efloat|\x|type| which is set to the environment type currently processed,
% for example |figure| or |table|.
%
% \section{Other customizations}\label{sec:customizations}
%
% \DescribeMacro{\efloatbegin}
% \DescribeMacro{\efloatend}
% |\efloat|\x|begin| will be typeset before the processing of each delayed
% float while |\efloat|\x|end| will be typeset after each processing.
% By default the first is defined to be |\clear|\x|page|, the second is
% defined to do nothing.
%
% \medskip
%
% \DescribeMacro{\efloatbeginlist}
% \DescribeMacro{\efloatendlist}
% |\efloat|\x|begin|\x|list| will be typeset before each list of delayed floats
% while |\efloat|\x|end|\x|list| will be typeset after each list.
% By default the first is defined to be |\normal|\x|size|, the second is
% defined to be |\clear|\x|page|.
%
% \section{Configuration file and other end environments}\label{sec:extra}
%
% Many users have suggested options to the package which are
% often journal specific.  Many of the suggestion options are
% also not specific to how \pkg{endfloat} itself works, but to how
% captions and lists of figures and tables are to appear.
% Instead of burdening the package with options that, in the
% end, are specific to particular journals, I have added a
% configuration file for \pkg{endfloat} which will allow
% you to make many of these redefinitions without
% having to further increase the size of \pkg{endfloat} itself.
%
% As of version 2.4 \pkg{endfloat} will look for a file
% called \file{endfloat.cfg} in \TeX's input path.  If it
% is found, it will be included after \pkg{endfloat} is loaded.
% The purpose of this configuration file is to allow the user to
% include additional definitions related to \pkg{endfloat}.
% For example, any redefinition of \verb"\floatplace" can
% go in this file, so that the preamble does not need to
% be filled with material that only makes sense when
% \pkg{endfloat} is loaded.\footnote{However, if you find yourself
% placing other material (such as double spacing or modification
% of title page and abstract) into \file{endfloat.cfg} to
% simulate a journal submission class, you should really
% do the right thing and create a journal submission class.
% Creating a minor class (one that loads an existing class
% such as \cls{article} is not difficult.  See the
% \textit{Class Guide}\cite{LT3:ClassGuide} for instructions.  Future versions
% of the \pkg{endfloat} documentation may include a sample.}
%
% The configuration file can also provided
% so that the user could specify environments other
% than |figure| and |table| (and their |*|-ed counterparts) which can
% be delayed until the end of the document.
%
% \subsection{Modified figures and tables}
%
% As stated in \autoref{sec:envnames}, \pkg{endfloat} will
% utterly fail if one does something like
% \begin{quote}
%   |\newenvironment{foo}{...\begin{table}...}|\\
%   |    {...\end{table}...}|
% \end{quote}
% because \pkg{endfloat} will make |\begin{table}| go into a verbatim
% like mode and look for the literal string |\end{table}|, which it
% will not see in |\end{foo}|.
%
% However, inserting the following code into the document preamble
% may be worth a try:
% \begin{quote}
%   |\DeclareDelayedFloatFlavor{foo}{table}|
% \end{quote}
% This tells the \pkg{endfloat} package that |foo| should be treated as |table|,
% at least from \pkg{endfloat}'s point of view.
% If you keep your fingers crossed this may actually work.
%
% \subsection{Environments based on figures and tables}\label{sec:flavor}
%
% The \pkg{rotating} package\cite{RahBar:rotating}
% contains definitions of environments
% |side|\x|ways|\x|figure| and |side|\x|ways|\x|table|\footnote{These
% require support from the dvi driver, such as \texttt{dvips}.},
% and it would be nice to have these work in documents which also
% use \pkg{endfloat}.
%
% This can be archived with
% \begin{quote}
%   |\DeclareDelayedFloatFlavor{sidewaysfigure}{figure}|\\
%   |\DeclareDelayedFloatFlavor{sidewaystable}{table}|
% \end{quote}
% after loading both, the \pkg{endfloat} and \pkg{rotating} package.
%
% The general syntax of |\Declare|\x|Delayed|\x|Float|\x|Flavor| is
% \begin{quote}
%   |\DeclareDelayedFloatFlavo|(|u|)|r|\marg{environment}\marg{is a variant of}
% \end{quote}
% so for example
% \begin{quote}
%   |\usepackage{endfloat,threeparttable}|\\
%   |\DeclareDelayedFloatFlavour{threeparttable}{table}|
% \end{quote}
% makes the |three|\x|part|\x|table| environment known to the \pkg{endfloat} package
% as a variant of the floating environment |table|.
%
% This works with the |long|\x|table| environment as well:
% \begin{quote}
%   |\usepackage{endfloat,longtable}|\\
%   |\DeclareDelayedFloatFlavour*{longtable}{table}|
% \end{quote}
% Note that we use the starred variant |\Declare|\x|Delayed|\x|Float|\x|Flavor*|
% here which only redefines |long|\x|table| to be delayed, but leaves the unnumbered
% |long|\x|table*| environment (provided by the \pkg{caption} resp.~\pkg{ltcaption} package)
% unchanged.
%
% \subsubsection{The ctable package}\label{sec:ctable}
%
% Since |\ctable| offered by the \pkg{ctable} package\cite{Dekker:ctable}
% is a command and not an environment, it cannot be declared as delayed
% environment straight-ahead, i.e.
% \begin{quote}
%   |\DeclareDelayedFloatFlavor{ctable}{table}|
% \end{quote}
% is not sufficient here since the \pkg{endfloat} package is only
% capable of delaying environments.
% A dirty (but working) solution is using |ctable| as environment
% and not as command. An example document:
% \begin{quote}
%   |\documentclass{book}|\\
%   |\usepackage{ctable}|\\
%   |\usepackage{endfloat}|\\
%   |\DeclareDelayedFloatFlavor{ctable}{table}|\\
%   |\begin{document}|\\
%   ||\\
%   |\begin{ctable}[|\\
%   | cap=Test,|\\
%   | caption=Test,|\\
%   | ]{cc}{|\\
%   | \tnote[]{}|\\
%   | }{\FL|\\
%   | A & B \ML|\\
%   | 1 & 2 \NN|\\
%   | 3 & 4 \LL}|\\
%   |\end{ctable}|\\
%   ||\\
%   |\end{document}|
% \end{quote}
%
% \subsection{Other floating environments}\label{sec:other}
%
% By using |\new|\x|float| offered by the \pkg{float} package\cite{Lingnau:float},
% or |\Declare|\x|New|\x|Float|\x|Type| offered by the \pkg{floatrow} package\cite{Lapko:floatrow},
% or |\Declare|\x|Floating|\x|Environment| offered by the \pkg{newfloat}
%  package\cite{Sommerfeldt:newfloat}
% one can define new floating environments. These environments
% can be made supported by the \pkg{endfloat} package, too, e.g.
% \begin{quote}
%   |\usepackage{newfloat,endfloat}|\\
%   |\DeclareFloatingEnvironment{map}|\\
%   |\DeclareDelayedFloat{map}{Maps}|
% \end{quote}
% will define a new floating environment called ``map'' and
% set up the \pkg{endfloat} package to handle this environment, too.
%
% The trick is using the command
% \begin{quote}
%   |\DeclareDelayedFloat|\marg{float}\oarg{file extension}\marg{heading}
% \end{quote}
% which makes the new floating environment known to the \pkg{endfloat} package.
%
% The \meta{file extension} specifies the file where the floating environments
% will be stored, like |fff| for figures and |ttt| for tables.
% If no \meta{file extension} is given, |ef|\meta{float} will be used, e.g. |efmap|
% will be used as file extension in the code example above.
%
% The \meta{heading} will be used for the section header, if selected.
% If |\list|\meta{float}|name| is not defined, it will be used for the list heading, too.
%
% The package options |nolists|, |lists|, |noheads|, and |heads| will be respected
% for new environments, too. But if you would like to set individual options for
% them, you can do so by using
% \begin{quote}
%   |\SetupDelayedFloat|\marg{float}\marg{options}
% \end{quote}
% where options are |nolist|, |list|, |nohead|, and |head| analogous to the package
% options for figures and tables specified in section \ref{sec:options}.
%
% By the way, |\Setup|\x|Delayed|\x|Float| works for the environments |figure| and
% |table|, too, so
% \begin{quote}
%   |\usepackage[nofiglist,fighead]{endfloat}|
% \end{quote}
% is identical to
% \begin{quote}
%   |\usepackage{endfloat}|\\
%   |\SetupDelayedFloat{figure}{nolist,head}|
% \end{quote}
% and (if you prefer using key-value options instead)
% \begin{quote}
%   |\usepackage{endfloat}|\\
%   |\SetupDelayedFloat{figure}{list=false,head=true}|
% \end{quote}
%
% \subsection[Changing list and caption appearance]
%     {Changing the appearence of ``lists of'' and captions}
%
% When the |lists| option is used, the \LaTeX\ commands |\list|\-|of|\-|tables|
% and |\list|\-|of|\-|figures| are called.  These produce lists indicating
% the page number that each table or figure appear on.  With \pkg{endfloat}
% in use this information is usually superfluous, and -- rumor has it --
% undesirable by at least some journals.
% What seems to be required
% when using lists is that either the list does not the figure or table number,
% and/or the caption doesn't not contain the caption text.
%
% This section provides a few rudimentary samples of what you might
% put into the configuration file to get these effects.  I have chosen
% not to make these package options, because they are often too journal
% specific.  The availability of the configuration file means that
% you can put this things there, and the differences between \pkg{endfloat}
% using and non-\pkg{endfloat} using \LaTeX\ source documents is minimal.
%
% \subsubsection{Removing captions}
% \label{sec:removingcaptions}
%
% \DescribeMacro{\captionsetup}
% If you have included the \pkg{caption} package in your document
% you can omit the caption text by adding
% \begin{quote}
%  |\captionsetup{labelsep=none,textformat=empty}|
% \end{quote}
% to the preamble of your document.~\footnote{%
% This needs at least version $3.2$ of the \pkg{caption} package.}
% If this should be done for figures (or tables) only one can use the
% optional argument of |\caption|\x|setup|, e.g.:
% \begin{quote}
%  |\captionsetup[figure]{labelsep=none,textformat=empty}|
% \end{quote}
% See \pkg{caption} package documentation for details and alternatives.
%
% \DescribeMacro{\@makecaption}
% If the \pkg{caption} package is not used, the simplest thing
% is to provide a redefinition of |\@makecaption|.
% You should model your redefinition after the one used in the
% document class you actually use instead of blindly
% following what is here.  |\@makecaption| takes two arguments, the
% first will be something like ``figure 3'' and the second will
% be the caption text.  We will simply ignore the second argument.
% Most of the tricky bit of the definition
% is about testing whether the caption is longer than a line.  Since
% we will only be using the first argument, we can safely assume that
% the caption will fit on one line.\footnote{If you have 
% \texttt{\bs figurename} as something absurdly long or a
% very narrow \texttt{\bs textwidth},
% then you will have to use a more complicated version.}
% Your redefinition of |\@makecaption| may look like
% \begin{quote}
%   |\renewcommand{\@makecaption}[2]{%|\\
%   |  \vskip\abovecaptionskip|\\
%   |  \hbox to \hsize{\hfil #1\hfil}%|\\
%   |  \vskip\belowcaptionskip}|
% \end{quote}
% 
% \DescribeMacro{\caption}
% This still leaves one problem.   If you use
% \begin{quote}\ttfamily
%   |\caption|\oarg{short caption text}\marg{full caption text}
% \end{quote}
% only the short caption text will ever appear in the list of tables or
% figures.  The following redefinition of |\caption| will take care of
% that.
%
% Again, first of all a solution for usage with the \pkg{caption} package:~\footnote{%
% This needs at least version $3.3$ of the \pkg{caption} package.}
% \begin{quote}
%   |\captionsetup{list-entry=heading}|
% \end{quote}
%
% If the \pkg{caption} package is not used,
% the following code should be used instead:
% \begin{quote}
%   |\let\OrigCaption\caption|\\
%   |\renewcommand{\caption}[2][X]{\OrigCaption[#2]{}}|
% \end{quote}
%
% \subsubsection{Eliminating numbers from lists of tables and figures}
%
% This is a bit trickier, and I have heard that it doesn't work
% with all versions of \LaTeXe, but I am unwilling to reinstall
% and older version for debugging this.
% A user [get the name] suggested that page numbers be suppressed
% in the lists of figures and tables.
%
% \begin{macro}{\l@figure}
% \begin{macro}{\l@table}
% All this requires is a redefinition of |\l@figure| and |\l@table|
% which are defined in \texttt{classes.txt}.  Also see section~2.4.1 of the
% \emph{Companion} to see how these macros are called.
%
% The real only trick here is that |\l@figure| is defined to take
% two arguments, but the second is never used.  The way it will be
% called will give it something like
% \begin{quote}
%   |{\numberline {3} Caption of that figure}{85}|
% \end{quote}
% as arguments, where the second argument is the page number.
% The |\numberline| command will make use of the \LaTeX\ register
% |\@tempdima| for the width of the box containing the table
% or figure number.  So we need to set that.
% The rest is pretty unsophisticated.  You can, of course, modify it
% at will.
% \begin{quote}
%   |\renewcommand*{\l@figure}[2]{%|\\
%   |   \setlength\@tempdima{2.3em}%|\\
%   |   \noindent\hspace*{1.5em}#1\hfil\newline }|
% \end{quote}
% And for tables:
% \begin{quote}
%   |\let\l@table\l@figure|
% \end{quote}
% \end{macro}
% \end{macro}
% 
% \section{Obsolete commands}\label{sec:obsolete}
%
% Versions of the package prior to 2.2 had some commands which the
% user could specify in the preamble to do what \emph{some} of the
% options do now.  Although I would like to eventually remove those
% commands, they are documented in the \textit{Companion}; so they
% will remain for quite some time.
% 
% \section{Caveats}\label{sec:caveats}
%
% Some of the things that are listed here may be considered bugs,
% design errors, interactions to watch out for, or just the
% way life is sometimes.  They are, at least, a matter of concern, and you
% should watch out for them.
% 
% \subsection{Literal strings}
%
% When floats are being read, \LaTeX\ is in verbatim mode.  Among
% other things, this means that the lines like
% \begin{quote}
%   |\end{figure}|
% \end{quote}
% or
% \begin{quote}
%   |\end{figure}%|
% \end{quote}
% must appear on lines by themselves without any whitespace before
% or after them.  A complete reimplementation of the most difficult
% part of the package is required to fix this limitation, but
% it is among the distant goals I have.
%
% \subsection{Extra files}
% This creates two extra files: \texttt{\meta{jobname}.fff} and
% \texttt{\meta{jobname}.ttt}.  Any files by those names
% in the current directory will be overwritten.
%
% \subsection{Environment names} \label{sec:envnames}
%
% Because of how the redefinitions of \texttt{figure} and \texttt{table}
% are actually implemented, it is crucial that these environment
% names be used.  That is, you cannot simply define a new environment which
% calls \texttt{figure} or \texttt{table} since the former must
% look for the literal string
% \begin{quote}
%   |\end{figure}|
% \end{quote}
% in the document, while doing no expansion of control sequences.
% The latter does the same, but wants |table| instead of
% |figure|.  This caution generally applies to all `verbatim-like'
% environments
%
% Although I haven't been able to confirm this yet, the
% \LaTeX\ system ScientificWord\footnote{A registered trademark.
% Write to info@tcisoft.com for more information.}
% may automatically put floats
% inside a macro called \verb"\FFRAME".  If so, I hope
% that either someone from ScientificWord or one of its
% users will create something for \verb"\FFRAME" similarly to
% what I have done for \verb"\sidewaystable" in the sample configuration
% file (\autoref{sec:extra}).
%
% \subsection{The Environment's environment}\label{sec:envenv}
% \changes{v2.1b}{1994/07/03}{Modify documentation -jpg}
%
% Because no \TeX\ expansion is done while the material in these
% floats are read in, but is delayed until the floats are
% processed at the end of the document, it will be the state of
% \TeX\ at the end which will matter.  For example, a document
% with something like
% \begin{quote}
%   |\newcommand{\XXX}{YYY}|\\
%   \ldots\\
%   |\begin{table}|\\
%   \ldots\\
%   \ldots |\XXX| \ldots\\
%   \ldots\\
%   |\end{table}|\\
%   \ldots\\
%   |\renewcommand{\XXX}{ZZZ}|\\
%   \ldots\\
%   |\end{document}|
% \end{quote}
%  will process the table with |\XXX| expanding to |ZZZ|.
%
% In any particular instance, the user can use either re-redefine
% |\XXX| before the end of document, or can re-redefine it using
% on of the hooks, |\At|\x|Begin|\x|Delayed|\x|Floats|, |\At|\x|Begin|\x|Tables|,
% or |\At|\x|Begin|\x|Figures|, which are discussed in \autoref{sec:hooks}.
%
% \subsection{Verbatim in delayed floats}\label{sec:verbatim}
%
% There should be no problem with verbatim text within a
% float unless that verbatim text contains an |\end{figure}| or
% |\end{table}| in a figure or table respectively.  I don't see
% a fix for this.  All I can imagine is that you create a new
% delayed type which behaves exactly like |figure| (or |table|)
% (even writing |\begin{figure}| and |\end{figure}| to the
% \texttt{.fff} file. [\textit{mutatis mutandis} for |table|])
% In future versions, I may create a sample like this in the
% sample configuration file, but it is a low priority since
% the only time one would write such a figure or table would
% be in a document about \LaTeX\ and it is difficult to imagine
% circumstances where a document about \LaTeX\ would need to
% be subject to \pkg{endfloat}.
%
% \subsection{Ordering End Document material}\label{sec:enddocument}
%
% \changes{v2.1b}{1994/07/03}{Modify documentation -jpg}
%
% \changes{v2.1}{1994/06/25}{Modify documentation text. jpg}
% \changes{v2.1}{1994/06/25}{Use AtEndDocument. jpg}
%
% Version 2.1 uses the \LaTeXe\ directive |\AtEndDocument|.  This
% makes it \LaTeXe\ specific, but it means that it can be used
% with other packages that use that directive.  Previous versions
% of \pkg{endfloat} redefined |\enddocument|.  Now several
% packages or commands can add stuff at the ends of documents
% and still work together.  This does mean that \emph{the order
% of loading packages can be important!}  If you use several
% packages that may use the |\AtEndDocument| directive and you
% get funny results, try loading them in a different order.
% It that doesn't work, complain to the maintainer of the packages
% so that they will work out a way for the packages to interact
% correctly.
%
% \changes{v2.1}{1994/06/25}{Use AtEndDocument. jpg}
% \changes{v2.1}{1994/06/25}{Modify documentation text. jpg}
% \changes{v2.1b}{1994/07/03}{Modify documentation -jpg}
%
% \subsubsection{General ordering and wish list}\label{sec:order}
%
% I believe that the output of a \LaTeXe\ run should be independent
% of the order in which package are loaded.  It would be possible
% to set this up, but it would take coordination of all package
% writers who use |\AtEndDocument|.  The actual call to |\AtEndDocument|
% would not occur during package loading, but some new command,
% like |\ExecuteAtEndDocument| would be called by the user after
% all such packages are loaded, with tags for each thing in the
% packages, so something like
% \begin{quote}
%   |\usepackage{lastpage}|\\
%   |\usepackage{endfloat,xyzzy}|\\
%   |\ExecuteAtEndDocument{endfloat,xyzzy,lastpage}|
% \end{quote}
% and the order of End Document material would be the \pkg{endfloat}
% material, followed by \textsf{xyzzy}, and finally by \pkg{lastpage}.
% The package \pkg{xyzzy} is fictitious, while the
% package \pkg{lastpage}\cite{Goldberg:lastpage} exists,
% it doesn't really matter what these do.
% 
% I will have to wait until someone else develops such a system, but
% I will gladly modify the packages I am responsible for maintaining
% to comply with it.  Until then
% I will include a message
% which begins with \texttt{AED}
% in every usage of |\At|\x|End|\x|Document|, and try to minimize any side
% effects my usage may have.
% \changes{v2.1b}{1994/07/03}{Modify documentation -jpg}
%
% \subsection{What are packages for?} \label{sec:monoton}
% 
% \changes{v2.1b}{1994/07/03}{Modify documentation -jpg}
%
% One option is to not have packages like \pkg{endfloat} actually call
% |\At|\x|End|\x|Document|, but merely define a user level command which
% would make the call itself.  This way, the order of those particular
% commands would matter, but not the ordering of the package loading.
%
% Another advantage of this is that packages could easily be things
% which make commands available, but do not actually entail
% a change in \texttt{.dvi} output themselves.  It is classes,
% and options to classes which do that.  That is, the actual
% loading of packages should have no visible effects, other than
% making new commands available.  (Typeface changing
% packages, such as \textsf{times}, are obvious, and principled, exceptions.)
% The disadvantage is that it leads
% to two-step modifications (loading and calling) to change
% a document.
%
% I would propose any package (other than typeface changing
% packages) which changes output instead of merely providing additional
% commands, should be clearly labeled as doing such in the documentation
% and in a message.
% 
% \subsection{Float position specifiers} \label{sec:gobble}
%
% Float position specifiers are passed to the temporary files
% and are used when those floats are processed.  This may lead
% to funny results, especially if the first figure or first table uses
% |[p]| while the |heads| option is being used.  This can lead to
% that float, floating to the page after the header.
% Most other float specifiers will not lead to any problems, because
% the package mucks about the various float specification parameters.
%
% \subsection{Misplaced headers} \label{sec:buggyheads}
%
% Version 2.2c contains a partial fix to a problem with the placement
% of floats around the section headers produced by the |heads| option.
% There were two variants of the problem.  In one the first float
% after the header would float above the header.  This has been fixed
% by using the \LaTeXe\ command |\suppressfloats|.  The other
% problem is that that the first float may float to a page float
% after the page with the header on it.
%
% This has been partially fixed, but
% if users use the |[p]| specification on their first floats or if
% there are large floats, the problem can still
% show up.  It is recommended that whenever the user wants a |[p]| that
% an |[hp]| be used instead.  In normal running (without \pkg{endfloat}),
% this should only rarely effect the document, but it will help avoid
% the problem with the floating end float.  An |[h]| may also be needed for
% large floats.  There is only need to be concerned about the first
% figure and first table.
%
% The natural solution to this problem will require that the bug
% in described in \autoref{sec:gobble} be resolved.
%
% \subsection{Known incompatibilities}
%
% Above I have outlined sources of potential conflicts and incompatibilities
% with other packages.  Those sections contain a discussion of potential
% work-arounds.  Here I list where I know of specific incompatibilities
% with distributed packages.  This list is not complete.  If you know
% on an addition, please let me know.
%
% \subsubsection{Environment names}
%
% The packages listed here all have the problem described in
% \autoref{sec:envnames}.  The work-arounds are also described
% there.  \pkg{rotating}, \emph{Scientific Word}.
%
% \subsubsection{Ordering end material}
%
% The following packages put things at the end of the document, and
% peculiar results are possible if you don't pay attention to the
% order in which packages are loaded.  This is described in
% \autoref{sec:order}.  The package \pkg{lastpage} is among
% these, as are recent versions of the package \pkg{harvard}.
%
% \subsubsection{Conflicting \cs{enddocument}}
%
% Prior to \LaTeXe's provision of the hook |\AtEndDocument|, package
% writers were forced to redefine |\enddocument|.  Some did so
% in ways that over wrote any other package's redefinition of the
% same.  When you encounter such a package you should try to get
% its author to release a modified version.  Version~2.0 of \pkg{endfloat}
% was such a packages.   So was the winter 1993 version of~\pkg{harvard}
% (which has been fixed).  But
% for those using an old version of \pkg{harvard} you will encounter
% problems.
%
% \subsubsection{Miscellaneous}
%
% There are several other potential conflicts that don't fall into
% the broader categories.
%
% \begin{itemize}
% \item |\listoftables| and |\listoffigurers| are left undefined
%     in class \cls{elsart}.  But this is because Elsevier does
%     not want those lists.  Elsevier, bless them, does not want
%     floats at the end for submissions to its journals.  So
%     there is no reason to use \pkg{endfloat} (with or without lists)
%     with class \cls{elsart}.  Let's hope that other publishers
%     will follow Elsevier's lead in understanding that the
%     submission rules which were created were created for a reason,
%     and when those reasons no longer apply, the rules should be changed.
%
%     I look forward to the day when \pkg{endfloat} will serve
%     no purpose.
%
% \item The \pkg{float} package appears to work in my limited tests.
%
% \item The \pkg{floatrow} package appears to work in my limited tests.
% But please note that the \pkg{endfloat} package needs to be loaded
% \emph{after} the \pkg{floatrow} package.
%
% \item The \pkg{newfloat} package appears to work in my limited tests, too.
%
% \end{itemize}
%
% \section{Support}\label{sec:support}
%
% As is usual, this package is provided with no warranty whatsoever.
% However, it is my desire to make it useful and usable, although
% I may very well fail at that.  If you
% need a feature added, see whether the hooks will allow you to
% do what you want.  If something goes wrong look over
% \autoref{sec:caveats}.
% \iffalse % Currently this package has no active maintainer
% But if you need to get in touch
% with the maintainer, you should send email at
% \texttt{axel.sommerfeldt@f-m.fm}.
% \fi
%
% \section{History}\label{sec:history}
% \changes{v2.1}{1994/06/25}{Use LaTeX2e documentation form. jpg}
% \changes{v2.1}{1994/06/25}{Use AtEndDocument. jpg}
% \changes{v2.1}{1994/06/25}{Modify documentation text. jpg}
%
% \subsection{The burden of history}
%
% By version 2.2 the file was getting so that most of the bytes
% were things that had been commented out of previous versions,
% and changelog messages.  Instead of this making things clearer
% to the maintainer, it turns out to be clutter.  I (jpg) have started
% to throw out some of history (it is not really useful to see
% who corrected what typo or cleaned up what extraneous space
% with a |%| in 1991.  Although my purge of history is far
% from complete, it should be noted that I do want to preserve
% the spirit of the history.  I have already been miscredited
% with original authorship.  I have made extensive modifications
% and extensions, but the basic core (even if only a small amount
% of version 2.0 code remains) and concept are JDM's.
%
% \subsection{Author}
% The file was written by Darrell McCauley (jdm5548@diamond.tamu.edu)
% in February and March 1992.   He acknowledges that much of the
% guts are adapted from
% \texttt{comment.sty} by Victor Eijkhout (eijkhout@csrd.uiuc.edu).
% So, although Jeff Goldberg (jeffrey@goldmark.org) has maintained
% this afterwards, he should not be credited with writing the package,
% but only with extending and maintaining it.
% He has contributed enough so that by version~2.4 he claimed
% co-authorship.
% The same applies to Axel Sommerfeldt (axel.sommerfeldt@f-m.fm)
% who build version 2.5 with permission of Jeff Goldberg and has
% maintained this package from version 2.6 to version 2.7.
%
% \subsection{Version 2.7}
%
% Version 2.7 was build by Axel Sommerfeldt (axel.sommerfeldt@f-m.fm),
% and introduces the following changes:
% \begin{itemize}
% \item
% A new package option |disable| has been added which disables the
% functionality of the \pkg{endfloat} package
% (\autoref{sec:options}).
% \item
% A new command |\add|\x|to|\x|delayed|\x|float| has beed added
% which adds code to a specific delayed float type
% (\autoref{sec:addto}).
% \item
% More customization was introduced with the new macros
% |\efloat|\x|begin|, |\efloat|\x|end|, |\efloat|\x|begin|\x|list|,
% and |\efloat|\x|end|\x|list|.
% They can be re-defined by the user to influence the process
% of delayed floats and the typesetting of lists of delayed floats
% (\autoref{sec:customizations}).
% \item
% Unfortunately the bugfix regarding the usage of UTF-8 characters
% in floating environments introduced in version 2.6 was flawed,
% this has been fixed.
% \end{itemize}
%
% \subsection{Version 2.6}
%
% Version 2.6 was build by Axel Sommerfeldt (axel.sommerfeldt@f-m.fm),
% and introduces the following changes:
% \begin{itemize}
% \item
% New package options |no|\x|tables| and |no|\x|figures| have been added
% to allow better control over which floating environments
% will be handled by the \pkg{endfloat} package (\autoref{sec:options}).
% \item
% New macros called |\efloat|\x|type|, |\efloat|\x|heading|, |\efloat|\x|preamble|,
% and |\efloat|\x|postamble| have been added which allow the user more control
% over how the delayed floats are typeset (\autoref{sec:separator}).
% \item
% A percent sign (|%|) is now allowed at the end of |\end|\marg{environment}, too, e.g.:
% \begin{quote}
%   |\begin{figure}|\\
%   |  |\ldots\\
%   |\end{figure}%|
% \end{quote}
% \item
% Two bugs have been fixed regarding the usage of UTF-8 characters in floating environments.
% \end{itemize}
%
% \subsection{Version 2.5}
%
% Version 2.5 was build by Axel Sommerfeldt (axel.sommerfeldt@f-m.fm)
% with permission of Jeff Goldberg, and introduces the following changes:
% \begin{itemize}
% \item
% New commands
% |\Declare|\x|Delayed|\x|Float| and |\Declare|\x|Delayed|\x|Float|\x|Flavor|
% for handling floating environments other than |figure| and |table|,
% and |\Setup|\x|Delayed|\x|Float| for setting options
% (\autoref{sec:flavor} and \autoref{sec:other}).
% To make this possible a lot of internal code had to be reorganized,
% but by trying to keep original versions of macros and trying to leave the
% operational sequence itself as original as possible this hopefully won't break
% compatibility with existing documents or extensions written for the
% \pkg{endfloat} package.
%
% \item
% New package options |tables|\x|only| and |figures|\x|only| have been added
% to allow better control over which floating environments
% will be handled by the \pkg{endfloat} package (\autoref{sec:options}).
%
% \item
% The \pkg{endfloat} package should cooperate with
% the \pkg{floatrow} package now, at least if you load it \emph{after}
% the \pkg{floatrow} package.
%
% \item
% Older versions of the \pkg{endfloat} package used to process |figure| and
% |table| as starred variant always, but at least version $2.4$ did not.
% It had stored all of them as starred variant into the temporary files, but had
% processed them as non-starred always.
% To make this more consistent the version $2.5$ does store the environments
% as they are now, and processes them the same way, i.e.~non-starred
% variants will be stored and processed as non-starred, and starred variants
% will be stored and processed as starred.
% \end{itemize}
% If you notice a change in behaviour after updating the \pkg{endfloat}
% package to version 2.5, please contact me (Axel) and I'll try to fix this.
%
% \subsection{Version 2.4}
%
% Version 2.4 involves the largest set of additional features
% since at least version 2.2 (which added all the options).  Some
% of these are
% \begin{itemize}
%
% \item
% This version adds various user hooks, both as commands:
% |\At|\x|Begin|\x|Figures|, |\At|\x|Begin|\x|Tables|, and
% |\At|\x|Begin|\x|Delayed|\x|Floats| (\autoref{sec:hooks}),
% and |\efloat|\x|separator| (\autoref{sec:separator}).
%
% \item
% Most importantly, there is the addition of a configuration file
% (\autoref{sec:extra}).  An example configuration file contains
% code which allows \pkg{endfloat} to work properly with
% the \texttt{sidewaystable} environment of the \pkg{rotating}
% package.
%
% \item
% Additionally, all figures and tables are written as |figure*| and
% |table*| in the temporary files, eliminating the need to force single
% column mode when table and figures are processed.
%
% \item
% There are a fair number of internal changes to the code (which
% make it easier for the various hooks to work).
%
% \item
% Also changed some internal command names, such as |\xtable|,
% which did not include |@| to names that to include |@| such as
% |\ef@extable|.  Also renamed all commands |\end...| to something
% else so as to not use up valuable environment name space.
%
% \item
% Removed dead code.  It was making this too hard to read.
%
% \item
% Documentation changes to reflect user level changes.  Also added
% more to the Caveats section (\autoref{sec:caveats}).
% 
% \end{itemize}
%
% During the past few months I have received a wonderful level
% of feedback from users.   Many made very useful suggestions.
% Even those queries which resulted from a misunderstanding of
% how to use the package have been lead me to modify the
% documentation.  I had intended to acknowledge all of you,
% but the list has grown too long.  You know who you are.  Thanks,
% and good luck with your journal submissions!
%
% \subsection{Version 2.3}
% 
% Very minor changes in the organization of some parts of the
% code, but I fixed a bug I introduced while ``cleaning up'' for
% for version~2.2:  I had misunderstood part of the original
% code and commented out a necessary trick to allow for |figure*|
% The bug was very real, so I am releasing this version~2.3 as soon
% as I can document it, and am not waiting to include other planned
% improvements.
%
% \subsection{Version 2.2}
%
% A user (Kate Hedstrom) pointed out a number of bugs and shortcomings,
% which led me (jpg) to finally sit down and make some of the changes
% I had been planning on making.  The effect of the |tablesfirst| option
% was specifically requested, and also work on the bug discussed
% in \autoref{sec:buggyheads}.  Although my bug fix is partial,
% version 2.2 includes the means to suppress the headers altogether.
%
% \subsubsection{Package options}
%
% I, jpg, have used the package option facility of \LaTeXe\
% to get other options (described in \autoref{sec:options}).
% I also made some cosmetic changes (breaking up lines to reduce
% the number of overfull boxes when printing the documentation,
% line breaks and indentation to make the code more readable.
% I also replaced some |\def|s with |\newcommand|s and
% |\providecommand|s.  This are not logged, because I actually
% found that all of the logging information was hampering my
% ability to read and modify the code.
%
% \subsubsection{Internal commands}
%
% In version 2.2, I also replaced some code internal
% to |\xfigure| and |\xtable| with |\efloat@foundendfig|
% and |\efloat@foundendtab|.  This was merely a stylistic
% change.
%
% I also deleted some some definitions
% which are not used.  These had had probably been left as hooks, but with
% not enough for them to be useful hooks.  There are some cases where
% I have left these in when I could see what they could be used for.
% I have tried to add a note as to their potential use.
%
% \subsubsection{Documentation}
%
% Massive changes to user documentation, and some to the code
% documentation.
%
% \subsection{Version 2.1}
%
% I, Jeffrey Goldberg, in June 1994 wanted to use Darrell McCauley's
% \file{endfloat.sty} with \LaTeXe.  It worked fine until I
% needed to use the \LaTeXe\ directive |\At|\x|End|\x|Document| for
% some other function, and discovered that it was not functioning
% and that it was because version 2.0 (and earlier) of
% \texttt{endnotes.sty} redefined |\end|\x|document|.   The
% fix that I needed was trivial, but it made the file no
% longer compatible with \LaTeX209.  As a consequence, it seemed
% that the only way I could make up for this crime was to make
% it fully compatible with \LaTeXe.
%
% \subsection{Minor changes (version 2.0)}
%
% A series of changes and fixes were made in March 1992.  Many
% by the original author others by  Ronald Kappert (R.Kappert@urc.kun.nl)
% who replaced literal strings with |\figurename|, and so on; and
% by schultz@unixg.ubc.ca who pointed out gobbling bug with
% |\nomarkersintext|.
%
% \subsection{Brian Junker's modifications (version 2.0)}
%
% Brian Junker (brian@stat.cmu.edu) made a number of fixes.
% Here are his change comments:
% \changes{v1.99}{1992/05/27}{extensive changes by bj}
%
% \begin{enumerate}
%   \item Changed ``comment" to ``figure" and ``komment" to
%                      ``table" throughout, to avoid collisions with other
%                      style files' definitions of ``comment".  Also
%                      fixes |\begin{table}| ends with |\end{komment}|
%                      error generated by my (older) version of PC\TeX.
%
%   \item Fixed gobble of float position specifiers.
%         There are two ways to do this:
%         \begin{enumerate}
%         \item |\write\ifnextchar[{\gobbleuntilnext}{}|
%                      into every
%                      environment written to |\jobname.fff|, etc.;
%          \item save \LaTeX's old def's of |\figure| and |\table|
%                      and re-use them when processing fig's and tables.
%                      I chose the latter approach, for maximum
%                      consistency with \LaTeX, other style files, etc.
%          \end{enumerate}
%
%  \item Added def's of |\tablename| and |\figurename|,
%                      which my version of PC-\TeX\ seemed to need.
%                      [backward compatibility for earlier versions ---jdm]
%
%  \item Moved formatting of figure and table markers to
%                      |\figure|\x|place| and |\table|\x|place|.
%
%   \item Style change: in-text markers are now
%                      centered reminders like ``[Figure 4 about here.]".
%
%    \item Style change: added list of tables and
%                      figures to the table and figure sections.
%                      Change back to old format with |\nofiglist| and
%                      |\notablist|.
%
%    \item Changed default to |\markersintext|.
%
%     \item Fixed trivial typo in |\@openposttbls|
% \changes{v1.99}{1992/05/27}{extensive changes by bj}
% \end{enumerate}
%  All changes marked |% bj| at end of line.
%  ---Brian Junker (brian@stat.cmu.edu)
%
% \section{Wish list}
%
% I doubt that I will really work on this wish list in the near future
% but in addition to solving the know bugs, there is one major sort of
% change that I (jpg) would like to see:
% \begin{itemize}
% \item
%    Updating the verbatim writing by using the tools in the
%    |verbatim| standard packages, and the |moreverb| package.
%    Since they provide more generalized an cleaner verbatim code
%    then this which dates back to the earliest days of \LaTeX.
% \end{itemize}
%
% \begin{thebibliography}{1}
% 
% \bibitem{Goldberg:lastpage}
% Jeffrey Goldberg.
% \newblock The \texttt{lastpage} package.
% \newblock Electronic documentation
% 
% \bibitem{A-W:GMS94}
% Michel Goossens, Frank Mittelbach, and Alexander Samarin.
% \newblock {\em The {\LaTeX} Companion}
% \newblock Addison-Wesley, Reading, Massachusetts, 1994.
%  
% \bibitem{LT3:ClassGuide}
% The \LaTeX3 Project.
% \newblock \emph{\LaTeXe\ for class and package writers}
% \newblock (Preliminary draft) June 1994
% \newblock Electronic Documentation
%
% \bibitem{Lingnau:float}
% Anselm Lingnau.
% \newblock An Improved Environment for Floats
% \newblock August 2001 (version~1.3)
% \newblock Electronic Documentation
%
% \bibitem{Lapko:floatrow}
% Olga Lapko.
% \newblock The floatrow package
% \newblock August 2009 (version~0.3)
% \newblock Electronic Documentation
%
% \bibitem{Sommerfeldt:newfloat}
% Axel Sommerfeldt.
% \newblock The newfloat package
% \newblock November 2011 (version~1.0)
% \newblock Electronic Documentation
%
% \bibitem{RahBar:rotating}
% Sebastian Rahtz and Leonor Barroca.
% \newblock A style option for rotated objects in \LaTeX{}
% \newblock April 1994 (version~2)
% \newblock Electronic Documentation
%
% \bibitem{Dekker:ctable}
% Wybo Dekker.
% \newblock The ctable package
% \newblock October 2015 (version~1.31)
% \newblock Electronic Documentation
% \end{thebibliography}
%
% \StopEventually{\PrintIndex\PrintChanges}
% \clearpage
%
% \section{The documentation driver file}
%
% \changes{v2.1}{1994/06/25}{Use LaTeX2e documentation form. jpg}
% The next bit of code contains the documentation driver file for
% \TeX{}, i.e., the file that will produce the documentation you are
% currently reading. It will be extracted from this file by the
% \texttt{docstrip} program.
%    \begin{macrocode}
%<*driver>
\documentclass{ltxdoc}
\setlength\hfuzz{2pt}    % ignore small overfulls
%
\usepackage{ifpdf}
\ifpdf
  \usepackage{mathptmx,courier}
  \usepackage[scaled=0.90]{helvet}
\fi
%
\usepackage{hypdoc}
\ifpdf\usepackage{hypdestopt}\fi
\hypersetup{pdfkeywords={LaTeX, package, endfloat},pdfstartpage={},pdfstartview={}}
%
\CodelineIndex
\EnableCrossrefs
 %\DisableCrossrefs   % Say \DisableCrossrefs if index is ready
 %\RecordChanges      % Gather update information
 \OnlyDescription    % comment out for implementation details
\begin{document}
  \let\subsectionautorefname\sectionautorefname
  \let\subsubsectionautorefname\sectionautorefname
   \DocInput{endfloat.dtx}
\end{document}
%</driver>
%    \end{macrocode}
% \changes{v2.1}{1994/06/25}{Use LaTeX2e documentation form. jpg}
%
% \section{The implementation}
% \changes{v2.1}{1994/06/25}{Modify documentation text. jpg}
%
% \subsection{File and package identification}
%
% We start by checking if this file was already loaded. If not we
% identify the current version.
% \changes{v2.1}{1994/06/25}{Use LaTeX2e package form. jpg}
%    \begin{macrocode}
%<*package>
\NeedsTeXFormat{LaTeX2e}[1994/06/01]
\ProvidesPackage{endfloat}[\filedate\space\fileversion\space
               LaTeX2e package puts figures and tables at end (jdm)]
%    \end{macrocode}
% \changes{v2.1}{1994/06/25}{Use LaTeX2e package form. jpg}
%
% \subsection{How it was written}
% [this subsection mostly based on jdm's original text.]
%
% Overview: redefine the figure and table environment following 
% the |comment| environment of
% \texttt{comment.sty} written by Victor Eijkhout
% \texttt{eijkhout@csrd.uiuc.edu}.
%
% Instead of processing what was between |\begin{...}| and |\end{...}|,
% every line is written to a file (|\jobname.fff| for figures, |\jobname.ttt|
% for tables).  Then, when you do an |\end{document}|, the figure section
% is processed, then the table section is processed.  The |tablesfirst|
% option changes this order.
%
% \changes{v2.1}{1994/06/25}{Modify documentation text. jpg}
% \changes{v2.1}{1994/06/25}{Use AtEndDocument. jpg}
%
% After initial versions, I [jdm] received much help from Ronald Kappert
% and Brian Junker (see change log below). \emph{Thanks guys!}
%
% \subsection{Define warning message}
%
% Since I, JPG, am making the commands options, I want to warn users
% to use the options, since these commands should be discontinued
% in future versions.
%
% Since these commands are available now for over two decades,
% I, AS, think that it would be a bad idea removing them now.
% So I decided to drop the warning message introduced by JPG instead.
%
% \subsection{Flags}
%
% Put all of the newifs for the user options and flags here.
% Note that these are global flags only,
% the ones bound to a specific environment will be defined
% inside |\Declare|\x|Delayed|\x|Float| instead. 
%
% I (as) have added the definition of |\Setup|\x|Delayed|\x|Float|
% here in version 2.5.
%
%    \begin{macrocode}
\newif\if@domarkers
\newif\if@tablist                % bj
\newif\if@figlist                % bj
\newif\if@tabhead
\newif\if@fighead
\newif\if@tablesfirst
\newif\ifefloat@figures          % as
\newif\ifefloat@tables           % as
\newif\ifefloat@list             % as
\newif\ifefloat@head             % as
%    \end{macrocode}
%
% \begin{macro}{\efloat@syncobsoleteflags}
% The switches |\if@tablist|, |\if@figlist|, |\if@tabhead|, and |\if@fighead|
% are obsolete, but still needed by some old (and unmaintained) document classes
% and packages. So we still support them, and keep them in sync with the values
% actually used by the \pkg{endfloat} package.
% \changes{v2.5c}{2011/12/22}{This macro added. as}
%    \begin{macrocode}
\newcommand*\efloat@syncobsoleteflags{%
  \efloat@ifflag{tablelist}{\@tablisttrue}{\@tablistfalse}%
  \efloat@ifflag{figurelist}{\@figlisttrue}{\@figlistfalse}%
  \efloat@ifflag{tablehead}{\@tabheadtrue}{\@tabheadfalse}%
  \efloat@ifflag{figurehead}{\@figheadtrue}{\@figheadfalse}}
%    \end{macrocode}
% \end{macro}
%
%
% \subsubsection{Default values}
%
% Set default values of all of the (global) flags here.
%
%    \begin{macrocode}
\@domarkerstrue
\@tablisttrue
\@figlisttrue
\@tabheadfalse
\@figheadfalse
\@tablesfirstfalse
\efloat@figurestrue              % as
\efloat@tablestrue               % as
\efloat@listtrue                 % as
\efloat@headfalse                % as
%    \end{macrocode}
%
% \begin{macro}{\SetupDelayedFloat}
% While global flags will be set using package options,
% environment specific flags will be set with |\Setup|\x|Delayed|\x|Float|.
% \changes{v2.5}{2011/11/26}{This command added. as}
% \changes{v2.5c}{2011/12/22}{Usage of \cs{efloat@syncobsoleteflags} added. as}
% \changes{v2.7}{2019/04/14}{Text of error message changed. as}
%    \begin{macrocode}
\RequirePackage{keyval}
%    \end{macrocode}
%    \begin{macrocode}
\newcommand*\SetupDelayedFloat[2]{%
  \def\efloat@type{#1}%
  \setkeys{endfloat}{#2}}
%    \end{macrocode}
%    \begin{macrocode}
\define@key{endfloat}{list}[true]{\efloat@setkey{list}{#1}}
\define@key{endfloat}{nolist}[]{\efloat@setkey{list}{false}}
\define@key{endfloat}{head}[true]{\efloat@setkey{head}{#1}}
\define@key{endfloat}{nohead}[]{\efloat@setkey{head}{false}}
%    \end{macrocode}
%    \begin{macrocode}
\newcommand*\efloat@setkey{%
  \@expandtwoargs\efloat@@setkey\efloat@type}
\newcommand*\efloat@@setkey[3]{%
  \efloat@ifdelayed{#1}{%
    \efloat@setflag{#1#2}{#3}%
    \efloat@syncobsoleteflags}}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\efloat@ifdelayed}
% Check if the given environment is a delayed float type.
% If yes, execute the given code.
% If not, issue an error message.
% \changes{v2.7}{2019/04/14}{This macro added. as}
%    \begin{macrocode}
\newcommand\efloat@ifdelayed[2]{%
  \@ifundefined{ef@ext@#1}%
    {\PackageError{endfloat}%
      {`#1' is not a delayed float type}%
      {Only environments known to the `endfloat' package are allowed here.}}%
    {#2}}%
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\efloat@ifflag}
% |\efloat@ifflag|\marg{flag}\marg{yes-code}\marg{no-code}
% tests if a flag has been set.
% \changes{v2.5a}{2011/12/04}{This macro added. as}
%    \begin{macrocode}
\newcommand*\efloat@ifflag[1]{%
  \@nameuse{ef@if@#1}}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\efloat@setflag}
% |\efloat@setflag|\marg{flag}\marg{value}
% sets a flag to the given boolean value.
% \changes{v2.5a}{2011/12/04}{This macro added. as}
%    \begin{macrocode}
\newcommand*\efloat@setflag[2]{%
  \@nameuse{if#2}%
    \global\expandafter\let\csname ef@if@#1\endcsname\@firstoftwo
  \else
    \global\expandafter\let\csname ef@if@#1\endcsname\@secondoftwo
  \fi}%
%    \end{macrocode}
% \end{macro}
%
% \subsection{Other preliminaries}
%
% I (jpg) have been slowly working at making more and more of the
% code for processing tables and figures common, with the idea
% that once I have factored out all that is common with them
% I will be then be able to set up code for other floats,
% I have still a very long way to go, but common code created
% for version 2.3 is here.
%
% I (as) have added the definition of |\Declare|\x|Delayed|\x|Float|
% and |\Declare|\x|Delayed|\x|Float|\x|Flavor| here in version 2.5.
%
% \begin{macro}{\efloat@newwrite}
% attempt to reduce old |\@openpostfigs| and |\@openposttbls| to
% one command
% The first one calls |\newwrite| so, |\efloat@newwrite{ttt}|
% will have the effect of |\newwrite\efloat@postttt|.
%    \begin{macrocode}
\newcommand*\efloat@newwrite[1]{%
   \expandafter\newwrite\csname efloat@post#1\endcsname}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\efloat@openpost}
% |\efloat@openpost{ttt}| will be the same as
% \begin{quote}
%   |\immediate\openout\efloat@postttt=\jobname.ttt\relax|
% \end{quote}
% while also calling |\efloat@setflag{ttt}{true}| to set a flag
% (|@ef@tttopen|) in the case of |ttt|.
% \changes{v2.5a}{2011/12/04}{\cs{ef@setct} replaced by \cs{efloat@setflag}. as}
% \changes{v2.5c}{2011/12/22}{\cs{efloat@setflag} replaced by \cs{ef@setct}. as}
%    \begin{macrocode}
\newcommand*\efloat@openpost[1]{%
   \expandafter\immediate\expandafter\openout
      \csname efloat@post#1\endcsname =\jobname.#1\relax
   \ef@setct{#1}{1}%
   \message{(\jobname.#1)}}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\efloat@closepost}
% Close the file for writing.  Set a flag saying so.
% \changes{v2.6}{2018/03/24}{This macro added. as}
%    \begin{macrocode}
\newcommand*\efloat@closepost[1]{%
   \expandafter\immediate\expandafter\closeout\csname efloat@post#1\endcsname
   \ef@setct{#1}{0}}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\ef@newct}
% \begin{macro}{\ef@setct}
% \begin{macro}{\ef@ifct}
% |\ef@newct{ttt}| will create a new counter called |\@ef@tttopen|
% and |\ef@setct{ttt}{1}| would set it to 1.\par
% To offer best compatibility to version $2.4$ we still use these counters
% although using |\efloat@setflag{tttopen}{1}| would be a better alternative.
% (Otherwise the \pkg{apa} document class would break.)
% \changes{v2.5c}{2011/12/22}{\cs{ef@ifct} added by as}
%    \begin{macrocode}
\newcommand*\ef@newct[1]{%
  \expandafter \newcount \csname @ef@#1open\endcsname}
\newcommand*\ef@setct[2]{%
  \expandafter\global\csname @ef@#1open\endcsname=#2\relax}
\newcommand*\ef@ifct[1]{%
  \expandafter\ifnum \csname @ef@#1open\endcsname>0 \relax
    \expandafter\@firstoftwo
  \else
    \expandafter\@secondoftwo
  \fi}
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\efloat@condopen}
% Conditionally open a file
% \changes{v2.5a}{2011/12/04}{\cs{ifnum} replaced by \cs{efloat@ifflag}. as}
%    \begin{macrocode}
\newcommand*\efloat@condopen[1]{%
   \ef@ifct{#1}{}{\efloat@openpost{#1}}}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\efloat@iwrite}
% Immediate write to one of these files.
% |\protected@iwrite| was taken from https://tex.stackexchange.com/questions/75951/
% \changes{v2.6}{2018/03/18}{Bugfix: Uses \cs{protected@write} now. as}
% \changes{v2.7}{2019/04/14}{Bugfix: Uses \cs{protected@iwrite} now. as}
%    \begin{macrocode}
\providecommand\protected@iwrite[3]{%
  \begingroup
  \let\thepage\relax
  #2%
  \let\protect\@unexpandable@protect
  \edef\reserved@a{\immediate\write #1{#3}}%
  \reserved@a
  \endgroup
  \if@nobreak\ifvmode\nobreak\fi\fi}
%    \end{macrocode}
%    \begin{macrocode}
\newcommand\efloat@iwrite[1]{%
  \expandafter\protected@iwrite\csname efloat@post#1\endcsname{}}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\addtodelayedfloat}
% Immediate write to one of these files.
% While |\efloat@iwrite| is for internal use, this one if for usage in end-user documents.
% \changes{v2.7}{2019/04/14}{This macro added. as}
% \changes{v2.7}{2019/04/15}{Starred variant added. as}
%    \begin{macrocode}
\newcommand\addtodelayedfloat{%
  \@ifstar{\efloat@addto\@firstofone}{\efloat@addto\detokenize}}
%    \end{macrocode}
%    \begin{macrocode}
\newcommand\efloat@addto[3]{%
  \efloat@ifdelayed{#2}{%
    \expandafter\efloat@@addto\expandafter{\csname ef@ext@#2\endcsname}{#1{#3}}}}
%    \end{macrocode}
%    \begin{macrocode}
\newcommand\efloat@@addto[1]{%
  \efloat@condopen{#1}\efloat@iwrite{#1}}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\efloatheading}
% This macro changes the page headings.
% By default it is defined to use |\markboth| for this purpose,
% but you may redefine this command in the configuration file or preamble.
% \changes{v2.6}{2018/03/18}{This macro added. as}
%    \begin{macrocode}
\providecommand\efloatheading[1]{%
  \markboth{\uppercase{#1}}{\uppercase{#1}}}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\efloatpreamble}
% |\efloat|\x|preamble| will be typeset in front of the delayed floating environments.
% By default it does nothing; if you want it to be something else,
% you may redefine this command in the configuration file or preamble.
% \changes{v2.6}{2018/03/24}{This macro added. as}
%    \begin{macrocode}
\providecommand\efloatpreamble{}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\efloatseparator}
% A user suggested that in some cases we may not wish
% to force \pkg{endfloat} to put each float on a page by itself.
% By default that is what it does, by defining |\efloat|\x|separator|
% to be |\clear|\x|page|.  If you want it to be something else,
% you may redefine this command in the configuration file or preamble.
% \changes{v2.6}{2018/03/24}{Use \cs{providecommand} instead of \cs{newcommand} to define this macro. as}
%    \begin{macrocode}
\providecommand\efloatseparator{\clearpage}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\efloatpostamble}
% |\efloat|\x|postamble| will be typeset at the end of the delayed floating environments.
% By default that is what it does, by defining |\efloat|\x|postamble|
% to be |\efloat|\x|separator|.  If you want it to be something else,
% you may redefine this command in the configuration file or preamble.
% \changes{v2.6}{2018/03/24}{This macro added. as}
%    \begin{macrocode}
\providecommand\efloatpostamble{\efloatseparator}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\efloatbegin}
% |\efloatbegin| will be typeset when the processing of the delayed float begins.
% \changes{v2.7}{2019/04/15}{This macro added. as}
%    \begin{macrocode}
\providecommand\efloatbegin{\clearpage}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\efloatend}
% |\efloatend| will be typeset when the processing of the delayed float ends.
% \changes{v2.7}{2019/04/15}{This macro added. as}
%    \begin{macrocode}
\providecommand\efloatend{}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\efloatbeginlist}
% |\efloatbeginlist| will be typeset before the list of a delayed float.
% \changes{v2.7}{2019/04/15}{This macro added. as}
%    \begin{macrocode}
\providecommand\efloatbeginlist{\normalsize}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\efloatendlist}
% |\efloatendlist| will be typeset after the list of a delayed float.
% \changes{v2.7}{2019/04/15}{This macro added. as}
%    \begin{macrocode}
\providecommand\efloatendlist{\clearpage}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\ef@makeinnocent}
% \changes{v2.1}{1994/06/25}{Modify documentation text. jpg}
% \changes{v2.1b}{1994/07/03}{Modify documentation -jpg}
%    \begin{macrocode}
\newcommand*{\ef@makeinnocent}[1]{\catcode`#1=12 }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\figurename}
% \begin{macro}{\tablename}
% Make sure that |\tablename| and |\figurename| are defined.
%    \begin{macrocode}
\providecommand{\figurename}{Figure}
\providecommand{\tablename}{Table}
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\floatplace}
% Place marker.
% \changes{v1.0b}{1992/03/10}{adaptation for LaTeX 2.09 and
%                      international namegiving by Ronald Kappert
%                      R.Kappert@urc.kun.nl}
% \changes{v1.99}{1992/05/27}{extensive changes by bj}
% \changes{v2.1}{1994/06/25}{Modify documentation text. jpg}
% \changes{v2.1}{1994/06/25}{Use LaTeX2e documentation form. jpg}
% \changes{v2.5}{2011/11/26}{universalized by as}
%    \begin{macrocode}
\newcommand{\floatplace}[1]{%
   \begin{center} 
     [\csname #1name\endcsname~\csname thepost#1\endcsname\ about here.]
   \end{center}}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\DeclareDelayedFloat}
% This one prepares the given environment for cooperation with the \pkg{endfloat}
% package, i.e.~|figure| resp.~|table|.
% \changes{v2.5}{2011/11/26}{This command added. as}
% \changes{v2.5a}{2011/12/04}{\cs{ef@newct} replaced by \cs{efloat@setflag}. as}
% \changes{v2.5b}{2011/12/05}{Starred variant added. as}
% \changes{v2.5c}{2011/12/22}{\cs{efloat@setflag} replaced by \cs{ef@newct}. as}
%    \begin{macrocode}
\newcommand*\DeclareDelayedFloat{%
  \@ifstar{\efloat@declare{*}}{\efloat@declare{}}}
\@onlypreamble\DeclareDelayedFloat
%    \end{macrocode}
%    \begin{macrocode}
\newcommand*\efloat@declare[2]{%
  \@testopt{\efloat@@declare{#1}{#2}}{ef#2}}
\@onlypreamble\efloat@declare
%    \end{macrocode}
%    \begin{macrocode}
\def\efloat@@declare#1#2[#3]#4{%
%    \end{macrocode}
% Counters
% \changes{v1.99}{1992/05/27}{extensive changes by bj}
% \changes{v2.1}{1994/06/25}{Modify documentation text. jpg}
%    \begin{macrocode}
  \newcounter{post#2}%
%    \end{macrocode}
% Remember the file extension in |\ef@ext@|\meta{environment}.
%    \begin{macrocode}
  \edef\@tempa{#3}%
  \edef\@tempb{\@nameuse{ext@#2}}%
  \ifx\@tempa\@tempb
    \PackageError{endfloat}%
      {File extension `\@tempa' is already used by the List}%
      {Try using a different file extension here, e.g. `ef\expandafter\@gobbletwo\@tempa'.}%
  \else
    \expandafter\let\csname ef@ext@#2\endcsname\@tempa
  \fi
%    \end{macrocode}
% Code for opening the |\jobname.fff|
%    \begin{macrocode}
  \efloat@newwrite{#3}%
  \ef@newct{#3}%
%    \end{macrocode}
% Place marker
% (Note: The \pkg{float} package uses |\fname@|\textit{X} as float name,
% but we need |\|\textit{X}|name| in |\float|\x|place|.)
%    \begin{macrocode}
  \@ifundefined{#2name}{\@namedef{#2name}{\@nameuse{fname@#2}}}{}%
  \efloat@namedef{#2place}{\floatplace{#2}}%
%    \end{macrocode}
% Re-define float.
%    \begin{macrocode}
  \DeclareDelayedFloatFlavor#1{#2}{#2}%
%    \end{macrocode}
% Define the heading title. (Only relevant if option |fighead| is set.)
%    \begin{macrocode}
  \expandafter\providecommand\csname #2section\endcsname{#4}%
%    \end{macrocode}
%    \begin{macrocode}
%    \end{macrocode}
% Here we set-up the hooks for getting stuff into |\process...|
% commands easily.
%    \begin{macrocode}
  \efloat@namedef{process#2s@hook}{}%
  \edef\@tempb{\def\noexpand\@tempa{\@car#2\@nil}}%
  \uppercase\expandafter{\@tempb}%
  \edef\@tempb{%
    \noexpand\g@addto@macro\noexpand\@tempa{\@cdr#2\@nil}}%
  \@tempb
  \efloat@namedef{AtBegin\@tempa s}{%
    \expandafter\g@addto@macro\csname process#2s@hook\endcsname}%
  \expandafter\expandafter\expandafter\let\expandafter
    \csname AtBegin\@tempa es\expandafter\endcsname
    \csname AtBegin\@tempa s\endcsname
%    \end{macrocode}
%    \begin{macrocode}
  \efloat@namedef{process#2s}{\efloat@process{#3}{#2}}%
  \efloat@namedef{process#2es}{\@nameuse{process#2s}}%
%    \end{macrocode}
% Flags: Set default values of all of the flags here.
%    \begin{macrocode}
  \efloat@@setkey{#2}{list}{efloat@list}%
  \efloat@@setkey{#2}{head}{efloat@head}%
%    \end{macrocode}
% Finally add the environment to the list of delayed floats
%    \begin{macrocode}
  \@cons\efloat@list{{#2}}}
\@onlypreamble\efloat@@declare
%    \end{macrocode}
%    \begin{macrocode}
\newcommand*\efloat@list{}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\efloat@namedef}
% Same as \cs{@namedef} from the \LaTeX\ kernal,
% but uses \cs{newcommand} instead of \cs{def}.
% \changes{v2.5c}{2011/12/23}{This macro added}
%    \begin{macrocode}
\newcommand*\efloat@namedef[1]{%
  \expandafter\newcommand\csname #1\endcsname}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\DeclareDelayedFloatFlavor}
% \begin{macro}{\DeclareDelayedFloatFlavour}
% This one redefines the given environment, i.e. |figure| resp. |table|.
% While the non-starred variant redefines both variants (non-starred and starred),
% the starred variant only redefines the environment as given.\par
% We do this |\At|\x|Begin|\x|Document| so we are (hopefully) redefining this
% environment as the very last package.
% (Otherwise \pkg{endfloat} would not work with \pkg{floatrow}.)
% \changes{v2.5b}{2011/12/05}{This command added. as}
% \changes{v2.7}{2019/04/14}{Text of error message changed. as}
%    \begin{macrocode}
\newcommand*\DeclareDelayedFloatFlavor{%
  \@ifstar{\efloat@declareflavor\@gobble}%
          {\efloat@declareflavor\@iden}}
\@onlypreamble\DeclareDelayedFloatFlavor
\let\DeclareDelayedFloatFlavour\DeclareDelayedFloatFlavor
\@onlypreamble\DeclareDelayedFloatFlavour
%    \end{macrocode}
%    \begin{macrocode}
\newcommand*\efloat@declareflavor[3]{%
  \efloat@ifdelayed{#3}{%
    \efloat@AtBeginDocument{%
      \efloat@@declareflavor{#2}{#3}%
      #1{\efloat@@declareflavor{#2*}{#3}}}}}
\@onlypreamble\efloat@declareflavor
%    \end{macrocode}
%    \begin{macrocode}
\newcommand*\efloat@@declareflavor[2]{%
  \def\@tempa{\@efloat{#2}{#1}}%
  \@ifundefined{efloat@#1@ORI}%
%    \end{macrocode}
% Save old definition of the environment.
%    \begin{macrocode}
    {\expandafter\expandafter\expandafter\let\expandafter
       \csname efloat@#1@ORI\expandafter\endcsname
       \csname #1\endcsname
%    \end{macrocode}
% Restore old definition of the environment at |\efloat@restore|\x|floats|.
%    \begin{macrocode}
     \expandafter\g@addto@macro\expandafter\efloat@restorefloats\expandafter{%
       \expandafter\let
         \csname #1\expandafter\endcsname
         \csname efloat@#1@ORI\endcsname}%
%    \end{macrocode}
% Re-define float.
%    \begin{macrocode}
     \expandafter\let\csname#1\endcsname\@tempa}%
%    \end{macrocode}
%    \begin{macrocode}
    {\expandafter\ifx\csname#1\endcsname\@tempa \else
       \PackageError{endfloat}%
         {The environment `#1' was already redefined}%
         {You can't use \noexpand\DeclareDelayedFloatFlavor twice for a given environment.}%
     \fi}}
\@onlypreamble\efloat@@declareflavor
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\efloat@AtBeginDocument}
% To be compatible to version $2.4$ we usually redefine |\figure| and |\table| immediately.
% But if the \pkg{floatrow} package is loaded we can't, so we have to use
% |\At|\x|Begin|\x|Document| here.
% (Note: |\efloat@At|\x|Begin|\x|Document| will be defined using |\provide|\x|command|
% so document classes and packages can pre-define it if needed.)
% \changes{v2.5c}{2011/12/22}{This command added. as}
% \changes{v2.5d}{2011/12/23}{Revised. as}
%    \begin{macrocode}
\@ifpackageloaded{floatrow}{%
  \PackageInfo{endfloat}{`floatrow' package detected, delaying redefinitions}
  \providecommand*\efloat@AtBeginDocument{\AtBeginDocument}
}{%
  \providecommand*\efloat@AtBeginDocument{\@iden}
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\efloat@restorefloats}
% Restore the original definition of all environments (floats and flavors)
% known to the \pkg{endfloat} package.
% This macro will be filled with life by |\Declare|\x|Delayed|\x|Float|\x|Flavor|.
% \changes{v2.5}{2011/11/26}{This macro added by as}
%    \begin{macrocode}
\newcommand*\efloat@restorefloats{}
%    \end{macrocode}
% \end{macro}
%
% \subsection{Options and (obsolete) Commands}
%
% \begin{macro}{\efloat@SetOption}
% Sets an option (via |\efloat@Setup|) for all environments known to
% the \pkg{endfloat} package.
% \changes{v2.5}{2011/11/26}{This macro added. as}
%    \begin{macrocode}
\newcommand*\efloat@SetOption[1]{%
  \def\@elt##1{\efloat@Setup{##1}{#1}}%
  \efloat@list
  \let\@elt\relax}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\efloat@Setup}
% Within option code we can't use |\Setup|\x|Delayed|\x|Float| since
% |figure| and |table| are not declared as delayed floating environments yet.
% So we use |\efloat@Setup| instead which will simply collect the settings for
% execution at a later stage.
% \changes{v2.5a}{2011/12/03}{This macro added. as}
%    \begin{macrocode}
\newcommand\efloat@Setup[2]{%
  \g@addto@macro\efloat@ProcessOptions{%
    \SetupDelayedFloat{#1}{#2}}}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\efloat@ProcessOptions}
% Processes options setup with |\efloat@Setup|.
% \changes{v2.5a}{2011/12/03}{This macro added. as}
%    \begin{macrocode}
\newcommand\efloat@ProcessOptions{%
  \let\efloat@SetOption\@undefined
  \let\efloat@Setup\@undefined
  \let\efloat@ProcessOptions\@undefined}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\markersintext}
% \begin{macro}{\nomarkersintext}
% First set up flags and defaults.  First set for flagging
% whether markers appear in text.
% \changes{v1.99}{1992/05/27}{extensive changes by bj}
% \changes{v2.1}{1994/06/25}{Modify documentation text. jpg}
% \changes{v2.1}{1994/06/25}{Use LaTeX2e documentation form. jpg}
% \changes{v2.2a}{1994/10/07}{Create new options}
%    \begin{macrocode}
\DeclareOption{nomarkers}{\@domarkersfalse}
\DeclareOption{markers}{\@domarkerstrue}
%    \end{macrocode}
%    \begin{macrocode}
\newcommand{\markersintext}{\@domarkerstrue}
\newcommand{\nomarkersintext}{\@domarkersfalse}
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\dotablist}
% \begin{macro}{\notablist}
% Options for creating lists of Tables \ldots
% \changes{v2.1}{1994/06/25}{Modify documentation text. jpg}
% \changes{v1.99}{1992/05/27}{extensive changes by bj}
% \changes{v2.1}{1994/06/25}{Use LaTeX2e documentation form. jpg}
% \changes{v2.5}{2011/11/26}{We use \cs{SetupDelayedFloat} now. as}
%    \begin{macrocode}
\newcommand{\dotablist}{%
  \SetupDelayedFloat{table}{list=true}}
\newcommand{\notablist}{%
  \SetupDelayedFloat{table}{list=false,head=true}}
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\dofiglist}
% \begin{macro}{\nofiglist}
% \changes{v2.1}{1994/06/25}{Modify documentation text. jpg}
% \changes{v1.99}{1992/05/27}{extensive changes by bj}
% \changes{v2.1}{1994/06/25}{Use LaTeX2e documentation form. jpg}
% \changes{v2.5}{2011/11/26}{We use \cs{SetupDelayedFloat} now. as}
% \ldots and Figures
%    \begin{macrocode}
\newcommand{\dofiglist}{%
  \SetupDelayedFloat{figure}{list=true}}
\newcommand{\nofiglist}{%
  \SetupDelayedFloat{figure}{list=false,head=true}}
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% Now we make options |tablist| and |notablist| and |figlist| and
% |nofiglist|.  Note that options will be processed in order of
% the |\DeclareOption| commands in this file.  So by placing
% |list| after |nolist| we ensure that if both are specified, |list|
% is in effect.
%
% First two new options
%    \begin{macrocode}
\DeclareOption{nolists}{\efloat@listfalse \efloat@SetOption{list=false}}
\DeclareOption{lists}{\efloat@listtrue \efloat@SetOption{list=true}}
%    \end{macrocode}
% Now the more specific ones, which must come after the more
% general options to get the right interactions between semi-conflicting
% options.
%    \begin{macrocode}
\DeclareOption{notablist}{\efloat@Setup{table}{list=false}}
\DeclareOption{nofiglist}{\efloat@Setup{figure}{list=false}}
\DeclareOption{tablist}{\efloat@Setup{table}{list=true}}
\DeclareOption{figlist}{\efloat@Setup{figure}{list=true}}
%    \end{macrocode}
% 
% The \texttt{notablist} and \texttt{nofiglist} options still leave
% a section header at the beginning of the tables and figures.
%
% Note again the role that order plays, by placing |fighead| after
% |noheads| it ensures that |fighead| will be in effect if both
% are specified.
%    \begin{macrocode}
\DeclareOption{heads}{\efloat@headtrue \efloat@SetOption{head=true}}
\DeclareOption{noheads}{\efloat@headfalse \efloat@SetOption{head=false}}
%    \end{macrocode}
%    \begin{macrocode}
\DeclareOption{fighead}{\efloat@Setup{figure}{head=true}}
\DeclareOption{tabhead}{\efloat@Setup{table}{head=true}}
\DeclareOption{nofighead}{\efloat@Setup{figure}{head=false}}
\DeclareOption{notabhead}{\efloat@Setup{table}{head=false}}
%    \end{macrocode}
% Also need option for putting tables first
%    \begin{macrocode}
\DeclareOption{tablesfirst}{\@tablesfirsttrue}
\DeclareOption{figuresfirst}{\@tablesfirstfalse}
%    \end{macrocode}
% \changes{v2.5a}{2011/12/03}{Options `tablesonly' and `figuresonly' added. as}
%    \begin{macrocode}
\DeclareOption{tablesonly}{\efloat@figuresfalse \efloat@tablestrue}
\DeclareOption{figuresonly}{\efloat@figurestrue \efloat@tablesfalse}
%    \end{macrocode}
% \changes{v2.6}{2018/03/04}{Options `tables' and `figures' added. as}
%    \begin{macrocode}
\DeclareOption{notables}{\efloat@tablesfalse}
\DeclareOption{nofigures}{\efloat@figuresfalse}
%    \end{macrocode}
% Other option stuff
% \changes{v2.7}{2019/01/10}{Option `disable' added. as}
%    \begin{macrocode}
\newcommand*\efloat@AtEndDocument{\AtEndDocument}
\DeclareOption{disable}{%
  \def\efloat@@declare#1#2[#3]#4{%
    \PackageInfo{endfloat}{`#2' is not delayed since option `disable' was specified}}%
  \renewcommand*\efloat@declareflavor[3]{}%
  \renewcommand*\efloat@@setkey[3]{}%
  \renewcommand*\efloat@AtEndDocument{\@gobble}%
  \AtBeginDocument{\renewcommand*\processdelayedfloats{}}}
%    \end{macrocode}
%    \begin{macrocode}
\DeclareOption*{%
   \PackageError{endfloat}%
     {Unknown option `\CurrentOption'}%
     {Please take a look at the documentation of the `endfloat' package.}}
%    \end{macrocode}
% Process (global) options
%    \begin{macrocode}
\ProcessOptions*
%    \end{macrocode}
% For compatibility reasons we still store the original code of `figure' and `table'
% to |\@bfig| and |\@btab| although we don't make use of it anymore.
%    \begin{macrocode}
\let\@bfig\figure             % bj
\let\@btab\table              % bj
%    \end{macrocode}
% Declare `figure' and `table' as delayed floating environment, if requested
%    \begin{macrocode}
\if@tablesfirst
  \ifefloat@tables
    \DeclareDelayedFloat{table}[ttt]{Tables}
  \fi
  \ifefloat@figures
    \DeclareDelayedFloat{figure}[fff]{Figures}
  \fi
\else
  \ifefloat@figures
    \DeclareDelayedFloat{figure}[fff]{Figures}
  \fi
  \ifefloat@tables
    \DeclareDelayedFloat{table}[ttt]{Tables}
  \fi
\fi
%    \end{macrocode}
% Process environment specific options
%    \begin{macrocode}
\efloat@ProcessOptions
%    \end{macrocode}
%
% \begin{macro}{\thepostfig}
% \begin{macro}{\theposttbl}
% For compatibility reasons we still offer the old counters
% |postfig| and |posttbl|, so existing redefinitions of |\figure|\x|place|
% and |\table|\x|place| resp. existing extensions to the \pkg{endfloat} package
% will still work.
%    \begin{macrocode}
\let\c@postfig\c@postfigure
\let\c@posttbl\c@posttable
\newcommand\thepostfig{\thepostfigure}
\newcommand\theposttbl{\theposttable}
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% \subsection{Parsing \texttt{figure} and \texttt{table}}
% \changes{v1.99}{1992/05/27}{extensive changes by bj}
% 
% Now we get the utilities for parsing needed to
% get unmodified code into files.
%    \begin{macrocode}
\let\efloat@float\relax
%    \end{macrocode}
%
% \begin{macro}{\@efloat}
% the {blank space } appearing with |\nomarkersintext| was fixed by adding
% a percent sign (|%|) at strategic locations, determined by setting
% |\tracingcommands=1| ---Darrell
% 
% As mentioned by the jdm above, the following is based
% on \texttt{comment.sty}.  It appears that the idea is to
% turn off all control sequence processing and read in from
% input each line, until a line is found that looks like
% |\end{figure}|.  Thus the actual name of the environment
% is hardcoded into the use of the macros
% (see \autoref{sec:envnames}).  ---jpg]
%
% \changes{v1.1}{1992/03/13}{verified that floats were
%               used before a section was
%               created for them. jdm}
% \changes{v1.2}{1992/03/14}{corrected typo that may have caused figures not
%                      to be printed. jdm}
% \changes{v1.99}{1992/05/27}{extensive changes by bj}
% \changes{v2.0}{1992/06/02}{Corrected problem of extra blank spaces in
%                      the output when nomarkersintext was in effect
%                      (bug reported by schultz@unixg.ubc.ca).
%                      jdm}
% \changes{v2.1}{1994/06/25}{Use LaTeX2e documentation form. jpg}
% \changes{v2.1}{1994/06/25}{Modify documentation text. jpg}
% \changes{v2.1b}{1994/07/03}{Modify documentation -jpg}
% \changes{v2.5}{2011/11/26}{universalized by as}
% \changes{v2.5b}{2011/12/05}{revised by as}
% \changes{v2.6}{2018/03/18}{Re-defines \cs{efloat@endtestX} and \cs{efloat@enddbltestX}, too. as}
% \changes{v2.6}{2018/03/24}{Writes \cs{efloatseparator} into the file, if necessary. as}
%    \begin{macrocode}
\newcommand*\@efloat[1]{%
  \expandafter\@@efloat\expandafter{\csname ef@ext@#1\endcsname}{#1}}
%    \end{macrocode}
%    \begin{macrocode}
\newcommand*\@@efloat[3]{%
%    \end{macrocode}
%    \begin{macrocode}
% If we have already done one table then the file we write to
% is already open, and there is nothing to do, else open it up.
%    \begin{macrocode}
  \efloat@condopen{#1}%
%    \end{macrocode}
% Write |\efloatseparator| into the file, if necessary.
%    \begin{macrocode}
  \@nameuse{efloat@separator@#1}%
%    \end{macrocode}
% Since the figures are not actually processed until much later, we don't
% use \LaTeX's figure numbering mechanism, but we use our own.   Also
% put marker in text (if option set).  In the future, I may combine
% the counter for the markers and the counter used as a flag for
% whether the file is open into one thing.
%    \begin{macrocode}
  \if@domarkers
    \stepcounter{post#2}% % bj
    \@nameuse{#2place}%   % bj
  \fi
%    \end{macrocode}
% |\@currenvir| (current environment) it set to fool
% latex into expecting the end of this environment
% to match the environment name.   It will be used more extensively
% when dealing with the problem discussed in \autoref{sec:envnames}.
%    \begin{macrocode}
  \def\@currenvir{efloat@float}%
%    \end{macrocode}
% Now we set up catcodes for reading in text without processing
% things.  But need to make |^^M| special since we want to read
% line by line.
%    \begin{macrocode}
  \begingroup
  \let\do\ef@makeinnocent \dospecials
  \ef@makeinnocent\^^L% and whatever other special cases
  \endlinechar`\^^M \catcode`\^^M=12 %
%    \end{macrocode}
% Patch |\efloat@endtest| so it contains the actual environment name.
%    \begin{macrocode}
  \efloat@patch\efloat@endtest{#3}% as
  \efloat@patch\efloat@enddbltest{#3}% as
  \efloat@patch\efloat@endtestX{#3}% as
  \efloat@patch\efloat@enddbltestX{#3}% as
%    \end{macrocode}
% We have read a |\begin{figure}| to get here.  We need to write that
% into the file. \par
% I (jpg) would add the |[htb]| parameters to what
% gets written, but that leaves any float specifiers that had
% been employed by the user wandering around in the floated material.
%    \begin{macrocode}
  \def\next{\efloat@xfloat{#1}}%
  \next\string\begin{#3}}%
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\efloat@foundend}
% When |\ef@xfigure| is verbatim-like reading the figure it has to
% do some clean-up after it as found the |\end{figure}| or
% |\end{figure*}|.  This is it.  [this part written by jpg v2.2]\par
% Note that this macro will not be used by the \pkg{endfloat} package
% itself anymore, but we'll leave it here so extensions written for the
% \pkg{endfloat} package which uses it will still work.
%    \begin{macrocode}
\newcommand*\efloat@foundend[2]{%
  \edef\efloat@enddbltest{\string\end{#2}}%
  \efloat@found@end{#1}}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\efloat@found@end}
% This is the new version of \cs{efloat@foundend}, actually used
% by this package.
% \changes{v2.5}{2011/11/26}{This variant of \cs{efloat@foundend} added by as}
% \changes{v2.6}{2018/03/24}{Writing \cs{efloatseparator} delayed until next \cs{@efloat}. as}
%    \begin{macrocode}
\newcommand*\efloat@found@end[1]{%
%    \end{macrocode}
% Write |\end{figure}| into the file, followed by |\efloatseparator|.
%    \begin{macrocode}
  \efloat@iwrite{#1}{\efloat@enddbltest}%
  \global\@namedef{efloat@separator@#1}{%
    \efloat@iwrite{#1}{\string\efloatseparator}%
    \efloat@iwrite{#1}{ }}%
%    \end{macrocode}
% Re-define |\next| so the current floating environment will be closed.
%    \begin{macrocode}
  \def\next{\endgroup\end{efloat@float}}}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\efloat@xfloat}
% |\efloat@xfloat| reads line by line, checking whether each line
% is the |\end{figure}|.  If it is, then write out end stuff
% to the file.  Otherwise write out read in line to the
% file and do the |\next| line.
% \changes{v2.1}{1994/06/25}{Modify documentation text. jpg}
% \changes{v2.1b}{1994/07/03}{Modify documentation -jpg}
% \changes{v2.5}{2011/11/26}{universalized by as}
% \changes{v2.5}{2011/11/26}{\cs{long} added. as}
% \changes{v2.5c}{2011/12/22}{renamed from \cs{ef@xfigure} to \cs{efloat@xfloat} by as}
% \changes{v2.6}{2018/03/18}{Actual test out-sourced to \cs{efloat@if@end}. as}
%    \begin{macrocode}
{\catcode`\^^M=12 \endlinechar=-1 %
 \long\gdef\efloat@xfloat#1#2^^M{%
  \efloat@if@end{#2}{\efloat@found@end{#1}}{\efloat@iwrite{#1}{#2}}%
  \next}}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\efloat@if@end}
% |\efloat@if@end| tests if the given argument marks the end of the current floating environment.
% If yes, |\@firstoftwo| will be executed, |\secondoftwo| otherwise.
% \changes{v2.6}{2018/03/18}{This macro added. as}
% \changes{v2.6}{2018/03/18}{Tests \cs{efloat@endtestX} and \cs{efloat@enddbltestX}, too. as}
%    \begin{macrocode}
\newcommand\efloat@if@end[1]{%
  \def\test{#1}%
  \let\efloat@next\@firstoftwo
%    \end{macrocode}
% Test for |\end{figure}|
%    \begin{macrocode}
  \ifx\test\efloat@endtest
%    \end{macrocode}
% Test for |\end{figure*}|
%    \begin{macrocode}
  \else\ifx\test\efloat@enddbltest
%    \end{macrocode}
% Test for |\end{figure}%| and |\end{figure*}%|
%    \begin{macrocode}
  \else\ifx\test\efloat@endtestX
  \else\ifx\test\efloat@enddbltestX
%    \end{macrocode}
% Finally, if none of the above, we have a line of text in the
% body of the figure which should be written to the file.
%    \begin{macrocode}
  \else
    \let\efloat@next\@secondoftwo
  \fi\fi\fi\fi \efloat@next}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\efloat@endtest}
% \iffalse
% Generalizing these end\ldots{}test so that they
% can be used for user specified floating environments will
% require more |\expandafter|s then you can shake a stick at.
% I am not looking forward to taking on that task.  I should
% look at the version control package to see what I can
% lift from there, since it must be the same problem.
% \fi
% I (as) have generalized this end\ldots{}test so it can be
% used for user specific floating environments as well.
% I did this by simply replacing |figure| with |X|, this will be patched
% to the correct environment name in |\@efloat| by using |\efloat@patch|.
% \changes{v2.1}{1994/06/25}{Use LaTeX2e documentation form. jpg}
% \changes{v2.1b}{1994/07/03}{Modify documentation -jpg}
% \changes{v2.5}{2011/11/26}{`figure' replaced by 'X' and documentation modified. as}
% \changes{v2.6}{2018/03/18}{\cs{efloat@endtestX} and \cs{efloat@enddbltestX} are used for the test, too. as}
%    \begin{macrocode}
{\escapechar=-1%
 \catcode`\#=14 % hash mark is comment character
 \catcode`\%=12 # percent sign is other character
 \xdef\efloat@endtest{\string\\end\string\{X\string\}}
 \xdef\efloat@enddbltest{\string\\end\string\{X\string\}}
 \xdef\efloat@endtestX{\string\\end\string\{X\string\}%}
 \xdef\efloat@enddbltestX{\string\\end\string\{X\string\}%}
}
%    \end{macrocode}
%    \begin{macrocode}
\newcommand*\efloat@patch[2]{%
    \def\x##1X##2\@nil{\def#1{##1#2##2}}%
    \expandafter\x#1\@nil}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\ef@xfigure}
% \changes{v2.5c}{2011/12/22}{Revived by as}
% \begin{macro}{\ef@xtable}
% \changes{v2.5c}{2011/12/22}{Revived by as}
% \changes{v2.6}{2018/03/18}{Re-defines \cs{efloat@endtestX} and \cs{efloat@enddbltestX}, too. as}
% Both, |\ef@xfigure| and |\ef@xtable|, are gone with version $2.5$ of the \pkg{endfloat}
% package.
% But unfortunately some old and unmaintained document classes and packages still
% uses these internal macros, so we still provide them to stay compatible.
%    \begin{macrocode}
\newcommand*\ef@xfigure{\ef@xfloat{fff}{figure}}
%    \end{macrocode}
%    \begin{macrocode}
\newcommand*\ef@xtable{\ef@xfloat{ttt}{table}}
%    \end{macrocode}
%    \begin{macrocode}
\newcommand*\ef@xfloat[2]{%
  \efloat@patch\efloat@endtest{#2}%
  \efloat@patch\efloat@enddbltest{#2*}%
  \efloat@patch\efloat@endtestX{#2}%
  \efloat@patch\efloat@enddbltestX{#2*}%
%    \end{macrocode}
%    \begin{macrocode}
  \def\next{\efloat@xfloat{#1}}%
  \next}
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% \subsection{Processing Figures and Tables}
%
% \begin{macro}{\AtBeginDelayedFloats}
% Here we set-up the hooks for getting stuff into |\process...|
% commands easily.  The command |\g@addto@macro| is defined
% in \file{classes.dtx}.  I was about to write it myself, when I realized that
% it must already exist for things like |\AtBeginDocument|.
%    \begin{macrocode}
\newcommand*\processdelayedfloats@hook{}
\def\AtBeginDelayedFloats{%
   \g@addto@macro\processdelayedfloats@hook}
\newcommand*\processotherdelayedfloats{}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\efloat@process}
% |\efloat@process|\marg{file extension}\marg{environment name}
% \changes{v1.99}{1992/05/27}{extensive changes by bj}
% \changes{v2.1}{1994/06/25}{Use LaTeX2e documentation form. jpg}
% \changes{v2.5}{2011/11/26}{universalized by as}
% \changes{v2.5a}{2011/12/04}{\cs{ifnum} replaced by \cs{efloat@ifflag}. as}
% \changes{v2.5a}{2011/12/04}{\cs{ef@setct} replaced by \cs{efloat@setflag}. as}
% \changes{v2.5c}{2011/12/22}{\cs{efloat@setflag} replaced by \cs{ef@setct}. as}
% \changes{v2.6}{2018/03/18}{Bugfix: Usage of \cs{makeatletter}\ldots\cs{makeatother} added. as}
% \changes{v2.6}{2018/03/18}{Usage of \cs{markboth} replaced by \cs{efloatheading}. as}
% \changes{v2.6}{2018/03/24}{\cs{efloat@type} replaced by \cs{efloattype}. as}
% \changes{v2.6}{2018/03/24}{Usage of \cs{@input} replaced by \cs{efloat@input}. as}
% \changes{v2.6}{2018/03/24}{Usage of \cs{efloatpreamble} and \cs{efloatpostamble} added. as}
% \changes{v2.7}{2019/04/15}{Usage of \cs{efloatbegin}, \cs{efloatend}, \cs{efloatbeginlist}, and \cs{efloatendlist} added. as}
%    \begin{macrocode}
\newcommand*\efloat@process[2]{%
%    \end{macrocode}
% First test to see if there are any figures to process.
% If so do it.
%    \begin{macrocode}
  \ef@ifct{#1}{%
%    \end{macrocode}
% Close the file for writing.  Set a flag saying so.
%    \begin{macrocode}
    \efloat@closepost{#1}%
%    \end{macrocode}
% Define |\efloat|\x|type| which can be evaluated by user-defined variants of
% |\efloat|\x|heading|, |\efloat|\x|preamble|, |\efloat|\x|separator|, and |\efloat|\x|postamble|.
%    \begin{macrocode}
    \def\efloattype{#2}%                                      % as
%    \end{macrocode}
%    \begin{macrocode}
    \efloatbegin                                              % bj
%    \end{macrocode}
% Deal with headers and list of figures if necessary
%    \begin{macrocode}
    \efloat@ifflag{#2list}{%                                  % bj
      \begingroup
        \efloatbeginlist                                      % bj
        \efloat@listof{#2}%                                   % bj
        \efloatendlist                                        % bj
      \endgroup
    }{}%
    \efloat@ifflag{#2head}{%
      \section*{\@nameuse{#2section}}%                        % bj
%    \end{macrocode}
% See the discussion in \autoref{sec:place} for what problem
% the |suppressfloats[t]| is here to solve.  If I understand the
% \textit{Companion} correctly (page 144), this was not available
% in previous versions of \LaTeX.
%    \begin{macrocode}
      \suppressfloats[t]%                                     % jpg
    }{}%
    \expandafter\expandafter\expandafter\efloatheading        % bj
      \expandafter\csname #2section\endcsname                 % bj
%    \end{macrocode}
% Use any user defined hooks just before inputting the file.
%    \begin{macrocode}
    \processdelayedfloat@hook
    \@nameuse{process#2s@hook}%
%    \end{macrocode}
% Input the file, surrounded by |\efloatpreamble| and |\efloatpostamble|.
%    \begin{macrocode}
    \efloatpreamble
    \efloat@input{\jobname.#1}%
    \efloatpostamble
%    \end{macrocode}
%    \begin{macrocode}
    \efloatend                                                % as
  }{}}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\efloat@input}
% Input the file, surrounded by |\makeatletter| and |\makeatother|
% so characters written as (internal) macros (for example UTF-8 characters)
% will be processed without errors.
% \changes{v2.6}{2018/03/18}{This macro added. as}
%    \begin{macrocode}
\newcommand*\efloat@input[1]{%
  \makeatletter
  \@input{#1}%
  \makeatother}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\processdelayedfloat@hook}
% For generic changes document classes can use the hook
% |\process|\x|delayed|\x|float@hook|. If the float type is needed,
% it can be extracted from |\efloattype|.
% \changes{v2.5d}{2011/12/25}{This hook added}
%    \begin{macrocode}
\newcommand*\processdelayedfloat@hook{}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\efloat@listof}
% This one will do the ``List of Figures'' resp. ``List of Tables''.
% \changes{v2.5}{2011/11/26}{This macro added}
%    \begin{macrocode}
\newcommand*\efloat@listof[1]{%
%    \end{macrocode}
% If no name is given for the list we set it to ``List of \textit{X}'' where
% \textit{X} is the heading given as second mandatory argument
% to |\Declare|\x|Delayed|\x|Float|.
%    \begin{macrocode}
  \expandafter\providecommand\csname list#1name\endcsname
    {List of \@nameuse{#1section}}%
%    \end{macrocode}
% If |\listof|\textit{X}|s| is defined, we use it here.
% Otherwise we try using |\listof| (defined by the \pkg{float} and \pkg{floatrow}
% package) instead. If this will fail, too, we have to give up (and issue an error message).
%    \begin{macrocode}
  \@ifundefined{listof#1s}%
    {\@ifundefined{listof}%
      {\PackageError{endfloat}%
         {Don't know how to make List of `#1'}%
         {You could try defining \protect\listof#1s on your own}}%
      {\listof{#1}{\@nameuse{list#1name}}}}%
    {\@nameuse{listof#1s}}}
%    \end{macrocode}
% \end{macro}
%
% \subsubsection{Getting float placement correct} \label{sec:place}
%
% In versions prior to this attempt (v2.2c), when the |heads| options
% were used, the float could could either float to the next page, leaving
% the section header alone, or could float to the top of the page, leaving
% section header at the bottom of the page.  The idea here is to change the
% parameters that place floats, to very very strongly
% encourage floats at the bottom of pages.
% It also allows for easy top floats.  Thus obviating the need
% for float pages.
% A |\suppressfloats[t]| in the commands
% that issue the headers will make sure that the floats don't float
% above the headers.
%
%    \begin{macrocode}
\renewcommand{\bottomfraction}{1.0}
\renewcommand{\topfraction}{1.0}
\renewcommand{\textfraction}{0.0}
%    \end{macrocode}
%
% \subsubsection{Calling the processing commands}
%
% \begin{macro}{\processdelayedfloats}
% Note that there is an extra set |{| and |}| so  that the
% restoration of the original definitions is in a group and is \emph{not}
% global.  If, for some reason, you wish them to be global then use
% something like
% \begin{quote}
%  |\makeatletter|\\
%  |\g@addto@macro\processdelayedfloats{\efloat@restorefloats}|\\
%  |\makeatother|
% \end{quote}
% \changes{v2.5}{2011/11/26}{Process float list instead of |figure| and |table|. as}
%    \begin{macrocode}
\newcommand*\processdelayedfloats{{%
%    \end{macrocode}
% Here we reset stuff to apply while end stuff is being processed.
% Prior to version 2.4, these were in |\processtables| and |\processfigures|.
%    \begin{macrocode}
  \def\baselinestretch{1}\normalsize
  \efloat@restorefloats
%    \end{macrocode}
% The hook comes after those settings so as to override them if desired.
%    \begin{macrocode}
  \processdelayedfloats@hook
%    \end{macrocode}
% Process tables, figures, and others (or figures, tables, others)
%    \begin{macrocode}
  \efloat@processfloats
  \processotherdelayedfloats}}
%    \end{macrocode}
%    \begin{macrocode}
\newcommand*\efloat@processfloats{%
  \let\@tempa\@empty
  \def\@elt##1{\g@addto@macro\@tempa{\@nameuse{process##1es}}}%
  \efloat@list
  \let\@elt\relax
  \@tempa}
%    \end{macrocode}
% \changes{v1.99}{1992/05/27}{extensive changes by bj}
% \changes{v2.1}{1994/06/25}{Modify documentation text. jpg}
% \changes{v2.1}{1994/06/25}{Use AtEndDocument. jpg}
%    \begin{macrocode}
\efloat@AtEndDocument{%                                       % jpg
   \message{AED endfloat: Processing end Figures and Tables}% % jpg
   \onecolumn
   \processdelayedfloats }
%    \end{macrocode}
% \end{macro}
%
% Use, or don't use, configuration file.
%    \begin{macrocode}
\InputIfFileExists{endfloat.cfg}{%
   \typeout{*** Using endfloat.cfg ***}}{}
%    \end{macrocode}
%
%    \begin{macrocode}
%</package>
%    \end{macrocode}
%
% \section{Extra macros -- HIGHLY Experimental} \label{sec:config}
%
% \subsection{Getting new delayed environments}
%
% This section used to offer a configuration file which was able
% to integrate the environments |side|ways|figure| and |side|ways|table|
% offered by the \pkg{rotating} package\cite{RahBar:rotating}
% into the \pkg{endfloat} package.\par
% For compatibility reasons we still do, so existing documents
% including |efxmpl.cfg| will still work,~e.g.
% \begin{quote}
%   \ldots\\
%   |\usepackage{endfloat}|\\
%   |\makeatletter|\\
%   |\input{efxmpl.cfg}|\\
%   |\makeatother|\\
%   \ldots
% \end{quote}
%
%    \begin{macrocode}
%<*config>
%    \end{macrocode}
%
% We must, of course, have use of the rotating package.
%    \begin{macrocode}
\RequirePackage{rotating}
%    \end{macrocode}
%
% We declare |side|\x|ways|\x|figure| and |side|\x|ways|\x|table| as
% variants of the |figure| resp.~|table| environments.
%    \begin{macrocode}
\DeclareDelayedFloatFlavor{sidewaysfigure}{figure}
\DeclareDelayedFloatFlavor{sidewaystable}{table}
%    \end{macrocode}
%
%    \begin{macrocode}
%</config>
%    \end{macrocode}
%
% \emph{Note:}
% If you would like to add support of given floating environments to
% the \pkg{endfloat} package, please do not use configuration files
% but |\Declare|\x|Delayed|\x|Float| and |\Declare|\x|Delayed|\x|Float|\x|Flavor|
% instead.
%
% \Finale
%
\endinput
