Estou querendo inserir uma nova página dentro de umcaixa de coresambiente, mas o exemplo a seguir mostra que ele ignora o \newpage
comando:
\documentclass[11pt]{book}
\usepackage{lipsum}
\usepackage[breakable,skins]{tcolorbox}
\newtcolorbox{activitybox}{%
breakable,
enhanced,
colback=white,
colframe=black,
coltitle=white,
title={\bfseries Title}
}
\begin{document}
\begin{activitybox}
\lipsum[1]
\newpage
\lipsum[1]
\end{activitybox}
\end{document}
A documentação sugere que a única maneira de fazer isso é criar umpausa falsa (página 373)onde eu crio dois tcolorbox
ambientes separados entre o \newpage
comando com os parâmetros de skin definidos como skin=enhancedfirst
e skin=enhancedlast
respectivamente.
\documentclass[11pt]{book}
\usepackage{lipsum}
\usepackage[breakable,skins]{tcolorbox}
\newtcolorbox{activitybox}[1][]{%
breakable,
enhanced,
colback=white,
colframe=black,
coltitle=white,
#1
}
\begin{document}
\begin{activitybox}[title=Title,skin=enhancedfirst]
\lipsum[1]
\end{activitybox}
\newpage
\begin{activitybox}[skin=enhancedlast]
\lipsum[1]
\end{activitybox}
\end{document}
O problema com essa ideia é que a nova página pode precisar ser colocada em ambientes. Eles terão então que ser fechados prematuramente e abertos novamente, garantindo que o estado do ambiente continue como antes. Também pode haver outras definições de início e fim nesses ambientes que não deveriam ser chamadas, pois o ambiente ainda não terminou verdadeiramente e ainda continua na página.
Uma solução alternativa é utilizar obreak at
(página 355)parâmetro que quebrará o tcolorbox
em um determinado comprimento. Isso é inutilizável na minha situação, pois o número de tcolorbox
ambientes chega a centenas, com cada edição do documento necessitando de um recálculo de cada break at
parâmetro, o que por sua vez só é possível após uma renderização completa do documento para poder medir o novo comprimento manualmente .
Em um nível inferior, uma quebra de página é possível quandobreakable
(página 351)está ativado e o tcolourbox
ambiente precisa abranger mais de uma página. É possível disparar essa quebra de página em um nível superior ou pelo menos preencher o restante da página com espaço vertical em branco?
Responder1
Você poderia usar
\documentclass[11pt]{book}
\usepackage{lipsum}
\usepackage[breakable,skins]{tcolorbox}
\newtcolorbox{activitybox}[1][]{%
breakable,
enhanced,
colback=white,
colframe=black,
coltitle=white,
#1
}
\newcommand*{\fakebreak}{\par\vspace{\textheight minus \textheight}\pagebreak}
\begin{document}
\begin{activitybox}[title=Title]
\lipsum[1]
\fakebreak
\lipsum[1]
\end{activitybox}
\end{document}
Mas observe que o resultado é diferente, pois a caixa será preenchida até o final da página!
Se você quiser um comportamento semelhante para pausas automáticas, use a opção height fixed for=first and middle
:
\documentclass[11pt]{book}
\usepackage{lipsum}
\usepackage[breakable,skins]{tcolorbox}
\newtcolorbox{activitybox}[1][]{%
breakable,
enhanced,
colback=white,
colframe=black,
coltitle=white,
#1
}
\newcommand*{\fakebreak}{\par\vspace{\textheight minus \textheight}\pagebreak}
\begin{document}
\begin{activitybox}[title=Title,height fixed for=first and middle]
\lipsum[1]
\fakebreak
\lipsum[1-2]
\parbox{\linewidth}{\lipsum[3-4]}% \parbox used to force an early page break
\lipsum[5-7]
\end{activitybox}
\end{document}