Создать ручной разрыв страницы в tcolorbox

Создать ручной разрыв страницы в tcolorbox

Я хочу вставить новую страницу вtcolorboxсреда, но следующий пример показывает, что она игнорирует \newpageкоманду:

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

В документации указано, что единственный способ сделать это — создатьфальшивый перерыв (страница 373)где я создаю две отдельные tcolorboxсреды между \newpageкомандой с параметрами скина, установленными на skin=enhancedfirstи skin=enhancedlastсоответственно.

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

Проблема этой идеи в том, что новую страницу, возможно, придется поместить в окружения. Затем их придется преждевременно закрыть и открыть снова, убедившись, что состояние окружения продолжается с предыдущего. Также могут быть дополнительные определения начала и окончания в этих окружениях, которые не следует вызывать, поскольку окружение на самом деле не закончилось и все еще продолжается на странице.

Альтернативным решением является использованиеbreak at (страница 355)параметр, который разорвет tcolorboxна заданной длине. Это неприменимо в моей ситуации, поскольку количество tcolorboxсред достигает сотен, и каждое редактирование документа требует пересчета каждого break atпараметра, что в свою очередь возможно только после полного рендеринга документа, чтобы иметь возможность измерить новую длину вручную.

На более низком уровне возможен разрыв страницы, когдаbreakable (страница 351)включено, и tcolourboxсреда должна охватывать более одной страницы. Возможно ли запустить этот разрыв страницы на более высоком уровне или, по крайней мере, заполнить остальную часть страницы пустым вертикальным пространством?

решение1

Вы могли бы использовать

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

Но учтите, что результат будет другим, поскольку поле будет заполнено до конца страницы!

Если вы хотите, чтобы подобное поведение применялось к автоматическим перерывам, используйте опцию 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}

Связанный контент