
Estou usando mdframed
para cercar um ambiente próprio chamado {myenv}
(para este exemplo). E esse ambiente é configurado como uma lista trio e serve \addxcontentsline
para escrever uma lista desses ambientes (estou usando doc
apenas para o MWE).
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
- Qual é a melhor solução para este problema? Posso mudar
[A]
e[B]
sem problemas? - Isso é um bug
mdframed
que deve ser relatado?
Notas
- A definição original para
{myenv}
é mais complexa. - Estou ciente
\newmdenv
e\newmdtheoremenv
mas não posso usá-los para isso. - Mudar de linha
[A]
antes\list
não faz diferença.
Responder1
O mesmo surgiria \color{green}
no lugar de \addxcontentsline { toc } { myenv } [ X ] { }
. Tente emitir primeiro \leavevmode
depois \item\relax
.