needspace 将浮动内容放在上一页吗?

needspace 将浮动内容放在上一页吗?

相当简单的工作示例(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] 推到下一页。

相关内容