对选定部分禁用 \FloatBarrier

对选定部分禁用 \FloatBarrier

我正在使用\usepackage[section,above,below]{placeins}它,它完全符合我的要求。为了避免出现太多空白页,我正在寻找一个命令来禁用\FloatBarrier以下\section内容。这可能吗?

请考虑这个例子来说明这个问题:

\documentclass{book}
\usepackage[section,above,below]{placeins}
\usepackage{graphicx}
\begin{document}
    \chapter{Only chapter}
    This very short introduction leaves most of the page empty...
% ---- HERE, A PAGE BREAK OCCURS ----
    \begin{figure}
        \includegraphics[width=\textwidth,height=8cm]{example-image-a}
        \caption{heading}\label{key}
    \end{figure}
    \section{My section}
    This page break is annoying!
\end{document}

答案1

placeins您可以在修改之前保存原始部分命令:

\documentclass{book}
\let\origsection\section
\usepackage[section,above,below]{placeins}

\usepackage{graphicx}
\begin{document}
\show\section
    \chapter{Only chapter}
    This very short introduction leaves most of the page empty...
% ---- HERE, A PAGE BREAK OCCURS ----
    \begin{figure}
        \includegraphics[width=\textwidth,height=8cm]{example-image-a}
        \caption{heading}\label{key}
    \end{figure}
    \origsection{My section}
    This page break is annoying!
\end{document}

答案2

section选项placeins基本上变成\section了:

\FloatBarrier\section

David 的解决方案旨在局部地回到的初始定义\section

这是另一种方法。它\FloatBarrier改为局部禁用 的效果:

\let\saveFloatBarrier\FloatBarrier% save the original command
\let\FloatBarrier\relax% disable FloatBarrier's effect
\section{My section without float barrier}
\let\FloatBarrier\saveFloatBarrier% restore FloatBarrier's original definition.

我更喜欢这种方法,因为它不会摆弄\section的定义,您可以继续使用常规\section命令(这使得语法突出显示和 IDE 跟踪分段),并且所有重新定义都位于它生效的位置(即靠近宏\section,而不是在序言中)。
但是,这种方法更冗长且不太紧凑 - 特别是如果您打算多次使用 (David 的答案一劳永逸地解决了这个问题)。


\documentclass{book}
\usepackage[section,above,below]{placeins}
\usepackage{graphicx}
\begin{document}
    \chapter{Only chapter}
    This very short introduction leaves most of the page empty...
    \begin{figure}
        \includegraphics[width=\textwidth,height=8cm]{example-image-a}
        \caption{heading}\label{key}
    \end{figure}

\let\saveFloatBarrier\FloatBarrier
\let\FloatBarrier\relax
    \section{My section}
\let\FloatBarrier\saveFloatBarrier
    This page break is annoying!
\end{document}

相关内容