\addxcontentsline hace que parte vacía del cuadro mdframed antes del salto de página

\addxcontentsline hace que parte vacía del cuadro mdframed antes del salto de página

Estoy usando mdframedpara rodear un entorno propio llamado {myenv}(para este ejemplo). Y este entorno está configurado como una lista de tríos y se usa \addxcontentslinepara escribir una lista de estos entornos (lo estoy usando docsolo para MWE).

Problema

problema

El cuadro está dividido en páginas dejando una parte superior vacía en la primera página.

Código/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}

No sucede cuando yo

  • eliminar (o comentar) la línea marcada con[A] o
  • eliminar (o comentar) la línea marcada con[B] (aunque no estoy seguro de esta)o
  • cambiar el orden de las líneas [A]y[B]

Además, rastreé el problema hasta \protected@write: Al eliminar (comentar) las dos líneas marcadas con[C] el problema también desaparecen.

Preguntas

  1. ¿Cuál es la mejor solución para este problema? ¿Puedo cambiar [A]y[B] sin problemas?
  2. ¿Es esto un error mdframedque debería informarse?

Notas

  • La definición original de {myenv}es más compleja.
  • Lo sé \newmdenvy \newmdtheoremenvno puedo usarlos para esto.
  • Cambiar de línea [A]antes \listno hace la diferencia.

Respuesta1

Lo mismo ocurriría con \color{green}en lugar de \addxcontentsline { toc } { myenv } [ X ] { }. Intente emitir primero \leavevmodedespués \item\relax.

información relacionada