You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在可拆分tcolorbox中设置指定高度的垂直空白区域?

实现可拆分且带精准高度空白区的学生问答tcolorbox

问题描述

需要定义一款供学生填写的可拆分tcolorbox,要求盒子内包含指定高度的垂直空白区域,无论盒子是否跨页拆分,空白区域的总高度都必须精准。尝试过\vspace{}、设置tcolorbox的height参数(但breakable选项会使其失效)、height fixed for等方法,均无法实现需求。允许通过指定空白区域高度或整个盒子高度来达成目标。

附MRE代码:

\documentclass{article}
\usepackage[most]{tcolorbox}
\usepackage{lipsum}
\begin{document}
\newtcolorbox{box_test}{enhanced,breakable,title={Title}}
\lipsum[1-3]
\begin{box_test}
\lipsum[1]
\vspace{10cm}
Exactly 10cm empty space above wanted across page break.
\end{box_test}
\begin{box_test}
\lipsum[1]
\vspace{10cm}
Exactly 10cm empty space above obtained without page break.
\end{box_test}
\end{document}

解决方案

方案思路

利用LaTeX可拆分垂直空间的特性,结合tcolorbox的breakable机制,通过刚性垂直空间命令+消除盒子额外间距实现精准高度的空白区。核心是用\vspace{<高度>}(刚性可拆分空间)替代弹性空间,并调整tcolorbox内边距参数避免额外间距干扰。

实现代码

\documentclass{article}
\usepackage[most]{tcolorbox}
\usepackage{lipsum}

% 定义带自定义空白高度的可拆分问答盒子
\newtcolorbox{answerbox}[1][10cm]{
    enhanced,
    breakable,
    title={Question},
    boxsep=0pt, % 消除盒子内容与边框的额外间距
    topsep=0pt,
    bottomsep=0pt,
    before upper={\parskip=0pt}, % 消除段落间默认间距
    after upper={\vspace{#1}} % 指定空白区域高度,默认10cm
}

\begin{document}
\lipsum[1-3]
\begin{answerbox}
\lipsum[1]
Exactly 10cm empty space above wanted across page break.
\end{answerbox}

\begin{answerbox}[8cm]
\lipsum[1]
Exactly 8cm empty space above obtained without page break.
\end{answerbox}
\end{document}

关键说明

  • boxsep=0pt、topsep=0pt、bottomsep=0pt:清除tcolorbox自带的内边距,避免这些额外间距影响空白区的精准高度。
  • \parskip=0pt:消除段落间的默认间距,确保内容与空白区的衔接高度准确。
  • after upper={\vspace{#1}}:在盒子主内容后添加指定高度的刚性垂直空间,\vspace支持跨页拆分,总高度始终等于指定值。
  • 可选参数[<高度>]:允许用户自定义每个盒子的空白高度,默认值为10cm。

若需指定整个盒子的总高度(非仅空白区),非跨页场景可结合tcolorbox的text height参数,但跨页场景仍需依赖上述\vspace方案——因为breakable模式下height参数会失效。

内容的提问来源于stack exchange,提问作者Mathieu Coquerelle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 19:47:01