使用该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 的正常浮动机制会产生所需的效果,可能也没有理由这样做。