我想实现自动清除在新文本{floatingfigure}
开头的\section
潘多克。为了实现这个功能,我需要一种方法来测量自从放置以来由 LaTeX 排版的垂直空间{floatingfigure}
。
我尝试了这个placeins
包,但没有效果。
理想的解决方案是放置一个起始标记。不应使用环境或任何其他块/括号/方括号结构,因为后面的文本{floatingfigure}
通常是未知的。一切都需要通过在序言中更新命令和环境来实现。
如果第二个起始标记跟在第一个起始标记之后而没有进行测量,则应将垂直测量重置为 0pt。
这是一个最小工作示例。我已将注释从我想测量的位置放置到其中。
\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}
\usepackage{calc}
\newlength\imgheight
\usepackage{floatflt}
\renewenvironment{description}{%
\renewcommand{\includegraphics}[1]{\vspace{-1ex}\Oldincludegraphics[width=4cm]{##1}}
\renewcommand{\item}[1][]{
\settototalheight\imgheight{##1}%
\global\imgheight=\imgheight%
##1%
\end{floatingfigure}%
% I would like to measure vertical space from here...
}%
\hspace{0pt}%
\begin{floatingfigure}[l]{4cm}}%
{}
% 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}
% ... to here.
\vspace{\dimexpr\imgheight-3\baselineskip}
\section{Section title}
\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}
\blindtext
\end{document}
以下文档中,第一段太短,无法完全包裹floatingfigure
A。因此,我想实现floatingfigure
在新的部分或新的开始时自动清除floatingfigure
。目前,我已经通过添加手动完成了\vspace{\dimexpr\imgheight-3\baselineskip}
。
答案1
感谢@karlkoeller 的评论,我找到了基于 的解决方案。在下面的示例中,在新的或 的开头都可以\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}