% \iffalse  meta-comment
% !TEX encoding = UTF-8 Unicode
% !TEX program  = pdfLaTeX
%
%
%<*internal>
\iffalse
%</internal>
%<*readme>

tikzsymbols
===========

Overview
--------

The *tikzsymbols* package v4.12a (2021/12/14) contains symbols created using tikz.

This package provides: 
 * various emoticons
 * cooking symbols
 * trees
 * other symbols (e.g. Penrose-Triangle (Triban), chair, coffeecup, etc.)
 * some tools to create your own tikzsymbol

FAQ
-------
See documentation


Changes
-------
* v1.6  Several bugs fixed and some options added.
* v1.7  New symbols and some `bugs` fixed
* v2.0
  - Bug fixed, now option `tree=on/off` is working again, 
  - new symbols: `\Triban`, improved BasicTree code.
  - New option: `marvsoym` (see documentation for more details).
* v2.2
  - Included `\@ifpackageloaded`, now symbols can have negative scale,
  - Did something else, I can't remember.
* v2.25  Changed some code
* v2.5
  - New option: `draftabsolute` (symbols are replaced by text and LateX becomes faster again). Changed manual a bit. 
* v3.0
  - Symbols are stored inside a save-box and are used via `\usebox`, 
  - New option: `draft=absolute` (old option is still useable, but obsolete),
  - Changed output of `draft=absolute`,
  - New option: `prefix=<prefix>`, adds a `<prefix>` to all commands,
  - New option: `usebox=true/false` If false the symbols aren't stored inside a box,
  - See manual for more changes.
* v3.0a  New cooking-symbols: `\grater`, `\bottle`
* v3.0b  Deleted some non-ASCII characters.
* v3.0g
  - Removed a bug caused by me messing up with commands.
  - Removed package `calc` and replaced `\setlength` with `\pgfmathsetlength`
  - Reworked some code of the symbols.
  - Did not change the manual.
* v3.0h  Created a bug in the process of fixing the last bug, added the forgotten \\fi.
* v3.01alpha Copied the 2e code and started rewriting the code in LaTeX3.
* v3.38  Nearly finished rewriting.
* v3.40  Now everything is coded in LaTeX3.
* v3.40-v3.95 Various fixes and changes.
* v3.95  New emoticon `\(d)Changey`.
* v4.0  Finished reworking the code.
* v4.01
  - Added a known problem to the documentation.
  - New Symbol: `\rollingpin` (and of course the german equivalent `\Nudelholz`)
* v4.02
  - Added option `baseline=true/false` to fix a bug occurring with `todonotes`
  - New Symbols: `\cChangey` and `\dcChangey`
* v4.06
  - New Emoticon: `\(d)Sleepey`.
  - New Emoticon: `\SchrodingersCat`.
  - New option: `global-scale`.
  - New option: `symbol-scale`.
  - `\tikzsymbolsset` now raises a warning if a load-time option is used.
  - Some minor fixes.
* v4.07 Option `usebox` is now usable during the document.
* v4.10 
  - Added FAQ.
  - All files are now derived from the .dtx file.
  - New option: `append-style`.
  - New option: `remember-picture`.
  - Internal change: `baseline`.
  - Deleted invisible sign.
  - New symbolpair: `\Knoblauchpresse` and `\garlicpress`.
  - Option `draft` and `final` now set the internal draft boolean locally.
  - Reworked sizes of the plain vanilla draft boxes.
* v4.10a Bugfix: Forgot to remove colors from `\Strichmaxerl`
* v4.10b Bugfix: Replace deprecated `\c_zero` by `0`
* v4.10c Bugfix: Added dimension to `xshift` and `yshift` for `\Fire`, `\Candle` and `\(d)Laughey`
* v4.12
  - New (public) command to define symbols: `\tikzsymbolsdefinesymbol`
  - Some other auxiliary functions `\tikzsymbolsprovideandusesavebox`, `\tikzsymbolssetscaleabs`, `\tikzsymbolsscaleabs`.
  - Continuing with `\tikzsymbols_create_draftbox:nn`, `\tikzsymbols_create_squared_draftbox:n` and `\l_tikzsymbols_if_opt_draft_bool`
  - New symbols: `\Heart` and `\dHeart`
  - New symbol: `\Maskey`
* v4.12a
  - Fixing `final` option.

Requirements 
------------

 * expl3 & xparse
 * tikz
 * xcolor
 * xspace
 * l3keys2e


This file contains
------------------

 * README
 * tikzsymbols.pdf
 * tikzsymbols.dtx
 * tikzsymbols.ins

License
-------
This material is subject to the LATEX Project Public License 1.3c. See

  https://www.latex-project.org/lppl/

for the details of that license.

%</readme>
%<*internal>
\fi
\def\nameofplainTeX{plain}
\ifx\fmtname\nameofplainTeX\else
  \expandafter\begingroup
