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

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

Какой самый простой способ принудительно разместить все плавающие элементы в конце документа?Решение должно работать сhtlatex, в этом случае плавающие элементы должны располагаться в конце HTML-документа. (Исходный вопрос,Принудительно переместить все плавающие элементы в конец документа без использования endfloat, не было требования htlatex, и решение не работает для htlatex. В остальном это копия, извините за это. Я не хотел редактировать исходный вопрос, но я мог.)

Пакет 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

Вы можете использовать комбинацию rigfigureи \AtEndDocument:

  1. Место \AtEndDocument{\clearpage}сразу после\begin{document}

  2. Заверните каждый richfigureв\AtEndDocument{...}

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