Erzwingen Sie alle Floats am Ende des Dokuments, ohne endfloat zu verwenden

Erzwingen Sie alle Floats am Ende des Dokuments, ohne endfloat zu verwenden

Was ist der einfachste Weg, alle Floats zwangsweise am Ende des Dokuments erscheinen zu lassen, einen pro Seite? Das endfloatPaket ist keine Option, siehe unten. Die folgenden Fragen sind verwandt, aber nicht hilfreich:

So platzieren Sie alle Floats (insbesondere Tabellen) an einer bestimmten Stelle im Dokument

Platzieren Sie alle Floats zuletzt, ohne die Nummerierung zu ändern

Einzelheiten

In unserer Umgebung haben wir Wrapper zum Erstellen von Abbildungen, Tabellen usw. Die Wrapper sind als Umgebungen implementiert, die „alles“ zulassen und darüber hinaus unter anderem den langen und kurzen Bildunterschriftennamen, das Label und den Inhalt der Abbildung akzeptieren. Die Implementierung der Wrapper kann für verschiedene Dokumentlayouts geändert werden (Bildunterschrift oben/unten, Abbildung nach Regel ja/nein getrennt, ...).

Ein bestimmtes Layout erfordert, dass jede Abbildung auf einer separaten Seite nach dem Hauptdokument platziert wird.

Eigene Versuche

Mir fällt da das endfloatPaket ein. Ich konnte es allerdings nicht zum Laufen bringen, da die Figuren durch einen Wrapper erstellt werden.

Ich habe versucht, dies mit zu implementieren \gappto: Der Befehl zum Erstellen der Figur wurde einfach an einen globalen Hook angehängt, der direkt vor ausgeführt wird \end{document}. Dies funktionierte, als der Wrapper zum Erstellen der Figur nur ein Befehl war, aber jetzt ist es eine Umgebung, die „alles“ darin zulässt. Ich habe meinen Versuch unten zum MnWE hinzugefügt, aber dies führt zu der folgenden Fehlermeldung:

! Extra }, or forgotten \endgroup.
\environment_richfigure_end_aux:w ...gure}\egroup 

l.39       \end{richfigure}

Wie würden Sie dies umsetzen?

MnWE

\documentclass{scrartcl}
\pagestyle{empty}
\usepackage{caption}
\usepackage{xparse}
\usepackage{etoolbox}

\newcommand{\delayedfigures}{}

% Comment the following line to get working code
\newcommand{\dofigure}[1]{\gappto{\delayedfigures}{\clearpage#1}}

% The example works with the default implementation of \dofigure
\providecommand{\dofigure}[1]{#1}

%%   \begin{richfigure}
%%     [<placement>, e.g. htp (h=here, t=top, p=page)]
%%     {<short caption>}
%%     {<long caption>}
%%     {<\label{label}>}
%%       <\includegraphics[...]{figure}>
%%   \end{richfigure}
\NewDocumentEnvironment{richfigure}{O{tbp} m m m}{%
  \dofigure\bgroup%{%
    \begin{figure}[#1]%
      \caption[#2]{#3}#4%
        }{% Here, the contents of the environment are placed
    \end{figure}%
  \egroup%{
}

\gpreto{\enddocument}{\delayedfigures}

% Usage example
\begin{document}
  Main document contents.

  \begin{richfigure}{Short caption}{Long caption}{\label{fig:1}}
    Figure contents.
  \end{richfigure}

  All figures are to appear on separate pages, one per page.
\end{document}

Antwort1

Hier ist ein Beispiel, das den Floatcheck modifiziert und [p] als Platzierung verwendet. Die Floats erscheinen am Ende der Abschnitte, einer pro Seite.

\documentclass{scrartcl}
\pagestyle{empty}
\usepackage{caption}
\usepackage{lipsum}
\makeatletter
\def \@largefloatcheck{\ht\@currbox 0.5\textheight}
\makeatother

\begin{document}
\section{baz}
  Main document contents.
\lipsum
\begin{figure}[p]
 \centerline{ Figure contents. }
\caption[Short caption]{Long caption of fig 1}\label{fig:1}
\end{figure}

\lipsum

All figures are to appear on separate pages, one per page.
\lipsum

\section{foo}
\lipsum
\begin{figure}[p]
 \centerline{ Figure contents. }
\caption[Short caption]{Long caption  of fig 2}\label{fig:2}
\end{figure}

\lipsum

\end{document}

verwandte Informationen