我想创建一个包装器环境,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}