
나는 (이 예에서는) 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
.