Принудительно переместить все плавающие элементы в конец документа без использования endfloat

Принудительно переместить все плавающие элементы в конец документа без использования endfloat

Какой самый простой способ принудительно разместить все плавающие элементы в конце документа, по одному на страницу? Пакет endfloatне является вариантом, см. ниже. Следующие вопросы связаны, но не полезны:

Как разместить все плавающие элементы (в частности таблицы) в определенном месте документа

Разместите все поплавки последними, не меняя нумерацию.

Подробности

В нашей среде есть оболочки для создания рисунков, таблиц и т. д. Оболочки реализованы как среды, позволяющие "все" внутри и, кроме того, принимающие, среди прочего, длинное и короткое имя подписи, метку и содержимое рисунка. Реализацию оболочек можно изменять для различных макетов документа (подпись сверху/снизу, рисунок, разделенный правилом да/нет, ...).

Один из вариантов макета требует, чтобы каждый рисунок располагался на отдельной странице после основного документа.

Собственные попытки

На ум приходит упаковка endfloat. Однако мне не удалось заставить ее работать, так как фигурки созданы оберткой.

Я попытался реализовать это с помощью \gappto: Команда создания фигур будет просто добавлена ​​к глобальному хуку, который выполняется непосредственно перед \end{document}. Это работало, когда оболочка создания фигур была просто командой, но теперь это среда, позволяющая "всему" находиться внутри. Я добавил свою попытку в MnWE ниже, но это приводит к следующему сообщению об ошибке:

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

l.39       \end{richfigure}

Как бы вы это реализовали?

МнВЭ

\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}

решение1

Вот пример, который изменяет floatcheck и использует [p] в качестве размещения. Поплавки появляются в конце разделов, по одному на страницу.

\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}

Связанный контент