相当简单的工作示例(varioref
不是必需的,但在我看来它的输出确实令人难以接受):
\documentclass{article}
\usepackage[letterpaper, margin=1in]{geometry}
\usepackage{needspace,mwe,varioref}
\renewcommand{\topfraction}{0.99}
\begin{document}
% This is just here to take up space, could be text instead
\includegraphics[height=5in]{example-image-a}
\needspace{10\baselineskip}
\vref{fig:foo}
\begin{figure}[t]
\centering
\includegraphics[height=3in, width=\textwidth]{example-image-b}
\caption{foo}
\label{fig:foo}
\end{figure}
\begin{itemize}
\item foo
\item bar
\item baz
\item blee
\end{itemize}
\end{document}
这会将浮动元素放置example-image-b
在第 1 页的顶部,然后example-image-a
,然后有一个分页符并且\vref
在下一页上显示为“上一页 1”。
为什么我的浮动内容出现在第 1 页的顶部,而周围的文本位于第 2 页,上一页? 也许更重要的是,我该如何解决这个问题?
我猜这与\needspace
。所有 TeX.SE 的浮动放置问题要么没有解决上一页出现的浮动问题,要么说这是不可能的!例如,如何影响 LaTeX 中图形和表格等浮动环境的位置?表示浮动“不能像周围的文本一样出现在更早的页面上,因为 LaTeX 不会回溯,而更早的页面已经排版了。”(虽然我可能读得不正确。)
当然,这个 MWE 是有点做作的。在我的实际文档中\topfraction
小于0.99
,并且我使用默认浮动位置(tbp
在IIRC 中),但在使用浮动定义之前的段落article
后,我仍然让浮动出现在上一页的顶部。我的实际文档用于将简短的介绍段落与其介绍的列表放在一起。\needspace
\needspace
编辑:David Carlisle 建议\needspace
用替换\Needspace
,这样确实可以将文本放在正确的页面上,但这样就无法将我的段落和列表放在同一页面上,而这正是最初的意图。MWE 已更新,高度增加到example-image-a
。现在,使用\needspace
仍然像以前一样,使用\vref
到页面上后浮动位于页面顶部,但是如果现在\needspace
用它替换,会将段落放在第一页的末尾,并将其附带的列表放在第二页,这是不可取的[在我的真实文档中,我希望用短段落来介绍列表]。\Needspace
\vref
答案1
您可以使用,\Needspace
而不是\needspace
将所有内容都放在一页上。
\needspace
使用更快的算法来猜测允许的空间,但对尚未到达的浮动感到“困惑”,因此在插入浮动后强制分页。并不是浮动移动到上一页(latex 浮动无法做到这一点),而是强制分页以将 [1] 推到下一页。