
Estoy usando mdframed
para rodear un entorno propio llamado {myenv}
(para este ejemplo). Y este entorno está configurado como una lista de tríos y se usa \addxcontentsline
para escribir una lista de estos entornos (lo estoy usando doc
solo para MWE).
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
- ¿Cuál es la mejor solución para este problema? ¿Puedo cambiar
[A]
y[B]
sin problemas? - ¿Es esto un error
mdframed
que debería informarse?
Notas
- La definición original de
{myenv}
es más compleja. - Lo sé
\newmdenv
y\newmdtheoremenv
no puedo usarlos para esto. - Cambiar de línea
[A]
antes\list
no hace la diferencia.
Respuesta1
Lo mismo ocurriría con \color{green}
en lugar de \addxcontentsline { toc } { myenv } [ X ] { }
. Intente emitir primero \leavevmode
después \item\relax
.