Не допускать размещения tcolorbox в нижней части страницы

Не допускать размещения tcolorbox в нижней части страницы

Есть ли способ сделать так, чтобы tcolorbox не находился внизу страницы, а автоматически переносился на следующую страницу?

МВЭ:

\documentclass[a4paper, 10pt, oneside, twocolumn]{memoir}

\usepackage{tcolorbox}
\usepackage{lipsum}

\newtcolorbox{outcome}{before skip=2em, after skip=1em}

\begin{document}

\section{Sample}

\begin{outcome}
    This is some sample text. This is some sample text. This is some sample text. 
\end{outcome}

\lipsum[1-6]

This is some sample text. This is some sample text. This is some sample text. This is some sample text. This is some sample text. This is some sample text. This is some sample text. This is some sample text. This is some sample text. This is some sample text. This is some sample text. This is some sample text. This is some sample text. This is some sample text. This is some sample text. 

\begin{outcome}
    Sample text.
\end{outcome}

This is some sample text. This is some sample text. This is some sample text. This is some sample text. This is some sample text. This is some sample text. This is some sample text. 

\end{document}

введите описание изображения здесь

решение1

Попробуй это:

\makeatletter
\newtcolorbox{outcome}{before skip=2em, after={%
    \tcb@parfillskip@check\par\ifvmode\nointerlineskip
    \nobreak
    \addvspace{\glueexpr 1em-\parskip}\fi
    }}
\makeatother

Код дословно скопирован из определения after skip/.styleв tcolorbox.sty, #1заменен вашим жестко закодированным значением 1emи \nobreakдобавлен для того, чтобы сохранить связь между блоком и следующим абзацем.

решение2

Вот способ из моего старого ответаздесь:

\documentclass[a4paper, 10pt, oneside, twocolumn]{memoir}

\usepackage{tcolorbox}
\usepackage{lipsum}

\newsavebox{\mybottombox} % Box to save the text of the command 
\newlength{\mybottomlength} % The length of our text inside the command
\newlength{\availafter} % The available length left on the page after placing our text


% Optional argument is the minimum length after the nobottom text for not pagebreak. Change it to your needs
\newcommand{\nobottom}[2][60pt]{\savebox{\mybottombox}{\vbox{#2}}\setlength{\mybottomlength}{\ht\mybottombox}%
\setlength{\availafter}{\dimexpr\textheight-\mybottomlength-\pagetotal\relax}\ifdim\availafter<#1%
\pagebreak\noindent\usebox{\mybottombox}%
\else%
\noindent\usebox{\mybottombox}%
\fi%
}%

\newtcolorbox{outcome}{before skip=2em, after skip=1em}

\begin{document}

\section{Sample}

\begin{outcome}
    This is some sample text. This is some sample text. This is some sample text. 
\end{outcome}

\lipsum[1-6]

This is some sample text. This is some sample text. This is some sample text. This is some sample text. This is some sample text. This is some sample text. This is some sample text. This is some sample text. This is some sample text. This is some sample text. This is some sample text. This is some sample text. This is some sample text. This is some sample text. This is some sample text. 

\nobottom{%
\begin{outcome}
    Sample text.
\end{outcome}}

This is some sample text. This is some sample text. This is some sample text. This is some sample text. This is some sample text. This is some sample text. This is some sample text. 

\end{document}

введите описание изображения здесь

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