Я хочу вставить новую страницу в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}