diff options
Diffstat (limited to 'macros/latex/contrib/tcolorbox/tcbbreakable.code.tex')
-rw-r--r-- | macros/latex/contrib/tcolorbox/tcbbreakable.code.tex | 1029 |
1 files changed, 1029 insertions, 0 deletions
diff --git a/macros/latex/contrib/tcolorbox/tcbbreakable.code.tex b/macros/latex/contrib/tcolorbox/tcbbreakable.code.tex new file mode 100644 index 0000000000..69f5899e5c --- /dev/null +++ b/macros/latex/contrib/tcolorbox/tcbbreakable.code.tex @@ -0,0 +1,1029 @@ +%% The LaTeX package tcolorbox - version 4.20 (2019/03/02) +%% tcbbreakable.code.tex: Code for breakable colorboxes +%% +%% ------------------------------------------------------------------------------------------- +%% Copyright (c) 2006-2019 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de> +%% ------------------------------------------------------------------------------------------- +%% +%% This work may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version 1.3 +%% of this license or (at your option) any later version. +%% The latest version of this license is in +%% http://www.latex-project.org/lppl.txt +%% and version 1.3 or later is part of all distributions of LaTeX +%% version 2005/12/01 or later. +%% +%% This work has the LPPL maintenance status `author-maintained'. +%% +%% This work consists of all files listed in README +%% +\tcb@set@library@version{4.20} + +\let\tcb@parboxrestore@true=\tcb@parboxrestore +\let\tcb@parboxrestore@false\tcb@parbox@false@settings + +% total height for boxes smaller than 0.4375\maxdimen and 0.4375\maxdimen else (ca 2.5m) +\def\tcb@defToTotalHeightBreakable#1#2{% + \ifnum\ht#2<0 % + \edef#1{7168pt}% + \else\ifnum\ht#2<469762048 % + \tcbdimto#1{\ht#2+\dp#2}% + \else% + \edef#1{7168pt}% + \fi\fi% +} + +\newbox\tcb@testbox + +% for oversized boxes height is detected as \textheight or larger +\def\tcb@defToTotalHeightUnlimited#1#2{% + \tcb@defToTotalHeightBreakable#1#2% + \ifdim\dimexpr#1<\textheight\relax% + \edef\tcb@thevfuzz{\the\vfuzz}% + \edef\tcb@thevbadness{\the\vbadness}% + \vfuzz=\maxdimen\vbadness=10000% + \splittopskip=0pt% + \splitmaxdepth=0pt% + \savingvdiscards=1% + \setbox\tcb@testbox=\vsplit#2 to \textheight% + \vbadness=\tcb@thevbadness\vfuzz=\tcb@thevfuzz% + \ifdim\wd#2=0pt\relax% + \tcb@swap{#2}{\tcb@testbox}% + \tcbdimto#1{\ht#2+\dp#2}% + \else% + \setbox#2=\vbox{% + \unvbox\tcb@testbox% + \splitdiscards% + \unvbox#2}% + \edef#1{7168pt}% + \fi% + \savingvdiscards=0% + \fi% +} + +\def\tcb@@break{\par\xleaders\vbox{\rule{0pt}{2\textheight}}\vskip 2\textheight\par} + +\def\tcb@vbox#1#2{% + \edef\reserved@a{% + \endgroup% + \setbox#1\vbox{\hsize=#2% + \begingroup\aftergroup}% + \def\noexpand\@currenvir{\@currenvir}% + \def\noexpand\@currenvline{\on@line}}% + \reserved@a% + \@endpefalse% + \let\tcbbreak\tcb@@break% + \color@begingroup% + \textwidth\hsize% + \columnwidth\hsize% + \csname tcb@parboxrestore@\kvtcb@parbox\endcsname% + \def\@mpfn{mpfootnote}% + \def\thempfn{\thempfootnote}% + \c@mpfootnote\z@% + \let\@footnotetext\@mpfootnotetext% + \let\@listdepth\@mplistdepth \@mplistdepth\z@% + \@setminipage\tcb@hyph@fix% + \let\tcb@drawcolorbox\tcb@drawcolorbox@standalone% + \let\FN@pp@footnote\@empty% disable perpage mode of 'footmisc' package + \ignorespaces% +} + +\def\endtcb@vbox{% + \par% + \unskip% + \ifvoid\@mpfootins\else% + \vskip\skip\@mpfootins% + \normalcolor% + \footnoterule% + \unvbox\@mpfootins% + \fi% + \@minipagefalse% + \color@endgroup} + +% remaining height +\def\tcb@comp@h@page{% + \tcb@breakat@next% + \ifdim\tcb@breakat@dim>0pt\relax% + \tcbdimto\tcb@h@page{\tcb@breakat@dim-\kvtcb@shrinkbreakgoal}% + \else% + \ifx\kvtcb@float\@empty% + \iftcb@multicol% + \ifnum\c@tcbbreakpart>1\relax% + \tcbdimto\tcb@h@page{\@colroom}% + \else% + \ifdim\pagegoal=16383.99998pt + \tcbdimto\tcb@h@page{\@colroom}% + \else% + \@tempdima\pagetotal% + \@whiledim \@tempdima>\@colroom \do{\advance\@tempdima-\@colroom}% + \tcbdimto\tcb@h@page{\@colroom-\@tempdima}% + \fi% + \fi% + \else% + \ifdim\pagegoal=16383.99998pt + \tcbdimto\tcb@h@page{\vsize}% detects floating objects + \else% + \tcb@comp@compress% + \tcbdimto\tcb@h@page{\pagegoal-\pagetotal+\tcb@compress@height}% + \fi% + \fi% + \else% + \tcbdimto\tcb@h@page{\textheight}% + \fi% + \tcbdimto\tcb@h@page{\tcb@h@page+\tcb@breakat@dim-\kvtcb@shrinkbreakgoal}% + \fi% +} + +\def\tcb@comp@h@total@standalone{% + \tcbdimto\tcb@h@padding{\kvtcb@bbtop@stand+\kvtcb@bbbottom@stand+\kvtcb@top@rule@stand+\kvtcb@bottom@rule@stand+\kvtcb@boxsep*2+\kvtcb@top+\kvtcb@bottom}% + \tcbdimto\tcb@h@total{\tcb@h@padding+\tcb@h@padtitle+\tcb@h@upper+\tcb@h@segment+\tcb@h@lower}% +} + + +\newif\iftcb@final@box + +\def\tcb@check@for@final@box{% + \ifdim\tcb@h@total>\tcb@h@page\relax% + \iftcb@multicol% + \tcb@final@boxfalse% + \else% + \ifdim\tcb@h@total>\dimexpr\tcb@h@page+\kvtcb@enlargepage@flex\relax% + \tcb@final@boxfalse% + \else% + \tcbdimto\tcb@temp{\tcb@h@total-\tcb@h@page}% + \enlargethispage*{\tcb@temp}% + \tcbdimto\tcb@h@page{\tcb@h@page+\tcb@temp}% + \tcb@final@boxtrue% + \fi% + \fi% + \else% + \tcb@final@boxtrue% + \fi% +} + +\def\tcb@following@title{% + \ifx\kvtcb@followingtitle\@empty% + \tcb@hasTitlefalse% + \let\tcb@h@title=\tcb@zpt% + \let\tcb@h@padtitle=\tcb@zpt% + \else% + \tcb@hasTitletrue% + \tcbdimto\tcb@w@title{\tcb@innerwidth-\kvtcb@boxsep*2-\kvtcb@lefttitle-\kvtcb@righttitle}% + \begin{tcb@savebox}{\tcb@titlebox}{\tcb@w@title}\tcb@extras@followingtitle\color{tcbcoltitle}\kvtcb@fonttitle\kvtcb@haligntitle\kvtcb@followingtitle\end{tcb@savebox}% + \tcbdimto\tcb@h@title{\ht\tcb@titlebox+\dp\tcb@titlebox}% + \tcbdimto\tcb@h@padtitle{\kvtcb@title@rule+\kvtcb@boxsep*2+\kvtcb@toptitle+\kvtcb@bottomtitle+\tcb@h@title}% + \fi% +} + +\newbox\tcb@totalupperbox +\newbox\tcb@totallowerbox +\newif\iftcb@break@allowed + +\def\tcb@enlbreak@next@final{% + \ifdim\dimexpr\tcb@enlbreak@dim=0pt\relax + \else% + \iftcb@multicol\else\enlargethispage{\tcb@enlbreak@dim}\fi% + \fi% +} + +\def\tcb@enlbreak@next@scan#1/#2@{% + \def\temp@a{#2}% + \tcbdimto\tcb@enlbreak@dim{#1}% + \ifx\temp@a\@empty% + \let\tcb@enlbreak@next=\tcb@enlbreak@next@final% + \else% + \edef\tcb@enlbreak@seq{\temp@a @}% + \fi% + \tcb@enlbreak@next@final% +} + +\def\tcb@enlbreak@next@step{% + \edef\tcb@temp{\noexpand\tcb@enlbreak@next@scan\tcb@enlbreak@seq}% + \tcb@temp% +} + +\def\tcb@enlbreak@init{% + \edef\tcb@enlbreak@seq{\kvtcb@enlargepage/@}% + \let\tcb@enlbreak@next=\tcb@enlbreak@next@step% + \tcb@enlbreak@next% +} + + +\def\tcb@breakat@next@scan#1/#2@{% + \def\temp@a{#2}% + \tcbdimto\tcb@breakat@dim{#1}% + \ifx\temp@a\@empty% + \let\tcb@breakat@next=\@empty% + \else% + \edef\tcb@breakat@seq{\temp@a @}% + \fi% +} + +\def\tcb@breakat@next@step{% + \edef\tcb@temp{\noexpand\tcb@breakat@next@scan\tcb@breakat@seq}% + \tcb@temp% +} + +\def\tcb@breakat@init{% + \edef\tcb@breakat@seq{\kvtcb@breakatdim/@}% + \let\tcb@breakat@next=\tcb@breakat@next@step% +} + + +\newif\iftcb@multicol +\newif\iftcb@vfillbeforefirst + +\def\tcb@do@nobreak@warning{% + \iftcb@ignorenobreak% + \tcb@warning{Using nobreak failed. You should set `ignore nobreak=false' to avoid this}% + \else% + \tcb@warning{Using nobreak failed. Try to enlarge `lines before break' or set page breaks manually}% + \fi% +} + +\def\tcb@handle@nobreak{% + \tcb@enlbreak@init% + \tcb@breakat@init% + \tcb@comp@h@page% + \tcbdimto\tcb@h@page{\tcb@h@page-1.5\baselineskip-\parskip-\lineskip}% security surcharge + \tcb@comp@h@total@standalone% + \tcb@check@for@final@box% + \iftcb@final@box% + \else% + \ifdim\dimexpr\tcb@h@page-\tcb@h@padding-\tcb@h@padtitle<\kvtcb@breakminlines\baselineskip\relax% + \tcbdimto\tcb@h@page{\tcb@h@page+3.5\baselineskip+\parskip+\lineskip}% + \vspace{\tcb@h@page}% + {\parskip\z@\nointerlineskip\noindent}% + \vspace{-\tcb@h@page}% + \par% + \fi% + \fi% +} + +\def\tcb@prepare@break@operation{% + \setcounter{tcbbreakpart}{0}% + \let\tcb@nobreak@warning\@empty% + \@ifundefined{columnbreak}{\tcb@multicolfalse}{% + \ifnum\doublecol@number>\z@ % + \tcb@multicoltrue% + \else% + \tcb@multicolfalse% + \fi}% + \ifx\kvtcb@float\@empty% + \iftcb@nobreak{% + \let\tcb@nobreak@warning\tcb@do@nobreak@warning% + \iftcb@ignorenobreak% + \kvtcb@beforebox% + \else% + \tcb@handle@nobreak% + \fi% + }{\kvtcb@beforebox}% + \def\kvtcb@beforebox{\parskip\z@\nointerlineskip\noindent}% + \noindent% applies parskip + \vskip\lineskip{\parskip\z@\par\vskip\z@}\bgroup\@nobreakfalse\addpenalty\z@\egroup% force update vertical list + \tcb@break@allowedtrue% + \tcb@enlbreak@init% + \else% + \tcb@break@allowedfalse% + \fi% +} + +\def\tcb@height@fill@unbroken#1{% + \ifnum\c@tcblayer<2\relax% + \tcb@ignorenobreaktrue% + \tcb@prepare@break@operation% + \tcb@breakat@init% + \tcbset{compress page=#1}% + \tcb@comp@h@page% + \tcbset{height=\tcb@h@page-\kvtcb@bbtop@stand-\kvtcb@bbbottom@stand}% + \fi% +} + +\def\tcb@height@fill@unbroken@normal{\tcb@height@fill@unbroken{none}} +\def\tcb@height@fill@unbroken@compressed{\tcb@height@fill@unbroken{all}} + +\def\tcb@use@after@lastbox{\bgroup\tcb@after@lastbox\egroup} + +\def\tcb@drawcolorbox@breakable{% + \tcbdimto\kvtcb@topsep{\kvtcb@topsep}% + \tcb@prepare@break@operation% + \global\let\tcb@after@lastbox=\kvtcb@afterbox% + \let\kvtcb@afterbox=\@empty% + \begingroup% + \parskip\z@skip% + \parindent\z@% + \lineskip\z@skip% + \topskip\z@skip% + \tcb@parfillskip@check% + \tcb@split@start% + \endgroup% + \color{.}% hack for some special cases + \ifx\kvtcb@float\@empty% + \aftergroup\tcb@use@after@lastbox% + \fi% +} + +\def\tcb@split@pagebreak{% + \tcb@undo@before% + \iftcb@multicol\columnbreak\else\pagebreak\fi% + \tcb@nobreak@warning% + \tcb@enlbreak@init\tcb@break@allowedfalse% +} + +\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@split@pagebreak% + \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% +} + + +\def\tcb@setbox#1#2#3{% + \setbox#1=\vbox{\unvbox#3}% + \ifdim\dimexpr\ht#1+\dp#1>#2\relax% + %\tcb@warning{Splitted box part too large by \the\dimexpr\ht#1+\dp#1-#2\relax}% switched off (99% useless/annoying) + \setbox#1=\vbox to\the\dimexpr#2-\dp#1\relax{\unvbox#1}% + \fi% +} + + +\def\tcb@setbox@upper#1#2{% + \tcb@setbox\tcb@upperbox{#1}{#2}% + \tcbdimto\tcb@h@upper{\ht\tcb@upperbox+\dp\tcb@upperbox}% +} + +\def\tcb@vsplit@upper{% + \setbox\tcb@upperbox=\vsplit\tcb@totalupperbox to\tcb@split@dim% + \edef\tcb@upper@box@badness{\the\badness}% +} + +\def\tcb@split@upper@box@and@assemble{% + \vfuzz=\maxdimen\vbadness=10000\savingvdiscards=1% + \tcb@vsplit@upper% + \ifnum\tcb@upper@box@badness=1000000\relax% + \setbox\tcb@totalupperbox=\vbox{% + \unvbox\tcb@upperbox% + \splitdiscards% + \unvbox\tcb@totalupperbox}% + \else% + \tcb@setbox@upper{\tcb@split@dim}{\tcb@upperbox}% + \fi% + \vbadness=\tcb@thevbadness\vfuzz=\tcb@thevfuzz\savingvdiscards=0% +} + +\def\tcb@split@upper@box{% + \vfuzz=\maxdimen\vbadness=10000% + \tcb@vsplit@upper% + \ifnum\tcb@upper@box@badness=1000000\relax% + \tcb@warning{The upper box part has become overfull}% + \fi% + \tcb@setbox@upper{\tcb@split@dim}{\tcb@upperbox}% + \vbadness=\tcb@thevbadness\vfuzz=\tcb@thevfuzz% +} + +\def\tcb@setbox@lower#1#2{% + \tcb@setbox\tcb@lowerbox{#1}{#2}% + \tcbdimto\tcb@h@lower{\ht\tcb@lowerbox+\dp\tcb@lowerbox}% +} + +\def\tcb@vsplit@lower{% + \setbox\tcb@lowerbox=\vsplit\tcb@totallowerbox to\tcb@split@dim% + \edef\tcb@lower@box@badness{\the\badness}% +} + +\def\tcb@split@lower@box@and@assemble{% + \vfuzz=\maxdimen\vbadness=10000\savingvdiscards=1% + \tcb@vsplit@lower% + \ifnum\tcb@lower@box@badness=1000000\relax% + \setbox\tcb@totallowerbox=\vbox{% + \unvbox\tcb@lowerbox% + \splitdiscards% + \unvbox\tcb@totallowerbox}% + \else% + \tcb@setbox@lower{\tcb@split@dim}{\tcb@lowerbox}% + \fi% + \vbadness=\tcb@thevbadness\vfuzz=\tcb@thevfuzz\savingvdiscards=0% +} + + +\def\tcb@split@lower@box{% + \vfuzz=\maxdimen\vbadness=10000% + \tcb@vsplit@lower% + \ifnum\tcb@lower@box@badness=1000000\relax% + \tcb@warning{The lower box part has become overfull}% + \fi% + \tcb@setbox@lower{\tcb@split@dim}{\tcb@lowerbox}% + \vbadness=\tcb@thevbadness\vfuzz=\tcb@thevfuzz% +} + +% patch for luatex 0.95 (thanks to Jeremy Engel) +\ifdefined\directlua + \RequirePackage{ifluatex} + \ifnum\luatexversion=95\relax + \def\tcb@vsplit@upper{% + \directlua{% + tex.savingvdiscards = 1 + local vlist = tex.splitbox("tcb@totalupperbox", tex.sp("\tcb@split@dim"), "exactly") + tex.setbox("tcb@upperbox", vlist) + tex.savingvdiscards = 0 + }% + \edef\tcb@upper@box@badness{\the\badness}% + } + \def\tcb@vsplit@lower{% + \directlua{% + tex.savingvdiscards = 1 + local vlist = tex.splitbox("tcb@totallowerbox", tex.sp("\tcb@split@dim"), "exactly") + tex.setbox("tcb@lowerbox", vlist) + tex.savingvdiscards = 0 + }% + \edef\tcb@lower@box@badness{\the\badness}% + } +\fi\fi + +\def\tcb@split@setstate@first{% + \edef\tcb@split@state{first}% + \let\kvtcb@top@rule=\kvtcb@top@rule@stand% + \let\kvtcb@bottom@rule=\kvtcb@bottom@rule@break% + \let\kvtcb@bbtop=\kvtcb@bbtop@stand% + \let\kvtcb@bbbottom=\kvtcb@bbbottom@break% + \let\tcb@break@topsep=\tcb@zpt% + \let\tcb@break@bottomsep=\kvtcb@bottomsep% +} + +\def\tcb@split@setstate@middle{% + \edef\tcb@split@state{middle}% + \let\kvtcb@top@rule=\kvtcb@top@rule@break% + \let\kvtcb@bottom@rule=\kvtcb@bottom@rule@break% + \let\kvtcb@bbtop=\kvtcb@bbtop@break% + \let\kvtcb@bbbottom=\kvtcb@bbbottom@break% + \let\tcb@break@topsep=\kvtcb@topsep% + \let\tcb@break@bottomsep=\kvtcb@bottomsep% +} + +\def\tcb@split@setstate@last{% + \edef\tcb@split@state{last}% + \let\kvtcb@top@rule=\kvtcb@top@rule@break% + \let\kvtcb@bottom@rule=\kvtcb@bottom@rule@stand% + \let\kvtcb@bbtop=\kvtcb@bbtop@break% + \let\kvtcb@bbbottom=\kvtcb@bbbottom@stand% + \let\tcb@break@topsep=\kvtcb@topsep% + \let\tcb@break@bottomsep=\tcb@zpt% +} + + +\def\tcb@split@force@standalone{% + \tcb@comp@h@total@standalone% + \ifdim\tcb@h@total>\tcb@h@page\relax% + \tcbdimto\kvtcb@bbbottom@stand{\kvtcb@bbbottom@stand+\tcb@h@page-\tcb@h@total}% + \fi% +} + + +\def\tcb@split@break@to@start{% + \tcb@swap{\tcb@totalupperbox}{\tcb@upperbox}% + \tcb@swap{\tcb@totallowerbox}{\tcb@lowerbox}% + \tcbdimto\tcb@h@upper{\ht\tcb@upperbox+\dp\tcb@upperbox}% + \tcbdimto\tcb@h@lower{\ht\tcb@lowerbox+\dp\tcb@lowerbox}% + \tcb@split@pagebreak% + \let\tcb@split@next=\tcb@split@start% +} + +\def\tcb@split@first{% + \setcounter{tcbbreakpart}{1}% + \ifx\kvtcb@float\@empty% + \iftcb@vfillbeforefirst% + \let\tcb@before@first=\vfill% + \else% + \let\tcb@before@first=\@empty% + \fi% + \let\tcb@before@middle=\@empty% + \let\tcb@before@last=\@empty% + \iftcb@multicol% + \long\def\tcb@after@first{\par}% using \columnbreak here kills multicols' algortihm sometimes + \long\def\tcb@after@middle{\par\vfill}% + \else% + \long\def\tcb@after@first{\par\pagebreak\tcb@enlbreak@next}% + \long\def\tcb@after@middle{\par\vfill\eject\tcb@enlbreak@next}% + \fi% + \let\tcb@after@last=\par% + \else% + \edef\tcb@before@first{\noexpand\tcb@float@env@begin{tcbfloat}[\kvtcb@float]\noexpand\kvtcb@everyfloat}% + \let\tcb@before@middle=\tcb@before@first% + \let\tcb@before@last=\tcb@before@first% + \let\tcb@after@first=\tcb@float@env@end% + \let\tcb@after@middle=\tcb@float@env@end% + \let\tcb@after@last=\tcb@float@env@end% + \fi% + % + \edef\kvtcb@skin@@first{\kvtcb@skin@first}% + \edef\kvtcb@skin@@middle{\kvtcb@skin@middle}% + \edef\kvtcb@skin@@last{\kvtcb@skin@last}% + % + \let\tcb@h@breaksep@first=\kvtcb@bottomsep% + \tcbdimto\tcb@h@breaksep@middle{\kvtcb@bottomsep+\kvtcb@topsep}% + \let\tcb@h@breaksep@last=\kvtcb@topsep% + \tcbdimto\tcb@h@padding@first{\kvtcb@bbtop@stand+\kvtcb@bbbottom@break+\kvtcb@top@rule@stand+\kvtcb@bottom@rule@break+\tcb@h@breaksep@first+\kvtcb@boxsep*2+\kvtcb@top+\kvtcb@bottom}% + \tcbdimto\tcb@h@padding@middle{\kvtcb@bbtop@break+\kvtcb@bbbottom@break+\kvtcb@top@rule@break+\kvtcb@bottom@rule@break+\tcb@h@breaksep@middle+\kvtcb@boxsep*2+\kvtcb@top+\kvtcb@bottom}% + \tcbdimto\tcb@h@padding@last{\kvtcb@bbtop@break+\kvtcb@bbbottom@stand+\kvtcb@top@rule@break+\kvtcb@bottom@rule@stand+\tcb@h@breaksep@last+\kvtcb@boxsep*2+\kvtcb@top+\kvtcb@bottom}% + % + \tcb@split@setstate@first% + % + \splittopskip=0pt% + \splitmaxdepth=0pt% + \edef\tcb@thevfuzz{\the\vfuzz}% + \edef\tcb@thevbadness{\the\vbadness}% + % + \tcb@swap{\tcb@totalupperbox}{\tcb@upperbox}% + \tcb@swap{\tcb@totallowerbox}{\tcb@lowerbox}% + % + \let\tcb@split@next=\relax% + \tcbdimto\tcb@split@dim{\tcb@h@page-\tcb@h@padding@first-\tcb@h@padtitle}% + \ifdim\tcb@split@dim<\tcb@h@upper\relax% + % + % + \iftcb@break@allowed% + \tcb@split@upper@box@and@assemble% + \ifnum\tcb@upper@box@badness=1000000\relax% + \tcb@split@break@to@start% + \else% + \ifdim\wd\tcb@totalupperbox=0pt\relax% + \iftcb@lowerspace% + \tcb@sdraw@U% + \let\tcb@split@next=\tcb@split@SL% + \else% + \tcb@split@force@standalone% + \tcb@drawcolorbox@standalone% + \fi% + \else% + \ifdim\dimexpr\tcb@h@upper=0pt\relax% + \tcb@warning{Discard zero height first box part due to break problems (possible loss of zero height content)}% + \tcb@split@break@to@start% + \else% + \tcb@sdraw@U% + \let\tcb@split@next=\tcb@split@USL% + \fi% + \fi% + \fi% + \else% + \tcb@split@upper@box% + \ifdim\wd\tcb@totalupperbox=0pt\relax% + \iftcb@lowerspace% + \tcb@sdraw@U% + \let\tcb@split@next=\tcb@split@SL% + \else% + \tcb@split@force@standalone% + \tcb@drawcolorbox@standalone% + \fi% + \else% + \tcb@sdraw@U% + \let\tcb@split@next=\tcb@split@USL% + \fi% + \fi% + \else% + \tcb@swap{\tcb@totalupperbox}{\tcb@upperbox}% + \iftcb@lowerspace% + \tcbdimto\tcb@split@dim{\tcb@split@dim-\tcb@h@upper-\tcb@h@segment}% + \ifdim\tcb@split@dim<\kvtcb@breakminlines\baselineskip\relax% + \tcb@sdraw@U% + \let\tcb@split@next=\tcb@split@SL% + \else + \tcb@split@lower@box@and@assemble% + \ifnum\tcb@lower@box@badness=1000000\relax% + \tcb@sdraw@U% + \let\tcb@split@next=\tcb@split@SL% + \else% + \ifdim\wd\tcb@totallowerbox=0pt\relax% + \tcb@split@force@standalone% + \tcb@drawcolorbox@standalone% + \else% + \tcb@sdraw@USL% + \let\tcb@split@next=\tcb@split@L% + \fi% + \fi% + \fi% + \else% + \tcb@split@force@standalone% + \tcb@drawcolorbox@standalone% + \fi% + \fi% + \tcb@split@next% +} + + +\def\tcb@split@force@last{% + \tcb@split@setstate@last% + \ifdim\tcb@h@total>\tcb@h@page% + \tcbdimto\kvtcb@bbbottom{\kvtcb@bbbottom+\tcb@h@page-\tcb@h@total}% + \fi% +} + +\def\tcb@nextbreakpart{% + \stepcounter{tcbbreakpart}% + \tcb@count@boxes% + \iftcb@checkpage% + \tcb@phantom@savepage% + \tcb@hasPhantomtrue% + \sbox\tcb@phantombox{\kvtcb@phantom}% + \let\kvtcb@phantom\@empty% + \fi% + \tcb@following@title% +} + + +\def\tcb@split@USL{% + \tcb@nextbreakpart% + \tcb@comp@h@page% + \tcb@defToTotalHeight\tcb@h@upper{\tcb@totalupperbox}% + \tcbdimto\tcb@h@total{\tcb@h@padding@last+\tcb@h@padtitle+\tcb@h@upper+\tcb@h@segment+\tcb@h@lower}% + % + \let\tcb@split@next=\relax% + \tcb@check@for@final@box% + \iftcb@final@box% + \tcb@split@setstate@last% + \tcb@setbox@upper{\tcb@h@upper}{\tcb@totalupperbox}% + \iftcb@lowerspace% + \tcb@setbox@lower{\tcb@h@lower}{\tcb@totallowerbox}% + \tcb@sdraw@USL% + \else + \tcb@sdraw@U% + \fi% + \else + \tcb@split@setstate@middle% + \tcbdimto\tcb@split@dim{\tcb@h@page-\tcb@h@padding@middle-\tcb@h@padtitle}% + \ifdim\tcb@split@dim<\tcb@h@upper\relax% + \tcb@split@upper@box% + \ifdim\wd\tcb@totalupperbox=0pt\relax% + \iftcb@lowerspace% + \tcb@sdraw@U% + \let\tcb@split@next=\tcb@split@SL% + \else% + \tcb@split@force@last% + \tcb@sdraw@U% + \fi% + \else% + \tcb@sdraw@U% + \let\tcb@split@next=\tcb@split@USL% + \fi% + \else% + \tcb@setbox@upper{\tcb@h@upper}{\tcb@totalupperbox}% + \iftcb@lowerspace% + \tcbdimto\tcb@split@dim{\tcb@split@dim-\tcb@h@upper-\tcb@h@segment} + \ifdim\tcb@split@dim<\kvtcb@breakminlines\baselineskip\relax% + \tcb@sdraw@U% + \let\tcb@split@next=\tcb@split@SL% + \else + \tcb@split@lower@box@and@assemble% + \ifnum\tcb@lower@box@badness=1000000\relax% + \tcb@sdraw@U% + \let\tcb@split@next=\tcb@split@SL% + \else% + \ifdim\wd\tcb@totallowerbox=0pt\relax% + \tcb@split@force@last% + \tcb@sdraw@USL% + \else% + \tcb@sdraw@USL% + \let\tcb@split@next=\tcb@split@L% + \fi% + \fi% + \fi% + \else% + \tcb@split@force@last% + \tcb@sdraw@U% + \fi% + \fi% + \fi% + \tcb@split@next% +} + + +\def\tcb@split@SL@displayed{% + \tcb@nextbreakpart% + \tcb@comp@h@page% + \let\tcb@h@upper=\tcb@zpt% + \tcb@defToTotalHeight\tcb@h@lower{\tcb@totallowerbox}% + \tcbdimto\tcb@h@total{\tcb@h@padding@last-\kvtcb@top-\kvtcb@boxsep+\tcb@h@padtitle+\tcb@h@segment+\tcb@h@lower}% + % + \let\tcb@split@next=\relax% + \tcb@check@for@final@box% + \iftcb@final@box% + \tcb@split@setstate@last% + \tcb@setbox@lower{\tcb@h@lower}{\tcb@totallowerbox}% + \tcb@sdraw@SL% + \else + \tcb@split@setstate@middle% + \tcbdimto\tcb@split@dim{\tcb@h@page-\tcb@h@padding@middle+\kvtcb@top+\kvtcb@boxsep-\tcb@h@padtitle-\tcb@h@segment}% + \tcb@split@lower@box% + \ifdim\wd\tcb@totallowerbox=0pt\relax% + \tcb@split@force@last% + \tcb@sdraw@SL% + \else + \tcb@sdraw@SL% + \let\tcb@split@next=\tcb@split@L% + \fi% + \fi% + \tcb@split@next% +} + + +\def\tcb@split@L{% + \tcb@nextbreakpart% + \tcb@comp@h@page% + \let\tcb@h@upper=\tcb@zpt% + \tcb@defToTotalHeight\tcb@h@lower{\tcb@totallowerbox}% + \tcbdimto\tcb@h@total{\tcb@h@padding@last+\tcb@h@padtitle+\tcb@h@lower}% + % + \let\tcb@split@next=\relax% + \tcb@check@for@final@box% + \iftcb@final@box% + \tcb@split@setstate@last% + \tcb@setbox@lower{\tcb@h@lower}{\tcb@totallowerbox}% + \tcb@sdraw@L% + \else + \tcb@split@setstate@middle% + \tcbdimto\tcb@split@dim{\tcb@h@page-\tcb@h@padding@middle-\tcb@h@padtitle}% + \tcb@split@lower@box% + \ifdim\wd\tcb@totallowerbox=0pt\relax% + \tcb@split@force@last% + \tcb@sdraw@L% + \else + \tcb@sdraw@L% + \let\tcb@split@next=\tcb@split@L% + \fi% + \fi% + \tcb@split@next% +} + + +\def\tcb@break@ch@fixed{% + \ifdim\tcb@natheight<\tcb@h@page\relax% + \tcbdimto\kvtcb@height@fixed{\tcb@h@page-\kvtcb@bbtop-\kvtcb@bbbottom}% + \tcb@ch@fixed% + \else% + \tcb@ch@natural% + \fi% +} + + +\def\tcb@sdraw@USL{% + \begingroup% + \tcbset{skin=\csname kvtcb@skin@@\tcb@split@state\endcsname}% + \csuse{tcb@extras@\tcb@split@state}% + \tcb@afteroptions@hook% + \def\tcbsegmentstate{1}% + \tcbdimto\tcb@natheight{\tcb@h@padtitle+\kvtcb@top@rule+\kvtcb@bottom@rule+\kvtcb@boxsep*2+\kvtcb@top+\kvtcb@bottom+\tcb@h@upper+\tcb@h@segment+\tcb@h@lower+\csname tcb@h@breaksep@\tcb@split@state\endcsname}% + \csname tcb@break@ch@\tcb@split@state\endcsname% + \tcbdimto\tcb@innerheight{\tcb@height-\kvtcb@top@rule-\kvtcb@bottom@rule-\tcb@h@padtitle}% + \tcbdimto\tcbtextheight{\tcb@innerheight-\kvtcb@boxsep*2-\kvtcb@top-\kvtcb@bottom}% + \tcb@drawing@env@begin% + \tcb@extensions@preframe% + % draw frame and interior + \tcb@adraw@frame% + \tcb@adraw@interior% + \iftcb@lowerseparated% + \tcb@segmentation@code% + \fi% + \tcb@adraw@title% + \tcb@extensions@postframe% + % draw text boxes + \tcb@tdraw@title% + \tcb@tdraw@upper% + \tcb@tdraw@lower% + \tcb@extensions@final% + \tcb@drawing@env@end% + \endgroup% +} + + +\def\tcb@sdraw@U{% + \begingroup% + \tcbset{skin=\csname kvtcb@skin@@\tcb@split@state\endcsname}% + \csuse{tcb@extras@\tcb@split@state}% + \tcb@afteroptions@hook% + \def\tcbsegmentstate{0}% + \tcbdimto\tcb@natheight{\tcb@h@padtitle+\kvtcb@top@rule+\kvtcb@bottom@rule+\kvtcb@boxsep*2+\kvtcb@top+\kvtcb@bottom+\tcb@h@upper+\csname tcb@h@breaksep@\tcb@split@state\endcsname}% + \csname tcb@break@ch@\tcb@split@state\endcsname% + \tcbdimto\tcb@innerheight{\tcb@height-\kvtcb@top@rule-\kvtcb@bottom@rule-\tcb@h@padtitle}% + \tcbdimto\tcbtextheight{\tcb@innerheight-\kvtcb@boxsep*2-\kvtcb@top-\kvtcb@bottom}% + \tcb@drawing@env@begin% + \tcb@extensions@preframe% + % draw frame and interior + \tcb@adraw@frame% + \tcb@adraw@interior% + \tcb@adraw@title% + \tcb@extensions@postframe% + % draw text boxes + \tcb@tdraw@title% + \tcb@tdraw@upper% + \tcb@extensions@final% + \tcb@drawing@env@end% + \endgroup% +} + + +\def\tcb@sdraw@SL{% + \begingroup% + \tcbset{skin=\csname kvtcb@skin@@\tcb@split@state\endcsname}% + \csuse{tcb@extras@\tcb@split@state}% + \tcb@afteroptions@hook% + \def\tcbsegmentstate{1}% + \tcbdimto\tcb@natheight{\tcb@h@padtitle+\kvtcb@top@rule+\kvtcb@bottom@rule+\kvtcb@bottom+\kvtcb@boxsep+\tcb@h@segment+\tcb@h@lower+\csname tcb@h@breaksep@\tcb@split@state\endcsname}% + \csname tcb@break@ch@\tcb@split@state\endcsname% + \tcbdimto\tcb@innerheight{\tcb@height-\kvtcb@top@rule-\kvtcb@bottom@rule-\tcb@h@padtitle}% + \tcbdimto\tcbtextheight{\tcb@innerheight-\kvtcb@boxsep*2-\kvtcb@top-\kvtcb@bottom}% + \tcb@drawing@env@begin% + \tcb@extensions@preframe% + % draw frame and interior + \tcb@adraw@frame% + \tcb@adraw@interior% + \iftcb@lowerseparated% + \tcb@segmentation@code% + \fi% + \tcb@adraw@title% + \tcb@extensions@postframe% + % draw text boxes + \tcb@tdraw@title% + \tcb@tdraw@lower% + \tcb@extensions@final% + \tcb@drawing@env@end% + \endgroup% +} + + +\def\tcb@sdraw@L{% + \begingroup% + \tcbset{skin=\csname kvtcb@skin@@\tcb@split@state\endcsname}% + \csuse{tcb@extras@\tcb@split@state}% + \tcb@afteroptions@hook% + \def\tcbsegmentstate{2}% + \tcbdimto\tcb@natheight{\tcb@h@padtitle+\kvtcb@top@rule+\kvtcb@bottom@rule+\kvtcb@boxsep*2+\kvtcb@top+\kvtcb@bottom+\ht\tcb@lowerbox+\dp\tcb@lowerbox+\csname tcb@h@breaksep@\tcb@split@state\endcsname}% + \csname tcb@break@ch@\tcb@split@state\endcsname% + \tcbdimto\tcb@innerheight{\tcb@height-\kvtcb@top@rule-\kvtcb@bottom@rule-\tcb@h@padtitle}% + \tcbdimto\tcbtextheight{\tcb@innerheight-\kvtcb@boxsep*2-\kvtcb@top-\kvtcb@bottom}% + \tcb@drawing@env@begin% + \tcb@extensions@preframe% + % draw frame and interior + \tcb@adraw@frame% + \tcb@adraw@interior% + \tcb@adraw@title% + \tcb@extensions@postframe% + % draw text boxes + \tcb@tdraw@title% + \tcb@tdraw@lower% + \tcb@extensions@final% + \tcb@drawing@env@end% + \endgroup% +} + + + +\tcbset{% + breakable@true/.code={% + \let\tcb@savebox=\tcb@vbox% + \let\endtcb@savebox=\endtcb@vbox% + \let\tcb@defToTotalHeight=\tcb@defToTotalHeightBreakable% + \let\tcb@drawcolorbox=\tcb@drawcolorbox@breakable}, + breakable@unlimited/.code={% + \let\tcb@savebox=\tcb@vbox% + \let\endtcb@savebox=\endtcb@vbox% + \let\tcb@defToTotalHeight=\tcb@defToTotalHeightUnlimited% + \let\tcb@drawcolorbox=\tcb@drawcolorbox@breakable}, + breakable/.style={breakable@#1}, + breakable/.default=true,% + unbreakable/.style={breakable=false},% + enforce breakable/.code={% + \let\tcb@savebox=\tcb@vbox% + \let\endtcb@savebox=\endtcb@vbox% + \let\tcb@defToTotalHeight=\tcb@defToTotalHeightBreakable% + \let\tcb@drawcolorbox=\tcb@drawcolorbox@breakable}, + title after break/.store in=\kvtcb@followingtitle,% + notitle after break/.style={title after break=},% + adjusted title after break/.style={title after break={#1\vphantom{\kvtcb@adjusttext}}},% + lines before break/.store in=\kvtcb@breakminlines,% + shrink break goal/.store in=\kvtcb@shrinkbreakgoal,% + toprule at break/.store in=\kvtcb@top@rule@break, + bottomrule at break/.store in=\kvtcb@bottom@rule@break, + topsep at break/.store in=\kvtcb@topsep,% + bottomsep at break/.store in=\kvtcb@bottomsep,% + pad before break/.code={\let\kvtcb@bottom@rule@break=\tcb@zpt% + \tcbdimto\kvtcb@bottomsep{#1-\kvtcb@bottom-\kvtcb@boxsep}},% + pad before break*/.style={pad before break={#1},% + code={\tcbdimto\tcb@temp{\kvtcb@bottom@rule@stand-\kvtcb@bottomsep}% + \ifdim\tcb@temp>0pt\relax% + \tcbdimto\kvtcb@enlargepage@flex{\kvtcb@enlargepage@flex+\tcb@temp}\fi}},% + pad after break/.code={\let\kvtcb@top@rule@break=\tcb@zpt% + \def\kvtcb@topsep{#1-\kvtcb@top-\kvtcb@boxsep}},% + pad at break/.style={pad before break={#1},pad after break={#1}},% + pad at break*/.style={pad before break*={#1},pad after break={#1}},% + enlargepage/.store in=\kvtcb@enlargepage,% + enlargepage flexible/.store in=\kvtcb@enlargepage@flex,% + break at/.store in=\kvtcb@breakatdim,% + height fixed for/.is choice,% + height fixed for/none/.code={% + \let\tcb@break@ch@first=\tcb@ch@natural% + \let\tcb@break@ch@middle=\tcb@ch@natural% + \let\tcb@break@ch@last=\tcb@ch@natural},% + height fixed for/first/.code={% + \let\tcb@break@ch@first=\tcb@break@ch@fixed% + \let\tcb@break@ch@middle=\tcb@ch@natural% + \let\tcb@break@ch@last=\tcb@ch@natural},% + height fixed for/middle/.code={% + \let\tcb@break@ch@first=\tcb@ch@natural% + \let\tcb@break@ch@middle=\tcb@break@ch@fixed% + \let\tcb@break@ch@last=\tcb@ch@natural},% + height fixed for/last/.code={% + \let\tcb@break@ch@first=\tcb@ch@natural% + \let\tcb@break@ch@middle=\tcb@ch@natural% + \let\tcb@break@ch@last=\tcb@break@ch@fixed},% + height fixed for/first and middle/.code={% + \let\tcb@break@ch@first=\tcb@break@ch@fixed% + \let\tcb@break@ch@middle=\tcb@break@ch@fixed% + \let\tcb@break@ch@last=\tcb@ch@natural},% + height fixed for/middle and last/.code={% + \let\tcb@break@ch@first=\tcb@ch@natural% + \let\tcb@break@ch@middle=\tcb@break@ch@fixed% + \let\tcb@break@ch@last=\tcb@break@ch@fixed},% + height fixed for/all/.code={% + \let\tcb@break@ch@first=\tcb@break@ch@fixed% + \let\tcb@break@ch@middle=\tcb@break@ch@fixed% + \let\tcb@break@ch@last=\tcb@break@ch@fixed},% + vfill before first/.is if=tcb@vfillbeforefirst,% + height fill/true/.code={\let\tcb@height@adjust\tcb@height@fill@unbroken@normal},% + height fill/maximum/.code={\let\tcb@height@adjust\tcb@height@fill@unbroken@compressed},% + height fill/.default=true,% + compress page/.is choice,% + compress page/all/.code={\def\tcb@comp@compress{\def\tcb@compress@height{\pageshrink-1sp}}},% + compress page/none/.code={\def\tcb@comp@compress{\let\tcb@compress@height\tcb@zpt}},% + compress page/baselineskip/.code={\def\tcb@comp@compress{% + \ifdim\pageshrink>\baselineskip% + \let\tcb@compress@height\baselineskip% + \else% + \def\tcb@compress@height{\pageshrink-1sp}% + \fi}},% + compress page/.default=all,% + compress page=baselineskip,% global setting + extras unbroken/.code={\appto\tcb@extras@unbroken{\tcbset{#1}}},% + extras first/.code={\appto\tcb@extras@first{\tcbset{#1}}},% + extras middle/.code={\appto\tcb@extras@middle{\tcbset{#1}}},% + extras last/.code={\appto\tcb@extras@last{\tcbset{#1}}},% + extras title after break/.code={\appto\tcb@extras@followingtitle{\tcbset{#1}}},% + extras/.style={extras unbroken={#1},extras first={#1},extras middle={#1},extras last={#1}},% + extras broken/.style={extras first={#1},extras middle={#1},extras last={#1}},% + extras unbroken and first/.style={extras unbroken={#1},extras first={#1}},% + extras unbroken and last/.style={extras unbroken={#1},extras last={#1}},% + extras middle and last/.style={extras middle={#1},extras last={#1}},% + extras first and middle/.style={extras first={#1},extras middle={#1}},% + no extras unbroken/.code={\let\tcb@extras@unbroken\@empty},% + no extras first/.code={\let\tcb@extras@first\@empty},% + no extras middle/.code={\let\tcb@extras@middle\@empty},% + no extras last/.code={\let\tcb@extras@last\@empty},% + no extras title after break/.code={\let\tcb@extras@followingtitle\@empty}, + no extras/.code={\let\tcb@extras@unbroken\@empty\let\tcb@extras@first\@empty\let\tcb@extras@middle\@empty\let\tcb@extras@last\@empty\let\tcb@extras@followingtitle\@empty},% + if odd page*/.style 2 args={check odd page,extras={if odd page={#1}{#2}}},% + if odd page or oneside*/.style 2 args={check odd page,extras={if odd page or oneside={#1}{#2}}},% + segmentation at break/.is choice,% + segmentation at break/true/.code={\let\tcb@split@SL\tcb@split@SL@displayed}, + segmentation at break/false/.code={\let\tcb@split@SL\tcb@split@L}, + segmentation at break/.default=true, +} + + +\tcbset{% + reset@breakable/.style={% + unbreakable,notitle after break, + shrink break goal=0pt, + lines before break=2, + topsep at break=0pt, + bottomsep at break=0pt, + enlargepage=0pt,enlargepage flexible=0pt, + break at=0pt, + height fixed for=none, + vfill before first=false, + no extras, + segmentation at break + }, + initialize@reset=reset@breakable, +} |