Wrapfig - 为什么图形放在边缘?

Wrapfig - 为什么图形放在边缘?

我已经创建了一个 wrapfig 环境

\newenvironment{usefulterms}{
\begin{wrapfigure}{l}[0pt]{0.05\textwidth}
\vspace{-15pt}
\includegraphics[width = 0.05\textwidth]{abc.jpg}
\vspace{-25pt}
\end{wrapfigure}
\noindent{\textbf{Useful Terms}} \\
\newline}
{\newline}

问题是,即使我指定了 0pt 的悬垂,它仍然位于边距中;

在此处输入图片描述

为什么这个命令被“违背”了?

谢谢

缺口

答案1

这是因为环境中的材料被放置在一个组内,这让人感到困惑wrapfig。第 1 页包装文档,说

如果你将一个换行图放在 parbox 或 minipage 中,或者任何其他类型的分组中,则文本换行应该在组结束之前结束。

答案2

我知道我迟到了,但请注意,可以创建一个包含工作wrapfigure环境的环境。

\documentclass[]{article}

\usepackage{environ}% to collect the body of the environment
\usepackage{etoolbox}% for \AfterEndEnvironment hook
\usepackage{wrapfig}
\usepackage{graphicx}
\usepackage{showframe}% to show that they don't go into the margin

\AfterEndEnvironment{afterend}{\AfterEnd}

\newcommand{\setafterend}[1]{%
  \gdef\AfterEnd{%
    \begin{wrapfigure}{l}[0pt]{2cm}%
      \includegraphics[width=2cm]{example-image}%
    \end{wrapfigure}%
    #1%
  }%
}
\NewEnviron{afterend}%
{%
  \expandafter\setafterend\expandafter{\BODY}%
}

\begin{document}
\begin{afterend}
  foo
\end{afterend}
\begin{afterend}
  bar
\end{afterend}
\end{document}

答案3

稍后再加入讨论。wrapfig.sty 中提供了定义新环境的功能(见下文),但在这个带有小图像(图标)的示例中,包装肯定会在环境关闭之前完成。我认为它只需要\par在末尾添加一个适当的 ,而不是\newline。我还擅自调整了垂直间距

\newenvironment{usefulterms}{\par
 \bigskip
 \begin{wrapfigure}{l}[0pt]{0.05\textwidth}
 \vspace{-15pt}
 \includegraphics[width = 0.05\textwidth]{icon-image}
 \vspace{-25pt}
\end{wrapfigure}
\noindent{\textbf{Useful Terms}}\\*[7pt]}
{\par\bigskip}

我不确定负\vspaces 的用途,所以我保留了它们,但我认为它们的部分目的是抵消\intextsep,可以在环境中将其设置为零。

关于创建新环境,即使是 wrapfig 环境也是根据和定义的\wrapfloat\endwrapfloat它们旨在用于新环境定义。这不是一个神奇的解决方案,因为图形和包装将尝试在新环境结束后启动,而不是在新环境内启动。因此,解决方法是在新环境中启动布局。

\makeatletter
\newenvironment{sillytimes}{\par
  \mbox{}\par
  \setlength{\intextsep}{0pt}
  \wrapfloat{figure}{l}[0pt]{5pt}
   \rule{5pt}{45pt}% Instead of an image, use a rule
  \endwrapfloat
  \WF@startfloating % Perform placement here
 \noindent\textbf{Silly Times}\\*[7pt]}
{\par\mbox{}\par\aftergroup\par}

在此定义中,\WF@startfloating在以下位置启动放置\noindent。这里不是图像,而是一条又高又粗的线。我将更改为,以便\bigskip\mbox{}\par数更接近垂直位置。有助于\aftergroup\par确保换行在环境之后的文本中适当结束或继续。

相关内容