在我的文档中,有一些带有相当长标题的图形。我用来包含它们的代码如下所示:
\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}
第一个示例处理坏框警告并将图像放在 内\makebox
,无论图像有多宽,它都会将图像置于文本区域的中心。第二个示例处理过高的图像:\enlargethispage
不适用于浮动环境(请参阅浮点型中的 \enlargethispage 命令),所以我们需要在环境内容的末尾插入一个负高度,figure
才能成功欺骗 LaTeX。