%% The LaTeX package tcolorbox - version 6.4.1 (2024/10/22) %% tcbposter.code.tex: Code for posters %% %% ------------------------------------------------------------------------------------------- %% Copyright (c) 2006-2024 by Prof. Dr. Dr. Thomas F. Sturm %% ------------------------------------------------------------------------------------------- %% %% 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{6.4.1} \tcbuselibrary{breakable,magazine,skins,fitting} \newif\iftcb@poster@showframe \newif\iftcb@posterbox@sequence \newboxarray{tcb@poster} \def\tcb@poster@compute@poster@boxheight#1#2{% \pgfpointanchor{\tcb@poster@prefix#1}{south}\unskip% \@tempdima\pgf@y% \pgfpointanchor{\tcb@poster@prefix#2}{north}\unskip% \advance \@tempdima by -\pgf@y\relax% \advance \@tempdima by -\tcbposterrowspacing\relax% \advance \@tempdima by -\tcbposterrowspacing\relax% \edef\tcb@poster@boxheight{\the\@tempdima}% } \def\poster@scan@sequence#1 between #2 and #3 then#4\@nil{% \tcb@poster@compute@poster@boxheight{#2}{#3}% \ifundef{\tcb@poster@firstboxheight}{\edef\tcb@poster@firstboxheight{\tcb@poster@boxheight}}{}% \eappto\tcb@poster@breakat{\tcb@poster@boxheight/}% \@tempcnta\numexpr#1\relax% \listeadd\tcb@poster@list{{\tcb@poster@prefix col\@arabic\@tempcnta.west|-\tcb@poster@prefix#2.south}{\tcb@poster@boxheight}}% \ifblank{#4}{}{\poster@scan@sequence#4\@nil}% } \newenvironment{tcb@poster@env}{% \let\posterbox\tcb@poster@box% \let\posterboxenv\tcb@poster@boxenv% \let\endposterboxenv\endtcb@poster@boxenv% \ifundef\tcb@poster@height{% \ifnum\c@tcblayer=0\relax% \def\tcb@poster@height{\textheight}% \else% \ifdim\dimexpr\tcbtextheight>0pt\relax% \def\tcb@poster@height{\tcbtextheight}% \else% \def\tcb@poster@height{0.75\textheight}% \fi% \fi}{}% \tcbset{poster/.cd,poster@poster}% \tcbdimto\tcbposterwidth{\tcb@poster@width}% \tcbdimto\tcbposterheight{\tcb@poster@height}% \tcbdimto\tcbpostercolspacing{\tcb@poster@colspacing}% \tcbdimto\tcbposterrowspacing{\tcb@poster@rowspacing}% \edef\tcbpostercolumns{\the\numexpr\tcb@poster@columns\relax}% \edef\tcbposterrows{\the\numexpr\tcb@poster@rows\relax}% \tcbdimto\tcbpostercolwidth{(\tcbposterwidth+\tcbpostercolspacing)/\tcbpostercolumns-\tcbpostercolspacing}% \tcbdimto\tcbposterrowheight{(\tcbposterheight+\tcbposterrowspacing)/\tcbposterrows-\tcbposterrowspacing}% \begin{tikzpicture}% \path[use as bounding box] (0,0) rectangle (\tcbposterwidth,\tcbposterheight); \node[name=\tcb@poster@prefix poster,at={(0,0)},line width=0mm,inner sep=0mm,outer sep=0mm,draw=none,fill=none,rectangle, above right,minimum width=\tcbposterwidth,minimum height=\tcbposterheight]{}; \coordinate (\tcb@poster@prefix top) at (0,\tcbposterheight+\tcbposterrowspacing); \coordinate (\tcb@poster@prefix bottom) at (0,-\tcbposterrowspacing); \coordinate (\tcb@poster@prefix middle) at (0,\the\dimexpr0.5\dimexpr\tcbposterheight\relax); \begin{scope}[every node/.style={inner sep=0pt,outer sep=0,above right,minimum height=\tcbposterheight,minimum width=\tcbpostercolwidth}]% \node (\tcb@poster@prefix col1) at (0,0) {}; \@tempcnta 1% \@tempcntb\numexpr\tcbpostercolumns\relax% \@tempdima\dimexpr\tcbpostercolwidth+\tcbpostercolspacing\relax% \@whilenum \@tempcnta<\@tempcntb \do{% \edef\tcb@temp{\tcb@poster@prefix col\@arabic\@tempcnta}% \advance\@tempcnta 1\relax% \node[xshift=\tcbpostercolspacing] (\tcb@poster@prefix col\@arabic\@tempcnta) at (\tcb@temp.south east) {}; }% \end{scope}% \begin{scope}[every node/.style={inner sep=0pt,outer sep=0,below right,minimum height=\tcbposterrowheight,minimum width=\tcbposterwidth}]% \node (\tcb@poster@prefix row1) at (0,\tcbposterheight) {}; \@tempcnta 1% \@tempcntb\numexpr\tcbposterrows\relax% \@tempdima\dimexpr\tcbposterrowheight+\tcbposterrowspacing\relax% \@whilenum \@tempcnta<\@tempcntb \do{% \edef\tcb@temp{\tcb@poster@prefix row\@arabic\@tempcnta}% \advance\@tempcnta 1\relax% \node[yshift=-\tcbposterrowspacing] (\tcb@poster@prefix row\@arabic\@tempcnta) at (\tcb@temp.south west) {}; }% \end{scope}% \iftcb@poster@showframe% \@tempcnta 0% \@tempcntb\numexpr\tcbpostercolumns\relax% \@whilenum \@tempcnta<\@tempcntb \do{% \advance\@tempcnta 1\relax% \edef\tcb@temp{\tcb@poster@prefix col\@arabic\@tempcnta}% \draw[red] (\tcb@temp.north west) node[above right]{col\@arabic\@tempcnta} rectangle (\tcb@temp.south east); }% \@tempcnta 0% \@tempcntb\numexpr\tcbposterrows\relax% \@whilenum \@tempcnta<\@tempcntb \do{% \advance\@tempcnta 1\relax% \edef\tcb@temp{\tcb@poster@prefix row\@arabic\@tempcnta}% \draw[red] (\tcb@temp.north west) node[below left]{row\@arabic\@tempcnta} rectangle (\tcb@temp.south east); }% \gdef\tcb@poster@framelist{}% \fi% }{% \iftcb@poster@showframe% \renewcommand*{\do}[1]{% \node[red,fill=white,opacity=0.7,font=\Large] at (\tcb@poster@prefix##1) {##1};}% \dolistloop{\tcb@poster@framelist}% \gdef\tcb@poster@framelist{}% \fi% \end{tikzpicture}} % #1 tcolorbox options % #2 position % #3 Inhalt \newcommand{\tcb@poster@box}[3][]{% \bgroup% \tcbset{posterloc/.cd,#2}% \tcbdimto\tcb@poster@boxwidth{\tcb@poster@span\dimexpr\tcbpostercolwidth+\tcbpostercolspacing\relax-\tcbpostercolspacing}% \iftcb@posterbox@sequence% \begin{pgfinterruptpicture}% \begin{tcolorbox}[{tcb@poster@style,width=\tcb@poster@boxwidth,tcb@poster@boxheight, height fixed for=all,#1, enforce breakable,reset box array=tcb@poster,store to box array=tcb@poster}]#3\end{tcolorbox}% \end{pgfinterruptpicture}% \def\tcb@poster@boxcount{0}% \renewcommand*{\do}[1]{\edef\tcb@poster@boxcount{\the\numexpr\tcb@poster@boxcount+1\relax}% \node[inner sep=0pt,outer sep=0,tcb@poster@node,name=\tcb@poster@prefix\tcb@poster@boxname\tcb@poster@boxcount] at (\@firstoftwo##1) {% \ifboxarrayempty[tcb@poster]{\tcb@poster@boxcount}% {\begin{tcolorbox}[placeholder,width=\tcb@poster@boxwidth,height=\@secondoftwo##1]\end{tcolorbox}}% {\consumeboxarray[tcb@poster]{\tcb@poster@boxcount}}% };}% \dolistloop{\tcb@poster@list}% \iftcb@poster@showframe% \ifdefstring{\tcb@poster@boxname}{@}{}{% \def\tcb@poster@boxcount{0}% \renewcommand*{\do}[1]{\edef\tcb@poster@boxcount{\the\numexpr\tcb@poster@boxcount+1\relax}% \listxadd\tcb@poster@framelist{\tcb@poster@boxname\tcb@poster@boxcount}}% \dolistloop{\tcb@poster@list}% }% \fi% \else% \begin{pgfinterruptpicture}% \begin{tcolorbox}[{tcb@poster@style,width=\tcb@poster@boxwidth,tcb@poster@boxheight,#1, reset box array=tcb@poster,store to box array=tcb@poster}]#3\end{tcolorbox}% \end{pgfinterruptpicture}% \node[inner sep=0pt,outer sep=0,tcb@poster@node,name=\tcb@poster@prefix\tcb@poster@boxname] at (\tcb@poster@xpos|-\tcb@poster@ypos) {\consumeboxarray[tcb@poster]{1}};% \iftcb@poster@showframe% \ifdefstring{\tcb@poster@boxname}{@}{}{\listxadd\tcb@poster@framelist{\tcb@poster@boxname}}% \fi% \fi% \egroup% } \newenvironment{tcb@poster@boxenv}[2][]{% \newcommand{\tcb@poster@box@saved}{\posterbox[{#1}]{#2}{\tcbusetemp}}% \tcbwritetemp}% {\endtcbwritetemp\tcb@poster@box@saved} \newenvironment{tcbposter@coverage}{}{} \newenvironment{tcbposter}[1][]{% \tcbposterset{#1}% \begin{tcbposter@coverage}\begin{tcb@poster@env}% }{\end{tcb@poster@env}\end{tcbposter@coverage}} \newcommand{\tcbposterset}[1]{\tcbset{posterset/.cd,#1}} \tcbset{% poster/.cd, width/.store in=\tcb@poster@width, height/.store in=\tcb@poster@height, colspacing/.store in=\tcb@poster@colspacing, rowspacing/.store in=\tcb@poster@rowspacing, spacing/.style={colspacing={#1},rowspacing={#1}}, columns/.store in=\tcb@poster@columns, rows/.store in=\tcb@poster@rows, showframe/.is if=tcb@poster@showframe, prefix/.store in=\tcb@poster@prefix, % width=\linewidth, spacing=4mm, columns=3, rows=4, showframe=false, prefix=TCBPOSTER@, } \tcbset{% posterloc/.cd, name/.store in=\tcb@poster@boxname, column/.code={\edef\tcb@poster@xpos{\tcb@poster@prefix col#1.west}\edef\tcb@poster@orientation{right}},% column*/.code={\edef\tcb@poster@xpos{\tcb@poster@prefix col#1.east}\edef\tcb@poster@orientation{left}},% below/.code={\tcb@posterbox@sequencefalse% \tikzset{tcb@poster@node/.style={below \tcb@poster@orientation,yshift=\the\dimexpr\tcb@poster@yshift-\tcbposterrowspacing\relax,xshift=\tcb@poster@xshift}}% \tcbset{tcb@poster@boxheight/.style={natural height}}% \edef\tcb@poster@ypos{\tcb@poster@prefix#1.south}}, above/.code={\tcb@posterbox@sequencefalse% \tikzset{tcb@poster@node/.style={above \tcb@poster@orientation,yshift=\the\dimexpr\tcb@poster@yshift+\tcbposterrowspacing\relax,xshift=\tcb@poster@xshift}}% \tcbset{tcb@poster@boxheight/.style={natural height}}% \edef\tcb@poster@ypos{\tcb@poster@prefix#1.north}}, at/.code={\tcb@posterbox@sequencefalse% \tikzset{tcb@poster@node/.style={\tcb@poster@orientation,yshift=\tcb@poster@yshift,xshift=\tcb@poster@xshift}}% \tcbset{tcb@poster@boxheight/.style={natural height}}% \edef\tcb@poster@ypos{\tcb@poster@prefix#1}}, between/.code args={#1 and #2}{\tcb@posterbox@sequencefalse% \tikzset{tcb@poster@node/.style={below \tcb@poster@orientation,yshift=\the\dimexpr\tcb@poster@yshift-\tcbposterrowspacing\relax,xshift=\tcb@poster@xshift}}% \edef\tcb@poster@ypos{\tcb@poster@prefix#1.south}% \tcb@poster@compute@poster@boxheight{#1}{#2}% \tcbset{tcb@poster@boxheight/.style={height=\tcb@poster@boxheight}}% }, sequence/.code={\tcb@posterbox@sequencetrue% \tikzset{tcb@poster@node/.style={below \tcb@poster@orientation,yshift=\the\dimexpr\tcb@poster@yshift-\tcbposterrowspacing\relax,xshift=\tcb@poster@xshift}}% \undef\tcb@poster@firstboxheight% \def\tcb@poster@breakat{}% \def\tcb@poster@list{}% \poster@scan@sequence #1 then\@nil% \eappto\tcb@poster@breakat{\tcbposterheight}% \tcbset{tcb@poster@boxheight/.style={break at=\tcb@poster@breakat,height=\tcb@poster@firstboxheight}}% }, row/.code={\tcb@posterbox@sequencefalse% \tikzset{tcb@poster@node/.style={below \tcb@poster@orientation,yshift=\tcb@poster@yshift,xshift=\tcb@poster@xshift}}% \tcbset{posterloc/fixed height}% \edef\tcb@poster@ypos{\tcb@poster@prefix row#1.north}}, % span/.store in=\tcb@poster@span,% row@span/.store in=\tcb@poster@rowspan,% rowspan/.style={row@span=#1,fixed height},% xshift/.store in=\tcb@poster@xshift,% yshift/.store in=\tcb@poster@yshift,% fixed height/.code={\tcbset{tcb@poster@boxheight/.style={height=\tcb@poster@rowspan\dimexpr\tcbposterrowheight+\tcbposterrowspacing\relax-\tcbposterrowspacing}}},% % name=@, column=1, below=top, span=1, row@span=1, xshift=0pt, yshift=0pt, } \tcbposterset{% coverage/.code={\renewtcolorbox{tcbposter@coverage}{% enhanced,frame hidden,sharp corners,boxsep=0pt,boxrule=0pt, top=4mm,bottom=4mm,left=4mm,right=4mm, toptitle=2mm,bottomtitle=2mm,colback=white,#1}}, no coverage/.code={\renewenvironment{tcbposter@coverage}{}{}}, poster/.code={\tcbset{poster/.cd,poster@poster/.style={#1}}}, boxes/.code={\tcbset{tcb@poster@style/.style={nobeforeafter,enhanced standard,#1}}}, fontsize/.code={\tcbset{fit fontsize macros}\tcbsetforeverylayer{fit basedim=#1}\normalsize}, % poster,boxes } \tcbset{placeholder/.style={enhanced jigsaw, size=small,sharp corners,colframe=red!50!black, interior style={bottom color=red!15!white,top color=blue!15!white}, opacityback=0.5, underlay={\draw[red!50!black,line cap=round] (interior.south west)--(interior.north east); \draw[red!50!black,line cap=round] (interior.south east)--(interior.north west);}, }}%