![Evitar que tcolorbox esté al final de una página](https://rvso.com/image/400374/Evitar%20que%20tcolorbox%20est%C3%A9%20al%20final%20de%20una%20p%C3%A1gina.png)
¿Hay alguna forma de evitar que un tcolorbox esté en la parte inferior de una página y, en su lugar, pasar a la página siguiente automáticamente?
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}
Respuesta1
Prueba esto:
\makeatletter
\newtcolorbox{outcome}{before skip=2em, after={%
\tcb@parfillskip@check\par\ifvmode\nointerlineskip
\nobreak
\addvspace{\glueexpr 1em-\parskip}\fi
}}
\makeatother
El código se copia palabra por palabra de la definición de after skip/.style
in tcolorbox.sty
, #1
se reemplaza por el valor codificado 1em
y se \nobreak
agrega para mantener el cuadro junto con el siguiente párrafo.
Respuesta2
Aquí hay una forma de mi antigua respuesta.aquí:
\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}