情况:我使用tcolorbox
,但有时框的内容和图例被分页分隔。我想避免这种情况,但让框在其内容中可分页。
我尝试了不同的方法,包括抑制内容和图例之间的换行符(即使它是第二好的选择),但我想我做错了。
以下是这种情况的一个例子:
\documentclass{scrbook}
\usepackage[most]{tcolorbox}
\usepackage{setspace}
\usepackage{needspace}
\usepackage{lipsum}
\usepackage[french]{babel}
\newtcolorbox{carnetethno}[1][]{
breakable, %pour casser les boîtes sur deux pages
empty,
before upper*={
\newcommand{\transfert}{#1}
\setstretch{1.1}
\par\noindent\nobreak
},
after upper*={
\par\textsc{\transfert}
},
}
\begin{document}
\section{Example}
\lipsum[1-3] \\
Bla~~\\
\begin{carnetethno}[Here the legend]
\lipsum[1]
\end{carnetethno}
\end{document}
答案1
您可以\nopagebreak
在图例之前添加:
\newtcolorbox{carnetethno}[1][]{
breakable, %pour casser les boîtes sur deux pages
empty,
before upper*={
\newcommand{\transfert}{#1}
\setstretch{1.1}
\par\noindent\nobreak
},
after upper*={
\nopagebreak\par\textsc{\transfert}% <-- prevent page break before
},
}
顺便说一句,您还可以使用title
键来处理图例。要将其放在框下方,请使用detach title
;然后使用 来获取标题文本\tcbtitletext
,使用 来获取格式化的标题\tcbtitle
。我建议使用 来定义您的tcolorbox
:
\newtcolorbox{carnetethno}[1][]{
breakable, %pour casser les boîtes sur deux pages
empty,
before upper*={
\setstretch{1.1}
\par\noindent\nobreak
},
detach title,
fonttitle=\scshape,
coltitle=black,
after upper*={
\nopagebreak\par\tcbtitle
},
#1
}
我把参数放在#1
最后,这样您就可以为一个特定的框设置额外的选项。
完整示例:
\documentclass{scrbook}
\usepackage[most]{tcolorbox}
\usepackage{setspace}
\usepackage{needspace}
\usepackage{lipsum}
\usepackage[french]{babel}
\newtcolorbox{carnetethno}[1][]{
breakable, %pour casser les boîtes sur deux pages
empty,
before upper*={
\setstretch{1.1}
\par\noindent\nobreak
},
detach title,
fonttitle=\scshape,
coltitle=black,
after upper*={
\nopagebreak\par\tcbtitle
},
#1
}
\begin{document}
\section{Example}
\lipsum[1-3] \\
% Bla~~\\
\begin{carnetethno}[title={Here the legend}]
\lipsum[1]
\end{carnetethno}
\begin{carnetethno}[title={Here the legend}, coltitle=red]
\lipsum[1]
\end{carnetethno}
\end{document}