tcolorbox で before skip が無視されるのはなぜですか

tcolorbox で before skip が無視されるのはなぜですか

私はこのMWEをtcolorbox

\documentclass{article}

\usepackage{tcolorbox}
\tcbuselibrary{skins,breakable}

\usepackage{blindtext}

\newcommand{\blsn}[2]{
    \begin{tcolorbox}[
        sharp corners, breakable, frame hidden, enhanced, boxrule=0pt, before skip=30pt, after skip=30pt,
        borderline west={3pt}{0pt}{red},
        segmentation style={red, line width=0.75pt, solid},
        colback=red!10,
        ]
        \textbf{Situation} \textit{(#1)}\\[2mm]
        #2
    \end{tcolorbox}
}

\newcommand{\secc}[1]{\noindent\parbox{\textwidth}{\section{#1}}}

\begin{document}
\blindtext
\blsn{arg1}{arg2}
\blindtext

\section{Skip before ignored}
\blsn{arg1}{arg2}
\blindtext
\end{document}

最初のものは期待通りに動作します。しかし、skip before2 番目ではなぜ無視されるのでしょうか?

最初のボックスはOKです: OKボックス

2 番目のボックスは以下ではありません: ダメボックス

答え1

tcolorbox.styの 304 行目には次の記述があります。

before skip balanced/.style={before={%
    \ifnum\lastnodetype=-1\relax%
    \else%
      \par%
      \ifvmode%
        \iftcb@minipage%
          \ifdim\parskip>\z@\relax%
            \addvspace{-\parskip}%
          \fi%
        \else%
          \ifdim\prevdepth<\z@\relax%
            \addvspace{\glueexpr#1-\parskip}%
          \else%
            \ifdim\prevdepth>.3\baselineskip\relax%
              \addvspace{\glueexpr#1-\parskip}%
            \else%
              \addvspace{\glueexpr#1+.3\baselineskip-\prevdepth-\parskip}%
            \fi%
          \fi%
        \fi%
        \nointerlineskip%
      \fi%
    \fi%
    \lineskip\z@skip%
    \noindent%
  }},

すべてを理解しているわけではありませんが、垂直モードでのテストはわかります。

では\leavevmode\par、コマンド では、ページの先頭とコマンドの後に\bsnこれを取得します。before skip\section

\documentclass{article}
%https://tex.stackexchange.com/questions/705470/why-is-before-skip-ignored-in-a-tcolorbox
\usepackage{tcolorbox}
\tcbuselibrary{skins,breakable}

\usepackage{blindtext}
\usepackage{showframe}%<-- comment in the final document
\newcommand{\blsn}[2]{
    \leavevmode\par%<-- line added
    \begin{tcolorbox}[
        sharp corners, breakable, frame hidden, enhanced, boxrule=0pt, before skip=30pt, after skip=30pt,
        borderline west={3pt}{0pt}{red},
        segmentation style={red, line width=0.75pt, solid},
        colback=red!10,
        ]
        \textbf{Situation} \textit{(#1)}\\[2mm]
        #2
    \end{tcolorbox}
}

\begin{document}
\blsn{arg1}{arg2}
\blindtext

\section{Skip no more ignored}
\blsn{arg1}{arg2}
\blindtext
\end{document}

ここに画像の説明を入力してください

答え2

わかりました。問題の答えを見つけました(理解はしていませんが)。このコマンドを使用すると問題が発生します。

\newcommand{\secc}[1]{\noindent\parbox{\textwidth}{\section{#1}}}

の代わりに\section

関連情報