如果可能的话,如何将浮动元素放在*此处*?如果不可能的话,如何将其放在下一页的顶部?

如果可能的话,如何将浮动元素放在*此处*?如果不可能的话,如何将其放在下一页的顶部?

使用该float包,我可以使用H说明符并将浮点数精确地放置在我想要的位置。例如,

\documentclass{article}

\usepackage{lipsum}
\usepackage{float}
\usepackage[demo]{graphicx}
\restylefloat{figure}

\begin{document}

\lipsum[1-3]

\begin{figure}[H]
\begin{center}
\includegraphics{foo}
\end{center}
\end{figure}

\lipsum[10-20]

\end{document}

有时这会导致难看的分页符。例如,如果我将 更改为\lipsum[1-3]\lipsum[1-4]图形将不适合该页面,因此页面将断开,浮动将出现在下一页的顶部。断开页面末尾的空间量是不理想的。解决此问题的方法是使用afterpage以下包:

\documentclass{article}

\usepackage{lipsum}
\usepackage{afterpage}
\usepackage{float}
\usepackage[demo]{graphicx}
\restylefloat{figure}

\begin{document}

\lipsum[1-4]

\afterpage{\clearpage
\begin{figure}[H]
\begin{center}
\includegraphics{foo}
\end{center}
\end{figure}
}

\lipsum[10-20]

\end{document}

这会像以前一样将浮动元素放在下一页的顶部,但避免分页符。实际上,业务afterpage会告诉 LaTeX 将图形放在下一页的顶部,而不是其他任何地方,但允许第一页完全填满。

我想要的是这两个技巧的组合。换句话说,如果可以不破坏页面的话,我想告诉 LaTeX 在此处放置一个浮动元素。如果做不到,那么就将其插入到下一页的顶部。在伪代码中,它可能会像这样

if you-can-do-this-without-a-page-break then
    \begin{figure}[H]
    \begin{center}
    \includegraphics{foo}
    \end{center}
    \end{figure}
else:
    \afterpage{\clearpage
    \begin{figure}[H]
    \begin{center}
    \includegraphics{foo}
    \end{center}
    \end{figure}
    }

这是一个简单的条件,但我不知道如何确定是否会发生分页符。据推测,它需要计算图形的框大小,然后查看如果将其插入到请求的位置,该框大小是否适合页面。

答案1

根据我收到的一些评论的建议,我仔细研究了是否只需做类似的事情\begin{figure}[!ht]就能产生这种预期的效果。通过尝试不同的浮动和不同的位置。我有点不好意思地说,是的,这似乎就是所需要的一切。也许它并不总是足够的 --- 我无法检查所有可能的情况 --- 但它看起来确实在大多数情况下都会起作用。

在这种情况下,我最初的问题可能毫无意义。可能很难做到我想要的(即评估上述条件),而且考虑到 LaTeX 的正常浮动机制会产生所需的效果,可能也没有理由这样做。

相关内容