更新

更新

我在较大的文档中遇到了一个问题,图片会夹在 mdframed 框的间隙中。因此,情况是mdframed 框应该在页面末尾断开如果它太大,不合适,图像应自动定位

但图像不应该位于 mdframed 框的两个部分之间。因此,mdframed 应该位于图像之前或之后(即,允许页面破坏 mdframed,但不允许破坏图像)。

有没有办法相应地更改 mdframed 的分页和定位或图像的定位?例如,让 mdframed 浮动优先于图像浮动。(当然,我总是可以为单个特殊的“错误”定位图像设置例外,然后定位它,例如“[b]”,但我正在寻找一个自动选项)。

下面是 MWE 和截图。

谨致问候并感谢您的时间,

下个星期四

\documentclass{scrbook}
\usepackage{lipsum}
\usepackage{mdframed}
\usepackage[demo]{graphicx}

\begin{document}\mainmatter\chapter{MWE}
\lipsum[1-3]
\begin{figure}\centering{\includegraphics[width=8cm,height=5cm]{exampleimg}\caption{exampleimg}}\end{figure}
\begin{mdframed}
\lipsum[4-6]
\end{mdframed}%

\end{document}

MWE 截图

更新

由于似乎没有太多解决方案,此更新应该记录(在我看来较差的)可能的修复,以防有人偶然发现这个问题并且热修复解决了他们的问题:

  • mdframed 有一个选项可以\mdfsetup{nobreak=true}防止框跨越多个页面
  • 人物定位已经讨论了很多,并且好的答案

一个可能的想法是在每个 mdframed 框前使用 \FloatBarrier (pkg:placeins),尽管它并不像它应该的那样智能。它可能会破坏比修复的更多:一个可能适合页面剩余部分的非常小的 mdframed 框被禁止,而不适合的较大图像会导致第一页的剩余部分未使用。此 MWE 将是:

\documentclass{scrbook}
\usepackage{lipsum}\usepackage{mdframed}\usepackage[demo]{graphicx}

\usepackage{placeins}

\newenvironment{mymdframed}{\FloatBarrier\begin{mdframed}}{\end{mdframed}}

\begin{document}\mainmatter\chapter{MWE}
\lipsum[1-3]
\begin{figure}\centering{\includegraphics[width=8cm,height=5cm{exampleimg}\caption{exampleimg}}\end{figure}
\begin{mymdframed}\lipsum[4-6]\end{mymdframed}%
\lipsum[4-16]
\end{document}

答案1

只要稍加注意,您就可以设置浮动放置参数以防止区域内的浮动,这里我将其设置totalnumber为 0。这是一个全局设置,因此您需要在最后明确将其设置回来,您不能使用组来恢复事物。此外,由于其全局性质和分页时间,有时需要小心设置它的确切位置。但在这种情况下,立即围绕环境的“明显”位置有效:

在此处输入图片描述

\documentclass{scrbook}
\usepackage{lipsum}
\usepackage{mdframed}
\usepackage[demo]{graphicx}

\begin{document}\mainmatter\chapter{MWE}
\lipsum[1-3]
\begin{figure}\centering{\includegraphics[width=8cm,height=5cm]{exampleimg}
\caption{exampleimg}}\end{figure}

\setcounter{totalnumber}{0}
\begin{mdframed}
\lipsum[4-6]
\end{mdframed}%
\setcounter{totalnumber}{3}

\end{document}

相关内容