我用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
。