Работа с рисунками wrapfig в LaTeX

Есть ли способ избежать такого поведения изображений.

Вот что обертывает картинку:

\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} 
Комментарии к вопросу (2)
Решение

Описанное вами поведение вызвано использованием среды 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}

теперь дает:

Комментарии (6)

В принятом ответе предлагается один метод (сделать фигуру плавающей). Если вам нужно только убрать белое поле на последующей странице, вы можете просто добавить отрицательный интервал. Адаптация примера Gonzalo Medina's:

\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}

Оба этих метода приводят к следующему результату:

Комментарии (5)

Если вам нужна неплавающая среда оберток, но вы не хотите, чтобы фигуры когда-либо выходили за пределы нижней части страницы, это означает, что иногда вам придется делать разрыв страницы перед началом абзаца. Вы можете сделать это автоматически, определив команду (в преамбуле), которая сохраняет содержимое рисунка в ячейке сохранения, проверяет высоту ячейки, а затем заставляет разрывать страницу, если это необходимо. См. следующий пример:

\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}

который выдает следующий результат:

Предупреждаем, что если ваши фигуры высокие, это может привести к очень плохим разрывам страниц на коротких страницах и/или, в зависимости от ваших настроек, привести к заниженным предупреждениям vbox.

Комментарии (0)