summaryrefslogtreecommitdiff
path: root/graphics/pgf/contrib/tikzpeople/tikzpeople.tex
diff options
context:
space:
mode:
Diffstat (limited to 'graphics/pgf/contrib/tikzpeople/tikzpeople.tex')
-rw-r--r--graphics/pgf/contrib/tikzpeople/tikzpeople.tex429
1 files changed, 429 insertions, 0 deletions
diff --git a/graphics/pgf/contrib/tikzpeople/tikzpeople.tex b/graphics/pgf/contrib/tikzpeople/tikzpeople.tex
new file mode 100644
index 0000000000..544217778e
--- /dev/null
+++ b/graphics/pgf/contrib/tikzpeople/tikzpeople.tex
@@ -0,0 +1,429 @@
+%% Copyright 2016 Nils Fleischhacker
+%%
+%% 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 `maintained'.
+%%
+%% The Current Maintainer of this work is Nils Fleischhacker.
+%%
+%% This work consists of the files tikzpeople.tex, tikzpeople.sty,
+%% tikzpeople.shape.alice.sty, tikzpeople.shape.bob.sty,
+%% tikzpeople.shape.bride.sty, tikzpeople.shape.builder.sty,
+%% tikzpeople.shape.businessman.sty, tikzpeople.shape.charlie.sty,
+%% tikzpeople.shape.chef.sty, tikzpeople.shape.conductor.sty,
+%% tikzpeople.shape.cowboy.sty, tikzpeople.shape.criminal.sty,
+%% tikzpeople.shape.dave.sty, tikzpeople.shape.graduate.sty,
+%% tikzpeople.shape.groom.sty, tikzpeople.shape.guard.sty,
+%% tikzpeople.shape.jester.sty, tikzpeople.shape.judge.sty,
+%% tikzpeople.shape.mexican.sty, tikzpeople.shape.nun.sty,
+%% tikzpeople.shape.nurse.sty, tikzpeople.shape.physician.sty,
+%% tikzpeople.shape.pilot.sty, tikzpeople.shape.police.sty,
+%% tikzpeople.shape.priest.sty, tikzpeople.shape.sailor.sty,
+%% tikzpeople.shape.santa.sty and tikzpeople.shape.surgeon.sty
+\documentclass{ltxdoc}
+\usepackage[demo]{tikzpeople}
+\usepackage[OT1]{fontenc}
+\usepackage{hyperref}
+\usepackage{microtype}
+\usepackage{xspace}
+\usepackage[most]{tcolorbox}
+\usepackage[title]{appendix}
+\usetikzlibrary{shapes.callouts}
+
+\newcommand*{\Appendixautorefname}{Appendix}
+
+
+\pgfdeclarelayer{background}
+\pgfsetlayers{background,main}
+\selectcolormodel{cmyk}
+
+\newcommand{\tikzname}{Ti\emph{k}Z\xspace}
+
+\newcommand{\varg}[1]{%
+ {\ttfamily\char`\{}#1{\ttfamily\char`\}}}
+\newcommand{\DescribeOption}[1]{\leavevmode
+ \marginpar{\raggedleft\strut\MacroFont\string #1\ }}
+
+\lstdefinestyle{example}{style=tcblatex,
+ classoffset=0,
+ texcsstyle=*\color{blue},%
+ deletetexcs={begin,end},
+ moretexcs={,%
+ pgfdeclarehorizontalshading,pgfuseshading,node,
+ useasboundingbox,draw}%
+ classoffset=1,
+ keywordstyle=\color{blue},%
+ morekeywords={tikzpicture,shade,fill,draw,path,node,child,line,width,rectangle,minimum width,minimum size},
+ classoffset=0}
+
+\tcbset{%
+ fillbackground/.style={before lower pre={%
+ \tikzset{every picture/.style={execute at end picture={\begin{pgfonlayer}{background}
+ \fill[yellow!15]
+ ([xshift=-4mm,yshift=-4mm]current bounding box.south west) rectangle
+ ([xshift=4mm,yshift=4mm]current bounding box.north east);
+ \end{pgfonlayer}}}}}},
+ explicitpicture/.style={before lower=\begin{center},after lower=\end{center},fillbackground}}
+
+\newtcblisting{codeexample}[2][]{%
+ enhanced,frame hidden,
+ top=0pt,bottom=0pt,left=0pt,right=0pt,arc=0pt,boxrule=0pt,
+ colback=blue!15,
+ listing style=example,
+ sidebyside,text and listing,text outside listing,sidebyside gap=2mm,
+ lefthand width=#2,tikz lower,fillbackground,
+ #1}
+
+\title{\tikz{\node[graduate,shield,sword,minimum height=2cm]{}}\\The \textsf{tikzpeople} package}
+\author{Nils Fleischhacker}
+\date{}
+
+\begin{document}
+\maketitle
+
+\begin{abstract}
+ This package provides people shaped pgf-shapes to be used in \tikzname pictures.
+ Given that the the only thing this package does is providing new node shapes for \tikzname, it should probably be a \tikzname library.
+ It isn't, it's a package instead, so deal with it.
+
+ The package probably has many problems and is nowhere near optimal, but if you find it useful, feel free to use it anyway.
+\end{abstract}
+
+\section{Introduction}
+ Let me start with a word of warning:
+ The node-shapes defined by this package are heavily influenced by a type of clip art included in the \textsf{Microsoft Visio} software.
+ I am by no means an expert on copyright law and as such can make no claim under which circumstances using these shapes might infringe on Microsoft's copyright.
+ I do not expect that there are any problems, but be aware of this.
+ Let's consider this package an homage to the great design of those \textsf{Visio} clip arts and get on with our lives.
+ \subsection{Intended Usecase}
+ If you are confused about any of the packages design choices, the original use-case the package was written for might serve as an explanation.
+ The package was originally written to provide me with shapes of people to depict parties in cryptographic protocols and security definitions on beamer slides.
+ An example of this can be seen in \autoref{fig:protocolexample}.
+ \begin{figure}
+ \begin{tikzpicture}[font=\small]
+ \node[businessman,female,minimum size=1.5cm] (A) {};
+ \node[police,right=3cm of A,minimum size=1.5cm,mirrored] (B) {};
+ \node[anchor=north east] at (A.north west) (a2) {$(\mathsf{com},\mathsf{dec}) \gets \mathsf{Com}(a)$};
+ \node[anchor=south] at (a2.north) (a1) {$a\gets\{0,1\}$};
+ \node[anchor=south west] at (B.south east){$a \gets \mathsf{Opn}(\mathsf{com},\mathsf{dec})$};
+ \draw (A.35) edge[->] node[above] {$\mathsf{com}$} (B.145);
+ \node[anchor=south west] at (B.east |- B.180) {$b\gets\{0,1\}$};
+ \draw (A.0) edge[<-] node[above] {$b$} (B.180);
+ \draw (A.325) edge[->] node[above] {$\mathsf{dec}$} (B.215);
+ \draw (A.270) ++(0,-.5) node {$a\oplus b$} edge[<-] (A.270);
+ \draw (B.270) ++(0,-.5) node {$a\oplus b$} edge[<-] (B.270);
+ \end{tikzpicture}
+ \caption{A secure coin flipping protocol constructed from bit commitment.}
+ \label{fig:protocolexample}
+ \end{figure}
+ If this intended use-case does not resolve your confusion with any weird behavior or design choice, then chances are good that I made a mistake or just did not know any better.
+ If you spot a mistake or know how to do something in a saner way, shoot me a message to let me know.
+
+\subsection{Installation}
+ To install the package just drop the \textsf{tikzpeople.sty} file and all the shape files, i.e. \textsf{tikzpeople.shape.\meta{shapename}.sty}, somewhere \LaTeX can find them.
+ You might for example put them in your local \textsf{texmf} tree at \url{\textasciitilde/texmf/tex/latex/tikzpeople/}.
+ Alternatively simply drop all the files into the folder where your main \textsf{.tex} file resides.\footnote{Do not use a subfolder. While you can refer to the package itself in a hackish way using a relative path, \LaTeX wont be able to find the shape files.}
+
+\section{Usage}
+ To use the \textsf{tikzpeople} shapes, just write |\usepackage|\oarg{options}\varg{tikzpeople} somewhere in the preamble of your document.
+\subsection{Package Options}
+ The package has three global options.
+ \DescribeOption{draft}
+ Compiling a document with many \textsf{tikzpeople} nodes can be very slow.
+ This is especially true for some of the node shapes that make heavy use of \tikzname decorations.
+ To make documents compile faster during the drafting stage, the |draft| option is available.
+ In draft mode all \textsf{tikzpeople} nodes are only drawn as simple outlines.
+ \makeatletter
+ \let\listbackup\tikzpeople@shapelist
+ \@tikzpeople@drafttrue
+ \let\tikzpeople@alice@paint\relax
+ \let\tikzpeople@alice@painthair\relax
+ \let\tikzpeople@alice@paintshirtdetails\relax
+ \let\tikzpeople@alice@definecolors\relax
+ \let\tikzpeople@alice@definestyles\relax
+ \let\tikzpeople@alice@colors\relax
+ \tikzpeople@declareshape{alice}
+ \begin{codeexample}{3cm}
+\node[alice,minimum size=1.5cm] {Alice};
+ \end{codeexample}
+ \@tikzpeople@draftfalse
+ \let\tikzpeople@alice@paint\relax
+ \let\tikzpeople@alice@painthair\relax
+ \let\tikzpeople@alice@paintshirtdetails\relax
+ \let\tikzpeople@alice@definecolors\relax
+ \let\tikzpeople@alice@definestyles\relax
+ \let\tikzpeople@alice@colors\relax
+ \tikzpeople@declareshape{alice}
+ \let\tikzpeople@shapelist\listbackup
+ \makeatother
+
+ \DescribeOption{demo}
+ The |demo| option loads the package in demo mode, introducing additional commands.
+ These commands |\alltikzpeople| and |\tikzpeoplecolors| explained below are not meant for productive use.
+ They are useful for showcasing the available shapes with different node options and getting information for customizing colors.
+
+ \DescribeOption{nobeards}
+ The |nobeards| option removes all beards from \textsf{tikzpeople} nodes.
+ In particular, \textsf{tikzpeople} marked as evil no longer have goatees.
+ This option exists because I have been informed that having evil \textsf{tikzpeople} with goatees is very insensitive and discriminatory against people with goatees.
+ For a little bit of petty defiance, this option also removes Santa's beard.
+
+ \DescribeOption{saturated}
+ The \textsf{saturated} option causes all nodes to be rendered with saturated colors.
+ Standard nodes are rendered with somewhat washed out colors.
+ This works well on light backgrounds but can look weird on dark background.
+ The |saturated| option can also be used on individual nodes.
+
+\subsection{Available Shapes}
+ Once the package is loaded, any of the defined shapes can be used as the shape of any \tikzname node just like any other predefined shape.
+ \begin{codeexample}{3cm}
+\node[draw,rectangle,minimum size=1.5cm] at (0,2) {};
+\node[businessman,minimum size=1.5cm] at (0,0) {};
+ \end{codeexample}
+ However, it should be noted that in many respects the nodes behave quite differently from standard node shapes.
+ First, the nodes are drawn and filled, whether |draw| and |fill| are specified or not, because -- quite frankly -- if you do not want to draw the node, then the \textsf{tikzpeople} are quite useless to you.
+ Another area where the behavior might be unexpected to the experienced \tikzname user is concerning the node text.
+ \begin{codeexample}{3cm}
+\node[draw,rectangle,minimum size=1.5cm] at (0,2) {A Rectangle};
+\node[businessman,minimum size=1.5cm] (B) at (0,0) {A Businessman};
+\draw[gray,dotted] (B.north west) rectangle (B.south east);
+ \end{codeexample}
+ The text appears below the actual node, not within and the width of the text influence neither the drawn shape nor any of the border anchors.
+ The reason for this is that in the intended usecase, the node text -- if present at all -- is simply a label and is not supposed to influence the size or behavior of the node.
+
+ Another oddity of the tikzpeople shapes is that the border anchors and size of the node only takes into consideration the underlying shape of a person, and nothing of the -- sometimes much larger -- stuff such as hats added by some of the shapes.
+ \begin{codeexample}{3cm}
+\node[person,minimum size=1.5cm] (B) at (0,4) {A Person};
+\draw[gray,dotted] (B.north west) rectangle (B.south east);
+\node[mexican,minimum size=1.5cm] (M) at (0,0) {A Mexican};
+\draw[gray,dotted] (M.north west) rectangle (M.south east);
+ \end{codeexample}
+ Again, the reason for this is that two shapes specified to have the same size, should behave like two people of same size.
+ If for example \texttt{minimum width} would take the actual width into consideration, then the Mexican would be much smaller than the person.
+
+ While all of these oddities are useful to me and in my specific usecase, they may cause problem for you in any number of ways.
+ So if you don't think you will be able to cope with them, I suggest you stop reading and look elsewhere for people-shaped \tikzname nodes.
+
+\subsection{The Available Shapes}
+ \DescribeMacro{\alltikzpeople} If the package is loaded with the |demo| option, all provided shapes can easily be viewed using the |\alltikzpeople|\allowbreak\marg{width}\allowbreak\marg{options} command.
+ The command takes two arguments.
+ The first argument specifies the |minimum size| of the drawn nodes in centimeters, the second argument is a comma separated list of options passed to each node.
+ The command then produces figures such as \autoref{fig:tikzpeoplefigure1} and \autoref{fig:tikzpeoplefigure2}, which were produces using the command |\alltikzpeople|\varg{1.5}\varg{}
+ \DescribeMacro{\alltikzpeople*} The starred version of the command does exactly the same but omits the name of the shapes.
+ \alltikzpeople{1.5}{}
+\subsection{General Node Options}
+ A number of options can be used to influence the appearance of \textsf{tikzpeople}.
+ These options are explained here in alphabetical order.
+ Not all nodes are affected by all options.
+ This is the case if the option is either simply not applicable or if I have not found a way to make is look not weird.
+
+ \DescribeOption{evil} The |evil| option is supposed to make nodes look more evil than usual.
+ For most tikzpeople this is accomplished by adding horns and a goatee.
+ \begin{codeexample}{3.2cm}
+\node[priest,minimum size=1cm,xshift=-1.2cm]{};
+\node[priest,evil,minimum size=1cm] {};
+ \end{codeexample}
+ This is especially useful to depict attackers in a cryptographic or security setting.
+ Unaffected by this option are: \texttt{guard,santa,devil}.
+ The color of the horns is controlled with the |horns| key.
+
+ \DescribeOption{female} The |female| option is supposed to make stereotypically male nodes look just a tad more feminine.
+ For most tikzpeople this is accomplished by adding longer hair and losing the beard -- though surprisingly, evil women still tend to have a goatee.
+ \begin{codeexample}{3.2cm}
+\node[conductor,minimum size=1cm,xshift=-1.2cm]{};
+\node[conductor,female,minimum size=1cm]{};
+ \end{codeexample}
+ This is useful to avoid being called sexist for not having women in you figures.
+ On the other hand people can now accuse you of enforcing gender stereotypes. So have fun.
+ Unaffected by this option are: \texttt{alice, bride, guard, judge, nun, pilot}.
+
+ \DescribeOption{good} The |good| option is supposed to make nodes look extraordinarily good.
+ For most tikzpeople this is accomplished by adding a halo.
+ \begin{codeexample}{3.2cm}
+\node[sailor,minimum size=1cm,xshift=-1.2cm]{};
+\node[sailor,good,minimum size=1cm]{};
+ \end{codeexample}
+ This could be useful to, e.g., depict a trusted party in a security context.
+ Unaffected by this option are: \texttt{guard, mexican, santa}.
+ The color of the halo is controlled with the |halo| key.
+
+ \DescribeOption{mirrored} The \textsf{mirrored} option makes nodes face to the left instead of the right.
+ \begin{codeexample}{3.2cm}
+\node[graduate,minimum size=1cm,xshift=-1.2cm]{};
+\node[graduate,mirrored,minimum size=1cm]{};
+ \end{codeexample}
+ I'm sure you will figure out the usefulness of this option on you own.
+
+ \DescribeOption{monitor} The \textsf{monitor} option draws a monitor in front of the node.
+ \begin{codeexample}{4cm}
+\node[judge,minimum size=1cm,xshift=-1.2cm]{};
+\node[judge,monitor,minimum size=1cm]{};
+ \end{codeexample}
+ This could be useful to emphasize that parties are actually using a computer and not doing complex computations in their head.
+
+ \DescribeOption{saturated} The \textsf{saturated} option causes the node to be rendered with saturated colors.
+ \begin{codeexample}{3.2cm}
+\node[pilot,minimum size=1cm,xshift=-1.2cm]{};
+\node[pilot,saturated,minimum size=1cm]{};
+ \end{codeexample}
+ Standard nodes are rendered with somewhat washed out colors.
+ This works well on light backgrounds but can look weird on dark background.
+ The |saturated| option can also be used as a global package option.
+
+ \DescribeOption{shield} The \textsf{shield} option gives the node a shield.
+ \begin{codeexample}{4cm}
+\node[alice,minimum size=1cm,xshift=-1.2cm]{};
+\node[alice,shield,minimum size=1cm]{};
+ \end{codeexample}
+ This could be useful to symbolize that a party is defending something and combines well with the |sword| option.
+ The colors of the shield are controlled using the keys |shieldmid|, |shieldedge|, and |shieldrivets|.
+
+ \DescribeOption{sword} The \textsf{sword} option gives the node a sword.
+ \begin{codeexample}{4cm}
+\node[dave,minimum size=1cm,xshift=-1.2cm]{};
+\node[dave,sword,minimum size=1cm]{};
+ \end{codeexample}
+ This could be useful to symbolize that a party is attacking or defending something and combines well with the |shield| option.
+ The colors of the sword are controlled using the keys |swordblade|, |swordguard|, |swordpommel|, and |swordgrip|.
+
+ All of these options can be arbitrarily combined. So, e.g., |good| \textsf{tikzpeople} can very well be |evil| at the same time.
+ \begin{codeexample}{4cm}
+\node[chef,evil,female,good,mirrored,monitor,
+ saturated,shield,sword,minimum size=1.5cm]{};
+ \end{codeexample}
+\subsection{Color Options}
+ Almost all the colors used in the \textsf{tikzpeople} shapes can be specified separately.
+ So if you feel, that you do not need a simple priest, but a cardinal instead, just take the priest, make the shirt and hat red and give him gray hair and we have a decent approximation of a cardinal.\footnote{In my defense, I'm not catholic, so I might be missing something crucial about cardinals. Rest assured that I meant no disrespect.}
+ \begin{codeexample}{3cm}
+\node[priest, shirt=red, hat=red, hair=gray, minimum size=1.5cm]{};
+ \end{codeexample}
+ Similarly, maybe what we actually need is a monk.\footnote{Again, I do not know much about monks...}
+ \begin{codeexample}{3cm}
+\node[priest,shirt=brown, hat=skin, cross=gray, collar=brown, minimum size=1.5cm]{};
+ \end{codeexample}
+ What I'm trying to get across is, using changes in coloring, we get tons of additional options for different kinds of \textsf{tikzpeople} we can draw.
+
+ \DescribeMacro{\tikzpeoplecolors} If the package is loaded with the |demo| option, you can use the command |\tikzpeoplecolors|\marg{shapename} to produce a figure giving you an idea, which color keys can be used for which shape.
+ For your convenience, all of those figures are included in \autoref{app:colors}.
+
+ \subsection{Text Options}
+ Some \textsf{tikzpeople} have include customizable text, such as the |businessman|'s monogram.
+ These texts can be specified with pgfkeys just as with the color options.
+ \vspace{.75em}
+ \begin{codeexample}{3cm}
+\path [clip] (0cm,1cm) rectangle (1.5cm,-1cm);
+\node[businessman, monogramtext=ER ,minimum size=5cm]{};
+ \end{codeexample}
+
+ \vspace{1em}
+
+ All texts are scaled to fit the available space. Specifying significantly longer text will therefore cause it to be unreadable.
+
+ \DescribeOption{monogramtext} The |monogramtext| option is available for |businessman| shapes and changes the text of the monogram.
+ While you can change the monogram to any arbitrary text, you should be aware that the monogram is rendered as |\mathcal| and anything except for uppercase letters will probably lead to unexpected results.
+
+ \DescribeOption{badgetext} The |badgetext| option is available for |nurse| shapes and changes the text printed on the badge.
+
+\subsection{Anchors}
+ \tikzset{shape example/.style={color=black!30, draw, fill=yellow!30, minimum size=3cm}}
+ \begin{figure}[htp]
+ \centering
+ \begin{tikzpicture}
+ \node[name=s,shape=businessman,minimum width=3cm,skin=yellow!30!,hair=black!30!,tie=black!30!,undershirt=yellow!30!,shirt=black!30!,monogram=black!30!] {Businessman\vrule width 1pt height 2cm};
+ \foreach \anchor/\placement in
+ {north west/above left, north/above, north east/above right,
+ west/left, center/above, east/right,
+ mid west/above left, mid/above, mid east/above right,
+ base west/left, base/below, base east/right,
+ south west/below left, south/below, south east/below right,
+ text/below left, 10/right, 20/right, 30/right, 40/right, 130/left,
+ 160/left, 190/left, mouth/above}
+ \draw[shift=(s.\anchor)] plot[mark=x] coordinates{(0,0)}
+ node[\placement] {\scriptsize\texttt{(s.\anchor)}};
+ \end{tikzpicture}
+ \caption{Anchors of a \texttt{businessman} tikzpeople shape.}
+ \label{fig:anchors1}
+ \end{figure}
+ \begin{figure}[htp]
+ \centering
+ \begin{tikzpicture}
+ \node[name=s,shape=guard,minimum width=3cm,skin=yellow!30!,hat=black!30!,lining=yellow!30!,details=yellow!30!,shirt=black!30!,collar=black!30!] {Guard\vrule width 1pt height 2cm};
+ \foreach \anchor/\placement in
+ {north west/above left, north/above, north east/above right,
+ west/left, center/above, east/right,
+ mid west/above left, mid/above, mid east/above right,
+ base west/left, base/below, base east/right,
+ south west/below left, south/below, south east/below right,
+ text/below left, 10/right, 20/right, 30/right, 40/right, 130/left,
+ 160/left, 190/left, mouth/above}
+ \draw[shift=(s.\anchor)] plot[mark=x] coordinates{(0,0)}
+ node[\placement] {\scriptsize\texttt{(s.\anchor)}};
+ \end{tikzpicture}
+ \caption{Anchors of a \texttt{guard} tikzpeople shape.}
+ \label{fig:anchors2}
+ \end{figure}
+ Basically all standard anchors for nodes exist also for tikzpeople nodes.
+ However, as mentioned before, most of them are not influenced by the node text.
+ Basically the only anchors that depend on the node text are the |text|, |base|, and |mid| anchors.
+ Furthermore, the anchors only take into account the basic shape of the person, not any of the -- possibly much larger -- additions such as hats.
+ As a reference, \autoref{fig:anchors1} and \autoref{fig:anchors2} show all the anchors of |businessman| and |guard| nodes.
+
+ A special anchor is the |mouth| anchor. In conjunction with \tikzname's |callout| shapes this anchor allows to easily depict talking \textsf{tikzpeople}..
+ \begin{codeexample}{4.6cm}
+\node[name=a,shape=police,minimum size=1cm,xshift=-1.25cm] {};
+\node[name=b,shape=criminal,minimum size=1cm,mirrored,xshift=1.25cm] {};
+\node[ellipse callout, draw,yshift= .3cm, callout absolute pointer={(a.mouth)}, font=\tiny] {Hey!};
+\node[ellipse callout, draw, yshift=-.3cm, callout absolute pointer={(b.mouth)}, font=\tiny] {What?};
+ \end{codeexample}
+
+\subsection{Messing with PGF Internals}
+When using several of the |decoration| heavy \textsf{tikzpeople}, the package runs into errors in the internals of |pgf|.
+Namely into ``Dimension to large'' errors in the |\pgfmath@function@veclen| command.
+Apparently this happens because we are working with numbers that are too small.
+As per this \TeX-stackexchange answer \url{http://tex.stackexchange.com/a/20888/15636}, \textsf{tikzpeople} redeclares |\pgfmath@function@veclen| with a fixed version.
+
+
+\clearpage
+\begin{appendices}
+ \section{Color Options}
+ \label{app:colors}
+ \tikzpeoplecolors{alice}
+ \vfill\tikzpeoplecolors{bob}
+ \vfill\tikzpeoplecolors{bride}
+ \vfill\tikzpeoplecolors{builder}
+ \vfill\tikzpeoplecolors{businessman}
+ \vfill\tikzpeoplecolors{charlie}
+ \vfill\tikzpeoplecolors{chef}
+ \vfill\tikzpeoplecolors{conductor}
+ \vfill\tikzpeoplecolors{cowboy}
+ \vfill\tikzpeoplecolors{criminal}
+ \vfill\tikzpeoplecolors{dave}
+ \vfill\tikzpeoplecolors{devil}
+ \vfill\tikzpeoplecolors{duck}
+ \vfill\tikzpeoplecolors{graduate}
+ \vfill\tikzpeoplecolors{groom}
+ \vfill\tikzpeoplecolors{guard}
+ \vfill\tikzpeoplecolors{jester}
+ \vfill\tikzpeoplecolors{judge}
+ \vfill\tikzpeoplecolors{maninblack}
+ \vfill\tikzpeoplecolors{mexican}
+ \vfill\tikzpeoplecolors{nun}
+ \vfill\tikzpeoplecolors{nurse}
+ \vfill\tikzpeoplecolors{physician}
+ \vfill\tikzpeoplecolors{pilot}
+ \vfill\tikzpeoplecolors{police}
+ \vfill\tikzpeoplecolors{priest}
+ \vfill\tikzpeoplecolors{sailor}
+ \vfill\tikzpeoplecolors{santa}
+ \vfill\tikzpeoplecolors{surgeon}
+ \end{appendices}
+\end{document}
+