避免颜色框中的内容和图例之间的断页

避免颜色框中的内容和图例之间的断页

情况:我使用tcolorbox,但有时框的内容和图例被分页分隔。我想避免这种情况,但让框在其内容中可分页。

我尝试了不同的方法,包括抑制内容和图例之间的换行符(即使它是第二好的选择),但我想我做错了。

以下是这种情况的一个例子:

\documentclass{scrbook}

\usepackage[most]{tcolorbox}
\usepackage{setspace}
\usepackage{needspace}
\usepackage{lipsum}
\usepackage[french]{babel}

\newtcolorbox{carnetethno}[1][]{
    breakable, %pour casser les boîtes sur deux pages
    empty,
    before upper*={
        \newcommand{\transfert}{#1}
        \setstretch{1.1}
        \par\noindent\nobreak
    },
    after upper*={
        \par\textsc{\transfert}
    },
}

\begin{document}

    \section{Example}

\lipsum[1-3] \\

Bla~~\\

\begin{carnetethno}[Here the legend]

\lipsum[1]

\end{carnetethno}

\end{document}

答案1

您可以\nopagebreak在图例之前添加:

\newtcolorbox{carnetethno}[1][]{
    breakable, %pour casser les boîtes sur deux pages
    empty,
    before upper*={
        \newcommand{\transfert}{#1}
        \setstretch{1.1}
        \par\noindent\nobreak
    },
    after upper*={
        \nopagebreak\par\textsc{\transfert}% <-- prevent page break before
    },
}

顺便说一句,您还可以使用title键来处理图例。要将其放在框下方,请使用detach title;然后使用 来获取标题文本\tcbtitletext,使用 来获取格式化的标题\tcbtitle。我建议使用 来定义您的tcolorbox

\newtcolorbox{carnetethno}[1][]{
    breakable, %pour casser les boîtes sur deux pages
    empty,
    before upper*={
        \setstretch{1.1}
        \par\noindent\nobreak
    },
    detach title,
    fonttitle=\scshape,
    coltitle=black,
    after upper*={
        \nopagebreak\par\tcbtitle
    },
    #1
}

我把参数放在#1最后,这样您就可以为一个特定的框设置额外的选项。

完整示例:

\documentclass{scrbook}

\usepackage[most]{tcolorbox}
\usepackage{setspace}
\usepackage{needspace}
\usepackage{lipsum}
\usepackage[french]{babel}

\newtcolorbox{carnetethno}[1][]{
    breakable, %pour casser les boîtes sur deux pages
    empty,
    before upper*={
        \setstretch{1.1}
        \par\noindent\nobreak
    },
    detach title,
    fonttitle=\scshape,
    coltitle=black,
    after upper*={
        \nopagebreak\par\tcbtitle
    },
    #1
}

\begin{document}

    \section{Example}

\lipsum[1-3] \\

% Bla~~\\

\begin{carnetethno}[title={Here the legend}]

\lipsum[1]

\end{carnetethno}

\begin{carnetethno}[title={Here the legend}, coltitle=red]

\lipsum[1]

\end{carnetethno}

\end{document}

完整示例

相关内容