\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

相關內容