Warum wird vor dem Überspringen in einer Tcolorbox ignoriert?

Warum wird vor dem Überspringen in einer Tcolorbox ignoriert?

Ich habe dieses MWE für einetcolorbox

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

Das erste funktioniert wie es soll. Aber warum wird es skip beforebeim zweiten ignoriert?

Die erste Box ist ok: ok-Box

Das zweite Feld ist nicht: nicht ok box

Antwort1

In tcolorbox.styZeile 304 haben wir:

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%
  }},

Ich behaupte nicht, alles zu verstehen, aber ich sehe einen Test im vertikalen Modus.

Mit \leavevmode\par, im Befehl \bsnerhalten wir dies before skipam Anfang der Seite und auch nach dem Befehl\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}

Bildbeschreibung hier eingeben

Antwort2

Ok, ich habe die Antwort auf mein Problem gefunden (auch wenn ich sie nicht verstehe). Das Problem tritt auf, wenn ich diesen Befehl verwende

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

anstatt\section

verwandte Informationen