如何在可拆分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
相关产品推荐
相关产品推荐