\fi
%</internal>
%<*install>
\input l3docstrip.tex
%\keepsilent
\askforoverwritefalse
\preamble

 Copyright (C) 2013--2021 by Ben Vitecek (current Maintainer)
 
 This work may be distributed and/or modified under the
 conditions of the LaTeX Project Public License, either version 1.3c
 of this license or (at your option) any later version.
 The latest version of this license is in
   https://www.latex-project.org/lppl/
 and version 1.3c or later is part of all distributions of LaTeX
 version 2005/12/01 or later.
 
 This work has the LPPL maintenance status `maintained'.

 This work consists of the files README.md, tikzsymbols.dtx, 
 tikzsymbols.ins and the derived files tikzsymbols.sty.

\endpreamble
%\postamble

%\endpostamble
\usedir{tex/latex/tikzsymbols}
\generate{
  \file{\jobname.sty}{\from{\jobname.dtx}{package}}
}
%</install>
%<install>\endbatchfile
%<*internal>
\usedir{source/latex/tikzsymbols}
\generate{
  \file{\jobname.ins}{\from{\jobname.dtx}{install}}
}
\nopreamble\nopostamble 
\usedir{doc/latex/tikzsymbols}
\generate{
  \file{README.md}{\from{\jobname.dtx}{readme}}
}
\ifx\fmtname\nameofplainTeX
  \expandafter\endbatchfile
\else
  \expandafter\endgroup
\fi
%</internal>
%<*driver> 
\documentclass[onlydoc,11pt,english]{l3doc} 
%: documentclass
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern} 
\usepackage{babel}
\usepackage{marvosym} 
%\usepackage{microtype}
\usepackage{longtable}
\usepackage{booktabs}
\usepackage{mathtools}
\usepackage{tikzsymbols} 
\usepackage{xparse}
\usepackage{marginnote}

\usepackage{cleveref}


\EnableCrossrefs 
\CodelineIndex 
\RecordChanges 
\AtEndDocument { \PrintChanges \PrintIndex }

\makeatletter
\ExplSyntaxOn


\newcommand\tikzsymbols{\Package{tikzsymbols}}

\NewDocumentCommand{\definedBasicTree} { O{1} m m m m }
  {
    \group_begin:
      \__tikzsymbols_Basic_Tree_off:nnnnn {#1} {#2} {#3} {#4} {#5}
    \group_end:
  }


\let\tikzsymbolscs\cs
\renewcommand\cs[1]
  {
    \tikzsymbolscs { \textcolor {blue} {#1} }
  }

\newcommand{\Package}{\pkg}
\newcommand{\Option}{\texttt}
\newcommand{\opt}{\texttt}
\newcommand{\Makro}{\cs}
\newcommand{\mycs}{\cs}
\newcommand{\makrouse}[1]{\use:c{#1}}
\newcommand{\Meta}[1]{\meta{#1}}

\colorlet{mybracegreen}{green!50!black}
\renewcommand\marg[1]{\textcolor{mybracegreen}{\texttt{\char`\{}}%
  \meta{#1}%
  \textcolor{mybracegreen}{\texttt{\char`\}}}%
}


\hfuzz=500pt
\vbadness=\maxdimen
\hbadness=\maxdimen


\cs_new:Npn \CreateExample #1#2
  {
    \tl_set_rescan:Nnn \l_tmpa_tl
      { 
        \char_set_catcode_other:N \{
        \char_set_catcode_other:N \}
      }
      {#2}
    \Makro{#1\textcolor{black}{\l_tmpa_tl}} \space \use:c {#1}#2
  }

\clist_new:N \printclist

\cs_new:Npn \MapinTable
  {
    \clist_use:Nn \printclist { }
  }

\clist_gset_eq:NN \printclist \g_tikzsymbols_list_of_printing_cooking_with_argument_commands_clist

\clist_if_exist:NF \printclist { \ERROR }

\newcommand{\loadtime}{\marginpar{load-time}}
\newcommand{\preamble}{\marginpar{preamble}}
\newcommand{\preload}{\marginpar{load-time and preamble}}



\NewDocumentEnvironment { myexample } { }
  {
    \medskip
    \noindent\textbf{Examples:}
  }{
  
  }
\NewDocumentEnvironment { mynote } { }
  {
    \medskip
    \noindent\textbf{Note:}%
  }{
  
  }

%\tikzsymbolsset { marvosym=true }


\ExplSyntaxOff
\makeatother



\begin{document}
\DocInput{\jobname.dtx} 
\end{document} 
%</driver> 
% \fi
% 
%
% \CharacterTable
%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
%   Digits        \0\1\2\3\4\5\6\7\8\9
%   Exclamation   \!     Double quote  \"     Hash (number) \#
%   Dollar        \$     Percent       \%     Ampersand     \&
%   Acute accent  \'     Left paren    \(     Right paren   \)
%   Asterisk      \*     Plus          \+     Comma         \,
%   Minus         \-     Point         \.     Solidus       \/
%   Colon         \:     Semicolon     \;     Less than     \<
%   Equals        \=     Greater than  \>     Question mark \?
%   Commercial at \@     Left bracket  \[     Backslash     \\
%   Right bracket \]     Circumflex    \^     Underscore    \_
%   Grave accent  \`     Left brace    \{     Vertical bar  \|
%   Right brace   \}     Tilde         \~}
%
%
%
%
% \iffalse meta-comment
%: Changes
% \fi
%
%
%
%
% \GetFileInfo{\jobname.sty}
%
% \iffalse meta-comment
%: DoNotIndex
% \fi
%
%\DoNotIndex {\begin{tikzpicture},\end{tikzpicture}}
%\DoNotIndex {\verb, \DeclareRobustCommandx}
%\DoNotIndex {=\verb}
%\DoNotIndex {\verb||}
%\DoNotIndex {\draw,\fill,\DeclareRobustCommand, \colorlet,\shade}
%\DoNotIndex {\xspace,\begin,\end}
%
%
%
%
% \begin{documentation}
%
% \title{The \Package{\jobname} package\thanks{This document corresponds to \textsf{\jobname}~\fileversion, dated~\filedate.}}
%
%\author{Ben Vitecek \\ 
%  \href{mailto:b.vitecek@gmx.at}{b.vitecek@gmx.at} \\
%  \href{https://github.com/Vidabe/tikzsymbols}{GitHub}
% } 
%
%^^A \date{August 19, 2017} 
%
% \maketitle{}
%
%
%
% \begin{abstract} \centering
%   Some symbols created using \Package{tikz}.
%
%   For differences between the releases 
%   see \cref{sec:important-changes}.
%
%   English is (still) not my native language so there (still) might be some
%   errors\footnote{They are -- of course -- on purpose (expect for 
%    \enquote{avaiable} (sic!)).} \Winkey.
% \end{abstract}
%
% \tableofcontents
%
%
% \section{Introduction}
% \label{sec:intro}
%
% \begin{comment}
% As far as I can remember this package is a result of me writing a cooking book.
% I wasn't able to find the symbols I wanted on CTAN and so I used \Package{tikz}
% and my (sadly) very humble skills to develop the predecessor
% called \Package{somesymbols}.  Developing and making symbols 
% was a lot of fun and suddenly I had (badly coded) Emoticons, cooking-symbols
% and other symbols. Somehow I got the idea of uploading them to CTAN
% and wrote
%
% Well, 
% \end{comment}
%
%
% As far as I can remember this package is the result of me writing a 
% cooking book\footnote{Well, it's one result, the other one is a cooking book.}.
% Back then I wasn't able to find the cooking symbols I wanted and 
% using time, \Package{tikz}, lot's of magic 
% (also known as \enquote{programming}, but only if the respective person
% knows what's going on) and a documentation in bad grammar\footnote{Not that it' now any better.} I somehow ended up with this package. 
% 
% During time \LaTeX3 became known to me and I started experimenting
% and programming in this (I would say due to its simplicity compared to \LaTeXe\
% far superior) language. Well, long story short: I was impressed. 
% And so the idea of writing my package in \LaTeX3 was born.
% 
% I finally took my time and started rewriting my code using \LaTeX3. 
% This process can be summarized as: \enquote{What \emph{does} this command?},
% \enquote{Why did I define \emph{this} command?} and 
% more generally \enquote{\emph{What} have I done?!}
% Well, let's hope my code (and grammar) is better this time\footnote{Looking at own risk.
%  You have been warned.}.
%
% Well \dots\ that's it, have fun!
%
%
%
% \section{Important changes}
% \label{sec:important-changes}
%
% The package should behave the same way as the \enquote{old} \LaTeXe\ release.
%
% \begin{description}
%  \item[2018] Option \opt{draft} and \opt{final} are now local.
%  \item[2017] Option \Option{usebox} can be used during the document.
%  \item[old]  The horribly named command
% \Makro{tikzsymbolsaftersymbolinput} is not defined anymore by this
% package. 
% Please use the new option \Option{after-symbol}, 
% in combination with the new command \Makro{tikzsymbolsset}, 
% see \cref{sec:options} for more information.
%  \item[very old]
% The option \Option{draft=absolute} is now
% obsolete and replaced by the much simpler option \Option{draft=true}.
% \end{description}
%
%
%^^A And a new Emoticon: \Makro{Changey} (and \Makro{dChangey}).
%
%
% \section{Options}
% \label{sec:options}
%
% ^^A All options but \Option{after-symbols} can be set as load-time
% ^^A options and can be given inside the optional argument of
% ^^A \Makro{usepackage}:
%
%
% Options can either be set as package options or using
% \Makro{tikzsymbolsset}. Some options can only be set as package
% options, those are described in \cref{sec:glob-opt}. 
%
% It is recommended to use the option \Option{draft=true} while
% working on the document.
%
% \begin{function}{\tikzsymbolsset}
%   \begin{syntax}
%     \Makro{tikzsymbolsset} \marg{keys = values}
%   \end{syntax}
%
%   Most keys, except
%   for the load-time options (\cref{sec:glob-opt}), can be
%   set using this command. 
%
%^^A   This command can only be used in the preamble and most keys, except
%^^A   for the load-time options (\cref{sec:glob-opt}), can be
%^^A   set using this command. 
% \end{function}
%
%
%
% \subsection{Load-time Options}
% \label{sec:glob-opt}
% 
% The following options \emph{cannot} be set using \Makro{tikzsymbolsset}.
%
% \subsubsection{marvosym (true/false)}
% \label{sec:marvosym}
% 
% \begin{syntax}
%   marvosym = true / false
% \end{syntax}
%
% Please load \tikzsymbols\
% \emph{after} \Package{marvosym}.
%
% \Package{marvosym} also defines \Makro{Smiley} and
% \Makro{Coffeecup}. If you prefer those symbols (\mvchr{169}, \mvchr{75}) over the
% \tikzsymbols\ ones (\Smiley, \Coffeecup) you can use this option. If set to true
% \Package{tikzsymbols} cancels the definition of its
% \Makro{Smiley} and \Makro{Coffeecup}:
%
% \begin{center}
%   \begin{tabular}{ c  c }
%     \toprule 
%     Without option \enquote{marvosym}: \Smiley \Coffeecup & With
%     option \enquote{marvosym}: \mvchr{169} \mvchr{75}\\ \midrule
%     \verb|\usepackage{marvosym}| & \verb|\usepackage{marvosym}|\\
%     \verb|\usepackage{tikzsymbols}| &
%     \verb|\usepackage[marvosym]{tikzsymbols}| \\
%     \bottomrule 
%   \end{tabular}
% \end{center}
%
% 
% This option raises an error if set \Option{true} without loading package \Package{marvosym}.
% 
% Can only be set as load-time option.
%
% You may also use the option \Option{prefix} (\cref{sec:prefix}).
%
%
% \subsubsection{prefix (\meta{string})}
% \label{sec:prefix}
% 
% This option takes a string as value:  \Option{prefix=\meta{string}} and
% adds this prefix to every command defined by this package. So
% setting \Option{prefix=\meta{prefix}} adds \meta{prefix} to all commands of
% this package: \Makro{\meta{prefix}command}.
%
%\meta{prefix} should neither contain
% any special characters (e.g., \"a, \"u, \ss, etc.) nor  spaces.
%
% By default it is empty, so no prefix is given, if this option is given
% without an argument \meta{prefix} is set to \Option{tikzsymbols}.
%
% Can only be set as a load-time option.
%
% For example:
%
% \begin{center}
%   \Makro{usepackage}[prefix=tikzsym]\{tikzsymbols\}
% \end{center}
%
% defines \Makro{Smiley} as \Makro{tikzsymSmiley}, \Makro{Kochtopf} as
% \Makro{tikzsymKochtopf}, \Makro{pot} as \Makro{tikzsympot}, etc.
%
% If you use this option or think about using this option the
% following command may be handy:
%
% \begin{function}{\tikzsymbolsuse}
%   \begin{syntax}
%     \Makro{tikzsymbolsuse}\marg{Symbolname}
%   \end{syntax}
%   This command takes the name of the symbol  \emph{without}
%   backslash and prints the symbol (or raises an error if the symbol
%   is not defined). Using this command you don't have to worry about
%   a \meta{prefix}, just write the command name and this command adds
%   automatically the given prefix to the command name.
%
% 
% \end{function}
%
%
%   \begin{myexample}
%
%  \CreateExample{tikzsymbolsuse}{{Smiley}[2]}
%
%  \CreateExample{tikzsymbolsuse}{{BasicTree}[1.2]{black}{red!50!black}{red}{leaf}}
%
%  \CreateExample{tikzsymbolsuse}{{Ofen}}
%
%  \CreateExample{tikzsymbolsuse}{{Fire}[-1.3]}
%
%
%   etc.
%   \end{myexample}
%
% \subsection{Normal Options}
% \label{sec:pream-opt}
% 
% Most of these options can be set either as a package-option or with
% \Makro{tikzsymbolsset}.
%
% \subsubsection{draft (true/false)}
% \label{sec:draft}
% 
% \begin{function}{draft}
%   \begin{syntax}
%     draft = \meta{true/false}
%   \end{syntax}
%
%   While  working on the document it is recommended to set this option
%   to \Option{true} because creating many symbols may takes some time
%   to compile and by setting this option to \Option{true} the symbols
%   are replaced by plain vanilla rectangles (with approximately the same height and width as
%   the symbols) which are faster to
%   create.
%
%  You can also set this option during the document.
%
%   The old option \Option{draft=absolute} is 
%   obsolete and should therefore not be used.
%
% \end{function}
%
% \subsubsection{final (true/false)}
% \label{sec:final}
% 
% \begin{function}{final}
%  \begin{syntax}
%    final= \meta{true/false}
%  \end{syntax}
%
% This key has the opposite behavior of the option \Option{draft}.
%
% It is a boolean key and therefore accepts only \Option{true} or
% \Option{false} and is set to \Option{true} by default. Setting it to
% \Option{true} prints all symbols normally. Setting it to
% \Option{false} prints plain vanilla draft-boxes instead which speeds
% up the compile-process.
%
% \end{function}
%
% 
%
%
% \subsubsection{tree (true/false/on/off)}
% \label{sec:tree}
% 
% \begin{function}{tree}
%  \begin{syntax}
%    tree= \meta{true/on/false/off}
%  \end{syntax}
%
% This key accepts \Option{true}, \Option{false} and furthermore
% \Option{on} and \Option{off} (for historical reasons). The latter do exactly the same as the
% first ones. 
%
% This option   has only an effect on the command \Makro{BasicTree}
% and its derivates (\Makro{Springtree}, \Makro{Summertree},
% \Makro{Autumntree} and \Makro{Wintertree}) and substitutes them with
% \Package{tikz} drawn boxes. 
%
% So while \Option{draft=true} replaces the output of \emph{all} commands with simple
% black boxes, \Option{tree=true/on} only replaces the output of
% \enquote{tree}-commands with boxes. 
%
% It is recommended to use \Option{draft=true}, but if you want you
% can  use this option.
%
% \end{function}
%
%
% 
%
% \subsubsection{after-symbol (\meta{string or command})}
% \label{sec:after-symbol}
% 
% \begin{function}{after-symbol}
%   Is more stable if set using \Makro{tikzsymbolsset}.
%   \begin{syntax}
%     after-symbol = \marg{string or command}
%   \end{syntax}
%   The value of this key is inserted after every command of this
%   package. By default it is set to \Makro{xspace}. 
%^^A This command is more robust
%^^A  if used with \Makro{tikzsymbolsset}
% \end{function}
% 
%
% \subsubsection{global-scale (\meta{number}) \\ 
%  symbol-scale (\meta{key-value list})}
% \label{sec:global-scale}
% 
% \begin{function}{global-scale, symbol-scale}
%   \begin{syntax}
%     global-scale = \marg{number}
%     symbol-scale = \marg{symbol-1=number-1, symbol-2=number-2,\dots}
%   \end{syntax}
%   \opt{global-scale} can be used to scale \emph{all} commands by given \meta{number}.
%
%   If only some specific symbols should be scaled, you may use the second option
%   and specify which symbol or symbols (name of the symbol without backslash) should be scaled.
%   Using the german name (if available) has the same effect as using the  english one.
%
%   \begin{mynote}
%     You can scale the symbols in this package in three different ways: The first 
%     is to scale \emph{all} symbols using \opt{global-scale}, the second is scaling
%     specific symbols using \opt{symbol-scale} and the third is by using the
%     optional argument provided by the symbols (which I call \opt{local-scale}; e.g.
%     \verb|\Smiley[2]|).
%     
%     The important thing is that those scaling methods \emph{do not cancel} each
%     other, but behave multiplicative.
%
%     If a local scale is given (e.g.\ \verb|\Smiley[2]|) with \opt{global-scale=3}
%     the resulting scaling will be $3\cdot 2=6$. Is furthermore this specific symbol
%     is also scaled (e.g. by $1.1$), the resulting scaling 
%     (for this symbol) will be $3\cdot 1.1 \cdot 2=6.6$.
%     \end{mynote}
%
% \end{function}
% 
%  \begin{myexample}
%  \verb|\tikzsymbolsset{symbol-scale={ Smiley= 1.5 }}|
%  \tikzsymbolsset{symbol-scale={ Smiley= 1.5 }}
%  \Smiley \\
%  \verb|\tikzsymbolsset{symbol-scale={ Smiley= 5 }}|
%  \tikzsymbolsset{symbol-scale={ Smiley= 5 }}
%  \Smiley \\
%  \verb|\tikzsymbolsset{symbol-scale={ Smiley= 2, Schneebesen=2.1 }}|
%  \tikzsymbolsset{symbol-scale={ Smiley= 2, Schneebesen=2.1 }}
%  \Smiley \Schneebesen \\
%  \verb|\tikzsymbolsset{global-scale=3,symbol-scale={ Smiley= 2, Schneebesen=2.1 }}|
%  \tikzsymbolsset{global-scale=3,symbol-scale={ Smiley= 2, Schneebesen=2.1 }}
%  \Smiley \Schneebesen
%  \end{myexample}
%
%   \begin{mynote}
%   Using \enquote{eggbeater} instead of \enquote{Schneebesen} 
%   does the same thing.
%   \end{mynote}
%
%
%
% \subsubsection{append-style (\meta{tikz' keyval})}
% \label{sec:append-style}
% 
% \begin{function}{append-style}
%   \begin{syntax}
%     append-style = \marg{tikz' keyval}
%   \end{syntax}
%
% With this option you can append \pkg{tikz}' \meta{keyval}
% to \pkg{tikzsymbols} internal style.
%
% \begin{mynote}
%  The style is called \verb|__tikzsymbols| and while the name
%  will probably not change, you are discouraged to use it directly
%  unless it is \emph{really} necessary (e.g.\ if I did something wrong).
% \end{mynote}
% \end{function}
%
%
% \subsubsection{usebox (true/false)}
% \label{sec:usebox}
% 
% \begin{function}{usebox}
%   \begin{syntax}
%     usebox = \marg{true/false}
%   \end{syntax}
% In \Package{tikzsymbols} all symbols are stored inside boxes
% (\Makro{sbox}) and while I still have no idea what exactly happens,
% it shortens the compilation time of the document. By
% default this option is \Option{true}. 
%
% The drawback is that \LaTeX\ has only a limited number of box
% registers. If you come across an error message regarding boxes try setting \Option{usebox=false}. 
% \end{function}
%
%
%
% \subsubsection{baseline (true/false)}
% \label{sec:baseline}
% 
% \begin{function}{baseline}
%   \begin{syntax}
%     baseline = \marg{true/false}
%   \end{syntax}
%   This option mainly exists to let the commands of this package work inside
%   \pkg{todonotes}' \cs{todo} command. If set to \Option{true} it adds to each 
%   symbol of this package
%   the tikz option \Option{baseline=default}. If you do not want this, set this option
%   to \Option{false}. It is set to \Option{true} by default.
% \end{function}
%
% \subsubsection{remember-picture (true/false)}
% \label{sec:rem-picture}
% 
% \begin{function}{remember-picture}
%   \begin{syntax}
%     remember-picture = \marg{true/false}
%   \end{syntax}
%   
%   Adds to each symbol created by this package the \pkg{tikz}
%   option \opt{remember picture=\meta{true/false}}. 
%  It is not added by default.
%
% \end{function}
%
%
%
%
%
%
%
% \section {Symbols}
%
%
% In this section the  symbols are introduced.
% { They \Kochtopf  \tiny all \dInnocey \Huge change \Moai \small automatically \Wintertree \large with \oven \normalsize  text-size \Strichmaxerl. }
%
%
%
%
%
%
% \subsection{Cooking-symbols \texorpdfstring{\Kochtopf}{Kochtopf}}
% 
% \begin{function} 
%   { 
%     \Kochtopf, 
%     \pot, 
%     \Bratpfanne, 
%     \fryingpan, 
%     \Schneebesen, 
%     \eggbeater, 
%     \Sieb, 
%     \sieve, 
%     \Purierstab,
%     \blender, 
%     \Dreizack, 
%     \trident, 
%     \Backblech, 
%     \bakingplate,
%     \Ofen, 
%     \oven, 
%     \Pfanne, 
%     \pan, 
%     \Herd, 
%     \cooker, 
%     \Saftpresse, 
%     \squeezer, 
%     \Schussel, 
%     \bowl, 
%     \Schaler, 
%     \peeler, 
%     \Reibe, 
%     \grater, 
%     \Flasche, 
%     \bottle,
%     \Nudelholz, 
%     \rollingpin ,
%     \Knoblauchpresse , \garlicpress
%   }
%     
%     The following table shows all available cooking-symbols and their
%     respective commands.
%     The first column shows the command-names (german \& english),
%     the second the optional parameter(s).  
%     The optional parameter(s) are for both the german and the
%     english commands the same.
%
%     \Meta{scale} can be a number between (not exactly) $-1400$ and
%     (also not exactly) $1400$, default is $1$.
%
%
%     Da Umlaute nicht in Befehlsnamen vorkommen dürfen, werden die Umlaute
%     \"o, \"a, \"u durch o, a, u ersetzt.
% 
% \begin{longtable}{l l c@{~~}c} 
%   \multicolumn{2}{l}{German \& English Commands} & Optional
%   parameter(s) & Output \\\toprule\endhead
%   \\ \bottomrule \endfoot
%  \MapinTable   
%  \bottomrule
% \end{longtable}
%
% 
%
%
% \end{function}
%
%
%
%
%\subsection{Emoticons \texorpdfstring{\Smiley}{Smiley}}
%
%\subsubsection{\enquote{Normal} Emoticons \texorpdfstring{\Cat}{Cat}}
%
%
%
% \begin{function}
%  {
%     \Smiley,
%     \Sadey,
%     \Neutrey,
%     \Changey,
%     \cChangey,
%     \Annoey,
%     \Laughey,
%     \Winkey,
%     \oldWinkey,
%     \Sey,
%     \Xey,
%     \Innocey,
%     \wInnocey,
%     \Cooley,
%     \Tongey,
%     \Nursey,
%     \Vomey,
%     \Walley,
%     \rWalley,
%     \Cat,
%     \SchrodingersCat,
%     \Ninja,
%     \Sleepey,
%     \NiceReapey
%  }
%
% First column shows the commands, the second the (optional)
% parameter(s), the third the default-output (the only command with
% a mandatory argument is \Makro{Changey}).
%
% \Meta{scale} can be a number between (not exactly) $-2000$ and (not
% exactly) $2000$, ^^A{Do you even need so large symbols?},
% default is $1$.
%
% \Meta{color} can be every defined color. Note: The color names
% shouldn't contain special characters like \ss, \"a, \"o, \dots
%
% \Makro{Changey}'s \Meta{mood} has to be between $-2$ and $2$
% ($1$ equals \Makro{Smiley}, $-1$ \Makro{Sadey} and $0$ \Makro{Neutrey}).
%
% \Makro{SchrodingersCat}'s \Meta{case} can either be $1$ (alive), $0$ (unknown)
% or $-1$ (dead).
%
% \begin{longtable}{llc} 
%   Commands & (Optional) parameter(s) & Output \\\toprule\endhead
%  
%  \bottomrule\endfoot
%  
%   
%   \Makro{Smiley}& \oarg{scale}\oarg{color} & \Smiley \\
%   \Makro{Sadey}& \oarg{scale}\oarg{color} & \Sadey \\
%   \Makro{Neutrey}& \oarg{scale}\oarg{color} & \Neutrey \\
%   \Makro{Changey}& \oarg{scale}\oarg{color}\marg{mood} & \Changey{2} \\
%   \Makro{cChangey}& \oarg{scale}\oarg{color1}\oarg{color2}\oarg{color3}\marg{mood} & \cChangey{2} \\
%   \Makro{Annoey}& \oarg{scale}\oarg{color} & \Annoey \\
%   \Makro{Laughey}& \oarg{scale}\oarg{color}\oarg{mouth color} & \Laughey \\
%   \Makro{Winkey}& \oarg{scale}\oarg{color} & \Winkey \\
%   \Makro{oldWinkey}& \oarg{scale}\oarg{color} & \oldWinkey \\
%   \Makro{Sey}& \oarg{scale}\oarg{color} & \Sey \\
%   \Makro{Xey}& \oarg{scale}\oarg{color} & \Xey \\
%   \Makro{Innocey}& \oarg{scale}\oarg{color}\oarg{halo color} & \Innocey \\
%   \Makro{wInnocey}& \oarg{scale} & \wInnocey \\
%   \Makro{Cooley}& \oarg{scale}\oarg{color} & \Cooley \\
%   \Makro{Tongey}& \oarg{scale}\oarg{color}\oarg{tongue color} & \Tongey \\
%   \Makro{Nursey}& \oarg{scale}\oarg{color}\oarg{cap color}\oarg{cross color} &\Nursey \\
%   \Makro{Vomey}& \oarg{scale}\oarg{color}\oarg{vomit color} & \Vomey \\
%   \Makro{Walley}& \oarg{scale}\oarg{color}\oarg{wall color} & \Walley \\
%   \Makro{rWalley}\marginnote{\enquote{r} for \enquote{random generated cracks}.}& \oarg{scale}\oarg{color}\oarg{wall color} & \rWalley \\
%   \Makro{Cat}& \oarg{scale}& \Cat \\
%   \Makro{SchrodingersCat}& \oarg{scale}\marg{case}& \SchrodingersCat{0} \\
%   \Makro{Ninja}& \oarg{scale}\oarg{color}\oarg{headband color}\oarg{eye color}& \Ninja \\
%   \Makro{Sleepey}& \oarg{scale}\oarg{color}\oarg{cap color}\oarg{star color}& \Sleepey \\
%   \Makro{Maskey}& \oarg{scale}\oarg{color}\oarg{mask color}& \Maskey \\
%   \Makro{NiceReapey} & \oarg{scale} & \NiceReapey \\
%    \bottomrule
% \end{longtable}
%
%
%
% \end{function}
%
% Examples: \CreateExample{Sadey}{[][red]}
%
% \CreateExample{Cooley} {[-3][cyan]}
% 
% \CreateExample{Vomey}{[1.5][green!80!black][olive]}
% 
% \CreateExample{Nursey}{[][yellow][blue][red]}.
% 
% \CreateExample{Ninja}{[1.3][][violet][red]}.
% 
% \verb|\colorbox{yellow}{\Winkey \Annoey[-1]\Neutrey}|\colorbox{yellow}{\Winkey \Annoey [-1]\Neutrey}
% 
% \verb|\textcolor{blue}{\Sey}| \textcolor{blue}{\Sey}
%
% \CreateExample{Sleepey} {[1][white][blue][yellow!95!black]}
%
% \CreateExample{SchrodingersCat} {{1}} \par
% \CreateExample{SchrodingersCat} {{0}}\par
% \CreateExample{SchrodingersCat} {{-1}}
%
% \CreateExample{Changey} {{-2}}
% \CreateExample{Changey} {{-1.367}}
% \CreateExample{Changey} {{-1}}
% \CreateExample{Changey} {{0}}
% \CreateExample{Changey} {{1}}
% \CreateExample{Changey} {{1.41}}
% \CreateExample{Changey} {{2}}
%
% \CreateExample{cChangey} {{2}}
% \CreateExample{cChangey} {{1}}
% \CreateExample{cChangey} {{0.5}}
% \CreateExample{cChangey} {{0.1}}
% \CreateExample{cChangey} {{0}}
% \CreateExample{cChangey} {{-0.5}}
% \CreateExample{cChangey} {{-1}}
% \CreateExample{cChangey} {{-2}}
%
% \CreateExample{cChangey} {[][][blue]{-1}}
% \CreateExample{cChangey} {[][][blue]{0.5}}
%
% If you intent to change the color of \cs{cChangey} you may define a new command
% so that you do not have to write those brackets each time.
%
%
% \subsubsection{\enquote{3D} Emoticons \texorpdfstring{\dSmiley\dSadey[-1]}{dSmiley dSadey}}
%
%
% \begin{function}
%   {
%     \dSmiley,
%     \dSadey,
%     \dNeutrey,
%     \dChangey,
%     \dcChangey,
%     \dAnnoey,
%     \dLaughey,
%     \dWinkey,
%     \dSey,
%     \dXey,
%     \dInnocey,
%     \dCooley,
%     \dNinja,
%     \drWalley,
%     \dWalley,
%     \dVomey,
%     \dNursey,
%     \dTongey,
%     \dSleepey,
%     \olddWinkey
%   }
%
%
%
% First column shows the commands (note: the \enquote{3D} Emoticons
% begin with \Makro{d\dots}), the second shows the (optional)
% parameter(s), the third shows the default-output (the only command
% with a mandatory argument is \Makro{dChangey}).
%
% \Meta{scale} can be a number between a small number (under
% $-500$ for sure) and a large number (over 500 for sure),
% default is $1$.
% 
% \Meta{color} can be every defined color (see examples below). Note:
% The color names shouldn't contain special characters like \ss, \"a,
% \"o, \dots
%
% \Makro{Changey}'s \meta{mood} has to be between $-2$ and $2$
% ($1$ equals \Makro{dSmiley}, $-1$ \Makro{dSadey} and $0$ \Makro{dNeutrey}).
%
% \begin{longtable}{llc}
%   Commands & Optional parameter(s) & Output \\\toprule\endhead
%  
%  \bottomrule\endfoot
%   
%   \Makro{dSmiley}& \oarg{scale}\oarg{color} & \dSmiley \\
%   \Makro{dSadey}& \oarg{scale}\oarg{color} & \dSadey \\
%   \Makro{dNeutrey}& \oarg{scale}\oarg{color} & \dNeutrey \\
%   \Makro{dChangey}& \oarg{scale}\oarg{color}\marg{mood} & \dChangey{2} \\
%   \Makro{dcChangey}& \oarg{scale}\oarg{color1}\oarg{color2}\oarg{color3}\marg{mood} & \dcChangey{2} \\
%   \Makro{dLaughey}& \oarg{scale}\oarg{color}\oarg{mouth color} & \dLaughey \\
%   \Makro{dAnnoey}& \oarg{scale}\oarg{color} & \dAnnoey \\
%   \Makro{dWinkey}& \oarg{scale}\oarg{color} & \dWinkey \\
%   \Makro{olddWinkey}& \oarg{scale}\oarg{color} & \olddWinkey \\
%   \Makro{dSey}& \oarg{scale}\oarg{color} & \dSey \\
%   \Makro{dXey}& \oarg{scale}\oarg{color} & \dXey \\
%   \Makro{dInnocey}& \oarg{scale}\oarg{color}\oarg{halo color} & \dInnocey \\
%   \Makro{dCooley}& \oarg{scale}\oarg{color} & \dCooley \\
%   \Makro{dTongey}& \oarg{scale}\oarg{color}\oarg{tongue color} & \dTongey \\
%   \Makro{dNursey}& \oarg{scale}\oarg{color}\oarg{cap color}\oarg{cross color} & \dNursey \\
%   \Makro{dVomey}& \oarg{scale}\oarg{color}\oarg{vomit color} & \dVomey \\
%   \Makro{dWalley}& \oarg{scale}\oarg{color}\oarg{wall color} & \dWalley  \\
%   \Makro{drWalley}\marginnote{\enquote{r} for \enquote{random generated cracks}.}& \oarg{scale}\oarg{color}\oarg{wall color}& \drWalley \\
%   \Makro{dNinja}& \oarg{scale}\oarg{color}\oarg{headband color}\oarg{eye color} & \dNinja  \\
%   \Makro{dSleepey}& \oarg{scale}\oarg{color}\oarg{cap color}\oarg{star color}& \dSleepey \\
%    \bottomrule
% \end{longtable}
%
% \end{function}
%
%
% Examples:
% \CreateExample{dSadey}{[][red]}
%
% \CreateExample{dCooley}{[-3][cyan]}
% 
% \CreateExample{dVomey}{[1.5][green!70!black][olive]}
% 
% \CreateExample{dNursey}{[][yellow][blue][red]}.
% 
% \CreateExample{dNinja}{[1.3][][violet][red]}.
%
% \CreateExample{dChangey} {{-2}}
% \CreateExample{dChangey} {{-1.367}}
% \CreateExample{dChangey} {{-1}}
% \CreateExample{dChangey} {{0}}
% \CreateExample{dChangey} {{1}}
% \CreateExample{dChangey} {{1.41}}
% \CreateExample{dChangey} {{2}}
%
%
% \CreateExample{dcChangey} {{2}}
% \CreateExample{dcChangey} {{1}}
% \CreateExample{dcChangey} {{0.5}}
% \CreateExample{dcChangey} {{0.1}}
% \CreateExample{dcChangey} {{0}}
% \CreateExample{dcChangey} {{-0.5}}
% \CreateExample{dcChangey} {{-1}}
% \CreateExample{dcChangey} {{-2}}
%
% \CreateExample{dcChangey} {[][][blue]{-1}}
% \CreateExample{dcChangey} {[][][blue]{0.5}}
%
% If you intent to change the color of \cs{dcChangey} you may define a new command
% so that you do not have to write those brackets each time.
%
% \subsection{Other Symbols \texorpdfstring{\Moai}{Moai}}
%
% \begin{function}
%   {
%     \Strichmaxerl,
%     \Heart,
%     \dHeart,
%     \Candle,
%     \Fire,
%     \Coffeecup,
%     \Chair,
%     \Bed,
%     \Tribar,
%     \Moai,
%     \Snowman
%   }
%
% \Makro{Strichmaxerl}'s optional parameters 2--5 (\Meta{left arm} to
% \Meta{right leg}) can be a number
% between $-360$ and $360$ (of course the number can be even
% greater or even smaller.). The parameters are
% the angles between the body  and the separate parts of
% \Makro{Strichmaxerl} (see examples).
%
% \Meta{scale} can be a very great and a very small negative number (but I
% don't think, that you need so large symbols).
%
% \Meta{color} can be every defined color. Note: The color names
% shouldn't contain special characters like \ss, \"a, \"o, \dots.
%
% \begin{longtable}{llc}
%   Commands  & Optional parameter(s)  & Output \\\toprule\endhead
%  
%  \bottomrule\endfoot
%
%   \Makro{Strichmaxerl} & \oarg{scale}\oarg{left arm}\oarg{right arm}\oarg{left leg}\oarg{right leg}  &\Strichmaxerl\\
%   \Makro{Heart}& \oarg{scale}\oarg{color}& \Heart \\
%   \Makro{dHeart}& \oarg{scale}\oarg{color}& \dHeart \\
%   \Makro{Candle} & \oarg{scale} & \Candle\\
%   \Makro{Fire} & \oarg{scale} & \Fire\\
%   \Makro{Coffeecup} & \oarg{scale} & \Coffeecup\\
%   \Makro{Chair} & \oarg{scale} & \Chair\\
%   \Makro{Bed} & \oarg{scale} & \Bed\\
%   \Makro{Moai} & \oarg{scale} & \Moai\\
%   \Makro{Tribar} &\oarg{scale}\oarg{color 1}\oarg{color 2}\oarg{color 3} & \Tribar\\
%   \Makro{Snowman} &\oarg{scale} & \Snowman\\
%    \bottomrule
% \end{longtable}
% 
% 
% \end{function}
%
% \CreateExample{Tribar}{[-10][blue][red][green]}
% 
% \CreateExample{Tribar}{[2.1][blue][blue!50][blue!20]}
% 
% \vspace{1ex}
% 
% \CreateExample{Strichmaxerl}{[1][10][30][40][4]} , 
%
% \CreateExample{Strichmaxerl}{[1.4][210][310][10][90]} , 
% 
% \CreateExample{Strichmaxerl}{[2][510][110][190][990]} ,
%
% \CreateExample{Strichmaxerl}{[0.9][54][28][95][16]}
%
% \CreateExample{Strichmaxerl}{[][54][28]}
%
% \CreateExample{Strichmaxerl}{[][45][45][45][45]}
%
%
% \begin{function} 
%   {
%     \BasicTree ,
%     \Springtree ,
%     \Summertree ,
%     \Wintertree ,
%     \WorstTree ,
%   }
%
% \subsection{Trees \texorpdfstring{\BasicTree{blue!60!black}{red}{green}{leaf}}{BasicTree}}\label{Trees}
%
% \Meta{scale} can be a number between (not exactly) $-900$ and (again
% not exactly) $900$, default is
% $1$.
%
% \Meta{color} can be every defined color (see examples below). Note:
% The color names shouldn't contain special characters like \ss, \"a,
% \"o, \dots.
%
% \marg{leaf} uses the colors of \marg{leaf color a}
% and \marg{leaf color b}, you can leave this one empty if you don't
% want leaves (\verb|\Wintertree| is without \emph{leaf}, see examples
% below).
%
% If you are using those trees, \LaTeX{} needs longer to produce the
% output.  So you may use the package option \Option{tree=off},
% or (better) \Option{draft=true} (see section
% \cref{sec:draft} and \cref{sec:tree}) to make \LaTeX{} faster.
%
% Furthermore those trees are pretty much stolen from the 
% \Package{tikz} manual.
%
% \begin{center}
% \begin{tabular}{@{}llc@{}}
%   Commands & Optional/Needed parameter(s) & Output
%   \\\toprule
%  
%
%   \Makro{BasicTree} & \oarg{scale}\marg{trunk color}\marg{leaf color a}\marg{leaf color b}\marg{leaf} & see below \\
%
%   \Makro{Springtree} & \oarg{scale} & \Springtree \\
%   \Makro{Summertree} & \oarg{scale} & \Summertree \\
%   \Makro{Autumntree} & \oarg{scale} & \Autumntree \\
%   \Makro{Wintertree} & \oarg{scale} & \Wintertree  \\
%   \Makro{WorstTree} & \oarg{scale} & \WorstTree  \\
%   \bottomrule
% \end{tabular}
% \end{center}
%
% \end{function}
%
% \paragraph{\Makro{BasicTree} examples} Some \enquote{normal} trees:
% 
% \verb|\colorbox{green}{\BasicTree{red}{orange}{yellow}{leaf}}|\colorbox{green}{\BasicTree{red}{orange}{yellow}{leaf}}
% 
% \CreateExample{BasicTree}{[5]{orange!95!black}{orange!80!black}{orange!70!black}{leaf}}
%  
% \CreateExample{BasicTree}{[2]{blue!65!white}{cyan!50!white}{cyan!50!white}{}}
% 
% \CreateExample{BasicTree}{[-1.54]{green!20!black}{green!50!black}{green!70!black}{leaf}}
% 
% \verb|\colorbox{black}{\BasicTree[3.75]{gray!80}{gray!50}{gray!40}{leaf}}| 
% \colorbox{black}{\BasicTree[3.75]{gray!80}{gray!50}{gray!40}{leaf}}
%
% \paragraph{draftbox \Makro{BasicTree} examples} Some \enquote{draftbox} trees
% (using \Option{tree=false}):
% 
% \dots and using the same trees with \Option{tree=off/false} or \Option{draft}(\Option{=true}): 
% 
% \verb|\colorbox{green}{\BasicTree{red}{orange}{yellow}{leaf}}| 
% \colorbox{green}{\definedBasicTree{red}{orange}{yellow}{leaf}}
%  
% \verb|\BasicTree[5]{orange!95!black}{orange!80!black}{orange!70!black}{leaf}| 
% \definedBasicTree[5]{orange!95!black}{orange!80!black}{orange!70!black}{leaf}
%  
% \verb|\BasicTree[2]{blue!65!white}{cyan!50!white}{cyan!50!white}{}|
% \definedBasicTree[2]{blue!65!white}{cyan!50!white}{cyan!50!white}{}
%  
% \verb|\BasicTree[-1.54]{green!20!black}{green!50!black}{green!70!black}{leaf}| 
% \definedBasicTree[-1.54]{green!20!black}{green!50!black}{green!70!black}{leaf}
%  
% \verb|\colorbox{black}{\BasicTree[3.75]{gray!80}{gray!50}{gray!40}{leaf}}| \colorbox{black}{\definedBasicTree[3.75]{gray!80}{gray!50}{gray!40}{leaf}}
% 
% \bigskip
%
% I think it's better if you define your own trees using \verb|\newcommand| and \verb|\BasicTree|:
%\begin{verbatim}
% \newcommand{\Myicetree}[1][1]{%
%   \BasicTree[#1]{blue!65!white}{cyan!50!white}{cyan!50!white}{}}
% \end{verbatim}
%
%
% \begin{comment}
% \section{Known errors \& Problems}
%
% \subsection*{marvosym}
% Make sure you load  \Package{marvosym} \emph{before}
% \Package{tikzsymbols} because both packages define \verb|\Smiley|,
% \Package{marvosym} via \verb|\newcommand| \tikzsymbols\ via
% \Makro{DeclareDocumentCommand}.
% 
% If you load \Package{marvosym} \emph{after} \tikzsymbols,
% \LaTeX{} generates an error-message because \verb|\Smiley| has
% already been defined.
%
% If you load \Package{marvosym} \emph{before} \tikzsymbols,
% \Package{tikzsymbols} will overwrite \Package{marvosym}'s Smiley (and Coffeecup) and no
% error-message is generated (if you like the \verb|\Smiley| from
% marvosym more, use the \tikzsymbols{} option \verb|marvosym|
% or \Option{prefix}).
%
% \subsection*{babel}
%
% If you encounter an error message like
% \begin{verbatim}
%   Argument of \pgffor@next has an extra }
% \end{verbatim}
% while using \pkg{babel} with e.g. language \enquote{francais}
% and for example \cs{Cooley} you may add
% \begin{verbatim}
%   \usetikzlibrary{babel}
% \end{verbatim}
% to your preamble. This should (hopefully) fix the problem. 
%
% \end{comment}
%
%
%
% \section{Create your own tikzsymbol}
%
% Suppose you have your own symbol, created in a tikzpicture (or something else). 
% This package offers some commands
% with whom you can create your own tikzsymbol 
% (including the benefits of using \opt{symbol-scale}, \opt{global-scale}, etc.).
%
% \subsection{tikzsymbols style}
%
% \begin{function}{/tikzsymbolsstyle}
%   \begin{syntax}
%    /tikzsymbolsstyle
%   \end{syntax}
% \pkg{tikzsymbols} defines it own \pkg{tikz}-style. A public version of it is available
% \emph{via} \emph{/tikzsymbolsstyle}.
%
% (Note: To change the internal style version use the option \Option{append-style}.
% Everything added to the internal version is also added to the public version.)
% \end{function}
%
%
% \subsection{Symbol Definition}
% \begin{function}{\tikzsymbolsdefinesymbol}
%    \begin{syntax}
%      \cs{tikzsymbolsdefinesymbol} \marg{symbol-name} \marg{argument-types} \marg{code}
%    \end{syntax}
%    This is the main command to define your symbol. 
%    \meta{symbol-name} is the name 
%    of your symbol (without backslash) and to-be command. 
%   \meta{code} is the place to put your |tikzpicture|.
%    \meta{argument-types} is somewhat similar to \pkg{xparse}'s 
%    system with some changes
%    and only three argument types available:
%    \begin{itemize}
%    \item |m| is for mandatory arguments (given in curly braces). 
%    \item |B{<default>}| specifies an optional argument that inserts |<default>| 
%    if the optional argument (given in square-brackets)
%    is not given \emph{or empty}.
%    \item |S| (for |S|cale) is the argument for scaling the symbol; 
%      the optional argument \oarg{scale} for each symbol is created by it.
%      The absolute value of the scaling can be accessed by \cs{tikzsymbolsscaleabs}.
%    \end{itemize}
% \end{function}
% 
%\paragraph{Example} Assume you have created the following picture:
%
% 
% \begin{verbatim}
%    \begin{tikzpicture}[/tikzsymbolsstyle]
%      \fill[fill=none] (0,1) -- (0.5,1.5) -- (1,1);
%      \filldraw[fill=none] (0,0) rectangle (1,1);
%      \draw (-0.11,0.9) -- (0.5,1.5) -- (1.11,0.9);
%      \draw[fill=none] (0.5,0)  rectangle (0.8,0.6);
%      \fill (0.72,0.3) circle [radius=0.02];
%    \end{tikzpicture}%
% \end{verbatim}
%
% Which prints:
%        \begin{tikzpicture}[/tikzsymbolsstyle]
%          \fill[fill=none] (0,1) -- (0.5,1.5) -- (1,1);
%          \filldraw[fill=none] (0,0) rectangle (1,1);
%          \draw (-0.11,0.9) -- (0.5,1.5) -- (1.11,0.9);
%          \draw[fill=none] (0.5,0)  rectangle (0.8,0.6);
%          \fill (0.72,0.3) circle [radius=0.02];
%        \end{tikzpicture}%
%
% Now you want three different parts to be filled with color: The house itself, the roof
% and the door, let's  use orange, red and teal:
%
% \begin{verbatim}
%    \begin{tikzpicture}[/tikzsymbolsstyle]
%      \fill[fill=red] (0,1) -- (0.5,1.5) -- (1,1);
%      \filldraw[fill=orange] (0,0) rectangle (1,1);
%      \draw (-0.11,0.9) -- (0.5,1.5) -- (1.11,0.9);
%      \draw[fill=teal] (0.5,0)  rectangle (0.8,0.6);
%      \fill (0.72,0.3) circle [radius=0.02];
%    \end{tikzpicture}%
% \end{verbatim}
%
%        \begin{tikzpicture}[/tikzsymbolsstyle]
%          \fill[fill=red] (0,1) -- (0.5,1.5) -- (1,1);
%          \filldraw[fill=orange] (0,0) rectangle (1,1);
%          \draw (-0.11,0.9) -- (0.5,1.5) -- (1.11,0.9);
%          \draw[fill=teal] (0.5,0)  rectangle (0.8,0.6);
%          \fill (0.72,0.3) circle [radius=0.02];
%        \end{tikzpicture}%
% Satisfied with this you put it into \cs{tikzsymbolsdefinesymbol} and make it to
% have three optional arguments (using the |B| type) to change the colors. 
% The default colors themselves are put into the argument of |B|:
%  \begin{verbatim}
%    \tikzsymbolsdefinesymbol {myHouse} { B{orange} B{red} B{teal} }
%      {%
%        \begin{tikzpicture}[/tikzsymbolsstyle]
%          \fill[fill=#2] (0,1) -- (0.5,1.5) -- (1,1);
%          \filldraw[fill=#1] (0,0) rectangle (1,1);
%          \draw (-0.11,0.9) -- (0.5,1.5) -- (1.11,0.9);
%          \draw[fill=#3] (0.5,0) -- (0.5,0.5) -- (0.8,0.5) -- (0.8,0) -- cycle;
%          \fill (0.75,0.25) circle [radius=0.02];
%        \end{tikzpicture}%
%      }
%  \end{verbatim}
%\tikzsymbolsdefinesymbol {myHouse} { B{orange} B{red} B{teal} }
%  {%
%    \begin{tikzpicture}[/tikzsymbolsstyle]
%      \fill[fill=#2] (0,1) -- (0.5,1.5) -- (1,1);
%      \filldraw[fill=#1] (0,0) rectangle (1,1);
%      \draw (-0.11,0.9) -- (0.5,1.5) -- (1.11,0.9);
%      \draw[fill=#3] (0.5,0) -- (0.5,0.5) -- (0.8,0.5) -- (0.8,0) -- cycle;
%      \fill (0.75,0.25) circle [radius=0.02];
%    \end{tikzpicture}%
%  }
%
% \CreateExample{myHouse}{}
% \CreateExample{myHouse}{[blue]}
% \CreateExample{myHouse}{[][][green]}
%
% Although it looks good, you also want the ability to scale it. 
% Furthermore, you want the symbol to be a bit smaller by default. Scaling with the text size
% and having a thicker line width would also be not bad.
% Looking at the  \pkg{tikz} manual we can get the options necessary: |scale|, |line width|,
% |x| and |y|. Let's start with |x| and |y| to make the house around the same size
% as an uppercase letter. Let's start with |x=1ex, y=1ex|
%  \begin{verbatim}
%    \tikzsymbolsdefinesymbol {myHouse} { B{orange} B{red} B{teal} }
%      {%
%        \begin{tikzpicture}[/tikzsymbolsstyle, x=1ex,y=1ex]
%          \fill[fill=#2] (0,1) -- (0.5,1.5) -- (1,1);
%          \filldraw[fill=#1] (0,0) rectangle (1,1);
%          \draw (-0.11,0.9) -- (0.5,1.5) -- (1.11,0.9);
%          \draw[fill=#3] (0.5,0) -- (0.5,0.5) -- (0.8,0.5) -- (0.8,0) -- cycle;
%          \fill (0.75,0.25) circle [radius=0.02];
%        \end{tikzpicture}%
%      }
%  \end{verbatim}
%    \tikzsymbolsdefinesymbol {myHouse} { B{orange} B{red} B{teal} }
%      {^^A
%        \begin{tikzpicture}[/tikzsymbolsstyle, x=1ex,y=1ex]^^A
%          \fill[fill=#2] (0,1) -- (0.5,1.5) -- (1,1);
%          \filldraw[fill=#1] (0,0) rectangle (1,1);
%          \draw (-0.11,0.9) -- (0.5,1.5) -- (1.11,0.9);
%          \draw[fill=#3] (0.5,0) -- (0.5,0.5) -- (0.8,0.5) -- (0.8,0) -- cycle;
%          \fill (0.75,0.25) circle [radius=0.02];
%        \end{tikzpicture}^^A
%      }
% A \myHouse. Well a bit small maybe, but around the size of the letter \enquote{A}.
% Increasing |x| and |y| to |1.1ex| should be good. Now add the scaling option |S|
% to the command, which will be the new first argument. As it will be the new |#1|, 
% the other arguments should be increased by 1 each.
%  \begin{verbatim}
%    \tikzsymbolsdefinesymbol {myHouse} { S B{orange} B{red} B{teal} }
%      {%
%        \begin{tikzpicture}[/tikzsymbolsstyle, x=1.1ex, y=1.1ex, scale=#1]
%          \fill[fill=#3] (0,1) -- (0.5,1.5) -- (1,1);
%          \filldraw[fill=#2] (0,0) rectangle (1,1);
%          \draw (-0.11,0.9) -- (0.5,1.5) -- (1.11,0.9);
%          \draw[fill=#4] (0.5,0) -- (0.5,0.5) -- (0.8,0.5) -- (0.8,0) -- cycle;
%          \fill (0.75,0.25) circle [radius=0.02];
%        \end{tikzpicture}%
%      }
%  \end{verbatim}
%    \tikzsymbolsdefinesymbol {myHouse} { S B{orange} B{red} B{teal} }
%      {^^A
%        \begin{tikzpicture}[/tikzsymbolsstyle, x=1.1ex, y=1.1ex, scale=#1]
%          \fill[fill=#3] (0,1) -- (0.5,1.5) -- (1,1);
%          \filldraw[fill=#2] (0,0) rectangle (1,1);
%          \draw (-0.11,0.9) -- (0.5,1.5) -- (1.11,0.9);
%          \draw[fill=#4] (0.5,0) -- (0.5,0.5) -- (0.8,0.5) -- (0.8,0) -- cycle;
%          \fill (0.75,0.25) circle [radius=0.02];
%        \end{tikzpicture}^^A
%     }
% Now we can scale the symbol: \CreateExample{myHouse}{[2]} \CreateExample{myHouse}{[5][][][green]}  \CreateExample{myHouse}{[][][][green]}. 
% { \CreateExample{tikzsymbolsset}{{symbol-scale={myHouse=2}}}\CreateExample{myHouse}{}}
%
% Something you may not notice currently, 
% but becomes apparent once you increase the symbol
% to a large scale is that the line width does not scale with the symbol. The line width
% can be set \emph{via} |line width|. For the border of the emoticons I generally use 
% a line width  of |0.12ex|. Multiplying it with the scaling allows the symbol to keep
% the line width even at larger (or smaller) scales. Let's try it:
%  \begin{verbatim}
%    \tikzsymbolsdefinesymbol {myHouse} { S B{orange} B{red} B{teal} }
%      {%
%        \begin{tikzpicture}[/tikzsymbolsstyle, x=1.1ex, y=1.1ex, 
%            scale=#1, line width=0.12ex*#1]
%          \fill[fill=#3] (0,1) -- (0.5,1.5) -- (1,1);
%          \filldraw[fill=#2] (0,0) rectangle (1,1);
%          \draw (-0.11,0.9) -- (0.5,1.5) -- (1.11,0.9);
%          \draw[fill=#4] (0.5,0) -- (0.5,0.5) -- (0.8,0.5) -- (0.8,0) -- cycle;
%          \fill (0.75,0.25)circle [radius=0.02];
%        \end{tikzpicture}%
%      }
%  \end{verbatim}
%    \tikzsymbolsdefinesymbol {myHouse} { S B{orange} B{red} B{teal} }
%      {^^A
%        \begin{tikzpicture}[/tikzsymbolsstyle, x=1.1ex, y=1.1ex, scale=#1, line width=0.12ex*#1]
%          \fill[fill=#3] (0,1) -- (0.5,1.5) -- (1,1);
%          \filldraw[fill=#2] (0,0) rectangle (1,1);
%          \draw (-0.11,0.9) -- (0.5,1.5) -- (1.11,0.9);
%          \draw[fill=#4] (0.5,0) -- (0.5,0.5) -- (0.8,0.5) -- (0.8,0) -- cycle;
%          \fill (0.75,0.25) circle [radius=0.02];
%        \end{tikzpicture}^^A
%     }
% A \myHouse. \CreateExample{myHouse}{[2]} \CreateExample{myHouse}{[5]}\CreateExample{myHouse}{[10]}
%
% Not sure if |0.12ex| looks good for large scales. Let's use |0.07ex| and put the doorknob
% a bit to the left (and make it larger). Furthermore, parts of the house clip through the 
% ceiling so let's change
% some coordinates there too.
%  \begin{verbatim}
%    \tikzsymbolsdefinesymbol {myHouse} { S B{orange} B{red} B{teal} }
%      {%
%        \begin{tikzpicture}[/tikzsymbolsstyle, x=1.1ex, y=1.1ex, 
%            scale=#1, line width=0.07ex*#1]
%          \fill[fill=#3] (0,1) -- (0.5,1.5) -- (1,1);
%          \filldraw[fill=#2] (0,0) rectangle (1,1);
%          \draw (-0.12,0.92) -- (0.5,1.5) -- (1.12,0.92);
%          \draw[fill=#4] (0.5,0) -- (0.5,0.5) -- (0.8,0.5) -- (0.8,0) -- cycle;
%          \fill (0.72,0.25) circle [radius=0.03];
%        \end{tikzpicture}%
%      }
%  \end{verbatim}
%    \tikzsymbolsdefinesymbol {myHouse} { S B{orange} B{red} B{teal} }
%      {^^A
%        \begin{tikzpicture}[/tikzsymbolsstyle, x=1.1ex, y=1.1ex, scale=#1, line width=0.07ex*#1]
%          \fill[fill=#3] (0,1) -- (0.5,1.5) -- (1,1);
%          \filldraw[fill=#2] (0,0) rectangle (1,1);
%          \draw (-0.12,0.92) -- (0.5,1.5) -- (1.12,0.92);
%          \draw[fill=#4] (0.5,0) -- (0.5,0.5) -- (0.8,0.5) -- (0.8,0) -- cycle;
%          \fill (0.72,0.25) circle [radius=0.03];
%        \end{tikzpicture}^^A
%      }
% A \myHouse. \CreateExample{myHouse}{[2]} \CreateExample{myHouse}{[5]}\CreateExample{myHouse}{[10]} \CreateExample{myHouse}{[-10]}
%
% Well, looks like for negative scaling the line width does not feel so good.
% For this reason \cs{tikzsymbolsscaleabs} exists, which stores the absolute
% value of the scaling. Replacing |#1| with \cs{tikzsymbolsscaleabs} for the line widths
% yields:
%  \begin{verbatim}
%    \tikzsymbolsdefinesymbol {myHouse} { S B{orange} B{red} B{teal} }
%      {%
%        \begin{tikzpicture}[/tikzsymbolsstyle, x=1.1ex, y=1.1ex, scale=#1,
%             line width=0.07ex*\tikzsymbolsscaleabs]
%          \fill[fill=#3] (0,1) -- (0.5,1.5) -- (1,1);
%          \filldraw[fill=#2] (0,0) rectangle (1,1);
%          \draw (-0.12,0.92) -- (0.5,1.5) -- (1.12,0.92);
%          \draw[fill=#4] (0.5,0) -- (0.5,0.5) -- (0.8,0.5) -- (0.8,0) -- cycle;
%          \fill (0.72,0.25) circle [radius=0.03];
%        \end{tikzpicture}%
%      }
%  \end{verbatim}
%    \tikzsymbolsdefinesymbol {myHouse} { S B{orange} B{red} B{teal} }
%      {^^A
%        \begin{tikzpicture}[/tikzsymbolsstyle, x=1.1ex, y=1.1ex, scale=#1, line width=0.07ex*\tikzsymbolsscaleabs]
%          \fill[fill=#3] (0,1) -- (0.5,1.5) -- (1,1);
%          \filldraw[fill=#2] (0,0) rectangle (1,1);
%          \draw (-0.12,0.92) -- (0.5,1.5) -- (1.12,0.92);
%          \draw[fill=#4] (0.5,0) -- (0.5,0.5) -- (0.8,0.5) -- (0.8,0) -- cycle;
%          \fill (0.72,0.25) circle [radius=0.03];
%        \end{tikzpicture}^^A
%      }
% A \myHouse. \CreateExample{myHouse}{[2]} \CreateExample{myHouse}{[5]}\CreateExample{myHouse}{[10][][blue]} \CreateExample{myHouse}{[-10][][blue]}
%
% Now it works.
%
% \subsection{Using a box}
%
%^^A Now, in order to not draw the symbol every time from scratch it is used,
% If your symbol is a more complex, using it often may slow down the compilation
% process. In order to mitigate this we can store the symbol in a box and reuse the
% box instead of redrawing the symbol every time. To store the symbol, one can use
% the following command.
% 
% \begin{function}{\tikzsymbolsprovideandusesavebox}
%  \begin{syntax}
%    \cs{tikzsymbolsprovideandusesavebox}\marg{box-name}\marg{box-code}
%  \end{syntax}
%
% The name of the box \meta{box-name} (without backslash) should contain the name
% of the symbol and its arguments (separated by a sign). 
% Everything inside \meta{box-code} is stored in the box and repated if used again.
% \end{function}
%
% \paragraph{Example}
%  \begin{verbatim}
%    \tikzsymbolsdefinesymbol {myHouse} { S B{orange} B{red} B{teal} }
%      {%
%        % Putting every argument in the name is important!
%        \tikzsymbolsprovideandusesavebox {myHouse;#1;#2;#3;#4} {%
%          \begin{tikzpicture}[/tikzsymbolsstyle, x=1.1ex, y=1.1ex, scale=#1,
%               line width=0.07ex*\tikzsymbolsscaleabs]
%            \fill[fill=#3] (0,1) -- (0.5,1.5) -- (1,1);
%            \filldraw[fill=#2] (0,0) rectangle (1,1);
%            \draw (-0.12,0.92) -- (0.5,1.5) -- (1.12,0.92);
%            \draw[fill=#4] (0.5,0) -- (0.5,0.5) 
%              -- (0.8,0.5) -- (0.8,0) -- cycle;
%            \fill (0.72,0.25) circle [radius=0.03];
%          \end{tikzpicture}%
%        }%
%      }
%  \end{verbatim}
%    \tikzsymbolsdefinesymbol {myHouse} { S B{orange} B{red} B{teal} }
%      {^^A
%        \tikzsymbolsprovideandusesavebox {myHouse;#1;#2;#3;#4} {^^A
%        \begin{tikzpicture}[/tikzsymbolsstyle, x=1.1ex, y=1.1ex, scale=#1, line width=0.07ex*\tikzsymbolsscaleabs]
%          \fill[fill=#3] (0,1) -- (0.5,1.5) -- (1,1);
%          \filldraw[fill=#2] (0,0) rectangle (1,1);
%          \draw (-0.12,0.92) -- (0.5,1.5) -- (1.12,0.92);
%          \draw[fill=#4] (0.5,0) -- (0.5,0.5) 
%            -- (0.8,0.5) -- (0.8,0) -- cycle;
%          \fill (0.72,0.25) circle [radius=0.03];
%        \end{tikzpicture}^^A
%      }}
%
% Now the first time the symbol is used it is stored in a box. 
%^^A  If the same conditions are met as the first time the symbol
%^^A was used, a box is used instead of creating the symbol a-new. 
% Using the symbol again in the same conditions resues the content of the box.
% \textbf{Keep in mind:}
% It is important to give \cs{tikzsymbolsprovideandusesavebox} \emph{all} arguments
% your symbol has. If you add or remove one option you need to update the 
% \meta{box-name} accordingly.
% 
%
% \CreateExample{myHouse}{} \CreateExample{myHouse}{[10]} \CreateExample{myHouse}{[3][][blue]}
%
% This concludes this example.
%
% \subsection{Some other commands and variable(s)}
% Here some other commands which may be useful

% \begin{function}{\tikzsymbolssetscaleabs, \tikzsymbolsscaleabs}
%    \begin{syntax}
%      \cs{tikzsymbolssetscaleabs}\marg{dimension}
%      \cs{tikzsymbolsscaleabs}
%    \end{syntax}
%
% \cs{tikzsymbolssetscaleabs} sets the value of |\tikzsymbolsscaleabs| equal to
% the absolute value of \meta{dimension}.
% \end{function}
%
% Other public functions and variables which need to be used inside the 
% |\ExplSyntaxOn| and |\ExplSyntaxOff| environment.
% \begin{function}{\tikzsymbols_create_draftbox:nn, \tikzsymbols_create_squared_draftbox:n, \l_tikzsymbols_if_opt_draft_bool}
%    \begin{syntax}
%      \cs{tikzsymbols_create_draftbox:nn} \marg{x-dim} \marg{y-dim}
%      \cs{tikzsymbols_create_squared_draftbox:n} \marg{dimension}
%      \cs{l_tikzsymbols_if_opt_draft_bool}
%    \end{syntax}
%
% \cs{tikzsymbols_create_draftbox:nn} creates draft-box 
% (option \Option{draft=true}) with length \meta{x-dim} and height \meta{y-dim}.
%
%\cs{tikzsymbols_create_squared_draftbox:n} does the same thing, 
% it  just takes one argument and creates a square.
%
% \cs{l_tikzsymbols_if_opt_draft_bool}  
% is a public variable that stores
% the value of the \Option{draft} option.
% \end{function}
%
%
% \section{FAQ (Known errors and problems)}
%
% Or \enquote{Questions I assume would be frequently asked, if people would
% frequently ask questions}.
%
% \subsection{How to get rid of the space after each symbol?}
%
% By default the package adds \cs{xspace} after each command.
% To remove it use the option \opt{after-symbol}. Using
%   \begin{verbatim}
%     \tikzsymbolsset{after-symbol={}}
%   \end{verbatim}
% removes the \cs{xspace} command and thus the unwanted space.
%
%^^A This was done way back and today I most probably wouldn't do it anymore,
%^^A but it stayed now for around $4$ years and I don't know if I really should get
%^^A rid of it by default.
%
%
%
%
% \subsection{Using the symbols causes unwanted \meta{problem}. How could I get rid of it?}
%
% This could have something to do with question \ref{sec:Q:store-symbol}
% (after you made sure that the symbols cause the problem).
% Try using setting the  option \opt{usebox=false} and recompile a few
% times. If the problem persists, please send a bug report (\cref{sec:bug}).
%
% \subsection{I am getting the error-message \texttt{Argument of \textbackslash pgffor@next has an extra \}}}
%
% If you encounter an error message like
% \begin{verbatim}
%   Argument of \pgffor@next has an extra }
% \end{verbatim}
% while using \pkg{babel} with e.g. language \enquote{francais}
% and for example \cs{Cooley} you may add
% \begin{verbatim}
%   \usetikzlibrary{babel}
% \end{verbatim}
% to your preamble. This should (hopefully) fix the problem. 
%
%
% \subsection{Another package I load already defines \meta{symbol}.}
%
% You can override pretty much every symbol simply by loading
% \pkg{tikzsymbols} last as it defines the symbols via
% \cs{DeclareDocumentCommand} (see \pkg{xparse}).
%
% If you want to use the symbols of both packages you may have
% a look at option \opt{prefix}.
%
%
%^^A \subsection{Why is it important to know that this package stores symbols in boxes
%^^A and reuses them instead of creating a new picture every time?}
% \subsection{Does this package store symbols in boxes
% and reuses them instead of creating a new picture every time?}
% \label{sec:Q:store-symbol}
%
% Yes, it does. It can become a problem if \LaTeX\ runs out of boxes. If this happens,
% use \opt{usebox=false}. 
%
% Furthermore, \pkg{tikz} allows to reference pictures using e.g.\
% \opt{remember picture}. This also influences the symbols
% of \pkg{tikzsymbols}. As those symbols are stored and 
% copied for printing, labels attached to the symbols get repeated.
% In this case, also try using \opt{usebox=false} (or try the option
% \opt{remember-picture=false}).
%
%^^A Another problem is that if a label is added to a symbol 
%^^A (for example by the \pkg{tikz} option \opt{remember picture})
%^^A then this label is repeated every time the symbol is used. If you have
%^^A already used the symbol \emph{before} the label is added,  nothing happens
%^^A as a copy of the symbol without the label is used. If it is used the first time,
%^^A then the label is also stored and repeated every time the symbol is used later.
%^^A This behavior can also be fixed by \opt{usebox=false} or adding
%^^A a \pkg{tikz} style by \opt{append-style}.
%
%
% \subsection{Are the symbols created with the environment \texttt{tikzpicture}?}
%
% Yes, they are.
%
%
%
%
%
%
%
%
% \section{Nobody is perfect}
% \label{sec:bug}
%
% If you find a bug please send me a mail (or report it on GitHub)
% involving a \emph{minimal example}   
% showing the bug and a short description (english or german). 
% Please mention (if you are writing 
% a mail)
% \enquote{\Package{tikzsymbols}} in the header, \enquote{gmx} has
% a habit of putting mails into the spam-folder
% and it helps me to recognize those mails faster.
% This can also be the reason why I may need some time to answer 
% the mail.
%
% As I am also new to GitHub, I also may take longer to answer, at least until I
% figured out how to get a mail if a new issue is created.
%
% Suggestions are also welcome.
%
% 
%
%
%
% \section{Danksagung}
%
% I would like to thank all users for providing bug reports 
% and helping to improve this package.  
%
% Furthermore many thanks to my brother helping me improving 
% the symbols.
%
% \section{Changes}
%
% See the \enquote{README.md} file.
%
%
% \end{documentation}
% \begin{implementation}
%
% \iffalse meta-comment
%: subsec: Code
% \fi
%
% There is not much to see, all this symbols were created with \Package{tikz}.
% But it may helps you (somehow).
%
% PS. Enter at own risk, bad code and grammar up ahead.
% 
%
%
%
% 
%
% \section{\LaTeX3 code}
%
%
%
%    \begin{macrocode}
%<@@=tikzsymbols> 
%    \end{macrocode}
%
%    \begin{macrocode}
%<*package> 
%    \end{macrocode}
%
%
%\changes {v1.0} {2013/01/19} {Initial version}
%\changes {v1.05} {2013/02/13} {Deleted a \enquote{t} in the BasicTree-code, shortened the trunk from the tree a bit, renamed some codes,  made an index}
%\changes {v1.6} {2013/02/14} {Now \enquote{Person} can be used in sections, etc.}
%\changes {v1.6} {2013/02/14} {Now an error message is generated  if the last parameter of \enquote{BasicTree} is neither \enquote{leaf} nor empty.}
%\changes {v1.6} {2013/02/14} { New options: draft and final. If in documentclass the option \enquote{draft} is defined, the package recognizes it. Plus some warnings if you use class option draft/final with package option tree=on/off.}
%\changes {v1.6} {2013/02/14} { Renamed \enquote{tikzsymbolsaftersymbolinput} to \enquote{tikzsymbolsaftersymbolinput}}
%\changes {v1.61} {2013/02/17} {Made an invisible box in BasicTree.}
%\changes {v1.65} {2013/02/17} {Improved BasicTree; New symbols \enquote{Schaler/peeler}, Laughey, Walley, Ninja; but didn't improve the source-description}
%\changes {v1.7} {2013/02/28} {New symbols, etc.}
%\changes {v2.0} {2013/03/07} {Fixed Bugs, improved BasicTree, new option \enquote{marvosym}, new symbol}
%\changes {v2.2} {2013/03/23} {Now you can use negative scaling. Include \Makro{@ifpackageloaded}. Did something else, I can't remember}
%\changes {v2.5} {2013/04/18} {New option: draftabsolute, changed the documentation a bit}
%\changes {v3.0} {2013/07/21} {Changed the documentation}
%\changes {v3.0} {2013/07/21} {Replaced \cs{let} by \cs{tikzsymbols@let}}
% \changes{v3.0}{2013/07/21}{Changed symbol code}
% \changes{v3.0}{2013/07/26}{Using \cs{changes{}{}{}} correctly (hopefully)}
% \changes{v3.0}{2013/07/21}{Changed output of \enquote{absolute} option}
% \changes{v3.0b}{2014/10/19}{Deleted non ASCII characters in der .sty file.}
% \changes{v3.0d}{2014/10/29}{\cs{tikzsymbolsscl} to \cs{tikzsymbols@scl}}
% \changes{v3.0e}{2014/10/29}{\cs{tikzsymbolsDeclareRobustCommand} to \cs{tikzsymbols@Declare@Robust@Command}}
% \changes{v3.0f}{2014/10/29}{\cs{tikzsymbolsbxPrmtrstore} to \cs{tikzsymbols@bx@Prmtrstore}}
%
% \changes{v3.0g}{2015/10/01}{Deleted package \Package{calc}, using now \cs{pgfmathsetlength} instead of \cs{setlength}.}
%
% \changes{v3.0h}{2015/10/13}{Added a missing \cs{fi} into the code. }
%
% \changes{v3.01alpha}{2015/10/03}{Started from new using \LaTeX3}
%
% \changes{v3.38}{2015/10/03}{Nearly finished translating the code to
% \LaTeX3. Himmel! Das war einfach nur zach! Muss aber noch den
% \LaTeXe\ Code löschen.}
%
% \changes{v3.40}{2015/10/03}{Now everything is written in \LaTeX3.}
%
% \changes{v3.50}{2015/10/03}{Now it compiles without error (without 
%  using any command or options.)}
%
% \changes{v3.58}{2015/10/04}{Fixed every error occurring while using
% the symbols without optional arguments and package
% options. Something is still wrong with \cs{@@_Basic_Tree_off:nnnnn}}
%
% \changes{v3.60}{2015/10/05}{Fixed \cs{@@_Basic_Tree_off:nnnnn}}
%
% \changes{v3.70}{2015/10/05}{Now every draftbox has the correct
% size.}
%
% \changes{v3.75}{2015/10/05}{\cs{tikzsymbolsuse} works now.}
%
% \changes{v3.9}{2015/10/8}{Various fixes, new command \Makro{tikzsymbolsuse} and started to write a new documentation.}
% \changes{v3.95}{2016/03/20}{Removed the only-preambility of \Makro{tikzsymbolsset}.}
% \changes{v3.95}{2016/03/20}{Changed name of key-group from 'preamble' to 
%   'document'.}
%
% \changes{v3.9}{2016/04/04}{Added \Makro{@ifackagelater}.}
% \changes{v3.99}{2016/04/04}{As advised undid my version-resetting.}
% \changes{v4.0}{2016/03/20}{Finished reworking the code.}
% \changes{v4.0}{2016/26/12}{Added \cs{Nudelholz} bzw. \cs{rollingpin}.}
%
% \changes{v4.02}{2017/05/14}{Added option 'baseline=true/false' to fix a some strange 
% behaviors with \pkg{todonotes}.}
% \changes{v4.02}{2017/05/14}{Defined the tikz-style '/\_\_tikzsymbols' which is used to implement 'baseline'.}
%
% \changes{v4.03}{2017/08/08}{New symbols: \cs{Sleepey} and \cs{dSleepey}.}
% \changes{v4.04}{2017/08/08}{New symbol: \cs{SchrodingersCat}.}
%
% \changes{v4.10}{2018/04/11}{New option: \opt{append-style}.}
% \changes{v4.10}{2018/04/11}{New option: \opt{remember-picture}.}
% \changes{v4.10}{2018/04/11}{Change how \opt{baseline} works (internal).}
% \changes{v4.10}{2018/04/11}{Delete invisible sign (I \emph{hate} those).}
% \changes{v4.10}{2018/04/11}{New symbolpair: \cs{Knoblauchpresse} and \cs{garlicpress}.}
% \changes{v4.10}{2018/04/11}{Option \opt{draft} and \opt{final} are local now.}
%
% \changes{v4.10a}{2018/05/16}{Removed colors from \cs{Strichmaxerl}.}
% \changes{v4.10b}{2019/02/07}{Replaced \cs{c_zero} by \texttt{0}.}
% \changes{v4.10c}{2019/02/08}{Fixed \texttt{xshift} and \texttt{yshift} by adding dimensions. Fixes \cs{Fire}, \cs{Candle} and \cs{(d)Laughey}.}
%
% \changes{v4.12}{2021/10/14}{New commands: \cs{tikzsymbolsdefinesymbol}, \cs{tikzsymbolsprovideandusesavebox}, \cs{tikzsymbolssetscaleabs}, \cs{tikzsymbolsscaleabs}, \cs{tikzsymbols_create_draftbox:nn}, \cs{tikzsymbols_create_squared_draftbox:n} and \cs{l_tikzsymbols_if_opt_draft_bool}}
% \changes{v4.12}{2021/10/14}{New symbols: \cs{Heart} and \cs{dHeart}.}
% \changes{v4.12}{2021/10/14}{New symbol: \cs{Maskey} }
%
% \changes{v4.12a}{2021/12/14}{Fixing \enquote{final} option!}
%
%
% The first lines are always the same: What do I need, what is the
% package named.
%    \begin{macrocode} 
\@ifpackageloaded{xparse}{}{\RequirePackage{xparse}}
\@ifpackageloaded{expl3}{}{\RequirePackage{expl3}}
\@ifpackagelater{expl3}{2021/08/27}
  {}
  {%
    \PackageError { tikzsymbols }{ Support~package~expl3~too~old }
      {%
        You~need~to~update~your~installation~of~the~bundles~'l3kernel'~and~
        'l3packages'.\MessageBreak
        Loading~tikzsymbols~will~abort!
      }%
    \endinput
  }
\ProvidesExplPackage
  {tikzsymbols}
  {2021/12/14}
  {4.12a} 
  {Some symbols created using tikz and LaTeX3.}
\@ifpackageloaded { tikz } {} { \RequirePackage { tikz } }
\@ifpackageloaded { xcolor } {} { \RequirePackage { xcolor } }
\@ifpackageloaded { xspace } {} { \RequirePackage { xspace } }
\@ifpackageloaded { l3keys2e } {} { \RequirePackage { l3keys2e } }
%    \end{macrocode} 
%
% Furthermore we need to load some libraries from \Package{tikz}, I
% hope these \Makro{ExplSyntax...} don't break anything.
%    \begin{macrocode}
\ExplSyntaxOff
\usetikzlibrary {arrows,decorations.pathmorphing,trees}
\ExplSyntaxOn
%    \end{macrocode}
%
%
% \begin{macro}{
%   \l_@@_if_scale_negative_bool  ,
%   \g_@@_if_opt_tree_print_bool ,
%   \l_@@_if_opt_draft_bool ,
%   \g_@@_if_opt_marvosym_bool , 
%   \l_@@_argument_parser_error_bool ,
%  }
% Booleans we later need, \cs{l_@@_if_scale_negative_bool} is set true
% in symbols which need some extra code if the scaling is negative
% (like \verb|\Chair|). The other booleans are used for the package
% options and are therefor globally.
%    \begin{macrocode}
\bool_new:N \l_@@_if_scale_negative_bool 
\bool_new:N \g_@@_if_opt_tree_print_bool 
\bool_new:N \l_@@_if_opt_draft_bool
\bool_new:N \l_tikzsymbols_if_opt_draft_bool
\bool_new:N \g_@@_if_opt_marvosym_bool 
\bool_new:N \l_@@_argument_parser_error_bool
%    \end{macrocode}
% \end{macro}
%  
% Setting some of them to true by default.
%    \begin{macrocode}
\bool_gset_true:N \g_@@_if_opt_tree_print_bool
%    \end{macrocode}
%
%
%
%
% \begin{macro}{
%  \g_@@_command_prefix_tl ,
%  \l_@@_tikzsymbols_after_symbol_tl ,
%  \g_@@_current_situation_tl ,
%  \g_@@_scale_abs_tl ,
%  \c_@@_leaf_tl ,
%  \c_@@_black_tl ,
%  }
%    
%    I think the names speak for themselves,
%    \cs{g_@@_command_prefix_tl} is used in the option \Option{prefix}
%    and adds its content to the command names as a prefix, by default
%    it is empty.
%
%    \Makro{g_tikzsymbols_after_symbol_tl} adds its content to the
%    document after the symbol is used.
%
%    In \Makro{l_@@_current_situation} is a storage for the
%    current font-size and color-configurations which is needed when
%    defining boxes.
%
%    \Makro{l_@@_scale_abs_tl} safes absolute scaling of a symbol;
%    could have used \Makro{l_tmpa_tl}. It is a \texttt{tl} because
%    using a \texttt{fp} would have required me to use
%    \Makro{fp_use:N} every time. I'm lazy, I know.
%
%    The last two are constants and are used to check user specific
%    input at some commands (\Makro{BasicTree} and \Makro{Ninja} I believe).
%    \begin{macrocode}
\tl_clear_new:N \g_@@_command_prefix_tl
\tl_new:N \l_@@_tikzsymbols_after_symbol_tl 
\tl_new:N \l_@@_current_situation_tl
\tl_new:N \l_@@_scale_abs_tl
\tl_const:Nn \c_@@_leaf_tl { leaf }
\tl_const:Nn \c_@@_black_tl { black }
%    \end{macrocode}
% \end{macro}
%
% Setting the default value and yes, I know that you maybe should not
% use \Makro{xspace}, but I do it anyway:
%    \begin{macrocode}
\tl_set:Nn \l_@@_tikzsymbols_after_symbol_tl { \xspace }
%    \end{macrocode}
%
%    \begin{macrocode}
\tl_new:N \l_@@_save_global_scale_for_later_because_no_better_idea_tl
%    \end{macrocode}
%
%    \begin{macrocode}
\tl_new:N \l_@@_symbol_name_tl
\tl_new:N \l_@@_symbol_options_clist
%    \end{macrocode}
%
%    \begin{macrocode}
\fp_new:N \l_@@_global_scale_fp
\fp_set:Nn \l_@@_global_scale_fp { 1.0 }
%    \end{macrocode}
%
%
% \begin{macro}{\tikzsymbolsaftersymbolinput}
% An obsolete macro. Is not defined anymore.
%    \begin{macrocode}
%\cs_set_eq:NN \tikzsymbolsaftersymbolinput {}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{
%   \l_@@_Strichmaxerl_x_LA_fp ,
%   \l_@@_Strichmaxerl_x_RA_fp,
%   \l_@@_Strichmaxerl_x_LB_fp,
%   \l_@@_Strichmaxerl_x_RB_fp,
%   \l_@@_Strichmaxerl_y_LA_fp,
%   \l_@@_Strichmaxerl_y_RA_fp,
%   \l_@@_Strichmaxerl_y_LB_fp,
%   \l_@@_Strichmaxerl_y_RB_fp,
%   \@@_Strichmaxerl_x_max_fp,
%   \@@_Strichmaxerl_x_min_fp,
%  }
%
%    Needed for the plain vanilla boxes of \Makro{Strichmaxerl} for
%    the length (\texttt{x}) and height (\texttt{y}).
%    \begin{macrocode}
\fp_new:N \l_@@_Strichmaxerl_x_LA_fp
\fp_new:N \l_@@_Strichmaxerl_x_RA_fp
\fp_new:N \l_@@_Strichmaxerl_x_LB_fp
\fp_new:N \l_@@_Strichmaxerl_x_RB_fp
%    \end{macrocode}
%    \begin{macrocode}
\fp_new:N \l_@@_Strichmaxerl_y_LA_fp
\fp_new:N \l_@@_Strichmaxerl_y_RA_fp
\fp_new:N \l_@@_Strichmaxerl_y_LB_fp
\fp_new:N \l_@@_Strichmaxerl_y_RB_fp
%    \end{macrocode}
%    \begin{macrocode}
\fp_new:N \@@_Strichmaxerl_x_max_fp
\fp_new:N \@@_Strichmaxerl_x_min_fp
%    \end{macrocode}
% \end{macro}
%
%
%
%
%
% \begin{macro} { \l_@@_Moai_thickness_dim }
%
%    It  is used inside \Makro{Moai}. I figured that depending
%    on the scaling the line-thickness of \Makro{Moai}  should change
%    its value (bad explained, please just look at the code).
%
%    \begin{macrocode}
\dim_new:N \l_@@_Moai_thickness_dim
%    \end{macrocode}
% \end{macro}
%
%
% \begin{macro} { \g_tikzsymbols_list_of_printing_cooking_with_argument_commands_clist }
%    Store every command defined by this package. I may delete them.
%    \begin{macrocode}
\clist_new:N \g_tikzsymbols_list_of_printing_cooking_with_argument_commands_clist
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{ \g_@@_english_commands_prop }
%    \begin{macrocode}
\prop_new:N \g_@@_english_commands_prop
%    \end{macrocode}
% \end{macro}
%
%
% \begin{macro}{\l_@@_tmpa_tl  }
% Some scratch variables
%    \begin{macrocode}
\tl_new:N \l_@@_tmpa_tl
%    \end{macrocode}
% \end{macro}
%
%
% \subsection{Messages}
%
% Nothing special happens in this subsection.
%
% \begin{macro}{ obsolete-option }
%   Message for obsolete options. 
%    \begin{macrocode}
\msg_new:nnnn { tikzsymbols } { obsolete-option } 
  { 
    Option \ '#1' \ is \ obsolete. \ 
    Please \ use \ '#2' \ instead. 
  }{
    The \ option \ you \ used \ is \ obsolete.
    \msg_see_documentation_text:n { tikzsymbols } 
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{undefined-command}
%   Message for undefined commands used by \Makro{tikzsymbolsuse}.
%    \begin{macrocode}
\msg_new:nnnn { tikzsymbols } { undefined-command } 
  {  
    Undefined \ Control \ sequence: \ '#1'. \
    Did \ you \ write \ the \ name \ correctly?
  }{ 
    The \ command \ is \ not \ defined.
    \msg_see_documentation_text:n { tikzsymbols } 
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{ obsolete-command }
%   Message for obsolete commands (\Makro{Person}, etc.)
%    \begin{macrocode}
\msg_new:nnnn { tikzsymbols } { obsolete-command } 
  {  
    Command \ '#1' \ is \ obsolete. \
    Please \ use \ '#2' \ instead.
  } 
  { 
    The \ command \ you \ used \ is \ obsolete.
    \msg_see_documentation_text:n { tikzsymbols } 
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{ tree }
%   Error message for \Makro{BasicTree}. I hope the text is understandable.
%    \begin{macrocode}
\msg_new:nnnn { tikzsymbols } { tree } 
  {  
    Parameter \ '#1' \ cannot \ be \ used. \
    The \ last \ parameter \ has \ either \ to \ be \ 
    'leaf' \ or \ has \ to \ be \ empty.
  } 
  { 
    The \ fourth \ mandatory \ argument \ of \ '\protect\BasicTree' \
    has \ either \ to \ be \ leaf \ or \ empty.
    \msg_see_documentation_text:n { tikzsymbols } 
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{ marvosym }
%   Message if option \Option{marvosym} is used, but the package not
%   loaded at all.
%    \begin{macrocode}
\msg_new:nnnn { tikzsymbols } { marvosym } 
  {  
    Use \ option \ 'marvosym' \ only\ 
    if \ you \ load \ package \ 'marvosym'. \
  }{
    Either \ load \ package \ 'marvosym' \ or \ 
    delete \ the \ tikzsymbols \ option \ 'marvosym'. \
    \msg_see_documentation_text:n { tikzsymbols } 
  }
%    \end{macrocode}
% \end{macro}
%
%
% \begin{macro}{ Changey-number-too-large }
% \changes{v3.95}{2016/03/20}{New}
%    \begin{macrocode}
\msg_new:nnnn { tikzsymbols } { Changey-number-too-large } 
  {  
    Changey's \ mood \ has \ to \ be \  between \
    -2 \ and \ 2 \ (currently:\ '#1' ). 
  }{
    Given \ number \ is \ too \ large \ (small), \ please
    \ use \ an \ number \ between \ -2 \ and \ 2.
    \msg_see_documentation_text:n { tikzsymbols } 
  }
\msg_new:nnnn { tikzsymbols } { cChangey-number-too-large } 
  {  
    cChangey's \ mood \ has \ to \ be \  between \
    -2 \ and \ 2 \ (currently:\ '#1' ). 
  }{
    Given \ number \ is \ too \ large \ (small), \ please
    \ use \ an \ number \ between \ -2 \ and \ 2.
    \msg_see_documentation_text:n { tikzsymbols } 
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{ tikzsymbolsaftersymbolinput  }
% \changes{v3.95}{2016/03/20}{New}
%    \begin{macrocode}
\msg_new:nnnn { tikzsymbols } { tikzsymbolsaftersymbolinput  } 
  {  
    The \ command \ \exp_not:N\tikzsymbolsaftersymbolinput  is \
    obsolete. \ Please \ use \ the \ option \  'after-symbol' \ instead.
  }{
    \exp_not:N\tikzsymbolsaftersymbolinput  is \ not \ supported \ anymore.
    \msg_see_documentation_text:n { tikzsymbols } 
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{ SchrodingersCat  }
%    \begin{macrocode}
\msg_new:nnnn { tikzsymbols } { SchrodingersCat  } 
  {  
    \SchrodingersCat\ only \ accepts \ '-1' \ (dead), \ '0'\ (unknown)\ or \ '1'\
    (alive) \ for \ its \ mandatory \ argument. \ You \ have \ given \ '#1'.
  }{
    Your \ input \ number \ is \ not \ allowed.
    \msg_see_documentation_text:n { tikzsymbols } 
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{ internal-message  }
% \changes{v4.05}{2017/08/09}{New}
%    \begin{macrocode}
\msg_new:nnnn { tikzsymbols } { internal-message  } 
  {  
    This \ is \ an \ internal \ message \ and \ means \ that \
    I \ (the \ package \ author) \ fucked \ up. \ If \ you \
    stumble \ across \ this, \ the \ description \ message \
    is \ '#1'.
  }{
    I \ apologize \ for \ that.
    \msg_see_documentation_text:n { tikzsymbols } 
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{ unknown-argument-type  }
% \changes{v4.05}{2021/09/29}{New}
%    \begin{macrocode}
\msg_new:nnnn { tikzsymbols } { unknown-argument-type  } 
  {  
    The \ argument \ type ~ '#1' ~ is ~ not ~ known ~ by ~ this ~ 
    package. ~ Perhaps ~ you ~ misspelled ~ it? ~ The  ~ allowed  ~ 
    argument ~ types ~ are ~ 'm',  ~ 'B'  ~ and ~ 'S'. 
  }{
    You ~ cannot ~ use ~ '#1' ~ as  ~ an ~ argument ~ type.
    \msg_see_documentation_text:n { tikzsymbols } 
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{ unknown-argument-type  }
% \changes{v4.05}{2021/09/29}{New}
%    \begin{macrocode}
\msg_new:nnnn { tikzsymbols } { bad-argument-spec }
  { Bad ~ argument ~ specification ~ '#2' ~ for ~ symbol ~ #1 . }
  {
    The ~ argument ~ specification~provided~was~not~valid:~
    one~or~more~mandatory~pieces~of~information~were~missing.
    \msg_see_documentation_text:n { tikzsymbols } 
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{ package-option }
% \changes{v4.05}{2017/08/09}{New}
%    \begin{macrocode}
\msg_new:nnnn { tikzsymbols } { package-option } 
  {  
    The \ option \ '#1' \ is \ only \ allowed \ as \ a \ package
    \ option.
  }{
    This \ option \ is \ not \ allowed \ to \ be \ set \
    using \ \tikzsymbolsset{}.
    \msg_see_documentation_text:n { tikzsymbols } 
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{ symbol-name-unknown }
% \changes{v4.05}{2017/08/09}{New}
%    \begin{macrocode}
\msg_new:nnnn { tikzsymbols } { symbol-name-unknown } 
  {  
    The \ symbol \ '#1' \ is \ not \ available \ by \ this \ package.
  }{
    Perhaps \ you \ have \ misspelled it.
    \msg_see_documentation_text:n { tikzsymbols } 
  }
%    \end{macrocode}
% \end{macro}
%
%
%
%
%
%
%
%
%
%
% \subsection{Helping Commands}
% \label{sec:helping-commands}
%
% I define some macros which will help me  to write less.
%
%
%
%
%^^A The command \Makro{BasicTree} is split up into two commands, named
%^^A \texttt{on} and \texttt{off}. The helper command
%^^A \Makro{@@_Basic_Tree_aux:nnnnn} is redefined accordingly.
%^^A    \begin{macrocode}
%^^A    \end{macrocode}
%
%
% \begin{macro}{ \@@_symbol_scale_i:n , \@@_symbol_scale_ii:nn }
%    \begin{macrocode}
\cs_new:Npn \@@_symbol_scale_i:n #1
  {
    \@@_symbol_scale_ii:nn {#1} { 1.0 }
  }
\cs_new:Npn \@@_symbol_scale_ii:nn #1#2
  {
    \prop_get:NnNTF \g_@@_english_commands_prop {#1} \l_tmpa_tl
      {
        \fp_set:cn { l_@@_ \l_tmpa_tl _scale_fp } {#2}
      }{
        \fp_if_exist:cTF { l_@@_ #1 _scale_fp }
          { \fp_set:cn { l_@@_ #1 _scale_fp } {#2} }
          { \msg_error:nnn { tikzsymbols} { symbol-name-unknown } {#1} }
      }
  }
%    \end{macrocode}
% \end{macro}
%
%
% \begin{macro}{ \@@_set_scale_abs_tl:n }
%   Sets \Makro{l_@@_scale_abs_tl} to the absolute input value. I made
%   this to write less which is always a good idea (mostly).
%    \begin{macrocode}
\cs_new:Npn \@@_set_scale_abs_tl:n #1 
  {
    \tl_set:Nf \l_@@_scale_abs_tl { \fp_abs:n {#1} }
    \tl_set_eq:NN \tikzsymbolsscaleabs \l_@@_scale_abs_tl
  }
%    \end{macrocode}
% \end{macro}
%
%
% \begin{macro}{ \@@_create_draftbox:nn }
%   Creating the command to print the plain vanilla draft-boxes. The
%   group is needed because I am setting \Makro{vbadness} to
%   \Makro{c_max_dimen} to suppress underfull-hbox messages. The input
%   is evaluated because we need it for the height and the length of
%   the draftbox. The draftbox itself contains just the vbox and hbox
%   commands to set the height and length of the box surrounded by a
%   frame.
%
%   Note to self: DO NOT USE DIM! Multiplications do not work.
%    \begin{macrocode}
\cs_new:Npn \@@_create_draftbox:nn #1#2
  {
    \group_begin: 
    \vbadness=\c_max_dim
    \fp_set:Nn \l_tmpa_fp {#1}
    \fp_set:Nn \l_tmpb_fp {#2}
    \frame
      {
        \vbox_to_ht:nn { \fp_to_dim:N \l_tmpb_fp } 
          {
            \hbox_to_wd:nn { \fp_to_dim:N \l_tmpa_fp } { }
          }
      }
    \group_end: 
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{ \@@_create_squared_draftbox:n }
%   Again a command to write less. This command is used if the drat-box
%   is a square.
%    \begin{macrocode}
\cs_new:Npn \@@_create_squared_draftbox:n #1 
  { 
    \@@_create_draftbox:nn {#1} {#1} 
  }
%    \end{macrocode}
% \end{macro}
%
%
% \begin{macro}{ \@@_provide_savebox:nn }
%   \Makro{l_@@_current_situation_tl} is used here. The box
%   is only defined if it not defined yet. I don't know how those
%   boxes work, but if the same box (alias the same command in the
%   same font size and the same color and same options) is used again
%   the output (maybe) doesn't need to be calculated again. Its
%   faster, somehow, but it's faster. I am using the old commands
%   \Makro{global} and \Makro{sbox} because I didn't find the \LaTeX3
%   equivalents.
%    \begin{macrocode}
\cs_new:Npn \@@_provide_savebox:nn #1#2
  {
    \tl_set:Nx \l_@@_current_situation_tl 
      { 
        \bool_if:NTF \l_@@_if_opt_draft_bool { T } { F } _ 
        \current@color _ \f@size  
      }
    \box_if_exist:cF { g_@@_savebox_ \l_@@_current_situation_tl _ #1  _box }
      { 
        \box_new:c { g_@@_savebox_ \l_@@_current_situation_tl _ #1  _box } 
        \exp_args:NNc \global \sbox 
           { g_@@_savebox_ \l_@@_current_situation_tl _ #1 _box } {#2}
      }
  }
%    \end{macrocode}
% \end{macro}
%
%
%
%
% \begin{macro}{ \@@_use_savebox_aux:n }
%   Use the defined \Makro{sbox}-box.
%    \begin{macrocode}
\cs_new:Npn \@@_use_savebox:n #1
  {
    \exp_args:Nc \usebox 
      { g_@@_savebox_ \l_@@_current_situation_tl _ #1 _box }
  }
%    \end{macrocode}
% \end{macro}
%
%
%
%
% \begin{macro}{\@@_provide_savebox_and_use_default:nn, 
%    \@@_provide_savebox_and_use:nn }
% Again to support my laziness. It creates the box (if it isn't
% defined yet) and uses the box immediately afterwards.
%    \begin{macrocode}
\cs_new:Npn \@@_provide_savebox_and_use_default:nn #1#2
  {
    \@@_provide_savebox:nn {#1} {#2}
    \@@_use_savebox:n {#1}
  }
\cs_set_eq:NN \@@_provide_savebox_and_use:nn 
  \@@_provide_savebox_and_use_default:nn
%    \end{macrocode}
% \end{macro}
%
%
% To make this package \pkg{todonotes} safe:
%    \begin{macrocode}
\pgfkeys{ /@@/baseline /.style= { baseline=default } }
\pgfkeys{ /@@/arrows /.style= { arrows=- } }
\pgfkeys{ /@@/.style= { /@@/baseline , /@@/arrows } }
\pgfkeys{ /tikzsymbolsstyle/.style= { /@@ } }
%    \end{macrocode}
%
% 
% \subsection{Keys}
% \label{sec:keys}
% 
% Now let's define the keys for this package. Using \LaTeX3 makes the
% whole thing a bit easier. All keys (or most) are in a group. I may
% delete it because it may be not necessary.
%    \begin{macrocode}
\keys_define:nn { tikzsymbols }
  {
%    \end{macrocode}
%
% \begin{macro}{ final }
%   Its the final option, deddepi, deedidbtutp. Nothing special.
%  Also set the public version of this bool.
%    \begin{macrocode}
    final .choices:nn =
      { true , false }
      {
        \int_case:nn { \l_keys_choice_int }
          {
            { 1 } { \bool_set_false:N \l_@@_if_opt_draft_bool }
            { 2 } { \bool_set_true:N \l_@@_if_opt_draft_bool }
          }
        \bool_set_eq:NN \l_tikzsymbols_if_opt_draft_bool \l_@@_if_opt_draft_bool
      } ,
%    final .bool_set_inverse:N = \l_@@_if_opt_draft_bool ,
    final .default:n = { true } ,
%    \end{macrocode}
% \end{macro}
%
%
% \begin{macro}{ draft }
%   This option can be set to three values: true, false and absolute. I
%   decided that \Option{draft=absolute} is obsolete and that
%   \Option{draft=true} replaces this option. Of course, the 'absolute' is
%   still available, but gives a warning when used. Also sets the public version of
%   this bool.
%    \begin{macrocode}
    draft .choices:nn =
      { true , false , absolute }
      {
        \int_case:nn { \l_keys_choice_int }
          {
            { 1 } { \bool_set_true:N \l_@@_if_opt_draft_bool }
            { 2 } { \bool_set_false:N \l_@@_if_opt_draft_bool }
            { 3 } 
            { 
              \msg_error:nnnn { tikzsymbols } { obsolete-option } 
                { draft = absolute } { draft = true } 
              \bool_set_true:N \l_@@_if_opt_draft_bool 
            }
          }
        \bool_set_eq:NN \l_tikzsymbols_if_opt_draft_bool \l_@@_if_opt_draft_bool
      } ,
    draft .default:n= { false } ,
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{ draftabsolute }
%   Obsolete option. Old name for \Option{draft=absolute} which is
%   itself an old name for \Option{draft=true}. Don't use this option.
%    \begin{macrocode}
    draftabsolute .code:n = 
      {  
        \msg_error:nnnn { tikzsymbols } { obsolete-option } 
          { draftabsolute } { draft = true }
        \bool_set_true:N \l_@@_if_opt_draft_bool
        \bool_set_eq:NN \l_tikzsymbols_if_opt_draft_bool \l_@@_if_opt_draft_bool
      } , 
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{ marvosym }
%   Sets the marvosym-boolean to it respective value.
%    \begin{macrocode}    
    marvosym .bool_gset:N = \g_@@_if_opt_marvosym_bool ,
    marvosym .default:n = { true } ,
    marvosym .groups:n = { only-package } ,
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{ usebox }
%   Don't want to speed up the code due to random reasons? Set this
%   option to 'false'. 
%    \begin{macrocode}
    usebox .choice: , 
    usebox/true .code:n = 
      {
        \cs_set_eq:NN 
          \@@_provide_savebox_and_use:nn
          \@@_provide_savebox_and_use_default:nn
      } ,
    usebox/false .code:n = 
      {
        \cs_set_eq:NN 
          \@@_provide_savebox_and_use:nn
          \use_ii:nn
      } ,
    usebox .default:n = { true } ,
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{ prefix }
%   Sets the prefix of the commands. If for example \Option{prefix} is
%   set to \Option{tikz} this prefix is added to the command
%   names. \Makro{Sieb} will be \Makro{tikzSieb}.
%    \begin{macrocode}
    prefix .tl_gset:N =  \g_@@_command_prefix_tl ,
    prefix .default:n = { tikzsymbols } ,
    prefix .groups:n = { only-package } ,
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{ tree }
%   An old option, you should use \Option{draft=true} instead, but it
%   is not obsolete. For historic reasons this key still accepts 'on'
%   and 'off'.
%    \begin{macrocode}
    tree .choices:nn = 
      { true , on , false , off }
      {
        \int_compare:nNnTF { \l_keys_choice_int } < { 3 }
          { \bool_gset_true:N \g_@@_if_opt_tree_print_bool }
          { \bool_gset_false:N \g_@@_if_opt_tree_print_bool }
      } ,
    tree .default:n = { true } ,
%    \end{macrocode}
% \end{macro}
%
%
% \begin{macro}{ after-symbol }
% Available as package option, but should be used 
% using \Makro{tikzsymbolsuse}.
%    \begin{macrocode}
    after-symbol .tl_set:N = \l_@@_tikzsymbols_after_symbol_tl ,
    after-symbol .default:n= { \xspace } ,
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{ append-style }
%    \begin{macrocode}
    append-style .code:n = { \pgfkeys{ /@@/.append ~ style= {#1} } } ,
    append-style .default:n = { } ,
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{ baseline }
%    \begin{macrocode}
    baseline .choice: ,
    baseline / true .code:n = { \pgfkeys{ /@@/baseline/.style={ baseline=default } } } ,
    baseline / false .code:n = { \pgfkeys{ /@@/baseline/.style={ } } } ,
    baseline .default:n = { true } ,
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{ remember-picture }
%    \begin{macrocode}
    remember-picture .choice: ,
    remember-picture / true .meta:n = { append-style = { /tikz/remember~picture = true } } ,
    remember-picture / false .meta:n = { append-style = { /tikz/remember~picture = false } } ,
    remember-picture .default:n = { false } ,
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{ global-scale }
%    \begin{macrocode}
    global-scale .fp_set:N = \l_@@_global_scale_fp ,
    global-scale .default:n = { 1 } ,
%    \end{macrocode}
% \end{macro}
%
% This command has to be set later as
% the command names have not been defined yet.
% \begin{macro}{ symbol-scale }
%    \begin{macrocode}
    symbol-scale .code:n =
      {
        %% This key will be redefined later.
        \tl_set:Nn \l_@@_save_global_scale_for_later_because_no_better_idea_tl
          {
            symbol-scale = {#1} ,
          }
      } ,
    symbol-scale .default:n = { } ,
%    \end{macrocode}
% \end{macro}
%
%
%
%
% Now we end the key definitions.
%    \begin{macrocode}
  }
%    \end{macrocode}
%
%
%
%  We process all options. 
% \begin{macro}{ ProcessKeyOptions }
%    \begin{macrocode}
\ProcessKeysOptions { tikzsymbols }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{ symbol-scale }
%    \begin{macrocode}
\keys_define:nn { tikzsymbols }
  {
    symbol-scale .code:n = 
      { \keyval_parse:NNn \@@_symbol_scale_i:n \@@_symbol_scale_ii:nn {#1} }
  }
%    \end{macrocode}
% \end{macro}
%
%
%
%
% \subsubsection{DeclareDocumentCommand Helpers}
% \label{sec:declaredocumenthelpers}
%
% I define my own \Makro{DeclareDocumentCommand} (well, I am still
% using \Makro{DeclareDocumentCommand}, but I am wrapping some other
% commands around) to be able to add a prefix to the command-name and to
% be able to write \Makro{Command}[] (note the empty brackets, you
% don't need to insert a '1' inside, it is done automatically).
%
% \begin{macro}{ \@@_process_B_argument:n , \@@_process_S_argument:nn  }
%   These commands are used in \Makro{DeclareDocumentCommand} to help
%   setting the options with \verb|>{ \@@_process_B_argument:nn {#1} } O{#1}|
%   and |>{ \@@_process_S_argument:nn {<symbol_name>} } O{1}|. If the
%   brackets are empty the value of the option is inserted. Example:
%   The option has been defined by 'B{none}', so the value inserted if
%   no brackets are given is 'none'. If empty brackets are given,
%   normally nothing is inserted (and not 'none'). Using this command
%   if empty brackets are given 'none' is inserted automatically. This
%   safes some error messages. The same goes for |\@@_process_S_argument:nn|,
%   which also calculates the current scale of the symbol 
%   (taking symbol-scaling and global-scaling into account).
%   \Makro{ProcessedArgument} is defined in
%   the manual of \Package{xparse}.
%    \begin{macrocode}
\cs_new:Npn \@@_process_B_argument:nn #1#2
  {
    \tl_if_empty:nTF {#2}
      { \tl_set:Nn \ProcessedArgument {#1} }
      { \tl_set:Nn \ProcessedArgument {#2} }
  }
\cs_new:Npn \@@_process_S_argument:nn #1#2
  {
    \tl_set:Nx \ProcessedArgument
      {
        \fp_eval:n
          {
            \tl_if_empty:nTF {#2} { 1 } {#2}
            * \l_@@_global_scale_fp 
            * \use:c { l_@@_#1_scale_fp }
          }
      }
    \@@_set_scale_abs_tl:n { \ProcessedArgument }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{ \@@_parse_command_options:nn }
%   This command helps setting the default value if empty brackets are
%   given. The code is copied from the \Package{xparse} package and
%   edited to fit my purpose. This command gets the input from the
%   options-definition. 
%    \begin{macrocode}
\cs_new_protected:Npn \@@_parse_command_options:nn #1#2
  {
    \bool_set_false:N \l_@@_argument_parser_error_bool
    \clist_clear:N \l_@@_symbol_options_clist
    \tl_set:Nn \l_@@_symbol_name_tl {#1}
    \@@_parse_command_options_parse:n #2
      \q_recursion_tail \q_recursion_tail \q_recursion_tail \q_recursion_stop
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{ \@@_parse_command_options_parse:n }
%   This command (also copied) goes through the option-definitions (in
%   my case only 'm' and 'O\{...\}') character for character. If 'O'
%   is found a (somehow) special command is used. 
%    \begin{macrocode}
\cs_new_protected:Npn \@@_parse_command_options_parse:n #1
  {
    \quark_if_recursion_tail_stop:n {#1}
    \cs_if_exist_use:cF { @@_check_option_type_ \tl_to_str:n {#1} : }
      {
        \msg_error:nnn { tikzsymbols } { unknown-argument-type } {#1}
        \bool_set_true:N \l_@@_argument_parser_error_bool
        \use_none_delimit_by_q_recursion_stop:w
      }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro} { \@@_check_option_type_m: , \@@_check_option_type_B: , \@@_check_option_type_S: }
% Some wrapper macros. They are needed to check if the argument type is valid.
%    \begin{macrocode}
\cs_new:Npn \@@_check_option_type_m:
  { 
    \int_incr:c { l_@@_ \l_@@_symbol_name_tl _nr_arguments_int }
    \@@_parse_option_type_m: 
  }
\cs_new:Npn \@@_check_option_type_B:
  { 
    \int_incr:c { l_@@_ \l_@@_symbol_name_tl _nr_arguments_int }
    \@@_parse_option_type_B:n 
  }
\cs_new:Npn \@@_check_option_type_S:
  { 
    \int_incr:c { l_@@_ \l_@@_symbol_name_tl _nr_arguments_int }
    \@@_parse_option_type_S:V \l_@@_symbol_name_tl 
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{ \@@_parse_option_type_m: }
%   Just saves \enquote{m} in a clist. Does nothing more.
%    \begin{macrocode}
\cs_new:Npn \@@_parse_option_type_m: 
  {
    \clist_put_right:Nn \l_@@_symbol_options_clist { m }
    \@@_parse_command_options_parse:n
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{ \@@_parse_option_type_B:n }
%   Used if the \enquote{B} argument is found. Saves the default value of
%   the argument in \Makro{@@_process_B_argument:nn}. 
%    \begin{macrocode}
\cs_new_protected:Npn \@@_parse_option_type_B:n #1
  {
    \quark_if_recursion_tail_stop_do:nn {#1}
      {
        \msg_error:nnxx { tikzsymbols } { bad-argument-spec } 
          { \l_@@_symbol_name_tl }{ \tl_to_str:n {#1} }
        \bool_set_true:N \l_@@_argument_parser_error_bool
        \use_none_delimit_by_q_recursion_stop:w
      }
    \clist_put_right:Nn \l_@@_symbol_options_clist 
      { >{ \@@_process_B_argument:nn {#1} } O{#1}  }
    \@@_parse_command_options_parse:n
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{ \@@_parse_option_type_S:n , \@@_parse_option_type_S:V }
%   The |S| stands for \enquote{Scale}. Does somehting similar to \enquote{B}.
%   The difference is that it gets the symbol-name as |#1|. 
%    \begin{macrocode}
\cs_new_protected:Npn \@@_parse_option_type_S:n #1
  {
    \quark_if_recursion_tail_stop_do:nn {#1}
      {
        \msg_error:nnn { tikzsymbols } { internal-message } 
         { S-type-wrong-argument }
      }
    \clist_put_right:Nn \l_@@_symbol_options_clist 
      { >{ \@@_process_S_argument:nn {#1} } O{ 1 }  }
    \@@_parse_command_options_parse:n
  }
\cs_generate_variant:Nn \@@_parse_option_type_S:n { V }
%    \end{macrocode}
% \end{macro}
%
%
% \begin{macro}{ \@@_Declare_Document_Command:nnn }
%   Main Command to define the command of this package. It runs
%   through the second input (argument specifications), stores the
%   arguments in a \verb|\l_@@_symbol_options_clist| and adds
%   \verb|>{ \@@_process_B_argument:nn {#2} }| if an optional argument is
%   found. Yeah. I think the rest is self-explaining.
%    \begin{macrocode}
\cs_new:Npn \@@_Declare_Document_Command:nnn #1#2#3
  {
    \fp_zero_new:c { l_@@_ #1 _scale_fp }
    \fp_set:cn { l_@@_ #1 _scale_fp } { 1.0 }
    \int_zero_new:c { l_@@_ #1 _nr_arguments_int }
    \@@_parse_command_options:nn {#1} {#2}
    \bool_if:NF \l_@@_argument_parser_error_bool
      {
        \exp_args:Ncx \DeclareDocumentCommand 
          { \g_@@_command_prefix_tl #1 } 
          { \clist_use:Nn \l_@@_symbol_options_clist { } } 
          { 
            \cs_if_exist:NT \tikzsymbolsaftersymbolinput 
              {
                \msg_error:nn { tikzsymbols } { tikzsymbolsaftersymbolinput }
              }
            #3 
           \tl_use:N \l_@@_tikzsymbols_after_symbol_tl
          }
      }
  }
%    \end{macrocode}
% \end{macro}
%
%
% \begin{macro}{ \@@_Declare_Document_Commands:nnnn }
%   Needed for cooking-symbols. Automatically defines the english name
%   given in the second argument.
%    \begin{macrocode}
\cs_new:Npn \@@_Declare_Document_Commands:nnnn #1#2#3#4
  {
    \clist_gput_right:Nn 
    \g_tikzsymbols_list_of_printing_cooking_with_argument_commands_clist 
      {
        \cs{#1} & \cs{#2} & \oarg{scale} & \tikzsymbolsuse{#1} \\
      }
    \prop_gput:Nnn \g_@@_english_commands_prop {#2} {#1}
    \@@_Declare_Document_Command:nnn {#1} {#3} {#4}
    \@@_let:nn {#2} {#1}
  }
%    \end{macrocode}
% \end{macro}
%
%
%
%
%
%
%
%
%
% \begin{macro}{ \@@_let:nn }
%   Used to define the english commands. It's a simple
%   \Makro{cs_set_eq:cc} adding the prefix to the command-name. 
%    \begin{macrocode}
\cs_new:Npn \@@_let:nn #1#2
  {
    \cs_set_eq:cc { \g_@@_command_prefix_tl #1 } { \g_@@_command_prefix_tl #2 }
  }
%    \end{macrocode}
% \end{macro}
%
%
%
% \subsection{Public commands}
%
%
% \begin{macro}{\tikzsymbolsscaleabs,\tikzsymbolssetscaleabs}
% The public version of |\@@_set_scale_abs_tl:n| and |\l_@@_scale_abs_tl|.
%    \begin{macrocode}
\tl_new:N \tikzsymbolsscaleabs
\cs_new_protected:Npn \tikzsymbolssetscaleabs #1
  { \@@_set_scale_abs_tl:n {#1} }
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\tikzsymbolsdefinesymbol}
% A wrapper around |\@@_Declare_Document_Command:nnn|. 
%    \begin{macrocode}
\cs_new:Npn \tikzsymbolsdefinesymbol #1#2#3
  {
    \exp_args:Nx
    \@@_Declare_Document_Command:nnn { \tl_trim_spaces:n {#1} } {#2} {#3}
  }
%    \end{macrocode}
% \end{macro}  
% \begin{macro}{\tikzsymbolsprovideandusesavebox, \tikzsymbols_create_draftbox:nn, \tikzsymbols_create_squared_draftbox:n}
% Some more wrappers
%    \begin{macrocode}
\cs_new:Npn \tikzsymbolsprovideandusesavebox #1#2
  { \@@_provide_savebox_and_use:nn {#1} {#2} }
\cs_new:Npn \tikzsymbols_create_draftbox:nn #1#2
  { \@@_create_draftbox:nn {#1} {#2} }
\cs_new:Npn \tikzsymbols_create_squared_draftbox:n #1
  { \@@_create_squared_draftbox:n {#1} }
%    \end{macrocode}
% \end{macro}
%
%
%
%
%\subsection{Tree commands}
%\label{sec:tree-commands}
%
%
%
% \begin{macro}{ \c_@@_tikz_set_tl }
%  First I define  \verb|\c_@@_tikz_set_tl|, it contains the setup for
%  the tree. This definition is pretty much the definition from the
%  \Package{tikz} package.
%    \begin{macrocode}
\tl_const:Nn \c_@@_tikz_set_tl
  {
    \pgfkeys
      {
        /tikz/.cd ,
        @@_ld/.style={ level ~ distance=#1ex },
        @@_lw/.style={ line ~ width=#1ex },
        level ~ 1/.style={ @@_ld=0.60, @@_trunk, @@_lw=0.1 ,sibling ~ angle=60 },
        level ~ 2/.style={ @@_ld=0.20, @@_trunk!80!@@_leaf ~ a, @@_lw=.073,sibling ~ angle=70 },
        level ~ 3/.style={ @@_ld=0.25, @@_trunk!60!@@_leaf ~ a, @@_lw=.05,sibling ~ angle=70 }, 
        level ~ 4/.style={ @@_ld=0.10, @@_trunk!40!@@_leaf ~ a, @@_lw=.025,sibling ~ angle=60 },
        level ~ 5/.style={ @@_ld=0.15, @@_trunk!20!@@_leaf ~ a, @@_lw=.02,sibling ~ angle=60 },
        level ~ 6/.style={ @@_ld=0.08, @@_leaf ~ a, @@_lw=.021,sibling ~ angle=60 },
    }
  }
%    \end{macrocode}
% \end{macro}
%
%
% \begin{macro}{ \@@_Basic_Tree_aux:nnnnn }
%   I am still using a similar construction as in the \LaTeXe\
%   code. Inside this command is safed either
%   \Makro{@@_Basic_Tree_on:nnnnn} or \Makro{@@_Basic_Tree_off:nnnnn}
%   depending on the package options.
%    \begin{macrocode}
\cs_set:Npn \@@_Basic_Tree_aux:nnnnn
  {
    \bool_if:NTF \l_@@_if_opt_draft_bool
      { \@@_Basic_Tree_draft:nnnnn }
      {
        \bool_if:NTF \g_@@_if_opt_tree_print_bool
          { \@@_Basic_Tree_on:nnnnn }
          { \@@_Basic_Tree_off:nnnnn }
      }
  }
%    \end{macrocode}
% \end{macro}
%
%
% \begin{macro}{ \@@_Basic_Tree_off:nnnnn }
% This command creates not only the plain vanilla draftbox, but also a box
% drawn by \Package{tikz} using the colors of the tree to color the
% lines. If the last argument is 'leaf', the box has a bottom line, if
% it is empty the bottom line disappears.
%    \begin{macrocode}
\cs_new:Npn \@@_Basic_Tree_draft:nnnnn #1#2#3#4#5
  {
    \group_begin:
    \@@_set_scale_abs_tl:n { #1pt + 0.02ex }
    \tl_set:Nn \l_tmpa_tl {#5}
    \tl_if_eq:NNTF \c_@@_leaf_tl \l_tmpa_tl
      {
        \@@_create_draftbox:nn 
          { (1.669825ex+0.4pt) * \l_@@_scale_abs_tl }
          { (1.412645 ex + 0.2pt) * \l_@@_scale_abs_tl } %% 0.2pt = -0.2pt+0.4pt
      }{
        \@@_create_draftbox:nn 
          { (1.39223ex +0.4pt) * \l_@@_scale_abs_tl }
          { (1.27265ex + 0.2pt) * \l_@@_scale_abs_tl } %% 0.2pt = -0.2pt+0.4pt 
      }
    \group_end:
  }
\cs_new:Npn \@@_Basic_Tree_off:nnnnn #1#2#3#4#5
  {
    \group_begin:
    \@@_set_scale_abs_tl:n { #1pt + 0.02ex }
    \tl_set:Nn \l_tmpa_tl {#5}
    \begin{tikzpicture}[ /@@ , scale=#1+0.02ex,x=1ex,y=1ex, 
      line ~ width=0.4pt * \l_@@_scale_abs_tl]
      \tl_if_eq:NNTF \c_@@_leaf_tl \l_tmpa_tl
        {
          \draw[#2] (-0.8386,0+0.2pt) -- (-0.8386,1.42);
          \draw[#3] (-0.8386,1.42) -- (0.8386,1.42);
          \draw[#4] (0.8386,1.42) -- (0.8386,0+0.2pt);
          \draw[#3] (0.8386,0+0.2pt) -- (0,0+0.2pt);
          \draw[#4] (0,0+0.2pt) -- (-0.8386,0+0.2pt);
        }{
          \draw[#2] (-0.6998,0+0.2pt) -- (-0.6998,0.68+0.6);
          \draw[#3] (-0.6998,0.68+0.6) -- (0.6998,0.68+0.6);
          \draw[#4] (0.6998,0.68+0.6) -- (0.6998,0+0.2pt);
        }
    \end{tikzpicture}%
    \group_end:
  }
%    \end{macrocode}
% \end{macro}
%
%
%
% \begin{macro}{ \@@_Basic_Tree_on:nnnnn }
%   Prints the tree in all its glory. Again, this code is more or less
%   \Makro{l_@@_scale_negative_bool} is used in here.
%   copy and pasted from the \Package{tikz} manual.
%    \begin{macrocode}
\cs_new:Npn \@@_Basic_Tree_on:nnnnn #1#2#3#4#5
  {
    \group_begin:
%      % \@@_set_scale_abs_tl:n {#1}
      \fp_compare:nNnT {#1} < { 0 } { \bool_set_true:N \l_@@_scale_negative_bool }
      \tl_set:Nn \l_tmpa_tl {#5}
      \tl_use:N \c_@@_tikz_set_tl
      \colorlet { @@_trunk } {#2}
      \colorlet { @@_leaf ~ a } {#3}
      \colorlet { @@_leaf ~ b } {#4}
      \begin{tikzpicture}[ /@@ , x=1ex , y=1ex , line ~ width=0.07ex]
        \pgfarrowsdeclare{leaf}{leaf}
          { \pgfarrowsleftextend { -0.1ex } \pgfarrowsrightextend { -0.05ex } }
          {
            \pgfpathmoveto { \pgfpoint { -0.01ex } { 0ex } }
            \pgfpatharc { 150 } { 30 } { 0.08ex }
            \pgfpatharc {-30 } {-150 } { 0.08ex }
            \pgfusepathqfill
          }
        \tl_if_eq:NNTF \c_@@_leaf_tl \l_tmpa_tl 
          { 
            \draw[transparent , scale=#1+0.02ex , line ~ width=0.4pt* \l_@@_scale_abs_tl ] 
              (-0.8386,0+0.2pt) rectangle (0.8386, 1.42);
          }{
            \draw[transparent , scale=#1+0.02ex , line ~ width=0.4pt* \l_@@_scale_abs_tl ] 
              (-0.6998,0+0.2pt) rectangle (0.6998,0.68+0.6);
          }
        \pgflowlevel { \pgftransformscale { #1 + 0.02ex } }
            {
              \coordinate (root) [grow ~ cyclic , rotate=90] child 
                {
                  child [line ~ cap=round] foreach \a in { 0 , 1 , 2 } 
                    { 
                      child ~ foreach \b in { 0 , 1 } 
                        {
                          child ~ foreach \c in { 0 , 1 , 2 } 
                            { child ~ foreach \d in { 0 , 1 } 
                              {
                                child ~ foreach ~ \leafcolor in { @@_leaf ~ a , @@_leaf ~ b } 
                                { edge ~ from ~ parent ~ [color=\leafcolor,-#5]}
                              }
                            }
                        }
                    } 
                  edge ~ from ~ parent [shorten ~ >=-0.05ex, serif ~ cm- , line ~ cap=butt]
                };
           }
      \end{tikzpicture}
%      \bool_set_false:N \l_@@_scale_negative_bool
    \group_end:
  }
%    \end{macrocode}
% \end{macro}
%
% Thats the end of our tree drawing commands. \Makro{BasicTree}
% itself is defined later.
%
% \subsection{cooking utensils}
%
% Now let's define the cooking utensils (or cooking tools,
% whatever). 
%
% \begin{macro}{ \Kochtopf , \pot }
%   I think this was my first cooking utensil I made. It's a pot
%   containing boiling water. To create the german and english command
%   at the same time I use \Makro{@@_Declare_Document_Commands:nnnn}.
%   The buildup of this commands, as you saw ob subsection above, is
%   alway the same. First is the definition of the savebox. Inside the
%   absolute scaling value is safed and then checked if the plain
%   vanilla draft-boxes or the tool itself should be printed. The
%   draftbox is created via \Makro{@@_create_draftbox:nn} and contains
%   the necessary dimensions so that the output of the surroundings of
%   the symbol doesn't change\footnote{English, B\"a\"ahh!}. The
%   symbol is created using the 'tikzpicture' environment. Yup.
%    \begin{macrocode}
\@@_Declare_Document_Commands:nnnn { Kochtopf } { pot } { S }
  {
    \@@_provide_savebox_and_use:nn { Kochtopf_#1 }
      {
%        % \@@_set_scale_abs_tl:n {#1}
        \bool_if:NTF \l_@@_if_opt_draft_bool
          {
            \@@_create_draftbox:nn 
              { 2.47001ex * \l_@@_scale_abs_tl } 
              { 1.577ex * \l_@@_scale_abs_tl }
          }{
            \begin{tikzpicture}[ /@@ , x=2ex, y=2.2ex, 
              line ~ width=0.07ex * \l_@@_scale_abs_tl , 
              scale=#1 ]
%    \end{macrocode}
% Let's draw the pot.
%    \begin{macrocode}
              \draw[rounded ~ corners=0.2ex * \l_@@_scale_abs_tl] (0,0.5) -- (0,0) -- (1,0) -- (1,0.5);
              \draw (0,0.4)  arc [start ~ angle=90, end ~ angle=270, radius=0.1];
              \draw (1,0.4) arc [start ~ angle=90, end ~ angle=-90, radius=0.1];
              \draw (0,0.5) -- (1,0.5) .. controls (1,0.6) and (0,0.6) .. (0,0.5);
              \draw (0.6,0.585) arc [start ~ angle=0, end ~ angle=180, radius=0.1];
%    \end{macrocode}
% Let's draw the water.
%    \begin{macrocode}
              \draw[decorate, decoration=
                { snake , amplitude=0.12ex*\l_@@_scale_abs_tl , segment ~ length=0.93ex * \l_@@_scale_abs_tl } ]
                (0,0.35) -- (1,0.35);
%    \end{macrocode}
% Now the bubbles are printed.
%    \begin{macrocode}
              \draw (0.45,0.1) circle [radius=0.04];
              \draw (0.7,0.11) circle [radius=0.04];
              \draw (0.13, 0.125) circle [radius=0.04];
              \draw (0.3,0.2) circle [radius=0.04];
              \draw (0.88,0.2) circle [radius=0.04];
              \draw (0.1,0.25) circle [radius=0.04];
              \draw (0.6,0.25) circle [radius=0.04];
            \end{tikzpicture}
          }
      }
  }
%    \end{macrocode}
% \end{macro}
%
%
%
% \begin{macro}{ \Bratpfanne , \fryingpan }
%   I think I wont add text to every command because I think a
%   description is not really necessary.
%    \begin{macrocode}
\@@_Declare_Document_Commands:nnnn { Bratpfanne } { fryingpan } { S }
  {
    \@@_provide_savebox_and_use:nn { Bratpfanne_#1 }
      {
%        % \@@_set_scale_abs_tl:n {#1}
        \bool_if:NTF \l_@@_if_opt_draft_bool
          {
            \@@_create_draftbox:nn 
              { 3.55349ex * \l_@@_scale_abs_tl } 
              { 1.4525ex * \l_@@_scale_abs_tl }
          }{
            \begin{tikzpicture}
              [
                /@@ ,
                x=0.7ex , y=1.4ex , line ~ width=0.07ex * \l_@@_scale_abs_tl, 
                scale=#1 , decoration=
                  { 
                    snake , amplitude = 0.05ex * \l_@@_scale_abs_tl , 
                    segment ~ length = 0.408ex * \l_@@_scale_abs_tl
                  }
              ]
%    \end{macrocode}
% Drawing the actual fryingpan.
%    \begin{macrocode}              
              \draw[rounded ~ corners = 0.07ex * \l_@@_scale_abs_tl]
                (-1,0) -- (1,0) -- (1.5,0.4) -- (-1.5,0.4) -- cycle;
              \draw[line ~ width = 0.037ex * \l_@@_scale_abs_tl , rounded ~ corners=0.023ex * \l_@@_scale_abs_tl]
                (-1.4,0.3) -- (-3.5,0.3) -- (-3.5,0.25) -- (-1.3,0.25);
              \draw[line ~ width=0.023ex * \l_@@_scale_abs_tl ]
                (-1.1,0.1) -- (1.1,0.1);
%    \end{macrocode}
% The following code prints the \dots\ ahm \dots\ Hitzwellen die aus
% der Pfanne aufsteigen (oder so).
%    \begin{macrocode}
              \foreach \l_tmpa_tl in { -0.3, 0.3, -1 , 1 }
                \draw[line ~ width=0.035ex * \l_@@_scale_abs_tl, decorate] ( \l_tmpa_tl , 0.5 ) -- ( \l_tmpa_tl , 1 );
            \end{tikzpicture}%
          }
      }
  }
%    \end{macrocode}
% \end{macro}
%
%
%
%
% \begin{macro}{ \Schneebesen , \eggbeater }
%    \begin{macrocode}
\@@_Declare_Document_Commands:nnnn { Schneebesen } { eggbeater } { S }
  {
    \@@_provide_savebox_and_use:nn { Schneebesen_#1 }
      {
%        % \@@_set_scale_abs_tl:n {#1}
        \bool_if:NTF \l_@@_if_opt_draft_bool
          {
            \@@_create_draftbox:nn 
              { 0.56969 ex * \l_@@_scale_abs_tl } 
              { 1.57985ex * \l_@@_scale_abs_tl }
          }{
            \begin{tikzpicture}
              [
                /@@ ,
                y=2.1ex,x=1.4ex, scale=#1,
                line ~ width = 0.01ex * \l_@@_scale_abs_tl * 0.97
              ]
              \foreach \l_tmpa_fp in { -0.2 , -0.15, -0.1, -0.05, 0, 0.05, 0.1, 0.15, 0.2 } 
                \draw  (0,0) .. controls ( \l_tmpa_fp , 0.0) and  ( \l_tmpa_fp ,0.2) ..  (0,0.4);
              \fill
                [
                  line ~ width = 0.05ex * \l_@@_scale_abs_tl , 
                  rounded ~ corners=0.07ex* \l_@@_scale_abs_tl 
                ]
                (-0.05,0.37) -- (0.05,0.37) -- (0.05,0.75) -- (-0.05,0.75) -- cycle;
            \end{tikzpicture}%
          }
      }
  }
%    \end{macrocode}
% \end{macro}
%
%
%
%
% \begin{macro}{ \Sieb , \sieve }
% A sieve, now the lines are not drawn manually, but using the power
% of trigonometric functions and \Package{tikz}. Wasn't really
% necessary, but I did it anyway.
%    \begin{macrocode}
\@@_Declare_Document_Commands:nnnn { Sieb } { sieve } { S }
  {
    \@@_provide_savebox_and_use:nn { Sieb_#1 }
      {
%        % \@@_set_scale_abs_tl:n {#1}
        \bool_if:NTF \l_@@_if_opt_draft_bool
          {
            \@@_create_draftbox:nn 
              { 3.47799 ex * \l_@@_scale_abs_tl } 
              { 1.17501 ex * \l_@@_scale_abs_tl }
          }{
            \begin{tikzpicture}
              [
                /@@ ,
                x=2.8ex, y=2.8ex,line ~ width=0.02ex * \l_@@_scale_abs_tl  , scale=#1
              ]
%    \end{macrocode}
% Drawing a simple line to hold the sieve.
%    \begin{macrocode}
              \draw[line ~ width=0.09ex* \l_@@_scale_abs_tl ] (-0.2,0) -- (1.01,0);
%    \end{macrocode}
% Drawing halved circles with decreasing radius.
%    \begin{macrocode}
              \foreach \l_tmpa_fp in { 0.2 , 0.25 , ... , 0.551 }
                \draw (\l_tmpa_fp,0) arc [start ~ angle=180, end ~ angle=360, radius=0.6-\l_tmpa_fp];
%    \end{macrocode}
% Drawing the vertical lines of the sieve. Ahm, I may should explain
% how this code works. \Makro{l_tmpa_fp} (again misused I think)
% contains the starting point of the lines which will go from top to
% bottom. 
%
% Our sieve is looking like this at the moment:
%
%\begin{center}
%\begin{tikzpicture}[scale=5]
%  \draw[very thick]  
%    (-0.2,0) node [ anchor=east ]{-0.2} -- (1.01,0) node [ anchor=west ]{1.01};
%  \draw[dashed] (0.6,-0.5) -- (0.6,0.1);
%  \draw (0.6,0) node [anchor=south west] {0.6};
%  \foreach \x in { 0.2 , 0.25 , ... , 0.551 }
%    \draw (\x,0) arc [start angle=180, end angle=360, radius=0.6-\x];
%\end{tikzpicture}
%\end{center}
% 
% The largest circle end at the coordinate (1,0) and so its radius is $r=0.4$.
% Now we want to draw a line from the beginning of a smaller circle
% to the largest circle. We take for example the next smaller circle:
%
% \begin{center}
%\begin{tikzpicture}[scale=5]
%  \draw[very thick] (-0.2,0) node [ anchor=east ]{-0.2}  -- (1.01,0) node [ anchor=west ]{1.01};
%  \draw[dashed] (0.6,-0.5) -- (0.6,0.1);
%  \draw (0.6,0) node [anchor=south west] {0.6};
%  \draw[dashed] (0.2,0) arc [start angle=180, end angle=360, radius=0.4];
%  \draw (0.3,0) node[above=1pt]{0.3} arc [start angle=180, end angle=360, radius=0.6-0.3] node [above]{0.9};
%  \draw[brown,dashed,->] (0.6,0) -- node[right]{0.4} (  {0.6 - cos ( 45 ) *0.4 },{ sin ( -45 )*0.4 });
%\end{tikzpicture}
% \end{center}
%
% The dashed line shows the largest circle. The only things we know are
% the length $l$ from the middle of the circle (0.6 , 0) to the starting point (0.9 , 0):
% $l=0.9-0.6$ and we know the radius of the circle: $r=0.4$. The next picture \dots
% pictures this:
%
% \begin{center}
%\begin{tikzpicture}[scale=5]
%  \draw[thick] (-0.2,0)   -- (1.01,0) ;
%  \draw[dashed] (0.6,-0.5) -- (0.6,0.1);
%  \draw[dashed] (0.2,0) arc [start angle=180, end angle=360, radius=0.4];
%  \draw (0.3,0)  arc [start angle=180, end angle=360, radius=0.6-0.3] ;
%  \draw[green,very thick] (0.6,0) -- node [above,fill=white] {$l= 0.9-0.6=0.3$} (0.9,0);
%  \draw[red,very thick] (0.9,0) -- node [right,fill=white] {$h=?$}  ( 0.9, { -0.4 * sin( acos( ( 0.9 - 0.6 ) /0.4) ) } );
%  \draw[brown] (0.6,0) -- node [left=8pt,fill=white] {$r=0.4$}  ( 0.9, { -0.4 * sin( acos( ( 0.9 - 0.6 ) /0.4) ) } );
%  \draw[orange,very thick] (0.8,0) node [anchor=north east] {$\alpha$} arc  [start angle=0, end angle={-acos( ( 0.9 - 0.6 ) /0.4)}, radius=0.2];
%\end{tikzpicture}
% \end{center}
% 
% We have the length and the radius and need the height $h$. The easiest way would
% be the use of the sinus: $\sin(\alpha)=\frac{h}{r}$, but we don't have $\alpha$,
% so we have to make an extra calculation:
%
%\begin{align}
%  \cos(\alpha) &= \frac{ l }{ r } = \frac{0.9-0.6}{0.4}  && / \arccos(...) \\
%  \alpha  &= \arccos\bigg( \frac{0.9-0.6}{0.4} \bigg) 
%\end{align} 
%
% Now we have the angle $\alpha$ and can calculate the height $h$:
%
%\begin{align}
%  -\sin(\alpha) &= \frac { h } { 0.4 }  && / \cdot 0.4 \\
%  h  &= -0.4 \cdot \sin(\alpha)  && /  \alpha = ... \\
%  h &=  -0.4 \cdot \sin\bigg[\arccos\bigg( \frac{0.9-0.6}{0.4} \bigg)\bigg]
%\end{align} 
%
% And to use it as a overall formula:
%
%\begin{equation}
%  h =  -0.4 \cdot \sin\bigg[\arccos\bigg( \frac{ \backslash l\_tmpa\_fp -0.6 }{0.4} \bigg)\bigg]
%\end{equation} 
%
% Using this formula we can draw the line (\textbackslash l\_tmpa\_fp,0) -{}- (\textbackslash l\_tmpa\_fp,h):
%
% Something similar is used for the horizontal lines.
%
%    \begin{macrocode}
              \foreach \l_tmpa_fp in  { 0.95,0.9,...,0.249 }
                \draw (\l_tmpa_fp,0) -- 
                  ( \l_tmpa_fp, { -0.4 * sin( acos( ( \l_tmpa_fp - 0.6 ) /0.4) ) } );
              \foreach \y in  { -0.05 , -0.1 , ... , -0.351 }
                \pgfmathsetmacro{\x}{0.4*cos( asin( \y /0.4 ) )}
                \draw ({0.6 - \x },\y) --  ({ 0.6 +\x},\y);
            \end{tikzpicture}%
          }
      }
  }
%    \end{macrocode}
% I hope I was able to explain it. 
% \end{macro}
%
%
%
%
% \begin{macro}{ \Purierstab , \blender }
%   Ein P\"urierstab \dots\ ja.
%    \begin{macrocode}
\@@_Declare_Document_Commands:nnnn { Purierstab } { blender } { S }
  {
    \@@_provide_savebox_and_use:nn { Purierstab_#1 }
      {
%        % \@@_set_scale_abs_tl:n {#1}
        \bool_if:NTF \l_@@_if_opt_draft_bool
          {
            \@@_create_draftbox:nn 
              { 0.76ex * \l_@@_scale_abs_tl } 
              { 1.575ex * \l_@@_scale_abs_tl }
          }{
            \begin{tikzpicture}
              [
                /@@ ,
                x=2.3ex , y=2.2ex, line ~ width=0.07ex * \l_@@_scale_abs_tl ,scale = #1
              ]
              \draw[rounded ~ corners=0.07ex* \l_@@_scale_abs_tl ] 
                (0,0) -- (0.3,0) --  (0.15,0.1) --cycle;
              \fill[rounded ~ corners=0.07ex* \l_@@_scale_abs_tl ] 
                (0.15,0.3) -- (0.24,0.4) -- (0.24,0.7) -- (0.06,0.7) -- (0.06,0.4) -- cycle;
              \draw (0.15,0.4) -- (0.15,0.1);
            \end{tikzpicture}%
          }
      }
  }
%    \end{macrocode}
% \end{macro}
%
%
%
%
% \begin{macro}{ \Dreizack , \trident }
% A trident, an important tool to check if potatoes are cooked enough.
%    \begin{macrocode}
\@@_Declare_Document_Commands:nnnn { Dreizack } { trident } { S }
  {
    \@@_provide_savebox_and_use:nn { Dreizack_#1 }
      {
%        % \@@_set_scale_abs_tl:n {#1}
        \bool_if:NTF \l_@@_if_opt_draft_bool
          {
            \@@_create_draftbox:nn 
              { 0.265ex * \l_@@_scale_abs_tl } 
              { 1.575ex * \l_@@_scale_abs_tl }
          }{
            \begin{tikzpicture}
              [
                /@@ ,
                x=2.3ex , y=2.2ex , line ~ width=0.035ex * \l_@@_scale_abs_tl , scale = #1
              ]
              \fill[ rounded ~ corners=0.07ex * \l_@@_scale_abs_tl * 0.99 ]
                (0,0) -- (0,0.4)  -- (0.1,0.4) -- (0.1,0.0) -- cycle;
              \draw (0.05,0) -- (0.05,0.7);
              \draw[rounded ~ corners=0.07ex * \l_@@_scale_abs_tl *( 1 - \l_@@_scale_abs_tl /50 ]
                (0,0.7) -- (0,0.55)  -- (0.05,0.55) -- (0.1,0.55) --  (0.1,0.7);
            \end{tikzpicture}%
          }
      }
  }
%    \end{macrocode}
% \end{macro}
%
%
%
%
% \begin{macro}{ \Backblech , \bakingplate }
%   With holes.
%    \begin{macrocode}
\@@_Declare_Document_Commands:nnnn { Backblech } { bakingplate } { S }
  {
    \@@_provide_savebox_and_use:nn { Backblech_#1 }
      {
%        % \@@_set_scale_abs_tl:n {#1}
        \bool_if:NTF \l_@@_if_opt_draft_bool
          {
            \@@_create_draftbox:nn 
              { 2.31545ex * \l_@@_scale_abs_tl } 
              { 1.57ex * \l_@@_scale_abs_tl }
          }{
            \begin{tikzpicture}
              [
                /@@ ,
                x=6.53ex , y=5ex , line ~ width=0.07ex * \l_@@_scale_abs_tl , scale = #1
              ]
              \filldraw[rounded ~ corners=0.09ex * \l_@@_scale_abs_tl ] (0,0) rectangle (0.3,0.3);
              \foreach \xI/\xII in { 0.1/-0.025 , 0.2/0.325 }
                \draw[rounded ~ corners=0.07ex * \l_@@_scale_abs_tl , line ~ width=0.03ex* \l_@@_scale_abs_tl ]
                   (\xI,0) -- (\xII,0) -- (\xII,0.3) -- (\xI,0.3);
              \foreach \@@_BackblechlochX in { 0.007 , 0.293 }
                \foreach \@@_BackblechlochY in { 0.007 , 0.293 }
                  \fill[white] (\@@_BackblechlochX, \@@_BackblechlochY) circle [radius=0.02ex];
            \end{tikzpicture}%
          }
      }
  }
%    \end{macrocode}
% \end{macro}
%
%
%
%
% \begin{macro}{ \Ofen , \oven }
%   Ein Ofen. Sieht eigentlich so aus wie der zu Hause.
%    \begin{macrocode}
\@@_Declare_Document_Commands:nnnn { Ofen } { oven } { S }
  {
    \@@_provide_savebox_and_use:nn { Ofen_#1 }
      {
%        % \@@_set_scale_abs_tl:n {#1}
        \bool_if:NTF \l_@@_if_opt_draft_bool
          {
            \@@_create_draftbox:nn 
              { 2.07ex * \l_@@_scale_abs_tl } 
              { 1.57ex * \l_@@_scale_abs_tl }
          }{
            \begin{tikzpicture}
              [
                /@@ ,
                x=0.50ex , y=0.5ex , line ~ width=0.07ex * \l_@@_scale_abs_tl , scale=#1
              ]
              \draw (0,0) rectangle (4,3);
              \draw (0.25,0.25) rectangle (3.75,2);
              \foreach \@@_Ofenschalter in {0.5,1.1,2.9,3.5}
                \fill (\@@_Ofenschalter,2.5) circle [radius=0.22];
              \draw (1.5,2.28) rectangle  (2.5,2.72);
              \draw[line ~ width=0.05ex * \l_@@_scale_abs_tl] (1,1.75) -- (3,1.75);
            \end{tikzpicture}%
          }
      }
  }
%    \end{macrocode}
% \end{macro}
%
%
%
%
% \begin{macro}{ \Pfanne , \pan }
% A pan with a wave-decoration. Resembles the one at home.
%    \begin{macrocode}
\@@_Declare_Document_Commands:nnnn { Pfanne } { pan } { S }
  {
    \@@_provide_savebox_and_use:nn { Pfanne_#1 }
      {
%        % \@@_set_scale_abs_tl:n {#1}
        \bool_if:NTF \l_@@_if_opt_draft_bool
          {
            \@@_create_draftbox:nn 
              { 3.034ex * \l_@@_scale_abs_tl } 
              { 0.78ex * \l_@@_scale_abs_tl }
          }{
            \begin{tikzpicture}
              [
                /@@ ,
                x=2.3ex , y=2.3ex , line ~ width=0.09ex * \l_@@_scale_abs_tl , scale=#1
              ]
              \draw [rounded ~ corners = 0.023ex * \l_@@_scale_abs_tl ]
                 (0,0) -- (0.9,0) -- (1,0.3) -- (-0.1,0.3) -- cycle;
              \draw (-0.2,0.22) -- (-0.08,0.22);
              \draw (0.97,0.22) -- (1.08,0.22);
              \draw
                [
                  decorate , decoration=
                    {
                      snake,amplitude =.046ex* \l_@@_scale_abs_tl ,
                      segment ~ length = 0.82ex* \l_@@_scale_abs_tl 
                    },
                 line ~ width=0.05ex* \l_@@_scale_abs_tl 
                 ]
                 (-0.05,0.1) -- (0.95,0.1);
            \end{tikzpicture}%
          }
      }
  }
%    \end{macrocode}
% \end{macro}
%
%
%
%
% \begin{macro}{ \Herd , \cooker }
%   Needed to cook things. Is pretty much looks exactly like the one
%   at home.
%    \begin{macrocode}
\@@_Declare_Document_Commands:nnnn { Herd } { cooker } { S }
  {
    \@@_provide_savebox_and_use:nn { Herd_#1 }
      {
%        % \@@_set_scale_abs_tl:n {#1}
        \bool_if:NTF \l_@@_if_opt_draft_bool
          {
            \@@_create_draftbox:nn 
              { 2.08ex * \l_@@_scale_abs_tl } 
              { 1.58ex * \l_@@_scale_abs_tl }
          }{
            \begin{tikzpicture}
              [
                /@@ ,
                x=1ex , y=1ex , line ~ width= 0.04ex * \l_@@_scale_abs_tl , scale = #1
              ]
              \draw[line ~ width=0.08ex* \l_@@_scale_abs_tl ] (0,0) rectangle (2,1.5);
              \foreach \y/\radius in { 0.45/0.35 , 0.45/0.2 , 1.15/0.21 }
                \draw (0.5,\y) circle [radius=\radius];
              \draw (1.45,1.15) circle [radius=0.15];
              \draw (1.45,0.45) circle [radius=0.3];
              \draw (1.05,0.95) rectangle (1.85,1.35);
            \end{tikzpicture}%
          }
      }
  }
%    \end{macrocode}
% \end{macro}
%
%
%
%
% \begin{macro}{ \Saftpresse , \squeezer }
%   We have one of these, I still think its useful.
%    \begin{macrocode}
\@@_Declare_Document_Commands:nnnn { Saftpresse } { squeezer } { S }
  {
    \@@_provide_savebox_and_use:nn { Saftpresse_#1 }
      {
%        % \@@_set_scale_abs_tl:n {#1}
        \bool_if:NTF \l_@@_if_opt_draft_bool
          {
            \@@_create_draftbox:nn 
              { 1.87ex * \l_@@_scale_abs_tl } 
              { 1.62ex * \l_@@_scale_abs_tl }
          }{
            \begin{tikzpicture}
              [
                /@@ ,
                x=1.2ex , y=1ex, line ~ width=0.07ex * \l_@@_scale_abs_tl ,scale=#1
              ]
              \draw[rounded ~ corners=0.1ex * \l_@@_scale_abs_tl ]
                 (0,0) rectangle (1.5,0.85) -- cycle;
              \draw (0,0.7) -- (1.5,0.7);
              \foreach \xi/\xii in { 0.3/1.2 , 0.45/1.05 , 0.65/0.85 }
                \draw[rounded ~ corners=0.1ex* \l_@@_scale_abs_tl ] 
                  (\xi,0.7) -- (0.75,1.55) -- (\xii,0.7);  
              \draw
                [
                  line ~ width=0.05ex* \l_@@_scale_abs_tl , decorate,
                  decoration=
                   {
                     snake,amplitude=0.05ex * \l_@@_scale_abs_tl ,
                     segment ~ length=0.48ex * \l_@@_scale_abs_tl 
                   }
                 ]  (0,0.3) -- (1.5,0.3);
            \end{tikzpicture}%
          }
      }
  }
%    \end{macrocode}
% \end{macro}
%
%
%
%
% \begin{macro}{ \Schussel , \bowl }
%   A bowl. The edge was an accident, but I thought that it looks good
%   and so I keeped it.
%    \begin{macrocode}
\@@_Declare_Document_Commands:nnnn { Schussel } { bowl } { S }
  {
    \@@_provide_savebox_and_use:nn { Schussel_#1 }
      {
%        % \@@_set_scale_abs_tl:n {#1}
        \bool_if:NTF \l_@@_if_opt_draft_bool
          {
            \@@_create_draftbox:nn 
              { 2.32ex * \l_@@_scale_abs_tl } 
              { 1.47ex * \l_@@_scale_abs_tl }
          }{
            \begin{tikzpicture}
              [
                /@@ ,
                x=1ex , y=1ex , line ~ width=0.07ex * \l_@@_scale_abs_tl , scale=#1
              ]
              \draw[rounded ~ corners=0.5ex* \l_@@_scale_abs_tl ]
                 (-0.02,1.4) -- (0,1.4) -- (0,0.05) -- (1.5,0.05) -- (1.5,1.4) -- (1.52,1.4);
              \draw (0.35,0) -- (1.15,0);
              \draw[transparent] (-0.4,0) -- (1.85,0); 
            \end{tikzpicture}%
          }
      }
  }
%    \end{macrocode}
% \end{macro}
%
%
%
%
% \begin{macro}{ \Schaler , \peeler }
%   Again an image of on I use to peel for example potatoes.
%    \begin{macrocode}
\@@_Declare_Document_Commands:nnnn { Schaler } { peeler } { S }
  {
    \@@_provide_savebox_and_use:nn { Schaler_#1 }
      {
%        % \@@_set_scale_abs_tl:n {#1}
        \bool_if:NTF \l_@@_if_opt_draft_bool
          {
            \@@_create_draftbox:nn 
              { 1.15ex * \l_@@_scale_abs_tl } 
              { 1.565ex * \l_@@_scale_abs_tl }
          }{
            \begin{tikzpicture}
              [
                /@@ ,
                x=2.7ex , y=2.3ex , line ~ width=0.07ex * \l_@@_scale_abs_tl , scale=#1
              ]
              \draw[rounded ~ corners=0.07ex* \l_@@_scale_abs_tl ]
                 (0,0.4) -- (0,0.1) arc [start ~ angle=0, end ~ angle=180, radius=-0.1] -- (0.2,0.4) -- 
                 (0.3,0.5) -- (0.3,0.65) -- (0.2,0.65) -- (0.2,0.5) -- (0,0.5) -- (0,0.65) --
                 (-0.1,0.65) -- (-0.1,0.5)  -- cycle;
              \draw[line ~ width=0.03ex* \l_@@_scale_abs_tl ] (0,0.58) rectangle (0.2,0.6);
            \end{tikzpicture}%
          }
      }
  }
%    \end{macrocode}
% \end{macro}
%
%
%
%
% \begin{macro}{ \Reibe , \grater }
%   I get out of ideas to write.
%    \begin{macrocode}
\@@_Declare_Document_Commands:nnnn { Reibe } { grater } { S }
  {
    \@@_provide_savebox_and_use:nn { Reibe_#1 }
      {
%        % \@@_set_scale_abs_tl:n {#1}
        \bool_if:NTF \l_@@_if_opt_draft_bool
          {
            \@@_create_draftbox:nn
              { 1.08ex * \l_@@_scale_abs_tl } 
              { 1.58ex * \l_@@_scale_abs_tl }
          }{
            \begin{tikzpicture}
              [
                /@@ ,
                x=1ex , y=1ex , line ~ width=0.08ex * \l_@@_scale_abs_tl , scale=#1
              ]
              \draw (0,0) rectangle (1,1.2);
              \draw[rounded ~ corners=0.04ex] (0.05,1.2) rectangle (0.95,1.5);
              \foreach\x in { 0.2, 0.4 , 0.6 , 0.8}
                \foreach\y in { 0.2 , 0.4, 0.6 , 0.8, 1}
                  \fill (\x,\y) circle [radius=0.05ex];
            \end{tikzpicture}%
          }
      }
  }
%    \end{macrocode}
% \end{macro}
%
%
%
%
% \begin{macro}{ \Flasche , \bottle }
%   It's a bottle. Uhhhh\dots
%    \begin{macrocode}
\@@_Declare_Document_Commands:nnnn { Flasche } { bottle } { S }
  {
    \@@_provide_savebox_and_use:nn { Flasche_#1 }
      {
%        % \@@_set_scale_abs_tl:n {#1}
        \bool_if:NTF \l_@@_if_opt_draft_bool
          {
            \@@_create_draftbox:nn 
              { 0.78ex * \l_@@_scale_abs_tl } 
              { 1.58ex * \l_@@_scale_abs_tl }
          }{
            \begin{tikzpicture}
              [
                /@@ ,
                x=1ex,y=1ex, line ~ width=0.08ex* \l_@@_scale_abs_tl , 
                rounded ~ corners=0.08ex* \l_@@_scale_abs_tl , scale=#1
              ]
              \draw (0, 1.5) -- (0,1.2) -- (-0.15,0.8) -- (-0.15,0) --++ 
                (0.6,0) --++ (0,0.8) --++ (-0.15,0.4) --++ (0,0.3) -- cycle;
              \draw[transparent] (-0.2,0) --++ (0.7,0);
            \end{tikzpicture}%
          }
      }
  }
%    \end{macrocode}
% \end{macro}
%
%
%
%
%
% \begin{macro}{ \Nudelholz , \rollingpin }
%   You know what that is\dots
%
% For the draftbox the calculation of the length is \verb|(1.26ex + 4.25ex)*0.8 + 0.1ex|.
%    \begin{macrocode}
\@@_Declare_Document_Commands:nnnn { Nudelholz } { rollingpin } { S }
  {
    \@@_provide_savebox_and_use:nn { Nudelholz_#1 }
      {
%        % \@@_set_scale_abs_tl:n {#1}
        \bool_if:NTF \l_@@_if_opt_draft_bool
          {
            \@@_create_draftbox:nn 
              { 4.516ex * \l_@@_scale_abs_tl }%% 
              { 0.9ex * \l_@@_scale_abs_tl }
          }{
            \begin{tikzpicture}
              [
                /@@ ,
                x=0.8ex, y=0.8ex, scale=#1, line ~ width=0.1ex * \l_@@_scale_abs_tl ,
              ]
              \draw[rounded ~ corners=0.10ex*\l_@@_scale_abs_tl] (0,0) rectangle (3,1);
              \draw[rounded ~ corners=0.15ex*\l_@@_scale_abs_tl] 
                (3,0.75) -- (3.25,0.6) -- (3.75,0.7) -- (4.25,0.6)
                (3,0.25) -- ( 3.25,0.4 ) -- (3.75,0.3) -- (4.25,0.4);
              \draw (4.25,0.5) ellipse [x ~ radius=0.01, y ~ radius=0.1];
              \draw[rounded ~ corners=0.15ex*\l_@@_scale_abs_tl] 
                (-0,0.75) -- (-0.25,0.6) -- (-0.75,0.7)
                -- (-1.25,0.6)
                (-0,0.25) -- ( -0.25,0.4 ) -- (-0.75,0.3) -- (-1.25,0.4);
              \draw (-1.25,0.5) ellipse [x ~ radius=0.01, y ~ radius=0.1];
            \end{tikzpicture}
          }
      }
  }
%    \end{macrocode}
% \end{macro}
%
%
% \begin{macro}{ \Knoblauchpresse \garlicpress }
% I always forget that the line width is added only once to the 
% draft box.
%
% The design is similar to the one I own.
%    \begin{macrocode}
\@@_Declare_Document_Commands:nnnn { Knoblauchpresse } { garlicpress } { S }
  {
    \@@_provide_savebox_and_use:nn { Knoblauchpresse_#1 }
      {
%        % \@@_set_scale_abs_tl:n {#1}
        \bool_if:NTF \l_@@_if_opt_draft_bool
          {
            \@@_create_draftbox:nn 
              { 4.3ex * \l_@@_scale_abs_tl }
              { 1.6ex * \l_@@_scale_abs_tl }
          }{
            \begin{tikzpicture}
              [
                /@@ ,
                x=1ex, y=1ex, scale=#1, line ~ width=0.1ex * \l_@@_scale_abs_tl ,
              ]
              \draw[rounded ~ corners = 0.1ex*\l_@@_scale_abs_tl] 
                (1, 0) -- (4, 0) -- (4,-0.2) -- (1, -0.2)
                (-0.1, 0.5) -- (4, 0.5) -- (4,0.3) -- (0, 0.3);
              \draw [rounded ~ corners = 0.21ex*\l_@@_scale_abs_tl] 
                (0,0) -- (0,-1) -- (1,-1)  -- (1,0);
              \draw (1,0) -- (0,0) -- (0,0.4) ;
              \draw (0,-0.85) -- (-0.2, -0.6) -- (-0.2, 0.4);
              \draw (-0.1,0.4) circle[radius=0.1];
              \draw (0.3, 0) rectangle +(0.4, 0.3);
            \end{tikzpicture}
          }
      }
  }
%    \end{macrocode}
% \end{macro}
%
%
%
%
%
%
% \subsection{Emoticonscode}
%
% Now the emoticons are coded.
%
%
%
%
% \begin{macro}{ \Sadey }
%   I don't know why Sadey is the first and not Smiley, probably for reasons.
%    \begin{macrocode}
\@@_Declare_Document_Command:nnn { Sadey } { S B{none} }
  {
    \@@_provide_savebox_and_use:nn { Sadey_#1_#2 }
      {
%        % \@@_set_scale_abs_tl:n {#1}
        \bool_if:NTF \l_@@_if_opt_draft_bool
          {
            \@@_create_squared_draftbox:n { 1.684ex * \l_@@_scale_abs_tl } 
          }{
            \begin{tikzpicture}
              [
                /@@ ,
                x=2.4ex , y=2.4ex, line ~ width=0.09ex * \l_@@_scale_abs_tl , scale = #1
              ]
              \filldraw[fill=#2, line ~ width=0.1ex* \l_@@_scale_abs_tl ] (0,0) circle [radius=0.33];
              \fill (0.1,0.1) circle [radius=0.05];
              \fill (-0.1,0.1) circle [radius=0.05];
              \draw (-0.2,-0.15) .. controls (-0.1,-0.06) and (0.1,-0.06) .. (0.2,-0.15);
            \end{tikzpicture}
          }
      }
  }
%    \end{macrocode}
% \end{macro}
%
%
% \begin{macro}{ \dSadey }
%   Coding the \enquote{3D} Sadey. Again, nothing special.
%    \begin{macrocode}
\@@_Declare_Document_Command:nnn { dSadey } { S B{yellow} }
  {
    \@@_provide_savebox_and_use:nn { dSadey_#1_#2 }
      {
%        % \@@_set_scale_abs_tl:n {#1}
        \bool_if:NTF \l_@@_if_opt_draft_bool
          {
            \@@_create_squared_draftbox:n { 1.584ex * \l_@@_scale_abs_tl } 
          }{
            \begin{tikzpicture}
              [
                /@@ ,
                x=2.4ex, y=2.4ex, line ~ width=0.09ex * \l_@@_scale_abs_tl , scale = #1
              ]
              \shade[ball ~ color=#2] (0,0) circle [radius=0.33];
              \shade[ball ~ color=black] (0.1,0.1) circle [radius=0.05];
              \shade[ball ~ color=black] (-0.1,0.1) circle [radius=0.05];
              \draw[black] (-0.2,-0.15) .. controls (-0.1,-0.06) and (0.1,-0.06) .. (0.2,-0.15);
            \end{tikzpicture}%
          }
      }
  }
%    \end{macrocode}
% \end{macro}
%
%
%
%\begin{macro}{ \Changey }
% \changes{v0.95}{2016/03/20}{New.}
% Thanks to Marcel for the request.
%    \begin{macrocode}
\@@_Declare_Document_Command:nnn { Changey } { S B{white} m }
  {
    \@@_provide_savebox_and_use:nn { Changey_#1_#2_#3 }
      {
        \fp_compare:nNnT { abs(#3) } > { 2 } 
          { \msg_error:nnn { tikzsymbols } { Changey-number-too-large } {#3}  }
%        % \@@_set_scale_abs_tl:n {#1}
        \bool_if:NTF \l_@@_if_opt_draft_bool
          {
            \@@_create_squared_draftbox:n { 1.704ex * \l_@@_scale_abs_tl } 
          }{
            \begin{tikzpicture}
              [
                /@@ ,
                x=2.4ex, y=2.4ex, line ~ width=0.12ex* \l_@@_scale_abs_tl ,scale=#1
              ]
              \filldraw[fill=#2] (0,0) circle [radius=0.33];
              \fill (-0.1,0.1) circle [radius=0.05];
              \fill (0.1,0.1) circle [radius=0.05];
              \pgfmathsetmacro \l_tmpa_tl { -0.125 + 0.025*#3  }
              \pgfmathsetmacro \l_tmpb_tl { \l_tmpa_tl - 0.1*#3 }
              \draw 
                ( -0.2 , \l_tmpa_tl ) .. controls 
                ( -0.1 , \l_tmpb_tl ) and 
                ( 0.1 , \l_tmpb_tl ) .. 
                ( 0.2 , \l_tmpa_tl ) ;
            \end{tikzpicture}
          }
      }
  }
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{ \dChangey }
% \changes{v3.95}{2016/03/20}{New.}
% Thanks to Marcel for the request.
%    \begin{macrocode}
\@@_Declare_Document_Command:nnn { dChangey } { S B{yellow} m }
  {
    \@@_provide_savebox_and_use:nn { dChangey_#1_#2_#3 }
      {
        \fp_compare:nNnT { abs(#3) } > { 2 } 
          { \msg_error:nnn { tikzsymbols } { Changey-number-too-large } {#3}  }
%        % \@@_set_scale_abs_tl:n {#1}
        \bool_if:NTF \l_@@_if_opt_draft_bool
          {
            \@@_create_squared_draftbox:n { 1.584ex * \l_@@_scale_abs_tl } 
          }{
            \begin{tikzpicture}
              [
                /@@ ,
                x=2.4ex, y=2.4ex, line ~ width=0.12ex* \l_@@_scale_abs_tl ,scale=#1
              ]
              \shade[ball ~ color=#2] (0,0) circle [radius=0.33];
              \shade[ball ~ color=black] (-0.1,0.1) circle [radius=0.05];
              \shade[ball ~ color=black] (0.1,0.1) circle [radius=0.05];
              \pgfmathsetmacro \l_tmpa_tl { -0.125 + 0.025*#3  }
              \pgfmathsetmacro \l_tmpb_tl { \l_tmpa_tl - 0.1*#3 }
              \draw[black]
                ( -0.2 , \l_tmpa_tl ) .. controls 
                ( -0.1 , \l_tmpb_tl ) and 
                ( 0.1 , \l_tmpb_tl ) .. 
                ( 0.2 , \l_tmpa_tl ) ;
            \end{tikzpicture}
          }
      }
  }
%    \end{macrocode}
%\end{macro}
%
%
%
%\begin{macro}{ \cChangey }
% \changes{v4.02}{2017/05/14}{New.}
% Why didn't I implement this earlier?
%    \begin{macrocode}
\cs_new:Npn \@@_cChangey:nnn #1 #2#3
  {
    \fp_set:Nn \l_tmpa_fp { abs (#1/2) * 100 }
    \@@_cChangey_aux:xnn { \fp_use:N \l_tmpa_fp } {#2} {#3}
  }
\cs_new:Npn \@@_cChangey_aux:nnn #1 #2#3
  {
    \filldraw[fill=#2!#1!#3]
  }
\cs_generate_variant:Nn \@@_cChangey_aux:nnn { x }
\@@_Declare_Document_Command:nnn { cChangey } { S B{red} B{yellow} B{green} m }
  {
    \@@_provide_savebox_and_use:nn 
      { cChangey_#1_#2_#3_#4_#5 }
      {
        \fp_compare:nNnT { abs(#5) } > { 2 } 
          { \msg_error:nnn { tikzsymbols } { cChangey-number-too-large } {#5}  }
%        % \@@_set_scale_abs_tl:n {#1}
        \bool_if:NTF \l_@@_if_opt_draft_bool
          {
            \@@_create_squared_draftbox:n { 1.704ex * \l_@@_scale_abs_tl } 
          }{
            \begin{tikzpicture}
              [
                /@@ ,
                x=2.4ex, y=2.4ex, line ~ width=0.12ex* \l_@@_scale_abs_tl ,scale=#1
              ]
              \fp_compare:nNnT {#5} < { 0 }
                {
                  \@@_cChangey:nnn {#5} {#2} {#3}
                  (0,0) circle [radius=0.33];
                }
              \fp_compare:nNnT {#5} > { 0 }
                {
                  \@@_cChangey:nnn {#5} {#4} {#3} 
                  (0,0) circle [radius=0.33];
                }
              \fp_compare:nNnT {#5} = { 0 }
                {
                  \filldraw [fill=#3] (0,0) circle [radius=0.33];
                }
              \fill (-0.1,0.1) circle [radius=0.05];
              \fill (0.1,0.1) circle [radius=0.05];
              \pgfmathsetmacro \l_tmpa_tl { -0.125 + 0.025*#5  }
              \pgfmathsetmacro \l_tmpb_tl { \l_tmpa_tl - 0.1*#5 }
              \draw 
                ( -0.2 , \l_tmpa_tl ) .. controls 
                ( -0.1 , \l_tmpb_tl ) and 
                ( 0.1 , \l_tmpb_tl ) .. 
                ( 0.2 , \l_tmpa_tl ) ;
            \end{tikzpicture}
          }
      }
  }
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{ \dcChangey }
% \changes{v4.02}{2017/05/14}{New.}
% Same as above
%    \begin{macrocode}
\cs_new:Npn \@@_dcChangey:nnn #1 #2#3
  {
    \fp_set:Nn \l_tmpa_fp { abs (#1/2) * 100 }
    \@@_dcChangey_aux:xnn { \fp_use:N \l_tmpa_fp } {#2} {#3}
  }
\cs_new:Npn \@@_dcChangey_aux:nnn #1 #2#3
  {
    \shade [ball ~ color=#2!#1!#3]
  }
\cs_generate_variant:Nn \@@_dcChangey_aux:nnn { x }
\@@_Declare_Document_Command:nnn { dcChangey } { S B{red} B{yellow} B{green} m }
  {
    \@@_provide_savebox_and_use:nn 
      { dcChangey_#1_#2_#3_#4_#5 }
      {
        \fp_compare:nNnT { abs(#5) } > { 2 } 
          { \msg_error:nnn { tikzsymbols } { cChangey-number-too-large } {#5}  }
%        % \@@_set_scale_abs_tl:n {#1}
        \bool_if:NTF \l_@@_if_opt_draft_bool
          {
            \@@_create_squared_draftbox:n { 1.584ex * \l_@@_scale_abs_tl } 
          }{
            \begin{tikzpicture}
              [
                /@@ ,
                x=2.4ex, y=2.4ex, line ~ width=0.12ex* \l_@@_scale_abs_tl ,scale=#1
              ]
              \fp_compare:nNnT {#5} < { 0 }
                {
                  \@@_dcChangey:nnn {#5} {#2} {#3}
                  (0,0) circle [radius=0.33];
                }
              \fp_compare:nNnT {#5} > { 0 }
                {
                  \@@_dcChangey:nnn {#5} {#4} {#3} 
                  (0,0) circle [radius=0.33];
                }
              \fp_compare:nNnT {#5} = { 0 }
                {
                  \shade[ball ~ color=#3] (0,0) circle [radius=0.33];
                }
              \shade[ball ~ color=black] (-0.1,0.1) circle [radius=0.05];
              \shade[ball ~ color=black] (0.1,0.1) circle [radius=0.05];
              \pgfmathsetmacro \l_tmpa_tl { -0.125 + 0.025*#5  }
              \pgfmathsetmacro \l_tmpb_tl { \l_tmpa_tl - 0.1*#5 }
              \draw[black]
                ( -0.2 , \l_tmpa_tl ) .. controls 
                ( -0.1 , \l_tmpb_tl ) and 
                ( 0.1 , \l_tmpb_tl ) .. 
                ( 0.2 , \l_tmpa_tl ) ;
            \end{tikzpicture}
          }
      }
  }
%    \end{macrocode}
%\end{macro}
%
%
%
%
%
%\begin{macro}{ \Annoey }
% An annoyed Smiley. It's annoyed.
%    \begin{macrocode}
\@@_Declare_Document_Command:nnn { Annoey } { S B{none} }
  {
    \@@_provide_savebox_and_use:nn { Annoey_#1_#2 }
      {
%        % \@@_set_scale_abs_tl:n {#1}
        \bool_if:NTF \l_@@_if_opt_draft_bool
          {
            \@@_create_squared_draftbox:n { 1.704ex * \l_@@_scale_abs_tl } 
          }{
            \begin{tikzpicture}
              [
                /@@ ,
                x=2.4ex, y=2.4ex, line ~ width=0.09ex * \l_@@_scale_abs_tl ,scale=#1
              ]
              \filldraw[fill=#2, line ~ width=0.12ex* \l_@@_scale_abs_tl ] (0,0) circle [radius=0.33];
              \draw (0.08,0.1) -- (0.22,0.1);
              \draw (-0.08,0.1) -- (-0.22,0.1);
              \draw (-0.2,-0.1) -- (0.2,-0.1);
            \end{tikzpicture}%
          }
      }
  }
%    \end{macrocode}
%\end{macro}
%
%
%
%\begin{macro}{ \dAnnoey }
% It's annoyed about 3D.
%    \begin{macrocode}
\@@_Declare_Document_Command:nnn { dAnnoey } { S B{yellow} }
  {
    \@@_provide_savebox_and_use:nn { dAnnoey_#1_#2 }
      {
%        % \@@_set_scale_abs_tl:n {#1}
        \bool_if:NTF \l_@@_if_opt_draft_bool
          {
            \@@_create_squared_draftbox:n { 1.584ex * \l_@@_scale_abs_tl } 
          }{
            \begin{tikzpicture}
              [
                /@@ ,
                x=2.4ex, y=2.4ex, line ~ width=0.09ex* \l_@@_scale_abs_tl ,scale=#1
              ]
              \shade[ball ~ color=#2] (0,0) circle [radius=0.33];
              \draw[black] (0.08,0.1) -- (0.22,0.1);
              \draw[black] (-0.08,0.1) -- (-0.22,0.1);
              \draw[black] (-0.2,-0.1) -- (0.2,-0.1);
            \end{tikzpicture}%
          }
      }
  }
%    \end{macrocode}
%\end{macro}
%
%
%
%
%
%
% \begin{macro}{ \Smiley }
% This command is not defined if the option \Option{marvosym}
% is set to true.
%    \begin{macrocode}
\bool_if:NF \g_@@_if_opt_marvosym_bool
  {
    \@@_Declare_Document_Command:nnn { Smiley } { S B{none} }
      {
        \@@_provide_savebox_and_use:nn { Smiley_#1_#2 }
          {
%            % \@@_set_scale_abs_tl:n {#1}
            \bool_if:NTF \l_@@_if_opt_draft_bool
              {
                \@@_create_squared_draftbox:n { 1.704ex * \l_@@_scale_abs_tl } 
              }{
                \begin{tikzpicture}
                  [
                    /@@ ,
                    x=2.4ex, y=2.4ex, line ~ width=0.12ex* \l_@@_scale_abs_tl , scale=#1
                  ]
                  \filldraw[fill=#2] (0,0) circle [radius=0.33];
                  \fill (-0.1,0.1) circle [radius=0.05];
                  \fill (0.1,0.1) circle [radius=0.05];
                  \draw (-0.2,-0.1) .. controls (-0.1,-0.2) and (0.1,-0.2) .. (0.2,-0.1);
                \end{tikzpicture}%
              }
          }
      }
  }
%    \end{macrocode}
%\end{macro}
%
%
%\begin{macro}{ \dSmiley }
% Again in \enquote{3D}. 
%    \begin{macrocode}
\@@_Declare_Document_Command:nnn { dSmiley } { S B{yellow} }
  {
    \@@_provide_savebox_and_use:nn { dSmiley_#1_#2 }
      {
%        % \@@_set_scale_abs_tl:n {#1}
        \bool_if:NTF \l_@@_if_opt_draft_bool
          {
            \@@_create_squared_draftbox:n { 1.584ex * \l_@@_scale_abs_tl } 
          }{
            \begin{tikzpicture}
              [
                /@@ ,
                x=2.4ex, y=2.4ex, line ~ width=0.1ex* \l_@@_scale_abs_tl ,scale=#1
              ]
              \shade[ball ~ color=#2] (0,0) circle [radius=0.33];
              \shade[ball ~ color=black] (-0.1,0.1) circle [radius=0.05];
              \shade[ball ~ color=black] (0.1,0.1) circle [radius=0.05];
              \draw[black] (-0.2,-0.1) .. controls (-0.1,-0.2) and (0.1,-0.2) .. (0.2,-0.1);
            \end{tikzpicture}%
          }
      }
  }
%    \end{macrocode}
%\end{macro}
%
%
%
%
%
%
% \begin{macro}{ \Laughey }
% It's laughing.
%    \begin{macrocode}
\@@_Declare_Document_Command:nnn { Laughey } { S B{none} B{none} }
  {
    \@@_provide_savebox_and_use:nn { Laughey_#1_#2_#3 }
      {
%        % \@@_set_scale_abs_tl:n {#1}
        \bool_if:NTF \l_@@_if_opt_draft_bool
          {
            \@@_create_squared_draftbox:n { 1.704ex * \l_@@_scale_abs_tl } 
          }{
            \begin{tikzpicture}
              [
                /@@ ,
                x=2.4ex, y=2.4ex, line ~ width=0.09ex* \l_@@_scale_abs_tl ,scale=#1
              ]
              \filldraw[fill=#2,line ~ width=0.12ex* \l_@@_scale_abs_tl ] (0,0) circle [radius=0.33];
              \draw (-0.09,0.06) .. controls (-0.11,0.16) and (-0.17,0.16) .. +(-0.1,0);
              \draw (0.09,0.06) .. controls (0.11,0.16) and (0.17,0.16) .. +(0.1,0);
              \filldraw[fill=#3,rounded ~ corners=0.1ex* \l_@@_scale_abs_tl , yshift=-0.06ex] 
                (-0.22,-0.0) .. controls (-0.13,-0.23) and (0.13,-0.23) .. (0.22,-0.0) -- cycle;
            \end{tikzpicture}%
          }
      }
  }
%    \end{macrocode}
%\end{macro}
%
%
%\begin{macro}{ \dLaughey }
% Also in \emph{3D}!
%    \begin{macrocode}
\@@_Declare_Document_Command:nnn { dLaughey } { S B{yellow} B{red} }
  {
    \@@_provide_savebox_and_use:nn { dLaughey_#1_#2_#3 }
      {
%        % \@@_set_scale_abs_tl:n {#1}
        \bool_if:NTF \l_@@_if_opt_draft_bool
          {
            \@@_create_squared_draftbox:n { 1.584ex * \l_@@_scale_abs_tl } 
          }{
            \begin{tikzpicture}
              [
                /@@ ,
                x=2.4ex, y=2.4ex, line ~ width=0.09ex* \l_@@_scale_abs_tl ,scale=#1,
                black
              ]
              \fill[ball ~ color=#2,line ~ width=0.12ex* \l_@@_scale_abs_tl ] (0,0) circle [radius=0.33];
              \draw (-0.09,0.06) .. controls (-0.11,0.16) and (-0.17,0.16) .. +(-0.1,0);
              \draw (0.09,0.06) .. controls (0.11,0.16) and (0.17,0.16) .. +(0.1,0);
              \shade
                [
                  ball ~ color=#3, rounded ~ corners=0.1ex* \l_@@_scale_abs_tl , 
                  yshift=-0.028ex
                ]
                (-0.25,-0.0) .. controls (-0.13,-0.26) and (0.13,-0.26) .. (0.25,-0.0) -- cycle;
            \end{tikzpicture}%
          }
      }
  }
%    \end{macrocode}
%\end{macro}
%
%
%
%
%
%
%\begin{macro}{ \Neutrey }
%    \begin{macrocode}
\@@_Declare_Document_Command:nnn { Neutrey } { S B{none}  }
  {
    \@@_provide_savebox_and_use:nn { Neutrey_#1_#2 }
      {
%        % \@@_set_scale_abs_tl:n {#1}
        \bool_if:NTF \l_@@_if_opt_draft_bool
          {
            \@@_create_squared_draftbox:n { 1.704ex * \l_@@_scale_abs_tl } 
          }{
            \begin{tikzpicture}
              [
                /@@ ,
                x=2.4ex, y=2.4ex, line ~ width=0.09ex* \l_@@_scale_abs_tl ,scale=#1
              ]
              \filldraw[fill=#2,line ~ width=0.12ex* \l_@@_scale_abs_tl ] (0,0) circle [radius=0.33];
              \fill (0.1,0.1) circle [radius=0.05];
              \fill (-0.1,0.1) circle [radius=0.05];
              \draw (-0.2,-0.1) -- (0.2,-0.1);
            \end{tikzpicture}%
          }
      }
  }
%    \end{macrocode}
%\end{macro}
%
%
%\begin{macro}{ \dNeutrey }
%    \begin{macrocode}
\@@_Declare_Document_Command:nnn { dNeutrey } { S B{yellow}  }
  {
    \@@_provide_savebox_and_use:nn { Neutrey_#1_#2 }
      {
%        % \@@_set_scale_abs_tl:n {#1}
        \bool_if:NTF \l_@@_if_opt_draft_bool
          {
            \@@_create_squared_draftbox:n { 1.584ex * \l_@@_scale_abs_tl } 
          }{
            \begin{tikzpicture}
              [
                /@@ ,
                x=2.4ex, y=2.4ex, line ~ width=0.09ex* \l_@@_scale_abs_tl ,scale=#1
              ]
              \shade[ball ~ color=#2] (0,0) circle [radius=0.33];
              \shade[ball ~ color=black] (0.1,0.1) circle [radius=0.05];
              \shade[ball ~ color=black] (-0.1,0.1) circle [radius=0.05];
              \draw[black] (-0.2,-0.1) -- (0.2,-0.1);
            \end{tikzpicture}%
          }
      }
  }
%    \end{macrocode}
%\end{macro}
%
%
%
%
%
%
%\begin{macro}{ \Winkey }
%    \begin{macrocode}
\@@_Declare_Document_Command:nnn { Winkey } { S B{none}  }
  {
    \@@_provide_savebox_and_use:nn { Winkey_#1_#2 }
      {
%        % \@@_set_scale_abs_tl:n {#1}
        \bool_if:NTF \l_@@_if_opt_draft_bool
          {
            \@@_create_squared_draftbox:n { 1.704ex * \l_@@_scale_abs_tl } 
          }{
            \begin{tikzpicture}
              [
                /@@ ,
                x=2.4ex, y=2.4ex, line ~ width=0.12ex* \l_@@_scale_abs_tl ,scale=#1
              ]
              \filldraw[fill=#2] (0,0) circle [radius=0.33];
              \draw(0.17,0.1) -- (0.05,0.1);
              \fill (-0.1,0.1) circle [radius=0.05];
              \draw (-0.15,-0.15) .. controls (-0.05,-0.2) and (0.15,-0.2) .. (0.19,0);
            \end{tikzpicture}%
          }
      }
  }
%    \end{macrocode}
%\end{macro}
%
%
%\begin{macro}{ \oldWinkey }
%    \begin{macrocode}
\@@_Declare_Document_Command:nnn { oldWinkey } { S B{none}  }
  {
    \@@_provide_savebox_and_use:nn { oldWinkey_#1_#2 }
      {
%        % \@@_set_scale_abs_tl:n {#1}
        \bool_if:NTF \l_@@_if_opt_draft_bool
          {
            \@@_create_squared_draftbox:n { 1.704ex * \l_@@_scale_abs_tl } 
          }{
            \begin{tikzpicture}
              [
                /@@ ,
                x=2.4ex, y=2.4ex, line ~ width=0.12ex* \l_@@_scale_abs_tl ,scale=#1
              ]
              \filldraw[fill=#2] (0,0) circle [radius=0.33];
              \draw(0.17,0.1) -- (0.05,0.1);
              \fill (-0.1,0.1) circle [radius=0.05];
              \draw (-0.2,-0.1) .. controls (-0.1,-0.2) and (0.15,-0.2) .. (0.2,0);
            \end{tikzpicture}%
          }
      }
  }
%    \end{macrocode}
%\end{macro}
%
%
%\begin{macro}{ \dWinkey }
%    \begin{macrocode}
\@@_Declare_Document_Command:nnn { dWinkey } { S B{yellow}  }
  {
    \@@_provide_savebox_and_use:nn { dWinkey_#1_#2 }
      {
%        % \@@_set_scale_abs_tl:n {#1}
        \bool_if:NTF \l_@@_if_opt_draft_bool
          {
            \@@_create_squared_draftbox:n { 1.584ex * \l_@@_scale_abs_tl } 
          }{
            \begin{tikzpicture}
              [
                /@@ ,
                x=2.4ex, y=2.4ex, line ~ width=0.12ex* \l_@@_scale_abs_tl ,scale=#1
              ]
              \shade[ball ~ color=#2] (0,0) circle [radius=0.33];
              \draw[black] (0.17,0.1) -- (0.05,0.1);
              \shade[ball ~ color=black] (-0.1,0.1) circle [radius=0.05];
              \draw[black] (-0.15,-0.15) .. controls (-0.05,-0.2) and (0.15,-0.2) .. (0.19,0);
            \end{tikzpicture}%
          }
      }
  }
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{ \olddWinkey }
%    \begin{macrocode}
\@@_Declare_Document_Command:nnn { olddWinkey } { S B{yellow}  }
  {
    \@@_provide_savebox_and_use:nn { olddWinkey_#1_#2 }
      {
%        % \@@_set_scale_abs_tl:n {#1}
        \bool_if:NTF \l_@@_if_opt_draft_bool
          {
            \@@_create_squared_draftbox:n { 1.584ex * \l_@@_scale_abs_tl } 
          }{
            \begin{tikzpicture}
              [
                /@@ ,
                x=2.4ex, y=2.4ex, line ~ width=0.12ex* \l_@@_scale_abs_tl ,scale=#1
              ]
              \shade[ball ~ color=#2] (0,0) circle [radius=0.33];
              \draw[black] (0.17,0.1) -- (0.05,0.1);
              \shade[ball ~ color=black] (-0.1,0.1) circle [radius=0.05];
              \draw[black] (-0.2,-0.1) .. controls (-0.1,-0.2) and (0.15,-0.2) .. (0.2,0);
            \end{tikzpicture}
          }
      }
  }
%    \end{macrocode}
%\end{macro}
%
%
%
%
%
%
%\begin{macro}{ \Sey }
%    \begin{macrocode}
\@@_Declare_Document_Command:nnn { Sey } { S B{none}  }
  {
    \@@_provide_savebox_and_use:nn { Sey_#1_#2 }
      {
%        % \@@_set_scale_abs_tl:n {#1}
        \bool_if:NTF \l_@@_if_opt_draft_bool
          {
            \@@_create_squared_draftbox:n { 1.704ex * \l_@@_scale_abs_tl } 
          }{
            \begin{tikzpicture}
              [
                /@@ ,
                x=2.4ex, y=2.4ex, line ~ width=0.09ex* \l_@@_scale_abs_tl ,scale=#1
              ]
              \filldraw[fill=#2, line ~ width=0.12ex* \l_@@_scale_abs_tl ] (0,0) circle [radius=0.33];
              \fill (0.1,0.1) circle [radius=0.05];
              \fill (-0.1,0.1) circle [radius=0.05];
              \draw (-0.2,-0.08) .. controls (-0.0,-0.2) and (0.0,0) .. (0.2,-0.12);
            \end{tikzpicture}%
          }
      }
  }
%    \end{macrocode}
%\end{macro}
%
%
%
%\begin{macro}{ \dSey }
%    \begin{macrocode}
\@@_Declare_Document_Command:nnn { dSey } { S B{yellow}  }
  {
    \@@_provide_savebox_and_use:nn { dSey_#1_#2 }
      {
%        % \@@_set_scale_abs_tl:n {#1}
        \bool_if:NTF \l_@@_if_opt_draft_bool
          {
            \@@_create_squared_draftbox:n { 1.584ex * \l_@@_scale_abs_tl } 
          }{
            \begin{tikzpicture}
              [
                /@@ ,
                x=2.4ex, y=2.4ex, line ~ width=0.09ex* \l_@@_scale_abs_tl ,scale=#1
              ]
              \shade[ball ~ color=#2] (0,0) circle [radius=0.33];
              \shade[ball ~ color=black] (0.1,0.1) circle [radius=0.05];
              \shade[ball ~ color=black] (-0.1,0.1) circle [radius=0.05];
              \draw[black] (-0.2,-0.08) .. controls (-0.0,-0.2) and (0.0,0) .. (0.2,-0.12);
            \end{tikzpicture}%
          }
      }
  }
%    \end{macrocode}
%\end{macro}
%
%
%
%
%
%
%\begin{macro}{ \Xey }
%    \begin{macrocode}
\@@_Declare_Document_Command:nnn { Xey } { S B{none}  }
  {
    \@@_provide_savebox_and_use:nn { Xey_#1_#2 }
      {
%        % \@@_set_scale_abs_tl:n {#1}
        \bool_if:NTF \l_@@_if_opt_draft_bool
          {
            \@@_create_squared_draftbox:n { 1.704ex * \l_@@_scale_abs_tl } 
          }{
            \begin{tikzpicture}
              [
                /@@ ,
                x=2.4ex, y=2.4ex, line ~ width=0.09ex* \l_@@_scale_abs_tl ,scale=#1
              ]
              \filldraw[fill=#2, line ~ width=0.12ex* \l_@@_scale_abs_tl ] (0,0) circle [radius=0.33];
              \foreach \xi in { 0.05 , -0.15 }
                  \draw (\xi,0.05) -- ++ (0.1,0.1) (-\xi,0.05) -- ++ (-0.1,0.1);
              \draw (-0.2,-0.15) .. controls (-0.1,-0.06) and (0.1,-0.06) .. (0.2,-0.15);
            \end{tikzpicture}%
          }
      }
  }
%    \end{macrocode}
%\end{macro}
%
%
%\begin{macro}{ \dXey }
%    \begin{macrocode}
\@@_Declare_Document_Command:nnn { dXey } { S B{yellow}  }
  {
    \@@_provide_savebox_and_use:nn { dXey_#1_#2 }
      {
%        % \@@_set_scale_abs_tl:n {#1}
        \bool_if:NTF \l_@@_if_opt_draft_bool
          {
            \@@_create_squared_draftbox:n { 1.584ex * \l_@@_scale_abs_tl } 
          }{
            \begin{tikzpicture}
              [
                /@@ ,
                x=2.4ex, y=2.4ex, line ~ width=0.09ex* \l_@@_scale_abs_tl ,scale=#1,
                black
              ]
              \fill[ball ~ color=#2, line ~ width=0.12ex* \l_@@_scale_abs_tl ] 
                (0,0) circle [radius=0.33];
              \foreach \xi in { 0.05 , -0.15 }
                  \draw (\xi,0.05) -- ++ (0.1,0.1) (-\xi,0.05) -- ++ (-0.1,0.1);
              \draw (-0.2,-0.15) .. controls (-0.1,-0.06) and (0.1,-0.06) .. (0.2,-0.15);
            \end{tikzpicture}%
          }
      }
  }
%    \end{macrocode}
%\end{macro}
%
%
%
%
%
%
%\begin{macro}{ \Innocey }
%    \begin{macrocode}
\@@_Declare_Document_Command:nnn { Innocey } { S B{none} B{yellow} }
  {
    \@@_provide_savebox_and_use:nn { Innocey_#1_#2_#3 }
      {
%        % \@@_set_scale_abs_tl:n {#1}
        \bool_if:NTF \l_@@_if_opt_draft_bool
          {
            \@@_create_draftbox:nn 
              { 1.73ex * \l_@@_scale_abs_tl } 
              { 1.90899 ex * \l_@@_scale_abs_tl }
          }{
            \begin{tikzpicture}
              [
                /@@ ,
                x=2.4ex, y=2.4ex, line ~ width=0.12ex* \l_@@_scale_abs_tl, scale=#1
              ]
              \filldraw[fill=#2] (0,0) circle [radius=0.33];
              \fill (-0.1,0.1) circle [radius=0.05];
              \fill (0.1,0.1) circle [radius=0.05];
              \draw (-0.2,-0.1) .. controls (-0.1,-0.2) and (0.1,-0.2) .. (0.2,-0.1);
%    \end{macrocode}
% Draws the colored halo inside, the next two are drawing the black
% lines surrounding the colored line and completing the halo.
%    \begin{macrocode}
              \draw[#3, line ~ width=0.095ex* \l_@@_scale_abs_tl ] 
                 (0.32,0.31) arc 
                   [start ~ angle=0, end ~ angle=360, x ~ radius = 0.32 , y ~ radius=0.1];
              \draw[line ~ width=0.05ex* \l_@@_scale_abs_tl ] 
                (0.3,0.31) arc 
                  [start ~ angle=0, end ~ angle=360, x ~ radius = 0.3 , y ~ radius=0.07];
              \draw[line ~ width=0.05ex* \l_@@_scale_abs_tl ] 
                (0.35,0.31) arc 
                  [start ~ angle=0, end ~ angle=360, x ~ radius = 0.35 , y ~ radius=0.12];
            \end{tikzpicture}%
          }
      }
  }
%    \end{macrocode}
%\end{macro}
%
% \begin{macro}{ \wInnocey }
%  A white one. I clear \Makro{g_@@_tikzsymbols_after_symbol_tl}
%  because otherwise the input of \Option{after-symbol}
%  is inserted twice.
%    \begin{macrocode}
\@@_Declare_Document_Command:nnn { wInnocey } { S }
  { 
    \group_begin:
    \tl_clear:N \l_@@_tikzsymbols_after_symbol_tl
    \tikzsymbolsuse { Innocey } [#1] [none] [white] 
    \group_end:
  } 
%    \end{macrocode}
%\end{macro}
%
%
%\begin{macro}{ \dInnocey }
%    \begin{macrocode}
\@@_Declare_Document_Command:nnn { dInnocey } { S B{yellow} B{yellow}  }
  {
    \@@_provide_savebox_and_use:nn { dInnocey_#1_#2_#3 }
      {
%        % \@@_set_scale_abs_tl:n {#1}
        \bool_if:NTF \l_@@_if_opt_draft_bool
          {
            \@@_create_draftbox:nn 
              { 1.73ex * \l_@@_scale_abs_tl } 
              { 1.84898ex * \l_@@_scale_abs_tl } 
          }{
            \begin{tikzpicture}
              [
                /@@ ,
                x=2.4ex, y=2.4ex, line ~ width=0.12ex* \l_@@_scale_abs_tl ,scale=#1,
                black
              ]
              \shade[ball ~ color=#2] (0,0) circle [radius=0.33];
              \shade[ball ~ color=black] (-0.1,0.1) circle [radius=0.05];
              \shade[ball ~ color=black] (0.1,0.1) circle [radius=0.05];
              \draw[black] (-0.2,-0.1) .. controls (-0.1,-0.2) and (0.1,-0.2) .. (0.2,-0.1);
%    \end{macrocode}
% Same as above (I think).
%    \begin{macrocode}
              \draw[color=#3!97!black, line ~ width=0.1ex* \l_@@_scale_abs_tl ] 
                 (0.32,0.31) arc [start ~ angle=0, end ~ angle=360, x ~ radius = 0.32 , y ~ radius=0.1];
              \draw[line ~ width=0.05ex* \l_@@_scale_abs_tl ] 
                (0.3,0.31) arc [start ~ angle=0, end ~ angle=360, x ~ radius = 0.3 , y ~ radius=0.07];
              \draw[line ~ width=0.05ex* \l_@@_scale_abs_tl ] 
                (0.35,0.31) arc [start ~ angle=0, end ~ angle=360, x ~ radius = 0.35 , y ~ radius=0.12];
            \end{tikzpicture}%
          }
      }
  }
%    \end{macrocode}
%\end{macro}
%
%
%
%
%
%
%\begin{macro}{ \Cooley }
%  It's the coolest Smiley around.
%    \begin{macrocode}
\@@_Declare_Document_Command:nnn { Cooley } { S B{none}  }
  {
    \@@_provide_savebox_and_use:nn { Cooley_#1_#2 }
      {
%        % \@@_set_scale_abs_tl:n {#1}
        \bool_if:NTF \l_@@_if_opt_draft_bool
          {
            \@@_create_squared_draftbox:n { 1.704ex * \l_@@_scale_abs_tl } 
          }{
            \begin{tikzpicture}
              [
                /@@ ,
                x=2.4ex, y=2.4ex, line ~ width=0.12ex* \l_@@_scale_abs_tl ,scale=#1
              ]
              \filldraw[fill=#2] (0,0) circle [radius=0.33];
              \foreach \xi/\xii in { 0.24/0.01 , -0.24/-0.01 }
                \fill[rounded ~ corners=0.1ex* \l_@@_scale_abs_tl ] 
                   (\xi,0.15) -- (\xii,0.15) -- (\xii,0) -- (\xi,0) -- cycle;
              \draw (-0.2,-0.1) .. controls (-0.1,-0.2) and (0.1,-0.2) .. (0.2,-0.1);
              \draw (0.02,0.1) -- (-0.02,0.1);
              \draw (-0.2,0.1) -- (-0.3,0.13);
              \draw (0.2,0.1) -- (0.3,0.13);
            \end{tikzpicture}%
          }
      }
  }
%    \end{macrocode}
%\end{macro}
%
%
%\begin{macro}{ \dCooley }
%    \begin{macrocode}
\@@_Declare_Document_Command:nnn { dCooley } { S B{yellow}  }
  {
    \@@_provide_savebox_and_use:nn { dCooley_#1_#2 }
      {
%        % \@@_set_scale_abs_tl:n {#1}
        \bool_if:NTF \l_@@_if_opt_draft_bool
          {
            \@@_create_squared_draftbox:n { 1.584ex * \l_@@_scale_abs_tl } 
          }{
            \begin{tikzpicture}
              [
                /@@ ,
                x=2.4ex, y=2.4ex, line ~ width=0.12ex* \l_@@_scale_abs_tl ,scale=#1
              ]
              \shade[ball ~ color=#2] (0,0) circle [radius=0.33];
              \draw[black] (0.02,0.1) -- (-0.02,0.1);
              \draw[black] (-0.2,0.1) -- (-0.295,0.146);
              \draw[black] (0.2,0.1) -- (0.295,0.146);
              \foreach \xi/\xii in { 0.24/0.01 , -0.24/-0.01 }
                \shade[ball ~ color=black,rounded ~ corners=0.1ex* \l_@@_scale_abs_tl ] 
                   (\xi,0.15) -- (\xii,0.15) -- (\xii,0) -- (\xi,0) -- cycle;
              \draw[black] (-0.2,-0.1) .. controls (-0.1,-0.2) and (0.1,-0.2) .. (0.2,-0.1);
            \end{tikzpicture}%
          }
      }
  }
%    \end{macrocode}
%\end{macro}
%
%
%
%
%
%
%\begin{macro}{ \Tongey }
% Habe mir vorgenommen das hier zu verbessern, wird aber wohl noch
% etwas brauchen.
%    \begin{macrocode}
\@@_Declare_Document_Command:nnn { Tongey } { S B{none} B{none} }
  {
    \@@_provide_savebox_and_use:nn { Tongey_#1_#2_#3 }
      {
%        % \@@_set_scale_abs_tl:n {#1}
        \bool_if:NTF \l_@@_if_opt_draft_bool
          {
            \@@_create_squared_draftbox:n { 1.704ex * \l_@@_scale_abs_tl } 
          }{
            \begin{tikzpicture}
              [
                /@@ ,
                x=2.4ex, y=2.4ex, line ~ width=0.12ex* \l_@@_scale_abs_tl ,scale=#1
              ]
              \filldraw[fill=#2] (0,0) circle [radius=0.33];
              \fill (-0.1,0.1) circle [radius=0.05];
              \fill (0.1,0.1) circle [radius=0.05];
              \filldraw
                [
                  fill=#3, line ~ width=0.058ex* \l_@@_scale_abs_tl , 
                  rounded ~ corners=0.12ex* \l_@@_scale_abs_tl 
                ] 
                 (0,-0.09) -- (0.05,-0.2) -- (0.16,-0.23) -- (0.2,-0.15) -- (0.19,-0.03);
              \draw[line ~ width=0.07ex* \l_@@_scale_abs_tl , yshift=0.21ex] 
                 (-0.2,-0.1) .. controls (-0.1,-0.2) and (0.1,-0.2) .. (0.2,-0.1);
            \end{tikzpicture}%
          }
      }
  }
%    \end{macrocode}
%\end{macro}
%
%
%\begin{macro}{ \dTongey }
%    \begin{macrocode}
\@@_Declare_Document_Command:nnn { dTongey } { S B{yellow} B{red} }
  {
    \@@_provide_savebox_and_use:nn { dTongey_#1_#2_#3 }
      {
%        % \@@_set_scale_abs_tl:n {#1}
        \bool_if:NTF \l_@@_if_opt_draft_bool
          {
            \@@_create_squared_draftbox:n { 1.584ex * \l_@@_scale_abs_tl } 
          }{
            \begin{tikzpicture}
              [
                /@@ ,
                x=2.4ex, y=2.4ex, line ~ width=0.12ex* \l_@@_scale_abs_tl ,scale=#1
              ]
              \shade[ball ~ color=#2] (0,0) circle [radius=0.33];
              \shade[ball ~ color=black] (-0.1,0.1) circle [radius=0.05];
              \shade[ball ~ color=black] (0.1,0.1) circle [radius=0.05];
              \shadedraw
                [
                  ball ~ color=#3, draw=black, line ~ width=0.058ex* \l_@@_scale_abs_tl , 
                  rounded ~ corners=0.12ex* \l_@@_scale_abs_tl 
                ] 
                 (0,-0.09) -- (0.05,-0.2) -- (0.16,-0.23) -- (0.2,-0.15) -- (0.19,-0.03);
              \draw[black, line ~ width=0.07ex* \l_@@_scale_abs_tl , yshift=0.21ex] 
                 (-0.2,-0.1) .. controls (-0.1,-0.2) and (0.1,-0.2) .. (0.2,-0.1);
            \end{tikzpicture}%
          }
      }
  }
%    \end{macrocode}
%\end{macro}
%
%
%
%
%
%
%\begin{macro}{ \Nursey }
%    \begin{macrocode}
\@@_Declare_Document_Command:nnn { Nursey } { S B{none} B{none} B{} }
  {
    \@@_provide_savebox_and_use:nn { Nursey_#1_#2_#3_#4 }
      {
%        % \@@_set_scale_abs_tl:n {#1}
        \bool_if:NTF \l_@@_if_opt_draft_bool
          {
            \@@_create_draftbox:nn 
              { 1.5ex * \l_@@_scale_abs_tl } 
              { 2.19ex * \l_@@_scale_abs_tl } 
          }{
            \begin{tikzpicture}
              [
                /@@ ,
                x=2.3ex, y=2.3ex, line ~ width=0.12ex* \l_@@_scale_abs_tl ,scale=#1
              ]
              \fill[fill=#3,rounded ~ corners=.023ex* \l_@@_scale_abs_tl ] 
                 (-0.3,0) -- (-0.3,0.3) -- (0,0.6) -- (0.3,0.3) -- (0.3,0);
              \filldraw[fill=#2] (0,0) circle [radius=0.3];
              \fill (-0.1,0.1) circle [radius=0.05];
              \fill (0.1,0.1) circle [radius=0.05];
              \draw[line ~ width=0.09ex* \l_@@_scale_abs_tl , yshift=0.07ex] 
                 (-0.2,-0.1) .. controls (-0.1,-0.2) and (0.1,-0.2) .. (0.2,-0.1);
              \draw[rounded ~ corners=.023ex* \l_@@_scale_abs_tl ] 
                 (-0.3,0) -- (-0.3,0.3) -- (0,0.6) -- (0.3,0.3) -- (0.3,0);
              \draw[#4,line ~ width=.046ex* \l_@@_scale_abs_tl ] 
                (0,0.35) -- (0,0.5) (-0.05,0.45) -- (0.05,0.45) ;
            \end{tikzpicture}%
          }
      }
  }
%    \end{macrocode}
%\end{macro}
%
%
%\begin{macro}{ \dNursey }
%    \begin{macrocode}
\@@_Declare_Document_Command:nnn { dNursey } { S B{yellow} B{white} B{red} }
  {
    \@@_provide_savebox_and_use:nn { dNursey_#1_#2_#3_#4 }
      {
        % \@@_set_scale_abs_tl:n {#1}
        \bool_if:NTF \l_@@_if_opt_draft_bool
          {
            \@@_create_draftbox:nn 
              { 1.38ex * \l_@@_scale_abs_tl } 
              { 1.98001ex * \l_@@_scale_abs_tl } 
          }{
            \begin{tikzpicture}
              [
                /@@ ,
                x=2.3ex, y=2.3ex, line ~ width=0.12ex* \l_@@_scale_abs_tl ,scale=#1
              ]
              \shade[ball ~ color=#2] (0,0) circle [radius=0.3];
              \shade[ball ~ color=black] (-0.1,0.1) circle [radius=0.05];
              \shade[ball ~ color=black] (0.1,0.1) circle [radius=0.05];
              \draw[black, line ~ width=0.09ex* \l_@@_scale_abs_tl , yshift=0.07ex] 
                 (-0.2,-0.1) .. controls (-0.1,-0.2) and (0.1,-0.2) .. (0.2,-0.1);
              \shade
                [
                  ball ~ color=#3, rounded ~ corners=.023ex* \l_@@_scale_abs_tl ,
                  yshift=-0.09ex
                ] 
                 (-0.3,0) -- (-0.3,0.3) -- (0,0.6) -- (0.3,0.3) -- 
                 (0.3,0) arc [start ~ angle=0, end ~ angle=180, radius=0.3];
              \shade[ball ~ color=#4,line ~ width=.046ex* \l_@@_scale_abs_tl ] 
                 (-0.01,0.31) -- (-0.01,0.46) -- (0.01,0.46) -- (0.01,0.31)--cycle;
              \shade[ball ~ color=#4,line ~ width=.046ex* \l_@@_scale_abs_tl ] 
                 (-0.05,0.4) -- (0.05,0.4) -- (0.05,0.42) -- (-0.05,0.42) -- cycle;
            \end{tikzpicture}%
          }
      }
  }
%    \end{macrocode}
%\end{macro}
%
%
%
%
%
%
%\begin{macro}{ \Vomey }
%    \begin{macrocode}
\@@_Declare_Document_Command:nnn { Vomey } { S B{none} B{opacity=0} }
  {
    \@@_provide_savebox_and_use:nn { Vomey_#1_#2_#3 }
      {
        % \@@_set_scale_abs_tl:n {#1}
        \bool_if:NTF \l_@@_if_opt_draft_bool
          {
            \@@_create_draftbox:nn 
              { 3.03335ex * \l_@@_scale_abs_tl } 
              { 1.743ex * \l_@@_scale_abs_tl } 
          }{
            \begin{tikzpicture}
              [
                /@@ ,
                x=0.58ex,y=0.58ex, line ~ width=0.09ex* \l_@@_scale_abs_tl ,scale=#1
              ]
              \filldraw[fill=#2,rounded ~ corners=0.05ex* \l_@@_scale_abs_tl ]  
                (0,0)  arc [start ~ angle=15, end ~ angle=330, radius=1] -- (-0.6,-0.3) -- cycle;
              \draw[line ~ width=0.05ex* \l_@@_scale_abs_tl ] (-0.5,0.3) -- (-0.3,0.1);
              \fill (-0.45,0.27) arc [start ~ angle=100, end ~ angle=350, radius=0.1];
              \fill[#3] (1.8,-0.5) .. controls (2.5,-0.3) and (2.8,-0.7) .. (2.5,-1) .. 
                controls (3,-1) and (3,-1.7) .. (2,-1.5) .. 
                controls (1.7,-2) and (1,-2) .. (1,-1.5) ..
                controls (0.5,-1.9) and (0.3,-1) .. (0.7,-0.9);
              \fill[#3] (0,-0.4) .. controls (1,0) and (2,-1) .. (2,-1) .. 
                controls (1.7,-1.2) and (1.3,-1.2) .. (1,-1) .. 
                controls (0.8,-0.7) and (0.5,-0.5) .. (0,-0.4);
%              \draw (0,-0.4) .. controls (1,0) and (2,-1) .. (2,-1);
%              \draw (0,-0.4) .. controls (0.5,-0.5) and (0.8,-0.7) .. (1,-1);
              \draw[rounded ~ corners=0.1ex* \l_@@_scale_abs_tl ] 
                (1,-1) .. controls (0.8,-0.7) and (0.5,-0.5) .. 
                (0,-0.4) .. controls (1,0) and (2,-1) .. (2,-1);
              \draw (1.8,-0.5)  .. controls (2.5,-0.3) and (2.8,-0.7) .. (2.5,-1) .. 
                controls (3,-1) and (3,-1.7) .. (2,-1.5) .. controls (1.7,-2) 
                and (1,-2) .. (1,-1.5) .. controls (0.5,-1.9) and (0.3,-1) .. (0.7,-0.9);
            \end{tikzpicture}%
          }
      }
  }
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{ \dVomey }
%    \begin{macrocode}
\@@_Declare_Document_Command:nnn { dVomey } { S B{yellow} B{brown!10!olive}  }
  {
    \@@_provide_savebox_and_use:nn { dVomey_#1_#2_#3 }
      {
        % \@@_set_scale_abs_tl:n {#1}
        \bool_if:NTF \l_@@_if_opt_draft_bool
          {
            \@@_create_draftbox:nn 
              { 2.94336 ex * \l_@@_scale_abs_tl } 
              { 1.653ex * \l_@@_scale_abs_tl } 
          }{
            \begin{tikzpicture}
              [
                /@@ ,
                x=0.58ex,y=0.58ex, line ~ width=0.09ex* \l_@@_scale_abs_tl ,scale=#1
              ]
              \shade
                [
                  ball ~ color=#2!90!brown, 
                  rounded ~ corners=0.03ex * \l_@@_scale_abs_tl ,
                ]  
                 (0,0) arc [start ~ angle=15, end ~ angle=330, radius=1] -- (-0.6,-0.3) -- cycle;
              \draw[black, line ~ width=0.05ex* \l_@@_scale_abs_tl ] 
                (-0.5,0.3) -- (-0.3,0.1);
              \shade[ball ~ color=black] 
                (-0.45,0.27) arc [start ~ angle=100, end ~ angle=350, radius=0.1];
              \shade[ball ~ color=#3] 
                (1.8,-0.5)  .. controls (2.5,-0.3) and (2.8,-0.7) .. (2.5,-1) ..
                controls (3,-1) and (3,-1.7) .. (2,-1.5) .. 
                controls (1.7,-2) and (1,-2) .. (1,-1.5) .. 
                controls (0.5,-1.9) and (0.3,-1) .. (0.7,-0.9);
              \shade[ball ~ color=#3] 
                (0,-0.4) .. controls (1,0) and (2,-1) .. (2,-1) .. controls
                (1.7,-1.2) and (1.3,-1.2) .. (1,-1) .. controls 
                (0.8,-0.7) and (0.5,-0.5) .. (0,-0.4);
            \end{tikzpicture}%
          }
      }
  }
%    \end{macrocode}
%\end{macro}
%
%
%
%
%
%
%\begin{macro}{ \Walley }
%    \begin{macrocode}
\@@_Declare_Document_Command:nnn { Walley } { S B{none} B{none} }
  {
    \@@_provide_savebox_and_use:nn { Walley_#1_#2_#3 }
      {
        % \@@_set_scale_abs_tl:n {#1}
        \bool_if:NTF \l_@@_if_opt_draft_bool
          {
            \@@_create_draftbox:nn 
              { 2.341ex * \l_@@_scale_abs_tl } 
              { 1.674ex * \l_@@_scale_abs_tl } 
          }{
            \begin{tikzpicture}
              [
                /@@ ,
                x=2.4ex, y=2.4ex, line ~ width=0.09ex* \l_@@_scale_abs_tl ,scale=#1,
                decoration=
                  {
%                    random ~ steps, 
                    segment ~ length=0.15ex* \l_@@_scale_abs_tl , 
                    amplitude=0.1ex* \l_@@_scale_abs_tl 
                  }
              ]
              \filldraw[fill=#2, line ~ width=0.08ex* \l_@@_scale_abs_tl ] (0,0) circle [radius=0.28];
              \filldraw[fill=#3] (0.28,-0.33) rectangle (0.66,0.33);
              \draw[line ~ width=0.06ex* \l_@@_scale_abs_tl ] 
                (0.28,0) --++(0.05,0.07) --++(0.03,0.02) --+
                +(0.03,-0.02) --++(0.03,0.1) --++(0.03,0.02) -- (0.5,0.25);
              \draw[line ~ width=0.06ex* \l_@@_scale_abs_tl ] 
                (0.28,0) --++(0.06,-0.02) --++(0.04,0.06) --++
                (0.0,-0.08) --++(0.08,0.06) --++(0.03,-0.02) --+
                (0.08,0.02) -- (0.6,0.0);
              \draw[line ~ width=0.06ex* \l_@@_scale_abs_tl ] 
                (0.28,0) --++(0.03,-0.02)  --++(0.03,-0.07)  --+
                +(0.03,-0.01)  --++(0.01,-0.07)  --++(0.06,0.01)  --++
                (0.03,-0.08) -- (0.5,0.-0.25);
              \draw[rotate=-20] (0.12,0.1) -- (0.2,0.05);
              \draw[rotate=-20] (0.27,-0.1) .. controls (0.2,-0.072) 
                and (0.1,-0.06) .. (0.,-0.1);
            \end{tikzpicture}%
          }
      }
  }
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{ \rWalley }
%    \begin{macrocode}
\@@_Declare_Document_Command:nnn { rWalley } { S B{none} B{none} }
  {
    \@@_provide_savebox_and_use:nn { rWalley_#1_#2_#3 }
      {
        % \@@_set_scale_abs_tl:n {#1}
        \bool_if:NTF \l_@@_if_opt_draft_bool
          {
            \@@_create_draftbox:nn 
              { 2.341ex * \l_@@_scale_abs_tl } 
              { 1.674ex * \l_@@_scale_abs_tl } 
          }{
            \begin{tikzpicture}
              [
                /@@ ,
                x=2.4ex, y=2.4ex, line ~ width=0.09ex* \l_@@_scale_abs_tl ,scale=#1,
                decoration=
                  {
                    random ~ steps, segment ~ length=0.15ex* \l_@@_scale_abs_tl , 
                    amplitude=0.1ex* \l_@@_scale_abs_tl 
                  }
              ]
              \filldraw[fill=#2, line ~ width=0.08ex* \l_@@_scale_abs_tl ] (0,0) circle [radius=0.28];
              \filldraw[fill=#3] (0.28,-0.33) rectangle (0.66,0.33);
              \foreach \x/\y in { 0.5/0.25 , 0.6/0 , 0.5/-0.25 }
                \draw[decorate, line ~ width=0.06ex* \l_@@_scale_abs_tl ] 
                  (0.28,0) -- (\x,\y);
              \draw[rotate=-20] (0.12,0.1) -- (0.2,0.05);
              \draw[rotate=-20] (0.27,-0.1) .. controls (0.2,-0.072) 
                and (0.1,-0.06) .. (0.,-0.1);
            \end{tikzpicture}%
          }
      }
  }
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{ \dWalley }
%    \begin{macrocode}
\@@_Declare_Document_Command:nnn { dWalley } { S B{yellow} }
  {
    \@@_provide_savebox_and_use:nn { dWalley_#1_#2 }
      {
        % \@@_set_scale_abs_tl:n {#1}
        \bool_if:NTF \l_@@_if_opt_draft_bool
          {
            \@@_create_draftbox:nn 
              { 2.42879ex * \l_@@_scale_abs_tl } 
              { 1.6008ex * \l_@@_scale_abs_tl } 
          }{
            \begin{tikzpicture}
              [
                /@@ ,
                x=2.4ex, y=2.4ex, line ~ width=0.09ex* \l_@@_scale_abs_tl ,scale=#1,
                black
              ]
              \shade[ball ~ color=orange!80!black] (0.298,-0.33) rectangle (0.692,0.337);
              \draw[line ~ width=0.06ex* \l_@@_scale_abs_tl ] 
                (0.28,0) --++(0.05,0.07) --++(0.03,0.02) --+
                +(0.03,-0.02) --++(0.03,0.1) --++(0.03,0.02) -- (0.5,0.25);
              \draw[line ~ width=0.06ex* \l_@@_scale_abs_tl ] 
                (0.28,0) --++(0.06,-0.02) --++(0.04,0.06) --++
                (0.0,-0.08) --++(0.08,0.06) --++(0.03,-0.02) --+
                (0.08,0.02) -- (0.6,0.0);
              \draw[line ~ width=0.06ex* \l_@@_scale_abs_tl ] 
                (0.28,0) --++(0.03,-0.02)  --++(0.03,-0.07)  --++
                (0.03,-0.01)  --++(0.01,-0.07)  --++
                (0.06,0.01)  --++(0.03,-0.08)   -- (0.5,0.-0.25);
              \shade[ball ~ color=#2] (-0.01,0) circle [radius=0.31];
              \draw[rotate=-20] (0.12,0.1) -- (0.2,0.05);
              \draw[rotate=-20] (0.283,-0.1) .. controls (0.2,-0.072) 
                and (0.1,-0.06) .. (0,-0.1);
            \end{tikzpicture}%
          }
      }
  }
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{ \drWalley }
%    \begin{macrocode}
\@@_Declare_Document_Command:nnn { drWalley } { S B{yellow} }
  {
    \@@_provide_savebox_and_use:nn { drWalley_#1_#2 }
      {
        % \@@_set_scale_abs_tl:n {#1}
        \bool_if:NTF \l_@@_if_opt_draft_bool
          {
            \@@_create_draftbox:nn 
              { 2.42879ex * \l_@@_scale_abs_tl } 
              { 1.6008ex * \l_@@_scale_abs_tl } 
          }{
            \begin{tikzpicture}
              [
                /@@ ,
                x=2.4ex, y=2.4ex, line ~ width=0.09ex* \l_@@_scale_abs_tl ,
                scale=#1, black, decoration=
                  {
                    random ~ steps,segment ~ length=0.15ex* \l_@@_scale_abs_tl , 
                    amplitude=0.1ex* \l_@@_scale_abs_tl 
                  }
              ]
              \shade[ball ~ color=orange!80!black] (0.298,-0.33) rectangle (0.692,0.337);
              \foreach \x/\y in { 0.5/0.25 , 0.6/0 , 0.5/-0.25 }
                \draw[decorate, line ~ width=0.06ex* \l_@@_scale_abs_tl ] 
                  (0.298,0) -- (\x,\y);
              \shade[ball ~ color=#2] (-0.01,0) circle [radius=0.31];
              \draw[rotate=-20] (0.12,0.1) -- (0.2,0.05);
              \draw[rotate=-20] (0.283,-0.1) .. controls (0.2,-0.072) 
                and (0.1,-0.06) .. (0.,-0.1);
            \end{tikzpicture}%
          }
      }
  }
%    \end{macrocode}
%\end{macro}
%
%
% \begin{macro}{ \@@_Cat:n, \@@_Cat_unknown:n, \@@_Cat_dead:n }
%    \begin{macrocode}
\cs_new:Npn \@@_Cat:n #1 
  {
    \draw (0,0) circle [radius=0.3];
    \foreach \xi/\xii in { 0.3/0.35 }
      {
        \draw[rounded ~ corners=0.163ex* \l_@@_scale_abs_tl ] 
          (-\xi,0) -- (-\xii,0.5) -- (0,\xi)  (0,\xi) -- (\xii,0.5) -- (\xi,0);
      }
    \fill (-0.15,.15) circle [radius=0.05];
    \fill (0.15,.15) circle [radius=0.05];
    \foreach \x in { 0.1 , -0.1 }
      \draw[rounded ~ corners=0.175ex* \l_@@_scale_abs_tl ,yshift=-0.12ex] 
        (0,0) -- (0,-0.1) -- (\x,-0.095);
    \draw[rounded ~ corners=.12ex* \l_@@_scale_abs_tl ,yshift=-.15ex,
      line ~ width=0.03em*0.9* \l_@@_scale_abs_tl ] 
      (-0.1,0.1) -- (0,0) -- (0.1,0.1) -- cycle ;
    \foreach \a/\b/\c/\d in 
      { 0.1/0.25/0.35/0.4 , -0.1/-0.25/-0.35/-0.4 }
        \foreach \yi/\yii/\yiii in 
          { 0/0/-0.05 , -0.01/-0.09/-0.14 , -0.045/-0.13/-0.23 }
          {
            \draw[line ~ width=0.035ex* \l_@@_scale_abs_tl ]
              (\a,-0.05)..controls(\b,\yi)and(\c,\yii).. (\d,\yiii);           
          }
  }
\cs_new:Npn \@@_Cat_unknown:n #1 
  {
    \draw (0,0) circle [radius=0.3];
    \foreach \xi/\xii in { 0.3/0.35 }
      {
        \draw[rounded ~ corners=0.163ex* \l_@@_scale_abs_tl ] 
          (-\xi,0) -- (-\xii,0.5) -- (0,\xi)  
          (0,\xi) -- (\xii,0.5) -- (\xi,0);
      }
    \fill (0,-0.18)  circle [radius=0.04];
    \draw
      (0,0.06) arc[start ~angle=-90, end ~angle=180, radius=0.075]
      (0,0.06) arc[start ~angle=90, end ~angle=360, radius=0.075];
    \foreach \case in { 1,-1 }
      \foreach \yi/\yii/\yiii in 
        { 
          -0.01/-0.05/-0.08 , 
          -0.02/-0.12/-0.16 , 
          -0.055/-0.15/-0.25 
        }{
          \draw[line ~ width=0.035ex* \l_@@_scale_abs_tl ]
            ({0.1*\case},-0.05)..controls({\case*0.25},\yi)
            and({0.35*\case},\yii).. ({0.4*\case},\yiii);           
        }
  }
\cs_new:Npn \@@_Cat_dead:n #1 
  {
    \draw (0,0) circle [radius=0.3];
    \foreach \case in { 1,-1 }
      {
        \draw[rounded ~ corners=0.163ex* \l_@@_scale_abs_tl ] 
          ({\case*0.3},0) -- ({\case*0.35},0.5) -- (0,0.3);
      }
    \draw
      \foreach \angle in { 45,135,225,315 }
        {
          (0.13,0.13) -- ({0.13+0.07*cos(\angle)},{0.13+0.07*sin(\angle)})
          (-0.13,0.13) -- ({-0.13+0.07*cos(\angle)},{0.13+0.07*sin(\angle)})
        }
      ;
    \foreach \case in { 1,-1 }
      \draw[rounded ~ corners=0.175ex* \l_@@_scale_abs_tl ,yshift=-0.12ex] 
        (0,0) -- (0,-0.08)   -- ({0.09*\case},-0.12);
    \draw[rounded ~ corners=.12ex* \l_@@_scale_abs_tl ,yshift=-.15ex,
      line ~ width=0.03em*0.9* \l_@@_scale_abs_tl ] 
      (0,0) -- (0.1,0.07)  -- (0,0.1)-- (-0.1,0.07) -- cycle ;
    \foreach \case in {-1,1}
      \foreach \yi/\yii/\yiii in 
        { 
          -0.04/-0.09/-0.15 , 
          -0.05/-0.18/-0.23,
          -0.085/-0.22/-0.31
        }{
          \draw[line ~ width=0.035ex* \l_@@_scale_abs_tl ]
            ({0.1*\case},-0.05) 
            .. controls ({0.18*\case},\yi) and ({0.28*\case},\yii) .. 
            ({0.33*\case},\yiii);           
        }
    \draw [transparent,line ~ width=0.035ex*\l_@@_scale_abs_tl] (-0.4,0) -- (0.4,0);
  }
%    \end{macrocode}
% \end{macro}
%
%\begin{macro}{ \Cat }
% It is a Ket! (sic!)
%    \begin{macrocode}
\@@_Declare_Document_Command:nnn { Cat } { S }
  {
    \@@_provide_savebox_and_use:nn { Cat_#1 }
      {
        % \@@_set_scale_abs_tl:n {#1}
        \bool_if:NTF \l_@@_if_opt_draft_bool
          {
            \@@_create_draftbox:nn 
              { 1.89899ex * \l_@@_scale_abs_tl } 
              { 1.957ex * \l_@@_scale_abs_tl } 
          }{
            \begin{tikzpicture}
              [
                /@@ ,
                x=2.33ex,y=2.33ex, line ~ width=0.093ex* \l_@@_scale_abs_tl ,scale=#1
              ]
              \@@_Cat:n {#1}
            \end{tikzpicture}%
          }
      }
  }
%    \end{macrocode}
%\end{macro}
%
%
%
%\begin{macro}{ \SchrodingersCat }
% It is a Ket! (sic!)
%    \begin{macrocode}
\@@_Declare_Document_Command:nnn { SchrodingersCat } { S m }
  {
    \@@_provide_savebox_and_use:nn { SchrodingersCat_#1_#2 }
      {
        % \@@_set_scale_abs_tl:n {#1}
        \bool_if:NTF \l_@@_if_opt_draft_bool
          {
            \@@_create_draftbox:nn 
              { 1.89899ex * \l_@@_scale_abs_tl } 
              { 1.957ex * \l_@@_scale_abs_tl } 
          }{
            \begin{tikzpicture}
              [
                /@@ ,
                x=2.33ex,y=2.33ex, line ~ width=0.093ex* \l_@@_scale_abs_tl ,scale=#1
              ]
              \int_case:nnF {#2}
                {
                  { 1 } { \@@_Cat:n {#1} }
                  { 0 } { \@@_Cat_unknown:n {#1} }
                  { -1 } { \@@_Cat_dead:n {#1} }
                }
                { \msg_error:nnn { tikzsymbols } { SchrodingersCat } {#2} }
            \end{tikzpicture}%
          }
      }
  }
%    \end{macrocode}
%\end{macro}
%
%
%
%
%
% \begin{macro}{ \Ninja }
% It can hide.
%    \begin{macrocode}
\@@_Declare_Document_Command:nnn { Ninja } { S B{black} B{red} B{white} }
  {
    \@@_provide_savebox_and_use:nn { Ninja_#1_#2_#3_#4 }
      {
        % \@@_set_scale_abs_tl:n {#1}
        \bool_if:NTF \l_@@_if_opt_draft_bool
          {
            \@@_create_draftbox:nn 
              { 2.149ex * \l_@@_scale_abs_tl } 
              { 1.717ex * \l_@@_scale_abs_tl } 
          }{
            \begin{tikzpicture}
              [
                /@@ ,
                x=2.4ex, y=2.4ex, line ~ width=0.09ex* \l_@@_scale_abs_tl ,
                scale=#1, decoration=
                  {
                    random ~ steps,segment ~ length=0.1ex* \l_@@_scale_abs_tl , 
                    amplitude=0.1ex* \l_@@_scale_abs_tl 
                  }
              ]
              \tl_set:Nn \l_tmpa_tl {#2}
              \fill[#2] (0,0) circle [radius=0.33];
              \fill[decoration={random ~ steps,segment ~ length=0.1ex* \l_@@_scale_abs_tl ,
                amplitude=0.01ex* \l_@@_scale_abs_tl }, decorate,#3] 
              (-0.33,0) -- (0.33,0)  -- (0.23,0.23) -- (-0.23,0.23) -- cycle;
              \tl_if_eq:NNT \c_@@_black_tl \l_tmpa_tl 
                {
                  \draw[line ~ width=0.08ex* \l_@@_scale_abs_tl ] (0,0) circle [radius=0.33];
                }
              \fill[#3] (0,0.1) -- (-0.33,0) -- (-0.26,0.23);
              \fill[#3] (0.3465,0) arc [start ~ angle=0, end ~ angle=42, x ~ radius=0.34, y~ radius=0.345]  -- 
                (0.2,0.23)-- (0.31,0.0) -- cycle;
              \fill[#3] (-0.3465,0) arc [start ~ angle=0, end ~ angle=-42, x ~ radius=-0.34, y~ radius=-0.345] -- 
                (-0.2,0.23)-- (-0.31,0.0) -- cycle;
              \fill[#4] (0.129,0.1425) arc [start ~ angle=55, end ~ angle=-180, radius=0.05];
              \fill[#4] (-0.129,0.1425) arc [start ~ angle=-55, end ~ angle=180, radius=-0.05];
              \foreach \x in { (0.5,0.35) , (0.53,0.1) }
              \draw
                [
                  decorate,decoration=
                    {
                      snake,amplitude=.1ex* \l_@@_scale_abs_tl ,
                      segment ~ length=0.55ex* \l_@@_scale_abs_tl 
                    } , #3
                ] 
                (0.26,0.21) -- \x;
              \tl_if_eq:NNF \c_@@_black_tl \l_tmpa_tl 
                {
                  \draw[line ~ width=0.08ex* \l_@@_scale_abs_tl ] (0,0) circle [radius=0.33];
                }
            \end{tikzpicture}%
          }
      }
  }
%    \end{macrocode}
%\end{macro}
%
%
%\begin{macro}{ \dNinja }
%    \begin{macrocode}
\@@_Declare_Document_Command:nnn { dNinja } { S B{black} B{red} B{white} }
  {
    \@@_provide_savebox_and_use:nn { dNinja_#1_#2_#3_#4 }
      {
        % \@@_set_scale_abs_tl:n {#1}
        \bool_if:NTF \l_@@_if_opt_draft_bool
          {
            \@@_create_draftbox:nn 
              { 2.1498ex * \l_@@_scale_abs_tl } 
              { 1.7178ex * \l_@@_scale_abs_tl } 
          }{
            \begin{tikzpicture}
              [
                /@@ ,
                x=2.4ex, y=2.4ex, line ~ width=0.09ex* \l_@@_scale_abs_tl ,
                scale=#1, decoration=
                  {
                    random ~ steps,segment ~ length=0.1ex* \l_@@_scale_abs_tl , 
                    amplitude=0.1ex* \l_@@_scale_abs_tl 
                  }
              ]
              \foreach \length/\coord in { 0.55/{(0.5,0.35)} , 0.5/{(0.53,0.1)} }
                \draw
                  [
                    decorate,decoration=
                      {
                        snake,amplitude=.1ex* \l_@@_scale_abs_tl ,
                        segment ~ length=\length ex* \l_@@_scale_abs_tl 
                      } , decorate, #3!50!black
                  ] 
                  \coord -- (0.26,0.21);
              \shade[ball ~ color=#2] (0,0) circle [radius=0.347];
              \fill
                [
                  decoration=
                    {
                      random ~ steps,segment ~ length=0.1ex* \l_@@_scale_abs_tl ,
                      amplitude=0.01ex* \l_@@_scale_abs_tl 
                    } , ball ~ color=#3
                 ] 
              decorate  {(-0.33,0) -- (0.3465,0)  }
                          {arc [start ~ angle=0, end ~ angle=42, x ~ radius=0.34,y~ radius=0.345]}
              decorate  {-- (-0.25,0.24)}
                        { arc [start ~ angle=-42, end ~ angle=0, x ~ radius=-0.375,y~ radius=-0.345]};
%        Frag mich nicht, was das macht.
%              \shade[ball ~ color=#4] (0.129,0.1425) arc [start ~ angle=55, end ~ angle=-180, radius=0.05];
%              \shade[ball ~ color=#4] (-0.129,0.1425) arc [start ~ angle=-55, end ~ angle=180, radius=-0.05];
              \shade[top ~ color=#4!80!black, bottom ~ color=#4] 
                (0.129,0.1425) arc [start ~ angle=55, end ~ angle=-180, radius=0.05];
              \shade[top ~ color=#4!80!black, bottom ~ color=#4] 
                (-0.129,0.1425) arc [start ~ angle=-55, end ~ angle=180, radius=-0.05];
            \end{tikzpicture}%
          }
      }
  }
%    \end{macrocode}
%\end{macro}
%
%
%
%
% \begin{macro}{ \Sleepey }
% It is sleeping.
%    \begin{macrocode}
\@@_Declare_Document_Command:nnn { Sleepey } { S B{none} B{none} B{black} }
  {
    \@@_provide_savebox_and_use:nn { Sleepey_#1_#2_#3_#4 }
      {
        % \@@_set_scale_abs_tl:n {#1}
        \bool_if:NTF \l_@@_if_opt_draft_bool
          {
            \@@_create_draftbox:nn 
              { 2.084866ex * \l_@@_scale_abs_tl } 
              { 1.5912ex * \l_@@_scale_abs_tl } 
          }{
            \begin{tikzpicture}
              [
                /@@ ,
                x=2.04ex, y=2.04ex, line ~ width=0.102ex* \l_@@_scale_abs_tl ,
                scale=#1
              ]
%              %% Hat
              \filldraw [fill=#3]
                (-0.33,0) arc[start~angle=180,end~angle=0,x~radius=0.45,y~radius=0.4] 
                -- ++(0,-0.2) 
                arc[start~angle=0,end~angle=130,x~radius=0.15,y~radius=0.24];
%              %% face
              \filldraw [fill=#2,rounded ~ corners=0.001ex * \l_@@_scale_abs_tl]
                (0.33,0)  arc[start~angle=0, end~angle=-180, radius=0.33] -- cycle ;
%              %% Pommel
              \fill (0.55,-0.15) circle [radius=0.06];
              \foreach \l_@@_angle_tl in {0,30,60,...,360}
                {
                  \draw ({0.55+0.06*cos(\l_@@_angle_tl)*1.2},
                    {-0.15+0.06*sin(\l_@@_angle_tl)*1.2}) 
                    circle[radius=0.02];
                }
%              %% Stars
              \foreach \l_tmpa_tl/\l_tmpb_tl in { -0.14/0.12 , 0.19/0.12 , 0.05/0.26 , 0.40/0.16 }
                {
                  \draw [line~width=0.04ex*\l_@@_scale_abs_tl ,#4]
                  \foreach \l_@@_angle_tl in { 0,45,90,...,360 }
                    {
                      (\l_tmpa_tl,\l_tmpb_tl) -- ({\l_tmpa_tl+0.07*cos(\l_@@_angle_tl)},
                      {\l_tmpb_tl+0.07*sin(\l_@@_angle_tl)})
                    }
                  ;
                }
%              %% Mouth
              \fill (0,-0.225) circle [radius=0.04];
%              %% Eyes
              \draw (-0.1,-0.09)  arc[start~angle=0, end~angle=-180,
                x~radius=0.06,y~radius=0.08] ;
              \draw (0.1,-0.09)  arc[start~angle=180, 
                end~angle=360,x~radius=0.06,y~radius=0.08] ;
            \end{tikzpicture}%
          }
      }
  }
%    \end{macrocode}
%\end{macro}
%
% \begin{macro}{ \dSleepey }
% It is sleeping.
%    \begin{macrocode}
\@@_Declare_Document_Command:nnn { dSleepey } { S B{yellow} B{blue} B{black} }
  {
    \@@_provide_savebox_and_use:nn { dSleepey_#1_#2_#3_#4 }
      {
        % \@@_set_scale_abs_tl:n {#1}
        \bool_if:NTF \l_@@_if_opt_draft_bool
          {
            \@@_create_draftbox:nn 
              { 2.033865ex * \l_@@_scale_abs_tl } 
              { 1.489181ex * \l_@@_scale_abs_tl } 
          }{
            \begin{tikzpicture}
              [
                /@@ ,
                x=2.04ex, y=2.04ex, line ~ width=0.102ex* \l_@@_scale_abs_tl ,
                scale=#1
              ]
%              %% Hat
              \shade [ball ~ color=#3]
                (-0.33,0) arc[start~angle=180,end~angle=0,x~radius=0.45,y~radius=0.4] 
                -- ++(0,-0.2) 
                arc[start~angle=0,end~angle=130,x~radius=0.15,y~radius=0.24];
%              %% face
              \shade [ball ~ color=#2,rounded ~ corners=0.001ex * \l_@@_scale_abs_tl]
                (0.33,0)  arc[start~angle=0, end~angle=-180, radius=0.33] -- cycle ;
%              %% Pommel
              \fill (0.55,-0.15) circle [radius=0.06];
              \foreach \l_@@_angle_tl in {0,30,60,...,360}
                {
                  \draw ({0.55+0.06*cos(\l_@@_angle_tl)*1.2},
                    {-0.15+0.06*sin(\l_@@_angle_tl)*1.2}) 
                    circle[radius=0.02];
                }
%              %% Stars
              \foreach \l_tmpa_tl/\l_tmpb_tl in { -0.14/0.12 , 0.19/0.12 , 0.05/0.26 , 0.40/0.16 }
                {
                  \draw [line~width=0.04ex* \l_@@_scale_abs_tl,#4]
                  \foreach \l_@@_angle_tl in { 0,45,90,...,360 }
                    {
                      (\l_tmpa_tl,\l_tmpb_tl) -- ({\l_tmpa_tl+0.07*cos(\l_@@_angle_tl)},
                      {\l_tmpb_tl+0.07*sin(\l_@@_angle_tl)})
                    }
                  ;
                }
%              %% Mouth
              \fill (0,-0.225) circle [radius=0.04];
%              %% Eyes
              \draw (-0.1,-0.09)  arc[start~angle=0, end~angle=-180,
                x~radius=0.06,y~radius=0.08] ;
              \draw (0.1,-0.09)  arc[start~angle=180, 
                end~angle=360,x~radius=0.06,y~radius=0.08] ;
            \end{tikzpicture}%
          }
      }
  }
%    \end{macrocode}
%\end{macro}
%
%
% \begin{macro}{ \Maskey }
% It is sleeping.
%    \begin{macrocode}
\@@_Declare_Document_Command:nnn { Maskey } { S B{none} B{none} }
  {
    \@@_provide_savebox_and_use:nn { Maskey_#1_#2_#3 }
      {
        % \@@_set_scale_abs_tl:n {#1}
        \bool_if:NTF \l_@@_if_opt_draft_bool
          {
            \@@_create_squared_draftbox:n { 1.704ex * \l_@@_scale_abs_tl } 
          }{
            \begin{tikzpicture}
              [
                /@@, 
                x=2.4ex, y=2.4ex, line ~ width=0.12ex*\l_@@_scale_abs_tl , scale=\l_@@_scale_abs_tl
              ]
                \filldraw[fill=#2] (0,0) circle [radius=0.33];
                \fill (-0.1,0.1) circle [radius=0.05];
                \fill (0.1,0.1) circle [radius=0.05];
                \filldraw[fill=#3] (-0.18,-0.19)  .. controls (-0.08,-0.23) and (0.08,-0.23) .. (0.18,-0.19)
                  .. controls (0.22,-0.15) and (0.24,-0.05) .. (0.24,-0.00)
                  .. controls (0.1,0.03) and (-0.1,0.03) .. (-0.24,-0.00)
                  .. controls (-0.24,-0.05) and (-0.22,-0.15) .. cycle
                ;
                \draw (0.24,-0.0) -- (0.33,0.06);
                \draw (-0.24,-0.0) -- (-0.33,0.06);
                \draw (-0.18,-0.19) -- (-0.25,-0.24);
                \draw (0.18,-0.19) -- (0.25,-0.24);
              \end{tikzpicture}%
          }
      }
  }
%    \end{macrocode}
%\end{macro}
%
% \begin{macro}{ \NiceReapey }
% I wasn't able to create a good Grim Reaper. Well.
%    \begin{macrocode}
\@@_Declare_Document_Command:nnn { NiceReapey } { S B{black!20!white} }
  {
    \@@_provide_savebox_and_use:nn { NiceReapey_#1_#2 }
      {
        % \@@_set_scale_abs_tl:n {#1}
        \bool_if:NTF \l_@@_if_opt_draft_bool
          {
            \@@_create_draftbox:nn 
              { (1.10667em + 0.07ex) * \l_@@_scale_abs_tl } 
              { (0.693em+0.07ex) * \l_@@_scale_abs_tl } 
          }{
            \begin{tikzpicture}
              [
                /@@ ,
                x=0.11em,y=0.11em, line ~ width=0.07ex* \l_@@_scale_abs_tl ,scale=#1
              ]
              \draw (1.7,-1) arc [start ~ angle=360, end ~ angle=180, x ~ radius=1.7, y ~ radius=2]
                 arc [start ~ angle=260, end ~ angle=110, x ~ radius=1.5,y ~ radius=2] 
                 .. controls (-1,3.3) and (1,3.3) .. (1.9,2.97)  
                 arc [start ~ angle=260, end ~ angle=100, x ~ radius=-1.3, y ~ radius=-2] -- cycle;
              \filldraw[fill=#2] (3,-3) -- (3,3) .. controls (5,3) and 
                (6,2) .. (7,1.5) -- (3,1.5) -- cycle;
              \draw (0,-1.5) circle [ x~radius=1 , y~radius= 0.5];
              \draw (0,-1.5) circle [ x~radius=1 , y~radius= 0.5];
              \foreach  \x in { 0.2 , 0.6 }
                \draw[line ~ width=0.04ex* \l_@@_scale_abs_tl ] 
                  (\x,-1) -- (\x,-2)  (-\x,-1) -- (-\x,-2)  ;
              \draw[line ~ width=0.04ex* \l_@@_scale_abs_tl ] (-1,-1.5) -- (1,-1.5);
              \fill (1.25,1.25) circle [ x~radius=0.5 , y~radius= 0.75];
              \fill (-1.25,1.25) circle [ x~radius=0.5 , y~radius= 0.75];
            \end{tikzpicture}%
          }
      }
  }
%    \end{macrocode}
%\end{macro}
%
%
%
% \subsection{Other symbols(s)}
%
%\begin{macro}{ \@@_Strichmaxerl_x_check:N }
%  A helper command. This command checks if the length is greater then
% the radius of the circle.
%    \begin{macrocode}
\cs_new:Npn \@@_Strichmaxerl_x_check:N #1
  {
    \fp_compare:nNnTF {#1} > { 0 }
      {
        \fp_compare:nNnTF {#1} < { 0.18 }
          { \fp_zero:N #1  }
          { \fp_set:Nn #1 { #1 - 0.18 } }
      }
      {
        \fp_compare:nNnTF {#1} > { - 0.18 }
          { \fp_zero:N #1  }
          { \fp_set:Nn #1 { #1 + 0.18 } }
      }
  }
%    \end{macrocode}
%\end{macro}
%
%
%
%
%
%
%\begin{macro}{ \@@_Strichmaxerl_if_smaller_zero_set_zero:N }
%  Again to write less.
%    \begin{macrocode}
\cs_new:Npn \@@_Strichmaxerl_if_smaller_zero_set_zero:N #1
  {
    \fp_compare:nNnT {#1} < { 0 } { \fp_zero:N #1 }
  }
%    \end{macrocode}
%\end{macro}
%
%
%
%
%
%
%\begin{macro}{ \Strichmaxerl }
%    \begin{macrocode}
\@@_Declare_Document_Command:nnn { Strichmaxerl } 
  { S B{-22} B{22} B{27} B{-27} }
  {
    \@@_provide_savebox_and_use:nn 
      { Strichmaxerl_#1_#2_#3_#4_#5 }
      {
        % \@@_set_scale_abs_tl:n {#1}
        \bool_if:NTF \l_@@_if_opt_draft_bool
          {
%    \end{macrocode}
%
% Now we have to calculate the length and the height of the separate
% parts of the \verb|\Strichmaxerl|.
%
% At first the lengths (they have all an \verb|x| in the name). \par
% \verb|LA| for \enquote{linker Arm} (\emph{left arm}). \par
% \verb|RA| for \enquote{rechter Arm} (\emph{right arm}). \par
% \verb|LB| for \enquote{linkes Bein} (\emph{left leg}). \par
% \verb|RB| for \enquote{rechtes Bein} (\emph{right leg}). \par
%    \begin{macrocode}
            \fp_set:Nn \l_@@_Strichmaxerl_x_LA_fp { -0.27 * cosd (#2) }
            \fp_set:Nn \l_@@_Strichmaxerl_x_RA_fp { 0.27 * cosd (#3) }
            \fp_set:Nn \l_@@_Strichmaxerl_x_RB_fp { 0.34 * sind (#4) }
            \fp_set:Nn \l_@@_Strichmaxerl_x_LB_fp { 0.34 * sind (#5) }
%    \end{macrocode}
%
% Now the height (\verb|y|): \par
% \verb|LA| for \enquote{linker Arm} (\emph{left arm}). \par
% \verb|RA| for \enquote{rechter Arm} (\emph{right arm}). \par
% \verb|LB| for \enquote{linkes Bein} (\emph{left leg}). \par
% \verb|RB| for \enquote{rechtes Bein} (\emph{right leg}). \par
%    \begin{macrocode}
            \fp_set:Nn \l_@@_Strichmaxerl_y_LA_fp { 0.27 * sind (#2) }
            \fp_set:Nn \l_@@_Strichmaxerl_y_RA_fp { 0.27 * sind (#3) }
            \fp_set:Nn \l_@@_Strichmaxerl_y_RB_fp { 0.34 * cosd (#4) }
            \fp_set:Nn \l_@@_Strichmaxerl_y_LB_fp { 0.34 * cosd (#5) }
%    \end{macrocode}
% Well then, lets start our calculations. Firstly the length.
%
%^^A  X
%
%    \begin{macrocode}
            \@@_Strichmaxerl_x_check:N \l_@@_Strichmaxerl_x_LA_fp
            \@@_Strichmaxerl_x_check:N \l_@@_Strichmaxerl_x_RA_fp
            \@@_Strichmaxerl_x_check:N \l_@@_Strichmaxerl_x_LB_fp
            \@@_Strichmaxerl_x_check:N \l_@@_Strichmaxerl_x_RB_fp
%    \end{macrocode}
%
%
%
%
%
%
%    \begin{macrocode}
            \fp_set:Nn \@@_Strichmaxerl_x_max_fp
              {
                max
                  (
                    0 , \l_@@_Strichmaxerl_x_LA_fp , \l_@@_Strichmaxerl_x_RA_fp,
                    \l_@@_Strichmaxerl_x_LB_fp , \l_@@_Strichmaxerl_x_RB_fp
                  )
              }
            \fp_set:Nn \@@_Strichmaxerl_x_min_fp
              {
                min
                  (
                    0 , \l_@@_Strichmaxerl_x_LA_fp , \l_@@_Strichmaxerl_x_RA_fp,
                    \l_@@_Strichmaxerl_x_LB_fp , \l_@@_Strichmaxerl_x_RB_fp
                  )
              }
%    \end{macrocode}
%
%^^A  Y
%
% Finished the length. Now we calculate our height. Arms and legs more
% or less separate.
%
% Arms: First we subtract $0.2$ (= adding $-0.2$) (torso length)
%
%    \begin{macrocode}
            \fp_set:Nn \l_@@_Strichmaxerl_y_LA_fp { \l_@@_Strichmaxerl_y_LA_fp - 0.2 }
            \fp_set:Nn \l_@@_Strichmaxerl_y_RA_fp { \l_@@_Strichmaxerl_y_RA_fp - 0.2 }
%    \end{macrocode}
% Arms and Legs: if they are smaller than $0$, make them $0$.
%    \begin{macrocode}
            \@@_Strichmaxerl_if_smaller_zero_set_zero:N \l_@@_Strichmaxerl_y_LA_fp
            \@@_Strichmaxerl_if_smaller_zero_set_zero:N \l_@@_Strichmaxerl_y_RA_fp
            \@@_Strichmaxerl_if_smaller_zero_set_zero:N \l_@@_Strichmaxerl_y_LB_fp
            \@@_Strichmaxerl_if_smaller_zero_set_zero:N \l_@@_Strichmaxerl_y_RB_fp
%    \end{macrocode}
%
% And find the greatest number.
%    \begin{macrocode}
            \fp_set:Nn \@@_Strichmaxerl_y_max
              {
                max
                  (
                    0 , \l_@@_Strichmaxerl_y_LA_fp , \l_@@_Strichmaxerl_y_RA_fp,
                    \l_@@_Strichmaxerl_y_LB_fp , \l_@@_Strichmaxerl_y_RB_fp
                  )
              }
%    \end{macrocode}
%
%
%
%
%
%
%    \begin{macrocode}
            \@@_create_draftbox:nn
              {
                (
                  0.60597ex +1.35ex * \@@_Strichmaxerl_x_max_fp
                  -1.35ex * \@@_Strichmaxerl_x_min_fp
                ) * \l_@@_scale_abs_tl
              }{
                ( 1.173ex + 1.35ex * \@@_Strichmaxerl_y_max
                ) * \l_@@_scale_abs_tl
              }
          }{
            \begin{tikzpicture}
              [
                /@@ ,
                line ~ width=0.12ex* \l_@@_scale_abs_tl , scale=#1, x=1.35ex, y=1.35ex
              ]
             \char_set_catcode_other:N  :
             %% LB
              \draw[rotate \space around= { #5 \token_to_str:N : ( 0.15 , 0.2 ) } ]  (0.15,0.2) -- (0.15,-0.14);
             %% RB
              \draw[rotate \space around= { #4 \token_to_str:N : ( 0.15 , 0.2 ) } ]  (0.15,0.2) -- (0.15,-0.14);
              \draw (.15,.2) -- (.15,.4);
              %% RA
              \draw[rotate \space around={ #3 \token_to_str:N : ( 0.15 , 0.4) } ] (0.15,0.4) -- (0.42,0.4);
              %% LA
              \draw[rotate \space around={ #2 \token_to_str:N : ( 0.15 , 0.4) } ] (0.15,0.4) -- (-0.12,0.4);
              \draw (.15, .4) -- (.15, .53);
              \draw (.15,.8) circle [radius=0.18];
            \end{tikzpicture}
          }
      }
  } 
%    \end{macrocode}
%\end{macro}
%
%
%
%\begin{macro}{ \Person }
%    \begin{macrocode}
\@@_Declare_Document_Command:nnn { Person } { S B{-22} B{22} B{27} B{-27} }
  {
    \msg_error:nnnn 
      { tikzsymbols } 
      { obsolete-command } 
      { \Person } 
      { \Strichmaxerl }
    \tikzsymbolsuse { Strichmaxerl } [#1] [#2] [#3] [#4] [#5]
  }
%    \end{macrocode}
%\end{macro}
%
%
%
%
%\begin{macro}{ \Heart }
%    \begin{macrocode}
\bool_if:NF \g_@@_if_opt_marvosym_bool
  {
\@@_Declare_Document_Command:nnn { Heart } { S B{none} }
  {
    \@@_provide_savebox_and_use:nn { Heart_#1_#2 }
      {
        % \@@_set_scale_abs_tl:n {#1}
        \bool_if:NTF \l_@@_if_opt_draft_bool
          {
            \@@_create_draftbox:nn 
              { 1.97ex * \l_@@_scale_abs_tl } 
              { 1.97ex * \l_@@_scale_abs_tl } 
          }{
            \begin{tikzpicture}
              [
                /@@ ,
                x=0.185ex,y=0.185ex, scale=#1, line ~ width=0.12ex* \l_@@_scale_abs_tl 
              ]
              \filldraw[fill=#2] (0,-0.1) .. controls (-0.1,4) and (5,4) .. (5,0)
                .. controls (5,-3) and (1,-6) .. (0,-6) 
                .. controls (-1,-6) and (-5,-3) .. (-5,0) 
                .. controls (-5,4) and (0.1,4) .. cycle
                ;
            \end{tikzpicture}%
          }
      }
  }
  }
%    \end{macrocode}
%\end{macro}
%\begin{macro}{ \dHeart }
%    \begin{macrocode}
\@@_Declare_Document_Command:nnn { dHeart } { S B{red} }
  {
    \@@_provide_savebox_and_use:nn { dHeart_#1_#2 }
      {
        % \@@_set_scale_abs_tl:n {#1}
        \bool_if:NTF \l_@@_if_opt_draft_bool
          {
            \@@_create_draftbox:nn 
              { 1.93ex * \l_@@_scale_abs_tl } 
              { 1.93ex * \l_@@_scale_abs_tl } 
          }{
            \begin{tikzpicture}
              [
                /@@ ,
                x=0.185ex,y=0.185ex, scale=#1 
              ]
              \fill[ball ~ color=#2] (0,0)     
                .. controls (-0.62,4.2) and (5.2,4.2) .. (5.2,0)
                .. controls (5.2,-3.2) and (1.2,-6.2) .. (0,-6.2) 
                .. controls (-1.2,-6.2) and (-5.2,-3.2) .. (-5.2,0) 
                .. controls (-5.2,4.2) and (0.62,4.2) .. cycle
                ;
            \end{tikzpicture}%
          }
      }
  }
%    \end{macrocode}
%\end{macro}
%
%
%\begin{macro}{ \HeartBroken }
%    \begin{macrocode}
\@@_Declare_Document_Command:nnn { HeartBroken } { S B{none} }
  {
    \@@_provide_savebox_and_use:nn { HeartBroken_#1_#2 }
      {
        % \@@_set_scale_abs_tl:n {#1}
        \bool_if:NTF \l_@@_if_opt_draft_bool
          {
            \@@_create_draftbox:nn 
              { 1.93ex * \l_@@_scale_abs_tl } 
              { 1.93ex * \l_@@_scale_abs_tl } 
          }{
            \begin{tikzpicture}
              [
                /@@ ,
                x=0.185ex,y=0.185ex, scale=#1, line ~ width=0.08ex* \l_@@_scale_abs_tl 
              ]
              \draw[fill=#2] (0,0) .. controls (-0.2,4) and (5,4) .. (5,0)
                .. controls (5,-3) and (1,-6) .. (0,-6) 
                .. controls (-1,-6) and (-5,-3) .. (-5,0) 
                .. controls (-5,4) and (0.2,4) .. (0,0)
                -- (0.5,-1) -- (-0.5,-2) -- (0.5,-3) -- (-0.5,-4) -- (0.5,-5) -- (0,-6);
                ;
            \end{tikzpicture}%
          }
      }
  }
%    \end{macrocode}
%\end{macro}
%
%
%\begin{macro}{ \Candle }
%    \begin{macrocode}
\@@_Declare_Document_Command:nnn { Candle } { S }
  {
    \@@_provide_savebox_and_use:nn { Candle_#1 }
      {
        % \@@_set_scale_abs_tl:n {#1}
        \bool_if:NTF \l_@@_if_opt_draft_bool
          {
            \@@_create_draftbox:nn 
              { 0.63998ex * \l_@@_scale_abs_tl } 
              { 1.754993ex * \l_@@_scale_abs_tl } 
          }{
            \begin{tikzpicture}
              [
                /@@ ,
                x=1ex, y=1ex, scale=#1, line ~ width=0.07ex* \l_@@_scale_abs_tl 
              ]
              \draw[rounded ~ corners=0.04ex* \l_@@_scale_abs_tl ] 
                (0,0) -- (0.2,0) -- +(0,1) -- (0,1) -- cycle;
              \draw[line ~ width=0.05ex* \l_@@_scale_abs_tl ] (0.1,1) -- (0.1,1.2);
              \foreach \x in { -0.2 , 0.4 }
                \draw[line ~ width=0.04ex* \l_@@_scale_abs_tl ] 
                  (0.1,1.1) .. controls (\x,1.3) and (0.1,1.5) ..  (0.1,1.7);
            \end{tikzpicture}%
          }
      }
  }
%    \end{macrocode}
%\end{macro}
%
%
%
%
%
%
%\begin{macro}{ \Fire }
% Not quite happy with the |xshift| and |yshift| and |rotate|,
% but it works.
%    \begin{macrocode}
\@@_Declare_Document_Command:nnn { Fire } { S }
  {
    \@@_provide_savebox_and_use:nn { Fire_#1 }
      {
        % \@@_set_scale_abs_tl:n {#1}
        \bool_if:NTF \l_@@_if_opt_draft_bool
          {
            \@@_create_draftbox:nn 
              { 1.576ex * \l_@@_scale_abs_tl }
              { 1.640942ex * \l_@@_scale_abs_tl }
          }{
            \begin{tikzpicture}
              [
                /@@ ,
                x=1ex, y=1ex, scale=#1, line ~ width=0.07ex* \l_@@_scale_abs_tl ,
                rotate=45,
              ]
              \fill (-0.05,0) -- (0.05,0) -- (0.05,0.95) -- (-0.05,0.95) -- cycle;
              \fill (-0.74,0.7) -- (0.19,0.7) -- (0.19,0.8) -- (-0.74,0.8) -- cycle;
              \fill[rotate=-20, xshift=-0.275ex, yshift=-0.02ex] 
                (-0.05,0.07) -- (0.05,0.07) -- (0.05,0.9) -- (-0.05,0.9) -- cycle;
              \fill[rotate=-70, xshift=-0.7ex, yshift=-0.49ex]
                (-0.05,0.07) -- (0.05,0.07) -- (0.05,0.9) -- (-0.05,0.9) -- cycle;
               \fill[rotate=135, xshift=0.53ex, yshift=-0.805ex] 
                (-0.05,0.07) -- (0.05,0.07) -- (0.05,0.9) -- (-0.05,0.9) -- cycle;
              \draw
                [
                  rotate=-45, xshift=-0.56ex, yshift=0.32ex,
                  line ~ width=0.04ex* \l_@@_scale_abs_tl , x=0.5ex, y=0.5ex
                ] 
                (-0.1,0.29) .. controls (-0.7,0.6) and (0,1.2) ..  (0.05,1.7);
              \draw
                [
                  rotate=-45, xshift=-0.455ex,yshift=0.32ex,
                  line ~ width=0.04ex* \l_@@_scale_abs_tl , x=0.5ex, y=0.5ex
                ] 
                (-0.1,0.29) .. controls (0.7,0.6) and (-0.1,1.2) ..  (-0.15,1.7);
              \draw[rotate=-45, xshift=-0.53ex] (-0.1,0.29) .. controls 
                (-0.7,0.6) and (0,1.2) ..  (0,1.5);
              \draw[rotate=-45, xshift=-0.424ex] (-0.1,0.29) .. controls 
                (0.7,0.6) and (-0.1,1.2) ..  (-0.1,1.5);
            \end{tikzpicture}%
          }
      }
  }
%    \end{macrocode}
%\end{macro}
%
%
%
%
%
%
%\begin{macro}{ \Coffeecup }
%    \begin{macrocode}
\bool_if:NF \g_@@_if_opt_marvosym_bool
{
\@@_Declare_Document_Command:nnn { Coffeecup } { S }
  {
    \@@_provide_savebox_and_use:nn { Coffeecup_#1 }
      {
        % \@@_set_scale_abs_tl:n {#1}
        \bool_if:NTF \l_@@_if_opt_draft_bool
          {
            \@@_create_draftbox:nn 
              { 1.82ex * \l_@@_scale_abs_tl } 
              { 1.705ex * \l_@@_scale_abs_tl } 
          }{
            \begin{tikzpicture}
              [
                /@@ ,
                x=0.7ex,y=0.7ex, scale=#1, 
                line ~ width=0.07ex* \l_@@_scale_abs_tl , decoration=
                  {
                    snake,amplitude=.05ex* \l_@@_scale_abs_tl ,
                    segment ~ length=0.408ex* \l_@@_scale_abs_tl 
                  }
              ]
              \draw (0,0) arc [start ~ angle=180, end ~ angle=270, x ~ radius=0.8,y ~ radius=1] --++
                (0.5,0) arc [start ~ angle=270, end ~ angle=360, x ~ radius=0.8,y ~ radius=1] -- cycle;
              \draw (2.1,-0.15) -- (2.2,-0.15) arc [start ~ angle=90, end ~ angle=-90, radius=0.3] -- (1.85, -0.75);
              \foreach \x in {0.4,1,1.6}
              \draw[line ~ width=0.05ex* \l_@@_scale_abs_tl , decorate]
                 (\x,0.3) -- +(0,1);
              \draw (0,-1.05) -- (2.1,-1.05);
            \end{tikzpicture}%
          }
      }
  }
}
%    \end{macrocode}
%\end{macro}
%
%
%
%
%
%
%\begin{macro}{ \Chair }
%    \begin{macrocode}
\@@_Declare_Document_Command:nnn { Chair } { S }
  {
    \@@_provide_savebox_and_use:nn { Chair_#1 }
      {
        % \@@_set_scale_abs_tl:n {#1}
        \bool_if:NTF \l_@@_if_opt_draft_bool
          {
            \@@_create_draftbox:nn 
              { 0.97ex * \l_@@_scale_abs_tl } 
              { 1.69ex * \l_@@_scale_abs_tl } 
          }{
            \fp_compare:nNnT {#1} < { 0 } { \bool_set_true:N \l_@@_if_scale_negative_bool }
            \begin{tikzpicture}
              [
                /@@ ,
                x=0.9ex,y=0.9ex, scale=#1, line ~ width=0.07ex* \l_@@_scale_abs_tl
              ]
              \draw (0,-0.5) -- (0,0.7) -- (0.5,1) -- (0.5,0.25);
              \draw[line ~ width=0.06ex* \l_@@_scale_abs_tl ] (0,0.4) -- (0.5,0.7);
              \draw (0,0) -- (0.5,0.3) -- (1,0) --(1,-0.5);
              \bool_if:NT \l_@@_if_scale_negative_bool
                { \draw (0.5,0.3) -- +(0,-0.5); }
              \draw (0.5,-0.3) -- (0.5,-0.8);
              \draw (1,0) -- (0.5,-0.3) -- (0,0);
            \end{tikzpicture}%
          }
        \bool_set_false:N \l_@@_if_scale_negative_bool
      }
  }
%    \end{macrocode}
%\end{macro}
%
%
%
%
%
%
%\begin{macro}{ \Bed }
%    \begin{macrocode}
\@@_Declare_Document_Command:nnn { Bed } { S }
  {
    \@@_provide_savebox_and_use:nn { Bed_#1 }
      {
        % \@@_set_scale_abs_tl:n {#1}
        \bool_if:NTF \l_@@_if_opt_draft_bool
          {
            \@@_create_draftbox:nn 
              { 3.08ex * \l_@@_scale_abs_tl } 
              { 1.68ex * \l_@@_scale_abs_tl } 
          }{
            \begin{tikzpicture}
              [
                /@@ ,
                x=1ex , y=1ex , scale=#1 , line ~ width=0.08ex*\l_@@_scale_abs_tl
              ]
              \draw (0,0) -- (0,1.6);
              \draw (3,0) -- (3,1.2);
              \draw (0,0.5) -- (3,0.5);
              \draw (0,0.35) -- (3,0.35);
              \draw (0.7,0.5) arc [start ~ angle=0, end ~ angle=90, radius=0.7];
              \draw (0.7,0.5) arc [start ~ angle=180, end ~ angle=30, x ~ radius=1.231,y ~ radius=0.6];
            \end{tikzpicture}%
          }
      }
  }
%    \end{macrocode}
%\end{macro}
%
%
%
%
%
%
%\begin{macro}{ \Tribar }
%    \begin{macrocode}
\@@_Declare_Document_Command:nnn { Tribar } 
  { S B{opacity=0} B{opacity=0} B{opacity=0} }
  {
    \@@_provide_savebox_and_use:nn { Tribar_#1_#2_#3_#4 }
      {
        % \@@_set_scale_abs_tl:n {#1}
        \bool_if:NTF \l_@@_if_opt_draft_bool
          {
            \@@_create_draftbox:nn 
              { 1.71746ex * \l_@@_scale_abs_tl } 
              { 1.68497ex * \l_@@_scale_abs_tl } 
          }{
            \begin{tikzpicture}
              [
                /@@ ,
                x=0.65ex,y=0.65ex,scale=#1,
                rounded ~ corners=0.03ex* \l_@@_scale_abs_tl , 
                line ~ width=0.06ex* \l_@@_scale_abs_tl 
              ]
              \fill[#2] (0.15,0.3) -- (-0.15,-0.3) -- (1.75,-0.3) -- ++ (-0.15,-0.3) 
                 -- (-0.65,-0.6) -- (0.35,1.3) -- +(0.15,-0.3);
              \fill[#3] (0,0) -- (1.3,0) -- (0.35,1.9) -- (0.65,1.9) -- 
                (1.75,-0.3) -- (-0.1,-0.3);
              \fill[#4]  (1,0) -- (0.35,1.3) --  (-0.65,-0.6) -- ++ 
                (-0.15,0.3) -- (0.35,1.9) -- (1.3,0);
              \draw (0,0) -- (1,0) -- (0.5,1) -- cycle;
              \draw (0.15,0.3) -- (-0.15,-0.3) -- (1.75,-0.3) -- ++ (-0.15,-0.3) 
                 -- (-0.65,-0.6) -- (0.35,1.3) -- (0.8,.4);
              \draw (0.9,0) -- (1.3,0) -- (0.35,1.9) -- (0.65,1.9) -- 
                (1.75,-0.3) -- +(-0.05,-0.1);
              \draw (-0.6,-0.6) -- (-0.65,-0.6) -- ++ (-0.15,0.3) -- (0.35,1.9) -- (0.4,1.9);
            \end{tikzpicture}%
          }
      }
  }
%    \end{macrocode}
%\end{macro}
%
%
%
%
%
%
%\begin{macro}{ \Moai }
%    \begin{macrocode}
\@@_Declare_Document_Command:nnn { Moai } { S }
  {
    \@@_provide_savebox_and_use:nn { Moai_#1 }
      {
        % \@@_set_scale_abs_tl:n {#1}
        \fp_compare:nNnTF { \l_@@_scale_abs_tl } < { 2 }
          {
            \dim_set:Nn \l_@@_Moai_thickness_dim { 0.05ex }
          }{
            \fp_compare:nNnTF { \l_@@_scale_abs_tl } < { 5 }
              { \dim_set:Nn \l_@@_Moai_thickness_dim { 0.035ex } }
              { \dim_set:Nn \l_@@_Moai_thickness_dim { 0.03ex } }
          }
        \bool_if:NTF \l_@@_if_opt_draft_bool
          {
            \@@_create_draftbox:nn 
              { ( 1.00102ex + \l_@@_Moai_thickness_dim ) * \l_@@_scale_abs_tl } 
              { ( 1.66404ex + \l_@@_Moai_thickness_dim ) * \l_@@_scale_abs_tl } 
          }{
            \begin{tikzpicture}
              [
                /@@ ,
                x=.13ex, y=.13ex, rounded ~ corners=0.01ex* \l_@@_scale_abs_tl , 
                scale=#1, 
                line ~ width= \dim_use:N \l_@@_Moai_thickness_dim * \l_@@_scale_abs_tl 
              ]
              \draw (-2.6,-4.25) --  (-2.5,-5.8) 
                ..controls (-2,-6.8) and (1.5,-6.8) ..  (2.2,-5.8) -- (2.4,-3.95);
              \draw (-2.5,2.5) .. controls (-2.9,4.6) and (2,5) .. (3.3,2.5) -- (2.9,-3.4)
                .. controls (2,-5) and (-4,-5) .. (-3.1,-3) -- cycle;
              \draw (-2.5,3) -- (-2,5) .. controls (0,6) and (2,5.8) .. (3.1,4.7) -- (3.3,2.5);
              \draw[line ~ width=0.02ex* \l_@@_scale_abs_tl ] 
                 (-2.2,-1.8) .. controls (-1,-1.3) and (0,-1.7) .. (1,-2);
              \draw[line ~ width=0.02ex* \l_@@_scale_abs_tl ] 
                 (-2.2,-1.8) .. controls (-1,-1) and (0,-1.4) .. (1,-2);
              \draw[line ~ width=0.02ex* \l_@@_scale_abs_tl ] 
                 (-2.2,-1.8) .. controls (-1,-2) and (0,-2) .. (1,-2);
              \draw (-0.8,4) .. controls (-0.8,3) and (-0.8,2) ..  (-1.6,0.5) -- (-1.8,-0.4)
                 .. controls (-1,0.2) and (0,0.2) ..  (0.6,-0.4) -- (0.7,0.4)
                 .. controls (0,1) and (0,2) .. (0.8,4);
              \draw (-1.8,-0.36) .. controls (-0.5,-0.5) and (0,-0.5) .. (0.6,-0.36);
              \draw (3.2,3.5) -- (3.7,3.5) .. controls (3.5,2) 
                and (3.5,2) .. (3.6,-1.5) -- (3,-1.9);
              \draw (-2.5,3) .. controls (-2.7,2) and (-3,1) .. (-2.88,-1);
              \draw (-2.5,2.8) .. controls (-2,2.5) and (-1,3) .. (-0.8,3.1);
              \draw (0.5,3.3) .. controls (1,3) and (1,2.5) .. (3.3,2.4);
            \end{tikzpicture}%
          }
      }
  }
%    \end{macrocode}
%\end{macro}
%
%
%
%
%
%
% \begin{macro}{ \Snowman }
% 
%    \begin{macrocode}
\@@_Declare_Document_Command:nnn { Snowman } { S }
  {
    \@@_provide_savebox_and_use:nn { Snowman_#1 }
      {
        % \@@_set_scale_abs_tl:n {#1}
        \bool_if:NTF \l_@@_if_opt_draft_bool
          {
            \@@_create_draftbox:nn 
              { 1.545ex * \l_@@_scale_abs_tl } 
              { 1.77157ex * \l_@@_scale_abs_tl } 
          }{
            \begin{tikzpicture}
              [
                /@@ ,
                x=0.9ex,y=0.9ex,line ~ width=0.07ex* \l_@@_scale_abs_tl , scale=#1 
              ]
              \draw (0,0) circle [x ~ radius = 0.4 , y~radius=0.35];
              \draw[line ~ width=0.06ex* \l_@@_scale_abs_tl ] (0,0.64) circle [x ~ radius = 0.3 , y~radius=0.28];
              \draw[line ~ width=0.05ex* \l_@@_scale_abs_tl ] (0,1.14) circle [x ~ radius = 0.2 , y~radius=0.2];
              \draw
                [
                  rounded ~ corners=0.1ex* \l_@@_scale_abs_tl ,
                  line ~ width=0.05ex* \l_@@_scale_abs_tl ,
                  rotate ~ around={-30 \token_to_str:N : (0,1.14)} , 
               ] 
               (-0.2,1.15) -- ++(0,0.35) -- +(0.4,0) -- (0.2,1.14);
              \draw
                [
                  rounded ~ corners=0.07ex * \l_@@_scale_abs_tl ,
                  line ~ width=0.05ex * \l_@@_scale_abs_tl ,
                  rotate ~ around={-30 \token_to_str:N : (0,1.14)} ,
                ]
                (-0.2,1.19) arc  [start ~ angle=270, end ~ angle=90, radius=0.1];
              \foreach \y in { 0.78 , 0.63 , 0.48 }
                \fill (0,\y) circle [radius=0.04];
              \foreach \y in { 0.2 , 0 , -0.2 }
                \fill (0,\y) circle [radius=0.05];
              \fill (-0.06,1.18) circle [radius=0.045];
              \fill (0.06,1.18) circle [radius=0.045];
              \foreach \x/\y in { 0.1/1.08 , 0.06/1.055 , 0.02/1.039}
                \fill (\x,\y) circle [radius=0.015]  (-\x,\y) circle [radius=0.015] ;
              \draw (-0.3,0.7) -- (-0.6,0.8); 
              \draw (0.3,0.7) -- (0.6,0.8); 
              \draw[line ~ width=0.06ex* \l_@@_scale_abs_tl ] (-0.65,0) -- (-0.65,1);
              \foreach\x in {-0.85, -0.75,-0.65,-0.55,-0.45}
              \draw[line ~ width=0.05ex* \l_@@_scale_abs_tl ] (-0.65,1) -- (\x,1.3);
              \foreach \y/\x/\z in { 0.7/0.75 , 0.9/0.8 , 1/0.6/0.55 }
                \draw (0.6,0.8) -- (\x,\y)  (-0.6,0.8) -- (-\z,\y) ;
            \end{tikzpicture}%
          }
      }
  }
%    \end{macrocode}
%\end{macro}
%
%
%
% \subsection{Trees}
% Many great ideas are stolen.  Don't know who said that, but it's
% true.
%
%
%
%\begin{macro}{ \@@_Basic_Tree:nnnnn }
% Let's define the \Makro{@@_Basic_Tree:nnnnn} command.
% Like every symbol it also is saved inside a box. 
% If the fifth argument is neither empty nor \enquote{leaf}
% it \dots\ does (?) an error message.
%    \begin{macrocode}
\cs_new:Npn \@@_Basic_Tree:nnnnn #1#2#3#4#5
  {
    \@@_provide_savebox_and_use:nn 
      { BasicTree_#1_#2_#3_#4_#5 }
      {
        \tl_set:Nn \l_tmpa_tl {#5}
        \bool_lazy_or:nnTF
          { \tl_if_eq_p:NN \l_tmpa_tl \c_@@_leaf_tl }
          { \tl_if_empty_p:n {#5} }
          { \@@_Basic_Tree_aux:nnnnn {#1} {#2} {#3} {#4} {#5} }
          { \msg_error:nnn { tikzsymbols } { tree } {#5} }
      }
  }
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{ \BasicTree }
% Well, thats the final \Makro{BasicTree} command.
% More or less copy \& pasted from the \Package{tikz} manual.
%    \begin{macrocode}
\@@_Declare_Document_Command:nnn { BasicTree } { S m m m m }
  {
    \@@_Basic_Tree:nnnnn {#1} {#2} {#3} {#4} {#5}
  }
%    \end{macrocode}
%\end{macro}
%
%
%
%
%
%
%\begin{macro}{ \WorstTree }
%    \begin{macrocode}
\@@_Declare_Document_Command:nnn { WorstTree } { S  }
  {
    \@@_provide_savebox_and_use:nn { WorstTree_#1 }
      {
        % \@@_set_scale_abs_tl:n {#1}
        \bool_if:NTF \l_@@_if_opt_draft_bool
          {
            \@@_create_draftbox:nn 
              { 1.64ex * \l_@@_scale_abs_tl } 
              { 1.84ex * \l_@@_scale_abs_tl } 
          }{
            \begin{tikzpicture}
              [
                /@@ ,
                x=1ex,y=1ex, line ~ width=0.04ex* \l_@@_scale_abs_tl ,scale=#1
              ]
              \fill[brown] (-0.3,0) .. controls (0.2,0.3) and (0.2,0.7) .. (0.2,1) -- (0.5,1) .. 
                 controls (0.5,0.7) and (0.5,0.3) .. (1,0);
              \draw (-0.3,0) .. controls (0.2,0.3) and (0.2,0.7) .. (0.2,1) -- (0.5,1) .. 
                  controls (0.5,0.7) and (0.5,0.3) .. (1,0) ;
              \fill[green] (0.2,0.8) --  (0,0.8) .. controls (-0.4,0.7) and (-0.4,1) ..  (-0.3,1.2) ..
                  controls (-0.3, 1.6) and (-0.1,1.6) .. (0.1,1.5) .. 
                  controls (0.3,1.8) and (0.6,1.6) ..  (0.7,1.5) .. 
                  controls (1.1, 1.6) and (1,1.4) ..  (1,1.2) .. 
                  controls (1.2,1) and (1.2,0.7) .. (0.8,0.8) -- (0.5,0.8);
              \draw (0.214,0.8) --  (0,0.8) .. controls (-0.4,0.7) and (-0.4,1) ..  (-0.3,1.2) .. 
                 controls (-0.3, 1.6) and (-0.1,1.6) .. (0.1,1.5) .. 
                 controls (0.3,1.8) and (0.6,1.6) ..  (0.7,1.5) .. controls (1.1, 1.6) and (1,1.4) ..
                 (1,1.2) .. controls (1.2,1) and (1.2,0.7) .. (0.8,0.8) -- (0.486,0.8);
              \fill[red] (0,1) circle [radius=0.1];
              \fill[red] (0.4,1.2) circle [radius=0.1];
              \fill[red] (0.8,1.1) circle [radius=0.1];
            \end{tikzpicture}%
          }
      }
  }
%    \end{macrocode}
%\end{macro}
%
%
%
%
%
% 
%
%\begin{macro}{ \Springtree }
%    \begin{macrocode}
\@@_Declare_Document_Command:nnn { Springtree } { S }
  {
      \@@_Basic_Tree:nnnnn
      {#1}
      { brown!70!black }
      { green!90!black } 
      { green!80!black }
      { leaf }
  }
%    \end{macrocode}
%\end{macro}
%
%
%
%
%
%
%\begin{macro}{ \Summertree }
%    \begin{macrocode}
\@@_Declare_Document_Command:nnn { Summertree } { S }
  {
      \@@_Basic_Tree:nnnnn
      {#1}
      { brown!50!black }
      { green!80!black } 
      { red!80!green }
      { leaf }
  }
%    \end{macrocode}
%\end{macro}
%
%
%
%
%
%
%\begin{macro}{ \Autumntree }
%    \begin{macrocode}
\@@_Declare_Document_Command:nnn { Autumntree } { S }
  {
      \@@_Basic_Tree:nnnnn
      {#1}
      { red!30!black }
      { red!75!black } 
      { orange }
      { leaf }
  }
%    \end{macrocode}
%\end{macro}
%
%
%
%
%
%
%\begin{macro}{ \Wintertree }
%    \begin{macrocode}
\@@_Declare_Document_Command:nnn { Wintertree } { S }
  {
      \@@_Basic_Tree:nnnnn
      {#1}
      { black!80!white }
      { black!50 } 
      { black!25 }
      { }
  }
%    \end{macrocode}
%\end{macro}
%
%
%
% Checks if the Package \Package{marvosym} is loaded
% if the \Option{marvosym} is set true.
%    \begin{macrocode}
\AtBeginDocument
  {
    \bool_if:NT \g_@@_if_opt_marvosym_bool
      {
        \@ifpackageloaded { marvosym } { } 
          {
            \msg_error:nn { tikzsymbols } { marvosym }
          }
      }
  }
%    \end{macrocode}
%
%
% \begin{macro}{ \tikzsymbolsuse }
% If the english command name is used, the german one
% is inserted, don't exactly know why.
%    \begin{macrocode}
\NewDocumentCommand \tikzsymbolsuse { m }
  {
    \prop_get:NnNTF \g_@@_english_commands_prop {#1} \l_tmpa_tl
      {
        \use:c { \g_@@_command_prefix_tl \l_tmpa_tl }
      }{
        \cs_if_exist:cTF { \g_@@_command_prefix_tl #1 }
          { \use:c { \g_@@_command_prefix_tl #1 } }
          { \msg_error:nnn { tikzsymbols } { undefined-command } {#1} }
      }
  }
%    \end{macrocode}
%\end{macro}
%
%
%
%
%\begin{macro}{ \tikzsymbolsset }
%    \begin{macrocode}
\NewDocumentCommand \tikzsymbolsset { m }
  {
    \keys_set_filter:nnnN { tikzsymbols } { only-package } {#1} \l_tmpa_tl
    \tl_if_empty:NF \l_tmpa_tl
      {
        \keyval_parse:NNV 
          \@@_tikzsymbolsset_msg_i:n 
          \@@_tikzsymbolsset_msg_ii:nn 
          \l_tmpa_tl
      }
  }
\cs_generate_variant:Nn \keyval_parse:NNn { NNV }
\cs_new:Npn \@@_tikzsymbolsset_msg_i:n #1
  {
    \@@_tikzsymbolsset_msg_ii:nn {#1} { }
  }
\cs_new:Npn \@@_tikzsymbolsset_msg_ii:nn #1#2
  {
    \msg_error:nnn { tikzsymbols } { package-option } {#1}
  }
\exp_args:NV \tikzsymbolsset \l_@@_save_global_scale_for_later_because_no_better_idea_tl
%    \end{macrocode}
%\end{macro}
%
%
%^^A\iffalse
%<*ignore>
\tkzsymbls@Declare@Robust@Command{@@@@@@@@Keep@Cool@@@@I}{%
\begin{tikzpicture}[ /@@ ,x=1em, y=1em, line ~ width=0.03em]
\fill[decorate,decoration={snake,amplitude=.02em,segment ~ length=0.4em},cyan!20!] 
(0,0) -- (0,1) -- (1,1) -- (1,0) -- cycle;
\draw (0.3,0.3) -- (0.55,0.7);% Körper
\draw (0.05,0.4) -- (0.3,0.3) -- (0.1,0.1);
\draw (0.3,0.8) -- (0.5,0.61);
\draw (0.49,0.61) -- (0.8,0.65);
\draw (0.65,0.9) circle [radius=0.17];
\end{tikzpicture}%
\tikzsymbolsaftersymbolinput%
}
\tkzsymbls@Declare@Robust@Command{@@@@@@@@@@@Keep@Cool@@@@@II}{%
\begin{tikzpicture}[ /@@ ,x=1em,y=1em]
\fill[decorate,decoration={snake,amplitude=.02em,segment ~ length=0.6em},cyan!20!]  (-0.3,-0.3) rectangle (0.5,1);
\draw (0,-0.1) -- (0.15,0.2) -- (0.3,-0.1);% Beine
\draw (.15,.2) -- (.15,.4);% Körper
\draw (.15,.4) -- (.4,.5);% Rechter Arm
\draw (.15,.4) -- (-0.1,.5);% Linker Arm
\draw (.15, .4) -- (.15, .53);% Hals
\draw (.15,.8) circle [radius=0.18];% Kopf
\end{tikzpicture}%
\tikzsymbolsaftersymbolinput%
}
%</ignore>
%^^A\fi
% 
%    \begin{macrocode}
%</package>      
%    \end{macrocode}
%
% \end{implementation}
%
%
%
% \endinput
%
%
%
% Local Variables:
% mode: doctex
% TeX-master: t
% End:
