在 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=enhancedfirstskin=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}

相关内容