Crie quebra de página manual no tcolorbox

Crie quebra de página manual no tcolorbox

Estou querendo inserir uma nova página dentro de umcaixa de coresambiente, mas o exemplo a seguir mostra que ele ignora o \newpagecomando:

\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 tcolorboxambientes separados entre o \newpagecomando com os parâmetros de skin definidos como skin=enhancedfirste skin=enhancedlastrespectivamente.

\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 tcolorboxem um determinado comprimento. Isso é inutilizável na minha situação, pois o número de tcolorboxambientes chega a centenas, com cada edição do documento necessitando de um recálculo de cada break atparâ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 tcolourboxambiente 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}

informação relacionada