\addxcontentsline 导致分页符之前的 mdframed 框部分为空

\addxcontentsline 导致分页符之前的 mdframed 框部分为空

我用mdframed它来包围一个名为的环境{myenv}(在此示例中)。此环境设置为三重奏列表,并用于\addxcontentsline编写这些环境的列表(我doc仅将其用于 MWE)。

问题

问题

这个盒子跨页显示,在第一页上留下一个空白的顶部。

代码/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]问题的两行也会消失。

问题

  1. 这个问题的最佳解决方案是什么?我可以毫无问题地[A]切换吗?[B]
  2. mdframed这是一个需要报告的错误吗?

笔记

  • 的原始定义{myenv}更加复杂。
  • 我知道\newmdenv\newmdtheoremenv但我不能将它们用于此。
  • [A]之前换线\list没什么区别。

答案1

\color{green}使用 代替也会出现相同的情况\addxcontentsline { toc } { myenv } [ X ] { }。尝试先发出 ,\leavevmode然后再发出\item\relax

相关内容