
Ich verwende mdframed
zum Umgeben einer eigenen Umgebung namens {myenv}
(für dieses Beispiel). Und diese Umgebung ist als Trio-Liste eingerichtet und wird \addxcontentsline
zum Schreiben einer Liste dieser Umgebungen verwendet (ich verwende sie doc
nur für MWE).
Problem
Die Box ist über mehrere Seiten verteilt, sodass der obere Teil der ersten Seite leer ist.
Code/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}
Es passiert nicht, wenn ich
- Entfernen (oder kommentieren Sie) die mit markierte Zeile
[A]
oder - Entfernen (oder kommentieren) Sie die mit markierte Zeile
[B]
(bin mir hier allerdings nicht sicher)oder - Reihenfolge der Zeilen ändern
[A]
und[B]
Des Weiteren habe ich das Problem folgendermaßen zurückverfolgt \protected@write
: Beim Löschen (Auskommentieren) [C]
verschwinden auch die beiden mit dem Problem markierten Zeilen.
Fragen
- Was ist die beste Lösung für dieses Problem? Kann ich
[A]
ohne[B]
Probleme wechseln? - Handelt es sich hierbei um einen Fehler,
mdframed
der gemeldet werden sollte?
Anmerkungen
- Die ursprüngliche Definition von
{myenv}
ist komplexer. - Ich bin mir dessen bewusst , kann sie
\newmdenv
jedoch\newmdtheoremenv
nicht hierfür verwenden. - Das Verschieben der Zeile
[A]
vorher\list
macht keinen Unterschied.
Antwort1
Dasselbe würde passieren, wenn \color{green}
anstelle von ausgegeben wird . Versuchen Sie, zuerst nach \addxcontentsline { toc } { myenv } [ X ] { }
auszugeben .\leavevmode
\item\relax