我喜欢“第 2 节”中黄色 tcolorbox 的漂亮黄色边距(顶部和底部)和间距。不幸的是,我只在 或 之后才获得这些边距和间距\section
。\subsection
问题:a) 如果 tcolorbox 前面没有\section
或 ,则\subsection
顶部边距会更大 b) 在某些情况下,我会丢失两个 tcolorbox 之间的白色间距,请参阅我的示例。特别是灰色 tcolorbox 之间有白色间距,但黄色 tcolorbox 没有。
无论如何,如何获得同样漂亮的边距和间距?当然,在标题之后/之前添加额外的白色间距是没有问题的,例如\section
或\subsection
尊重标题。
\documentclass[a4paper]{scrbook}
\usepackage{xparse}
\usepackage{tcolorbox}
\tcbuselibrary{skins,breakable,xparse}
\NewDocumentEnvironment{Material}{o}% recommend using xparse's arg-type o
{% begin-Befehle
\begin{tcolorbox}[%
parbox=false,% wenn dieser Befehl deaktiviert ist, dann sollte unten setlength{\parskip}{0.5\baselineskip plus2pt minus2pt} aktiviert sein.
enhanced jigsaw,%
breakable,% auskommentieren, wenn die Aufgaben in einer einzigen Box zusammenhängen sollen
grow to left by=2mm,%
left*=0mm,%
grow to right by=2mm,%
right*=0mm,%
boxrule=0pt,% keine Rahmenlinie
arc=0mm,% keinen Rundung in den Ecken
colback=gray!30,% Hintergrundfarbe im Body
%beforeafter skip balanced=0pt,% kein Abstand davor und dahinter
]%
\subsubsection{Material}
\IfValueTF{#1}
{\begin{itemize}[#1]}% optional #1 is given by user
{\begin{itemize}}% optional #1 has no value
}%
{% end-Befehle
\end{itemize}%
\end{tcolorbox}%
}%
\NewDocumentEnvironment{Content}{o}% recommend using xparse's arg-type o
{% begin-Befehle
\begin{tcolorbox}[%
parbox=false,% wenn dieser Befehl deaktiviert ist, dann sollte unten setlength{\parskip}{0.5\baselineskip plus2pt minus2pt} aktiviert sein.
enhanced jigsaw,%
breakable,% auskommentieren, wenn die Aufgaben in einer einzigen Box zusammenhängen sollen
grow to left by=2mm,%
left*=0mm,%
grow to right by=2mm,%
right*=0mm,%
boxrule=0pt,% keine Rahmenlinie
arc=0mm,% keinen Rundung in den Ecken
colback=yellow!30,% Hintergrundfarbe im Body
beforeafter skip balanced=0pt,% kein Abstand davor und dahinter
]%
\subsubsection{Content}
\IfValueTF{#1}
{\begin{itemize}[#1]}% optional #1 is given by user
{\begin{itemize}}% optional #1 has no value
}%
{% end-Befehle
\end{itemize}%
\end{tcolorbox}%
}%
\begin{document}
\begin{Content}
\item Content 1
\end{Content}
\begin{Content}
\item Content 1
\end{Content}
\begin{Material}
\item Material 1
\end{Material}
\begin{Material}
\item Material 1
\end{Material}
\subsection{Subsection 1}
\begin{Content}
\item Content 1
\end{Content}
\begin{Content}
\item Content 1
\end{Content}
\begin{Material}
\item Material 1
\end{Material}
\begin{Material}
\item Material 1
\end{Material}
\end{document}
答案1
对于问题 a),将 \subsubsection 之前的空格省略为:\RedeclareSectionCommand[beforeskip=0pt]{subsubsection}
。
对于问题 b),注释掉该行beforeafter skip balanced=0pt,
。为了避免影响文档的其余部分,请仅在框中的子部分之前执行此操作,然后恢复类的原始值。
我还添加了frame empty
,以避免在 boxrule=0pt 的情况下仍然可见的小框架规则。
\documentclass[a4paper]{scrbook}
\usepackage{xparse}
\usepackage{tcolorbox}
\tcbuselibrary{skins,breakable,xparse}
\NewDocumentEnvironment{Material}{o}% recommend using xparse's arg-type o
{% begin-Befehle
\begin{tcolorbox}[%
parbox=false,% wenn dieser Befehl deaktiviert ist, dann sollte unten setlength{\parskip}{0.5\baselineskip plus2pt minus2pt} aktiviert sein.
enhanced jigsaw,%
breakable,% auskommentieren, wenn die Aufgaben in einer einzigen Box zusammenhängen sollen
grow to left by=2mm,%
left*=0mm,%
grow to right by=2mm,%
right*=0mm,%
boxrule=0pt,% keine Rahmenlinie
frame empty,% to avoid the little frame rules still visible
arc=0mm,% keinen Rundung in den Ecken
colback=gray!30,% Hintergrundfarbe im Body
%beforeafter skip balanced=0pt,% kein Abstand davor und dahinter
]%
\let\savedsubsubsection\subsubsection%
\RedeclareSectionCommand[beforeskip=0pt]{subsubsection}%
\subsubsection{Material}
\let\subsubsection\savedsubsubsection%
\IfValueTF{#1}
{\begin{itemize}[#1]}% optional #1 is given by user
{\begin{itemize}}% optional #1 has no value
}%
{% end-Befehle
\end{itemize}%
\end{tcolorbox}%
}%
\NewDocumentEnvironment{Content}{o}% recommend using xparse's arg-type o
{% begin-Befehle
\begin{tcolorbox}[%
parbox=false,% wenn dieser Befehl deaktiviert ist, dann sollte unten setlength{\parskip}{0.5\baselineskip plus2pt minus2pt} aktiviert sein.
enhanced jigsaw,%
breakable,% auskommentieren, wenn die Aufgaben in einer einzigen Box zusammenhängen sollen
grow to left by=2mm,%
left*=0mm,%
grow to right by=2mm,%
right*=0mm,%
boxrule=0pt,% keine Rahmenlinie
frame empty,% to avoid the little frame rules still visible
arc=0mm,% keinen Rundung in den Ecken
colback=yellow!30,% Hintergrundfarbe im Body
%beforeafter skip balanced=0pt,% kein Abstand davor und dahinter
]%
\let\savedsubsubsection\subsubsection%
\RedeclareSectionCommand[beforeskip=0pt]{subsubsection}%
\subsubsection{Content}
\let\subsubsection\savedsubsubsection%
\IfValueTF{#1}
{\begin{itemize}[#1]}% optional #1 is given by user
{\begin{itemize}}% optional #1 has no value
}%
{% end-Befehle
\end{itemize}%
\end{tcolorbox}%
}%
\begin{document}
\begin{Content}
\item Content 1
\end{Content}
\begin{Content}
\item Content 1
\end{Content}
\begin{Material}
\item Material 1
\end{Material}
\begin{Material}
\item Material 1
\end{Material}
\subsection{Subsection 1}
\begin{Content}
\item Content 1
\end{Content}
\begin{Content}
\item Content 1
\end{Content}
\begin{Material}
\item Material 1
\end{Material}
\begin{Material}
\item Material 1
\end{Material}
\subsubsection{Ordinary subsubsection}
Something something
\subsection{Another subsection}
\subsubsection{With a subsubsection}
Something something
\subsubsection{And a second subsubsection}
Something something
\subsubsection{And a third subsubsection}
Something something
\subsubsection{And another subsubsection}
Something something
\end{document}