我正在寻找的概念类似于 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
自动清除包装。floatingfigure
floatingfigure
\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
如果连续的段落包含浮动,包会不高兴。软件包的文档。