% \LaTeX-Main\ % !TeX encoding=UTF-8 %% The LaTeX package tikzfill - version 1.1.0 (2026/03/26) %% tikzfill.tex: Manual %% %% ------------------------------------------------------------------------------------------- %% Copyright (c) 2022-2026 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.md %% % \RequirePackage[check-declarations,enable-debug]{expl3} \documentclass[a4paper,11pt]{article} \usepackage{tikzfill.doc} \hypersetup{ pdftitle={Manual for the tikzfill package}, pdfauthor={Thomas F. Sturm}, pdfsubject={TikZ libraries for filling with images and patterns}, } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \begin{document} \begin{tcboutputlisting} % \documentclass[a4paper]{article} % \usepackage{tikzfill} % \usepackage[skins,breakable]{tcolorbox} % \begin{document} \begin{tcolorbox}[spread,blankest,phantom={\thispagestyle{empty}}] \begin{tikzpicture} \path [ preaction={fill=black}, fill gea Weihmichl = { scale fixed = 1, xstep = 21mm, ystep equidistance, init-row< = \TFRowColorLet{mycolor}{red}{blue}, freeze-row, style 1 = {fill=mycolor!50!white}, style 2 = {fill=mycolor}, style 3 = {fill=mycolor!50!black}, }, ] (-\tcbtextwidth/2,-\tcbtextheight/2) rectangle (\tcbtextwidth/2,\tcbtextheight/2); \node[white,font=\Huge\bfseries] (title) at (0,\tcbtextheight/4) {The \texttt{tikzfill} package}; \node[white,font=\Large\bfseries,below=8mm] (title) at (title.south) {Manual for version \version\ (\datum)}; \node[white,font=\large\bfseries,below=8mm] (title) at (title.south) {Thomas F.~Sturm}; \end{tikzpicture} \end{tcolorbox} % \end{document} \end{tcboutputlisting} \tcbuselistingtext \tcbinputlisting{title=Cover code,docexample,listing only} \clearpage \begin{center} \begin{tcolorbox}[enhanced,hbox,tikznode,left=8mm,right=8mm,boxrule=0.4pt, colback=white,colframe=black!50!yellow, drop lifted shadow=black!50!yellow,arc is angular, before=\par\vspace*{5mm},after=\par\bigskip] {\bfseries\LARGE The \texttt{tikzfill} package}\\[3mm] {\large Manual for version \version\ (\datum)} \end{tcolorbox} {\large Thomas F.~Sturm% \footnote{Prof.~Dr.~Dr.~Thomas F.~Sturm, Institut f\"{u}r Mathematik und Informatik, University of the Bundeswehr Munich, D-85577 Neubiberg, Germany; email: \href{mailto:thomas.sturm@unibw.de}{thomas.sturm@unibw.de}}\par\medskip \normalsize\url{https://www.ctan.org/pkg/tikzfill}\par \url{https://github.com/T-F-S/tikzfill} } \end{center} \bigskip \begin{absquote} \begin{center}\bfseries Abstract\end{center} The |tikzfill| package is a collection of \tikzname\ libraries that provide additional options for filling \tikzname\ paths with images and patterns. The libraries support fillings based on external image files as well as \tikzname\ pictures. They also include patterns of hexagons and rhombi. In addition, the package offers fillings composed of similar, though not necessarily identical, small pictures arranged on a grid, providing greater flexibility than usual \tikzname\ patterns. \end{absquote} \clearpage \tableofcontents %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \clearpage \section{Short Introduction}\label{sec:intro} \tikzname\ is a very advanced and comprehensive graphics package for \LaTeX. The package |tikzfill| comprises a collection of libraries for \tikzname\, which add further options to fill \tikzname\ paths with images and patterns. For \LaTeX, the provided libraries can be loaded using the preferred \tikzname\ mechanism by \begin{dispListing*}{} \usetikzlibrary{fill.***} % LaTeX (primary choice) and plain TeX \end{dispListing*} where |***| is to be replaced by the actual library name found on the following pages. Alternatively, the libraries can be loaded using \LaTeX\ style files \begin{dispListing*}{} \usepackage{tikzfill.***} % LaTeX (secondary choice) \end{dispListing*} If you want to load all \tikzname\ libraries of this package, you can use the following \LaTeX\ style file \begin{dispListing*}{} \usepackage{tikzfill} % load all libraries \end{dispListing*} \begin{myvoid} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \clearpage \section{Image and Picture Fill Library}\label{sec:imagefill}% \begin{dispListing*}{title=\tikzname\ Library |fill.image|} \usetikzlibrary{fill.image} % LaTeX (primary choice) and plain TeX \usetikzlibrary[fill.image] % ConTeXt \usepackage{tikzfill.image} % LaTeX (secondary choice) \end{dispListing*} This library defines options to fill graphs with images or arbitrary pictures. Until |tcolorbox| version 5.1.1 (2022/06/24), the code of this library was part of |tcolorbox|. Now, on suggestion of \href{https://github.com/muzimuzhi}{muzimuzhi}, it is a separate library usable without |tcolorbox|. Also, the code is completely rewritten with |expl3|. \subsection{Fill Plain} \begin{docTikzKey}{fill plain image}{=\meta{file name}}{no default, initially unset} Fills the current path with an external image referenced by \meta{file name}. The image is put in the center of the path, but it is not resized to fit into the path area. \begin{dispExample*}{sbs,lefthand ratio=0.66,right=2mm,sidebyside gap=5mm,center lower} \begin{tikzpicture} \path[draw,fill plain image=goldshade.png] (2.75,-0.75) -- (3,0) -- (2.75,0.75) \foreach \w in {45,90,...,315} { -- (\w:1.5cm) } -- cycle; \end{tikzpicture} \end{dispExample*} \end{docTikzKey} \begin{docTikzKey}{fill plain image*}{=\meta{file name}}{no default, initially unset} Fills the current path with an external image referenced by \meta{file name}. The image is put in the center of the path, but it is not resized to fit into the path area. The \meta{graphics options} are given to the underlying \docAuxCommand*{includegraphics} command. \begin{dispExample*}{sbs,lefthand ratio=0.66,right=2mm,sidebyside gap=5mm,center lower} \begin{tikzpicture} \path[draw, fill plain image*={width=2.5cm}{goldshade.png}] (2.75,-0.75) -- (3,0) -- (2.75,0.75) \foreach \w in {45,90,...,315} { -- (\w:1.5cm) } -- cycle; \end{tikzpicture} \end{dispExample*} \end{docTikzKey} \enlargethispage*{8mm} \begin{docTikzKey}{fill plain picture}{=\meta{graphical code}}{no default, initially unset} Fills the current path with the given \meta{graphical code}. The result is put in the center of the path, but it is not resized to fit into the path area. Note that this is almost identical to the standard |path picture| option. \begin{dispExample*}{sbs,lefthand ratio=0.66,right=2mm,sidebyside gap=5mm,center lower} \begin{tikzpicture} \path[draw,fill plain picture={% \draw[red!50!yellow,line width=2mm] (0,0) circle (8mm); \draw[red,line width=5mm] (-1,-1) -- (1,1); \draw[red,line width=5mm] (-1,1) -- (1,-1); }] (2.75,-0.75) -- (3,0) -- (2.75,0.75) \foreach \w in {45,90,...,315} { -- (\w:1.5cm) } -- cycle; \end{tikzpicture} \end{dispExample*} \end{docTikzKey} \clearpage \subsection{Fill Stretch} \begin{docTikzKey}{fill stretch image}{=\meta{file name}}{no default, initially unset} Fills the current path with an external image referenced by \meta{file name}. The image is stretched to fill the path area. \begin{dispExample*}{sbs,lefthand ratio=0.66,right=2mm,sidebyside gap=5mm,center lower} \begin{tikzpicture} \path[fill stretch image=goldshade.png] (2.75,-0.75) -- (3,0) -- (2.75,0.75) \foreach \w in {45,90,...,315} { -- (\w:1.5cm) } -- cycle; \end{tikzpicture} \end{dispExample*} \end{docTikzKey} \begin{docTikzKey}{fill stretch image*}{=\marg{graphics options}\marg{file name}}{no default, initially unset} Fills the current path with an external image referenced by \meta{file name}. The \meta{graphics options} are given to the underlying \docAuxCommand*{includegraphics} command. The image is stretched to fill the path area. \begin{dispExample*}{sbs,lefthand ratio=0.66,right=2mm,sidebyside gap=5mm,center lower} \begin{tikzpicture} \path[fill stretch image*= {angle=90,origin=c}{goldshade.png}] (2.75,-0.75) -- (3,0) -- (2.75,0.75) \foreach \w in {45,90,...,315} { -- (\w:1.5cm) } -- cycle; \end{tikzpicture} \end{dispExample*} \end{docTikzKey} \begin{docTikzKey}{fill stretch picture}{=\meta{graphical code}}{no default, initially unset} Fills the current path with the given \meta{graphical code}. The result is stretched to fill the path area. \begin{dispExample*}{sbs,lefthand ratio=0.66,right=2mm,sidebyside gap=5mm,center lower} \begin{tikzpicture} \path[draw,fill stretch picture={% \draw[red!50!yellow,line width=2mm] (0,0) circle (8mm); \draw[red,line width=5mm] (-1,-1) -- (1,1); \draw[red,line width=5mm] (-1,1) -- (1,-1); }] (2.75,-0.75) -- (3,0) -- (2.75,0.75) \foreach \w in {45,90,...,315} { -- (\w:1.5cm) } -- cycle; \end{tikzpicture} \end{dispExample*} \end{docTikzKey} \clearpage \subsection{Fill Overzoom} \begin{docTikzKey}{fill overzoom image}{=\meta{file name}}{no default, initially unset} Fills the current path with an external image referenced by \meta{file name}. The image is zoomed such that the path area fills the image. \begin{dispExample*}{sbs,lefthand ratio=0.66,right=2mm,sidebyside gap=5mm,center lower} \begin{tikzpicture} \path[fill overzoom image=goldshade.png] (2.75,-0.75) -- (3,0) -- (2.75,0.75) \foreach \w in {45,90,...,315} { -- (\w:1.5cm) } -- cycle; \end{tikzpicture} \end{dispExample*} \end{docTikzKey} \begin{docTikzKey}{fill overzoom image*}{=\marg{graphics options}\marg{file name}}{no default, initially unset} Fills the current path with an external image referenced by \meta{file name}. The \meta{graphics options} are given to the underlying \docAuxCommand*{includegraphics} command. The image is zoomed such that the path area fills the image. \begin{dispExample*}{sbs,lefthand ratio=0.66,right=2mm,sidebyside gap=5mm,center lower} \begin{tikzpicture} \path[fill overzoom image*= {angle=90,origin=c}{goldshade.png}] (2.75,-0.75) -- (3,0) -- (2.75,0.75) \foreach \w in {45,90,...,315} { -- (\w:1.5cm) } -- cycle; \end{tikzpicture} \end{dispExample*} \end{docTikzKey} \begin{docTikzKey}{fill overzoom picture}{=\meta{graphical code}}{no default, initially unset} Fills the current path with the given \meta{graphical code}. The result is zoomed such that the path area fills the image. \begin{dispExample*}{sbs,lefthand ratio=0.66,right=2mm,sidebyside gap=5mm,center lower} \begin{tikzpicture} \path[draw,fill overzoom picture={% \draw[red!50!yellow,line width=2mm] (0,0) circle (8mm); \draw[red,line width=5mm] (-1,-1) -- (1,1); \draw[red,line width=5mm] (-1,1) -- (1,-1); }] (2.75,-0.75) -- (3,0) -- (2.75,0.75) \foreach \w in {45,90,...,315} { -- (\w:1.5cm) } -- cycle; \end{tikzpicture} \end{dispExample*} \end{docTikzKey} \clearpage \subsection{Fill Zoom} \begin{docTikzKey}{fill zoom image}{=\meta{file name}}{no default, initially unset} Fills the current path with an external image referenced by \meta{file name}. The image is zoomed such that it fits inside the path area. Typically, some parts of the path area will stay unfilled. \begin{dispExample*}{sbs,lefthand ratio=0.66,right=2mm,sidebyside gap=5mm,center lower} \begin{tikzpicture} \path[draw,fill zoom image=goldshade.png] (2.75,-0.75) -- (3,0) -- (2.75,0.75) \foreach \w in {45,90,...,315} { -- (\w:1.5cm) } -- cycle; \end{tikzpicture} \end{dispExample*} \end{docTikzKey} \begin{docTikzKey}{fill zoom image*}{=\marg{graphics options}\marg{file name}}{no default, initially unset} Fills the current path with an external image referenced by \meta{file name}. The \meta{graphics options} are given to the underlying \docAuxCommand*{includegraphics} command. The image is zoomed such that it fits inside the path area. Typically, some parts of the path area will stay unfilled. \begin{dispExample*}{sbs,lefthand ratio=0.66,right=2mm,sidebyside gap=5mm,center lower} \begin{tikzpicture} \path[draw,fill zoom image*= {angle=90,origin=c}{goldshade.png}] (2.75,-0.75) -- (3,0) -- (2.75,0.75) \foreach \w in {45,90,...,315} { -- (\w:1.5cm) } -- cycle; \end{tikzpicture} \end{dispExample*} \end{docTikzKey} \begin{docTikzKey}{fill zoom picture}{=\meta{graphical code}}{no default, initially unset} Fills the current path with the given \meta{graphical code}. The result is zoomed such that it fits inside the path area. Typically, some parts of the path area will stay unfilled. \begin{dispExample*}{sbs,lefthand ratio=0.66,right=2mm,sidebyside gap=5mm,center lower} \begin{tikzpicture} \path[draw,fill zoom picture={% \draw[red!50!yellow,line width=2mm] (0,0) circle (8mm); \draw[red,line width=5mm] (-1,-1) -- (1,1); \draw[red,line width=5mm] (-1,1) -- (1,-1); }] (2.75,-0.75) -- (3,0) -- (2.75,0.75) \foreach \w in {45,90,...,315} { -- (\w:1.5cm) } -- cycle; \end{tikzpicture} \end{dispExample*} \end{docTikzKey} \clearpage \subsection{Fill Shrink} \begin{docTikzKey}{fill shrink image}{=\meta{file name}}{no default, initially unset} Fills the current path with an external image referenced by \meta{file name}. The image is zoomed such that it fits inside the path area, but it never gets enlarged. Typically, some parts of the path area will stay unfilled. \begin{dispExample*}{sbs,lefthand ratio=0.66,right=2mm,sidebyside gap=5mm,center lower} \begin{tikzpicture} \path[draw,fill shrink image=goldshade.png] (2.75,-0.75) -- (3,0) -- (2.75,0.75) \foreach \w in {45,90,...,315} { -- (\w:1.5cm) } -- cycle; \end{tikzpicture} \end{dispExample*} \end{docTikzKey} \begin{docTikzKey}{fill shrink image*}{=\meta{file name}}{no default, initially unset} Fills the current path with an external image referenced by \meta{file name}. The \meta{graphics options} are given to the underlying \docAuxCommand*{includegraphics} command. The image is zoomed such that it fits inside the path area, but it never gets enlarged. Typically, some parts of the path area will stay unfilled. \begin{dispExample*}{sbs,lefthand ratio=0.66,right=2mm,sidebyside gap=5mm,center lower} \begin{tikzpicture} \path[draw, fill shrink image*={width=1.5cm}{goldshade.png}] (2.75,-0.75) -- (3,0) -- (2.75,0.75) \foreach \w in {45,90,...,315} { -- (\w:1.5cm) } -- cycle; \end{tikzpicture} \end{dispExample*} \end{docTikzKey} \begin{docTikzKey}{fill shrink picture}{=\meta{graphical code}}{no default, initially unset} Fills the current path with the given \meta{graphical code}. The result is zoomed such that it fits inside the path area, but it never gets enlarged. Typically, some parts of the path area will stay unfilled. \begin{dispExample*}{sbs,lefthand ratio=0.66,right=2mm,sidebyside gap=5mm,center lower} \begin{tikzpicture} \path[draw,fill shrink picture={% \draw[red!50!yellow,line width=2mm] (0,0) circle (8mm); \draw[red,line width=5mm] (-1,-1) -- (1,1); \draw[red,line width=5mm] (-1,1) -- (1,-1); }] (2.75,-0.75) -- (3,0) -- (2.75,0.75) \foreach \w in {45,90,...,315} { -- (\w:1.5cm) } -- cycle; \end{tikzpicture} \end{dispExample*} \end{docTikzKey} \clearpage \subsection{Fill Tile} \begin{docTikzKey}{fill tile image}{=\meta{file name}}{no default, initially unset} Fills the current path with a tile pattern using an external image referenced by \meta{file name}. \begin{dispExample*}{sbs,lefthand ratio=0.66,right=2mm,sidebyside gap=5mm,center lower} \begin{tikzpicture} \path[fill tile image=pink_marble.png] (2.75,-0.75) -- (3,0) -- (2.75,0.75) \foreach \w in {45,90,...,315} { -- (\w:1.5cm) } -- cycle; \end{tikzpicture} \end{dispExample*} \end{docTikzKey} \begin{docTikzKey}{fill tile image*}{=\marg{graphics options}\marg{file name}}{no default, initially unset} Fills the current path with a tile pattern using an external image referenced by \meta{file name}. The \meta{graphics options} are given to the underlying \docAuxCommand*{includegraphics} command. \begin{dispExample*}{sbs,lefthand ratio=0.66,right=2mm,sidebyside gap=5mm,center lower} \begin{tikzpicture} \path[fill tile image*={width=8mm}{pink_marble.png}] (2.75,-0.75) -- (3,0) -- (2.75,0.75) \foreach \w in {45,90,...,315} { -- (\w:1.5cm) } -- cycle; \end{tikzpicture} \end{dispExample*} \end{docTikzKey} \begin{docTikzKey}{fill tile picture}{=\meta{graphical code}}{no default, initially unset} Fills the current path with a tile pattern using the given \meta{graphical code}. \begin{dispExample*}{sbs,lefthand ratio=0.66,right=2mm,sidebyside gap=5mm,center lower} \begin{tikzpicture} \path[draw,fill tile picture={% \draw[red!50!yellow,line width=2mm] (0,0) circle (8mm); \draw[red,line width=5mm] (-1,-1) -- (1,1); \draw[red,line width=5mm] (-1,1) -- (1,-1); }] (2.75,-0.75) -- (3,0) -- (2.75,0.75) \foreach \w in {45,90,...,315} { -- (\w:1.5cm) } -- cycle; \end{tikzpicture} \end{dispExample*} \end{docTikzKey} \begin{docTikzKey}{fill tile picture*}{=\marg{fraction}\marg{graphical code}}{no default, initially unset} Fills the current path with a tile pattern using the given \meta{graphical code}. The graphic is resized by \meta{fraction}. \begin{dispExample*}{sbs,lefthand ratio=0.66,right=2mm,sidebyside gap=5mm,center lower} \begin{tikzpicture} \path[draw,fill tile picture*={0.25}{% \draw[red!50!yellow,line width=2mm] (0,0) circle (8mm); \draw[red,line width=5mm] (-1,-1) -- (1,1); \draw[red,line width=5mm] (-1,1) -- (1,-1); }] (2.75,-0.75) -- (3,0) -- (2.75,0.75) \foreach \w in {45,90,...,315} { -- (\w:1.5cm) } -- cycle; \end{tikzpicture} \end{dispExample*} \end{docTikzKey} \clearpage \subsection{Filling Options} \begin{docTikzKey}{fill image opacity}{=\meta{fraction}}{no default, initially |1.0|} Sets the fill opacity for the image or picture fill options to the given \meta{fraction}. \begin{dispExample} \begin{tikzpicture} \path[fill stretch image=goldshade.png] (0,0) circle (8mm); \path[fill=red,fill stretch image=goldshade.png,fill image opacity=0.75] (2,0) circle (8mm); \path[fill=red,fill stretch image=goldshade.png,fill image opacity=0.5] (4,0) circle (8mm); \path[fill=red,fill stretch image=goldshade.png,fill image opacity=0.25] (6,0) circle (8mm); \path[fill=red] (8,0) circle (8mm); \end{tikzpicture} \end{dispExample} \end{docTikzKey} \begin{docTikzKey}{fill image scale}{=\meta{fraction}}{no default, initially |1.0|} Stretches, zooms, overzooms or shrinks the image or picture to the given \meta{fraction} of the width and height of the current path. \begin{dispExample} \begin{tikzpicture} \path[draw,fill zoom image=goldshade.png] (0,0) rectangle +(2,2); \path[draw,fill zoom image=goldshade.png,fill image scale=0.75] (3,0) rectangle +(2,2); \path[draw,fill zoom image=goldshade.png,fill image scale=1.5] (6,0) rectangle +(2,2); \end{tikzpicture} \end{dispExample} \end{docTikzKey} \begin{docTikzKey}{fill image options}{=\meta{graphics options}}{no default, initially empty} The \meta{graphics options} are given to the underlying \docAuxCommand*{includegraphics} command for the image fill options. This can be just together with \refKey{/tikz/fill stretch image}, \refKey{/tikz/fill overzoom image}, \refKey{/tikz/fill zoom image}, and \refKey{/tikz/fill tile image}. \begin{dispExample*}{sbs,lefthand ratio=0.66,right=2mm,sidebyside gap=5mm,center lower} \begin{tikzpicture} \path[fill image options={width=8mm}, fill tile image=pink_marble.png] (2.75,-0.75) -- (3,0) -- (2.75,0.75) \foreach \w in {45,90,...,315} { -- (\w:1.5cm) } -- cycle; \end{tikzpicture} \end{dispExample*} \end{docTikzKey} \begin{dispExample*}{sbs,lefthand ratio=0.6,center lower,fonttitle=\bfseries, title=Image blending example} \begin{tikzpicture}[every node/.style= {circle,minimum width=2cm}] \node[fill stretch image=blueshade.png] (A) at (120:3cm) {A}; \node[fill stretch image=goldshade.png] (B) at (60:3cm) {B}; \node[ preaction={fill stretch image=blueshade.png}, fill stretch image=goldshade.png, fill image opacity=0.5] (C) {C}; \path (A) -- node{$+$} (B); \draw[->,very thick] (A)--(C); \draw[->,very thick] (B)--(C); \end{tikzpicture} \end{dispExample*} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \clearpage \section{Hexagon Pattern Library}\label{sec:hexagon}% \begin{dispListing*}{title=\tikzname\ Library |fill.hexagon|} \usetikzlibrary{fill.hexagon} % LaTeX (primary choice) and plain TeX \usetikzlibrary[fill.hexagon] % ConTeXt \usepackage{tikzfill.hexagon} % LaTeX (secondary choice) \end{dispListing*} Based on |patterns.meta|, this library defines new hexagon patterns to fill graphs. %------------------------------------------------------------------------------- \subsection{Hexagon} The \docValue{hexagon} pattern draws hexagons which may be filled or outlined. A single pattern is one of two different \emph{bands}, called band 0 and band 1. \begin{dispExample*}{sbs,lefthand ratio=0.66,right=2mm,sidebyside gap=5mm,center lower} \begin{tikzpicture} \draw[ pattern = { hexagon [ size = 5mm, angle = 15, line width = 1mm ]}, pattern color=red ] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} Both bands together build a uniform combined pattern. \begin{dispExample*}{sbs,lefthand ratio=0.66,right=2mm,sidebyside gap=5mm,center lower} \begin{tikzpicture} \draw[ preaction = { pattern = { hexagon [ size = 5mm, angle = 15, line width = 1mm, band = 1 ]}, pattern color=blue }, pattern = { hexagon [ size = 5mm, angle = 15, line width = 1mm, band = 0 ]}, pattern color=red ] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \begin{docTikzKey}{pattern hexagon}{=\marg{pattern keys}}{style, no default} Convenience shortcut for setting the combined pattern (in one color). \begin{dispExample*}{sbs,lefthand ratio=0.66,right=2mm,sidebyside gap=5mm,center lower} \begin{tikzpicture} \draw[ pattern hexagon = { size = 5mm, angle = 15, line width = 1mm }, pattern color=red ] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \end{docTikzKey} \clearpage \begin{docPatternKey}[][doc label=size@hex]{size}{=\meta{size}}{no default, initially |8mm|} The given \meta{size} denotes the length of an edge of one hexagonical tile where the (possibly smaller) hexagon is located in. \begin{dispExample*}{sbs,lefthand ratio=0.66,right=2mm,sidebyside gap=5mm,center lower} \begin{tikzpicture} \draw[ pattern hexagon = { size = 5mm, }, pattern color=red ] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \end{docPatternKey} \begin{docPatternKey}[][doc label=fill@hex]{fill}{}{no value, initially set} Sets the hexagons to be filled. |fill| and |draw| are mutually exclusionary. \begin{dispExample*}{sbs,lefthand ratio=0.66,right=2mm,sidebyside gap=5mm,center lower} \begin{tikzpicture} \draw[ pattern hexagon = { fill, }, pattern color=red ] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \end{docPatternKey} \begin{docPatternKey}[][doc label=draw@hex]{draw}{}{no value, initially unset} Sets the hexagons to be outlined. |fill| and |draw| are mutually exclusionary. \begin{dispExample*}{sbs,lefthand ratio=0.66,right=2mm,sidebyside gap=5mm,center lower} \begin{tikzpicture} \draw[ pattern hexagon = { draw, }, pattern color=red ] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \end{docPatternKey} \begin{docPatternKey}[][doc label=line width@hex]{line width}{=\meta{length}}{no default, initially |0.4pt|} Sets the \meta{length} value of the line width. This is only relevant, if the hexagons are not filled. \begin{dispExample*}{sbs,lefthand ratio=0.66,right=2mm,sidebyside gap=5mm,center lower} \begin{tikzpicture} \draw[ pattern hexagon = { draw, line width = 1mm, }, pattern color=red ] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \end{docPatternKey} \begin{docPatternKeys} { { doc name = xshift, doc parameter = {=\meta{xshift}}, doc description = {no default, initially |0pt|}, doc label = xshift@hex }, { doc name = yshift, doc parameter = {=\meta{yshift}}, doc description = {no default, initially |0pt|}, doc label = yshift@hex } } The pattern is shifted by \meta{xshift} and \meta{yshift}. \par Note that for \docValue*{hexagon} is valid, that a pattern is shifted first and rotated afterwards. \begin{dispExample*}{sbs,lefthand ratio=0.66,right=2mm,sidebyside gap=5mm,center lower} \begin{tikzpicture} \draw[ preaction={pattern hexagon grid, pattern color=blue}, pattern hexagon = { xshift=3mm, yshift=1mm, }, pattern color=red ] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \end{docPatternKeys} \begin{docPatternKey}[][doc label=angle@hex]{angle}{=\meta{angle}}{no default, initially |0|} The pattern is rotated by the given \meta{angle}. \par Note that for \docValue*{hexagon} is valid, that a pattern is shifted first and rotated afterwards. \begin{dispExample*}{sbs,lefthand ratio=0.66,right=2mm,sidebyside gap=5mm,center lower} \begin{tikzpicture} \draw[ pattern hexagon = { angle = 15, }, pattern color=red ] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \end{docPatternKey} \begin{docPatternKey}[][doc label=pos@hex]{pos}{=\meta{value}}{no default, initially |0.8|} Sets the edge position with a \meta{value} between 0 and 1, where $0$ is the center and $1$ the outer rim of the hexagonical tile. $1$ is a less efficient way to either fill the whole graph or to draw a \docValue*{hexagon grid}. \begin{dispExample*}{sbs,lefthand ratio=0.66,right=2mm,sidebyside gap=5mm,center lower} \begin{tikzpicture} \draw[ preaction={ pattern hexagon={pos=0.8}, pattern color=blue!80!red }, preaction={ pattern hexagon={pos=0.6}, pattern color=blue!60!red }, preaction={ pattern hexagon={pos=0.4}, pattern color=blue!40!red }, pattern hexagon={pos=0.2}, pattern color=blue!20!red, ] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \end{docPatternKey} \clearpage \begin{docPatternKey}[][doc label=band@hex]{band}{=\meta{number}}{no default, initially |0|} \meta{number} can take 0 or 1 and denotes one of two different bands of the pattern. \begin{dispExample*}{sbs,lefthand ratio=0.66,right=2mm,sidebyside gap=5mm,center lower} \begin{tikzpicture} \draw[ preaction = { pattern={hexagon[band=1,draw, line width=1mm]}, pattern color=blue }, pattern={hexagon[band=0,pos=0.5]}, pattern color=red ] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \end{docPatternKey} \clearpage %------------------------------------------------------------------------------- \subsection{Hexagon Grid} The \docValue{hexagon grid} pattern draws a grid made of hexagons. It is a single pattern und more efficient than \docValue*{hexagon} with settings |draw,pos=1|. \begin{dispExample*}{sbs,lefthand ratio=0.66,right=2mm,sidebyside gap=5mm,center lower} \begin{tikzpicture} \draw[ pattern = { hexagon grid [ size = 5mm, angle = 15, line width = 1mm ]}, pattern color=red ] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \begin{docTikzKey}{pattern hexagon grid}{=\marg{pattern keys}}{style, no default} Convenience shortcut for setting the pattern to \docValue{hexagon grid}: \begin{dispListing} pattern = { hexagon grid [ ... ] } \end{dispListing} \begin{dispExample*}{sbs,lefthand ratio=0.66,right=2mm,sidebyside gap=5mm,center lower} \begin{tikzpicture} \draw[ pattern hexagon grid = { size = 5mm, angle = 15, line width = 1mm }, pattern color=red ] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \end{docTikzKey} \begin{docPatternKey}[][doc label=size@hexgrid]{size}{=\meta{size}}{no default, initially |8mm|} The given \meta{size} denotes the length of an edge of one hexagon. \begin{dispExample*}{sbs,lefthand ratio=0.66,right=2mm,sidebyside gap=5mm,center lower} \begin{tikzpicture} \draw[ pattern hexagon grid = { size = 5mm, }, pattern color=red ] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \end{docPatternKey} \clearpage \begin{docPatternKeys} { { doc name = xshift, doc parameter = {=\meta{xshift}}, doc description = {no default, initially |0pt|}, doc label = xshift@hexgrid }, { doc name = yshift, doc parameter = {=\meta{yshift}}, doc description = {no default, initially |0pt|}, doc label = yshift@hexgrid } } The pattern is shifted by \meta{xshift} and \meta{yshift}. \par Note that for \docValue*{hexagon grid} is valid, that a pattern is shifted first and rotated afterwards. \begin{dispExample*}{sbs,lefthand ratio=0.66,right=2mm,sidebyside gap=5mm,center lower} \begin{tikzpicture} \draw[ preaction={pattern={hexagon grid}, pattern color=blue}, pattern hexagon grid = { xshift=3mm, yshift=1mm, }, pattern color=red ] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \end{docPatternKeys} \begin{docPatternKey}[][doc label=angle@hexgrid]{angle}{=\meta{angle}}{no default, initially |0|} The pattern is rotated by the given \meta{angle}. \par Note that for \docValue*{hexagon grid} is valid, that a pattern is shifted first and rotated afterwards. \begin{dispExample*}{sbs,lefthand ratio=0.66,right=2mm,sidebyside gap=5mm,center lower} \begin{tikzpicture} \draw[ pattern hexagon grid = { angle = 15, }, pattern color=red ] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \end{docPatternKey} \begin{docPatternKey}[][doc label=line width@hexgrid]{line width}{=\meta{length}}{no default, initially |0.4pt|} Sets the \meta{length} value of the line width. \begin{dispExample*}{sbs,lefthand ratio=0.66,right=2mm,sidebyside gap=5mm,center lower} \begin{tikzpicture} \draw[ pattern hexagon grid = { line width = 2mm, }, pattern color=red ] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \end{docPatternKey} \clearpage %------------------------------------------------------------------------------- \subsection{Hexagon Cycle} The \docValue{hexagon cycle} pattern draws several hexagon rings in a cyclic manor. A single pattern is one of two different \emph{bands}, called band 0 and band 1. \begin{dispExample*}{sbs,lefthand ratio=0.66,right=2mm,sidebyside gap=5mm,center lower} \begin{tikzpicture} \draw[ pattern = { hexagon cycle [ size = 5mm, angle = 15 ]}, pattern color=red ] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} Both bands together build a uniform combined pattern. \begin{dispExample*}{sbs,lefthand ratio=0.66,right=2mm,sidebyside gap=5mm,center lower} \begin{tikzpicture} \draw[ preaction = { pattern = { hexagon cycle [ size = 5mm, angle = 15, band = 1 ]}, pattern color=blue }, pattern = { hexagon cycle [ size = 5mm, angle = 15, band = 0 ]}, pattern color=red ] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \begin{docTikzKey}{pattern hexagon cycle}{=\marg{pattern keys}}{style, no default} Convenience shortcut for setting the combined pattern (in one color). \begin{dispExample*}{sbs,lefthand ratio=0.66,right=2mm,sidebyside gap=5mm,center lower} \begin{tikzpicture} \draw[ pattern hexagon cycle = { size = 5mm, angle = 15 }, pattern color=red ] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \end{docTikzKey} \clearpage \begin{docPatternKey}[][doc label=size@hexcycle]{size}{=\meta{size}}{no default, initially |8mm|} The given \meta{size} denotes the length of an edge of one hexagonical tile where the (smaller) hexagons are located in. \begin{dispExample*}{sbs,lefthand ratio=0.66,right=2mm,sidebyside gap=5mm,center lower} \begin{tikzpicture} \draw[ pattern hexagon cycle = { size = 5mm, }, pattern color=red ] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \end{docPatternKey} \begin{docPatternKeys} { { doc name = xshift, doc parameter = {=\meta{xshift}}, doc description = {no default, initially |0pt|}, doc label = xshift@hexcycle }, { doc name = yshift, doc parameter = {=\meta{yshift}}, doc description = {no default, initially |0pt|}, doc label = yshift@hexcycle } } The pattern is shifted by \meta{xshift} and \meta{yshift}. \par Note that for \docValue*{hexagon cycle} is valid, that a pattern is shifted first and rotated afterwards. \begin{dispExample*}{sbs,lefthand ratio=0.66,right=2mm,sidebyside gap=5mm,center lower} \begin{tikzpicture} \draw[ postaction={pattern={hexagon grid}, pattern color=blue}, pattern hexagon cycle = { xshift=3mm, yshift=1mm, }, pattern color=red ] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \end{docPatternKeys} \begin{docPatternKey}[][doc label=angle@hexcycle]{angle}{=\meta{angle}}{no default, initially |0|} The pattern is rotated by the given \meta{angle}. \par Note that for \docValue*{hexagon cycle} is valid, that a pattern is shifted first and rotated afterwards. \begin{dispExample*}{sbs,lefthand ratio=0.66,right=2mm,sidebyside gap=5mm,center lower} \begin{tikzpicture} \draw[ pattern hexagon cycle = { angle = 15, }, pattern color=red ] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \end{docPatternKey} \clearpage \begin{docPatternKey}[][doc label=rings@hexcycle]{rings}{=\meta{number}}{no default, initially |3|} Sets the \meta{number} of rings as $0, 1, 2, 3, \ldots$ \begin{dispExample*}{sbs,lefthand ratio=0.66,right=2mm,sidebyside gap=5mm,center lower} \begin{tikzpicture} \draw[ pattern hexagon cycle = { rings = 2, }, pattern color=red ] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \end{docPatternKey} \begin{docPatternKey}[][doc label=gap@hexcycle]{gap}{=\meta{value}}{no default, initially |1|} Sets the gap between two rings as \meta{value} times the line width of a ring. \meta{value} has to be greater or equal $0.01$. \begin{dispExample*}{sbs,lefthand ratio=0.66,right=2mm,sidebyside gap=5mm,center lower} \begin{tikzpicture} \draw[ pattern hexagon cycle = { gap = 0.5, }, pattern color=red ] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \end{docPatternKey} \begin{docPatternKey}[][doc label=band@hexcycle]{band}{=\meta{number}}{no default, initially |0|} \meta{number} can take 0 or 1 and denotes one of two different bands of the pattern. \begin{dispExample*}{sbs,lefthand ratio=0.66,right=2mm,sidebyside gap=5mm,center lower} \begin{tikzpicture} \draw[ preaction = { pattern={hexagon cycle[ band=1, gap=0.5 ]}, pattern color=blue }, pattern={hexagon cycle[band=0,rings=2]}, pattern color=red ] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \end{docPatternKey} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \clearpage \section{Rhombus Pattern Library}\label{sec:rhombus}% \begin{dispListing*}{title=\tikzname\ Library |fill.rhombus|} \usetikzlibrary{fill.rhombus} % LaTeX (primary choice) and plain TeX \usetikzlibrary[fill.rhombus] % ConTeXt \usepackage{tikzfill.rhombus} % LaTeX (secondary choice) \end{dispListing*} Based on |patterns.meta|, this library defines new rhombus patterns to fill graphs. %------------------------------------------------------------------------------- \subsection{Rhombus} The \docValue{rhombus} pattern draws rhombi or diamonds. The rhombi may be filled or outlined and can be arranged in different \emph{bands}, called band 0, band 1, and band 2. \begin{dispExample*}{sbs,lefthand ratio=0.66,right=2mm,sidebyside gap=5mm,center lower} \begin{tikzpicture} \draw[ pattern = { rhombus [ size = 8mm, angle = 15 ]}, pattern color=red ] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \begin{docTikzKey}{pattern rhombus}{=\marg{pattern keys}}{style, no default} Convenience shortcut for setting the pattern to \docValue{rhombus}: \begin{dispListing} pattern = { rhombus [ ... ] } \end{dispListing} \begin{dispExample*}{sbs,lefthand ratio=0.66,right=2mm,sidebyside gap=5mm,center lower} \begin{tikzpicture} \draw[ pattern rhombus = { size = 8mm, angle = 15 }, pattern color=red ] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \end{docTikzKey} \begin{docPatternKey}[][doc label=size@rhombus]{size}{=\meta{size}}{no default, initially |10mm|} The given \meta{size} denotes the length of an edge of one rhombical tile where the (possibly smaller) rhombus is located in. \begin{dispExample*}{sbs,lefthand ratio=0.66,right=2mm,sidebyside gap=5mm,center lower} \begin{tikzpicture} \draw[ pattern rhombus = { size = 5mm, }, pattern color=red ] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \end{docPatternKey} \clearpage \begin{docPatternKey}[][doc label=fill@rhombus]{fill}{}{no value, initially set} Sets the rhombi to be filled. |fill| and |draw| are mutually exclusionary. \begin{dispExample*}{sbs,lefthand ratio=0.66,right=2mm,sidebyside gap=5mm,center lower} \begin{tikzpicture} \draw[ pattern rhombus = { fill, }, pattern color=red ] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \end{docPatternKey} \begin{docPatternKey}[][doc label=draw@rhombus]{draw}{}{no value, initially unset} Sets the rhombi to be outlined. |fill| and |draw| are mutually exclusionary. \begin{dispExample*}{sbs,lefthand ratio=0.66,right=2mm,sidebyside gap=5mm,center lower} \begin{tikzpicture} \draw[ pattern rhombus = { draw, }, pattern color=red ] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \end{docPatternKey} \begin{docPatternKey}[][doc label=line width@rhombus]{line width}{=\meta{length}}{no default, initially |0.4pt|} Sets the \meta{length} value of the line width. This is only relevant, if the rhombi are not filled. \begin{dispExample*}{sbs,lefthand ratio=0.66,right=2mm,sidebyside gap=5mm,center lower} \begin{tikzpicture} \draw[ pattern rhombus = { line width = 1mm, draw }, pattern color=red ] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \end{docPatternKey} \begin{docPatternKey}[][doc label=angle@rhombus]{angle}{=\meta{angle}}{no default, initially |-40|} The pattern is rotated by the given \meta{angle}. \par Note that for \docValue*{rhombus} is valid, that a pattern is rotated first and shifted afterwards. \begin{dispExample*}{sbs,lefthand ratio=0.66,right=2mm,sidebyside gap=5mm,center lower} \begin{tikzpicture} \draw[ pattern rhombus = { angle = 15, }, pattern color=red ] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \end{docPatternKey} \clearpage \begin{docPatternKeys} { { doc name = xshift, doc parameter = {=\meta{xshift}}, doc description = {no default, initially |0pt|}, doc label = xshift@rhombus }, { doc name = yshift, doc parameter = {=\meta{yshift}}, doc description = {no default, initially |0pt|}, doc label = yshift@rhombus } } The pattern is shifted by \meta{xshift} and \meta{yshift}. \par Note that for \docValue*{rhombus} is valid, that a pattern is rotated first and shifted afterwards. \begin{dispExample*}{sbs,lefthand ratio=0.66,right=2mm,sidebyside gap=5mm,center lower} \begin{tikzpicture} \draw[ preaction={pattern rhombus, pattern color=blue}, pattern rhombus = { xshift=3mm, yshift=1mm, }, pattern color=red ] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \end{docPatternKeys} \begin{docPatternKey}[][doc label=ratio@rhombus]{ratio}{=\meta{value}}{no default, initially |2|} Sets the \meta{value} of the ratio between the longer diagonal and the shorter diagonal. Therefore, $\text{\meta{value}}\ge 1$. \begin{dispExample*}{sbs,lefthand ratio=0.66,right=2mm,sidebyside gap=5mm,center lower} \begin{tikzpicture} \draw[ pattern rhombus = { ratio = 4 }, pattern color=red ] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \end{docPatternKey} \begin{docPatternKey}[][doc label=pos@rhombus]{pos}{=\meta{value}}{no default, initially |1|} Sets the edge position with a \meta{value} between 0 and 1, where $0$ is the center and $1$ the outer rim of the rhombical tile. \begin{dispExample*}{sbs,lefthand ratio=0.66,right=2mm,sidebyside gap=5mm,center lower} \begin{tikzpicture} \draw[ preaction={ pattern rhombus={pos=1}, pattern color=blue }, preaction={ pattern rhombus={pos=0.8}, pattern color=blue!80!red }, preaction={ pattern rhombus={pos=0.6}, pattern color=blue!60!red }, preaction={ pattern rhombus={pos=0.4}, pattern color=blue!40!red }, pattern rhombus={pos=0.2}, pattern color=blue!20!red, ] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \end{docPatternKey} \clearpage \begin{docPatternKey}[][doc label=band@rhombus]{band}{=\meta{number}}{no default, initially |0|} \meta{number} can take 0, 1, or 2. Here, 0 and 1 denote one of two different bands of the pattern, while 2 denotes the combination of both. \begin{dispExample*}{sbs,lefthand ratio=0.66,right=2mm,sidebyside gap=5mm,center lower} \begin{tikzpicture} \draw[ preaction = { pattern rhombus = { pos = 0.8, band = 0 }, pattern color=red }, pattern rhombus = { pos = 0.8, band = 1 }, pattern color=blue ] (0,0) rectangle (4,4); \end{tikzpicture} \begin{tikzpicture} \draw[ pattern rhombus = { pos = 0.8, band = 2 }, pattern color=red ] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \end{docPatternKey} \end{myvoid} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \clearpage \section{Geometric Array Library}\label{sec:geomarray}% \begin{dispListing*}{title=\tikzname\ Library |fill.geomarray|} \usetikzlibrary{fill.geomarray} % LaTeX (primary choice) and plain TeX \usetikzlibrary[fill.geomarray] % ConTeXt \usepackage{tikzfill.geomarray} % LaTeX (secondary choice) \end{dispListing*} The fillings provided by this library consist of similar, though not necessarily identical, small pictures arranged on a grid. These pictures are conceptually similar to \tikzname\ pic objects and are referred to as \enquote{items} in the following. Unlike \tikzname\ tiling patterns, which are fixed in form, these pictures \emph{may} vary. Note that this flexibility comes at the cost of increased compilation time. Since \tikzname\ already uses terms such as grid and pattern, we refer to such a pattern-like grid of pic-like objects as a \enquote{geometric array} of \enquote{items}. Each geometric array consists of rows and columns of items arranged in either a rectangular or triangular grid. Built-in support is provided for scaling items from row to row, enabling fading-like effects. The most common use case is to employ a predefined template (see Section~\ref{sec:gea-templates}) and adjust its geometry and colors. \tcbset{gea-example/.style={sbs,lefthand ratio=0.66,right=2mm,sidebyside gap=5mm,center lower}} \begin{dispExample*}{gea-example} \begin{tikzpicture} \draw[ fill gea Weihmichl = { scale fixed = 1, ystep equidistance, init-row< = \TFRowColorLet{mycolor}{red}{blue}, style 1 = {fill=mycolor!50!white}, style 2 = {fill=mycolor}, style 3 = {fill=mycolor!50!black}, freeze-row, }] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} %------------------------------------------------------------------------------- \subsection{Base Settings} \begin{docTikzKeys} { { doc name = fill geomarray, doc parameter = {=\marg{options}}, doc description = {initially unset}, doc new = 2026-03-18, } } Applies a \tikzname\ |path picture| with geometric array settings customized by varios \meta{options} to the current path. Without additional settings, this produces a default filling. Templates from Section~\ref{sec:gea-templates} apply \refKey{/tikz/fill geomarray}.\par Note that the following keys are reset by this key: \refKey{/tikz/geomarray/init}, \refKey{/tikz/geomarray/init-row},\\ \refKey{/tikz/geomarray/init-item}, and \refKey{/tikz/geomarray/draw-item}. \begin{dispExample*}{gea-example} \begin{tikzpicture} \draw[ fill geomarray ] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \end{docTikzKeys} \clearpage \begin{docGeaKeys} { { doc name = triangular, doc key choices* = {true,false}, doc description = {default \texttt{true}, initially \texttt{false}}, doc new = 2026-03-18, } } Geometric arrays can be either rectangular or triangular grids. Triangular grids shift every second row by half of a horizontal step. \begin{dispExample*}{gea-example} \begin{tikzpicture} \draw[ fill geomarray = { triangular }, ] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \end{docGeaKeys} \begin{docGeaKeys} { { doc name = xstep, doc parameter = {=\marg{length}}, doc description = {initially |10mm|}, doc new = 2026-03-18, } } Sets the horizontal step distance between two columns to \meta{length}. This value can be used read-only as \docAuxCommand{l_tikzfill_gea_xstep_dim} for item drawing. \begin{dispExample*}{gea-example} \begin{tikzpicture} \draw[ fill geomarray = { xstep = 7mm }, ] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \end{docGeaKeys} \begin{docGeaKeys} { { doc name = ystep, doc parameter = {=\marg{length}}, doc description = {initially |10mm|}, doc new = 2026-03-18, } } Sets the vertical step distance between two rows to \meta{length}. This value can be used read-only as \docAuxCommand{l_tikzfill_gea_ystep_dim} for item drawing. \begin{dispExample*}{gea-example} \begin{tikzpicture} \draw[ fill geomarray = { ystep = 7mm }, ] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \end{docGeaKeys} \clearpage \begin{docGeaKeys} { { doc name = step, doc parameter = {=\marg{length}}, doc description = {style}, doc new = 2026-03-20, } } Sets both \refKey{/tikz/geomarray/xstep} and \refKey{/tikz/geomarray/ystep} to \meta{length}. \begin{dispExample*}{gea-example} \begin{tikzpicture} \draw[ fill geomarray = { step = 7mm }, ] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \end{docGeaKeys} \begin{docGeaKeys} { { doc name = step half, doc parameter = {=\marg{length}}, doc description = {style}, doc new = 2026-03-23, } } Sets \refKey{/tikz/geomarray/xstep} to \meta{length} and \refKey{/tikz/geomarray/ystep} to half of \meta{length}. \begin{dispExample*}{gea-example} \begin{tikzpicture} \draw[ fill geomarray = { step half = 10mm }, ] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \end{docGeaKeys} \begin{docGeaKeys} { { doc name = step double, doc parameter = {=\marg{length}}, doc description = {style}, doc new = 2026-03-23, } } Sets \refKey{/tikz/geomarray/xstep} to \meta{length} and \refKey{/tikz/geomarray/ystep} to double of \meta{length}. \begin{dispExample*}{gea-example} \begin{tikzpicture} \draw[ fill geomarray = { step double = 7mm }, ] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \end{docGeaKeys} \clearpage \begin{docGeaKeys} [ doc description = {style, no value}, ] { { doc name = ystep equidistance, doc new = 2026-03-18, }, { doc name = ystep equidistance*, doc new = 2026-03-25, } } For rectangular geometric arrays, this sets \refKey{/tikz/geomarray/ystep} to \refKey{/tikz/geomarray/xstep}. For triangular geometric arrays, \refKey{/tikz/geomarray/ystep} is set such that the centers of the items become equidistant. Note that \refKey{/tikz/geomarray/triangular} has to be set beforehand.\par \refKey{/tikz/geomarray/ystep equidistance*} switches rectangular and triangular computation. \begin{dispExample*}{gea-example} \begin{tikzpicture} \draw[ fill gea Furth = { triangular, xstep = 7mm, ystep equidistance, }] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \end{docGeaKeys} \begin{docGeaKeys} [ doc parameter = {=\marg{length}}, doc description = {style}, ] { { doc name = step equi, doc new = 2026-03-20, }, { doc name = step equi*, doc new = 2026-03-25, } } Sets \refKey{/tikz/geomarray/xstep} to \meta{length} and applies \refKey{/tikz/geomarray/ystep equidistance} or \refKey{/tikz/geomarray/ystep equidistance*}, respectively. \begin{dispExample*}{gea-example} \begin{tikzpicture} \draw[ fill gea Bruckberg = { step equi = 7mm }, ] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \end{docGeaKeys} \begin{docGeaKeys} [ doc parameter = {=\marg{length}}, doc description = {style}, ] { { doc name = step equi half, doc new = 2026-03-23, }, { doc name = step equi* half, doc new = 2026-03-23, } } Sets \refKey{/tikz/geomarray/xstep} to \meta{length} and applies \refKey{/tikz/geomarray/ystep equidistance} or \refKey{/tikz/geomarray/ystep equidistance*}, respectively, but halve ystep. \begin{dispExample*}{gea-example} \begin{tikzpicture} \draw[ fill gea Bruckberg = { step equi half = 10mm }, ] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \end{docGeaKeys} \clearpage \begin{docGeaKeys} [ doc parameter = {=\marg{length}}, doc description = {style}, ] { { doc name = step equi double, doc new = 2026-03-23, }, { doc name = step equi* double, doc new = 2026-03-23, } } Sets \refKey{/tikz/geomarray/xstep} to \meta{length} and applies \refKey{/tikz/geomarray/ystep equidistance} or \refKey{/tikz/geomarray/ystep equidistance*}, respectively, but double ystep. \begin{dispExample*}{gea-example} \begin{tikzpicture} \draw[ fill gea Bruckberg = { step equi double = 7mm }, ] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \end{docGeaKeys} \begin{docGeaKeys} { { doc name = angle, doc parameter = {=\marg{angle}}, doc description = {initially |0|}, doc new = 2026-03-18, } } Rotates the whole geometric array by \meta{angle}. \begin{dispExample*}{gea-example} \begin{tikzpicture} \draw[ fill geomarray = { angle = 20 }, ] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \end{docGeaKeys} \clearpage \begin{docGeaKeys} { { doc name = scale, doc parameter = {=\marg{data points}}, doc description = {initially |0/0.9,1/0.9|}, doc new = 2026-03-18, } } Defines a comma-separated list of interpolation \meta{data points} of type \emph{t}|/|\emph{scale}. The $t$ values must be strictly monotonically increasing from 0 to 1 (including both endpoints). They represent relative row positions.\par The \emph{scale} values are piecewise linearly interpolated and specify the actual scale of an item in a given row, where $1$ typically denotes full scale (though not necessarily).\par During item drawing, \docAuxCommand{l_tikzfill_gea_row_frac_fp} represents the current relative row position, while \docAuxCommand{l_tikzfill_gea_scale_fp} represents the interpolated scale value according to the specified interpolation \meta{data points}. \begin{dispExample*}{gea-example} \begin{tikzpicture} \draw[ fill geomarray = { step equi = 5mm, scale = {0/0.5,0.5/0.2,1/1}, }, ] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \end{docGeaKeys} \begin{docGeaKeys} { { doc name = scale linear, doc parameter = {=\marg{scale0}\marg{scale1}}, doc description = {initially \texttt{\textbraceleft 0.9\textbraceright\textbraceleft 0.9\textbraceright}}, doc new = 2026-03-23, } } This is a shortcut for setting \refKey{/tikz/geomarray/scale}|={0/|\meta{scale0}|,1/|\meta{scale1}|}|, i.e. the scale changes linearly from \meta{scale0} to \meta{scale1} from the first to the last row of the geometric array. \begin{dispExample*}{gea-example} \begin{tikzpicture} \draw[ fill geomarray = { scale linear = {0.2}{0.9}, }, ] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \end{docGeaKeys} \begin{docGeaKeys} { { doc name = scale fixed, doc parameter = {=\marg{scale}}, doc description = {initially |0.9|}, doc new = 2026-03-18, } } This is a shortcut for setting \refKey{/tikz/geomarray/scale}|={0/|\meta{scale}|,1/|\meta{scale}|}|, i.e. a fixed \meta{scale} is used for all rows of the geometric array. \begin{dispExample*}{gea-example} \begin{tikzpicture} \draw[ fill geomarray = { scale fixed = 0.5 }, ] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \end{docGeaKeys} \clearpage %------------------------------------------------------------------------------- \subsection{Custom Creation of Geometric Arrays} The following pseudocode illustrates how a geometric array is constructed, including four hook positions for inserting custom code. \begin{dispListing*}{title=Pseudo code for geometric array creation} init % (1) initialize before looping % Usable values: % \l_tikzfill_gea_xstep_dim \l_tikzfill_gea_ystep_dim % \l_tikzfill_gea_cols_in \l_tikzfill_gea_rows_int \loop_over_rows { init-row % (2) initialize at begin of a row % Usable values: % \l_tikzfill_gea_row_tl % \l_tikzfill_gea_row_frac_fp \l_tikzfill_gea_scale_fp \loop_over_columns { init-item % (3) initialize before drawing an item % Usable values: % \l_tikzfill_gea_col_tl draw-item % (4) item drawing code } } \end{dispListing*} Code can be inserted at these four positions using the following options: \begin{itemize} \item The most important position is the last one, addressed by \refKey{/tikz/geomarray/draw-item}. Here, the actual \tikzname\ drawing code for the item must be provided. \item The first three positions, addressed by \refKey{/tikz/geomarray/init},\\ \refKey{/tikz/geomarray/init-row}, and \refKey{/tikz/geomarray/init-item}, may contain optional initialization code to prepare for subsequent drawing. No \tikzname\ drawing code should be placed here; instead, these positions are intended, for example, for calculations affecting the entire array or a single row. \item In addition to providing fully custom code, a practical and convenient approach is to apply a template (see Section~\ref{sec:gea-templates}) and adjust only selected settings at one of the four positions. \end{itemize} \begin{docGeaKeys} [ doc parameter = {=\marg{code}}, ] { { doc name = init, doc description = {initially empty}, doc new = 2026-03-18, }, { doc name = init<, }, { doc name = init>, }, } This code position is executed before the loop over rows begins. The following read-only values are available: the grid step sizes \docAuxCommand{l_tikzfill_gea_xstep_dim} and \docAuxCommand{l_tikzfill_gea_ystep_dim}, as well as the number of columns and rows given by \docAuxCommand{l_tikzfill_gea_cols_int} and \docAuxCommand{l_tikzfill_gea_rows_int} (the actual counts are one greater, since indexing starts at $0$). \begin{itemize} \item \refKey{/tikz/geomarray/init} replaces the contents by \meta{code}. \item \refKey{/tikz/geomarray/init<} appends \meta{code}. \item \refKey{/tikz/geomarray/init>} prepends \meta{code}. \end{itemize} \end{docGeaKeys} \clearpage \begin{docGeaKeys} [ doc parameter = {=\marg{code}}, ] { { doc name = init-row, doc description = {initially empty}, doc new = 2026-03-18, }, { doc name = init-row<, }, { doc name = init-row>, }, } This code position is inside the main loop over rows, at the beginning of row \docAuxCommand{l_tikzfill_gea_row_tl}. Here, \docAuxCommand{l_tikzfill_gea_row_frac_fp} denotes the relative row position as a fractional value between $0$ and $1$. The macro \docAuxCommand{l_tikzfill_gea_scale_fp} represents the current scale value for the row, as defined by \refKey{/tikz/geomarray/scale}. \begin{itemize} \item \refKey{/tikz/geomarray/init-row} replaces the contents by \meta{code}. \item \refKey{/tikz/geomarray/init-row<} appends \meta{code}. \item \refKey{/tikz/geomarray/init-row>} prepends \meta{code}. \end{itemize} \end{docGeaKeys} \begin{docGeaKeys} [ doc parameter = {=\marg{code}}, ] { { doc name = init-item, doc description = {initially empty}, doc new = 2026-03-18, }, { doc name = init-item<, }, { doc name = init-item>, }, } This code position is inside the inner loop over columns, at the beginning of column \docAuxCommand{l_tikzfill_gea_col_tl}. Here, final calculations or settings may be applied before the current item is drawn. \begin{itemize} \item \refKey{/tikz/geomarray/init-item} replaces the contents by \meta{code}. \item \refKey{/tikz/geomarray/init-item<} appends \meta{code}. \item \refKey{/tikz/geomarray/init-item>} prepends \meta{code}. \end{itemize} \end{docGeaKeys} \begin{docKeys} [ doc parameter = {=\marg{code}}, doc keypath = tikz/geomarray, ] { { doc name = draw-item, doc description = {initially special}, doc new = 2026-03-18, }, { doc name = draw-item<, }, { doc name = draw-item>, }, } This code position contains the \tikzname\ drawing code for the current item. All previously mentioned read-only values are available for use in drawing. The center of the item corresponds to the \tikzname\ position $(0,0)$. The style settings \docAuxKey[tikz]{fill-gea-style-1} to \docAuxKey[tikz]{fill-gea-style-9} may be used as drawing options. \begin{itemize} \item \refKey{/tikz/geomarray/draw-item} replaces the contents by \meta{code}. \item \refKey{/tikz/geomarray/draw-item<} appends \meta{code}. \item \refKey{/tikz/geomarray/draw-item>} prepends \meta{code}. \end{itemize} \end{docKeys} \begin{dispExample*}{gea-example} \ExplSyntaxOn \begin{tikzpicture} \draw[ fill~geomarray = { scale~fixed = 1.3, triangular, ystep = 7mm, init = \sys_gset_rand_seed:n {1701}, init-item = { \TFDefineRandomColor{mycolor} }, draw-item = { \path[fill=mycolor,draw=mycolor!50!black] circle [ x~radius=\fp_to_dim:n {\l_tikzfill_gea_xstep_dim / 2 * \l_tikzfill_gea_scale_fp }, y~radius=\fp_to_dim:n {\l_tikzfill_gea_ystep_dim / 2 * \l_tikzfill_gea_scale_fp }, ]; }, }] (0,0) rectangle (4,6); \end{tikzpicture} \ExplSyntaxOff \end{dispExample*} \clearpage \begin{docGeaKeys} [ doc parameter = {=\marg{options}\marg{text}}, ] { { doc name = node, doc new = 2026-03-26, }, { doc name = node<, }, { doc name = node>, }, } This is a shortcut for drawing a \tikzname\ |node| applying \refKey{/tikz/geomarray/draw-item}, \refKey{/tikz/geomarray/draw-item<}, or \refKey{/tikz/geomarray/draw-item>}, respectively. The node contents are set by \meta{text} and any \tikzname\ \meta{options} for the node can be applied. \begin{dispExample*}{gea-example} \begin{tikzpicture} \draw[ fill geomarray = { node< = {white,draw=yellow,circle}{X} }, ] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \end{docGeaKeys} \begin{docGeaKeys} [ doc parameter = {=\marg{text}}, ] { { doc name = text, doc new = 2026-03-26, }, { doc name = text<, }, { doc name = text>, }, } This is a shortcut for setting \meta{text} with |\pgftext| applying \refKey{/tikz/geomarray/draw-item}, \refKey{/tikz/geomarray/draw-item<}, or \refKey{/tikz/geomarray/draw-item>}, respectively. In contrast to \refKey{/tikz/geomarray/node}, there are no drawing options, but \refKey{/tikz/geomarray/text} is much faster. \begin{dispExample*}{gea-example} % \usepackage{fontawesome7} \begin{tikzpicture} \draw[ preaction = {top color=yellow!20,bottom color=yellow}, fill geomarray = { triangular, text = {\Huge\color{red}\faTriangleExclamation}, angle = 20, }, ] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \end{docGeaKeys} \clearpage \begin{docKeys} [ doc parameter = {=\marg{path style}}, doc keypath = tikz/geomarray, ] { { doc name = style 1, doc description = {initially |fill=red|}, doc new = 2026-03-18, }, { doc name = style 2, doc description = {initially |fill=green|}, }, { doc name = style 3, doc description = {initially |fill=blue|}, }, { doc name = style 4, doc description = {initially |fill=cyan|}, }, { doc name = style 5, doc description = {initially |fill=magenta|}, }, { doc name = style 6, doc description = {initially |fill=yellow|}, }, { doc name = style 7, doc description = {initially |fill=lightgray|}, }, { doc name = style 8, doc description = {initially |fill=orange|}, }, { doc name = style 9, doc description = {initially |fill=purple|}, }, } These convenience options generate styles named\\ \docAuxKey[tikz]{fill-gea-style-1}, \docAuxKey[tikz]{fill-gea-style-2},\\ \docAuxKey[tikz]{fill-gea-style-3}, \docAuxKey[tikz]{fill-gea-style-4},\\ \docAuxKey[tikz]{fill-gea-style-5}, \docAuxKey[tikz]{fill-gea-style-6},\\ \docAuxKey[tikz]{fill-gea-style-7}, \docAuxKey[tikz]{fill-gea-style-8},\\ and \docAuxKey[tikz]{fill-gea-style-9}.\\ Styles of this kind are used within templates (see Section~\ref{sec:gea-templates}) for drawing. The style \docAuxKey[tikz]{fill-gea-style-1} is also used in the default configuration. Modifying these styles is the simplest way to customize the appearance. \begin{dispExample*}{gea-example} \begin{tikzpicture} \draw[ fill gea Bruckberg = { style 1 = { draw = gray, top color = blue!50, bottom color = red }, }] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \end{docKeys} \clearpage \begin{docGeaKeys} { { doc name = debug text, doc parameter = {\colOpt{=\meta{color}}}, doc description = {default |black|, initially |black|}, doc new = 2026-03-18, } } Prints the row and column numbers in the specified \meta{color}. Note that this option appends drawing code; therefore, it should be specified after other drawing settings. It is intended for debugging or for identifying a specific item.\par During item drawing, the following values are available (read-only): \begin{itemize} \item \docAuxCommand{l_tikzfill_gea_rows_int}: total number of rows minus one. \item \docAuxCommand{l_tikzfill_gea_cols_int}: total number of columns minus one. \item \docAuxCommand{l_tikzfill_gea_row_tl}: current row index, with\\ $0\le$\docAuxCommand{l_tikzfill_gea_row_tl}$\le$\docAuxCommand{l_tikzfill_gea_rows_int}. \item \docAuxCommand{l_tikzfill_gea_col_tl}: current column index, with\\ $0\le$\docAuxCommand{l_tikzfill_gea_col_tl}$\le$\docAuxCommand{l_tikzfill_gea_cols_int}. \end{itemize} \refKey{/tikz/geomarray/debug text} displays the current pair consisting of \docAuxCommand{l_tikzfill_gea_row_tl} and \docAuxCommand{l_tikzfill_gea_col_tl}.\par Note that at least the first and last row or column may lie partially or entirely outside the clipping area. \begin{dispExample*}{gea-example} \begin{tikzpicture} \draw[ fill geomarray = { debug text }, ] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \end{docGeaKeys} \begin{docGeaKeys} { { doc name = freeze-row, doc description = {experimental}, doc new = 2026-03-18, } } This is an experimental compile-time optimization for geometric arrays in which each row contains uniform items. For each row, an item is drawn only once into a box (\enquote{frozen}), and this box is then copied to fill the row.\par Depending on the complexity of the graphical code, this can reduce compilation time. However, note the restriction that all items within a row must be uniform. \end{docGeaKeys} \clearpage %------------------------------------------------------------------------------- \subsection{Auxiliary Macros} \begin{docCommands} { { doc name = TFRowColorLet, doc parameter = \marg{name}\marg{color1}\marg{color2}, doc new = 2026-03-18, } } Creates a new color with given \meta{name} which mixes the colors \meta{color1} and \meta{color2}. On the first row, \meta{color1} is used, on the last row \meta{color2}, and a linear mixture in between. \begin{dispExample*}{gea-example} \begin{tikzpicture} \draw[ fill gea Bruckberg = { init-row< = \TFRowColorLet{mycolor}{red}{blue!50!white}, style 1 = {draw=gray, fill=mycolor}, }] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \end{docCommands} \begin{docCommands} { { doc name = TFRowColorLetSeq, doc parameter = \marg{name}\marg{comma-list}, doc new = 2026-03-18, } } Creates a new color with given \meta{name} which mixes the colors given by the \meta{comma-list} from the first row (first color) to the last row (last color) and a linear mixture in between. \begin{dispExample*}{gea-example} % \usepackage{opencolor} \begin{tikzpicture} \draw[ fill gea Essenbach = { init-row< = \TFRowColorLetSeq{mycolor} {oc-red-6,oc-blue-6,oc-green-6,oc-yellow-6}, style 1 = {fill=mycolor}, step equi = 5mm, }] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \end{docCommands} \begin{docCommands} { { doc name = TFDefineRandomColor, doc parameter = \marg{name}, doc new = 2026-03-18, } } Defines a random color with given \meta{name}. Random numbers are taken from the L3 programming layer. \begin{dispExample*}{gea-example} \ExplSyntaxOn \sys_gset_rand_seed:n {1701} \ExplSyntaxOff \begin{tikzpicture} \draw[ fill gea Furth = { triangular, step equi = 8mm, init-item< = \TFDefineRandomColor{mycolor}, style 1 = {ball color=mycolor}, }] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \end{docCommands} \clearpage %------------------------------------------------------------------------------- \subsection{Templates}\label{sec:gea-templates} \begin{docTikzKeys} { { doc name = fill gea Altdorf, doc parameter = {=\marg{options}}, doc description = {initially unset}, doc new = 2026-03-18, } } The basic item shape of this template is a rectangle. \refKey{/tikz/geomarray/style 1} is used for graph drawing. \begin{dispExample*}{gea-example} \begin{tikzpicture} \draw[ fill gea Altdorf = { init-row< = \TFRowColorLet{mycolor}{red}{blue}, style 1 = {draw=gray, fill=mycolor}, }] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \end{docTikzKeys} \begin{docTikzKeys} { { doc name = fill gea Loeschenbrand, doc parameter = {=\marg{options}}, doc description = {initially unset}, doc new = 2026-03-20, } } This is a variation of \refKey{/tikz/fill gea Altdorf} where \refKey{/tikz/geomarray/style 1} and \refKey{/tikz/geomarray/style 2} are used in a checkerboard pattern. \begin{dispExample*}{gea-example} \begin{tikzpicture} \draw[ fill gea Loeschenbrand = { scale fixed = 1, style 1 = {bottom color=black, top color=black!50}, style 2 = {bottom color=black!10, top color=white}, angle = -10, }] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \end{docTikzKeys} \begin{docTikzKeys} { { doc name = fill gea Ganslberg, doc parameter = {=\marg{options}}, doc description = {initially unset}, doc new = 2026-03-18, } } This is a variation of \refKey{/tikz/fill gea Altdorf} in which \refKey{/tikz/geomarray/style 1} and \refKey{/tikz/geomarray/style 2} are used for odd and even rows, respectively. \begin{dispExample*}{gea-example} \begin{tikzpicture} \draw[ fill gea Ganslberg = { style 1 = {bottom color=red, top color=red!50}, style 2 = {bottom color=blue, top color=blue!50}, }] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \end{docTikzKeys} \clearpage \begin{docTikzKeys} { { doc name = fill gea Essenbach, doc parameter = {=\marg{options}}, doc description = {initially unset}, doc new = 2026-03-18, } } The basic item shape of this template is a rhombus. \refKey{/tikz/geomarray/style 1} is used for graph drawing. \begin{dispExample*}{gea-example} \begin{tikzpicture} \draw[ fill gea Essenbach = { init-row< = \TFRowColorLet{mycolor}{red}{blue}, style 1 = {draw=gray, fill=mycolor}, }] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \end{docTikzKeys} \begin{docTikzKeys} { { doc name = fill gea Mirskofen, doc parameter = {=\marg{options}}, doc description = {initially unset}, doc new = 2026-03-18, } } This is a variation of \refKey{/tikz/fill gea Essenbach} in which \refKey{/tikz/geomarray/style 1} and \refKey{/tikz/geomarray/style 2} are used for odd and even rows, respectively. \begin{dispExample*}{gea-example} \begin{tikzpicture} \draw[ fill gea Mirskofen = { scale fixed = 1, step equi = 5mm, init-row< = \TFRowColorLet{mycolor}{blue!60}{blue!30}, style 1 = {fill=mycolor}, style 2 = {}, angle = 45, }] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \end{docTikzKeys} \clearpage \begin{docTikzKeys} { { doc name = fill gea Pfettrach, doc parameter = {=\marg{options}}, doc description = {initially unset}, doc new = 2026-03-18, } } The basic item shape of this template is a rhombus divided into two parts. \refKey{/tikz/geomarray/style 1} and \refKey{/tikz/geomarray/style 2} are used for the two parts. \begin{dispExample*}{gea-example} \begin{tikzpicture} \draw[ fill gea Pfettrach = { step half = 10mm, style 1 = { fill = red!40 }, style 2 = { fill = red }, freeze-row, }] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \begin{dispExample*}{gea-example} \ExplSyntaxOn \sys_gset_rand_seed:n {1701} \ExplSyntaxOff \begin{tikzpicture} \draw[ fill gea Pfettrach = { scale fixed = 1, step equi = 7mm, init-item< = \TFDefineRandomColor{col1}% \TFDefineRandomColor{col2}, style 1 = { fill = col1 }, style 2 = { fill = col2 }, }] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \end{docTikzKeys} \begin{docTikzKeys} { { doc name = fill gea Kolmhub, doc parameter = {=\marg{options}}, doc description = {initially unset}, doc new = 2026-03-18, } } This is a variation of \refKey{/tikz/fill gea Pfettrach} in which \refKey{/tikz/geomarray/style 1}, \refKey{/tikz/geomarray/style 2}, \refKey{/tikz/geomarray/style 3}, and \refKey{/tikz/geomarray/style 4}, are used for odd and even rows, respectively. \begin{dispExample*}{gea-example} \begin{tikzpicture} \draw[ fill gea Kolmhub = { step = 6mm, style 1 = { fill = red!40 }, style 2 = { fill = red }, style 3 = { fill = blue!40 }, style 4 = { fill = blue }, freeze-row, }] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \end{docTikzKeys} \clearpage \begin{docTikzKeys} { { doc name = fill gea Bruckberg, doc parameter = {=\marg{options}}, doc description = {initially unset}, doc new = 2026-03-18, } } The basic item shape of this template is a hexagon. \refKey{/tikz/geomarray/style 1} is used for graph drawing. \begin{dispExample*}{gea-example} % \usepackage{opencolor} \begin{tikzpicture} \draw[ preaction = {fill=oc-orange-7}, fill gea Bruckberg = { scale fixed = 0.97, step equi = 7mm, style 1 = { top color = oc-yellow-6, bottom color = oc-orange-5 }, }] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \begin{dispExample*}{gea-example} % \usepackage{opencolor} % \usepackage{fontawesome7} \ExplSyntaxOn \begin{tikzpicture} \draw[ preaction = {fill=oc-orange-7}, fill~gea~Bruckberg = { scale~fixed = 1, step~equi = 7mm, init< = \sys_gset_rand_seed:n {101}, init-item< = \tl_set:Ne \l_tmpa_tl {oc-\clist_rand_item:n {red,grape,indigo,cyan, green,yellow} }, style~1 = {draw=\l_tmpa_tl-4,fill=\l_tmpa_tl-3}, text< = { \color{\l_tmpa_tl-6}\large \faIcon{face-\clist_rand_item:n {smile,frown, grin-beam,meh,tired,laugh,smile-wink}} }, }] (0,0) rectangle (4,8); \end{tikzpicture} \ExplSyntaxOff \end{dispExample*} \end{docTikzKeys} \clearpage \begin{docTikzKeys} { { doc name = fill gea Bachhorn, doc parameter = {=\marg{options}}, doc description = {initially unset}, doc new = 2026-03-18, } } This is a variation of \refKey{/tikz/fill gea Bruckberg} in which \refKey{/tikz/geomarray/style 1} and \refKey{/tikz/geomarray/style 2} are used for odd and even rows, respectively. \begin{dispExample*}{gea-example} \begin{tikzpicture} \draw[ preaction = {top color=red!25,bottom color=blue!25}, fill gea Bachhorn = { scale = {0/0.3,1/0.9}, step equi = 7mm, style 1 = { draw=gray, fill=red }, style 2 = { draw=gray, fill=blue }, angle = 60, }] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \end{docTikzKeys} \begin{docTikzKeys} { { doc name = fill gea Weihmichl, doc parameter = {=\marg{options}}, doc description = {initially unset}, doc new = 2026-03-18, } } The basic item shape of this template is a hexagon divided into three parts. \refKey{/tikz/geomarray/style 1}, \refKey{/tikz/geomarray/style 2}, and \refKey{/tikz/geomarray/style 3}, are used for the three parts. \begin{dispExample*}{gea-example} % \usepackage{opencolor} \begin{tikzpicture} \draw[ fill gea Weihmichl = { scale fixed = 1, step equi = 8mm, init-row< = \TFRowColorLetSeq{mycolor}{ oc-blue-6,oc-yellow-6,oc-red-6}, style 1 = {fill=mycolor!50!white}, style 2 = {fill=mycolor}, style 3 = {fill=mycolor!50!black}, }] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \end{docTikzKeys} \clearpage \begin{docTikzKeys} { { doc name = fill gea Furth, doc parameter = {=\marg{options}}, doc description = {initially unset}, doc new = 2026-03-18, } } The basic item shape of this template is a circle. \refKey{/tikz/geomarray/style 1} is used for graph drawing. \begin{dispExample*}{gea-example} \begin{tikzpicture} \draw[ preaction = {fill=blue!25}, fill gea Furth = { triangular, step equi = 4mm, scale = {0/0,1/1.2}, style 1 = { fill=blue }, freeze-row, }] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \end{docTikzKeys} \begin{docTikzKeys} { { doc name = fill gea Schatzhofen, doc parameter = {=\marg{options}}, doc description = {initially unset}, doc new = 2026-03-18, } } This is a variation of \refKey{/tikz/fill gea Furth} in which \refKey{/tikz/geomarray/style 1} and \refKey{/tikz/geomarray/style 2} are used for odd and even rows, respectively. \begin{dispExample*}{gea-example} % \usepackage{opencolor} \begin{tikzpicture} \draw[ fill gea Schatzhofen = { triangular, scale fixed=1.2, step equi = 6mm, style 1 = { top color=oc-blue-3, bottom color=oc-blue-9}, style 2 = { top color=oc-teal-3, bottom color=oc-teal-9}, freeze-row, }] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \end{docTikzKeys} \clearpage \begin{docTikzKeys} { { doc name = fill gea Ergolding, doc parameter = {=\marg{options}}, doc description = {initially unset}, doc new = 2026-03-24, } } The basic item shape of this template is a tripod. \refKey{/tikz/geomarray/style 1} is used for graph drawing. \begin{dispExample*}{gea-example} % \usepackage{opencolor} \begin{tikzpicture} \draw[ fill gea Ergolding = { step equi = 8mm, init-row< = \TFRowColorLetSeq{mycolor}{ oc-blue-6,oc-yellow-6,oc-red-6}, style 1 = {draw,fill=mycolor!50!white}, }] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \end{docTikzKeys} \begin{docTikzKeys} { { doc name = fill gea Hascherkeller, doc parameter = {=\marg{options}}, doc description = {initially unset}, doc new = 2026-03-24, } } The basic item shape of this template is a tripod divided into three parts. \refKey{/tikz/geomarray/style 1}, \refKey{/tikz/geomarray/style 2}, and \refKey{/tikz/geomarray/style 3}, are used for the three parts. \begin{dispExample*}{gea-example} \ExplSyntaxOn \sys_gset_rand_seed:n {42} \ExplSyntaxOff \begin{tikzpicture} \draw[ fill gea Hascherkeller = { scale fixed = 1, step equi = 8mm, init-item< = \TFDefineRandomColor{mycolor}, style 1 = {fill=mycolor!50!white}, style 2 = {fill=mycolor}, style 3 = {fill=mycolor!50!black}, angle=30, }] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \end{docTikzKeys} \clearpage \begin{docTikzKeys} { { doc name = fill gea Unterglaim, doc parameter = {=\marg{options}}, doc description = {initially unset}, doc new = 2026-03-24, } } The basic item shape of this template is an octogon. \refKey{/tikz/geomarray/style 1} is used for graph drawing. \begin{dispExample*}{gea-example} \begin{tikzpicture} \draw[ preaction = {fill=yellow!70!gray}, fill gea Unterglaim = { scale fixed = 1, style 1 = {draw, top color=blue!50,bottom color=blue}, }] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \end{docTikzKeys} \begin{docTikzKeys} { { doc name = fill gea Grandsberg, doc parameter = {=\marg{options}}, doc description = {initially unset}, doc new = 2026-03-20, } } This is a variation of \refKey{/tikz/fill gea Unterglaim} where \refKey{/tikz/geomarray/style 1} and \refKey{/tikz/geomarray/style 2} are used in a checkerboard pattern. \begin{dispExample*}{gea-example} \begin{tikzpicture} \draw[ preaction = {fill=black!90}, fill gea Grandsberg = { scale fixed = 1, step = 5mm, init-row< = \TFRowColorLet{mycolor}{red!60}{blue!30}, style 1 = {draw=black!90,fill=mycolor}, style 2 = {fill=yellow!75!gray}, angle = 45, }] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \end{docTikzKeys} \begin{docTikzKeys} { { doc name = fill gea Kottingrohr, doc parameter = {=\marg{options}}, doc description = {initially unset}, doc new = 2026-03-18, } } This is a variation of \refKey{/tikz/fill gea Unterglaim} in which \refKey{/tikz/geomarray/style 1} and \refKey{/tikz/geomarray/style 2} are used for odd and even rows, respectively. \begin{dispExample*}{gea-example} \begin{tikzpicture} \draw[ fill gea Kottingrohr = { triangular, scale linear = {0.5}{1}, step = 6mm, style 1 = {bottom color=red, top color=red!50}, style 2 = {bottom color=blue, top color=blue!50}, }] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \end{docTikzKeys} \clearpage \begin{docTikzKeys} { { doc name = fill gea Hohenthann, doc parameter = {=\marg{options}}, doc description = {initially unset}, doc new = 2026-03-25, } } The basic item shape of this template is an arrow. \refKey{/tikz/geomarray/style 1} is used for graph drawing. \begin{dispExample*}{gea-example} \begin{tikzpicture} \draw[ fill gea Hohenthann = { scale fixed = 1, step equi* double = 7mm, style 1 = {draw=white, left color=blue!50,right color=blue}, }] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \end{docTikzKeys} \begin{docTikzKeys} { { doc name = fill gea Bibelsbach, doc parameter = {=\marg{options}}, doc description = {initially unset}, doc new = 2026-03-25, } } This is a variation of \refKey{/tikz/fill gea Hohenthann} in which \refKey{/tikz/geomarray/style 1} and \refKey{/tikz/geomarray/style 2} are used for odd and even rows, respectively. \begin{dispExample*}{gea-example} \begin{tikzpicture} \draw[ fill gea Bibelsbach = { scale fixed = 1, step equi* double = 7mm, style 1 = {draw=white, left color=blue!50,right color=blue}, style 2 = {draw=white, left color=red!50,right color=red}, }] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \end{docTikzKeys} \begin{docTikzKeys} { { doc name = fill gea Roseneck, doc parameter = {=\marg{options}}, doc description = {initially unset}, doc new = 2026-03-25, } } This is a variation of \refKey{/tikz/fill gea Hohenthann} in which \refKey{/tikz/geomarray/style 1} and \refKey{/tikz/geomarray/style 2} are used for odd and even columns, respectively. \begin{dispExample*}{gea-example} \begin{tikzpicture} \draw[ fill gea Roseneck = { scale fixed = 1, step equi* double = 7mm, style 1 = {draw=white, left color=blue!50,right color=blue}, style 2 = {draw=white, left color=red!50,right color=red}, }] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \end{docTikzKeys} \clearpage \begin{docTikzKeys} { { doc name = fill gea Altenkofen, doc parameter = {=\marg{options}}, doc description = {initially unset}, doc new = 2026-03-25, } } This is a variation of \refKey{/tikz/fill gea Hohenthann} in which \refKey{/tikz/geomarray/style 1} and \refKey{/tikz/geomarray/style 2} are used are used in a checkerboard pattern. \begin{dispExample*}{gea-example} \begin{tikzpicture} \draw[ fill gea Altenkofen = { scale fixed = 1, step equi* double = 7mm, style 1 = {draw=white, left color=blue!50,right color=blue}, style 2 = {draw=white, left color=red!50,right color=red}, }] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \end{docTikzKeys} \begin{docTikzKeys} { { doc name = fill gea Irlmuehle, doc parameter = {=\marg{options}}, doc description = {initially unset}, doc new = 2026-03-25, } } This is a variation of \refKey{/tikz/fill gea Hohenthann} in which \refKey{/tikz/geomarray/style 1}, \refKey{/tikz/geomarray/style 2}, \refKey{/tikz/geomarray/style 3}, and \refKey{/tikz/geomarray/style 4} are used are used. \begin{dispExample*}{gea-example} \begin{tikzpicture} \draw[ fill gea Irlmuehle = { scale fixed = 1, step equi* double = 7mm, style 1 = {fill=red}, style 2 = {fill=red!50}, style 3 = {fill=blue}, style 4 = {fill=blue!50}, }] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \end{docTikzKeys} \clearpage \begin{docTikzKeys} { { doc name = fill gea Gammelsdorf, doc parameter = {=\marg{options}}, doc description = {initially unset}, doc new = 2026-03-25, } } The basic item shape of this template is an arrow divided into two parts. \refKey{/tikz/geomarray/style 1} and \refKey{/tikz/geomarray/style 2} are used for the two parts. \begin{dispExample*}{gea-example} % \usepackage{opencolor} \begin{tikzpicture} \draw[ preaction = {fill=oc-teal-9}, fill gea Gammelsdorf = { step equi* double = 6mm, init-row< = \TFRowColorLet{mycolor}{oc-cyan-6}{oc-green-6}, style 1 = {fill=mycolor}, style 2 = {fill=mycolor!50}, }] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \end{docTikzKeys} \begin{docTikzKeys} { { doc name = fill gea Traich, doc parameter = {=\marg{options}}, doc description = {initially unset}, doc new = 2026-03-25, } } This is a variation of \refKey{/tikz/fill gea Gammelsdorf} in which \refKey{/tikz/geomarray/style 1} and \refKey{/tikz/geomarray/style 2} are used in a checkerboard pattern. \begin{dispExample*}{gea-example} % \usepackage{opencolor} \begin{tikzpicture} \draw[ fill gea Traich = { scale fixed = 1, step equi* = 7mm, init-row< = \TFRowColorLet{mycolor}{oc-cyan-6}{oc-green-6}, style 1 = {fill=mycolor}, style 2 = {fill=mycolor!50}, }] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \end{docTikzKeys} \begin{docTikzKeys} { { doc name = fill gea Winbuerg, doc parameter = {=\marg{options}}, doc description = {initially unset}, doc new = 2026-03-25, } } This is a variation of \refKey{/tikz/fill gea Gammelsdorf} in which \refKey{/tikz/geomarray/style 1}, \refKey{/tikz/geomarray/style 2}, \refKey{/tikz/geomarray/style 3}, and \refKey{/tikz/geomarray/style 4} are used. \begin{dispExample*}{gea-example} % \usepackage{opencolor} \begin{tikzpicture} \draw[ fill gea Winbuerg = { scale fixed = 1, step equi* double = 7mm, init-row< = \TFRowColorLet{mycolA}{oc-cyan-6}{oc-green-6}% \TFRowColorLet{mycolB}{oc-blue-6}{oc-violet-6}, style 1 = {fill=mycolA}, style 2 = {fill=mycolA!50}, style 3 = {fill=mycolB!50}, style 4 = {fill=mycolB}, }] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \end{docTikzKeys} \clearpage \begin{docTikzKeys} { { doc name = fill gea Kreuzholzen, doc parameter = {=\marg{options}}, doc description = {initially unset}, doc new = 2026-03-25, } } This is a variation of \refKey{/tikz/fill gea Gammelsdorf} in which \refKey{/tikz/geomarray/style 1} up to \refKey{/tikz/geomarray/style 8} are used. \begin{dispExample*}{gea-example} % \usepackage{opencolor} \begin{tikzpicture} \draw[ fill gea Kreuzholzen = { scale fixed = 1, step equi* double = 6mm, style 1 = {fill=oc-green-6}, style 2 = {fill=oc-green-2}, style 3 = {fill=oc-lime-2}, style 4 = {fill=oc-lime-6}, style 5 = {fill=oc-orange-9}, style 6 = {fill=oc-orange-6}, style 7 = {fill=oc-red-6}, style 8 = {fill=oc-red-9}, }] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \end{docTikzKeys} \begin{docTikzKeys} { { doc name = fill gea Grafenhaun, doc parameter = {=\marg{options}}, doc description = {initially unset}, doc new = 2026-03-25, } } The basic item shape of this template is a hexagon divided into four pentagons (or two pentagons and two tetragons). \refKey{/tikz/geomarray/style 1}, \refKey{/tikz/geomarray/style 2}, \refKey{/tikz/geomarray/style 3}, and \refKey{/tikz/geomarray/style 4} are used for the four parts.\par The optimal congruence of the parts is found with \refKey{/tikz/geomarray/step equi* half}, but other relations between xstep and ystep also produce pleasing results. \begin{dispExample*}{gea-example} % \usepackage{opencolor} \begin{tikzpicture} \draw[ fill gea Grafenhaun = { step equi* half = 12mm, scale fixed = 1, style 1 = {draw,fill=oc-red-4}, style 2 = {draw,fill=oc-yellow-4}, style 3 = {draw,fill=oc-orange-4}, style 4 = {draw,fill=oc-pink-4}, }] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \begin{dispExample*}{gea-example} % \usepackage{opencolor} \begin{tikzpicture} \draw[ fill gea Grafenhaun = { step equi = 10mm, scale fixed = 1, init-row< = \TFRowColorLet{mycolor}{oc-lime-4}{oc-orange-4}, style 1 = {fill=mycolor}, style 2 = {fill=mycolor!75!white}, style 3 = {fill=mycolor!75!gray}, style 4 = {fill=mycolor!75!black}, }] (0,0) rectangle (4,4); \end{tikzpicture} \end{dispExample*} \end{docTikzKeys} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \clearpage \printindex \end{document}