Wrapfigure 在环境中影响文档的其余部分

Wrapfigure 在环境中影响文档的其余部分

我遇到了 的一个奇怪行为wrapfigure,我在以下示例中将其隔离。我不知道这是否是一个错误。

我有这个乳胶来源:

\documentclass[a4paper]{article}


\usepackage[czech]{babel}

\usepackage{graphicx}
\usepackage{wrapfig}

\newenvironment{myenvironment}{}{}

\def\poisonousparagraph{

\begin{myenvironment}

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam at rhoncus libero. Nunc auctor neque ut urna sodales vestibulum. 

\end{myenvironment}

}

\begin{document}


\begin{wrapfigure}{r}{0.5\textwidth}
  \begin{center}
    \includegraphics[width=0.48\textwidth]{some_picture}
  \end{center}

  \caption{Lorem ipsum}
\end{wrapfigure}



\poisonousparagraph
\poisonousparagraph
\poisonousparagraph
\poisonousparagraph
\poisonousparagraph
\poisonousparagraph
\poisonousparagraph
\poisonousparagraph



\end{document}

这些段落并没有Lorem ipsum很好地换行,而是在整个文档中只有半页宽,就像(通过 PDF 链接到我的服务器)。

然而,“解决”这个问题的方法是将文本poisonousparagraph 更长。或者,如果我完全删除myenvironment。然而,在实际的例子中,我需要使用自定义环境,而我需要使用像这样的简短文本。

到底发生了什么事?

编辑:正如我所尝试的,它与图片本身无关,如果我将其更改为 .png,它仍然会执行相同的操作。此外,当同时使用latex和时,它的行为也相同pdflatex

答案1

\poisonousparagraph将内部 wrapfig 命令的内容放在末尾\WF@mypar似乎可以解决问题(我用大约相同大小的规则替换了图像):

在此处输入图片描述

\documentclass[a4paper]{article}

\usepackage[czech]{babel}

\usepackage{graphicx}
\usepackage{wrapfig}

\newenvironment{myenvironment}{}{}

\makeatletter
\def\poisonousparagraph{

\begin{myenvironment}

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam at rhoncus libero. Nunc auctor neque ut urna sodales vestibulum. 

\end{myenvironment}
\@@par
\ifnum\@@parshape=\z@ \let\WF@pspars\@empty \fi % reset `parshape'
\global\advance\c@WF@wrappedlines-\prevgraf \prevgraf\z@
\ifnum\c@WF@wrappedlines<\tw@ \WF@finale \fi

}
\makeatother

\begin{document}

\begin{wrapfigure}{r}{0.5\textwidth}
  \begin{center}
    \rule{0.48\textwidth}{2cm}
  \end{center}

  \caption{Lorem ipsum}
\end{wrapfigure}

\poisonousparagraph
\poisonousparagraph
\poisonousparagraph
\poisonousparagraph
\poisonousparagraph
\poisonousparagraph
\poisonousparagraph
\poisonousparagraph

\end{document}

答案2

解决方案来自菲利普·古特是完美的,但我想提供一种更简单的方法,仅供参考。

根据包裹图文档

\linewidth现在已在换行文本中进行了调整,但由于一次只能为整个段落设置,因此换行后它将一直保留错误的值,直到该段落完成。

因此,您希望通过\在之后插入来手动重新启动段落wrapfig,您可能需要执行以下操作

\documentclass[a4paper]{article}

\usepackage[czech]{babel}

\usepackage{graphicx}
\usepackage{wrapfig}

\newenvironment{myenvironment}{}{}

\def\poisonousparagraph{

\begin{myenvironment}

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam at rhoncus libero. Nunc auctor neque ut urna sodales vestibulum. 

\end{myenvironment}

}

\begin{document}

\begin{wrapfigure}{r}{0.5\textwidth}
\begin{center}
\includegraphics[width=0.48\textwidth]{back.jpg}
\end{center}

\caption{Lorem ipsum}
\end{wrapfigure}
\
\

\poisonousparagraph
\poisonousparagraph
\poisonousparagraph
\poisonousparagraph
\poisonousparagraph
\poisonousparagraph
\poisonousparagraph
\poisonousparagraph

\end{document}

它看起来是这样的

经线图形

相关内容