考虑遵循 MWE:
\documentclass{article}
\usepackage[most]{tcolorbox}
\definecolor{block-gray}{gray}{0.95}
\newtcolorbox{zitat}[2][]{%
breakable, % IMPORTANT
colback=block-gray,
boxrule=0pt,
arc=0pt,
boxsep=0pt,
enhanced jigsaw,
borderline west={4pt}{0pt}{gray},
title={#2\par},
colbacktitle={block-gray},
coltitle={black},
fonttitle={\large\bfseries},
attach title to upper={},
box align=top,
#1,
}
\begin{document}
\section*{Quotes} % commenting removes difference
\begin{itemize}
\item \begin{zitat}{Quote 1}
Space: the final frontier.
\end{zitat}
\item \begin{zitat}{Quote 2}
A long time ago in a galaxy far, far away\ldots
\end{zitat}
\item \begin{zitat}{Quote 2}
A long time ago in a galaxy far, far away\ldots
\end{zitat}
\end{itemize}
\end{document}
产生以下输出
如您所见,与后两个项目相比,第一个项目中的 tcolorbox 之前有更多的垂直空间。
当我删除部分命令时,它就消失了。
我该怎么做才能修复此问题而无需手动调整?
(OSX El Capitan 上的 TexLive 2016,tcolorbox 2016/11/18 版本 3.96)
更新:
看来该选项breakable
是负责任的。有一个相关选项vfill before first
:
/tcb/vfill before first=true|false
在第一个部分框的开头插入\vfill
以将此部分框移动到当前页面的末尾。这可以用作 的替代方法,以/tcb/height fixed
for=first
获得对齐的列或页面。\vfill
如果框实际上没有损坏,则不会插入。
但是,删除breakable
并插入\vfill
不会重现此问题。我猜的作者tcolorbox
可能知道发生了什么。
答案1
tcolorbox
特别注意在标题后插入正确的间距。如果 应该tcolorbox
是可拆分的,这尤其棘手,因为可拆分框总是以新段落开头。将这种组合放入列表环境中似乎itemize
对算法来说太多了。
目前,我不知道如何自动处理这个问题而不冒破坏其他机制的风险。
但是,至少有两种方法可以避免这种情况。
方法一:
在章节标题后添加\@nobreakfalse
。这将关闭对标题的特殊处理,否则会产生不良影响。
\documentclass{article}
\usepackage[most]{tcolorbox}
\definecolor{block-gray}{gray}{0.95}
\newtcolorbox{zitat}[2][]{%
breakable, % IMPORTANT
colback=block-gray,
boxrule=0pt,
arc=0pt,
boxsep=0pt,
enhanced jigsaw,
borderline west={4pt}{0pt}{gray},
title={#2\par},
colbacktitle={block-gray},
coltitle={black},
fonttitle={\large\bfseries},
attach title to upper={},
box align=top,
#1,
}
\begin{document}
\section*{Quotes}
\makeatletter\@nobreakfalse\makeatother%
\begin{itemize}
\item \begin{zitat}{Quote 1}
Space: the final frontier.
\end{zitat}
\item \begin{zitat}{Quote 2}
A long time ago in a galaxy far, far away\ldots
\end{zitat}
\item \begin{zitat}{Quote 2}
A long time ago in a galaxy far, far away\ldots
\end{zitat}
\end{itemize}
\end{document}
方法二:
在标题后ignore nobreak
向第一个环境添加一个选项。或者,可以将其添加到环境的常规选项列表中。zitat
\documentclass{article}
\usepackage[most]{tcolorbox}
\definecolor{block-gray}{gray}{0.95}
\newtcolorbox{zitat}[2][]{%
breakable, % IMPORTANT
colback=block-gray,
boxrule=0pt,
arc=0pt,
boxsep=0pt,
enhanced jigsaw,
borderline west={4pt}{0pt}{gray},
title={#2\par},
colbacktitle={block-gray},
coltitle={black},
fonttitle={\large\bfseries},
attach title to upper={},
box align=top,
% ignore nobreak, %<---- could also be added here
#1,
}
\begin{document}
\section*{Quotes}
\begin{itemize}
\item \begin{zitat}[ignore nobreak]{Quote 1}
Space: the final frontier.
\end{zitat}
\item \begin{zitat}{Quote 2}
A long time ago in a galaxy far, far away\ldots
\end{zitat}
\item \begin{zitat}{Quote 2}
A long time ago in a galaxy far, far away\ldots
\end{zitat}
\end{itemize}
\end{document}
两种方法都应该能得到期望的结果。