为什么我的自定义 wrapfig 环境乱了?

为什么我的自定义 wrapfig 环境乱了?

我想创建一个包装器环境,wrapfigure以便在本地设置\initextsep为 0。我知道,可以用不同的方式来做,但这段代码表现出奇怪的行为。它将图形移动到一个地方定义它的段落。

\documentclass{article}
\usepackage{lipsum}
\usepackage{wrapfig}
\begin{document}
\lipsum[1]
\newenvironment{mywrapfigure}[2]{
   \begin{wrapfigure}{#1}{#2}
   }
   {
   \end{wrapfigure}
}

\begin{mywrapfigure}{r}{.3\textwidth}
   \rule{5cm}{5cm}
\end{mywrapfigure}
\lipsum[1]
\end{document}

请注意,我所做的只是在周围创建一个虚拟环境wrapfigure在此处输入图片描述

我该如何解决?

答案1

也许这是想要的包装器:我添加了一个可选的第 5 个参数来保存值\intexsep,这里默认为0pt

wrapfig环境不是用 定义的真实环境\newenvironment。在这种情况下,最好使用虚假环境启动和结束命令\wrapfigure\endwrapfigure

\documentclass{article}
\usepackage{blindtext}
\usepackage{wrapfig}

\usepackage{xparse}


\NewDocumentEnvironment{mywrapfigure}{O{}mO{\wrapoverhang}mO{0pt}}{%
  \setlength{\intextsep}{#5}%  Defaults to 0pt \plus 0pt \minus 0pt
  \wrapfigure[#1]{#2}[#3]{#4}%
}{%
  \endwrapfigure%
}


\begin{document}

\begin{mywrapfigure}[8]{r}[20pt]{.4\textwidth}
  \rule{5cm}{2cm}
\end{mywrapfigure}
\blindtext[1]

\hrule
\vskip\baselineskip
\noindent Traditional: 
\begin{wrapfigure}[8]{r}[20pt]{.4\textwidth}
  \rule{5cm}{2cm}
\end{wrapfigure}
\blindtext[1]

\end{document}

在此处输入图片描述

相关内容