\addxcontentsline으로 인해 페이지 나누기 전에 mdframed 상자의 일부가 비어 있게 됩니다.

\addxcontentsline으로 인해 페이지 나누기 전에 mdframed 상자의 일부가 비어 있게 됩니다.

나는 (이 예에서는) mdframed라는 자체 환경을 둘러싸는 데 사용하고 있습니다. {myenv}그리고 이 환경은 트리오 목록으로 설정되어 \addxcontentsline이러한 환경의 목록을 작성하는 데 사용됩니다(저는 docMWE에만 사용하고 있습니다).

문제

문제

상자는 여러 페이지에 걸쳐 나누어져 있으며 첫 번째 페이지에는 상단 부분이 비어 있습니다.

코드/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.

관련 정보