
情況:我使用 a 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
},
}
順便說一句,您也可以用 key 來處理圖例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}