From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Mon, 2 Sep 2019 13:46:59 +0900 Subject: Initial commit --- macros/latex/contrib/endfloat/endfloat.dtx | 2831 ++++++++++++++++++++++++++++ 1 file changed, 2831 insertions(+) create mode 100644 macros/latex/contrib/endfloat/endfloat.dtx (limited to 'macros/latex/contrib/endfloat/endfloat.dtx') diff --git a/macros/latex/contrib/endfloat/endfloat.dtx b/macros/latex/contrib/endfloat/endfloat.dtx new file mode 100644 index 0000000000..04b4a31765 --- /dev/null +++ b/macros/latex/contrib/endfloat/endfloat.dtx @@ -0,0 +1,2831 @@ +\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 , +%% Jeff Goldberg , +%% Axel Sommerfeldt +%% Maintainer: -none- +%% Latest Version: Version 2.7 +% \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} +% +% \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} +% +% \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} +% +% \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 -- cgit v1.2.3