我该如何清除浮动图?

我该如何清除浮动图?

我正在寻找的概念类似于 CSS 的“clear”属性。我试图获取两个段落,每个段落都有一个在左侧浮动的图像:

\begin{floatingfigure}[l]{5cm}
\fbox{
\centering
\includegraphics[scale=0.5]{myimage}
}
Some text
\end{floatingfigure}


\begin{floatingfigure}[l]{5cm}
\fbox{
\centering
\includegraphics[scale=0.5]{myimage}
}
Some text
\end{floatingfigure}

在这种情况下,图像之间会发生冲突,而不是下一个浮动图形在另一个浮动图形之后开始。

我怎样才能清除浮动图?

答案1

以下是基于 的解决方案。以下示例中,在新的或 的开头均可\pagetotal自动清除包装。floatingfigurefloatingfigure\section

\documentclass{article}
\usepackage{mwe}

\makeatletter
\def\maxwidth{\ifdim\Gin@nat@width>\linewidth\linewidth
\else\Gin@nat@width\fi}
\makeatother
\let\Oldincludegraphics\includegraphics
\renewcommand{\includegraphics}[1]{\Oldincludegraphics[width=\maxwidth]{#1}}

\setlength{\parindent}{0pt}

% begin preamble.tex   
\usepackage{calc}
\newlength\vimgflt
\newlength\vposflt
\newlength\vtypesetflt
\newlength\vspaceflt

\usepackage{floatflt}
\renewenvironment{description}{%
    \renewcommand{\includegraphics}[1]{\vspace{-1ex}\Oldincludegraphics[width=4cm]{##1}}
    \renewcommand{\item}[1][]{
        \settototalheight\vimgflt{##1}%
        \global\vimgflt=\vimgflt%
        ##1%
        \end{floatingfigure}%
        \setlength\vposflt\pagetotal%
        \global\vposflt=\vposflt%
        }%
    \clearflt
    \hspace{0pt}%
    \begin{floatingfigure}[l]{4cm}}%
    {}

\newcommand{\clearflt}{
    \par
    \setlength\vtypesetflt{\dimexpr\pagetotal-\vposflt}
    \ifdim \vtypesetflt<\vimgflt \setlength\vspaceflt{\dimexpr\vimgflt-\vtypesetflt+\baselineskip} \else \setlength\vspaceflt{0pt} \fi
    \vspace{\vspaceflt}
    }

\let\Oldsection\section
\renewcommand{\section}{\clearflt\Oldsection}
% end preamble.tex

\begin{document}
\begin{description}
\itemsep1pt\parskip0pt\parsep0pt
\item[\includegraphics{example-image-a}]
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam lobortis facilisis
sem. Nullam nec mi et neque pharetra sollicitudin.
\end{description}

\begin{description}
\itemsep1pt\parskip0pt\parsep0pt
\item[\includegraphics{example-image-b}]
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam lobortis facilisis
sem. Nullam nec mi et neque pharetra sollicitudin.
\end{description}

\section{Section title}
\begin{description}
\itemsep1pt\parskip0pt\parsep0pt
\item[\includegraphics{example-image-c}]
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam lobortis facilisis
sem. Nullam nec mi et neque pharetra sollicitudin.
\end{description}

\blindtext
\end{document}

自动清除浮动数字

答案2

没有内置方法可以实现这一点。但是,当发生此类冲突时,日志文件中会打印警告。这是明智的行为,因为此类问题可能发生在许多不同的情况下,您最有能力判断应该做出哪些更改。在您的情况下,一种可能性是手动在\vspace有问题的段落之间添加一个以提供足够的空间。但是有一个微妙之处,您需要在新的段落之前在其自己的段落中添加一些打印命令;在这种情况下\(反斜杠空格)就可以了。这是一个工作示例:

\documentclass{article}

\usepackage{floatflt,graphicx}

\begin{document}
\begin{floatingfigure}[l]{5cm}
\fbox{
\centering
\includegraphics[width=4cm]{example-image-a}
}
\end{floatingfigure}
Some text.

\vspace{3.5cm}
\ 

\begin{floatingfigure}[l]{5cm}
\fbox{
\centering
\includegraphics[width=4cm]{example-image-b}
}
\end{floatingfigure}
Some text.

\end{document}

示例输出

我首先将你的代码转换为最小工作示例(MWE),通过添加floatflt(的最新替代品floatfig)和graphicx包,将图形更改为标准发行版中包含的示例图像,并使它们的宽度小于您为它们请求的空间,以便它们不会溢出。现在这样做不会产生任何输出,因为浮动图形之外没有文本。事实上,环境floatingfigure应该只包含图形,也许还有\caption;段落文本应该在环境之外。因此,以下最小文档显示了您的问题:

\documentclass{article}

\usepackage{floatflt,graphicx}
\usepackage{lipsum}

\begin{document}
\begin{floatingfigure}[l]{5cm}
\fbox{
\centering
\includegraphics[width=4cm]{example-image-a}
}
\end{floatingfigure}
Some text

\begin{floatingfigure}[l]{5cm}
\fbox{
\centering
\includegraphics[width=4cm]{example-image-b}
}
\end{floatingfigure}
Some text
\end{document} 

示例错误输出

其日志文件包含

Package floatflt Warning: Floating figures 1 and 2 colliding.

一般来说,floatflt如果连续的段落包含浮动,包会不高兴。软件包的文档

相关内容