\addxcontentsline делает пустым часть mdframed-блока перед разрывом страницы

\addxcontentsline делает пустым часть mdframed-блока перед разрывом страницы

Я использую mdframedдля окружения собственной среды, называемой {myenv}(для этого примера). И эта среда настроена как список трио и использует \addxcontentslineдля записи списка этих сред (я использую docтолько для MWE).

Проблема

проблема

Рамка разорвана на части, оставляя пустую верхнюю часть на первой странице.

Код/МВЭ

\documentclass{scrbook}

\usepackage{xparse}
\usepackage[framemethod = TikZ]{mdframed}

\ExplSyntaxOn\makeatletter

% define a style
\mdfdefinestyle { mystyle } {
   backgroundcolor = yellow,
   innertopmargin = 0.55\baselineskip,
   skipabove = 1\baselineskip \@plus 1ex,
}

% define the environment
\NewDocumentEnvironment { myenv } { } {
   \list { } { }
      \item \relax
      \addxcontentsline { toc } { myenv } [ X ] { }% <---------------- [A]
      { \bfseries My~Env~No.~X }% <----------------------------------- [B]
      \par \nopagebreak
} {
   \endlist
}
% souround it with an md frame
\surroundwithmdframed[ style = mystyle ] { myenv }

%% for testing
%\long\def\protected@write#1#2#3{%
%      \begingroup
%       \let\uthepage\relax
%       #2%
%       \let\protect\@unexpandable@protect
%       \edef\reserved@a{\write#1{#3}}% <------+---------------------- [C]
%       \reserved@a% <-------------------------'
%      \endgroup
%      \if@nobreak\ifvmode\nobreak\fi\fi
%}

\ExplSyntaxOff\makeatother

\usepackage{lipsum}

\begin{document}
   \lipsum[1] \vspace{110mm} \lipsum[2]
   \begin{myenv}
      \lipsum*[2]
   \end{myenv}
\end{document}

Этого не происходит, когда я

  • удалить (или закомментировать) строку, отмеченную знаком[A] или
  • удалите (или закомментируйте) строку, отмеченную [B](хотя насчет этой не уверен)или
  • переключить порядок строк [A]и[B]

Более того, я проследил проблему до следующего места \protected@write: при удалении (закомментировании) двух строк, отмеченных как [C]проблема, они также исчезают.

Вопросы

  1. Какое лучшее решение этой проблемы? Могу ли я перейти [A]и [B]без проблем?
  2. Является ли это ошибкой, о mdframedкоторой следует сообщить?

Примечания

  • Первоначальное определение {myenv}было более сложным.
  • Я знаю об этом \newmdenv, \newmdtheoremenvно не могу их использовать.
  • Смещение строки [A]не \listимеет значения.

решение1

То же самое возникло бы с \color{green}вместо \addxcontentsline { toc } { myenv } [ X ] { }. Попробуйте выдать first \leavevmodeпосле \item\relax.

Связанный контент