\addxcontentsline faz com que parte da caixa mdframed fique vazia antes da quebra de página

\addxcontentsline faz com que parte da caixa mdframed fique vazia antes da quebra de página

Estou usando mdframedpara cercar um ambiente próprio chamado {myenv}(para este exemplo). E esse ambiente é configurado como uma lista trio e serve \addxcontentslinepara escrever uma lista desses ambientes (estou usando docapenas para o MWE).

Problema

problema

A caixa está quebrada nas páginas, deixando uma parte superior vazia na primeira 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}

Isso não acontece quando eu

  • remova (ou comente) a linha marcada com[A] ou
  • remova (ou comente) a linha marcada com [B](embora não tenha certeza sobre esta)ou
  • mudar a ordem das linhas [A]e[B]

Além disso, rastreei o problema até \protected@write: Ao excluir (comentar), as duas linhas marcadas com [C]o problema também desaparecem.

Questões

  1. Qual é a melhor solução para este problema? Posso mudar [A]e [B]sem problemas?
  2. Isso é um bug mdframedque deve ser relatado?

Notas

  • A definição original para {myenv}é mais complexa.
  • Estou ciente \newmdenve \newmdtheoremenvmas não posso usá-los para isso.
  • Mudar de linha [A]antes \listnão faz diferença.

Responder1

O mesmo surgiria \color{green}no lugar de \addxcontentsline { toc } { myenv } [ X ] { }. Tente emitir primeiro \leavevmodedepois \item\relax.

informação relacionada