Impedir que o tcolorbox fique na parte inferior de uma página

Impedir que o tcolorbox fique na parte inferior de uma página

Existe alguma maneira de evitar que um tcolorbox fique na parte inferior de uma página e, em vez disso, empurre-o para a próxima página automaticamente?

MWE:

\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}

insira a descrição da imagem aqui

Responder1

Experimente isto:

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

O código é copiado literalmente da definição de after skip/.stylein tcolorbox.sty, #1substituído pelo seu valor codificado 1eme \nobreakadicionado para manter a caixa junto com o parágrafo seguinte.

Responder2

Aqui está um caminho da minha antiga respostaaqui:

\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}

insira a descrição da imagem aqui

informação relacionada