
Я использую mdframed
для окружения собственной среды, называемой {myenv}
(для этого примера). И эта среда настроена как список трио и использует \addxcontentsline
для записи списка этих сред (я использую doc
только для 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}
Этого не происходит, когда я
- удалить (или закомментировать) строку, отмеченную знаком
[A]
или - удалите (или закомментируйте) строку, отмеченную
[B]
(хотя насчет этой не уверен)или - переключить порядок строк
[A]
и[B]
Более того, я проследил проблему до следующего места \protected@write
: при удалении (закомментировании) двух строк, отмеченных как [C]
проблема, они также исчезают.
Вопросы
- Какое лучшее решение этой проблемы? Могу ли я перейти
[A]
и[B]
без проблем? - Является ли это ошибкой, о
mdframed
которой следует сообщить?
Примечания
- Первоначальное определение
{myenv}
было более сложным. - Я знаю об этом
\newmdenv
,\newmdtheoremenv
но не могу их использовать. - Смещение строки
[A]
не\list
имеет значения.
решение1
То же самое возникло бы с \color{green}
вместо \addxcontentsline { toc } { myenv } [ X ] { }
. Попробуйте выдать first \leavevmode
после \item\relax
.