diff options
Diffstat (limited to 'macros/latex/contrib/tcolorbox/tcbskins.code.tex')
-rw-r--r-- | macros/latex/contrib/tcolorbox/tcbskins.code.tex | 476 |
1 files changed, 193 insertions, 283 deletions
diff --git a/macros/latex/contrib/tcolorbox/tcbskins.code.tex b/macros/latex/contrib/tcolorbox/tcbskins.code.tex index 65a29a24c9..183ed011dd 100644 --- a/macros/latex/contrib/tcolorbox/tcbskins.code.tex +++ b/macros/latex/contrib/tcolorbox/tcbskins.code.tex @@ -1,8 +1,8 @@ -%% The LaTeX package tcolorbox - version 5.1.1 (2022/06/24) +%% The LaTeX package tcolorbox - version 6.0.0 (2023/02/10) %% tcbskins.code.tex: Code for colorboxes with different skins %% %% ------------------------------------------------------------------------------------------- -%% Copyright (c) 2006-2022 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de> +%% Copyright (c) 2006-2023 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de> %% ------------------------------------------------------------------------------------------- %% %% This work may be distributed and/or modified under the @@ -17,9 +17,10 @@ %% %% This work consists of all files listed in README %% -\tcb@set@library@version{5.1.1} +\tcb@set@library@version{6.0.0} \RequirePackage{tikz}[2010/10/13] +\RequirePackage{tikzfill.image} \newenvironment{tikzpicture@tcb@hooked}{% \edef\tcb@tikzpicture@begin{\noexpand\tikzpicture[\expandonce\tcb@tikz@option@hook]}% @@ -1134,7 +1135,7 @@ \colorlet{tcbtranscol@back}{tcbcolbacktitle}% \let\tcb@trans@skin@current\kvtcb@skin@current% \let\tcb@trans@boxedstyle\kvtcb@style@boxedtitle% - \setbox\tcb@titlebox\color@hbox\bgroup\color{tcbcoltitle}\kvtcb@fonttitle\kvtcb@before@boxedtitle\kvtcb@haligntitle\kvtcb@before@title\tcbtitletext\kvtcb@after@title\kvtcb@after@boxedtitle\egroup\color@endbox% + \setbox\tcb@titlebox\color@hbox\bgroup\color{tcbcoltitle}\kvtcb@fonttitle\kvtcb@before@boxedtitle\kvtcb@haligntitle\tcb@insert@before@title\tcbtitletext\tcb@insert@after@title\kvtcb@after@boxedtitle\egroup\color@endbox% \setbox\tcb@titlebox\color@hbox\tcbox[skin=\tcb@trans@skin@current,colframe=tcbtranscol@frame,colback=tcbtranscol@back,% code={\pgfkeysalsofrom\tcb@trans@boxedsize\pgfkeysalsofrom\tcb@trans@boxedstyle% \ifcase#6 @@ -1210,77 +1211,55 @@ } -\newbox\tcb@waterbox - -\def\tcb@setratio#1#2#3{\edef#1{\strip@pt\dimexpr\number\numexpr\number\dimexpr#2\relax*65536/\number\dimexpr#3\relax\relax sp\relax}} - -\def\tcb@setratiorobust#1#2#3{\ifdim\dimexpr#3<1pt\relax\tcb@setratio#1{#2}{1pt}\else\tcb@setratio#1{#2}{#3}\fi} - -\def\tcb@comp@waterbox@stretch#1#2#3{% - \tcb@setratiorobust\tcb@scale@x{#1\dimexpr#2}{\wd\tcb@waterbox}% - \tcb@setratiorobust\tcb@scale@y{#1\dimexpr#3}{\ht\tcb@waterbox+\dp\tcb@waterbox}% -} - -\def\tcb@comp@waterbox@zoom#1#2#3{% - \tcb@comp@waterbox@stretch{#1}{#2}{#3}% - \ifdim\dimexpr\tcb@scale@x pt\relax<\dimexpr\tcb@scale@y pt\relax\let\tcb@scale@y=\tcb@scale@x\else\let\tcb@scale@x=\tcb@scale@y\fi% -} - -\def\tcb@comp@waterbox@overzoom#1#2#3{% - \tcb@comp@waterbox@stretch{#1}{#2}{#3}% - \ifdim\dimexpr\tcb@scale@x pt\relax>\dimexpr\tcb@scale@y pt\relax\let\tcb@scale@y=\tcb@scale@x\else\let\tcb@scale@x=\tcb@scale@y\fi% -} - -\def\tcb@comp@waterbox@shrink#1#2#3{% - \tcb@comp@waterbox@zoom{#1}{#2}{#3}% - \ifdim\dimexpr\tcb@scale@x pt\relax>1pt\relax% - \edef\tcb@scale@x{1}\edef\tcb@scale@y{1}% - \fi% -} - -\def\tcb@box@scaled@waterbox{\scalebox{\tcb@scale@x}[\tcb@scale@y]{\box\tcb@waterbox}} - -\def\tcb@drawspec@watermark@@noclip{% - \tcb@comp@wm% - \node[opacity=\kvtcb@watermark@opacity,anchor=center] at (interior) {\tcb@box@scaled@waterbox};% -} - -\def\tcb@drawspec@watermark@@clip{% +\def\tcb@drawspec@watermark@@clip#1{% \begin{tcbclipinterior}% - \tcb@drawspec@watermark@@noclip% + \color{\kvtcb@watermark@color}% + \path[% + fill image opacity=\kvtcb@watermark@opacity, + fill image scale=\kvtcb@watermark@scale, + #1, + ] + (interior.south west) rectangle (interior.north east); \end{tcbclipinterior}% } -\def\tcb@drawspec@watermark@tikz#1{% - \setbox\tcb@waterbox=\color@hbox\pgfinterruptpicture{\pgfsetbaseline{0pt}\begin{tikzpicture}[color=\kvtcb@watermark@color]#1\end{tikzpicture}}\endpgfinterruptpicture\color@endbox% - \tcb@drawspec@watermark% -} - -\def\tcb@drawspec@watermark@graphics#1{% - \setbox\tcb@waterbox=\color@hbox\pgfinterruptpicture{\includegraphics{#1}}\endpgfinterruptpicture\color@endbox% - \tcb@drawspec@watermark% -} - -\def\tcb@drawspec@watermark@text#1{% - \tcb@drawspec@watermark@tikz{\node[inner sep=0pt,align=flush center]{#1};}% +\def\tcb@drawspec@watermark@@noclip#1{% + \color{\kvtcb@watermark@color}% + \path[% + fill image opacity=\kvtcb@watermark@opacity, + fill image scale=(\kvtcb@watermark@scale)/4, + #1, + ] + ([xshift=-\tcb@innerwidth*2,yshift=-\tcb@innerheight*2]interior.center) + rectangle +(\tcb@innerwidth*4,\tcb@innerheight*4); } - \tcbset{% watermark opacity/.store in=\kvtcb@watermark@opacity,% watermark color/.store in=\kvtcb@watermark@color,% % - watermark stretch/.code={\def\tcb@comp@wm{\tcb@comp@waterbox@stretch{#1}{\tcb@innerwidth}{\tcb@innerheight}}},% - watermark zoom/.code={\def\tcb@comp@wm{\tcb@comp@waterbox@zoom{#1}{\tcb@innerwidth}{\tcb@innerheight}}},% - watermark overzoom/.code={\def\tcb@comp@wm{\tcb@comp@waterbox@overzoom{#1}{\tcb@innerwidth}{\tcb@innerheight}}},% - watermark shrink/.code={\def\tcb@comp@wm{\tcb@comp@waterbox@shrink{#1}{\tcb@innerwidth}{\tcb@innerheight}}},% + watermark stretch/.code={\def\kvtcb@watermark@scale{#1}% + \tikzset{fill@image/.style={fill stretch image={##1}},fill@picture/.style={fill stretch picture={##1}}}},% + watermark stretch/.default=1, + watermark zoom/.code={\def\kvtcb@watermark@scale{#1}% + \tikzset{fill@image/.style={fill zoom image={##1}},fill@picture/.style={fill zoom picture={##1}}}},% + watermark zoom/.default=1, + watermark overzoom/.code={\def\kvtcb@watermark@scale{#1}% + \tikzset{fill@image/.style={fill overzoom image={##1}},fill@picture/.style={fill overzoom picture={##1}}}},% + watermark overzoom/.default=1, + watermark shrink/.code={\def\kvtcb@watermark@scale{#1}% + \tikzset{fill@image/.style={fill shrink image={##1}},fill@picture/.style={fill shrink picture={##1}}}},% + watermark shrink/.default=1, +% + watermark@overlay/.style={overlay={\tcb@drawspec@watermark{#1}}}, + watermark@overlay@on/.style n args={2}{overlay #1={\tcb@drawspec@watermark{#2}}}, % - watermark tikz/.style={overlay={\tcb@drawspec@watermark@tikz{#1}}}, - watermark tikz on/.style args={#1 is #2}{overlay #1={\tcb@drawspec@watermark@tikz{#2}}},% - watermark graphics/.style={overlay={\tcb@drawspec@watermark@graphics{#1}}}, - watermark graphics on/.style args={#1 is #2}{overlay #1={\tcb@drawspec@watermark@graphics{#2}}}, - watermark text/.style={overlay={\tcb@drawspec@watermark@text{#1}}}, - watermark text on/.style args={#1 is #2}{overlay #1={\tcb@drawspec@watermark@text{#2}}}, + watermark tikz/.style={watermark@overlay={fill@picture={#1}}}, + watermark tikz on/.style args={#1 is #2}{watermark@overlay@on={#1}{fill@picture={#2}}}, + watermark graphics/.style={watermark@overlay={fill@image={#1}}}, + watermark graphics on/.style args={#1 is #2}{watermark@overlay@on={#1}{fill@image={#2}}}, + watermark text/.style={watermark@overlay={fill@picture={\node[inner sep=0pt,align=flush center]{#1};}}}, + watermark text on/.style args={#1 is #2}{watermark@overlay@on={#1}{fill@picture={\node[inner sep=0pt,align=flush center]{#2};}}}, no watermark/.style={no overlay}, clip watermark/.is choice, clip watermark/true/.code={\let\tcb@drawspec@watermark=\tcb@drawspec@watermark@@clip}, @@ -1311,115 +1290,6 @@ } -\def\tcb@process@ppbb{% - \pgf@process{\pgfpointanchor{path picture bounding box}{south west}}% - \pgf@xa\pgf@x\pgf@ya\pgf@y% - \pgf@process{\pgfpointanchor{path picture bounding box}{north east}}% - \pgf@xb\pgf@x\pgf@yb\pgf@y% - \pgfsetfillopacity{\tcb@tikz@fill@graphics@opacity}% - \pgfsetstrokeopacity{\tcb@tikz@fill@graphics@opacity}% -} - -\def\tcb@process@ppbb@wh{% - \tcb@process@ppbb% - \tcbdimto\tcb@ppbb@width{\pgf@xb-\pgf@xa}% - \tcbdimto\tcb@ppbb@height{\pgf@yb-\pgf@ya}% -} - -\def\tcb@ppbb@textbox#1{\pgftext[x=\the\dimexpr\pgf@xa+\tcb@ppbb@width/2\relax,y=\pgf@ya+\tcb@ppbb@height/2]{#1}} - -\def\tcb@set@waterbox@to@graphics#1{% - \setbox\tcb@waterbox=\color@hbox\pgfinterruptpicture% - \begingroup\edef\x{\endgroup\noexpand\includegraphics[\tcb@tikz@fill@graphics@options]}\x{#1}% - \endpgfinterruptpicture\color@endbox% -} - -\def\tcb@set@waterbox@to@picture#1{% - \setbox\tcb@waterbox=\color@hbox\pgfinterruptpicture{\pgfsetbaseline{0pt}\begin{tikzpicture}#1\end{tikzpicture}}\endpgfinterruptpicture\color@endbox% -} - -\tikzset{% - fill image opacity/.store in=\tcb@tikz@fill@graphics@opacity,% - fill image opacity=1,% - fill image scale/.store in=\tcb@tikz@fill@graphics@scale,% - fill image scale=1,% - fill image options/.store in=\tcb@tikz@fill@graphics@options,% - fill image options=,% - fill plain image/.style={path picture={% - \tcb@process@ppbb@wh% - \tcb@ppbb@textbox{\begingroup\edef\x{\endgroup\noexpand\includegraphics[\tcb@tikz@fill@graphics@options]}\x{#1}}% - }}, - fill plain picture/.style={path picture={% - \tcb@process@ppbb@wh% - \tcb@set@waterbox@to@picture{#1}% - \tcb@ppbb@textbox{\box\tcb@waterbox}% - }}, - fill stretch image/.style={path picture={% - \tcb@process@ppbb@wh% - \tcb@ppbb@textbox{\begingroup\edef\x{\endgroup\noexpand\includegraphics[\tcb@tikz@fill@graphics@options,% - width=\the\dimexpr\tcb@tikz@fill@graphics@scale\dimexpr\tcb@ppbb@width\relax,% - height=\the\dimexpr\tcb@tikz@fill@graphics@scale\dimexpr\tcb@ppbb@height\relax]}\x{#1}}% - }}, - fill stretch picture/.style={path picture={% - \tcb@process@ppbb@wh% - \tcb@set@waterbox@to@picture{#1}% - \tcb@comp@waterbox@stretch{\tcb@tikz@fill@graphics@scale}{\tcb@ppbb@width}{\tcb@ppbb@height}% - \tcb@ppbb@textbox{\tcb@box@scaled@waterbox}% - }}, - fill@overzoom/.style={path picture={% - \tcb@process@ppbb@wh% - #1% - \tcb@comp@waterbox@overzoom{\tcb@tikz@fill@graphics@scale}{\tcb@ppbb@width}{\tcb@ppbb@height}% - \tcb@ppbb@textbox{\tcb@box@scaled@waterbox}% - }}, - fill overzoom image/.style={fill@overzoom={\tcb@set@waterbox@to@graphics{#1}}},% - fill overzoom picture/.style={fill@overzoom={\tcb@set@waterbox@to@picture{#1}}},% - fill@zoom/.style={path picture={% - \tcb@process@ppbb@wh% - #1% - \tcb@comp@waterbox@zoom{\tcb@tikz@fill@graphics@scale}{\tcb@ppbb@width}{\tcb@ppbb@height}% - \tcb@ppbb@textbox{\tcb@box@scaled@waterbox}% - }}, - fill zoom image/.style={fill@zoom={\tcb@set@waterbox@to@graphics{#1}}},% - fill zoom picture/.style={fill@zoom={\tcb@set@waterbox@to@picture{#1}}},% - fill@shrink/.style={path picture={% - \tcb@process@ppbb@wh% - #1% - \tcb@comp@waterbox@shrink{\tcb@tikz@fill@graphics@scale}{\tcb@ppbb@width}{\tcb@ppbb@height}% - \tcb@ppbb@textbox{\tcb@box@scaled@waterbox}% - }}, - fill shrink image/.style={fill@shrink={\tcb@set@waterbox@to@graphics{#1}}},% - fill shrink picture/.style={fill@shrink={\tcb@set@waterbox@to@picture{#1}}},% - fill@tile/.style={path picture={% - \tcb@process@ppbb% - #1% - \tcbdimto\tcb@ppbb@tilew{\wd\tcb@waterbox}% - \tcbdimto\tcb@ppbb@tileh{\ht\tcb@waterbox+\dp\tcb@waterbox}% - \pgf@xc\pgf@xa\pgf@yc\pgf@yb% - \pgfutil@loop% - \pgfutil@loop% - \pgftext[x=\pgf@xc,y=\pgf@yc,left,top]{\copy\tcb@waterbox}% - \ifdim\pgf@xc<\pgf@xb\relax% - \advance\pgf@xc\tcb@ppbb@tilew% - \pgfutil@repeat% - \ifdim\pgf@yc>\pgf@ya\relax% - \advance\pgf@yc-\tcb@ppbb@tileh% - \pgf@xc\pgf@xa% - \pgfutil@repeat% - }},% - fill tile image/.style={fill@tile={\tcb@set@waterbox@to@graphics{#1}}},% - fill tile picture/.style={fill@tile={\tcb@set@waterbox@to@picture{#1}}},% - fill tile picture*/.style 2 args={fill@tile={\tcb@set@waterbox@to@picture{#2}% - \setbox\tcb@waterbox=\color@hbox\scalebox{#1}{\box\tcb@waterbox}\color@endbox}},% - % - fill plain image*/.style 2 args={fill image options={#1},fill plain image={#2}},% - fill stretch image*/.style 2 args={fill image options={#1},fill stretch image={#2}},% - fill overzoom image*/.style 2 args={fill image options={#1},fill overzoom image={#2}},% - fill zoom image*/.style 2 args={fill image options={#1},fill zoom image={#2}},% - fill shrink image*/.style 2 args={fill image options={#1},fill shrink image={#2}},% - fill tile image*/.style 2 args={fill image options={#1},fill tile image={#2}},% -} - \tcbset{% frame style image/.style={frame style={fill=none,fill stretch image={#1}}}, frame style tile/.style 2 args={frame style={fill=none,fill tile image*={#1}{#2}}}, @@ -1815,104 +1685,6 @@ } -\def\tcb@include@graphics{% - \let\tcb@graphics@options\kvtcb@graphics@options% - \ifnum\kvtcb@graphics@orientation>-1\relax% - \setbox\tcb@waterbox=\color@hbox\begingroup\edef\x{\endgroup\noexpand\includegraphics[\tcb@graphics@options]}\x{\imagepath}\color@endbox% - \ifcase\kvtcb@graphics@orientation\relax% - \ifdim\wd\tcb@waterbox<\dimexpr\ht\tcb@waterbox+\dp\tcb@waterbox\relax% - \appto\tcb@graphics@options{,angle=90}% - \fi% - \or% - \ifdim\wd\tcb@waterbox<\dimexpr\ht\tcb@waterbox+\dp\tcb@waterbox\relax% - \appto\tcb@graphics@options{,angle=-90}% - \fi% - \or% - \ifdim\wd\tcb@waterbox>\dimexpr\ht\tcb@waterbox+\dp\tcb@waterbox\relax% - \appto\tcb@graphics@options{,angle=90}% - \fi% - \or% - \ifdim\wd\tcb@waterbox>\dimexpr\ht\tcb@waterbox+\dp\tcb@waterbox\relax% - \appto\tcb@graphics@options{,angle=-90}% - \fi% - \fi% - \fi% - \ifdefstring{\kvtcb@capture}{hbox}{% - \tcbox{% - \begingroup\edef\x{\endgroup\noexpand\includegraphics[\tcb@graphics@options]}% - \x{\imagepath}% - }% - }{% - \iftcb@fixedheight% - \begin{tcolorbox}% - \begingroup\edef\x{\endgroup\noexpand\includegraphics[\tcb@graphics@options,width=\linewidth,height=\tcbtextheight,keepaspectratio]}% - \x{\imagepath}% - \end{tcolorbox}% - \else% - \ifdefempty\tcb@height@adjust{% - \begin{tcolorbox}% - \begingroup\edef\x{\endgroup\noexpand\includegraphics[\tcb@graphics@options,width=\linewidth]}% - \x{\imagepath}% - \end{tcolorbox}% - }{% height fill - \begin{tcolorbox}[underlay={% - \begin{tcbclipinterior}% - \path[fill zoom image*={\tcb@graphics@options}{\imagepath}] - ([xshift=\kvtcb@boxsep+\kvtcb@leftupper,yshift=\kvtcb@boxsep+\kvtcb@bottom]interior.south west) rectangle - ([xshift=-\kvtcb@boxsep-\kvtcb@rightupper,yshift=-\kvtcb@boxsep-\kvtcb@top]interior.north east); - \end{tcbclipinterior}% - }]% - \end{tcolorbox}% - }% - \fi% - }% -} - -\def\tcb@scanfilename#1#2{% - \begingroup% - \everyeof{\noexpand}% - \endlinechar -1% - \catcode`\_=11% - \catcode`\~=11% - \edef\x{\scantokens\expandafter{#2}}% - \expandafter\endgroup% - \expandafter\def\expandafter #1\expandafter{\x}% -}% - - -\def\tcb@include@graphics@preparefile#1{% - \tcb@scanfilename\tcb@temp{#1}% - \filename@parse{\tcb@temp}% - \ifx\filename@ext\relax% - \let\imagename\filename@base% - \else% - \def\imagename{\filename@base\Gin@sepdefault\filename@ext}% - \fi% - \ifdefined\grffile@Ginclude@graphics% - % grffile package loaded - \ifx\kvtcb@graphics@directory\@empty% - \def\imagepath{#1}% - \else% - \def\imagepath{\kvtcb@graphics@directory/#1}% - \fi% - \else% - \ifx\kvtcb@graphics@directory\@empty% - \edef\imagepath{#1}% - \else% - \edef\imagepath{\kvtcb@graphics@directory/#1}% - \fi% - \fi% -} - -\newcommand{\tcbincludegraphics}[2][]{% - \begingroup% - \tcb@layer@pushup% - \tcb@apply@box@options{enhanced,clip upper=true,valign=center,center upper,#1}% - \tcb@include@graphics@preparefile{#2}% - \edef\imagepage{1}% - \tcb@include@graphics% - \endgroup% -} \def\tcb@set@pdfpages#1#2{% \IfFileExists{#2}{% @@ -1940,20 +1712,158 @@ \relax% } -\newcommand{\tcbincludepdf}[2][]{% - \tcb@include@graphics@preparefile{#2}% - \tcb@set@pdfpages\pdfpages{\imagepath}% - \foreach \imagepage in \kvtcb@graphics@pages% - {% - \begingroup% - \tcb@layer@pushup% - \tcb@apply@box@options{enhanced,clip upper=true,valign=center,center upper,#1}% - \appto\kvtcb@graphics@options{,page=\imagepage}% - \tcb@include@graphics% - \endgroup% - }% + +\ExplSyntaxOn + +\tl_new:N \l__tcobox_graphics_options_tl + + +\cs_new:Npn \__tcobox_include_graphics:nn #1#2 + { + \tl_set:Nn \l_tmpa_tl { \includegraphics } + \tl_put_right:Nx \l_tmpa_tl { [#1] } + \l_tmpa_tl {#2} + } + + +\cs_new:Npn \__tcobox_include_graphics: + { + \tl_set_eq:NN \l__tcobox_graphics_options_tl \kvtcb@graphics@options + + \int_compare:nNnT \kvtcb@graphics@orientation > {-1} + { + \hbox_set:Nn \l_tmpa_box + { + \__tcobox_include_graphics:nn { \l__tcobox_graphics_options_tl }{ \imagepath } + } + \if_case:w \kvtcb@graphics@orientation + \dim_compare:nNnT {\box_wd:N\l_tmpa_box} < {\box_ht_plus_dp:N \l_tmpa_box} + { + \tl_put_right:Nn \l__tcobox_graphics_options_tl {,angle=90} + } + \or: + \dim_compare:nNnT {\box_wd:N\l_tmpa_box} < {\box_ht_plus_dp:N \l_tmpa_box} + { + \tl_put_right:Nn \l__tcobox_graphics_options_tl {,angle=-90} + } + \or: + \dim_compare:nNnT {\box_wd:N\l_tmpa_box} > {\box_ht_plus_dp:N \l_tmpa_box} + { + \tl_put_right:Nn \l__tcobox_graphics_options_tl {,angle=90} + } + \or: + \dim_compare:nNnT {\box_wd:N\l_tmpa_box} > {\box_ht_plus_dp:N \l_tmpa_box} + { + \tl_put_right:Nn \l__tcobox_graphics_options_tl {,angle=-90} + } + \fi: + } + + \tl_if_eq:NnTF \kvtcb@capture {hbox} + { + \tcbox + { + \__tcobox_include_graphics:nn { \l__tcobox_graphics_options_tl }{ \imagepath } + } + } + { + \legacy_if:nTF {tcb@fixedheight} + { + \begin{tcolorbox} + \__tcobox_include_graphics:nn { \l__tcobox_graphics_options_tl,width=\linewidth,height=\tcbtextheight,keepaspectratio }{ \imagepath } + \end{tcolorbox} + } + { + \tl_if_empty:NTF \tcb@height@adjust + { + \begin{tcolorbox} + \__tcobox_include_graphics:nn { \l__tcobox_graphics_options_tl,width=\linewidth }{ \imagepath } + \end{tcolorbox}% + }{% height fill + \begin{tcolorbox}[ + underlay= + { + \begin{tcbclipinterior} + \path[fill~zoom~image*={\l__tcobox_graphics_options_tl}{\imagepath}] + ([xshift=\kvtcb@boxsep+\kvtcb@leftupper,yshift=\kvtcb@boxsep+\kvtcb@bottom]interior.south~west)~rectangle~ + ([xshift=-\kvtcb@boxsep-\kvtcb@rightupper,yshift=-\kvtcb@boxsep-\kvtcb@top]interior.north~east); + \end{tcbclipinterior} + }] + \end{tcolorbox} + } + } + } + } + + +\cs_new:Npn \__tcobox_include_graphics_preparefile:n #1 + { + \file_parse_full_name:nNNN {#1} \l_tmpa_tl \imagename \l_tmpb_tl + \tl_put_right:NV \imagename \l_tmpb_tl + \tl_set_eq:NN \imagepath \imagename + \tl_if_empty:NF \l_tmpa_tl + { + \tl_put_left:Nn \imagepath {/} + \tl_if_eq:NnF \l_tmpa_tl {/} + { + \tl_put_left:NV \imagepath \l_tmpa_tl + } + } + \tl_if_empty:NF \kvtcb@graphics@directory + { + \tl_put_left:Nn \imagepath {/} + \tl_if_eq:NnF \kvtcb@graphics@directory {/} + { + \tl_put_left:NV \imagepath \kvtcb@graphics@directory + } + } + \tl_set_rescan:Nno \imagename + { + \char_set_catcode_letter:N \_ + \char_set_catcode_letter:N \~ + \char_set_catcode_letter:N \{ + \char_set_catcode_letter:N \} + \char_set_catcode_letter:N \$ + \char_set_catcode_letter:N \^ + \char_set_catcode_letter:N \# + \char_set_catcode_letter:N \% + } + { + \imagename + } + } + + +\NewDocumentCommand \tcbincludegraphics { +O{} m } + { + \group_begin: + \tcb@layer@pushup + \tcb@apply@box@options{enhanced,clip~upper=true,valign=center,center~upper,#1} + \__tcobox_include_graphics_preparefile:n {#2} + \cs_set:Npn \imagepage {1} + \__tcobox_include_graphics: + \group_end: + } + + +\NewDocumentCommand \tcbincludepdf { +O{} m } + { + \__tcobox_include_graphics_preparefile:n {#2} + \tcb@set@pdfpages\pdfpages{\imagepath} + \foreach~\imagepage~in~\kvtcb@graphics@pages + { + \group_begin: + \tcb@layer@pushup + \tcb@apply@box@options{enhanced,clip~upper=true,valign=center,center~upper,#1} + \tl_put_right:Nn \kvtcb@graphics@options {,page=\imagepage} + \__tcobox_include_graphics: + \group_end: + } } +\ExplSyntaxOff + + \tcbset{% graphics options/.store in=\kvtcb@graphics@options, graphics pages/.store in=\kvtcb@graphics@pages, |