% !TeX root = tcolorbox.tex % include file of tcolorbox.tex (manual of the LaTeX package tcolorbox) \clearpage \section{Library \mylib{raster}}\label{sec:raster}% \tcbset{external/prefix=external/raster_}% The library is loaded by a package option or inside the preamble by: \begin{dispListing} \tcbuselibrary{raster} \end{dispListing} \subsection{Concept of Rasters}\label{subsec:raster_overview} A \emph{raster} is used to align several colored boxes in a regular way. It can be seen as a far related counterpart to the |matrix| construct of \tikzname, but it differs in many aspects. In principle, |tcolorbox|es are arranged in rows and columns when put inside a \refEnv{tcbraster} environment. The boxes are fluently added to the raster like adding text to a paragraph. Especially, line/row breaks are done automatically and one cannot end a line/row ahead of schedule. Further, a \emph{raster} is not restricted to a single page but may break into an arbitrary series of pages. \bigskip \begin{tcolorbox}[enhanced,size=tight,boxrule=0pt,frame hidden, top=5mm,bottom=5mm,colback=yellow!20!white, borderline={0.4pt}{0pt}{dashed,yellow!50!black}, finish={ \draw[thick,<->] ([yshift=-1.3cm]frame.north west)-- node[below]{\refKey{/tcb/raster width}} ([yshift=-1.3cm]frame.north east); \draw[thick,<->] ([xshift=5mm,yshift=-5mm]frame.north east)-- node[left,pos=.75]{\refKey{/tcb/raster height}} ([xshift=5mm,yshift=5mm]frame.south east); }] \begin{tcbitemize}[enhanced,fontupper=\tiny, title={Box \#\thetcbrasternum}, colframe=red!50!black!30!white,colback=red!10!white!40!white, colupper=black!20!white, raster equal height=rows, raster left skip=5mm,raster right skip=5mm, raster before skip=5mm,raster after skip=5mm, raster row skip=3mm,raster column skip=3mm, ] \tcbitem[finish={% \draw[thick,<->] (frame.west)-- node[below right]{\refKey{/tcb/raster left skip}}+(-0.5,0); \draw[thick,<->] (frame.north)-- node[right]{\refKey{/tcb/raster before skip}} +(0,0.5); \draw[thick,<->] (frame.south)-- node[above]{\refKey{/tcb/raster row skip}} +(0,-0.3); }] \lipsum[1] \tcbitem[finish={ \draw[thick,<->] (frame.east)-- node[below left]{\refKey{/tcb/raster right skip}}+(0.5,0); \draw[thick,<->] ([yshift=5mm]frame.south west)-- node[above]{\refKey{/tcb/raster column skip}}+(-0.3,0); }] \lipsum[2] \tcbitem[finish={% \draw[thick,<->] (frame.south)-- node[right]{\refKey{/tcb/raster after skip}} +(0,-0.5); }] \lipsum[3] \tcbitem \lipsum[4] \end{tcbitemize} \end{tcolorbox} \clearpage \begin{tcboutputlisting} \begin{tcbraster}[raster columns=3,raster rows=3,raster height=\linewidth, enhanced,size=small,sharp corners,arc=8mm,colframe=red!50!black, colback=yellow!10!white,watermark overzoom=1.0,fit algorithm=hybrid* ] \begin{tcolorbox}[rounded corners=northwest,boxrule=0pt, watermark graphics=lichtspiel.jpg]\end{tcolorbox} \tcboxfit{\lipsum[1]} \begin{tcolorbox}[rounded corners=northeast,boxrule=0pt, watermark graphics=goldshade.png]\end{tcolorbox} \tcboxfit{\lipsum[2]} \begin{tcolorbox}[valign=center,halign=center]Nine Boxes.\end{tcolorbox} \tcboxfit{\lipsum[3]} \begin{tcolorbox}[rounded corners=southwest,boxrule=0pt, watermark graphics=goldshade.png]\end{tcolorbox} \tcboxfit{\lipsum[4]} \begin{tcolorbox}[rounded corners=southeast,boxrule=0pt, watermark graphics=lichtspiel.jpg]\end{tcolorbox} \end{tcbraster} \end{tcboutputlisting} \tcbinputlisting{base example,listing only,listing style=mydocumentation} \bigskip {\tcbuselistingtext} \clearpage \subsection{Macros of the Library}\label{subsec:raster_macros} \begin{docEnvironment}[doc new and updated={2014-11-10}{2017-02-01}]{tcbraster}{\oarg{options}} A raster arranges enclosed boxes in a regular way, mainly into rows and columns. The \meta{options} are used to control the raster parameters and to set the properties for the enclosed boxes. \begin{itemize} \item The \emph{raster} is only allowed to contain a series of \refEnv{tcolorbox} environments or derived constructs. With some small restrictions, boxes created with \refCom{tcboxfit} can also be added. Boxes created with \refCom{tcbox} are not reasonable here, but may be used to a certain degree. \item Do not add anything else between the boxes inside the raster with exception of white\-space. Especially, do not use |\\| or |\par| to end a row; row breaks are done automatically. \item The boxes inside a raster are numbered automatically. \docAuxCommand{thetcbrasternum} may be used inside a box to access this number. The \LaTeX\ counter \docCounter{tcbrastercolumn} holds the current column, the counter \docCounter{tcbrasterrow} holds the current row, and the counter \docCounter{tcbrasternum} holds the current box number. \end{itemize} \enlargethispage*{1cm} \begin{dispExample} \begin{tcbraster}[raster columns=3, raster equal height, size=small,colframe=red!50!black,colback=red!10!white,colbacktitle=red!50!white, title={Box \# \thetcbrasternum}] \begin{tcolorbox}First box\end{tcolorbox} \begin{tcolorbox}Second box\end{tcolorbox} \begin{tcolorbox}This is a box\\with a second line\end{tcolorbox} \begin{tcolorbox}Another box\end{tcolorbox} \begin{tcolorbox}A box again\end{tcolorbox} \end{tcbraster} \end{dispExample} \begin{dispExample} \begin{tcbraster}[raster columns=2, raster equal height=rows, size=small,colframe=red!50!black,colback=red!10!white,colbacktitle=red!50!white, title={Box \# \thetcbrasternum}] \begin{tcolorbox}First box\end{tcolorbox} \begin{tcolorbox}Second box\end{tcolorbox} \begin{tcolorbox}This is a box\\with a second line\end{tcolorbox} \begin{tcolorbox}Another box\end{tcolorbox} \begin{tcolorbox}A box again\end{tcolorbox} \end{tcbraster} \end{dispExample} \end{docEnvironment} \clearpage \begin{docEnvironment}[doc new=2014-11-10]{tcbitemize}{\oarg{options}} This is a special case of a \refEnv{tcbraster} with the given \meta{options}. \begin{itemize} \item Here, the enclosed boxes are created using \refCom{tcbitem}. \item There has to be at least one \refCom{tcbitem}. \item One cannot use anything else than \refCom{tcbitem} to add something to the \emph{raster}. \end{itemize} This leads to a very compact syntax. \begin{dispExample} \begin{tcbitemize}[raster columns=2, raster equal height=rows, size=small,colframe=red!50!black,colback=red!10!white,colbacktitle=red!50!white, title={Box \# \thetcbrasternum}] \tcbitem First box \tcbitem Second box \tcbitem This is a box\\with a second line \tcbitem[colback=yellow,colbacktitle=yellow!50!black] Another box \tcbitem A box again \end{tcbitemize} \end{dispExample} \begin{marker} \refEnv{tcbitemize} has more restrictions than \refEnv{tcbraster}. Especially, the \refKey{/tcb/capture} mode has to be \docValue{minipage}. For example, \refKey{/tcb/fit} cannot be used safely. If \refKey{/tcb/fit} should be used, turn over to \refEnv{tcbraster}. \end{marker} \end{docEnvironment} \begin{docCommand}[doc new=2014-11-10]{tcbitem}{\oarg{options}} Used inside \refEnv{tcbitemize} to create a new \refEnv{tcolorbox} with the given \meta{options}. \end{docCommand} \clearpage \begin{docEnvironment}[doc new=2016-02-19]{tcboxedraster}{\oarg{raster options}\marg{box options}} This is a convenience environment which combines a \refEnv{tcolorbox} with an embedded \refEnv{tcbraster}. The \meta{box options} are given to the outer \refEnv{tcolorbox}, while the \meta{raster options} are given to the embedded \refEnv{tcbraster}. This environment is especially useful for rasters inside rasters. \begin{dispExample} \begin{tcboxedraster}[raster columns=3, raster equal height, size=small,colframe=red!50!black,colback=red!10!white,colbacktitle=red!50!white, title={Box \# \thetcbrasternum}] {colback=yellow!10,fonttitle=\bfseries,title=Boxed Raster} \begin{tcolorbox}First box\end{tcolorbox} \begin{tcolorbox}Second box\end{tcolorbox} \begin{tcolorbox}This is a box\\with a second line\end{tcolorbox} \begin{tcolorbox}Another box\end{tcolorbox} \begin{tcolorbox}A box again\end{tcolorbox} \end{tcboxedraster} \end{dispExample} \begin{dispExample} % \tcbuselibrary{skins} \begin{tcbraster}[raster columns=2, raster equal height, raster every box/.style={size=small,colframe=red!50!black,colback=red!10!white, valign=center,halign=center}] \begin{tcolorbox}One\end{tcolorbox} \begin{tcolorbox}Two\end{tcolorbox} \begin{tcboxedraster}{blankest} \begin{tcolorbox}Three\end{tcolorbox} \begin{tcolorbox}Four\end{tcolorbox} \begin{tcolorbox}Five\end{tcolorbox} \begin{tcolorbox}Six\end{tcolorbox} \end{tcboxedraster} \begin{tcolorbox}Seven\end{tcolorbox} \end{tcbraster} \end{dispExample} \end{docEnvironment} \clearpage \begin{docEnvironment}[doc new=2016-04-27]{tcboxeditemize}{\oarg{raster options}\marg{box options}} This is a convenience environment which combines a \refEnv{tcolorbox} with an embedded \refEnv{tcbitemize}. The \meta{box options} are given to the outer \refEnv{tcolorbox}, while the \meta{raster options} are given to the embedded \refEnv{tcbitemize}. This environment is especially useful for rasters inside rasters. \begin{dispExample} \begin{tcboxeditemize}[raster columns=3, raster equal height, size=small,colframe=red!50!black,colback=red!10!white,colbacktitle=red!50!white, title={Box \# \thetcbrasternum}] {colback=yellow!10,fonttitle=\bfseries,title=Boxed Itemize} \tcbitem First box \tcbitem Second box \tcbitem This is a box\\with a second line \tcbitem Another box \tcbitem A box again \end{tcboxeditemize} \end{dispExample} \end{docEnvironment} \clearpage \subsection{Option Keys of the Library}\label{subsec:raster_options} \begin{docTcbKey}[][doc new=2014-11-10]{raster columns}{=\meta{number}}{no default, initially |2|} Sets the \meta{number} of columns for a \emph{raster}. \begin{dispExample} \begin{tcbitemize}[raster columns=3, size=small,colframe=red!50!black,colback=red!10!white] \tcbitem One \tcbitem Two \tcbitem Three \tcbitem Four \end{tcbitemize} \begin{tcbitemize}[raster columns=4, size=small,colframe=blue!50!black,colback=blue!10!white] \tcbitem One \tcbitem Two \tcbitem Three \tcbitem Four \end{tcbitemize} \end{dispExample} \end{docTcbKey} \begin{docTcbKey}[][doc new=2014-11-10]{raster rows}{=\meta{number}}{no default, initially |2|} Sets the \meta{number} of rows for a \emph{raster}. Note that this is only relevant in connection with setting \refKey{/tcb/raster height} to a value greater than |0pt|. Then, it defines the number of rows \emph{per} given height. \end{docTcbKey} \begin{docTcbKey}[][doc new=2014-11-10]{raster width}{=\meta{length}}{no default, initially \cs{linewidth}} Sets the total raster width to the given \meta{length}. \refKey{/tcb/raster left skip} and \refKey{/tcb/raster right skip} are part of the total width. Note that both skip values are not changed by this option. \begin{dispExample} \begin{tcbitemize}[raster width=\linewidth/2, size=small,colframe=red!50!black,colback=red!10!white] \tcbitem One \tcbitem Two \tcbitem Three \tcbitem Four \end{tcbitemize} \end{dispExample} \end{docTcbKey} \clearpage \begin{docTcbKey}[][doc new=2018-11-30]{raster width flush left}{=\meta{length}}{style, no default} Sets the total \refKey{/tcb/raster width} to \cs{linewidth} and adapts \refKey{/tcb/raster left skip} and \refKey{/tcb/raster right skip} to place the raster on the left hand side with a visual width of the given \meta{length}. \begin{dispExample} \begin{tcbitemize}[raster width flush left=\linewidth/2, size=small,colframe=red!50!black,colback=red!10!white] \tcbitem One \tcbitem Two \tcbitem Three \tcbitem Four \end{tcbitemize} \end{dispExample} Note that the results of \refKey{/tcb/raster width} and \refKey{/tcb/raster width flush left} look identical, but differ on technical side since the later always fills the available \cs{linewidth}. \end{docTcbKey} \begin{docTcbKey}[][doc new=2018-11-30]{raster width center}{=\meta{length}}{style, no default} Sets the total \refKey{/tcb/raster width} to \cs{linewidth} and adapts \refKey{/tcb/raster left skip} and \refKey{/tcb/raster right skip} to center the raster with a visual width of the given \meta{length}. \begin{dispExample} \begin{tcbitemize}[raster width center=\linewidth/2, size=small,colframe=red!50!black,colback=red!10!white] \tcbitem One \tcbitem Two \tcbitem Three \tcbitem Four \end{tcbitemize} \end{dispExample} \end{docTcbKey} \begin{docTcbKey}[][doc new=2018-11-30]{raster width flush right}{=\meta{length}}{style, no default} Sets the total \refKey{/tcb/raster width} to \cs{linewidth} and adapts \refKey{/tcb/raster left skip} and \refKey{/tcb/raster right skip} to place the raster on the right hand side with a visual width of the given \meta{length}. \begin{dispExample} \begin{tcbitemize}[raster width flush right=\linewidth/2, size=small,colframe=red!50!black,colback=red!10!white] \tcbitem One \tcbitem Two \tcbitem Three \tcbitem Four \end{tcbitemize} \end{dispExample} \end{docTcbKey} \clearpage \begin{docTcbKey}[][doc new=2014-11-10]{raster height}{=\meta{length}}{no default, initially |0pt|} Sets the raster height \emph{per} \refKey{/tcb/raster rows} to the given \meta{length}. This forces an appropriate height for the enclosed boxes. \refKey{/tcb/raster before skip} and \refKey{/tcb/raster after skip} are not part of this calculation. If the \meta{length} is set to |0pt|, this feature is deactivated. \begin{dispExample} \begin{tcbitemize}[raster height=4cm, raster rows=2, size=small,colframe=red!50!black,colback=red!10!white] \tcbitem One \tcbitem Two \tcbitem[enhanced, finish={\draw[blue,very thick,<->] (frame.south) -- node[right,pos=.75]{4cm} +(0,4); }] Three \tcbitem Four \tcbitem Five \end{tcbitemize} \end{dispExample} \end{docTcbKey} \begin{docTcbKey}[][doc new and updated={2014-11-10}{2014-12-16}]{raster before skip}{=\meta{glue}}{no default, initially |2mm|} Space of the given \meta{glue} is inserted vertically before the \emph{raster}. This space is discardable. \end{docTcbKey} \begin{docTcbKey}[][doc new and updated={2014-11-10}{2014-12-16}]{raster after skip}{=\meta{glue}}{no default, initially |2mm|} Space of the given \meta{glue} is inserted vertically after the \emph{raster}. This space is discardable. \end{docTcbKey} \begin{docTcbKey}[][doc new=2015-01-08]{raster equal skip}{=\meta{length}}{style, no default} Shortcut to set \refKey{/tcb/raster before skip}, \refKey{/tcb/raster after skip}, \refKey{/tcb/raster column skip}, and \refKey{/tcb/raster row skip} to the same \meta{length} value. \begin{dispExample} \begin{tcbitemize}[raster equal skip=4mm, size=small,colframe=red!50!black,colback=red!10!white] \tcbitem One \tcbitem Two \tcbitem Three \tcbitem Four \end{tcbitemize} \end{dispExample} \end{docTcbKey} \clearpage \begin{docTcbKey}[][doc new=2014-11-10]{raster left skip}{=\meta{length}}{no default, initially |0pt|} Space of the given \meta{length} is inserted horizontally left of the \emph{raster}. \begin{dispExample} \begin{tcbitemize}[raster left skip=2cm, size=small,colframe=red!50!black,colback=red!10!white] \tcbitem One \tcbitem Two \tcbitem Three \tcbitem Four \end{tcbitemize} \end{dispExample} \end{docTcbKey} \begin{docTcbKey}[][doc new=2014-11-10]{raster right skip}{=\meta{length}}{no default, initially |0pt|} Space of the given \meta{length} is inserted horizontally right of the \emph{raster}. \begin{dispExample} \begin{tcbitemize}[raster right skip=2cm, size=small,colframe=red!50!black,colback=red!10!white] \tcbitem One \tcbitem Two \tcbitem Three \tcbitem Four \end{tcbitemize} \end{dispExample} \end{docTcbKey} \enlargethispage*{1cm} \begin{docTcbKey}[][doc new=2014-11-10]{raster column skip}{=\meta{length}}{no default, initially |2mm|} Space of the given \meta{length} is inserted horizontally between the columns. \begin{dispExample} \begin{tcbitemize}[raster column skip=2cm, size=small,colframe=red!50!black,colback=red!10!white] \tcbitem One \tcbitem Two \tcbitem Three \tcbitem Four \end{tcbitemize} \end{dispExample} \end{docTcbKey} \begin{docTcbKey}[][doc new=2014-11-10]{raster row skip}{=\meta{length}}{no default, initially |2mm|} Space of the given \meta{length} is inserted vertically between the rows. \begin{dispExample} \begin{tcbitemize}[raster row skip=0pt, size=small,colframe=red!50!black,colback=red!10!white] \tcbitem One \tcbitem Two \tcbitem Three \tcbitem Four \end{tcbitemize} \end{dispExample} \end{docTcbKey} \clearpage \begin{docTcbKey}[][doc new=2014-11-10]{raster halign}{=\meta{alignment}}{no default, initially \docValue{left}} Defines the horizontal alignment for the boxes of the rows of a \emph{raster}, if these rows are not completely filled (mainly: the last one). Feasible values for \meta{alignment} are: \begin{itemize} \item\docValue{left}: align to the left side, \item\docValue{center}: align to the center, \item\docValue{right}: align to the right side. \end{itemize} \begin{dispExample} \begin{tcbitemize}[raster halign=center, size=small,colframe=red!50!black,colback=red!10!white] \tcbitem One \tcbitem Two \tcbitem Three \end{tcbitemize} \end{dispExample} \end{docTcbKey} \begin{docTcbKey}[][doc new=2014-11-10]{raster valign}{=\meta{alignment}}{no default, initially \docValue{center}} Defines the vertical alignment for the boxes of a row, if the boxes do not have equal height. This sets the \refKey{/tcb/box align} option. Feasible values for \meta{alignment} are: \begin{itemize} \item\docValue{top}: align to the top side, \item\docValue{center}: align to the center, \item\docValue{bottom}: align to the bottom side. \end{itemize} \begin{dispExample} \begin{tcbitemize}[raster valign=top, raster columns=3, size=small,colframe=red!50!black,colback=red!10!white] \tcbitem \Huge One \tcbitem \Large Two \tcbitem Three \end{tcbitemize} \begin{tcbitemize}[raster valign=center, raster columns=3, size=small,colframe=blue!50!black,colback=blue!10!white] \tcbitem \Huge One \tcbitem \Large Two \tcbitem Three \end{tcbitemize} \begin{tcbitemize}[raster valign=bottom, raster columns=3, size=small,colframe=green!50!black,colback=green!10!white] \tcbitem \Huge One \tcbitem \Large Two \tcbitem Three \end{tcbitemize} \end{dispExample} \end{docTcbKey} \clearpage \begin{docTcbKey}[][doc new and updated={2014-11-10}{2017-02-28}]{raster equal height}{=\meta{type}}{default \docValue{all}, initially \docValue{none}} Puts the enclosed boxes into a common \refKey{/tcb/equal height group}. The \meta{id} of the equal height group is chosen automatically, but it may be set manually by \refKey{/tcb/raster equal height group}. Also see \refKey{/tcb/minimum for current equal height group}. Feasible values for \meta{type} are: \begin{itemize} \item\docValue{none}: no equal height setting, \item\docValue{rows}: all boxes in a row are set to equal height, \item\docValue{all}: all boxes in the raster are set to equal height. \end{itemize} Note that you have to compile twice to see changes. \begin{dispExample} \begin{tcbitemize}[raster equal height=rows, size=small,colframe=red!50!black,colback=red!10!white] \tcbitem One \tcbitem \Huge Two \tcbitem Three \tcbitem Four \end{tcbitemize} \end{dispExample} \begin{dispExample} \begin{tcbitemize}[raster equal height, size=small,colframe=red!50!black,colback=red!10!white] \tcbitem One \tcbitem \Huge Two \tcbitem Three \tcbitem Four \end{tcbitemize} \end{dispExample} \end{docTcbKey} \begin{docTcbKey}[][doc new=2014-11-10]{raster equal height group}{=\meta{id}}{no default} Overwrites the automatically chosen id with the given \meta{id}. If this is used to share a common height between the \emph{raster} and another raster or box, the \refKey{/tcb/raster equal height} option should be set to \docValue{all}. \begin{dispExample} \tcbset{size=small,colframe=red!50!black,colback=red!10!white} \begin{tcolorbox}[equal height group=raster-manual-id] A single box \end{tcolorbox} \begin{tcbitemize}[raster equal height,raster equal height group=raster-manual-id] \tcbitem One \tcbitem \Huge Two \end{tcbitemize} \end{dispExample} \end{docTcbKey} \clearpage \begin{docTcbKey}[][doc new=2014-11-10]{raster force size}{\colOpt{=true\textbar false}}{default |true|, initially |true|} Enforces the raster size computations onto the enclosed boxes. If set to \docValue{false}, individual settings can be used (for the better or worse). \begin{dispExample} \begin{tcbitemize}[raster force size=false, raster halign=center, size=small,colframe=red!50!black,colback=red!10!white] \tcbitem One \tcbitem Two \tcbitem[add to width=-3cm] Three \tcbitem[add to width=-3cm] Four \tcbitem[add to width=-3cm] Five \tcbitem[add to width=3cm] Six \end{tcbitemize} \end{dispExample} \end{docTcbKey} \begin{docTcbKey}[][doc new=2014-11-10]{raster reset}{}{no value} Sets all raster settings back to their default values. Note that \refKey{/tcb/reset} does not execute this option. Style settings like \refKey{/tcb/raster odd column} etc. are not touched by \refKey{/tcb/raster reset}. \end{docTcbKey} \subsection{Adding Styles for Specific Boxes}\label{subsec:raster_styles} The following styles can be defined to address certain boxes inside a \emph{raster}. Note that such style definitions are not removed by \refKey{/tcb/reset} or \refKey{/tcb/raster reset}. The style definitions are used in the order given below. \begin{docTcbKey}[][doc new=2014-11-24]{raster every box}{}{style} This style is used for every box. \end{docTcbKey} \begin{docTcbKey}[][doc new=2014-11-10]{raster odd column}{}{style} This style is used for every box in an odd column. \begin{dispExample} \begin{tcbitemize}[size=small,colframe=red!50!black,colback=red!10!white, raster odd column/.style={colframe=blue!50!black,colback=blue!10!white}] \tcbitem One \tcbitem Two \tcbitem Three \tcbitem Four \end{tcbitemize} \end{dispExample} \end{docTcbKey} \begin{docTcbKey}[][doc new=2014-11-10]{raster even column}{}{style} This style is used for every box in an even column. \end{docTcbKey} \begin{docTcbKey}[][doc new=2014-11-10]{raster column n}{}{style} This style is used for every box in the |n|-th column. |n| has to be replaced by a number. \end{docTcbKey} \begin{docTcbKey}[][doc new=2014-11-10]{raster odd row}{}{style} This style is used for every box in an odd row. \end{docTcbKey} \begin{docTcbKey}[][doc new=2014-11-10]{raster even row}{}{style} This style is used for every box in an even row. \end{docTcbKey} \begin{docTcbKey}[][doc new=2014-11-10]{raster row m}{}{style} This style is used for every box in the |m|-th row. |m| has to be replaced by a number. \begin{dispExample} \begin{tcbitemize}[size=small,colframe=red!50!black,colback=red!10!white, raster row 2/.style={colframe=blue!50!black,colback=blue!10!white}] \tcbitem One \tcbitem Two \tcbitem Three \tcbitem Four \end{tcbitemize} \end{dispExample} \end{docTcbKey} \begin{docTcbKey}[][doc new=2014-11-10]{raster odd number}{}{style} This style is used for every box with an odd number. \end{docTcbKey} \begin{docTcbKey}[][doc new=2014-11-10]{raster even number}{}{style} This style is used for every box with an even number. \begin{dispExample} \begin{tcbitemize}[size=small,colframe=red!50!black,colback=red!10!white, raster columns=3, raster even number/.style={colframe=blue!50!black,colback=blue!10!white}] \tcbitem One \tcbitem Two \tcbitem Three \tcbitem Four \tcbitem Five \tcbitem Six \end{tcbitemize} \end{dispExample} \end{docTcbKey} \begin{docTcbKey}[][doc new=2014-11-10]{raster row m column n}{}{style} This style is used for the box in the |m|-th row and |n|-th column. |m| and |n| have to be replaced by numbers. \end{docTcbKey} \begin{docTcbKey}[][doc new=2014-11-10]{raster number n}{}{style} This style is used for the box with number |n|. |n| has to be replaced by a number. \begin{dispExample} \begin{tcbitemize}[size=small,colframe=red!50!black,colback=red!10!white, raster number 4/.style={colframe=blue!50!black,colback=blue!10!white}] \tcbitem One \tcbitem Two \tcbitem Three \tcbitem Four \end{tcbitemize} \end{dispExample} \end{docTcbKey} \clearpage \subsection{Combining Columns or Rows}\label{subsec:raster_multicolrow} \begin{docTcbKey}[][doc new=2016-02-19]{raster multicolumn}{=\meta{number}}{no default, initially unset} This option has to be set inside the option list of a \refEnv{tcolorbox} inside a \refEnv{tcbraster} or inside \refCom{tcbitem} inside \refEnv{tcbitemize}. It merges the given \meta{number} of boxes into one single box on the same line. The resulting box gets the \docAuxCommand{thetcbrasternum} of the first box. If there are not enough boxes available on the current line, this option is ignored and a warning is given. \begin{dispExample} \begin{tcbitemize}[raster equal height=rows,raster columns=3, title=\thetcbrasternum,colframe=red!50!black,colback=red!10!white] \tcbitem[colframe=blue!50!black,colback=blue!10!white,raster multicolumn=1] multicolumn=1 \tcbitem \tcbitem \tcbitem[colframe=blue!50!black,colback=blue!10!white,raster multicolumn=2] multicolumn=2 \tcbitem \tcbitem[colframe=blue!50!black,colback=blue!10!white,raster multicolumn=3] multicolumn=3 \tcbitem \tcbitem[colframe=blue!50!black,colback=blue!10!white,raster multicolumn=2] multicolumn=2 \end{tcbitemize} \end{dispExample} \end{docTcbKey} \clearpage \begin{docTcbKey}[][doc new=2016-02-19]{raster multirow}{=\meta{number}}{no default, initially unset} This option has to be set inside the option list of a \refEnv{tcolorbox} inside a \refEnv{tcbraster} or inside \refCom{tcbitem} inside \refEnv{tcbitemize}. This option not really merges boxes, but simply sizes the current box to fit the space of \meta{number} rows. \begin{marker} \refKey{/tcb/raster multirow} needs \refKey{/tcb/raster height} to be set. How to achieve a similar result for boxes without fixed \refKey{/tcb/raster height} is shown afterwards. \end{marker} \begin{dispExample} \begin{tcbitemize}[raster rows=3,raster columns=3,raster height=6cm, raster every box/.style={colframe=red!50!black,colback=red!10!white}] \tcbitem \tcbitem \tcbitem \tcbitem[colframe=blue!50!black,colback=blue!10!white,raster multirow=2] multirow=2 \tcbitem[raster multicolumn=2,raster multirow=2,blankest] \begin{tcbitemize}[raster rows=2,raster columns=2,raster height=\tcbtextheight] \tcbitem \tcbitem \tcbitem \tcbitem \end{tcbitemize} \end{tcbitemize} \end{dispExample} \clearpage For rasters without fixed \refKey{/tcb/raster height}, \refKey{/tcb/raster multirow} cannot be used. Note that \refCom{tcbtextheight} also cannot be used like in the previous example. But, with combination of \refKey{/tcb/raster equal height} and \refKey{/tcb/space to}, a similar effect can be created: \begin{dispExample} \begin{tcbitemize}[raster columns=3,raster equal height=rows, raster every box/.style={colframe=red!50!black,colback=red!10!white}] \tcbitem \tcbitem \tcbitem \tcbitem[colframe=blue!50!black,colback=blue!10!white] \lipsum[2] \tcbitem[raster multicolumn=2,blankest,space to=\myspace] \begin{tcbitemize}[raster columns=2] \tcbitem This is a box of the inner raster. \tcbitem \tcbitem[height=\myspace] \tcbitem[height=\myspace] \end{tcbitemize} \end{tcbitemize} \end{dispExample} \end{docTcbKey} \clearpage \subsection{Rasters inside Rasters}\label{subsec:raster_insideraster} A \emph{raster} inside a \emph{raster} cannot be used directly, because a \emph{raster} can only contain a \emph{tcolorbox} or something derived from a \emph{tcolorbox}. So, a \emph{raster} can be put inside a \emph{tcolorbox} inside a \emph{raster}. Some examples for such constructions can be found at \refEnv{tcboxedraster}, \refKey{/tcb/raster multicolumn}, \refKey{/tcb/raster multirow}. \subsubsection{Raster Setup} The intermediating \refEnv{tcolorbox} can be made invisible by using \refKey{/tcb/blankest}. \begin{dispExample} \begin{tcbraster}[raster equal height=rows, raster every box/.style={colframe=red!50!black,colback=red!10!white}] \begin{tcolorbox}[blankest] \begin{tcbraster}[raster columns=1] \begin{tcolorbox}One\end{tcolorbox} \begin{tcolorbox}Two\end{tcolorbox} \end{tcbraster} \end{tcolorbox} \begin{tcolorbox}raster+tcolorbox+raster\end{tcolorbox} \end{tcbraster} \end{dispExample} \enlargethispage*{1cm} \begin{dispExample} \begin{tcbraster}[raster equal height=rows, raster every box/.style={colframe=red!50!black,colback=red!10!white}] \begin{tcboxedraster}[raster columns=1]{blankest} \begin{tcolorbox}One\end{tcolorbox} \begin{tcolorbox}Two\end{tcolorbox} \end{tcboxedraster} \begin{tcolorbox}raster+tcboxedraster\end{tcolorbox} \end{tcbraster} \end{dispExample} \begin{dispExample} \begin{tcbitemize}[raster equal height=rows, raster every box/.style={colframe=red!50!black,colback=red!10!white}] \tcbitem[blankest] \begin{tcbitemize}[raster columns=1] \tcbitem One \tcbitem Two \end{tcbitemize} \tcbitem tcbitemize+tcbitem+tcbitemize \end{tcbitemize} \end{dispExample} \subsubsection{Placing Spaces} If the heights of boxes inside staggered rasters should be matched, the space has to be distributed accordingly. \begin{itemize} \item For fixed height boxes/rasters using \refKey{/tcb/raster height}, the height of boxes is available by \refCom{tcbtextheight}. This can be used to size deeper layered boxes/rasters. \item For boxes/rasters laid out using \refKey{/tcb/raster equal height}, space can be distributed by \refKey{/tcb/space to}. It can take several compilations until all spaces are distributed correctly. \end{itemize} \begin{dispExample} \begin{tcbitemize}[raster rows=2,raster height=6cm, raster every box/.style={colframe=red!50!black,colback=red!10!white}] \tcbitem[blankest] \begin{tcbitemize}[raster columns=1,raster rows=2,raster height=\tcbtextheight] \tcbitem One \tcbitem Two \end{tcbitemize} \tcbitem This is a fixed height box. \tcbitem Three \tcbitem Four \end{tcbitemize} \end{dispExample} \begin{dispExample} \begin{tcbitemize}[raster columns=4,raster rows=4,raster height=0.8\linewidth, raster every box/.style={size=small,beamer, colframe=blue!75!yellow,colback=red!75!yellow!20, center title,title=Box}] \tcbitem One \tcbitem Two \tcbitem Three \tcbitem Four \tcbitem[raster multirow=2,blankest] \begin{tcbitemize}[raster columns=1,raster rows=2,raster height=\tcbtextheight] \tcbitem Twelve \tcbitem Eleven \end{tcbitemize} \tcbitem[raster multirow=2,raster multicolumn=2, colframe=red!75!yellow,colback=blue!75!yellow!20] This is an example with fixed height boxes. \tcbitem[raster multirow=2,blankest] \begin{tcbitemize}[raster columns=1,raster rows=2,raster height=\tcbtextheight] \tcbitem Five \tcbitem Six \end{tcbitemize} \tcbitem Ten \tcbitem Nine \tcbitem Eight \tcbitem Seven \end{tcbitemize} \end{dispExample} \begin{dispExample} \begin{tcbitemize}[raster equal height=rows, raster every box/.style={colframe=red!50!black,colback=red!10!white}] \tcbitem[blankest,space to=\myspace] \begin{tcbitemize}[raster columns=1] \tcbitem One \tcbitem[add to natural height=\myspace] This box will adapt its height. \end{tcbitemize} \tcbitem This is a flexible height box. \tcbitem \lipsum[4] \tcbitem[blankest,space to=\myspace] \begin{tcbitemize}[raster columns=1] \tcbitem One \tcbitem[add to natural height=\myspace] This box will adapt its height. \end{tcbitemize} \end{tcbitemize} \end{dispExample} \begin{dispExample} \begin{tcbitemize}[raster equal height=rows, raster every box/.style={colframe=red!50!black,colback=red!10!white}] \tcbitem[blankest,space to=\myspace] \begin{tcbitemize}[raster columns=1] \tcbitem One \tcbitem[add to natural height=\myspace] This box will adapt its height. \tcbitem \lipsum[4] \end{tcbitemize} \tcbitem[blankest,space to=\myspace] \begin{tcbitemize}[raster columns=1] \tcbitem[blankest]\includegraphics[width=\linewidth]{goldshade.png} \tcbitem[add to natural height=\myspace] This box will adapt its height. \end{tcbitemize} \end{tcbitemize} \end{dispExample}