diff options
Diffstat (limited to 'macros/latex/contrib/tcolorbox/tcbraster.code.tex')
-rw-r--r-- | macros/latex/contrib/tcolorbox/tcbraster.code.tex | 242 |
1 files changed, 242 insertions, 0 deletions
diff --git a/macros/latex/contrib/tcolorbox/tcbraster.code.tex b/macros/latex/contrib/tcolorbox/tcbraster.code.tex new file mode 100644 index 0000000000..aab39967d6 --- /dev/null +++ b/macros/latex/contrib/tcolorbox/tcbraster.code.tex @@ -0,0 +1,242 @@ +%% The LaTeX package tcolorbox - version 4.20 (2019/03/02) +%% tcbskinsjigsaw.code.tex: Code for colorboxes with different skins +%% +%% ------------------------------------------------------------------------------------------- +%% 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} + +\newcounter{tcbrastercolumn} +\newcounter{tcbrasterrow} +\newcounter{tcbraster} + +\newrobustcmd{\thetcbrasternum}{\the\numexpr(\c@tcbrasterrow-1)*\kvtcb@raster@columns+\c@tcbrastercolumn\relax} + +\def\tcb@raster@ehg@all{% + \tcbset{equal height group={\kvtcb@raster@ehgid}}% +} + +\def\tcb@raster@ehg@row{% + \tcbset{equal height group={\kvtcb@raster@ehgid @\number\c@tcbrasterrow}}% +} + + +\tcbset{% + raster columns/.store in=\kvtcb@raster@columns, + raster rows/.store in=\kvtcb@raster@rows, + raster width/.store in=\kvtcb@raster@width, + raster height/.store in=\kvtcb@raster@height, + % + raster before skip/.store in=\kvtcb@raster@skip@before, + raster after skip/.store in=\kvtcb@raster@skip@after, + raster left skip/.store in=\kvtcb@raster@skip@left, + raster right skip/.store in=\kvtcb@raster@skip@right, + % + raster column skip/.store in=\kvtcb@raster@xskip, + raster row skip/.store in=\kvtcb@raster@yskip, + % + raster equal skip/.style={raster before skip=#1,raster after skip=#1, + raster column skip=#1,raster row skip=#1}, + % + raster@halign/.store in=\kvtcb@raster@halign, + raster halign/.is choice, + raster halign/center/.style={raster@halign=\centering}, + raster halign/left/.style={raster@halign=\raggedright}, + raster halign/right/.style={raster@halign=\raggedleft}, + % + raster valign/.store in=\kvtcb@raster@valign, + % + raster equal height group/.store in=\kvtcb@raster@ehgid,% + raster equal height/.is choice, + raster equal height/.default=all, + raster equal height/none/.code={\let\tcb@raster@ehg@set\@empty},% + raster equal height/rows/.code={\let\tcb@raster@ehg@set\tcb@raster@ehg@row},% + raster equal height/all/.code={\let\tcb@raster@ehg@set\tcb@raster@ehg@all},% + % + raster force size/.is choice,% + raster force size/.default=true,% + raster force size/true/.code={\let\tcb@raster@set@size\tcbset@late@options},% + raster force size/false/.code={\let\tcb@raster@set@size\tcbset},% + raster multicolumn/.code={% + \ifnum\numexpr\c@tcbrastercolumn+#1>\numexpr\kvtcb@raster@columns+1\relax + \tcb@warning{'raster multicolumn' combined too much columns}% + \else% + \tcbset@late@options{% + code={\preto\kvtcb@afterbox{\addtocounter{tcbrastercolumn}{\numexpr#1-1}}}, + width=(\tcb@raster@box@width+\tcb@raster@xskip)*#1-\tcb@raster@xskip}% + \fi% + }, + raster multirow/.code={% + \ifdefined\tcb@raster@box@height% + \tcbset@late@options{% + height=(\tcb@raster@box@height+\tcb@raster@yskip)*#1-\tcb@raster@yskip}% + \else% + \tcb@warning{'raster multirow' needs a fixed 'raster height'}% + \fi% + }, + raster width center/.style={raster width=\linewidth,raster left skip=(\linewidth-(#1))/2,raster right skip=(\linewidth-(#1))/2}, + raster width flush left/.style={raster width=\linewidth,raster left skip=0pt,raster right skip=\linewidth-(#1)}, + raster width flush right/.style={raster width=\linewidth,raster left skip=\linewidth-(#1),raster right skip=0pt}, +} + +\tcbset{ + raster reset/.style={ + raster width=\linewidth,raster height=0pt, + raster equal skip=2mm, + raster columns=2,raster rows=2, + raster left skip=0pt,raster right skip=0pt, + raster halign=left,raster valign=center, + raster equal height=none, + raster equal height group={REG@\tcb@raster@number}, + raster force size,}, + raster reset +} + +\setcounter{tcbraster}{0} + +\let\tcb@raster@change@minipage\@empty +\let\tcb@raster@change@fitbox\@empty +\def\tcb@raster@change@hbox{\tcbset{capture=minipage}} + +\def\tcb@height@fill@unbroken@raster#1{% + \ifnum\c@tcblayer<2\relax% + \kvtcb@beforebox% + \def\kvtcb@beforebox{}% + \tcb@breakat@init% + \tcbset{compress page=#1}% + \tcb@comp@h@page% + \ifdim\tcb@h@page<0pt\relax\unkern\pagebreak\tcb@comp@h@page\kern\tcb@raster@skip@left\fi% + \tcbset{height=\tcb@h@page-\kvtcb@bbtop@stand-\kvtcb@bbbottom@stand}% + \fi% +} + +\newenvironment{tcbraster}[1][]{% + \tcb@layer@pushup% + \stepcounter{tcbraster}% + \edef\tcb@raster@number{\number\c@tcbraster}% + \edef\tcb@raster@save@column{\number\c@tcbrastercolumn}% + \edef\tcb@raster@save@row{\number\c@tcbrasterrow}% + \let\tcb@raster@change@fitbox\@empty% + \setcounter{tcbrastercolumn}{1}% + \setcounter{tcbrasterrow}{1}% + \let\tcb@height@fill@unbroken\tcb@height@fill@unbroken@raster% + \tcbset{every box on layer \the\numexpr\number\c@tcblayer+1\relax/.code={% + \tcb@raster@ehg@set% + \tcbset{raster every box/.try}% + \ifodd\c@tcbrastercolumn\relax% + \tcbset{raster odd column/.try}% + \else% + \tcbset{raster even column/.try}% + \fi% + \tcbset{raster column \number\c@tcbrastercolumn/.try}% + \ifodd\c@tcbrasterrow\relax% + \tcbset{raster odd row/.try}% + \else% + \tcbset{raster even row/.try}% + \fi% + \tcbset{raster row \number\c@tcbrasterrow/.try}% + \ifodd\thetcbrasternum\relax% + \tcbset{raster odd number/.try}% + \else% + \tcbset{raster even number/.try}% + \fi% + \tcbset{raster row \number\c@tcbrasterrow\space column \number\c@tcbrastercolumn/.try}% + \tcbset{raster number \thetcbrasternum/.try}% + }}% + \tcbset{#1}% + % sanitize + \tcbdimto\tcb@raster@width{\kvtcb@raster@width}% + \tcbdimto\tcb@raster@height{\kvtcb@raster@height}% + \tcbdimto\tcb@raster@skip@before{\kvtcb@raster@skip@before}% + \tcbdimto\tcb@raster@skip@after{\kvtcb@raster@skip@after}% + \tcbdimto\tcb@raster@skip@left{\kvtcb@raster@skip@left}% + \tcbdimto\tcb@raster@skip@right{\kvtcb@raster@skip@right}% + \tcbdimto\tcb@raster@xskip{\kvtcb@raster@xskip}% + \tcbdimto\tcb@raster@yskip{\kvtcb@raster@yskip}% + \tcbset@late@options{% + before={\ifhmode\unskip\fi\ifnum\c@tcbrastercolumn>1 \kern\tcb@raster@xskip\else% + \ifnum\c@tcbrasterrow>1 \parindent\z@\parskip\z@\par\nointerlineskip\addvspace{\the\dimexpr\tcb@raster@yskip\relax}\noindent\fi% + \kern\tcb@raster@skip@left\fi}, + after={% + \ifnum\c@tcbrastercolumn=\kvtcb@raster@columns\relax% + \kern\tcb@raster@skip@right% + \setcounter{tcbrastercolumn}{1}\addtocounter{tcbrasterrow}{1}% + \else% + \stepcounter{tcbrastercolumn}% + \fi},% + box align=\kvtcb@raster@valign,% + }% + \tcbdimto\tcb@raster@box@width{(\tcb@raster@width+\tcb@raster@xskip-\tcb@raster@skip@left-\tcb@raster@skip@right)/\kvtcb@raster@columns-\tcb@raster@xskip}% + \tcb@raster@set@size{% + code={\csuse{tcb@raster@change@\kvtcb@capture}}, + width=\tcb@raster@box@width, + }% + \ifdim\dimexpr\tcb@raster@height>0pt\relax% + \tcbdimto\tcb@raster@box@height{(\tcb@raster@height+\tcb@raster@yskip-0.001pt)/\kvtcb@raster@rows-\tcb@raster@yskip}% + \tcb@raster@set@size{height=\tcb@raster@box@height}% + \fi% + \let\tcb@end@raster\@empty% + \ifinner\ifhmode% + \color@vbox% + \hsize=\tcb@raster@width% + \let\tcb@end@raster\color@endbox% + \fi\fi%& + \if@nobreak% + \iftcb@ignorenobreak% + {\par\nointerlineskip% + \addvspace{\glueexpr\tcb@raster@skip@before-\parskip}}% + \fi% + \else% + {\par\nointerlineskip% + \addvspace{\glueexpr\tcb@raster@skip@before-\parskip}}% + \fi% + \tcb@parfillskip@check\kvtcb@raster@halign\noindent% +}{% + \ifhmode\unskip\fi% + \ifnum\c@tcbrastercolumn>1 % + \kern\tcb@raster@skip@right% + \fi% + \begingroup% + \par\nointerlineskip% + \addvspace{\glueexpr\tcb@raster@skip@after-\parskip}% + \endgroup% + \tcb@end@raster% + \setcounter{tcbrastercolumn}{\tcb@raster@save@column}% + \setcounter{tcbrasterrow}{\tcb@raster@save@row}% +} + +\newcommand{\tcbitem@following}[1][]{% + \end{tcolorbox}\begin{tcolorbox}[#1]% +} + +\newcommand{\tcbitem@first}[1][]{% + \let\tcbitem=\tcbitem@following% + \begin{tcolorbox}[#1]% +} + +\newenvironment{tcbitemize}[1][]{% + \begin{tcbraster}[#1]% + \let\tcb@raster@change@fitbox=\tcb@raster@change@hbox% + \let\tcbitem=\tcbitem@first% +}{\end{tcolorbox}\end{tcbraster}} + +\newenvironment{tcboxedraster}[2][]{% + \tcolorbox[#2]\begin{tcbraster}[#1]}% + {\end{tcbraster}\endtcolorbox} + +\newenvironment{tcboxeditemize}[2][]{% + \tcolorbox[#2]\tcbitemize[#1]}% + {\endtcbitemize\endtcolorbox} |