
我用來圍繞一個名為(對於本例)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]
問題的兩行也消失了。
問題
- 這個問題的最佳解決方案是什麼?我可以順利切換
[A]
嗎[B]
? mdframed
這是應該報告的錯誤嗎?
筆記
- 的原始定義
{myenv}
更為複雜。 - 我知道
\newmdenv
,\newmdtheoremenv
但我不能用它們來做這件事。 [A]
之前換行\list
沒有什麼差別。
答案1
\color{green}
代替也會出現同樣的情況\addxcontentsline { toc } { myenv } [ X ] { }
。嘗試先發出\leavevmode
後\item\relax
。