tcolorbox
옵션 과 함께 을 사용하면 breakable
일부 특수한 상황에서 "바닥이 울퉁불퉁"해질 수 있습니다. 다음 MWE는 이 동작을 보여줍니다.
\documentclass[DIV=10, BCOR=10mm, twoside]{scrreprt}
\usepackage[ngerman]{babel}
\usepackage{lmodern}
\usepackage{amsmath}
\usepackage{microtype}
\usepackage{lipsum}
\usepackage{tcolorbox}
\tcbuselibrary{theorems, skins, breakable}
\newtcbtheorem[auto counter]{mytheo}{My Theorem}{
enhanced, breakable, colback=white, colbacktitle=black!15, coltitle=black, fonttitle=\bfseries,
before skip=15pt plus 4pt minus 2pt,
after skip =15pt plus 4pt minus 2pt
}{th}
\begin{document}
\lipsum[1-5]
\begin{mytheo}{This is my title}{theoexample}
\lipsum[6]
\end{mytheo}
\lipsum[6-10]
\end{document}
스크린샷에서 볼 수 있듯이 첫 페이지 하단이 정렬되지 않았습니다. 그럼에도 불구하고 LaTeX는 가득 차 있지 않은 vbox 경고를 인쇄하지 않습니다. 실제 내용 은 완전히 2페이지에 있음에도 불구하고 보이지 않는 것의 일부가 before skip
1페이지 하단에 위치한 것처럼 보입니다.tcolorbox
옵션 을 제거하면 breakable
상자의 모양이 변경되지 않지만(어쨌든 상자가 깨지지 않았기 때문에) LaTeX는 예상대로 vbox가 가득 차 있지 않은 것에 대해 경고합니다.
깨지기 쉬운 상자를 버리지 않고도 이 문제를 해결할 수 있는 가능성이 있을까요?
답변1
다음 답변은
tcolorbox
이전 버전 에 유효합니다3.90 (2016/02/29)
. 해당 버전부터before skip
페이지 나누기가 발생할 때 옵션이 트랙을 남기지 않아야 합니다.
tcolorbox
남은 높이를 계산하기 전에 특정 코드(건너뛰기 전 포함)를 삽입해야 합니다. 여기서 삽입된 건너뛰기는 자동으로 제거되지 않습니다.
에 부정적인 건너뛰기를 삽입하는 다음 '핫픽스'를 제공할 수 있습니다 \pagebreak
. 현재로서는 이 패치가 미칠 수 있는 부정적인 영향을 더 자세히 조사할 시간은 없지만 before skip
다음과 같은 경우에는 효과가 있는 것 같습니다.
\documentclass[DIV=10, BCOR=10mm, twoside]{scrreprt}
\usepackage[ngerman]{babel}
\usepackage{lmodern}
\usepackage{amsmath}
\usepackage{microtype}
\usepackage{lipsum}
\usepackage{tcolorbox}
\tcbuselibrary{theorems, skins, breakable}
%--- begin patch ---
\makeatletter
\def\tcb@undo@before{}
\tcbset{
before skip/.style={before={%
\ifnum\lastnodetype=-1\relax%
\else%
\par\ifvmode\nointerlineskip%
\addvspace{\glueexpr#1-\parskip}%
\def\tcb@undo@before{\addvspace{-\glueexpr#1}}%
\fi%
\fi%
\lineskip=0pt\noindent%
}},
}
\def\tcb@split@start{%
\tcb@breakat@init%
\tcb@comp@h@page%
% height calculation
\tcb@comp@h@total@standalone%
%
\let\tcb@split@next=\relax%
\tcb@check@for@final@box%
\iftcb@final@box%
\tcb@drawcolorbox@standalone%
\else%
\iftcb@break@allowed%
\ifdim\dimexpr\tcb@h@page-\tcb@h@padding-\tcb@h@padtitle<\kvtcb@breakminlines\baselineskip\relax%
\tcb@undo@before\iftcb@multicol\columnbreak\else\pagebreak\fi%
\tcb@nobreak@warning%
\tcb@enlbreak@init\tcb@break@allowedfalse%
\tcb@comp@h@page%
\tcb@check@for@final@box%
\iftcb@final@box%
\tcb@drawcolorbox@standalone%
\else%
\let\tcb@split@next=\tcb@split@first%
\fi%
\else%
\let\tcb@split@next=\tcb@split@first%
\fi%
\else%
\let\tcb@split@next=\tcb@split@first%
\fi%
\fi%
\tcb@split@next%
}
\makeatother
%--- end patch ---
\newtcbtheorem[auto counter]{mytheo}{My Theorem}{
enhanced,
breakable,
colback=white, colbacktitle=black!15, coltitle=black, fonttitle=\bfseries,
before skip=15pt plus 4pt minus 2pt,
%before=,
after skip =15pt plus 4pt minus 2pt
}{th}
\begin{document}
\lipsum[1-5]
\begin{mytheo}{This is my title}{theoexample}
\lipsum[6]
\end{mytheo}
\lipsum[6-10]
\end{document}