Избегайте разрыва между содержимым и легендой в цветовой палитре

Избегайте разрыва между содержимым и легендой в цветовой палитре

Ситуация: Я использую 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}

полный пример

Связанный контент