如何获取定理前后垂直空间的精确值?

如何获取定理前后垂直空间的精确值?

背景

我使用定理样式,其中标题和陈述之间有一个新行。

\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}

相关内容