![mdframed 无法在页面之间正确分割](https://linux22.com/image/276033/mdframed%20%E6%97%A0%E6%B3%95%E5%9C%A8%E9%A1%B5%E9%9D%A2%E4%B9%8B%E9%97%B4%E6%AD%A3%E7%A1%AE%E5%88%86%E5%89%B2.png)
我习惯mdframed
制作盒子并将它们拆分到各个页面。但是,有时mdframed
会拆分!非常奇怪地拆分到各个页面。在这个例子中,他更喜欢拆分,同时有足够的空间来放置所有内容。
我想知道冲突在哪里。我对调整这个例子不感兴趣,因为我有数百个盒子。我需要了解问题出在哪里,并立即在整本书中修复它。
\documentclass[a4paper,10pt,twocolumn]{book}
\usepackage[english]{babel}
\newcommand{\mytext}{uutien gaaaetlmsl t n.tu aii s liwmuarpulfoaf ealiesnPui sutuacttcuMitai ibioErertix}
\usepackage[framemethod=tikz]{mdframed}
\tikzstyle{titregris} =[draw=gray, thick, fill=white,
text=black, rectangle,minimum height=0.7cm]
\mdfdefinestyle{Argumentstyle}{}
\begin{document}
${}$ \vspace{18cm}
\begin{mdframed}[style=Argumentstyle,
firstextra={\node[titregris,xshift=5mm] at (P-|O) {puttetuiroe};},]
\begin {enumerate}
\item \mytext \mytext
\item \mytext \mytext
\item \mytext \mytext
\item \mytext \mytext
\item \mytext \mytext
\end {enumerate}
\end{mdframed}
\end{document}
更新:我发现当之前有空白空间时会发生错误的分隔。mdframed
似乎计算了所需的空白空间,正确地拆分了框以使第一部分具有正确的长度,但是然后它总是从下一页的开头错误地开始!
更新 2:我认为现在问题是由定义框标题的节点引起的。也就是说,它提供了不适合计算的额外高度...我将标题的当前形式更改为通常的形式 ( frametitlerule=true, frametitle={MyTitle}
),问题就从整个文档中消失了 :) 不过,我确实喜欢以前形式的节点...
更新 3:这似乎确实是来自标题框,它向上移动了几毫米,并且mdframed
没有考虑到可用空间的计算。到目前为止,我发现的唯一解决方法是将标题框移到主框内...我检查了一下,这样整个文档就没问题了。
答案1
skipabove
您可以使用和为标题栏保留空间topinnermargin
。此外,事实证明,您应该通过设置零大小的边界框来隐藏此标题框的大小。这可以改善跨列的分栏:
\documentclass[a4paper,10pt,twocolumn]{book}
\usepackage[english]{babel}
\newcommand{\mytext}{uutien gaaaetlmsl t n.tu aii s liwmuarpulfoaf ealiesnPui sutuacttcuMitai ibioErertix}
\usepackage[framemethod=tikz]{mdframed}
\tikzstyle{titregris}=[draw=gray, thick, fill=white,
text=black, rectangle, minimum height=0.7cm]
\mdfdefinestyle{Argumentstyle}{}
\begin{document}
\vspace*{18cm}
\begin{mdframed}[style=Argumentstyle,
skipabove={1.2\baselineskip},
innertopmargin={1.2\baselineskip},
firstextra={\useasboundingbox (P) rectangle (P); \node[titregris,xshift=5mm] at (P-|O) {puttetuiroe};},
singleextra={\useasboundingbox (P) rectangle (P); \node[titregris,xshift=5mm] at (P-|O) {puttetuiroe};}]
\begin {enumerate}
\item \mytext \mytext
\item \mytext \mytext
\item \mytext \mytext
\item \mytext \mytext
\item \mytext \mytext
\end {enumerate}
\end{mdframed}
\mytext
\begin{mdframed}[style=Argumentstyle,
skipabove={1.2\baselineskip},
innertopmargin={1.2\baselineskip},
firstextra={\useasboundingbox (P) rectangle (P); \node[titregris,xshift=5mm] at (P-|O) {puttetuiroe};},
singleextra={\useasboundingbox (P) rectangle (P); \node[titregris,xshift=5mm] at (P-|O) {puttetuiroe};}]
\begin {enumerate}
\item \mytext \mytext
\item \mytext \mytext
\item \mytext \mytext
\item \mytext \mytext
\item \mytext \mytext
\end {enumerate}
\end{mdframed}
\end{document}
顺便说一句,请注意使用\vspace*
而不是${}$ \vspace
。星号*
表示不会在页面边界等处丢弃空格。
输出\vspace*{20cm}
为: