我怎样才能摆脱 LaTeX 警告:浮动对于页面来说太大?

我怎样才能摆脱 LaTeX 警告:浮动对于页面来说太大?

在我的文档中,有一些带有相当长标题的图形。我用来包含它们的代码如下所示:

\begin{figure}
  \begin{center}
    \includegraphics[width=\textwidth]{../fig.pdf}
    \caption[Short caption]{Fairly long text...}
  \end{center}
\end{figure}

对于某些数字,我不断收到如下警告:

LaTeX Warning: Float too large for page by 2.38557pt on input line 339.

我看不出输出文档中的数字有什么问题,但是由于充满了这样的警告,编译输出变得更难阅读。

我做错了什么?如何消除这些警告?

答案1

警告告诉您浮动(图形和标题)太长,无法停留在页面中。如果您避开以下环境,您将摆脱许多此类警告center

\begin{figure}
  \centering
  \includegraphics[width=\textwidth]{../fig.pdf}
  \caption[Short caption]{Fairly long text...}
\end{figure}

(无论如何都应该避免,参见我应该对图形和表格使用 center 还是 centering ?)。

对于相当高的数字,您可能还想缩短它们的宽度,例如0.95\textwidth或更少。LaTeX 不会为您应用这样的转换:警告只是告诉您浮动需要注意,但如何解决问题取决于只有人类才能正确评估的因素。

答案2

如果过度丰满实际上不是一个问题:它在我\vspace{-Xpt}之前添加是有用的\end{figure}

就我而言,这个投诉完全无关紧要0.04999pt,所以我不想拆分这个数字或者对输入做任何其他事情,只是想让这种情况下无用的警告消失。

答案3

如果图形被框住(例如,在floatrow包装中),\vspace解决方案会破坏框住(即框会在 处切割图形\textheight)。可以通过扩展 的文本区域来解决此问题floatpage

\makeatletter
\newenvironment{largefigure}[1][0pt]{ 
  \clearpage % finish last page and flush previous floats
  % save current textheight
  \newlength{\@prevtextheight}\setlength{\@prevtextheight}{\textheight} 
  % extend textheight and recompute internal float parameters
  \setlength{\textheight}{\textheight + #1}
  \global\@colht\textheight % reset \@colht 
  \global\@colroom\textheight % reset \@colroom
  \@floatplacement
  % force float to appear at top of page
  \setlength{\@fptop}{0pt} 
  \begin{figure}[!p]
}{
  \end{figure}
  \clearpage % flush the float
  % restore textheight and all
  \setlength{\textheight}{\@prevtextheight}
  \global\@colht\textheight 
  \global\@colroom\textheight
  \@floatplacement
  \setlength{\@fptop}{0pt plus 1fill}
}
\makeatother

那么问题的解决方案就是:

\begin{largefigure}[3pt] % extend text area by 3pt
  \cenetring
  \includegraphics[width=\textwidth]{../fig.pdf}
  \caption[Short caption]{Fairly long text...}
\end{largefigure}

答案4

与实际更改有问题的图像或浮动(对于文本区域来说太高和/或太宽)的尺寸相比,我个人经常使用经过仔细缩放的图形,这些图形仅超出边距几毫米。 我将使用以下两种技术来优雅地消除这些警告:

\documentclass{article}

\usepackage{graphicx}
\usepackage[showframe]{geometry}

\begin{document}

% image too wide
\begin{figure}
    \makebox[\textwidth][c]{% fix, centers image in textblock
        \includegraphics[width=1.1\textwidth]{example-image}
    }
\end{figure}

% image too tall
\begin{figure}
    \includegraphics[height=1.1\textheight]{example-image-golden-upright}
    \vspace{-60pt} % fix
\end{figure}

\end{document}

MWE 的屏幕截图

第一个示例处理坏框警告并将图像放在 内\makebox,无论图像有多宽,它都会将图像置于文本区域的中心。第二个示例处理过高的图像:\enlargethispage不适用于浮动环境(请参阅浮点型中的 \enlargethispage 命令),所以我们需要在环境内容的末尾插入一个负高度,figure才能成功欺骗 LaTeX。

相关内容