我遇到了 的一个奇怪行为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}
它看起来是这样的