背景
我使用定理样式,其中标题和陈述之间有一个新行。
\newtheoremstyle{simple}
{}{}
{\normalfont}{}
{\normalfont}{}
{\newline}
{{\thmname{#1}\nobreakspace\thmnumber{#2}}
{\thmnote{\hspace{.4em}\ensuremath{(\text{#3})}}}\smallskip}
为了有效防止标题后面出现分页符,我决定将其放在透明的内部,tcolorbox
以便可以使用键breakable
和设置lines before break = 3
。(我之所以选择采用这种复杂的方法,是因为我发现的那些“正常”解决方案,比如这个问题,效果不太好。)
我成功地制作了这样一个盒子,并将环境包裹在其中。但是,我无法重现定理前后的精确垂直空间。我的猜测值是\topsep+\parskip
,它小于实际值(我也尝试过例如\thm@preskip
和\thm@postskip
,但它们似乎是0pt
)。
有没有什么方法可以获取这些垂直空间的确切值?
(目标是产生相同的结果,除了分页点之外,有或没有额外的tcolorbox
。)
注意:这个问题实际上与 关系不大tcolorbox
。我感兴趣的是精确值这两个长度:
下面是一个 MWE。您可以注释或取消注释该ExplSyntax
部分(该部分围绕tcolorbox
着环境theorem
)以查看差异。
\documentclass{article}
\usepackage{geometry}
\usepackage{amsthm}
\newtheoremstyle{simple}
{}{}
{\normalfont}{}
{\normalfont}{}
{\newline}
{{\thmname{#1}\nobreakspace\thmnumber{#2}}
{\thmnote{\hspace{.4em}\ensuremath{(\text{#3})}}}\smallskip}
\theoremstyle{simple}
\newtheorem{theorem}{Theorem}
\ExplSyntaxOn
\PassOptionsToPackage { many } { tcolorbox }
\RequirePackage { tcolorbox }
\cs_new_protected:Nn \minimclass_box_environment:n
{
\hook_gput_code:nnn { env/#1/before } { minimalist }
{
\begin { tcolorbox }
[
enhanced~jigsaw,
frame~hidden,
interior~hidden,
top = 0pt, bottom = 0pt,
left = 0pt, right = 0pt,
boxrule = 0pt, boxsep = 0pt,
before~skip = \topsep+\parskip,
after~skip = \topsep+\parskip,
breakable, lines~before~break=3,
]
}
\hook_gput_code:nnn { env/#1/after } { minimalist }
{
\end { tcolorbox }
}
}
\minimclass_box_environment:n { theorem }
\ExplSyntaxOff
\usepackage{blindtext}
\begin{document}
\blindtext
\begin{theorem}
\blindtext
\end{theorem}
\blindtext
\begin{theorem}
\blindtext
\end{theorem}
\begin{proof}
\blindtext
\end{proof}
\end{document}