如何在不将排版放入环境中的情况下测量垂直空间?

如何在不将排版放入环境中的情况下测量垂直空间?

我想实现自动清除在新文本{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自动清除包装。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}

自动清除浮动数字

相关内容