![Impedir que o tcolorbox fique na parte inferior de uma página](https://rvso.com/image/400374/Impedir%20que%20o%20tcolorbox%20fique%20na%20parte%20inferior%20de%20uma%20p%C3%A1gina.png)
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}
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/.style
in tcolorbox.sty
, #1
substituído pelo seu valor codificado 1em
e \nobreak
adicionado 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}