LaTeX 中 wrapfig 图片的处理

LaTeX 中 wrapfig 图片的处理

有没有办法可以避免图片拖到页面末尾,就像这个例子一样?

在此处输入图片描述

这是我包装图片的方式:

\begin{wrapfigure}{r}{0.5\textwidth} 
\vspace{-20pt}
  \begin{center}
    \includegraphics[width=0.4\textwidth]{./pictures/DBuserTabel.png}%{./Pictures/mainscreen1.png}
    \caption{Uklip af User tablen i Databasen}
    \label{fig:databaseUserTable}
  \end{center}
  \vspace{-20pt}
  \vspace{1pt}
\end{wrapfigure} 

答案1

您描述的行为是由于使用的wrapfig环境太靠近分页符而导致的,如以下示例所示:

\documentclass{article}
\usepackage{wrapfig}
\usepackage{lipsum}

\begin{document}

\lipsum[1-4]
\begin{wrapfigure}{r}{5cm}
\centering
\rule{3cm}{7cm}
\end{wrapfigure}
\lipsum[1-6]

\end{document}

在此处输入图片描述

软件包wrapfig文档明确警告了这一点:

环境应放置在不会超出分页符的位置

因此,您需要移动wrapfig环境以确保它不会超出分页符。但是,使用R(或L) 而不是r(或l) 您的图形将浮动,因此只需在上述代码中更改r为,如下所示R

\documentclass{article}
\usepackage{wrapfig}
\usepackage{lipsum}

\begin{document}

\lipsum[1-4]
\begin{wrapfigure}{R}{5cm}
\centering
\rule{3cm}{7cm}
\end{wrapfigure}
\lipsum[1-6]

\end{document}

现在产生:

在此处输入图片描述

答案2

接受的答案提供了一种方法(使图形浮动)。如果您只需要删除下一页上的白框,只需添加负间距即可。改编 Gonzalo Medina 的示例:

\documentclass{article}
\usepackage{wrapfig}
\usepackage{lipsum}

\begin{document}

\lipsum[1-4]
\begin{wrapfigure}{r}{5cm}
  \centering
  \rule{3cm}{7cm}
  \vspace{-110pt} % This removes the white box on the second page
\end{wrapfigure}
\lipsum[1-6]

\end{document}

或者,您可以计算第一页所占的行数wrapfigure,并将该数字插入到第一个可选参数中wrapfigure

\documentclass{article}
\usepackage{wrapfig}
\usepackage{lipsum}

\begin{document}

\lipsum[1-4]
\begin{wrapfigure}[10]{r}{5cm}
%                  ^^ This dictates the number
%                   of text rows the wrapfigure
%                   will occupy.
  \centering
  \rule{3cm}{7cm}
  \vspace{-110pt}
\end{wrapfigure}
\lipsum[1-6]

\end{document}

这两种方法都会产生以下输出:

在此处输入图片描述

答案3

如果您想要非浮动的 wrapfig 环境,但又不希望图形超出页面底部,那么有时就意味着您必须在段落开始前设置分页符。您通过定义一个命令(在序言中)自动执行此操作,该命令将图形内容存储在保存框中,测试框的高度,然后在必要时强制分页。请参阅以下示例:

\documentclass{article}
\usepackage{wrapfig}
\usepackage{lipsum}

\newsavebox\curwrapfig
\makeatletter
\long\def\wrapfiguresafe#1#2#3{%
  \sbox\curwrapfig{#3}%
  \par\penalty-100%
  \begingroup % preserve \dimen@
    \dimen@\pagegoal \advance\dimen@-\pagetotal % space left
    \advance\dimen@-\baselineskip % allow an extra line
    \ifdim \ht\curwrapfig>\dimen@ % not enough space left
      \break%
    \fi%
  \endgroup%
  \begin{wrapfigure}{#1}{#2}%
    \usebox\curwrapfig%
  \end{wrapfigure}%
}
\makeatother

\begin{document}
\lipsum[1-4]
\wrapfiguresafe{r}{0mm}{\centering\rule{3cm}{7cm}}
\lipsum[1-6]
\end{document}

输出结果如下:

wrapfiguresafe 示例

要注意的是,如果您的图形很高,这可能会导致页面很短,出现非常严重的分页符,并且/或者根据您的设置,导致 vbox 警告不足。

答案4

使用提供命令 \FloatBarrier 的包,将其放在您希望图形出现的段落之后,然后使用 l, r (而不是 L,R)将图形放在左侧或右侧,使其浮动。不要将图形弄得太大。也许我很幸运,但我还没有遇到过分页符问题。

相关内容