强制所有浮动元素到文档末尾,而不使用 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

下面是一个修改浮动检查并使用 [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}

相关内容