texlive[68310] Master/texmf-dist: tikzpingus (18sep23)
commits+karl at tug.org
commits+karl at tug.org
Mon Sep 18 22:05:29 CEST 2023
Revision: 68310
https://tug.org/svn/texlive?view=revision&revision=68310
Author: karl
Date: 2023-09-18 22:05:29 +0200 (Mon, 18 Sep 2023)
Log Message:
-----------
tikzpingus (18sep23)
Modified Paths:
--------------
trunk/Master/texmf-dist/doc/latex/tikzpingus/README.md
trunk/Master/texmf-dist/doc/latex/tikzpingus/tikzpingus-doc.pdf
trunk/Master/texmf-dist/doc/latex/tikzpingus/tikzpingus-doc.tex
trunk/Master/texmf-dist/tex/latex/tikzpingus/tikzpingus-christmas.lib.tex
trunk/Master/texmf-dist/tex/latex/tikzpingus/tikzpingus-devil.lib.tex
trunk/Master/texmf-dist/tex/latex/tikzpingus/tikzpingus-emotions.lib.tex
trunk/Master/texmf-dist/tex/latex/tikzpingus/tikzpingus-formal.lib.tex
trunk/Master/texmf-dist/tex/latex/tikzpingus/tikzpingus-fun.lib.tex
trunk/Master/texmf-dist/tex/latex/tikzpingus/tikzpingus-hats.lib.tex
trunk/Master/texmf-dist/tex/latex/tikzpingus/tikzpingus-horse.lib.tex
trunk/Master/texmf-dist/tex/latex/tikzpingus/tikzpingus-science-fiction.lib.tex
trunk/Master/texmf-dist/tex/latex/tikzpingus/tikzpingus.sty
Added Paths:
-----------
trunk/Master/texmf-dist/tex/latex/tikzpingus/tikzpingus-bee.lib.tex
Modified: trunk/Master/texmf-dist/doc/latex/tikzpingus/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tikzpingus/README.md 2023-09-18 01:27:40 UTC (rev 68309)
+++ trunk/Master/texmf-dist/doc/latex/tikzpingus/README.md 2023-09-18 20:05:29 UTC (rev 68310)
@@ -1,8 +1,8 @@
# Ti*k*Zpingus
-[![made-with-latex](https://img.shields.io/badge/Made%20with-LaTeX-1f425f.svg)](https://www.latex-project.org/) [![GPLv3 License](https://img.shields.io/badge/License-GPL%20v3-yellow.svg)](https://opensource.org/licenses/GPL-3.0) [![PR's Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat)](http://makeapullrequest.com) [![build](https://github.com/EagleoutIce/tikzpingus/actions/workflows/compile.yaml/badge.svg)](https://github.com/EagleoutIce/tikzpingus/actions/workflows/compile.yaml)
+[![made-with-latex](https://img.shields.io/badge/Made%20with-LaTeX-1f425f.svg)](https://www.latex-project.org/) [![GPLv3 License](https://img.shields.io/badge/License-GPL%20v3-yellow.svg)](https://opensource.org/licenses/GPL-3.0) [![PR's Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat)](http://makeapullrequest.com) [![CTAN](https://badgen.net/badge/On/CTAN/cyan)](https://www.ctan.org/pkg/tikzpingus) [![build](https://github.com/EagleoutIce/tikzpingus/actions/workflows/compile.yaml/badge.svg)](https://github.com/EagleoutIce/tikzpingus/actions/workflows/compile.yaml)
-This package is a work-in-progress package allowing you to typeset little penguins in LaTeX with PGF/Ti*k*z.
+This package is a work-in-progress package allowing you to typeset little penguins in LaTeX with PGF/Ti*k*Z.
The [documentation](https://media.githubusercontent.com/media/EagleoutIce/tikzpingus/gh-pages/doc/build/tikzpingus-doc.pdf) will constantly evolve.
----
@@ -10,75 +10,36 @@
Ti*k*Zpingus is actively developed by *Florian Sihler* (contact me at: <florian.sihler at uni-ulm.de>) under the [GPLv3 License](LICENSE). I am very happy about every contribution (see [CONTRIBUTING.md](CONTRIBUTING.md)).
----
-<br />
-<div style="text-align:center">
+[![Penguin Hey](https://github.com/EagleoutIce/tikzpingus/blob/gh-pages/hey-pingu-1.png?raw=true)](https://media.githubusercontent.com/media/EagleoutIce/tikzpingus/gh-pages/examples/build/hey-pingu.pdf#page=1)
-<!-- While GitHub will cleanse the border-radius, I keep it for the future. -->
-[<img style="border-radius:8pt" src="https://github.com/EagleoutIce/tikzpingus/blob/gh-pages/hey-pingu-1.png?raw=true" width="600" />](https://media.githubusercontent.com/media/EagleoutIce/tikzpingus/gh-pages/examples/build/hey-pingu.pdf#page=1)
-</div>
-
The purpose of this library is to produce one thing: cute penguins. Using the `\pingu`-macro, you can pass an arbitrary amount of options to endow the penguin with many extras or change its complete appearance. Furthermore, most options allow additional arguments, defining the color, text, ...
-<br />
+[![Penguin Hat](https://github.com/EagleoutIce/tikzpingus/blob/gh-pages/hey-pingu-2.png?raw=true)](https://media.githubusercontent.com/media/EagleoutIce/tikzpingus/gh-pages/examples/build/hey-pingu.pdf#page=2)
-<div style="text-align:center">
-
-[<img style="border-radius:8pt" src="https://github.com/EagleoutIce/tikzpingus/blob/gh-pages/hey-pingu-2.png?raw=true" width="600" />](https://media.githubusercontent.com/media/EagleoutIce/tikzpingus/gh-pages/examples/build/hey-pingu.pdf#page=2)
-</div>
-
While the [documentation](https://media.githubusercontent.com/media/EagleoutIce/tikzpingus/gh-pages/doc/build/tikzpingus-doc.pdf) contains a reference of all options that are available (or at least, that is the plan), most extras should be named relatively intuitive. For example, if you want a small penguin, you add the option `small`.
If the penguin should be large, you write `large`. If you want the penguin to hold a cup, you write `cup`. If the cup should have a specific color, like blue, you add this via `cup=blue`, ...
-<br />
-<div style="text-align:center">
+[![Penguin Santa](https://github.com/EagleoutIce/tikzpingus/blob/gh-pages/hey-pingu-3.png?raw=true)](https://media.githubusercontent.com/media/EagleoutIce/tikzpingus/gh-pages/examples/build/hey-pingu.pdf#page=3)
-[<img style="border-radius:8pt" src="https://github.com/EagleoutIce/tikzpingus/blob/gh-pages/hey-pingu-3.png?raw=true" width="600" />](https://media.githubusercontent.com/media/EagleoutIce/tikzpingus/gh-pages/examples/build/hey-pingu.pdf#page=3)
-</div>
+Currently, most options I have added arose from concrete situations and are not part of "sets". However, some sets do exist, like the `santa` or `devil` collection. If there are more sets in the future, I might add them as first-class components. For now, the [documentation](https://media.githubusercontent.com/media/EagleoutIce/tikzpingus/gh-pages/doc/build/tikzpingus-doc.pdf#appendix.A) contains an [overview](https://media.githubusercontent.com/media/EagleoutIce/tikzpingus/gh-pages/doc/build/tikzpingus-doc.pdf#appendix.A) of the larger gadgets.
-Currently, most options I have added arose from concrete situations and are not part of "sets". However, some sets do exist, like the `santa` or `devil` collection. If there are more sets in the future, I might add them as first-class components. For now, the [documentation](https://media.githubusercontent.com/media/EagleoutIce/tikzpingus/gh-pages/doc/build/tikzpingus-doc.pdf#appendix.A) contains an [Overview](https://media.githubusercontent.com/media/EagleoutIce/tikzpingus/gh-pages/doc/build/tikzpingus-doc.pdf#appendix.A) of the larger gadgets.
-<br />
+[![Penguin Tech](https://github.com/EagleoutIce/tikzpingus/blob/gh-pages/hey-pingu-4.png?raw=true)](https://media.githubusercontent.com/media/EagleoutIce/tikzpingus/gh-pages/examples/build/hey-pingu.pdf#page=4)
-<div style="text-align:center">
-
-[<img style="border-radius:8pt" src="https://github.com/EagleoutIce/tikzpingus/blob/gh-pages/hey-pingu-4.png?raw=true" width="600" />](https://media.githubusercontent.com/media/EagleoutIce/tikzpingus/gh-pages/examples/build/hey-pingu.pdf#page=4)
-</div>
-
If you just load the library by `\usepackage{tikzpingus}` all options will work, and you might want to use the `glows`-option (`\usepackage[glows]{tikzpingus}`) so that lightsabers and other glowing elements look waaay nicer (but may produce artifacts in some pdf-viewers). However, if loading the library takes too long for you, using the `bare` option will drastically reduce the default options available while allowing you to load specific libraries with `\pinguloadlibraries{<list of libraries>}`.
-<br />
-<div style="text-align:center">
+[![Penguin Cake](https://github.com/EagleoutIce/tikzpingus/blob/gh-pages/hey-pingu-5.png?raw=true)](https://media.githubusercontent.com/media/EagleoutIce/tikzpingus/gh-pages/examples/build/hey-pingu.pdf#page=5)
-[<img style="border-radius:8pt" src="https://github.com/EagleoutIce/tikzpingus/blob/gh-pages/hey-pingu-5.png?raw=true" width="600" />](https://media.githubusercontent.com/media/EagleoutIce/tikzpingus/gh-pages/examples/build/hey-pingu.pdf#page=5)
-</div>
-
-Not all gadgets and wing positions work together. While I try to get as many of them working as possible, selecting two different styles of glasses or hats probably looks weird no matter what code I add.
+Not all gadgets and wing positions work together. While I try to get as many of them working as possible, selecting two different styles of glasses or hats probably looks weird, no matter what code I add.
Nonetheless, there is code implemented to deal with a lot of interactions (e.g., items in different wings, multiple items on the hat, ...), and there are several options to cope with them yourself if the need arises.
Oh, and by the way, when options are named with `left` and `right` they are always from the penguin-perspective.
-<br />
-<div style="text-align:center">
+[![Penguin Crown](https://github.com/EagleoutIce/tikzpingus/blob/gh-pages/hey-pingu-6.png?raw=true)](https://media.githubusercontent.com/media/EagleoutIce/tikzpingus/gh-pages/examples/build/hey-pingu.pdf#page=6)
-[<img style="border-radius:8pt" src="https://github.com/EagleoutIce/tikzpingus/blob/gh-pages/hey-pingu-6.png?raw=true" width="600" />](https://media.githubusercontent.com/media/EagleoutIce/tikzpingus/gh-pages/examples/build/hey-pingu.pdf#page=6)
-</div>
-
Clothes are a work in progress for a long time now. While there are pants, shirts, a cape, and a cloak, they interfere with body types and other interaction codes. They work quite well for "not-too-fancy" and exotic combinations, but for more complex scenarios, I just had no time (for now). So feel free to wrap your head around that and open a PR! I would be happy to assist you!
+## More Fun
-## Testing Files
+For the title image of a computer-science course on software-product-lines, I created a small and incomplete but really fun feature model:
-These are some test files that showcase additional capabilities of the library:\
-[<img src="https://github.com/EagleoutIce/tikzpingus/blob/gh-pages/preview-1.png?raw=true" width="600"/>](https://media.githubusercontent.com/media/EagleoutIce/tikzpingus/gh-pages/examples/build/showcase.pdf)
-
-[<img src="https://github.com/EagleoutIce/tikzpingus/blob/gh-pages/minimal-1.png?raw=true" width="300"/>](https://media.githubusercontent.com/media/EagleoutIce/tikzpingus/gh-pages/examples/build/minimal.pdf)
-
-For the title image of a computer-science course on software-product-lines, I created a small and incomplete but really fun feature model:\
-[<img src="https://github.com/EagleoutIce/tikzpingus/blob/gh-pages/spl-1.png?raw=true" width="900"/>](https://media.githubusercontent.com/media/EagleoutIce/tikzpingus/gh-pages/examples/build/spl.pdf)
-
-## Contributors
-
-<a href="https://github.com/eagleoutice/tikzpingus/graphs/contributors">
- <img src="https://contrib.rocks/image?repo=eagleoutice/tikzpingus" />
-</a>
-
-Made with [contrib.rocks](https://contrib.rocks).
\ No newline at end of file
+[![Penguin-SPL](https://github.com/EagleoutIce/tikzpingus/blob/gh-pages/spl-1.png?raw=true)](https://media.githubusercontent.com/media/EagleoutIce/tikzpingus/gh-pages/examples/build/spl.pdf)
Modified: trunk/Master/texmf-dist/doc/latex/tikzpingus/tikzpingus-doc.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex/tikzpingus/tikzpingus-doc.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tikzpingus/tikzpingus-doc.tex 2023-09-18 01:27:40 UTC (rev 68309)
+++ trunk/Master/texmf-dist/doc/latex/tikzpingus/tikzpingus-doc.tex 2023-09-18 20:05:29 UTC (rev 68310)
@@ -8,18 +8,21 @@
\usepackage[utf8]{inputenc}
\usepackage{babel}
-\makeatletter\def\input at path{{../tex/}}\makeatother
+\usepackage{marginnote}
+
+\makeatletter
+\def\input at path{{../tex/}}
\usepackage[glows]{tikzpingus}
% \definecolor{doc-main}{RGB}{204,0,25}
-\colorlet{@opcolor}{pingu at blue!75!black}
-\colorlet{doc-main}{@opcolor!80!pingu at black}
+\colorlet{doc-main}{pingu at blue!65!pingu at black}
+\colorlet{@opcolor}{doc-main!70!pingu at black}
\usepackage[linkcolor=@opcolor,urlcolor=@opcolor,colorlinks,breaklinks,pdfusetitle]{hyperref}
\usetikzlibrary{shapes.misc,arrows.meta}
\urlstyle{same}
\expandafter\def\expandafter\UrlBreaks\expandafter{\UrlBreaks\do-}
-\usepackage[tex,hyper]{listings}
+\usepackage[hyper]{listings}
\usepackage[skins,breakable,hooks,xparse,listingsutf8,external]{tcolorbox}
\usepackage{lmodern}
\usepackage{CrimsonPro}
@@ -32,7 +35,6 @@
\usepackage{microtype}
\usepackage{tikzducks}
\usepackage{datatool}
-\usepackage{relsize}
\usepackage{multicol}
\usepackage{footnotebackref}
\usepackage{adjustbox}
@@ -39,11 +41,15 @@
\usepackage{xstring}
\usepackage{colorinfo}
-\makeindex[title={Key Overview},columns=2,columnsep=.75cm,noautomatic=true,options=-s indexstyle.ist]
+\makeindex[title={Key Overview},name=\jobname,columns=2,columnsep=.75cm,noautomatic=true,intoc]
+\def\indexinternalsoverviewname{Internals Overview}
+\makeindex[title={\indexinternalsoverviewname},name=\jobname-internals,columns=2,columnsep=.75cm,noautomatic=true,intoc]
+\def\current at indexfile{\jobname}
+
\deffootnote{1.5em}{1em}{\textsuperscript{\hyperref[\BackrefFootnoteTag]{\thefootnotemark}}\thinspace}
\def\thefootnote{$\langle$\arabic{footnote}$\rangle$}
% https://tex.stackexchange.com/questions/78423/how-to-use-the-footnotebackref-package-with-footnotemark-and-footnotetext
-\makeatletter
+
\LetLtxMacro\BHFN at Old@footnotemark\@footnotemark
\def\@footnotemark{%
\refstepcounter{BackrefHyperFootnoteCounter}%
@@ -62,25 +68,30 @@
\let\say\enquote
\def\DTLlistformatoxford{,}\def\DTLandname{and}
% TODO: do guard against same keys for different selectors
-\long\def\ParseDTLListElement#1"#2"\@nil{\textsuperscript{\smash{\raisebox{2pt}{\ifcsname pingu@@lib@#2@\CurrentList @\endcsname\index{Libraries!\textit{\csname pingu@@lib@#2@\CurrentList @\endcsname}!#2?\hyperref[expl-list:\CurrentList]{\protect\lpingu{#2} {\tiny\sffamily(\MapDTLList{\CurrentList})}}}~$\underset{\text{\tiny\smash{\raisebox{3pt}{\textsf{\hyperref[Libraries]{\color{gray}Library}}}}}}{\text{\textit{\tiny\strut\csname pingu@@lib@#2@\CurrentList @\endcsname}}}$\fi}}}}
+\long\def\ParseDTLListElement#1"#2"\@nil{\textsuperscript{\smash{\raisebox{2pt}{\ifcsname pingu@@lib@#2@\CurrentList @\endcsname\index[\current at indexfile]{Libraries!\textit{\csname pingu@@lib@#2@\CurrentList @\endcsname}!#2?\hyperref[expl-list:\CurrentList]{\protect\lpingu{#2} {\tiny\sffamily(\MapDTLList{\CurrentList})}}}~$\underset{\text{\tiny\smash{\raisebox{3pt}{\textsf{\hyperref[Libraries]{\@declaredcolor{gray}Library}}}}}}{\text{\textit{\tiny\strut\csname pingu@@lib@#2@\CurrentList @\endcsname}}}$\fi}}}}
\def\DTLlistformatitem#1{\textit{#1\expandafter\ParseDTLListElement :#1\@nil}}
\newcommand*\typesetselection[1][]{\begingroup\ifx!#1!\else\def\DTLlistformatitem##1{#1}\fi\dotypesetselection}
\def\dotypesetselection#1{\label{expl-list:#1}\def\CurrentList{#1}\expandafter\DTLformatlist\expandafter{\csname @pingu@#1@\endcsname}\endgroup}
-\makeatletter
-\addtokomafont{sectioning}{\@declaredcolor{gray}}
-\addtokomafont{title}{\@declaredcolor{doc-main}}
+% this can be used to remove some prefixes of the keys if necessary
+\let\@gobblekey\@gobble
+
+\addtokomafont{sectioning}{\@declaredcolor{black}}
+\addtokomafont{title}{\@declaredcolor{@opcolor}}
\addtokomafont{author}{\normalsize}
\addtokomafont{date}{\normalsize}
-\def\optstyle{\@declaredcolor{@opcolor}\slshape}
\colorlet{@softgray}{gray!60!white}
\colorlet{@softgray at b}{gray!75!white}
\colorlet{@darkerblue}{pingu at blue!40!black}
-\def\lstfnsize{-.7}
+
+\def\optstyle{\@declaredcolor{@opcolor}\slshape}
+\def\cmdstyle{\@declaredcolor{@darkerblue}}
+\def\nostyle{\@declaredcolor{black}}
+\let\lstfnsize\small
\lstdefinestyle{lstpingu}{%
tabsize=2, breaklines,
- basicstyle=\relsize{\lstfnsize}\ttfamily,
+ basicstyle=\lstfnsize\ttfamily,
commentstyle={\@declaredcolor{gray}\slshape},
columns=fullflexible,
emphstyle=\slshape,
@@ -87,9 +98,6 @@
emphstyle=[2]\optstyle,
emphstyle=[3]\@declaredcolor{@softgray at b},
emphstyle=[4]\@declaredcolor{@darkerblue},
- texcsstyle=*\@declaredcolor{gray}\bfseries,
- texcsstyle=*[2]\@declaredcolor{doc-main}\bfseries,
- texcsstyle=*[3]\@declaredcolor{@softgray},
lineskip=2.5pt,
keepspaces=true,
moredelim=[s][\itshape]{<}{>},
@@ -98,13 +106,26 @@
\def\ipingu#1{\lstinline'#1'}
\def\lpingu#1{\lstinline[style=lstpingu,language=pingulang]'#1'}
\def\ltex#1{\lstinline[style=lstpingu,language=pinguinternallang]'#1'}
+\def\doccmd#1{{\@declaredcolor{doc-main}\bfseries\textbackslash #1}}
+\def\graycmd#1{{\@declaredcolor{gray}\bfseries\textbackslash #1}}
+\def\ghostcmd#1{{\@declaredcolor{@softgray}\textbackslash #1}}
\lstdefinelanguage{pinguinternallang}{
language={[LaTeX]TeX},
moreemph={tikzpicture},
alsoletter={@},
- moretexcs=[2]{pingu at block,pingu at draw},
- moretexcs={pingu at eye@shift,pingu at color@eye at left,pingu at color@eye at right,pingu at name, at pingu@eyes at s, at pingu@none}
+ add to literate=
+ {\\pingu at block}{{\doccmd{pingu at block}}}{12}
+ {\\pingu at draw}{{\doccmd{pingu at draw}}}{11}
+ {\\@pingu at none}{{\graycmd{@pingu at none}}}{11}
+ {\\path}{{\graycmd{path}}}5
+ {\\coordinate}{{\graycmd{coordinate}}}5
+ {\\definecolor}{{\doccmd{definecolor}}}{12}
+ {\\pgfqkeys}{{\graycmd{pgfqkeys}}}9
+ {\\@ifnextchar}{{\graycmd{@ifnextchar}}}9
+ {\\csname}{{\graycmd{csname}}}6
+ {\\endcsname}{{\graycmd{endcsname}}}9
+ {/pingu/}{{\@declaredcolor{@softgray}/pingu/}}7
}
\def\t at lst@addToLiterate#1{\protected at edef\lst at literate{\unexpanded\expandafter{\lst at literate}\unexpanded{#1}}}
@@ -116,23 +137,39 @@
moreemph={tikzpicture},
alsoletter={.-!:0123456789},%disable number
deletetexcs={begin,end}, % -> lift 3
- moretexcs=[2]{pingu,duck,node,pingudefaults,pingudefaultsappend,pinguloadlibrary,pinguloadlibraries},
- moretexcs=[3]{begin,end,pgfmathsetseed},
- moreemph=[3]{!hide,.style},
+ moreemph=[3]{!hide,.style,xshift,yshift},
add to literate={/pingu/}{{\@declaredcolor{gray}/pingu/}}7
{\{tikzpicture\}}{{\@declaredcolor{@softgray}\{tikzpicture\}}}{13}
{\{\\number\\pdfrandomseed\}}{{\@declaredcolor{@softgray}\{\textbackslash number\textbackslash pdfrandomseed\}}}{23}
% otherwise these would interfere with random
{!random}{{\@declaredcolor{darkgray}\itshape!random}}7
+ {\\node}{{\doccmd{node}}}5
+ {\\duck}{{\doccmd{duck}}}5
+ {\\begin}{{\ghostcmd{begin}}}6
+ {\\end}{{\ghostcmd{end}}}4
+ {\\tikz}{{\ghostcmd{tikz}}}5
+ {\\pgfmathsetseed}{{\ghostcmd{pgfmathsetseed}}}{15}
}
-\def\@CreateCodeHyperLink#1#2#3{\lstset{add to literate={#2}{{\hyperref[#3]{\optstyle#2}}}{#1}}}
+\def\@CreateCodeHyperLink#1#2#3#4#5{\lstset{add to literate={#2}{{\hyperref[#3]{#5#4}}}{#1}}}
% #1 Keys | #2 length (optimized)
\def\CreateCodeHyperLink#1#2{% \StrLen{\@elem}[\@cclen]
\@for\@elem:=#1\do{\ifx\@elem\@empty\else
% space to space cmd % TODO: do this on store and just keep store?
\StrSubstitute{\@elem}{ }{\noexpand\ }[\@sub]\relax
- \edef\@tmp{\noexpand\@CreateCodeHyperLink{#2}{\@sub}{pk:/pingu/\@elem}}\@tmp\fi}%
+ \let\hyperstyle\optstyle
+ \IfBeginWith{\@sub}{_}{% update hypersyle
+ \let\hyperstyle\cmdstyle
+ \StrSubstitute{\@sub}{_}{\\}[\@sub]%
+ \StrSubstitute{\@sub}{\\}{\textbackslash}[\@subb]% deal with backslash
+ }{%
+ \IfBeginWith{\@sub}{+}{% update blockstyle
+ \let\hyperstyle\nostyle
+ \StrDel{\@sub}{+}[\@sub]%
+ }{}%
+ \let\@subb\@sub
+ }%
+ \edef\@tmp{\noexpand\@CreateCodeHyperLink{#2}{\@sub}{pk:/pingu/\@elem}{\@subb}{\expandonce{\hyperstyle}}}\@tmp\fi}%
}
% store all. we use their precalculated length to ensure prefixes we go from small to large on set
\def\cmdsstore#1#2{\csxdef{allcmds@#1}{#2}}
@@ -153,11 +190,11 @@
\def\RawShowcase#1#2{\scalebox{.68}{%\begin{tcbexternal}{showcase-#2#1}%
\tikzpicture[baseline={(pingu-bottom-center)}]
-\pingu[body=pingu at main!30!white,bill color=pingu at yellow!30!white,feet color=pingu at yellow!30!white,eyes color=pingu at black!30!white,name=pingu,#1#2]
+\pingu[:mix=30!white,name=pingu,#1#2]
\pgfonlayer{foreground}
\node[below=3mm] at(pingu-bottom-center) {\strut}; % buffer
\pgfinterruptboundingbox
-\node[below=3mm,fill=white,fill opacity=.52,text opacity=1,rounded corners=1pt] at(pingu-bottom-center) {\textsf{\strut\smash{#1}}};
+\node[below=3mm,fill=white,fill opacity=.52,text opacity=1,rounded corners=3pt] at(pingu-bottom-center) {\textsf{\strut\smash{#1}}};
\endpgfinterruptboundingbox
\endpgfonlayer
\endtikzpicture
@@ -181,6 +218,7 @@
\RedeclareSectionCommand[runin=false,afterskip=-2mm]{section}
\RedeclareSectionCommand[runin=false,afterskip=-2mm]{subsection}
+\RedeclareSectionCommand[runin=false,beforeskip=2mm,afterskip=-2mm]{subsubsection}
\tcbset{%
colframe=gray,enhanced,breakable, arc=2mm,
@@ -190,38 +228,62 @@
righthand width=4.75cm, bottom=0pt, top=0pt,boxsep=2.25pt,
before lower app={}, colback=white
}
-\lstMakeShortInline[style=lstpingu,language=pingulang,basicstyle=\relsize{-1}\ttfamily\@declaredcolor{black!90!white},moredelim={[s][\itshape]{<}{>}}]{|}
+\lstMakeShortInline[style=lstpingu,language=pingulang,basicstyle=\small\ttfamily\@declaredcolor{black!90!white},moredelim={[s][\itshape]{<}{>}}]{|}
-\def\explaincolor{@opcolor!8!white}
+\def\explaincolor{@opcolor!9!white}
\def\cursub{}
\def\keyexplainindent{2.5em}%
+\let\@explainsuff\@empty
+\let\@labelhack\@empty
+
+\def\@append at key{\protected at csxappto{allcmds@\@cclen}{\@key,}%
+% update the range
+\ifnum\@cclen>\allcmdsmax\relax \xdef\allcmdsmax{\@cclen}\fi
+\ifnum\@cclen<\allcmdsmin\relax \xdef\allcmdsmin{\@cclen}\fi}
+
% allow the oxes to have minor overlaps
-\newenvironment{keyexplain}[4][/pingu/]{\minipage{\linewidth}
- \parskip\smallskipamount
+\newcommand\DefineKey[2][/pingu/]{%
\StrSubstitute{#2}{ }{-}[\keyexternalname]%
+ % only use _ to keep the length intact when replace with the backslash
+ \StrSubstitute{\keyexternalname}{\\}{_}[\keyexternalname]%
+ {\def\\{_}\protected at xdef\@key{#2}}%
+ {\def\\{}\protected at xdef\@idxkey{#2}\@gobblekey{\@idxkey}}% backslash should not interfere with keys
\tcbset{@/.style={externalize listing=key-\keyexternalname}}% set for externalize
- \phantomsection\label{pk:#1#2}\index{\cursub#2?\hyperref[pk:#1#2]{\protect\lpingu{#2}}}%
+ \phantomsection\label{pk:#1\@labelhack\@key}\index[\current at indexfile]{\cursub\@idxkey?\hyperref[pk:#1\@key]{\protect\lpingu{#2}}}%
% get its length:
\StrLen{#2}[\@cclen]%
- \csgappto{allcmds@\@cclen}{#2,}%
- % update the range
- \ifnum\@cclen>\allcmdsmax\relax \xdef\allcmdsmax{\@cclen}\fi
- \ifnum\@cclen<\allcmdsmin\relax \xdef\allcmdsmin{\@cclen}\fi
- \expandafter\gdef\csname pinguopt#2\endcsname{#3}%
- \expandafter\gdef\csname pingudefa#2\endcsname{#4}%
+ \@append at key
+}
+% prevent something from get a highlight
+\newcommand\BlockString[2][/pingu/]{%
+ {\def\\{_}\protected at xdef\@key{+#2}}%
+ % no index
+ \phantomsection\label{pk:#1\@labelhack\@key}%
+ % get its length:
+ \StrLen{#2}[\@cclen]%
+ % now, remove prefix it with a char which marks block:
+ \edef\@cclen{\the\numexpr\@cclen-1\relax}
+ \@append at key
+}
+
+\newenvironment{keyexplain}[4][/pingu/]{\minipage{\linewidth}
+ \parskip\smallskipamount
+ \DefineKey[#1]{#2}%
+ \expandafter\gdef\csname pinguopt\@key\endcsname{#3}%
+ \expandafter\gdef\csname pingudefa\@key\endcsname{#4}%
\begingroup\pgfkeys{/pingu/.cd,defaults}\protected at edef\@tmp{#4}%
\protected at edef\@tmpb{#3}%
\hspace*{-\keyexplainindent}\tcbox[left=3pt,right=3pt,top=3pt,bottom=3pt,colframe=white,colback=\explaincolor,on line]{%
\parbox{\dimexpr\linewidth-2\fboxsep+\keyexplainindent}{\small
- \ifx\@tmpb\@empty\lpingu{#1#2}\else\lpingu{#1#2 =\ }\texttt{<\textit{\@tmpb}>}\fi\hfill
+ \ifx\@tmpb\@empty\lpingu{#1#2}\@explainsuff\else\lpingu{#1#2 =\ }\texttt{<\textit{\@tmpb}>}\fi\hfill
\ifx\@tmp\@empty\else{\@declaredcolor{gray}(}#4{\@declaredcolor{gray})}\fi
}
- }\ifcsname pingu@@lib@#2@\endcsname\index{Libraries!\textit{\csname pingu@@lib@#2@\endcsname}!#2?\hyperref[pk:#1#2]{\protect\lpingu{#2}}}\rlap{~\quad\raisebox{2.75pt}{$\underset{\text{\tiny\smash{\raisebox{3pt}{\textsf{\hyperref[Libraries]{\color{gray}Library}}}}}}{\text{\textit{\footnotesize\strut\csname pingu@@lib@#2@\endcsname}}}$}}\fi\par\endgroup
+ }\ifcsname pingu@@lib@\@key @\endcsname\index[\current at indexfile]{Libraries!\textit{\csname pingu@@lib@#2@\endcsname}!\@idxkey?\hyperref[pk:#1\@key]{\protect\lpingu{#2}}}\rlap{~\quad\raisebox{2.75pt}{$\underset{\text{\tiny\smash{\raisebox{3pt}{\textsf{\hyperref[Libraries]{\@declaredcolor{gray}Library}}}}}}{\text{\textit{\footnotesize\parbox{4em}{\null\hfill\strut\csname pingu@@lib@#2@\endcsname\hfill\null}}}}$}}\fi\kern-\linewidth\par\endgroup
}
{\endminipage\smallskip\par}
\def\singleshortcut#1#2"#3"#4{\def\cursub{#2?\hyperref[pk:#1#2]{\protect\lpingu{#2}}!}\keyexplain[#1]{#2 #3}{\csname pinguopt#4\endcsname}{\csname pingudefa#4\endcsname}%
- \textcolor{gray}{\footnotesize This is a shortcut for: \texttt{\keyref[#1]{#2}\relsize{-1}{\ =\ {\optstyle#3}}}. The \enquote{\texttt{\textit{\csname pinguopt#4\endcsname}}} argument is passed to \keyref[#1]{#4}.}
+ \textcolor{gray}{\small This is a shortcut for: \texttt{\keyref[#1]{#2}{\small\ =\ {\optstyle#3}}}. The \enquote{\texttt{\textit{\csname pinguopt#4\endcsname}}} argument is passed to \keyref[#1]{#4}.}
\endkeyexplain}
\newcommand*\shortcuts[4][/pingu/]{\begingroup
\protected at edef\@tmp{#3}%
@@ -232,15 +294,54 @@
\newcommand*\keyref[2][/pingu/]{\hyperref[pk:#1#2]{\lpingu{#1#2}}}
\newcommand*\dkeyref[2][/pingu/]{\hyperref[pk:#1#2]{\lpingu{#2}}}
+\newcommand*\cmdref[1]{\hyperref[pk:/pingu/:bs:#1]{\lpingu{\\#1}}}
+\newcommand*\cmddef[1]{\DefineKey{\\#1}\cmdref{#1}\nobreak}
+
+% master-cmd | cmd
+\newif\ifsubcmddefprint
+\newcommand*\subcmddef{\@ifstar{\subcmddefprintfalse\@subcmddef}{\subcmddefprinttrue\@subcmddef}}
+\def\@subcmddef#1#2{\begingroup
+ {\def\\{}\protected at xdef\@subidxkey{#1}\@gobblekey{\@subidxkey}}%% backslash should not interfere with keys
+ \def\cursub{\@subidxkey?\hyperref[pk:/pingu/_\@subidxkey]{\protect\lpingu{\\#1}}!}%
+ \ifsubcmddefprint\cmddef{#2}\else\DefineKey{\\#2}\fi%
+\endgroup}
+
+\newcommand*\cmdcoldef[1]{\cmddef{pingu at color@#1}}
+\newcommand*\cmd[1]{\texttt{\small\doccmd{#1}}}
+
\colorlet{@softexplaincolor}{gray!8!white}
+\def\pingu at nokeyindent{0pt}
+\def\pingu at softexplaincolor{@softexplaincolor}
\newenvironment{subkeyexplain}[5][/pingu/]{%
\begingroup
-\def\explaincolor{@softexplaincolor}\def\keyexplainindent{0em}%
+\let\explaincolor\pingu at softexplaincolor\let\keyexplainindent\pingu at nokeyindent%
\def\cursub{#2?\hyperref[pk:#1#2]{\protect\lpingu{#2}}!}%
\keyexplain[#1]{#3}{#4}{#5}%
{\@declaredcolor{gray}\footnotesize This command is only in effect if \keyref[#1]{#2} is active.}\par
}{\endkeyexplain\endgroup}
+\newenvironment{commandexplain}[3][]{%
+\begingroup
+\def\@labelhack{/pingu/}%
+\def\mand##1{\texttt{\{\textsf{\small##1}\}}}%
+\def\@pingu at command@keypartner{#1}%
+% #1 is the default
+\newcommand\opt[2][]{\texttt{\textit{[\textsf{\small##2\ifx!##1!\else\textcolor{gray}{\small\sffamily=##1}\fi}]}}}%
+\def\@explainsuff{#3}%
+\keyexplain[]{\\#2}{}{}%
+\ifx\@pingu at command@keypartner\@empty\else
+{\@declaredcolor{gray}\footnotesize Do \textbf{not} redefine this command, it is controlled by \keyref{#1}.}\par\fi
+}{\endkeyexplain\endgroup}
+
+\newenvironment{subcommandexplain}[4][]{%
+\begingroup
+\def\explaincolor{@softexplaincolor}\def\keyexplainindent{0em}%
+{\def\\{}\protected at xdef\@subidxkey{#2}\@gobblekey{\@subidxkey}}%% backslash should not interfere with keys
+\def\cursub{\@subidxkey?\hyperref[pk:_\@subidxkey]{\protect\lpingu{\\#2}}!}%
+\commandexplain[#1]{#3}{#4}%
+ {\@declaredcolor{gray}\footnotesize This command is only usable in combination with \cmdref{#2}.}\par
+}{\endcommandexplain\endgroup}
+
\def\consumeshowkeyexplain#1(#2){\ShowcaseThis[#2]{#1}}
\newenvironment{showkeyexplain}[4][/pingu/]{%
\keyexplain[#1]{#2}{#3}{#4}%
@@ -251,13 +352,13 @@
\def\explaincolor{@softexplaincolor}\def\keyexplainindent{0em}%
\def\cursub{#3?\hyperref[pk:#1#3]{\protect\lpingu{#3}}!}%
\keyexplain[#1]{#2}{\csname pinguopt#3\endcsname}{\csname pingudefa#3\endcsname}%
- {\@declaredcolor{gray}\footnotesize This is an alias for \keyref[#1]{#3}.}%
+ {\@declaredcolor{gray}\small This is an alias for \keyref[#1]{#3}.}%
\endkeyexplain\endgroup}
\newcommand\subkeyalias[4][/pingu/]{\begingroup
\def\explaincolor{@softexplaincolor}\def\keyexplainindent{0em}%
\def\cursub{#4?\hyperref[pk:#1#4]{\protect\lpingu{#4}}!#3?\hyperref[pk:#1#3]{\protect\lpingu{#3}}!}%
\keyexplain[#1]{#2}{\csname pinguopt#3\endcsname}{\csname pingudefa#3\endcsname}%
- {\@declaredcolor{gray}\footnotesize This is an alias for \keyref[#1]{#3}.}%
+ {\@declaredcolor{gray}\small This is an alias for \keyref[#1]{#3}.}%
\endkeyexplain\endgroup}
\def\lib#1{\tikz[baseline=-.6ex]\node[draw=teal,fill=teal!3!white,very thick,rounded corners=2pt,inner ysep=0pt]{\sffamily\strut#1};}
@@ -266,9 +367,9 @@
\def\tikzpingus{\TikZ pingus}
\tcbset{external/prefix=sub_}
-\tcbEXTERNALIZE % we do not need the other configurationshttps://www.freecodecamp.org/news/deploy-a-react-app-to-github-pages/ in the externalized images :D
+\tcbEXTERNALIZE % we do not need the other configurations in the externalized images :D
-\hfuzz=12pt
+\hfuzz=25pt
% this should not happen in the external images
\AtBeginDocument{%
@@ -309,7 +410,7 @@
\texorpdfstring{Florian Sihler\\*
\url{https://github.com/EagleoutIce/tikzpingus}
}{Florian Sihler}}
-\date{Version v1.0 \textendash\ 2022/08/24}
+\date{Version v1.1 \textendash{} 2023/09/17}
\begin{document}
\maketitle
@@ -337,7 +438,7 @@
\node[above=3mm,font=\bfseries\sffamily\Large] at(current bounding box.north) {Motivation};
\end{tikzpicture}\vspace*{-\baselineskip}
\end{center}
-\footnotetext{Why \say{pingu} and not \say{pengu}? Well, this is the third try on achieving cute penguins without using any templates or vector formats as a basis. As a german, the short form \say{pingu} was merely a typo that originated from the german word \say{pinguin} for \say{penguin}. It somewhat sticked\ldots}
+\footnotetext{Why \say{pingu} and not \say{pengu}? Well, this is the third try on achieving cute penguins without using any templates or vector formats as a basis. As a German, the short form \say{pingu} was merely a typo that originated from the German word \say{pinguin} for \say{penguin}. It somewhat stuck\ldots}
\endgroup\vfill
\begin{center}
@@ -402,20 +503,21 @@
\end{center}
\vfill\null
-\clearpage\section{Introduction}
+\clearpage
+\tableofcontents
+\clearpage
+\section{Introduction}
\subsection{Dependencies}
As this package is constantly work in progress, the concrete dependencies may change any time.
-At the moment, it loads \href{https://www.ctan.org/pkg/pgf}{\TikZ}, which loads a lot of other packages (e.g. \href{https://www.ctan.org/pkg/xcolor}{xcolor}), and \href{https://www.ctan.org/pkg/etoolbox}{etoolbox}.
+At the moment, it loads \href{https://www.ctan.org/pkg/pgf}{\TikZ}, which loads a lot of other packages (e.g.\ \href{https://www.ctan.org/pkg/xcolor}{xcolor}), and \href{https://www.ctan.org/pkg/etoolbox}{etoolbox}.
Furthermore, the following \TikZ-Libraries are in use:\footnote{A lot of the libraries loaded are important only for specific extras. I plan on cleaning them up.} \textit{intersections}, \textit{shadings}, \textit{patterns.meta}, \textit{decorations.pathmorphing}, and \textit{shapes.symbols}.
\subsection{Copyright}
-Copyright \textcopyright\ \textit{Florian Sihler}. Permission is granted to copy, distribute and\slash or modify this software under the terms of the GNU General Public License, version~3.0 (to be found online at: \url{https://opensource.org/licenses/gpl-3.0.html}).
-
+Copyright \textcopyright\ \textit{Florian Sihler}. Permission is granted to copy, distribute and\slash or modify this software under the terms of the GNU General Public License, version~3.0 (to be found online at: \url{https://opensource.org/licenses/gpl-3.0.html}).\\*
The shown example penguins are purely fictional characters, any resemblance to real penguins or real persons is purely coincidental and no copyright infringement is intended.
-\vfill
\section{Usage}\label{Usage}
If you just want a penguin, import the package and start with the following:
@@ -434,11 +536,15 @@
\end{tcblisting}
Please note, that \say{left} and \say{right} have been chosen from the penguin-perspective.
+\begin{commandexplain}{pingu}{\opt{penguin keys}}
+ The command to draw the penguin!
+\end{commandexplain}
+
\clearpage Besides the keys defined by this package, you can use the keys of \TikZ\ and |pgf| as well (the duck was generated by the lovely \href{https://github.com/samcarter/tikzducks}{tikzducks} package):
\begin{tcblisting}{title={The Reunion},externalize listing=pengu-duck}
\begin{tikzpicture}
\duck
- \pingu[xshift=2.8cm, yshift=14mm,
+ \pingu[xshift=2.7cm, yshift=14mm,
eyes wink]
\end{tikzpicture}
\end{tcblisting}
@@ -460,7 +566,7 @@
\node at (paula-foot-left) {Foot};
\end{tikzpicture}
\end{tcblisting}
-Lets look at those coordinates in more detail (all labels are to be prefixed by |<pingu-name>-|):
+\phantomsection\label{pingu-coordinates}Lets look at those coordinates in more detail (all labels are to be prefixed by |<|\keyref{name}|>-|):
\newsavebox\pinguwingright
\savebox\pinguwingright{%
\begin{tikzpicture}%
@@ -476,7 +582,7 @@
\draw[teal,thin] (expl-\c) -- (pingu-\c);
}
\end{tikzpicture}}
-\makeatletter
+
\newsavebox\pinguwingleft
\savebox\pinguwingleft{%
\begin{tikzpicture}%
@@ -529,7 +635,7 @@
\end{center}
\subsection{Colors}
-A lot of options allow for a color to be passed. In general, you can provide any color that \TikZ\ is happy with! Yet, there are some predefined pingu-colors shipped with this package:
+\label{Colors}A lot of options allow for a color to be passed. In general, you can provide any color that \TikZ\ is happy with! Yet, there are some predefined pingu-colors shipped with this package:
\def\getCol#1{\pgfmathparse{int(round(#1*255))}\pgfmathresult}
\def\parseRGB#1,#2,#3;{r:~\getCol{#1}, g:~\getCol{#2}, b:~\getCol{#3}}
\begin{multicols}{4}
@@ -537,13 +643,13 @@
\foreach \col in {main,black,silver,bronze,white,yellow,lightblue,blue,green,red,purple} {
\item[{\tikz[baseline=-.6ex]{\fill[pingu@\col,semithick,draw=black] circle (4pt);}}] \footnotesize\strut
% somehow outputs, therefore box
- \setbox0=\hbox{\colorInfoRGB{pingu@\col}\xdef\colorValue{\colorValue}}\rlap{\smash{\raisebox{-2.9mm}{\sffamily\color{gray}\tiny\expandafter\parseRGB\colorValue;}}}%
+ \setbox0=\hbox{\colorInfoRGB{pingu@\col}\xdef\colorValue{\colorValue}}\rlap{\smash{\raisebox{-2.9mm}{\sffamily\@declaredcolor{gray}\tiny\expandafter\parseRGB\colorValue;}}}%
\texttt{pingu@\col}%
}
\item[] \footnotesize\strut% buffer
\end{itemize}
\end{multicols}
-Furthermore, there is the special color {\makeatletter\say{\expandafter\ipingu\expandafter{\@pingu at none}}} which is available for most\footnote{Why just \say{most}? Well, this package is work in progress and I have added the option late, so I may have forgotten to patch some keys.} extras and wing-items. This color prohibits the compartments from being drawn. To be more precise, the package defines the macro \ltex{\\@pingu at none}, which is matched against the selected color.
+Furthermore, there is the special color \say{\expandafter\ipingu\expandafter{\@pingu at none}} (\cmdref{@pingu at none}) which is available for most\footnote{Why just \say{most}? Well, this package is work in progress and I have added the option late, so I may have forgotten to patch some keys.} extras and wing-items. This color prohibits the compartments from being drawn. To be more precise, the package defines the macro \ltex{\\@pingu at none}, which is matched against the selected color.
As an example, lets take a look at the \keyref{cup}-extra, which provides an additional key \keyref{cup straw} to color the straw:
\begin{tcblisting}{title={Cup without a straw},externalize listing=extra-options}
@@ -550,7 +656,7 @@
\begin{tikzpicture}
\pingu[wings grab, cup=pingu at purple,
cup straw=pingu at blue]
- \pingu[wings grab, cup, xshift=2.8cm,
+ \pingu[wings grab, cup, xshift=2.7cm,
cup straw=!hide]
\end{tikzpicture}
\end{tcblisting}
@@ -558,17 +664,27 @@
\subsection{Setting the defaults}
You do not have to re-state every key.
-With \lstinline[language=pingulang]'\pingudefaults' and \lstinline[language=pingulang]'\pingudefaultsappend' (similar, but extends the current options) you can set default-options for all penguins to come:
+With \cmdref{pingudefaults} and \cmdref{pingudefaultsappend} (similar, but extends the current options) you can set default-options for all penguins to come:
\begin{tcblisting}{title={Change the mainstream},externalize listing=update-defaults}
\begin{tikzpicture}
\pingudefaults{wings grab, eyes shiny}
\pingu
- \pingu[left wing shock, xshift=2.8cm]
+ \pingu[left wing shock, xshift=2.7cm]
\end{tikzpicture}
\end{tcblisting}
+\begin{commandexplain}{pingudefaults}{\mand{penguin keys}}
+ Sets the given \textit{penguin keys} as defaults for the local group.
+ Overwrites any previews defaults (see \cmdref{pingudefaultsappend}).
+\end{commandexplain}
+
+\begin{commandexplain}{pingudefaultsappend}{\mand{penguin keys}}
+ Appends the given \textit{penguin keys} as defaults for the local group.
+ To overwrite these keys, see \cmdref{pingudefaults}.
+\end{commandexplain}
+
\subsection{Libraries}
-\label{Libraries}\index{Libraries}I've split the penguin features into a set of libraries. While all of them are loaded by default, the |bare| package-option disables the automatic loading of all libraries. They can be loaded (locally to the current group) using |\pinguloadlibrary| and |\pinguloadlibraries| passing on a comma separated list of desired libraries.
+\label{Libraries}\index{Libraries}I've split the penguin features into a set of libraries. While all of them are loaded by default, the |bare| package-option disables the automatic loading of all libraries. They can be loaded (locally to the current group) using \cmdref{pinguloadlibrary} and \cmdref{pinguloadlibraries} passing on a comma separated list of desired libraries.
See the full reference or the index to learn which key comes from which library.
Please note that~--- at the moment~--- not all components of a library are labeled correctly.
% TODO: already count that? % global let?
@@ -576,11 +692,19 @@
Currently there are the following libraries:
\foreach[count=\i] \l/\xs in \pingu at defaultlibs{%
\ifx\l\empty\else
- \index{Libraries!\textit{\l}}\textit{\l}\ifnum\numexpr\pingu at defaultlibs@count-1>\i,\space\else
+ \index[\current at indexfile]{Libraries!\textit{\l}}\textit{\l}\ifnum\numexpr\pingu at defaultlibs@count-1>\i,\space\else
\ifnum\pingu at defaultlibs@count=\i\else,~and\space\fi\fi
\fi
}.
+\begin{commandexplain}{pinguloadlibrary}{\mand{library}}
+ Load a penguin library (actually, due to the implementation, you can use this command just like \cmdref{pinguloadlibraries} and load multiple libraries).
+\end{commandexplain}
+
+\begin{commandexplain}{pinguloadlibraries}{\mand{libraries}}
+ Load multiple penguin libraries, separated by a comma. For example: \texttt{\cmdref{pinguloadlibraries}\{shirts, glasses\}}.
+\end{commandexplain}
+
\subsection{Changing the wings}
\label{subsec:wings}As already demonstrated, it is possible to change the wing positions!
All selected wing-items will adapt to the wing-position (although not all wing-items will make sense with every wing-position).
@@ -595,7 +719,7 @@
\pingu[left wing none, heart=green]
\pingu[wings wave, heart=teal, xshift=3.5cm]
\pingu[wings hug, heart=orange, xshift=7cm]
- \pingu[left wing grab, right wing shock, heart=purple, xshift=10.5cm]
+ \pingu[left wing grab, right wing shock, heart=purple, xshift=10.5cm]
\end{tikzpicture}
\end{tcblisting}
@@ -638,12 +762,12 @@
\subsection{Predefined Styles}
While the penguin options offer the modification of basically every drawing routine (through other styles like |@block|), it is tedious to change them every time.
-So I have started to create some predefined styles, that do change some of the penguins appearance (and are completely new, so beware of bugs):
+So I have started to create some predefined styles, that do change some of the penguins appearance (and are completely new, so beware of bugs). The following list presents an incomplete overview:
\begin{multicols}{2}
\begin{itemize}
\itemsep0pt
- \foreach \tx/\s in {{draw everything with a line}/{:line}, {fill main penguin}/{:fill}, {draw components with transparency}/{:ghost parts}, {draw all layers with transparency}/{:ghost}, {set main \say{devil}-components}/{:devil},{flip the penguin (swaps left \& right)}/{:back},{do not draw main pingu}/{:hide}} {
- \item \parbox[t]{.8\linewidth}{\raggedright\texttt{\s}, \tx.} \hfill
+ \foreach \tx/\s in {{draw everything with a line}/{:line}, {fill main penguin}/{:fill}, {draw components with transparency}/{:ghost parts}, {draw all layers with transparency}/{:ghost}, {set main \say{devil}-components}/{:devil},{flip the penguin (swaps left \& right)}/{:back},{do not draw main pingu}/{:hide},{mix the main penguin with a given color}/{:mix},{mix the main penguin completely with a given color}/{:mix-draw},{mix everything with a given color}/{:mix-all}} {
+ \item \parbox[t]{.8\linewidth}{\raggedright\expandafter\dkeyref\expandafter{\s}, \tx.} \hfill
\parbox[t]{.175\linewidth}{\scalebox{.4}{%
\begin{tikzpicture}[baseline=.35\baselineskip]%
\pingu[\s]
@@ -668,7 +792,6 @@
\pgfmathsetseed{\number\pdfrandomseed}
\begin{tikzpicture}
\pingu[wings=!random,eyes=!random,
- body type=!random,
left foot=!random,
bill=!random,
hairstyle=!random]
@@ -744,7 +867,7 @@
\section{Full Reference}\label{sec:full-ref}
-\def\percenttargetreductionpengus{63}\def\lstfnsize{-1.65}
+\def\percenttargetreductionpengus{50}\let\lstfnsize\footnotesize
\tcbset{%
before lower={\begin{adjustbox}{scale=.\percenttargetreductionpengus}},
after lower={\end{adjustbox}},%
@@ -841,6 +964,15 @@
\shortcuts{feet}{\@pingu at leftfoot@}{feet color}
+\keyexplain{feet front}{true/false}{\if at pingu@feet at front true\else false\fi}
+ If set to true, the feet will be drawn in front of the body:
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[feet front]
+\end{tikzpicture}
+\end{tcblisting}
+\endkeyexplain
+
\subsubsection{The Body}
\keyexplain{body main}{color}{\pingu at color@body at main}
@@ -964,7 +1096,7 @@
\keyexplain{left eye second color}{color}{\pingu at color@eye at second@left}
- Change the secondary color of the left eye. It will be used in some styles selected by \keyref{left eye} (e.g. \textit{shiny}):
+ Change the secondary color of the left eye. It will be used in some styles selected by \keyref{left eye} (e.g.\ \textit{shiny}):
\begin{tcblisting}{listing options={style=lstpingu,language=pingulang,deleteemph={[2]{shiny}}}}
\begin{tikzpicture}
\pingu[left eye=shiny,
@@ -995,7 +1127,7 @@
\keyexplain{right eye second color}{color}{\pingu at color@eye at second@right}
- Change the secondary color of the right eye. It will be used in some styles selected by \keyref{right eye} (e.g. \textit{shiny}):
+ Change the secondary color of the right eye. It will be used in some styles selected by \keyref{right eye} (e.g.\ \textit{shiny}):
\begin{tcblisting}{listing options={style=lstpingu,language=pingulang,deleteemph={[2]{shock}}}}
\begin{tikzpicture}
\pingu[right eye=shock,
@@ -1207,7 +1339,7 @@
Makes the whole penguin in one solid color (basically a shortcut for setting all main penguin colors to the same):
\begin{tcblisting}{@}
\begin{tikzpicture}
- \pingu[:fill]
+ \pingu[:fill,tie=white,eyes color=white]
\end{tikzpicture}
\end{tcblisting}
\endkeyexplain
@@ -1262,11 +1394,48 @@
\end{tcblisting}
\endkeyexplain
+\keyexplain{:pingu}{options}{}
+ Apply the given options to all penguin-keys (for \keyref{body}, \keyref{wings color}, \keyref{eyes color}, \keyref{bill color}, \keyref{hair color}, and \keyref{feet color}) allowing to re-use the original color:
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[:pingu={/pingu/@block/.style={fill=green}}]
+\end{tikzpicture}
+\end{tcblisting}
+\endkeyexplain
+
+\keyexplain{:mix}{color-mix}{50!white}
+ Mix the main penguin with given colors, but leave all extras intact. This can be used (for example) to gray-out the penguin:
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[mask,tie=red,lollipop left,:mix=50!green]
+\end{tikzpicture}
+\end{tcblisting}
+ In contrast to \dkeyref{:mix-draw} this changes the active colors of the penguin.
+\endkeyexplain
+
+\keyexplain{:mix-draw}{color-mix}{50!white}
+ Mix the main penguin with given colors, but leave all extras intact. This can be used (for example) to gray-out the penguin:
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[mask,tie=red,:mix-draw=50!green]
+\end{tikzpicture}
+\end{tcblisting}
+ In contrast to \dkeyref{:mix} this changes the drawing options (using \keyref{:pingu}).
+\endkeyexplain
+
+\keyexplain{:mix-all}{color-mix}{50!white}
+ Mix everything of the penguin with given colors, including all extras intact. This can be used (for example) to gray-out the penguin:
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[mask,tie=red,:mix-all=50!green]
+\end{tikzpicture}
+\end{tcblisting}
+\endkeyexplain
+
\def\cursub{}
-
\subsection{Extras}
\subsubsection{The heart}
-\showkeyexplain{heart}{node-options}{}(pingu at main)
+\showkeyexplain{heart}{color}{lightgray}(pingu at main)
\begin{tcblisting}{@}
\begin{tikzpicture}
\pingu[heart=green]
@@ -1274,6 +1443,15 @@
\end{tcblisting}
\endshowkeyexplain
+\subsubsection{The vampire teeth}
+\showkeyexplain{vampire teeth}{color}{pingu at yellow!10!pingu at black!70!lightgray}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[vampire teeth=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endshowkeyexplain
+
\subsubsection{The tie}
\showkeyexplain{tie}{color}{pingu at green}
\begin{tcblisting}{@}
@@ -1331,6 +1509,35 @@
\end{tcblisting}
\endsubkeyexplain
+\subsubsection{The sheriff star}
+\showkeyexplain{sheriff star}{color}{pingu at yellow}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[sheriff star=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endshowkeyexplain
+
+\subkeyexplain{sheriff star}{sheriff star content}{length}{\pingu at x@sheriff at star@content}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[sheriff star, sheriff star content=X]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+
+{\def\pingu at color@sheriffstar{<sheriff-star-color>}
+\subkeyexplain{sheriff star}{sheriff star lines}{color}{\pingu at color@sheriffstar at lines}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[sheriff star, sheriff star lines=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+}
+
+
\subsubsection{The bowtie}
\showkeyexplain{bow tie}{color}{pingu at blue}
\begin{tcblisting}{@}
@@ -1397,6 +1604,23 @@
\end{tcblisting}
\endsubkeyexplain}
+{\def\pingu at color@cup{<cup-color>}
+\subkeyexplain{cup}{cup steam}{color}{\pingu at color@cup at steam}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[cup, cup steam=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain}
+
+\subkeyexplain{cup}{cup steam shift}{length}{\pingu at x@cup at steam@shift}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[cup, cup steam, cup steam shift=2mm]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
\subsubsection{The medal}
\showkeyexplain{medal}{color}{pingu at yellow}
\begin{tcblisting}{@}
@@ -1474,7 +1698,7 @@
\subsubsection{The eye patches}
-\showkeyexplain{eye patch left}{color}{<pingu-main-color>}(pingu at main)
+\showkeyexplain{eye patch left}{color}{<pingu-main-color>}
\begin{tcblisting}{@}
\begin{tikzpicture}
\pingu[eye patch left]
@@ -1485,7 +1709,7 @@
\keyalias{eyepatch left}{eye patch left}
\keyalias{eye-patch left}{eye patch left}
-\showkeyexplain{eye patch right}{color}{<pingu-main-color>}(pingu at main)
+\showkeyexplain{eye patch right}{color}{<pingu-main-color>}
\begin{tcblisting}{@}
\begin{tikzpicture}
\pingu[eye patch right]
@@ -1498,7 +1722,7 @@
\subsubsection{The monocle}
-\showkeyexplain{monocle left}{color}{pingu at black}(pingu at black)
+\showkeyexplain{monocle left}{color}{pingu at black}
\begin{tcblisting}{@}
\begin{tikzpicture}
\pingu[monocle left]
@@ -1562,7 +1786,7 @@
\end{tcblisting}
\endsubkeyexplain}
-\showkeyexplain{monocle right}{color}{pingu at black}(pingu at black)
+\showkeyexplain{monocle right}{color}{pingu at black}
\begin{tcblisting}{@}
\begin{tikzpicture}
\pingu[monocle right]
@@ -2018,6 +2242,25 @@
\subkeyalias{devilwings b}{devil wings b}{devil wings}
\subkeyalias{devil-wings b}{devil wings b}{devil wings}
+\subsubsection{The belt}
+
+\showkeyexplain{belt}{color}{pingu at bronze!80!black}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[belt=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endshowkeyexplain
+
+\subkeyexplain{belt}{belt knot color}{color}{\pingu at color@belt at knot}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[belt,belt knot color=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+
\subsubsection{The head band}
\showkeyexplain{head band}{color}{pingu at red}
@@ -2311,6 +2554,172 @@
\end{tcblisting}
\endsubkeyexplain
+\subsubsection{The mitra}
+\showkeyexplain{mitra}{color}{pingu at red!67!pingu at black}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[mitra=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endshowkeyexplain
+
+\subkeyexplain{hat}{mitra height}{length}{\pingu at x@mitra at height}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[mitra,mitra height=1.5cm]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+{\def\pingu at color@mitra{<mitra-color>}
+\subkeyexplain{mitra}{mitra background}{color}{\pingu at color@mitra at background}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[mitra, mitra background=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{mitra}{mitra overset}{lenght}{\pingu at x@mitra at overset}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[mitra,mitra overset=2.5mm]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{mitra}{mitra lower angle}{angle}{\pingu at x@mitra at lowerangle}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[mitra,mitra lower angle=140]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{mitra}{mitra upper angle}{angle}{\pingu at x@mitra at upperangle}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[mitra,mitra upper angle=-45]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{mitra}{mitra lower band}{color}{\pingu at color@mitra at lower@band}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[mitra,mitra lower band=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{mitra}{mitra lower band height}{factor}{\pingu at x@mitra at lowerband@height}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[mitra,mitra lower band height=.5]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\def\pingu at color@mitra at lower@band{<mitra-lower-band-color>}
+\def\pingu at x@mitra at lowerband@height{<mitra-lower-band-height>}
+\subkeyexplain{mitra}{mitra upper band}{color}{\pingu at color@mitra at upper@band}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[mitra,mitra upper band=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{mitra}{mitra upper band height}{factor}{\pingu at x@mitra at upperband@height}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[mitra,mitra upper band height=.5]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+
+\subkeyexplain{mitra}{mitra center band}{color}{\pingu at color@mitra at center@band}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[mitra,mitra center band=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{mitra}{mitra center band width}{factor}{\pingu at x@mitra at centerband@width}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[mitra,mitra center band width=.5]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+}
+
+\subkeyexplain{mitra}{mitra position}{angle>:(<x>,<y>)<scale}{\pingu at x@mitra at angle:(\pingu at x@mitra at xshift,\pingu at x@mitra at yshift)\{\pingu at x@mitra at scale\}}
+Currently, this is a very cumbersome command to change various mitra parameters at the same time:
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[mitra, mitra position={1:(0cm,-.09cm){1.33}}]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subsubsection{The witch hat}
+\showkeyexplain{witch hat}{color}{pingu at purple!40!black}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[witch hat=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endshowkeyexplain
+
+{\def\pingu at color@witchhat{<witch-hat-color>}
+\subkeyexplain{witch hat}{witch hat ribbon}{color}{\pingu at color@witchhat at ribbon}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[witch hat, witch hat ribbon=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain}
+
+{\def\pingu at color@witchhat{<witch-hat-color>}
+\subkeyexplain{witch hat}{witch hat base}{color}{\pingu at color@witchhat at base}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[witch hat, witch hat base=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain}
+
+{\def\pingu at color@witchhat{<witch-hat-color>}
+\subkeyexplain{witch hat}{witch hat coronal}{color}{\pingu at color@witchhat at coronal}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[witch hat, witch hat coronal=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain}
+
+{\def\pingu at color@witchhat{<witch-hat-color>}
+\subkeyexplain{witch hat}{witch hat band}{color}{\pingu at color@witchhat at band}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[witch hat, witch hat band=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain}
+
+\subkeyexplain{witch hat}{witch hat position}{angle>:(<x>,<y>)<scale}{\pingu at x@witchhat at angle:(\pingu at x@witchhat at xshift,\pingu at x@witchhat at yshift)\{\pingu at x@witchhat at scale\}}
+Currently, this is a very cumbersome command to change various witch hat parameters at the same time:
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[witch hat, witch hat position={1:(0cm,-.09cm){1.33}}]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+
\subsubsection{The conical hat}
\showkeyexplain{conical hat}{color}{pingu at yellow}
\begin{tcblisting}{@}
@@ -2375,7 +2784,7 @@
\end{tcblisting}
\endshowkeyexplain
-\subkeyexplain{cap padding}{cap padding}{length}{\pingu at x@cap at padding}
+\subkeyexplain{cap}{cap padding}{length}{\pingu at x@cap at padding}
\begin{tcblisting}{@}
\begin{tikzpicture}
\pingu[cap, cap padding=4mm]
@@ -2384,7 +2793,7 @@
\endsubkeyexplain
-\subkeyexplain{cap extra height}{cap extra height}{length}{\pingu at x@cap at height}
+\subkeyexplain{cap}{cap extra height}{length}{\pingu at x@cap at height}
\begin{tcblisting}{@}
\begin{tikzpicture}
\pingu[cap, cap extra height=2mm]
@@ -2410,7 +2819,7 @@
\end{tcblisting}
\endsubkeyexplain
-\subkeyexplain{construction helmet extra height}{construction helmet extra height}{length}{\pingu at x@constructionhelmet at height}
+\subkeyexplain{construction helmet}{construction helmet extra height}{length}{\pingu at x@constructionhelmet at height}
\begin{tcblisting}{@}
\begin{tikzpicture}
\pingu[construction helmet,
@@ -2732,7 +3141,7 @@
\end{tcblisting}
\endsubkeyexplain}
-\subkeyexplain{cake-hat}{cake-hat outline width}{color}{\pingu at x@cakehat at outline@w}
+\subkeyexplain{cake-hat}{cake-hat outline width}{length}{\pingu at x@cakehat at outline@w}
Change the width of the cake hats' outline (color by \keyref{cake-hat outline}):
\begin{tcblisting}{@}
\begin{tikzpicture}
@@ -2814,7 +3223,7 @@
\end{tcblisting}
\endsubkeyexplain
-\subkeyexplain{pumpkin-hat}{pumpkin-hat outline width}{color}{\pingu at x@pumpkinhat at outline@w}
+\subkeyexplain{pumpkin-hat}{pumpkin-hat outline width}{length}{\pingu at x@pumpkinhat at outline@w}
\begin{tcblisting}{@}
\begin{tikzpicture}
\pingu[pumpkin-hat,pumpkin-hat outline width=3pt]
@@ -2832,8 +3241,504 @@
\end{tcblisting}
\endsubkeyexplain
-\subsubsection{The VR-Headset}
+\subsubsection{The jack o lantern}
+\showkeyexplain{jack o lantern}{color}{pingu at bronze!97!pingu at black}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[jack o lantern=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endshowkeyexplain
+
+{\def\pingu at color@jackolantern{<jackolantern-color>}
+\subkeyexplain{jack o lantern}{jack o lantern stalk}{color}{\pingu at color@jackolantern at stalk}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[jack o lantern,jack o lantern stalk=teal]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain}
+
+{\subkeyexplain{jack o lantern}{jack o lantern stalk top}{color}{<jackolantern-stalk-color>!95!pingu at black}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[jack o lantern,jack o lantern stalk top=teal]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain}
+
+\subkeyexplain{jack o lantern}{jack o lantern stripe a}{color}{\pingu at color@jackolantern at stripe@a}
+Change the color of the first stripe. By default the other stripes share this ones color:
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[jack o lantern,jack o lantern stripe a=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{jack o lantern}{jack o lantern stripe b}{color}{\pingu at color@jackolantern at stripe@b}
+Change the color of the second stripe. By default the third stripe share this ones color:
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[jack o lantern,jack o lantern stripe b=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{jack o lantern}{jack o lantern stripe c}{color}{\pingu at color@jackolantern at stripe@c}
+Change the color of the third stripe:
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[jack o lantern,jack o lantern stripe c=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{jack o lantern}{jack o lantern back stripe a}{color}{\pingu at color@jackolantern at backstripe@a}
+Change the color of the first stripe. By default the other stripes share this ones color:
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[jack o lantern,jack o lantern back stripe a=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{jack o lantern}{jack o lantern back stripe b}{color}{\pingu at color@jackolantern at backstripe@b}
+Change the color of the second stripe. By default the third stripe share this ones color:
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[jack o lantern,jack o lantern back stripe b=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{jack o lantern}{jack o lantern back stripe c}{color}{\pingu at color@jackolantern at backstripe@c}
+Change the color of the third stripe:
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[jack o lantern,jack o lantern back stripe c=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+{\def\pingu at color@jackolantern{<jackolantern-color>}
+\subkeyexplain{jack o lantern}{jack o lantern background}{color}{\pingu at color@jackolantern at background}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[jack o lantern,jack o lantern background=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain}
+
+\subkeyexplain{jack o lantern}{jack o lantern outline}{color}{\pingu at color@jackolantern at outline}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[jack o lantern,jack o lantern outline=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{jack o lantern}{jack o lantern outline width}{length}{\pingu at x@jackolantern at outline@w}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[jack o lantern,jack o lantern outline width=3pt]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{jack o lantern}{jack o lantern width}{length}{\pingu at x@jackolantern at width}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[jack o lantern,jack o lantern width=8mm]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{jack o lantern}{jack o lantern height}{length}{\pingu at x@jackolantern at height}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[jack o lantern,jack o lantern height=8mm]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{jack o lantern}{jack o lantern position}{angle>:(<x>,<y>)<scale}{\pingu at x@jackolantern at angle:(\pingu at x@jackolantern at xshift,\pingu at x@jackolantern at yshift)\{\pingu at x@jackolantern at scale\}}
+Currently, this is a very cumbersome command to change various pumpkin hat parameters at the same time:
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[jack o lantern,
+ jack o lantern position={1:(-.085cm,-.15cm){1.275}}]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\showkeyexplain{jack o lantern helmet}{color}{pingu at bronze!97!pingu at black}
+Uses \keyref{jack o lantern} and some of its keys:
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[jack o lantern helmet=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endshowkeyexplain
+
+\subsubsection{The bee}
+\showkeyexplain{bee}{color}{pingu at bee@base}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[bee=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endshowkeyexplain
+
+\subkeyexplain{bee}{bee body}{color}{\pingu at color@bee at body}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[bee, bee body=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{bee}{bee wings}{color}{\pingu at color@bee at wings}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[bee, bee wings=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+{
+\def\pingu at color@bee at body{<bee-body-color>}
+\subkeyexplain{bee}{bee mouth}{color}{\pingu at color@bee at mouth}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[bee, bee mouth=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{bee}{bee eyes}{color}{\pingu at color@bee at eyes}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[bee, bee eyes=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\def\pingu at color@bee{<bee-color>}
+\subkeyexplain{bee}{bee blush}{color}{\pingu at color@bee at blush}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[bee, bee blush=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+}
+
+\subkeyexplain{bee}{bee position}{angle>:(<x>,<y>)<scale}{\pingu at x@bee at angle:(\pingu at x@bee at xshift,\pingu at x@bee at yshift)\{\pingu at x@bee at scale\}}
+Currently, this is a very cumbersome command to change various bee parameters at the same time:
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[bee, bee position={1:(0cm,-.09cm){1.33}}]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subsubsection{The horse}
+ Although the horse does not have a bounding box by default (\keyref{on horse has bounding box}), we add it so you can see everything.
+
+\showkeyexplain{on horse}{color}{pingu at bronze!80!pingu at black}
+ Place your penguin on a not-so-to-scale horse (see \keyref{horse left} and \keyref{horse right}):
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[on horse=green, on horse has bounding box]
+\end{tikzpicture}
+\end{tcblisting}
+\endshowkeyexplain
+
+\subkeyexplain{on horse}{on horse flip}{true/false}{\if at pingu@x at horse@on at flip@ true\else false\fi}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[on horse, on horse has bounding box,
+ on horse flip=true]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{on horse}{on horse donkey}{true/false}{\if at pingu@x at horse@on at donkey@ true\else false\fi}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[on horse, on horse has bounding box,
+ on horse donkey=true]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{on horse}{on horse has base}{true/false}{\if at pingu@x at horse@on at base@ true\else false\fi}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[on horse, on horse has bounding box,
+ on horse has base]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{on horse}{on horse has bounding box}{true/false}{\if at pingu@x at horse@on at boundingbox@ true\else false\fi}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[on horse,on horse has bounding box]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+{\def\pingu at color@horseon{<on-horse-color>}
+\subkeyexplain{on horse}{on horse draw}{color}{\pingu at color@horseon at draw}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[on horse, on horse has bounding box,
+ on horse draw=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{on horse}{on horse mane}{color}{\pingu at color@horseon at mane}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[on horse, on horse has bounding box,
+ on horse mane=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\def\pingu at color@horseon at mane{<on-horse-mane-color>}
+\subkeyexplain{on horse}{on horse mane draw}{color}{\pingu at color@horseon at mane@draw}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[on horse, on horse has bounding box,
+ on horse mane draw=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{on horse}{on horse thatch}{color}{\pingu at color@horseon at thatch}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[on horse, on horse has bounding box,
+ on horse thatch=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\def\pingu at color@horseon at thatch{<on-horse-thatch-color>}
+\subkeyexplain{on horse}{on horse thatch draw}{color}{\pingu at color@horseon at thatch@draw}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[on horse, on horse has bounding box,
+ on horse thatch draw=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{on horse}{on horse tail}{color}{\pingu at color@horseon at tail}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[on horse, on horse has bounding box,
+ on horse tail=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\def\pingu at color@horseon at tail{<on-horse-tail-color>}
+\subkeyexplain{on horse}{on horse tail draw}{color}{\pingu at color@horseon at tail@draw}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[on horse, on horse has bounding box,
+ on horse tail draw=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{on horse}{on horse eyes}{color}{\pingu at color@horseon at eyes}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[on horse, on horse has bounding box,
+ on horse eyes=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+\subkeyalias{on horse eye}{on horse eyes}{on horse}
+
+\subkeyexplain{on horse}{on horse mouth}{color}{\pingu at color@horseon at mouth}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[on horse, on horse has bounding box,
+ on horse mouth=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{on horse}{on horse nose}{color}{\pingu at color@horseon at nose}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[on horse, on horse has bounding box,
+ on horse nose=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{on horse}{on horse ears}{color}{\pingu at color@horseon at ears}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[on horse, on horse has bounding box,
+ on horse ears=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{on horse}{on horse base}{color}{\pingu at color@horseon at base}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[on horse,on horse has base,
+ on horse has bounding box,
+ on horse base=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\def\pingu at color@horseon at base{<on-horse-base-color>}
+\subkeyexplain{on horse}{on horse base draw}{color}{\pingu at color@horseon at base@draw}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[on horse, on horse has bounding box,
+ on horse has base,
+ on horse base draw=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{on horse}{on horse base shade}{color}{\pingu at color@horseon at base@shade}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[on horse, on horse has bounding box,
+ on horse has base,
+ on horse base shade=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\def\pingu at color@horseon at base@shade{<on-horse-base-shade-color>}
+\subkeyexplain{on horse}{on horse base shade draw}{color}{\pingu at color@horseon at base@shade at draw}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[on horse, on horse has base,
+ on horse has bounding box,
+ on horse base shade draw=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{on horse}{on horse front left hoof}{color}{}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[on horse,on horse has bounding box,
+ on horse front left hoof=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{on horse}{on horse front right hoof}{color}{}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[on horse,on horse has bounding box,
+ on horse front right hoof=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{on horse}{on horse back left hoof}{color}{}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[on horse,on horse has bounding box,
+ on horse back left hoof=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{on horse}{on horse back right hoof}{color}{}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[on horse,on horse has bounding box,
+ on horse back right hoof=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{on horse}{on horse front hoofs}{color}{}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[on horse,on horse has bounding box,
+ on horse front hoofs=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{on horse}{on horse back hoofs}{color}{}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[on horse,on horse has bounding box,
+ on horse back hoofs=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{on horse}{on horse hoofs}{color}{gray!80!white}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[on horse,on horse has bounding box,
+ on horse hoofs=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{on horse}{on horse xshift}{length}{\pingu at x@horseon at xshift}
+This key reacts with the \keyref{on horse flip} option!
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[on horse, on horse has bounding box,
+ on horse xshift=1cm]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{on horse}{on horse yshift}{length}{\pingu at x@horseon at yshift}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[on horse, on horse has bounding box,
+ on horse yshift=1cm]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{on horse}{on horse scale}{length}{\pingu at x@horseon at scale}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[on horse, on horse has bounding box,
+ on horse scale=.25]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+}
+
+\showkeyexplain{horse behind}{color}{pingu at bronze!80!pingu at black}
+ Place your penguin in front of a horse (configures \keyref{on horse}):
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[horse behind=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endshowkeyexplain
+
+\subsubsection{The VR-headset}
+
\showkeyexplain{vr-headset}{color}{pingu at black!92!gray}
\begin{tcblisting}{@}
\begin{tikzpicture}
@@ -2973,7 +3878,7 @@
\subsubsection{The santa hat}
\showkeyexplain{santa hat}{color}{pingu at red!87!pingu at black}
-Show the merry christmas:
+Merry christmas:
\begin{tcblisting}{@}
\begin{tikzpicture}
\pingu[santa hat=pingu at red]
@@ -3002,7 +3907,7 @@
\subsubsection{The santa beard}
-\showkeyexplain{santa beard}{color}{pingu at white!96!pingu at red!98!pingu at black!92!gray}(pingu at white!96!pingu at red!98!pingu at black!92!gray,santa beard string=pingu at main)
+\showkeyexplain{santa beard}{color}{pingu at white!96!pingu at red!98!pingu at black!92!gray}
\begin{tcblisting}{@}
\begin{tikzpicture}
\pingu[santa beard=brown!20!white]
@@ -3019,8 +3924,131 @@
\end{tcblisting}
\endsubkeyexplain}
+\subsubsection{The snowball}
+
+\showkeyexplain{snowball left}{color}{pingu at white!90!pingu at black}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[snowball left=pingu at bronze!80!pingu at black]
+\end{tikzpicture}
+\end{tcblisting}
+\endshowkeyexplain
+
+\subkeyexplain{snowball left}{snowball left size}{length}{\pingu at snowball@left at size}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[snowball left, snowball left size=2mm]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{snowball left}{snowball left xshift}{length}{\pingu at snowball@left at xshift}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[snowball left, snowball left xshift=2mm]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{snowball left}{snowball left yshift}{length}{\pingu at snowball@left at yshift}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[snowball left, snowball left yshift=2mm]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+
+\showkeyexplain{snowball right}{color}{pingu at white!90!pingu at black}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[snowball right=pingu at bronze!80!pingu at black]
+\end{tikzpicture}
+\end{tcblisting}
+\endshowkeyexplain
+
+\subkeyexplain{snowball right}{snowball right size}{length}{\pingu at snowball@right at size}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[snowball right, snowball right size=2mm]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{snowball right}{snowball right xshift}{length}{\pingu at snowball@right at xshift}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[snowball right, snowball right xshift=2mm]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{snowball right}{snowball right yshift}{length}{\pingu at snowball@right at yshift}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[snowball right, snowball right yshift=2mm]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subsubsection{The wool hat}
+
+\showkeyexplain{wool hat}{color}{pingu at blue!57!pingu at black}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[wool hat=pingu at red]
+\end{tikzpicture}
+\end{tcblisting}
+\endshowkeyexplain
+
+{\def\pingu at color@woolhat{<wool hat>}
+\subkeyexplain{wool hat}{wool hat second}{color}{\pingu at color@woolhat at second}
+Change the wool color:
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[wool hat,wool hat second=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain}
+
+{
+\subkeyexplain{wool hat}{wool hat bobble}{color}{<wool hat second>}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[wool hat,wool hat bobble=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain}
+
+\subsubsection{The deer hat}
+
+\showkeyexplain{deer hat}{color}{pingu at red!87!pingu at black}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[deer hat=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endshowkeyexplain
+{\def\pingu at color@deerhat{<deer hat>}
+\subkeyexplain{deer hat}{deer hat b}{color}{\pingu at color@deerhat at b}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[deer hat, deer hat b=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain}
+
+{\def\pingu at color@deerhat{<deer hat>}
+\subkeyexplain{deer hat}{deer hat band}{color}{\pingu at color@deerhat at band}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[deer hat, deer hat band=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain}
+
\subsubsection{The mask}
-\showkeyexplain{mask}{color}{pingu at white!61!gray}(pingu at white!61!gray,mask band=pingu at main)
+\showkeyexplain{mask}{color}{pingu at white!61!gray}
Keep the penguin safe:
\begin{tcblisting}{@}
\begin{tikzpicture}
@@ -3223,7 +4251,7 @@
\keyexplain{left wing item flip}{true/false}{\if at pingu@wi at flip@left true\else false\fi}
- Some \hyperref[sub:wing-items]{wing items} do have a different style, depending on the wing they are in (e.g. they are mirrored). This option toggles the stile for the left wing.
+ Some \hyperref[sub:wing-items]{wing items} do have a different style, depending on the wing they are in (e.g.\ they are mirrored). This option toggles the style for the left wing.
\begin{tcblisting}{@}
\begin{tikzpicture}
\pingu[flag left, flag right,
@@ -3249,7 +4277,7 @@
\keyexplain{right wing item flip}{true/false}{\if at pingu@wi at flip@right true\else false\fi}
- Some \hyperref[sub:wing-items]{wing items} do have a different style, depending on the wing they are in (e.g. they are mirrored). This option toggles the stile for the right wing.
+ Some \hyperref[sub:wing-items]{wing items} do have a different style, depending on the wing they are in (e.g.\ they are mirrored). This option toggles the style for the right wing.
\begin{tcblisting}{@}
\begin{tikzpicture}
\pingu[flag left, flag right,
@@ -3316,7 +4344,6 @@
\end{tcblisting}
\endsubkeyexplain
-
\subsubsection{The cane}
\showkeyexplain{cane left}{color}{pingu at bronze}
@@ -3473,7 +4500,7 @@
\subsubsection{The lightsaber}
-\showkeyexplain{lightsaber left}{color}{pingu at blue}(pingu at blue)
+\showkeyexplain{lightsaber left}{color}{pingu at blue}
\begin{tcblisting}{}
\begin{tikzpicture}
\pingu[lightsaber left=green]
@@ -3630,7 +4657,7 @@
\endsubkeyexplain
-\showkeyexplain{lightsaber right}{color}{pingu at blue}(pingu at blue)
+\showkeyexplain{lightsaber right}{color}{pingu at blue}
\begin{tcblisting}{}
\begin{tikzpicture}
\pingu[lightsaber right=green]
@@ -3939,6 +4966,120 @@
\end{tcblisting}
\endsubkeyexplain
+\subsubsection{The broom}
+
+\showkeyexplain{broom left}{color}{pingu at bronze}
+\begin{tcblisting}{}
+\begin{tikzpicture}
+ \pingu[broom left=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endshowkeyexplain
+
+\subkeyexplain{broom left}{broom left length}{length}{\pingu at broom@left at length}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[broom left, broom left length=17mm]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{broom left}{broom left shift}{length}{\pingu at broom@left at shift}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[broom left, broom left shift=4mm]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{broom left}{broom left band}{color}{\pingu at color@broom at left@band}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[broom left, broom left band=pingu at green]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{broom left}{broom left bristles a}{color}{\pingu at color@broom at left@bristles at a}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[broom left, broom left bristles a=pingu at green]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{broom left}{broom left bristles b}{color}{currently hacky}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[broom left, broom left bristles b=pingu at green]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{broom left}{broom left bristles c}{color}{currently hacky}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[broom left, broom left bristles c=pingu at green]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\showkeyexplain{broom right}{color}{pingu at bronze}
+\begin{tcblisting}{}
+\begin{tikzpicture}
+ \pingu[broom right=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endshowkeyexplain
+
+\subkeyexplain{broom right}{broom right length}{length}{\pingu at broom@right at length}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[broom right, broom right length=17mm]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{broom right}{broom right shift}{length}{\pingu at broom@right at shift}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[broom right, broom right shift=4mm]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{broom right}{broom right band}{color}{\pingu at color@broom at right@band}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[broom right, broom right band=pingu at green]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{broom right}{broom right bristles a}{color}{\pingu at color@broom at right@bristles at a}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[broom right, broom right bristles a=pingu at green]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{broom right}{broom right bristles b}{color}{currently hacky}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[broom right, broom right bristles b=pingu at green]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{broom right}{broom right bristles c}{color}{currently hacky}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[broom right, broom right bristles c=pingu at green]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
\subsubsection{The flag}
The flag is special in that it is meant to be customized by commands so that the visible insignia is to the users liking.
@@ -4070,6 +5211,268 @@
\end{tcblisting}
\endshowkeyexplain
+\subsubsection{The present}
+
+{
+\def\pingu at color@presentleft{<present left>}
+\showkeyexplain{present left}{color}{pingu at red!50!pingu at black!60!red}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[present left=blue]
+\end{tikzpicture}
+\end{tcblisting}
+\endshowkeyexplain
+\def\pingu at color@presentleft at lid{<present left lid>}
+
+\def\pingu at present@left at width{<present left width>}
+\subkeyexplain{present left}{present left width}{length}{\pingu at present@left at width}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[present left, present left width=12mm]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\def\pingu at present@left at height{<present left height>}
+\subkeyexplain{present left}{present left height}{length}{\pingu at present@left at height}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[present left, present left height=12mm]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\def\pingu at color@presentleft at band{<present left band>}
+\subkeyexplain{present left}{present left ribbon}{color}{\pingu at color@presentleft at ribbon}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[present left, present left ribbon=blue]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+\subkeyexplain{present left}{present left band}{color}{(based on band)}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[present left, present left band=blue]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\def\pingu at present@left at band@width{<present left band width>}
+\subkeyexplain{present left}{present left band width}{length}{\pingu at present@left at band@width}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[present left, present left band width=4mm]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{present left}{present left xshift}{length}{\pingu at present@left at xshift}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[present left, present left xshift=3mm]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{present left}{present left yshift}{length}{\pingu at present@left at yshift}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[present left, present left yshift=3mm]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{present left}{present left band second height}{length}{\pingu at present@left at band@second at height}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[present left,
+ present left band second height=3mm]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{present left}{present left band second yshift}{length}{\pingu at present@left at band@second at yshift}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[present left,
+ present left band second yshift=3mm]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{present left}{present left lid}{color}{\pingu at color@presentleft at lid}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[present left, present left lid=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{present left}{present left lid height}{length}{\pingu at present@left at lid@height}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[present left, present left lid height=3mm]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{present left}{present left lid overhang}{length}{\pingu at present@left at lid@overhang}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[present left, present left lid overhang=1mm]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{present left}{present left lid yshift}{length}{\pingu at present@left at lid@yshift}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[present left, present left lid yshift=8mm]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{present left}{present left lid band}{color}{\pingu at color@presentleft at lid@band}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[present left, present left lid band=blue]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+}
+
+
+{
+\def\pingu at color@presentright{<present right>}
+\showkeyexplain{present right}{color}{pingu at red!50!pingu at black!60!red}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[present right=blue]
+\end{tikzpicture}
+\end{tcblisting}
+\endshowkeyexplain
+\def\pingu at color@presentright at lid{<present right lid>}
+
+\def\pingu at present@right at width{<present right width>}
+\subkeyexplain{present right}{present right width}{length}{\pingu at present@right at width}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[present right, present right width=12mm]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\def\pingu at present@right at height{<present right height>}
+\subkeyexplain{present right}{present right height}{length}{\pingu at present@right at height}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[present right, present right height=12mm]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\def\pingu at color@presentright at band{<present right band>}
+\subkeyexplain{present right}{present right ribbon}{color}{\pingu at color@presentright at ribbon}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[present right, present right ribbon=blue]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+\subkeyexplain{present right}{present right band}{color}{\pingu at color@presentright at band}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[present right, present right band=blue]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\def\pingu at present@right at band@width{<present right band width>}
+\subkeyexplain{present right}{present right band width}{length}{\pingu at present@right at band@width}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[present right, present right band width=4mm]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{present right}{present right xshift}{length}{\pingu at present@right at xshift}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[present right, present right xshift=3mm]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{present right}{present right yshift}{length}{\pingu at present@right at yshift}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[present right, present right yshift=3mm]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{present right}{present right band second height}{length}{\pingu at present@right at band@second at height}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[present right,
+ present right band second height=3mm]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{present right}{present right band second yshift}{length}{\pingu at present@right at band@second at yshift}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[present right,
+ present right band second yshift=3mm]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{present right}{present right lid}{color}{\pingu at color@presentright at lid}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[present right, present right lid=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{present right}{present right lid height}{length}{\pingu at present@right at lid@height}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[present right, present right lid height=3mm]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{present right}{present right lid overhang}{length}{\pingu at present@right at lid@overhang}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[present right,
+ present right lid overhang=1mm]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{present right}{present right lid yshift}{length}{\pingu at present@right at lid@yshift}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[present right, present right lid yshift=8mm]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{present right}{present right lid band}{color}{(based on band)}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[present right, present right lid band=blue]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+}
+
\subsubsection{The staff}
\showkeyexplain{staff left}{color}{pingu at bronze}
@@ -4089,6 +5492,48 @@
\end{tcblisting}
\endsubkeyexplain
+\subkeyexplain{staff left}{staff left raise}{length}{\pingu at staff@left at raise}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[staff left, staff left raise=-2mm]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{staff left}{staff left code}{tikz-code}{}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[staff left, staff left code={\fill circle[radius=2mm];}]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{staff left}{staff left code app}{tikz-code}{}
+Similar to \keyref{staff left code} but does not override but (locally) append to previous calls.
+\endsubkeyexplain
+
+\subkeyexplain{staff left}{staff left code pre}{tikz-code}{}
+Similar to \keyref{staff left code} but does not override but (locally) prepend to previous calls.
+\endsubkeyexplain
+
+\showkeyexplain{spear left}{color}{gray}
+Example of \keyref{staff left code app} that renders a little spear-tip:
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[spear left=cyan]
+\end{tikzpicture}
+\end{tcblisting}
+\endshowkeyexplain
+
+\showkeyexplain{cross left}{color}{pingu at bronze}
+Example of \keyref{staff left code app} that renders a little cross:
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[cross left]
+\end{tikzpicture}
+\end{tcblisting}
+\endshowkeyexplain
+
\showkeyexplain{staff right}{color}{pingu at bronze}
\begin{tcblisting}{@}
\begin{tikzpicture}
@@ -4106,6 +5551,423 @@
\end{tcblisting}
\endsubkeyexplain
+\subkeyexplain{staff right}{staff right raise}{length}{\pingu at staff@right at raise}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[staff right, staff right raise=-2mm]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{staff right}{staff right code}{tikz-code}{}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[staff right, staff right code={\fill circle[radius=2mm];}]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{staff right}{staff right code app}{tikz-code}{}
+Similar to \keyref{staff right code} but does not override but (locally) append to previous calls.
+\endsubkeyexplain
+
+\subkeyexplain{staff right}{staff right code pre}{tikz-code}{}
+Similar to \keyref{staff right code} but does not override but (locally) prepend to previous calls.
+\endsubkeyexplain
+
+\showkeyexplain{spear right}{color}{gray}
+Example of \keyref{staff right code app} that renders a little spear-tip:
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[spear right=cyan]
+\end{tikzpicture}
+\end{tcblisting}
+\endshowkeyexplain
+
+\showkeyexplain{cross right}{color}{pingu at bronze}
+Example of \keyref{staff right code app} that renders a little cross:
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[cross right]
+\end{tikzpicture}
+\end{tcblisting}
+\endshowkeyexplain
+
+\subsubsection{The hammer}
+
+\showkeyexplain{hammer left}{color}{pingu at silver}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[hammer left=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endshowkeyexplain
+
+\subkeyexplain{hammer left}{hammer left handle length}{length}{\pingu at hammer@left at length}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[hammer left, hammer left handle length=20mm]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{hammer left}{hammer left handle shift}{length}{\pingu at hammer@left at shift}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[hammer left, hammer left handle shift=2mm]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{hammer left}{hammer left width}{length}{\pingu at hammer@left at width}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[hammer left, hammer left width=2mm]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{hammer left}{hammer left height}{length}{\pingu at hammer@left at height}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[hammer left, hammer left height=2mm]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{hammer left}{hammer left xshift}{length}{\pingu at hammer@left at xshift}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[hammer left, hammer left xshift=2mm]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{hammer left}{hammer left yshift}{length}{\pingu at hammer@left at yshift}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[hammer left, hammer left yshift=2mm]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{hammer left}{hammer left handle}{color}{\pingu at color@hammer at left@handle}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[hammer left, hammer left handle=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\keyexplain{hammer left with knob}{color}{pingu at silver}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[hammer left=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endkeyexplain
+
+\showkeyexplain{hammer right}{color}{pingu at silver}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[hammer right=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endshowkeyexplain
+
+\subkeyexplain{hammer right}{hammer right handle length}{length}{\pingu at hammer@right at length}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[hammer right, hammer right handle length=20mm]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{hammer right}{hammer right handle shift}{length}{\pingu at hammer@right at shift}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[hammer right, hammer right handle shift=2mm]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{hammer right}{hammer right width}{length}{\pingu at hammer@right at width}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[hammer right, hammer right width=2mm]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{hammer right}{hammer right height}{length}{\pingu at hammer@right at height}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[hammer right, hammer right height=2mm]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{hammer right}{hammer right xshift}{length}{\pingu at hammer@right at xshift}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[hammer right, hammer right xshift=2mm]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{hammer right}{hammer right yshift}{length}{\pingu at hammer@right at yshift}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[hammer right, hammer right yshift=2mm]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{hammer right}{hammer right handle}{color}{\pingu at color@hammer at right@handle}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[hammer right, hammer right handle=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\keyexplain{hammer right with knob}{color}{pingu at silver}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[hammer right=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endkeyexplain
+
+\subsubsection{The magnifier}
+
+\showkeyexplain{magnifier left}{color}{pingu at bronze}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[magnifier left=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endshowkeyexplain
+
+\subkeyexplain{magnifier left}{magnifier left handle length}{length}{\pingu at magnifier@left at length}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[magnifier left, magnifier left handle length=4mm]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{magnifier left}{magnifier left handle shift}{length}{\pingu at magnifier@left at shift}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[magnifier left, magnifier left handle shift=2mm]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{magnifier left}{magnifier left size}{length}{\pingu at magnifier@left at size}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[magnifier left, magnifier left size=2mm]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{magnifier left}{magnifier left glass}{color}{\pingu at color@magnifier at left@glass}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[magnifier left, magnifier left glass=pingu at red]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{magnifier left}{magnifier left opacity}{opacity}{\pingu at magnifier@left at opacity}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[magnifier left, magnifier left opacity=.15]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{magnifier left}{magnifier left thick}{length}{\pingu at magnifier@left at thick}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[magnifier left, magnifier left thick=1mm]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{magnifier left}{magnifier left xshift}{length}{\pingu at magnifier@left at xshift}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[magnifier left, magnifier left xshift=1mm]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{magnifier left}{magnifier left yshift}{length}{\pingu at magnifier@left at yshift}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[magnifier left, magnifier left yshift=1mm]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+
+\showkeyexplain{magnifier right}{color}{pingu at bronze}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[magnifier right=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endshowkeyexplain
+
+\subkeyexplain{magnifier right}{magnifier right handle length}{length}{\pingu at magnifier@right at length}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[magnifier right, magnifier right handle length=4mm]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{magnifier right}{magnifier right handle shift}{length}{\pingu at magnifier@right at shift}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[magnifier right, magnifier right handle shift=2mm]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{magnifier right}{magnifier right size}{length}{\pingu at magnifier@right at size}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[magnifier right, magnifier right size=2mm]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{magnifier right}{magnifier right glass}{color}{\pingu at color@magnifier at right@glass}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[magnifier right, magnifier right glass=pingu at red]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{magnifier right}{magnifier right opacity}{opacity}{\pingu at magnifier@right at opacity}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[magnifier right, magnifier right opacity=.15]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{magnifier right}{magnifier right thick}{length}{\pingu at magnifier@right at thick}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[magnifier right, magnifier right thick=1mm]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{magnifier right}{magnifier right xshift}{length}{\pingu at magnifier@right at xshift}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[magnifier right, magnifier right xshift=1mm]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{magnifier right}{magnifier right yshift}{length}{\pingu at magnifier@right at yshift}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[magnifier right, magnifier right yshift=1mm]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subsubsection{The plank}
+
+\showkeyexplain{plank left}{color}{pingu at bronze!80!pingu at black}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[plank left=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endshowkeyexplain
+
+\subkeyexplain{plank left}{plank left width}{length}{\pingu at plank@left at width}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[plank left, plank left width=2mm]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{plank left}{plank left height}{length}{\pingu at plank@left at height}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[plank left, plank left height=2mm]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{plank left}{plank left xshift}{length}{\pingu at plank@left at xshift}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[plank left, plank left xshift=2mm]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{plank left}{plank left yshift}{length}{\pingu at plank@left at yshift}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[plank left, plank left yshift=2mm]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\showkeyexplain{plank right}{color}{pingu at bronze!80!pingu at black}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[plank right=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endshowkeyexplain
+
+\subkeyexplain{plank right}{plank right width}{length}{\pingu at plank@right at width}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[plank right, plank right width=2mm]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{plank right}{plank right height}{length}{\pingu at plank@right at height}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[plank right, plank right height=2mm]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{plank right}{plank right xshift}{length}{\pingu at plank@right at xshift}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[plank right, plank right xshift=2mm]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{plank right}{plank right yshift}{length}{\pingu at plank@right at yshift}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[plank right, plank right yshift=2mm]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
\subsubsection{The laptop}
\showkeyexplain{laptop left}{color}{gray!80!pingu at white}
@@ -4280,7 +6142,7 @@
\end{tcblisting}
\endsubkeyexplain
-\subsubsection{The Horse}
+\subsubsection{The horse}
\showkeyexplain{horse left}{color}{pingu at bronze!80!pingu at black}
Give it a horse:
@@ -4300,6 +6162,15 @@
\end{tcblisting}
\endsubkeyexplain
+\subkeyexplain{horse left}{horse left donkey}{true/false}{false}
+Draw the horse with modifications to look more like a donkey:
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[horse left,horse left donkey=true]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
\subkeyexplain{horse left}{horse left has base}{true/false}{false}
\begin{tcblisting}{@}
\begin{tikzpicture}
@@ -4439,7 +6310,63 @@
\end{tcblisting}
\endsubkeyexplain
-\subkeyexplain{horse left}{horse left xshift}{color}{\pingu at x@horseleft at xshift}
+\subkeyexplain{horse left}{horse left front left hoof}{color}{}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[horse left,horse left front left hoof=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{horse left}{horse left front right hoof}{color}{}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[horse left,horse left front right hoof=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{horse left}{horse left back left hoof}{color}{}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[horse left,horse left back left hoof=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{horse left}{horse left back right hoof}{color}{}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[horse left,horse left back right hoof=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{horse left}{horse left front hoofs}{color}{}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[horse left,horse left front hoofs=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{horse left}{horse left back hoofs}{color}{}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[horse left,horse left back hoofs=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{horse left}{horse left hoofs}{color}{gray!80!white}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[horse left,horse left hoofs=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{horse left}{horse left xshift}{length}{\pingu at x@horseleft at xshift}
This key reacts with the \keyref{horse left flip} option!
\begin{tcblisting}{@}
\begin{tikzpicture}
@@ -4448,7 +6375,7 @@
\end{tcblisting}
\endsubkeyexplain
-\subkeyexplain{horse left}{horse left yshift}{color}{\pingu at x@horseleft at yshift}
+\subkeyexplain{horse left}{horse left yshift}{length}{\pingu at x@horseleft at yshift}
\begin{tcblisting}{@}
\begin{tikzpicture}
\pingu[horse left,horse left yshift=1cm]
@@ -4485,6 +6412,16 @@
\end{tcblisting}
\endsubkeyexplain
+\subkeyexplain{horse right}{horse right donkey}{true/false}{false}
+Draw the horse with modifications to look more like a donkey:
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[horse right,horse right donkey=true]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+
\subkeyexplain{horse right}{horse right has base}{true/false}{false}
\begin{tcblisting}{@}
\begin{tikzpicture}
@@ -4624,6 +6561,62 @@
\end{tcblisting}
\endsubkeyexplain
+\subkeyexplain{horse right}{horse right front left hoof}{color}{}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[horse right,horse right front left hoof=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{horse right}{horse right front right hoof}{color}{}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[horse right,horse right front right hoof=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{horse right}{horse right back left hoof}{color}{}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[horse right,horse right back left hoof=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{horse right}{horse right back right hoof}{color}{}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[horse right,horse right back right hoof=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{horse right}{horse right front hoofs}{color}{}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[horse right,horse right front hoofs=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{horse right}{horse right back hoofs}{color}{}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[horse right,horse right back hoofs=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
+\subkeyexplain{horse right}{horse right hoofs}{color}{gray!80!white}
+\begin{tcblisting}{@}
+\begin{tikzpicture}
+ \pingu[horse right,horse right hoofs=green]
+\end{tikzpicture}
+\end{tcblisting}
+\endsubkeyexplain
+
\subkeyexplain{horse right}{horse right xshift}{color}{\pingu at x@horseright at xshift}
This key reacts with the \keyref{horse right flip} option!
\begin{tcblisting}{@}
@@ -4670,7 +6663,7 @@
\end{tcblisting}
\endshowkeyexplain
-\begin{tcblisting}{sidebyside=false, title=Cloak-Showcase}
+\begin{tcblisting}{sidebyside=false, title={\strut Cloak-Showcase}}
\begin{tikzpicture}
\pingu[wings wave, cloak]
\pingu[wings shock, cloak, xshift=3.5cm]
@@ -4875,5 +6868,332 @@
\end{tcblisting}
\endsubkeyexplain}
-\lstset{breakatwhitespace}\printindex
-\end{document}
\ No newline at end of file
+
+% set up for inclusion
+\lstset{includerangemarker=false,rangeprefix={\%\ <}, rangesuffix={>}}
+\newcommand\includecode[2][../tex/tikzpingus.sty]{\lstinputlisting[linerange=#2-@#2,style=lstpingu,language=pinguinternallang,numbers=left,numberstyle={\tiny\@declaredcolor{gray}\sffamily},numbersep=5pt]{#1}}
+\def\current at indexfile{\jobname-internals}
+% gobble leading pingu for indexing
+\def\@gobblekey#1{%
+ \IfBeginWith{#1}{pingu@}{%
+ \StrDel[1]{#1}{pingu@}[#1]\protected at xdef#1{#1}%
+ }{%
+ \IfBeginWith{#1}{@pingu@}{%
+ \StrDel[1]{#1}{@pingu@}[#1]\protected at xdef#1{#1}%
+ }{}%
+}}
+\newsavebox\warningpengu
+\setbox0=\hbox{\tikz{\pingu[wings shock,eyes shock,small]}}
+\setbox\warningpengu=\hbox{\tikz{\node[scale=.35] (a) at(0,0) {\box0}; \node[above] at(a.north) {\faExclamation};}}
+\def\important{\par\mbox{\textit{Important:}\marginnote{\usebox\warningpengu}}}
+
+\section{Larger Examples}
+
+\subsection{A chessboard}
+
+Let's assume, that we want to have a board of penguins playing chess. For starters, we need the individual pieces.
+\begin{tcblisting}{title={The pawns},externalize listing=chess-pawns}
+\tikz{\pingu[body=pingu at black]}
+\tikz{\pingu[:back,xshift=3cm]}
+\end{tcblisting}
+
+% TODO: deal with problems: D when using two rooks front/back in same picture
+\begin{tcblisting}{title={The rooks},externalize listing=chess-rooks}
+\tikz{\pingu[body=pingu at black,rook]}
+\tikz{\pingu[:back,rook,rook hatch=false]}
+\end{tcblisting}
+
+For the knights we make use of the \keyref{horse behind} extra, which itself is based on the \keyref{horse left}/\keyref{horse right} wing item:
+\begin{tcblisting}{title={The knights},externalize listing=chess-knights}
+\tikz{\pingu[body=pingu at black,horse behind]}
+\tikz{\pingu[:back,horse behind=pingu at black,on horse flip]}
+\end{tcblisting}
+
+\begin{tcblisting}{title={The queens},externalize listing=chess-queens}
+\tikz{\pingu[body=pingu at black,princess crown=pingu at bronze]}
+\tikz{\pingu[:back,princess crown=pingu at bronze]}
+\end{tcblisting}
+
+
+\begin{tcblisting}{title={The kings},externalize listing=chess-kings}
+\tikz{\pingu[body=pingu at black,crown]}
+\tikz{\pingu[:back,crown]}
+\end{tcblisting}
+
+
+\begin{tcblisting}{title={The bishops},externalize listing=chess-bishops}
+\tikz{\pingu[body=pingu at black,cross left=pingu at black,mitra]}
+\tikz{\pingu[:back,cross left,mitra]}
+\end{tcblisting}
+
+\section{The Internals}
+The goal of this section is to explain the inner workings of the package to aid other people in helping me extending and mainting the penguins.
+
+\subsection{General Commands}
+
+\begin{commandexplain}[name]{pingu at name}{}
+ Holds the name of the penguin.
+\end{commandexplain}
+
+\begin{commandexplain}{pingu at one}{}
+ Do not change this dimension as it represents one milli meter as the base unit.
+\end{commandexplain}
+
+\subsubsection{Color Management}
+There is not a lot of magic in the color handling of this package.
+
+\begin{commandexplain}{pingu at color}{\mand{name}\mand{color}}
+ Creates a macro \cmd{pingu at color@<name>} that links to the given color:
+ \includecode{pingu at color}
+ I decided against the usage of \cmd{colorlet}, to support \cmdref{@pingu at none} and dynamic redefinition of the colors.
+\end{commandexplain}
+
+\begin{commandexplain}{@pingu at none}{}
+ Holds the special color to hide the drawing of specific components as described within \autoref{Colors} (holds the value: \say{\@pingu at none}).
+ If you redefine this command, you redefine this hidden color. Hover, if done outside of the preamble, this may result in weird side effects due to expansions.
+\end{commandexplain}
+
+As shown in \autoref{Colors}, this is the definition of the colors, with the helper-macro \cmddef{@pingu at color@}, which i created solely for me editor to highlight the colors accordingly:
+\includecode{color\ definitions}
+
+
+\subsubsection{Selections}
+TODO: explain selections
+
+\begin{commandexplain}{pingu at create@selection}{\mand{name}\mand{none default}}
+ Creates a new enumeration-like structure that can be used to register a family of options (see \autoref{internal:eyes} for an example).
+ The \textit{none default} is used for the default member of the selection: \textit{none} which is active, whenever no other key is selected by \cmdref{pingu@<selection>@select}.
+ You can add keys by using \cmdref{pingu@<selection>@add} and execute the selection by \cmdref{@pingu at drawer@<selection>@}.
+\end{commandexplain}
+
+\begin{subcommandexplain}{pingu at create@selection}{pingu@<selection>@select}{\mand{select}}
+
+\end{subcommandexplain}
+
+\begin{subcommandexplain}{pingu at create@selection}{pingu@<selection>@add}{\mand{select}}
+
+\end{subcommandexplain}
+
+\begin{subcommandexplain}{pingu at create@selection}{@pingu at drawer@<selection>@}{}
+
+\end{subcommandexplain}
+
+\subsection{The Eyes}\label{internal:eyes}
+
+\subsubsection{Important Commands}
+
+\begin{commandexplain}{pingu at eye@shift}{}
+ This dimension holds a hardcoded value to be used as the offset for eyes. Its default value is \the\pingu at eye@shift. It may be removed in the future (or replaced by an option).
+\end{commandexplain}
+
+\subsubsection{The Code}
+
+The eyes of the penguin are controlled by two selections for the left, and the right eye. Because we always want the coordinates for the right and the left eye (as presented in \autoref{pingu-coordinates}), the \textit{none}-version of \cmdref{pingu at create@selection} creates those:
+\includecode{eyes\ selectors}
+With this code, we define the six following commands: \cmddef{pingu at lefteye@select}, \cmddef{pingu at lefteye@add}, \cmddef{@pingu at drawer@lefteye@}, \cmddef{pingu at righteye@select}, \cmddef{pingu at righteye@add}, and \cmddef{@pingu at drawer@righteye@}.
+
+Within the initialization of all penguin options, we use these commands. Furthermore, \keyref{eyes} acts as a comfort option which operates on both selectors:
+% \pgfqkeys{/pingu}{
+\includecode{eyes\ keys}
+Both eyes have two colors to work with: \cmdcoldef{eye at left}, \cmdcoldef{eye at second@left} for the left as well as \cmdcoldef{eye at right} and \cmdcoldef{eye at second@right} for the right eye.
+
+\subsubsection{Adding new Eyes}
+Now on how to add new eyes. While it is possible to use \cmdref{pingu at lefteye@add} and \cmdref{pingu at righteye@add}, setting up the corresponding \say{eye} and \say{eyes} comfort-methods is rather tedious.
+For this, i created the command \cmdref{pingu at eyes@s}\ldots
+
+\begin{commandexplain}{pingu at eyes@s}{\mand{name}\mand{left-eye}\mand{right-eye}\opt[pingu at black]{default color}}
+ Allows to easily add new eyes.
+ \important\space Your code for the eyes \textit{must} create the coordinates \lpingu{\\pingu at name-eye-left} and \lpingu{\\pingu at name-eye-right} respectively. This is not checked! It is recommended to use the coordinates \lpingu{\\pingu at name-eye-back-left} and \lpingu{\\pingu at name-eye-back-right} for reference.
+\end{commandexplain}
+The macro \cmdref{pingu at eyes@s} is defined with the help of \cmddef{pingu at eyes@s@} like this:
+\includecode{pingu at eyes@s}
+
+As an example, this is the definition of the \say{normal eyes} (\keyref{eyes normal}) in the code:
+\includecode{eyes\ normal}
+As another example, this is the definition of the \say{shiny eyes} (\keyref{eyes shiny}):
+\includecode{eyes\ shiny}
+The usage of \cmddef{eyebaseang} is outdated and will probably be removed in the future.
+
+
+\subsection{The Bill}\label{internal:bill}
+
+\subsubsection{The Code}
+
+The bill of the penguin is controlled by one selection. As we always want the coordinates for theoretical bill position (as presented in \autoref{pingu-coordinates}), the \textit{none}-version of \cmdref{pingu at create@selection} creates it:
+\includecode{bill\ selector}
+This code, defines three commands: \cmddef{pingu at bill@select}, \cmddef{pingu at bill@add}, \cmddef{@pingu at drawer@bill@}.
+
+Within the initialization of all penguin options, we use these commands:
+% \pgfqkeys{/pingu}{
+\includecode{bill\ keys}
+With this, the bill has one color to work with: \cmdcoldef{bill}.
+
+\subsubsection{Adding new Bills}
+Now on how to add new bills. While it is possible to use \cmdref{pingu at bill@add}, setting up the \say{bill} comfort-methods is rather tedious.
+For this, i created the command \cmdref{pingu at bill@s}\ldots
+
+\begin{commandexplain}{pingu at bill@s}{\mand{name}\mand{bill}}
+ Allows to easily add new bills.\BlockString{-bill-bottom}\BlockString{-bill}
+ \important\space Your code for the bill \textit{must} create the coordinate \lpingu{\\pingu at name-bill-bottom}. This is not checked! It is recommended to use the coordinate \lpingu{\\pingu at name-bill} for reference.
+\end{commandexplain}
+The macro \cmdref{pingu at bill@s} is defined like this:
+\includecode{pingu at bill@s}
+
+
+As an example, this is the definition of the \say{normal bill} (\keyref{bill normal}) in the code:
+\includecode{bill\ normal}
+As another example, this is the definition of the \say{flat bill} (\keyref{bill flat}):
+\includecode{bill\ flat}
+
+\subsection{The Body Type}\label{internal:body-type}
+
+\subsubsection{Important Commands}
+
+\begin{commandexplain}{pingu at w@half}{}
+ This dimension holds a hardcoded value defining the half width of the penguin. Its default value is \the\pingu at w@half.
+\end{commandexplain}
+
+\begin{commandexplain}{pingu at side@h at half}{}
+ This dimension holds a hardcoded value defining the half height of the lower part of the penguin. Its default value is \the\pingu at side@h at half. See \cmdref{pingu at head@h at half} for the additional head-height.
+\end{commandexplain}
+
+\begin{commandexplain}{pingu at head@h at half}{}
+ This dimension holds a hardcoded value defining the half height of the upper (head) part of the penguin. Its default value is \the\pingu at head@h at half.
+\end{commandexplain}
+
+\begin{commandexplain}{pingu at bend}{}
+ This dimension holds a hardcoded value used as a basis for bend lines. Its default value is \the\pingu at bend. It may be removed in the future (or replaced by an option).
+\end{commandexplain}
+
+\begin{commandexplain}{pingu at lower@off}{}
+ This dimension holds a hardcoded value used to offset the white inner parts of the penguin (for the bottom part). Its default value is \the\pingu at lower@off. It may be removed in the future (or replaced by an option).
+\end{commandexplain}
+
+\begin{commandexplain}{pingu at outer@off}{}
+ This dimension holds a hardcoded value used to offset the lower part of the basic penguin. Its default value is \the\pingu at outer@off. It may be removed in the future (or replaced by an option).
+\end{commandexplain}
+
+\begin{commandexplain}{pingu at foot@outer at w}{}
+ This dimension holds a hardcoded value defining the width of the outer feet. Its default value is \the\pingu at foot@outer at w. It may be removed in the future (or replaced by an option).
+\end{commandexplain}
+
+\begin{commandexplain}{pingu at foot@outer at h}{}
+ This dimension holds a hardcoded value defining the height of the outer feet. Its default value is \the\pingu at foot@outer at h. It may be removed in the future (or replaced by an option).
+\end{commandexplain}
+
+\begin{commandexplain}{pingu at foot@inner at w}{}
+ This dimension holds a hardcoded value defining the width of the inner feet. Its default value is \the\pingu at foot@inner at w. It may be removed in the future (or replaced by an option).
+\end{commandexplain}
+
+\begin{commandexplain}{pingu at foot@inner at h}{}
+ This dimension holds a hardcoded value defining the height of the inner feet. Its default value is \the\pingu at foot@inner at h. It may be removed in the future (or replaced by an option).
+\end{commandexplain}
+
+% \begin{commandexplain}{pingu at foot@single at w}{}
+% This dimension holds a hardcoded value defining the width of a single foot. Its default value is \the\pingu at foot@single at w. It may be removed in the future (or replaced by an option).
+% \end{commandexplain}
+
+% \begin{commandexplain}{pingu at foot@single at h}{}
+% This dimension holds a hardcoded value defining the width of a single foot. Its default value is \the\pingu at foot@single at h. It may be removed in the future (or replaced by an option).
+% \end{commandexplain}
+
+\begin{commandexplain}{pingu at headcon@x}{}
+ This dimension holds a hardcoded value defining the x-position offseting the connection point of the penguin head. Its default value is \the\pingu at headcon@x. It may be removed in the future (or replaced by an option).
+\end{commandexplain}
+
+\begin{commandexplain}{pingu at headcon@y}{}
+ This dimension holds a hardcoded value defining the y-position offseting the connection point of the penguin head. Its default value is \the\pingu at headcon@y. It may be removed in the future (or replaced by an option).
+\end{commandexplain}
+
+\subsubsection{The Code}
+
+The body of the penguin is controlled by one selection. There are a lot of coordinates to be created by this command (as presented in \autoref{pingu-coordinates}). Furthermore, it must save some paths (\cmddef{pingu at lowerpingu}, \cmddef{pingu at upperpingu} and \cmddef{pingu at whitepingu}). Therefore, it is recommended, that you create a new one by first copying an existing definition. Due to its length, the \textit{none}-version of \cmdref{pingu at create@selection} uses \cmdref{pingu at x@bodytype at none} as a helper:\BlockString{bodytype}\BlockString{wings-side-}
+\includecode{bodytype\ selector}
+
+This code, defines three commands: \cmddef{pingu at bodytype@select}, \cmddef{pingu at bodytype@add}, \cmddef{@pingu at drawer@bodytype@}.
+
+The macro \cmddef{pingu at x@bodytype at none} is defined as follows:
+\includecode{pingu at x@bodytype at none}
+\important\space Please note, that when writing the initial penguin, i did not intend to allow additional body shapes. Therefore, most of the defaults and \say{globals} are must be defined here (alongside a lot of hardcoding).
+
+Within the initialization of all penguin options, we defuine the main colors:
+% \pgfqkeys{/pingu}{
+\includecode{bodytype\ keys}
+With this, the body has three colors to work with: \cmdcoldef{body at main}, \cmdcoldef{body at head}, and \cmdcoldef{body at front}.
+
+% TODO:
+% \subsubsection{Adding new Body Types}
+% Now on how to add new bills. While it is possible to use \cmdref{pingu at bill@add}, setting up the \say{bill} comfort-methods is rather tedious.
+% For this, i created the command \cmdref{pingu at bill@s}\ldots
+
+% \begin{commandexplain}{pingu at bill@s}{\mand{name}\mand{bill}}
+% Allows to easily add new bills.
+% \important\space Your code for the bill \textit{must} create the coordinate \lpingu{\\pingu at name-bill-bottom}. This is not checked! It is recommended to use the coordinate \lpingu{\\pingu at name-bill} for reference.
+% \end{commandexplain}
+% The macro \cmdref{pingu at bill@s} is defined like this:
+% \includecode{pingu at bill@s}
+
+
+% As an example, this is the definition of the \say{normal bill} (\keyref{bill normal}) in the code:
+% \includecode{bill\ normal}
+% As another example, this is the definition of the \say{flat bill} (\keyref{bill flat}):
+% \includecode{bill\ flat}
+
+% \important\space While i do have a one-line penguin definition somewhere (for my pen-plotter)
+% which i might include someday.
+
+\subsection{The Feet}\label{internal:feet}
+
+\subsubsection{Important Commands}
+
+\begin{commandexplain}{basicfeetbend}{}
+ This macro holds a hardcoded value to be used as the angle of rotation of the feet. Its default value is~\basicfeetbend. The left foot uses the negative value. It may be removed in the future (or replaced by an option).
+
+ The only reason for the command being user accessible is, that it was the primary way to modify the penguin in a previous version of the package.
+\end{commandexplain}
+
+\begin{commandexplain}{pingu at foot@single at w}{}
+ This dimension holds a hardcoded value to be used as the base foot width. Its default value is~\the\pingu at foot@single at w. It may be removed in the future (or replaced by an option).
+\end{commandexplain}
+
+\begin{commandexplain}{pingu at foot@single at h}{}
+ This dimension holds a hardcoded value to be used as the base foot height. Its default value is~\the\pingu at foot@single at h. It may be removed in the future (or replaced by an option).
+\end{commandexplain}
+
+\subsubsection{The Code}
+
+Similary to the eyes, the feet of the penguin are controlled by two selections for the left, and the right foot. There are no extra coordinates necessary, therefore \cmdref{pingu at create@selection} receives no argument for the \textit{none}-version:
+\includecode{feet\ selectors}
+This defines the six commands: \cmddef{pingu at leftfoot@select}, \cmddef{pingu at leftfoot@add}, \cmddef{@pingu at drawer@leftfoot@}, \cmddef{pingu at rightfoot@select}, \cmddef{pingu at rightfoot@add}, and \cmddef{@pingu at drawer@rightfoot@}.
+
+Within the initialization of all penguin options, we use these commands. Furthermore, \keyref{feet} acts as a comfort option which operates on both selectors:
+% \pgfqkeys{/pingu}{
+\includecode{feet\ keys}
+
+\BlockString{@pingu at feet@front}\subcmddef*{if at pingu@feet at front}{@pingu at feet@fronttrue}\subcmddef*{if at pingu@feet at front}{@pingu at feet@frontfalse}%
+The conditional \cmddef{if at pingu@feet at front} is defined above and defaults to \textit{false}:
+\includecode{feet\ conditional}
+Each foot has one color to work with:
+\cmdcoldef{foot at left} for the left and \cmdcoldef{foot at right} for the right foot.
+
+\subsubsection{Adding new Feet}
+Now on how to add new feet. While it is possible to use \cmdref{pingu at leftfoot@add} and \cmdref{pingu at rightfoot@add}, setting up the corresponding \say{foot} and \say{feet} comfort-methods is rather tedious.
+For this, i created the command \cmdref{pingu at feet@s}\ldots
+
+\begin{commandexplain}{pingu at feet@s}{\mand{name}\mand{left-foot}\mand{right-foot}\opt[pingu at yellow]{default color}}
+ Allows to easily add new feet.
+\end{commandexplain}
+The macro \cmdref{pingu at feet@s} is defined with the help of \cmddef{pingu at feet@s@} like this:
+\includecode{pingu at feet@s}
+
+As an example, this is the definition of the \say{normal feet} (\keyref{feet normal}) in the code:
+\includecode{feet\ normal}
+As another example, this is the definition of the \say{simple feet} (\keyref{feet simple}):
+\includecode{feet\ simple}
+
+\lstset{breakatwhitespace}
+\indexprologue{\label{normal-idx}This index shows all of the options and commands that a normal user of the package may use! See the \hyperref[internal-idx]{\indexinternalsoverviewname} for an overview of keys and commands used behind the scenes. Page numbers on the lowest level are hidden, but they can still be used as clickable hyperlinks.}
+\printindex[\jobname]
+\indexprologue{\label{internal-idx}The initial \cmd{pingu@} and \cmd{@pingu@} is ignored for indexing (as this would destroy the whole sense of the index).}
+\printindex[\jobname-internals]
+\end{document}
Added: trunk/Master/texmf-dist/tex/latex/tikzpingus/tikzpingus-bee.lib.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tikzpingus/tikzpingus-bee.lib.tex (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/tikzpingus/tikzpingus-bee.lib.tex 2023-09-18 20:05:29 UTC (rev 68310)
@@ -0,0 +1,64 @@
+% Florian Sihler, 2022
+% Licensed under GNU General Public License version 3
+% https://opensource.org/licenses/gpl-3.0.html
+% TODO: integrate?
+% TODO: allow to specify rotation anchor
+
+\pingu at create@extra{bee}{%
+ bee/.code = {\pingu at set@extra{bee}{true}\pingu at color{bee}{#1}},
+ bee/.default = pingu at yellow!60!pingu at white,%
+ bee body/.code = \pingu at color{bee at body}{#1},
+ bee eyes/.code = \pingu at color{bee at eyes}{#1},
+ bee wings/.code = \pingu at color{bee at wings}{#1},
+ bee mouth/.code = \pingu at color{bee at mouth}{#1},
+ bee blush/.code = \pingu at color{bee at blush}{#1},
+ bee position/.code args = {#1:(#2,#3)#4}{\def\pingu at x@bee at angle{#1}\def\pingu at x@bee at xshift{#2}\def\pingu at x@bee at yshift{#3}\def\pingu at x@bee at scale{#4}},
+}{bee body=pingu at black!82!gray,bee wings=pingu at blue!8!pingu at white,bee mouth=\pingu at color@bee at body,bee eyes=\pingu at color@bee at body,bee blush=pingu at red!21!\pingu at color@bee,bee position={-27.5:(8mm,15mm){.875}}}
+
+\def\pingu at bee@x at lbody{ (left) to[out=270,in=150] (0,-.725) to[out=30,in=270] (right)}
+
+\def\pingu at draw@ea at bee{%
+\scope[very path/.append style={line join=round},rotate around={\pingu at x@bee at angle:(\pingu at name-head)},shift={(\pingu at name-head)},shift={(\pingu at x@bee at xshift,\pingu at x@bee at yshift)},scale=\pingu at x@bee at scale]
+% wings
+\coordinate (wl) at(20:2.55mm);
+\coordinate (wr) at(160:2.55mm);
+\pingu at draw[fill=\pingu at color@bee at wings!80!white,rotate around=-32:(wl)]{\pingu at color@bee at body} (wl) ellipse [x radius=6.15mm, y radius=2.75mm];
+\pingu at draw[fill=\pingu at color@bee at wings!80!white,rotate around=32:(wr)]{\pingu at color@bee at body} (wr) ellipse [x radius=6.15mm, y radius=2.75mm];
+\pingu at draw[fill=\pingu at color@bee at wings,rotate around=19:(wl)]{\pingu at color@bee at body} (wl) ellipse [x radius=6.55mm, y radius=3.125mm];
+\pingu at draw[fill=\pingu at color@bee at wings,rotate around=-19:(wr)]{\pingu at color@bee at body} (wr) ellipse [x radius=6.55mm, y radius=3.125mm];
+% body
+\path (-.375,0) coordinate (left) -- (.375,0) coordinate (right);
+% TODO: block draw?
+\pingu at block[draw=\pingu at color@bee at body]{\pingu at color@bee at body} \pingu at bee@x at lbody;
+\scope\clip\pingu at bee@x at lbody;
+\foreach \angl in {30,1} {
+\pingu at block{\pingu at color@bee} (-\angl:.75) to[bend left=14] (180+\angl:.75) -- ++(0,-1.75mm)
+ to[bend right=14] (-\angl-14:.75) -- cycle;
+}\endscope
+% left and right arm
+\foreach\m/\s/\k in {right/-2.45/95,left/-.75/80} {
+\scope[shift=(\m),yshift=\s,rotate around=\k:(\m),scale=.166]
+\pingu at block{\pingu at color@bee at body} (-.965,0) arc(270:90:.29) -- ++(1.233,0) arc (90:-90:.29) -- cycle;
+\endscope}
+% sting
+\pingu at draw[line cap=round,thick]{\pingu at color@bee at body} (0,-.725) -- ++(0,-.035);
+% head
+\pingu at draw[fill=\pingu at color@bee,rounded corners=1.5pt]{\pingu at color@bee at body} (.85mm,-.55mm) to[bend right=30,looseness=.9] ([xshift=1.45mm,yshift=1.35mm]right) arc(0:180:{(.75cm+2*1.45mm)/2} and {(.75cm+2*1.45mm)/2.05}) to[bend right=30,looseness=.9] (-.85mm,-.55mm) -- cycle;
+% eyes [intersect with left and right]
+\pingu at block{\pingu at color@bee at eyes} (left|-0,2.265mm)++(.6mm,0) coordinate (el) circle[radius=.6mm];
+\coordinate (ell) at ([yshift=-.8mm]el);
+\pingu at block[rotate around=3:(ell)]{\pingu at color@bee at blush} ([yshift=-.8mm]el) ellipse[x radius=.412mm, y radius=.165mm];
+\pingu at block{\pingu at color@bee at eyes} (right|-0,2.265mm)++(-.6mm,0) coordinate (er) circle[radius=.6mm];
+\coordinate (err) at ([yshift=-.8mm]er);
+\pingu at block[rotate around=-1:(err)]{\pingu at color@bee at blush} ([yshift=-.8mm]er) ellipse[x radius=.4mm, y radius=.155mm];
+% mouth
+\scope[yshift=1mm]
+\pingu at draw[semithick,line cap=round]{\pingu at color@bee at mouth} (-.6mm,0) arc (180:360:.6mm and .415mm);
+% antenna
+\pingu at draw[line cap=round]{\pingu at color@bee at body} (123:4mm) to[out=110,in=-41] ++(-1mm,3mm) coordinate (@);
+\pingu at block[rotate around=-41:(@)]{\pingu at color@bee at body} ([xshift=-.1mm,yshift=-.185mm]@) ellipse[x radius=.55mm,y radius=.35mm];
+\pingu at draw[line cap=round]{\pingu at color@bee at body} (57:4mm) to[out=70,in=180+41] ++(1mm,3mm) coordinate (@);
+\pingu at block[rotate around=41:(@)]{\pingu at color@bee at body} ([xshift=-.1mm,yshift=-.2mm]@) ellipse[x radius=.55mm,y radius=.35mm];
+\endscope
+\endscope
+}
\ No newline at end of file
Property changes on: trunk/Master/texmf-dist/tex/latex/tikzpingus/tikzpingus-bee.lib.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/tex/latex/tikzpingus/tikzpingus-christmas.lib.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tikzpingus/tikzpingus-christmas.lib.tex 2023-09-18 01:27:40 UTC (rev 68309)
+++ trunk/Master/texmf-dist/tex/latex/tikzpingus/tikzpingus-christmas.lib.tex 2023-09-18 20:05:29 UTC (rev 68310)
@@ -39,4 +39,115 @@
\path (\pingu at name-santa-beard-\li) -- (\pingu at name-santa-beard-\i) coordinate[pos=.5,yshift=-1.1pt,xshift=.133pt] (\pingu at name-santa-beard-\li); % smoll shift
\fi
}}\fi
+}
+
+\pingu at create@extra{woolhat}{%
+ wool hat/.code = \pingu at set@extra{woolhat}{true}\pingu at color{woolhat}{#1}\pgfqkeys{/pingu}{hair=\@pingu at none},
+ wool hat/.default = pingu at blue!57!pingu at black,
+ wool hat second/.code = \pingu at color{woolhat at second}{#1},
+ wool hat bobble/.code = \pingu at color{woolhat at bobble}{#1}
+}{wool hat second={\pingu at color@woolhat!55!pingu at white},wool hat bobble={\pingu at color@woolhat at second}}
+\def\pingu at draw@ea at woolhat{%
+\path ([yshift=.5mm,xshift=.165mm]\pingu at name-head-center)+(165:\pingu at w@half{} and \pingu at head@h at half) coordinate (\pingu at name-wool-right);
+\path ([yshift=.5mm,xshift=-.045mm]\pingu at name-head-center)+(4:\pingu at w@half{} and \pingu at head@h at half) coordinate (\pingu at name-wool-left);
+\pingu at layer{middle}[]
+\pingu at block{\pingu at color@woolhat at second} (\pingu at name-wool-right) to[out=37,in=170] (\pingu at name-wool-left) to[out=50,in=-55] ++(0,1.52mm) coordinate (\pingu at name-wool-left-up)
+to[out=167,in=38] coordinate[pos=.915] (\pingu at name-wool-ur) coordinate[pos=.055] (\pingu at name-wool-ul) ([yshift=1.5mm]\pingu at name-wool-right) coordinate (\pingu at name-wool-right-up) to[out=240,in=140] cycle;
+\endpingu at layer
+\path (\pingu at name-wool-left-up) -- (\pingu at name-wool-right-up) coordinate[pos=.455,yshift=9.75mm] (@mid);
+\pingu at block{\pingu at color@woolhat} (\pingu at name-wool-right-up) to[out=71,in=203] [rounded corners=2pt] (@mid) to[out=-34,in=100] [sharp corners] (\pingu at name-wool-left-up) to[in=37,out=172] cycle;
+\pingu at layer{background}[]
+\pingu at block{\pingu at color@woolhat at bobble} (@mid) circle [radius=1.25mm];
+\endpingu at layer
+}
+
+
+\pingu at create@extra{deerhat}{%
+ deer hat/.code = \pingu at set@extra{deerhat}{true}\pingu at color{deerhat}{#1}\pgfqkeys{/pingu}{hair=\@pingu at none},
+ deer hat/.default = pingu at bronze!57!pingu at black,
+ deer hat b/.code = \pingu at color{deerhat at b}{#1},
+ deer hat band/.code = \pingu at color{deerhat at band}{#1},
+}{deer hat band={\pingu at color@deerhat!85!pingu at black},deer hat b=\pingu at color@deerhat}
+\pgfmathsetmacro\pingu at deerhat@baseang at l{90-360*(1-\pinguanglehl)}
+\pgfmathsetmacro\pingu at deerhat@baseang at r{90-360*(1-\pinguanglehr)}
+\def\pingu at deerhat@baseoff{47}
+\def\pingu at deerhat@yshift{.15mm}
+\def\pingu at deerhat@linewidth{1.32mm}
+\def\pingu at deerhat@headoff at l{22}
+\def\pingu at deerhat@headoff at r{19}
+\def\pingu at draw@ea at deerhat{%
+\path ([yshift=-\pingu at deerhat@yshift]\pingu at name-head-left) arc (\pingu at deerhat@baseang at l:\pingu at deerhat@baseang at l-\pingu at deerhat@baseoff:\pingu at w@half{} and \pingu at head@h at half) coordinate[yshift=.05mm] (@target);
+\pingu at draw[line width=.7mm]{\pingu at color@deerhat at band} ([xshift=-.8mm]@target) arc (\pingu at deerhat@baseang at l-\pingu at deerhat@baseoff:360+\pingu at deerhat@baseang at r+\pingu at deerhat@baseoff:\pingu at w@half{}-.8mm and \pingu at head@h at half);
+
+\path ([yshift=-\pingu at deerhat@yshift]\pingu at name-head-top) arc (90:90-\pingu at deerhat@headoff at l:\pingu at w@half{} and \pingu at head@h at half) coordinate (@left);
+\path ([yshift=-\pingu at deerhat@yshift]\pingu at name-head-top) arc (90:90+\pingu at deerhat@headoff at r:\pingu at w@half{} and \pingu at head@h at half) coordinate (@right);
+
+\pgfonlayer{background}
+\pingu at draw[line width=\pingu at deerhat@linewidth,rounded corners=2pt,line cap=round]{\pingu at color@deerhat} (@left) to[bend right=4] ++(.85mm,1.5mm) coordinate (@a) -- ++(3.15mm,.5mm) coordinate (@b) -- ++(4.65mm,4.35mm) coordinate[pos=.5] (@c) to[bend right=10] ++(-.75mm,2.55mm);
+\pingu at draw[line width=\pingu at deerhat@linewidth,rounded corners=2pt,line cap=round]{\pingu at color@deerhat} ([xshift=-.135mm,yshift=-.425mm]@a) to[bend left=3] ++(1mm,3.9mm) ([xshift=-.4mm,yshift=-.05mm]@b) to[bend right=2] ++(3.75mm,.1mm) (@c) to[bend left=12] ++(-1mm,3.5mm);
+\pingu at draw[line width=\pingu at deerhat@linewidth,rounded corners=2pt,line cap=round]{\pingu at color@deerhat at b} (@right) to[bend left=4] ++(-.85mm,1.5mm) coordinate (@a) -- ++(-3.15mm,.5mm) coordinate (@b) -- ++(-4.65mm,4.35mm) coordinate[pos=.5] (@c) to[bend left=10] ++(.75mm,2.55mm);
+\pingu at draw[line width=\pingu at deerhat@linewidth,rounded corners=2pt,line cap=round]{\pingu at color@deerhat at b} ([yshift=-.425mm,xshift=.135mm]@a) to[bend right=3] ++(-1mm,3.9mm) ([xshift=.4mm,yshift=-.05mm]@b) to[bend right=2] ++(-3.75mm,.1mm) (@c) to[bend right=12] ++(1mm,3.5mm);
+\endpgfonlayer
+}
+
+\pingu at create@wing at extra{present}{%
+ present \@lr/.code = {\pingu at set@extra{present\@lr}{true}\pingu at color{present\@lr}{##1}},
+ present \@lr/.default = pingu at red!50!pingu at black!60!red,
+ present \@lr\space width/.code = \@namedef{pingu at present@\@lr @width}{##1},
+ present \@lr\space height/.code = \@namedef{pingu at present@\@lr @height}{##1},
+ present \@lr\space ribbon/.code = \pingu at color{present\@lr @ribbon}{##1},%
+ present \@lr\space band/.code = \pingu at color{present\@lr @band}{##1},%
+ present \@lr\space band width/.code = \@namedef{pingu at present@\@lr @band at width}{##1},
+ present \@lr\space xshift/.code = \@namedef{pingu at present@\@lr @xshift}{##1},
+ present \@lr\space yshift/.code = \@namedef{pingu at present@\@lr @yshift}{##1},
+ present \@lr\space band second height/.code = \@namedef{pingu at present@\@lr @band at second@height}{##1},
+ present \@lr\space band second yshift/.code = \@namedef{pingu at present@\@lr @band at second@yshift}{##1},
+ present \@lr\space lid/.code = \pingu at color{present\@lr @lid}{##1},%
+ present \@lr\space lid height/.code = \@namedef{pingu at present@\@lr @lid at height}{##1},
+ present \@lr\space lid overhang/.code = \@namedef{pingu at present@\@lr @lid at overhang}{##1},
+ present \@lr\space lid yshift/.code = \@namedef{pingu at present@\@lr @lid at yshift}{##1},
+ present \@lr\space lid band/.code = \pingu at color{present\@lr @lid at band}{##1},%
+}{present \@lr\space band=pingu at green!70!pingu at black!90!pingu at white,present \@lr\space width=7.75mm,present \@lr\space band width=1.75mm,present \@lr\space height=7mm,present \@lr\space yshift=-0.25*(\csname pingu at present@\@lr @height\endcsname),present \@lr\space band second height=\csname pingu at present@\@lr @band at width\endcsname, present \@lr\space band second yshift=0.5*(\csname pingu at present@\@lr @height\endcsname),present \@lr\space xshift=-0.25*(\csname pingu at present@\@lr @width\endcsname),present \@lr\space lid=\csname pingu at color@present\@lr\endcsname!92!pingu at black,present \@lr\space lid height=1.33mm,present \@lr\space lid overhang=.125mm,present \@lr\space lid yshift=0,present \@lr\space lid band=\csname pingu at color@present\@lr @band\endcsname!98!pingu at black,present \@lr\space ribbon=\csname pingu at color@present\@lr @band\endcsname!97!pingu at black}
+
+% TODO: more ribbon color control
+% #1 wing
+\def\pingu at draw@wi at present#1{%
+ \pingu at setup@wing{present}{#1}%
+ \scope[rotate around={\@angle:(\pingu at name-wing-#1)}]
+ \pingu at block[rounded corners=2pt]{\@col}(\pingu at name-wing-#1)++(-{0.5*(\csname pingu at present@#1 at width\endcsname)+\csname pingu at present@#1 at xshift\endcsname},{\csname pingu at present@#1 at yshift\endcsname}) coordinate (@ll) rectangle ++({\csname pingu at present@#1 at width\endcsname},{\csname pingu at present@#1 at height\endcsname}) coordinate (@ur);
+ % vert band
+ \pingu at block{\csname pingu at color@present#1 at band\endcsname}(@ll)++({0.5*(\csname pingu at present@#1 at width\endcsname)-0.5*(\csname pingu at present@#1 at band@width\endcsname)},0) rectangle ++({\csname pingu at present@#1 at band@width\endcsname},{\csname pingu at present@#1 at height\endcsname});
+ % horiz band
+ \pingu at block{\csname pingu at color@present#1 at band\endcsname}(@ll)++(0,{\csname pingu at present@#1 at band@second at yshift\endcsname-0.5*(\csname pingu at present@#1 at band@second at height\endcsname)}) rectangle ++({\csname pingu at present@#1 at width\endcsname},{\csname pingu at present@#1 at band@second at height\endcsname});
+ % lid
+ \pingu at block[rounded corners=.75pt]{\csname pingu at color@present#1 at lid\endcsname} ([yshift={\csname pingu at present@\@lr @lid at yshift\endcsname},xshift=\csname pingu at present@\@lr @lid at overhang\endcsname]@ur) rectangle ++({-\csname pingu at present@#1 at width\endcsname-2*(\csname pingu at present@\@lr @lid at overhang\endcsname)},-\csname pingu at present@#1 at lid@height\endcsname) coordinate (@ll);
+ % upper lid band
+ \pingu at block{\csname pingu at color@present#1 at lid@band\endcsname}(@ll)++({0.5*(\csname pingu at present@#1 at width\endcsname)-0.5*(\csname pingu at present@#1 at band@width\endcsname)+\csname pingu at present@\@lr @lid at overhang\endcsname},0) rectangle ++({\csname pingu at present@#1 at band@width\endcsname},{\csname pingu at present@#1 at lid@height\endcsname});
+ % ribbon
+ \path (@ll)++({0.5*(\csname pingu at present@#1 at width\endcsname)+\csname pingu at present@\@lr @lid at overhang\endcsname+0.2*(\csname pingu at present@#1 at band@width\endcsname)},{\csname pingu at present@#1 at lid@height\endcsname+.25mm}) coordinate (@top);
+ \pingu at block[even odd rule]{\csname pingu at color@present#1 at ribbon\endcsname} (@top) to[out=40,in=110] ++(4mm,1mm)
+ to[out=-70,in=-20] ++(-4mm,-1.5mm) to[bend left=55] cycle ([xshift=.5mm]@top) to[out=40,in=110] ++(2.55mm,.5mm)
+ to[out=-70,in=-20] [rounded corners=1pt] ++(-2.85mm,-.835mm) -- cycle;
+ \path (@ll)++({0.5*(\csname pingu at present@#1 at width\endcsname)+\csname pingu at present@\@lr @lid at overhang\endcsname-0.2*(\csname pingu at present@#1 at band@width\endcsname)},{\csname pingu at present@#1 at lid@height\endcsname+.25mm}) coordinate (@top);
+ \pingu at block[even odd rule]{\csname pingu at color@present#1 at ribbon\endcsname} (@top) to[out=180-40,in=180-110] ++(-3.6mm,1mm)
+ to[out=-110,in=-160] ++(3.6mm,-1.5mm) to[bend right=55] cycle ([xshift=-.5mm]@top) to[out=140,in=70] ++(-2.55mm,.5mm)
+ to[out=-110,in=-160] [rounded corners=1pt] ++(2.55mm,-.75mm) -- cycle;
+ \pingu at block[rounded corners=.5pt]{\csname pingu at color@present#1 at ribbon\endcsname} (@top)++(-.3mm,-.65mm) rectangle ++(1.3mm,.65mm); % TODO: make that round? (i.e., bend edges)
+ \endscope
+}
+
+\pingu at create@wing at extra{snowball}{%
+ snowball \@lr/.code = {\pingu at set@extra{snowball\@lr}{true}\pingu at color{snowball\@lr}{##1}},
+ snowball \@lr/.default = pingu at white!90!pingu at black,
+ snowball \@lr\space size/.code = \expandafter\def\csname pingu at snowball@\@lr @size\endcsname{##1},
+ snowball \@lr\space xshift/.code = \expandafter\def\csname pingu at snowball@\@lr @xshift\endcsname{##1},
+ snowball \@lr\space yshift/.code = \expandafter\def\csname pingu at snowball@\@lr @yshift\endcsname{##1}
+}{snowball \@lr\space size=2.33mm, snowball \@lr\space xshift=0pt, snowball \@lr\space yshift=0pt}
+
+% #1 wing
+% TODO: shifts
+\def\pingu at draw@wi at snowball#1{%
+\pingu at setup@wing{snowball}{#1}%
+ \pingu at draw[opacity=.35]{\@col} ([xshift=\csname pingu at snowball@#1 at xshift\endcsname,yshift=\csname pingu at snowball@#1 at yshift\endcsname]\pingu at name-wing-#1) coordinate (@) circle[radius=\csname pingu at snowball@#1 at size\endcsname];
+ \pingu at block[rotate around={\@angle-1:(\pingu at name-wing-#1)},decoration={random steps,segment length=1pt,amplitude=.075pt},decorate,rounded corners=.35pt,save path=\snowball at outer]{\@col}(@) circle[radius=\csname pingu at snowball@#1 at size\endcsname];
}
\ No newline at end of file
Modified: trunk/Master/texmf-dist/tex/latex/tikzpingus/tikzpingus-devil.lib.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tikzpingus/tikzpingus-devil.lib.tex 2023-09-18 01:27:40 UTC (rev 68309)
+++ trunk/Master/texmf-dist/tex/latex/tikzpingus/tikzpingus-devil.lib.tex 2023-09-18 20:05:29 UTC (rev 68310)
@@ -26,7 +26,7 @@
% wip hack
\colorlet{pingu at devil@ring}{pingu at black}
\def\pingu at devil@x at opacity{.75}
-\@pingu at eyes@s{devil}{%
+\pingu at eyes@s{devil}{%
\pingu at layer{foreground}[]
\pingu at block{pingu at devil@ring} ([yshift=.75mm,xshift=\pingu at eye@shift]\pingu at name-eye-back-left) coordinate (\pingu at name-eye-left) ellipse [x radius=.1535cm, y radius=.1575cm];
\pingu at block{\pingu at color@eye at second@left} ([yshift=.75mm,xshift=\pingu at eye@shift]\pingu at name-eye-back-left) coordinate (\pingu at name-eye-left) ellipse [x radius=.1325cm, y radius=.1375cm];
Modified: trunk/Master/texmf-dist/tex/latex/tikzpingus/tikzpingus-emotions.lib.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tikzpingus/tikzpingus-emotions.lib.tex 2023-09-18 01:27:40 UTC (rev 68309)
+++ trunk/Master/texmf-dist/tex/latex/tikzpingus/tikzpingus-emotions.lib.tex 2023-09-18 20:05:29 UTC (rev 68310)
@@ -1,7 +1,7 @@
% Florian Sihler, 2022
% Licensed under GNU General Public License version 3
% https://opensource.org/licenses/gpl-3.0.html
-\@pingu at eyes@s{sad}{%
+\pingu at eyes@s{sad}{%
\path (\pingu at name-eye-back-left)++(\pingu at eye@shift,.75mm) coordinate (\pingu at name-eye-left);
\pingu at block{\pingu at color@eye at left} (\pingu at name-eye-left)++(15:.1225cm and .1275cm) arc (15:-245:.1225cm and .1275cm) to[out=-45,in=175] cycle;
}{%
@@ -9,7 +9,7 @@
\pingu at block{\pingu at color@eye at right} (\pingu at name-eye-right)++(165:.1225cm and .1275cm) arc (165:425:.1225cm and .1275cm) to[out=225,in=5] cycle;
}
-\@pingu at eyes@s{angry}{%
+\pingu at eyes@s{angry}{%
\path (\pingu at name-eye-back-left)++(\pingu at eye@shift,.75mm) coordinate (\pingu at name-eye-left);
\pingu at block{\pingu at color@eye at left} (\pingu at name-eye-left) ellipse [x radius=.1225cm, y radius=.1275cm];
\pingu at block{\pingu at color@body at front} (\pingu at name-eye-left) ++(120:.1225cm and .1275cm) ellipse [x radius=1.5mm,y radius=.5mm];
@@ -19,7 +19,7 @@
\pingu at block{\pingu at color@body at front} (\pingu at name-eye-right) ++(60:.1225cm and .1275cm) ellipse [x radius=1.5mm,y radius=.5mm];
}
-\@pingu at bill@s{angry}{%
+\pingu at bill@s{angry}{%
\pingu at block{\pingu at color@bill} (\pingu at name-bill)++(-.19cm,0)
to[out=-90,in=170] ++(1.9mm,-2.25mm) coordinate (\pingu at name-bill-bottom)
to[out=10,in=-90] ++(1.9mm,2.25mm)
@@ -31,13 +31,13 @@
blush/.default = pingu at red,
blush second/.code = \pingu at color{blush at second}{#1},
blush opacity/.code = \def\pingu at x@blush at opacity{#1},
-}{blush opacity=.2525,blush second=\pingu at color@blush}
+}{blush opacity=.35,blush second=\pingu at color@blush}
\def\pingu at draw@eb at blush{%
\pingu at block[/pingu/@glow,opacity=\pingu at x@blush at opacity]{\pingu at color@blush} ([yshift=-2.7mm,xshift=-1.85mm]\pingu at name-eye-right) ellipse [x radius=2.66mm,y radius=2.25mm];
\pingu at block[/pingu/@glow,opacity=\pingu at x@blush at opacity]{\pingu at color@blush at second} ([yshift=-2.7mm,xshift=1.85mm]\pingu at name-eye-left) ellipse [x radius=2.66mm,y radius=2.25mm];
}
-\@pingu at eyes@s{hearts}{%
+\pingu at eyes@s{hearts}{%
\path (\pingu at name-eye-back-left)++(\pingu at eye@shift,.75mm) coordinate (\pingu at name-eye-left);
\pingu at block[rounded corners=0pt]{\pingu at color@eye at left} ([yshift=.3mm]\pingu at name-eye-left) arc(0:180:.065cm)
to[out=270,in=110] ++(.13cm,-.2cm) to[out=70,in=270] ++(.13cm,.2cm) arc (0:180:.065cm) -- cycle;
@@ -45,4 +45,12 @@
\path (\pingu at name-eye-back-right)++(-\pingu at eye@shift,.75mm) coordinate (\pingu at name-eye-right);
\pingu at block{\pingu at color@eye at right} ([yshift=.3mm]\pingu at name-eye-right) arc(0:180:.065cm)
to[out=270,in=110] ++(.13cm,-.2cm) to[out=70,in=270] ++(.13cm,.2cm) arc (0:180:.065cm) -- cycle;
+}
+
+\pingu at eyes@s{critical}{%
+ \pingu at block{\pingu at color@eye at left} ([yshift=.75mm,xshift=\pingu at eye@shift]\pingu at name-eye-back-left) coordinate (\pingu at name-eye-left) ellipse [x radius=1.13mm, y radius=.145cm];
+ \pingu at draw[thick]{\pingu at color@eye at left} (\pingu at name-eye-left)++(45:1.35mm and 1.85mm) arc(45:135:1.35mm and 1.85mm);
+}{%
+ \pingu at block{\pingu at color@eye at right} ([yshift=.75mm,xshift=-\pingu at eye@shift]\pingu at name-eye-back-right) coordinate(\pingu at name-eye-right) ellipse [x radius=1.13mm, y radius=.145cm];
+ \pingu at draw[thick]{\pingu at color@eye at right} (\pingu at name-eye-right)++(45:1.35mm and 1.85mm) arc(45:135:1.35mm and 1.85mm);
}
\ No newline at end of file
Modified: trunk/Master/texmf-dist/tex/latex/tikzpingus/tikzpingus-formal.lib.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tikzpingus/tikzpingus-formal.lib.tex 2023-09-18 01:27:40 UTC (rev 68309)
+++ trunk/Master/texmf-dist/tex/latex/tikzpingus/tikzpingus-formal.lib.tex 2023-09-18 20:05:29 UTC (rev 68310)
@@ -97,4 +97,20 @@
\pingu at block{\pingu at color@pants at button@left at shade} (@tmpb)++(-.25mm,-.25mm)++(\i:.35mm) circle[radius=.1mm];
}%
\if at pingu@x at pants@bands \endpingu at layer \fi
-}
\ No newline at end of file
+}
+
+
+\pingu at create@extra{belt}{%
+ belt/.code = \pingu at set@extra{belt}{true}\pingu at color{belt}{#1},
+ belt/.default = pingu at bronze!80!black,
+ belt knot color/.code = \pingu at color{belt at knot}{#1}
+}{% defaults
+ belt knot color = pingu at silver
+}
+
+\def\pingu at draw@eb at belt@wh{1.25mm}
+\def\pingu at draw@eb at belt{%
+ \path ([yshift=-1.66mm/2]\pingu at name-waist-left) -- ([yshift=-1.66mm/2]\pingu at name-waist-right) coordinate[pos=.5] (\pingu at name @belt at center);
+ \pingu at block[rounded corners=.5pt]{\pingu at color@belt} (\pingu at name-waist-left) coordinate (@) to[bend left=5] (\pingu at name-waist-right) -- ++(0,-1.66mm) to[bend right=5] ([yshift=-1.66mm]@) -- cycle;
+ \pingu at block[rounded corners=1.5pt]{\pingu at color@belt at knot} ([xshift=-1mm,yshift=-.7mm-1.66mm/2]\pingu at name @belt at center) rectangle ++(2mm,2mm);
+}
Modified: trunk/Master/texmf-dist/tex/latex/tikzpingus/tikzpingus-fun.lib.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tikzpingus/tikzpingus-fun.lib.tex 2023-09-18 01:27:40 UTC (rev 68309)
+++ trunk/Master/texmf-dist/tex/latex/tikzpingus/tikzpingus-fun.lib.tex 2023-09-18 20:05:29 UTC (rev 68310)
@@ -80,9 +80,8 @@
pumpkin-hat stripe c/.code = \pingu at color{pumpkinhat at stripe@c}{#1},
pumpkin-hat outline/.code = \pingu at color{pumpkinhat at outline}{#1},
pumpkin-hat outline width/.code = \def\pingu at x@pumpkinhat at outline@w{#1},
- % TODO: jack o lantern?
pumpkin-hat position/.code args = {#1:(#2,#3)#4}{\def\pingu at x@pumpkinhat at angle{#1}\def\pingu at x@pumpkinhat at xshift{#2}\def\pingu at x@pumpkinhat at yshift{#3}\def\pingu at x@pumpkinhat at scale{#4}}
-}{pumpkin-hat position={-9:(1.65mm,.25mm)1.05},pumpkin-hat stalk=pingu at green!95!\pingu at color@pumpkinhat!45!pingu at black,pumpkin-hat stalk top=\pingu at color@pumpkinhat at stalk!95!pingu at black,pumpkin-hat stripe a=pingu at black,pumpkin-hat stripe b=\pingu at color@pumpkinhat at stripe@a,pumpkin-hat stripe c=\pingu at color@pumpkinhat at stripe@b,pumpkin-hat outline=pingu at black,pumpkin-hat outline width=1pt}
+}{pumpkin-hat position={-9:(1.65mm,.25mm)1.05},pumpkin-hat stalk=pingu at green!95!\pingu at color@pumpkinhat!45!pingu at black,pumpkin-hat stalk top=\pingu at color@pumpkinhat at stalk!95!pingu at black,pumpkin-hat stripe a=pingu at black,pumpkin-hat stripe b=\pingu at color@pumpkinhat at stripe@a,pumpkin-hat stripe c=\pingu at color@pumpkinhat at stripe@b,pumpkin-hat outline=pingu at black,pumpkin-hat outline width=.7pt}
\def\pingu at pumpkinhat@outerpath{(0,.125cm)++(-60:6.75mm and 5.5mm) arc(-60:86: 6.75mm and 5.5mm) to[bend left=3] ++(-1.75mm,0) arc(95:242:6.75mm and 5.5mm) to[bend left=5] cycle;}
\def\pingu at draw@ea at pumpkinhat{%
@@ -92,8 +91,7 @@
scale=\pingu at x@pumpkinhat at scale]
% give it a small cut
\pingu at block{\pingu at color@pumpkinhat} (0,.125cm)++(-60:6.75mm and 5.5mm) coordinate (@pkll) arc(-60:86: 6.75mm and 5.5mm) coordinate (@pkl) to[bend left=3] coordinate[pos=.5] (@pkuc) ++(-1.75mm,0) coordinate (@pkr) arc(95:242:6.75mm and 5.5mm) coordinate (@pklr) to[bend left=5] coordinate[pos=.5] (@pklc) cycle;
- \pingu at block{\pingu at color@pumpkinhat at stalk} (@pkl) to[bend left=3] (@pkr) to[bend right=8] ++(.85mm,2mm) -- ++(.65mm,0) coordinate[pos=.5] (@pkc) to[bend right=3] cycle;
- \pingu at block{\pingu at color@pumpkinhat at stalk@top} (@pkc) ellipse[x radius=.65mm/2, y radius=.085mm];
+ \pingu at draw[line join=round,line width=\pingu at x@pumpkinhat at outline@w]{\pingu at color@pumpkinhat at outline} \pingu at pumpkinhat@outerpath;
\scope
\clip (0,.125cm)++(-60:6.75mm and 5.5mm) coordinate (@pkll) arc(-60:86: 6.75mm and 5.5mm) coordinate (@pkl) to[bend left=3] ++(-1.75mm,0) coordinate (@pkr) arc(95:242:6.75mm and 5.5mm) coordinate (@pklr) to[bend left=5] cycle;
\pingu at draw[line cap=round,opacity=.3]{\pingu at color@pumpkinhat at stripe@a} (@pklr) to[bend left=55] (@pkr);
@@ -100,7 +98,8 @@
\pingu at draw[line cap=round,opacity=.3]{\pingu at color@pumpkinhat at stripe@c} (@pkll) to[bend right=55] (@pkl);
\pingu at draw[line cap=round,opacity=.3]{\pingu at color@pumpkinhat at stripe@b} (@pklc) to[bend right=5] (@pkuc);
\endscope
-\pingu at draw[line join=round,line width=\pingu at x@pumpkinhat at outline@w]{\pingu at color@pumpkinhat at outline} \pingu at pumpkinhat@outerpath;
+\pingu at block{\pingu at color@pumpkinhat at stalk} ([yshift=-.5*\pingu at x@pumpkinhat at outline@w]@pkl) to[bend left=3] ([yshift=-.5*\pingu at x@pumpkinhat at outline@w]@pkr) to[bend right=8] ++(.85mm,2mm) -- ++(.65mm,0) coordinate[pos=.5] (@pkc) to[bend right=3] cycle;
+\pingu at block{\pingu at color@pumpkinhat at stalk@top} (@pkc) ellipse[x radius=.65mm/2, y radius=.085mm];
\endscope
}
@@ -118,4 +117,193 @@
\pingu at block[thick,rotate around={\@angle:(\pingu at name-wing-#1)}]{\@col}(\pingu at name-wing-#1)++(0,4.75mm) coordinate (\pingu at name-lollipop-#1-top) circle[radius=1.4mm];
\pingu at block[thick,rotate around={\@angle-1:(\pingu at name-lollipop-#1-top)}]{\csname pingu at color@lollipop#1 at second\endcsname} (\pingu at name-lollipop-#1-top) ellipse [x radius=1.57mm, y radius=1.5\p@];
\pingu at block[thick,rotate around={\@angle-1:(\pingu at name-lollipop-#1-top)}]{\@col} (\pingu at name-lollipop-#1-top)++(0,.5\p@) ellipse [x radius=1.4mm, y radius=\p@];
+}
+
+\pingu at create@extra{heart}{%
+ heart/.code = {\pingu at set@extra{heart}{true}\pingu at color{heart}{#1}},
+ heart/.default = lightgray
+}{}
+
+\def\pingu at draw@eb at heart{%
+ \pingu at block[sharp corners]{\pingu at color@heart}
+ ([yshift=1mm]\pingu at name-belly-center) arc(0:180:.13cm)
+ to[out=270,in=110] ++(.26cm,-.36cm) to[out=70,in=270] ++(.26cm,.36cm) arc (0:180:.13cm) -- cycle;
+}
+
+\pingu at create@extra{vampireteeth}{%
+ vampire teeth/.code = {\pingu at set@extra{vampireteeth}{true}\pingu at color{vampireteeth}{#1}},
+ vampire teeth/.default = pingu at yellow!10!pingu at black!70!lightgray
+}{}
+
+\def\pingu at draw@eb at vampireteeth{%
+ \pingu at block{\pingu at color@vampireteeth} (\pingu at name-bill) ++(-1.35mm,-2.5mm)
+ arc(180:0:1.35mm and 2.5mm)
+ arc(0:180:1.35mm and .95mm);
+}
+
+\pingu at create@wing at extra{broom}{%
+ broom \@lr/.code = {\pingu at set@extra{broom\@lr}{true}\pingu at color{broom\@lr}{##1}},
+ broom \@lr/.default = pingu at bronze,
+ broom \@lr\space length/.code = \expandafter\def\csname pingu at broom@\@lr @length\endcsname{##1},
+ broom \@lr\space shift/.code = \expandafter\def\csname pingu at broom@\@lr @shift\endcsname{##1},
+ broom \@lr\space band/.code = \pingu at color{broom@\@lr @band}{##1},
+ broom \@lr\space bristles a/.code = \pingu at color{broom@\@lr @bristles at a}{##1},
+ broom \@lr\space bristles b/.code = \pingu at color{broom@\@lr @bristles at b}{##1},
+ broom \@lr\space bristles c/.code = \pingu at color{broom@\@lr @bristles at c}{##1},
+}{broom \@lr\space length=22mm,broom \@lr\space shift=8mm, broom \@lr\space band=pingu at red!80!pingu at black!80!pingu at bronze, broom \@lr\space bristles a=pingu at bronze!16!pingu at yellow!41!pingu at white!80!brown!95!\csname pingu at color@broom\@lr\endcsname, broom \@lr\space bristles b=\csname pingu at color@broom@\@lr @bristles at a\endcsname!83!pingu at white, broom \@lr\space bristles c=\csname pingu at color@broom@\@lr @bristles at b\endcsname!83!pingu at white}
+\def\pingu at draw@wi at broom#1{%
+ \pingu at setup@wing{broom}{#1}%
+ % TODO: mirror on other wing?
+\scope[rotate around={\@angle:(\pingu at name-wing-#1)}]
+ \pingu at block{\csname pingu at color@broom#1\endcsname}(\pingu at name-wing-#1)++(\@sidesign*-.2mm,-\csname pingu at broom@#1 at shift\endcsname) -- ++(0,\csname pingu at broom@#1 at length\endcsname) arc(180:0:\@sidesign*.4mm and .3mm) coordinate[pos=.5] (\pingu at name-broom-#1-top) -- ++(0,-\csname pingu at broom@#1 at length\endcsname) arc(360:180:\@sidesign*.4mm and .3mm) -- cycle;
+ \pingu at block[rounded corners=.44pt]{\csname pingu at color@broom@#1 at bristles@a\endcsname} (\pingu at name-broom-#1-top)++(-1mm,-2mm) to[out=115,in=240] ++(1mm,10.5mm) to[out=300,in=65] ([xshift=.95mm,yshift=-2mm]\pingu at name-broom-#1-top) to[bend right=4] ([xshift=-.75mm,yshift=-2mm]\pingu at name-broom-#1-top) -- cycle;
+ \pingu at block[rounded corners=.44pt]{\csname pingu at color@broom@#1 at bristles@a\endcsname} (\pingu at name-broom-#1-top)++(-1mm,-2mm) to[out=115,in=240] ++(1.66mm,9.75mm) to[out=300,in=65] coordinate[pos=.81] (@l) coordinate[pos=.79] (@l2) ([xshift=.95mm,yshift=-2mm]\pingu at name-broom-#1-top) to[bend right=4] ([xshift=-.75mm,yshift=-2mm]\pingu at name-broom-#1-top) -- cycle;
+ \pingu at block[rounded corners=.44pt]{\csname pingu at color@broom@#1 at bristles@a\endcsname} (\pingu at name-broom-#1-top)++(-1mm,-2mm) to[out=115,in=240] coordinate[pos=.17] (@r) coordinate[pos=.19] (@r2) ++(.25mm,10.5mm) to[out=300,in=65] ([xshift=.95mm,yshift=-2mm]\pingu at name-broom-#1-top) to[bend right=4] ([xshift=-.75mm,yshift=-2mm]\pingu at name-broom-#1-top) -- cycle;
+ \pingu at block[rounded corners=.44pt]{\csname pingu at color@broom@#1 at bristles@b\endcsname} (\pingu at name-broom-#1-top)++(-.75mm,-1.75mm) to[out=115,in=240] ++(1.35mm,9.25mm) to[out=300,in=65] ([xshift=.75mm,yshift=-1.75mm]\pingu at name-broom-#1-top) -- cycle;
+ \pingu at block[rounded corners=.44pt]{\csname pingu at color@broom@#1 at bristles@b\endcsname} (\pingu at name-broom-#1-top)++(-.75mm,-1.75mm) to[out=115,in=240] ++(0mm,9.65mm) to[out=300,in=65] ([xshift=.75mm,yshift=-1.75mm]\pingu at name-broom-#1-top) -- cycle;
+ \pingu at block{\csname pingu at color@broom@#1 at bristles@c\endcsname} (\pingu at name-broom-#1-top)++(-.5mm,-1.5mm) to[out=115,in=240] ++(.5mm,9.5mm) to[out=300,in=65] ([xshift=.5mm,yshift=-1.5mm]\pingu at name-broom-#1-top) -- cycle;
+ % TODO: broom cap color etc
+ \pingu at block{\csname pingu at color@broom@#1 at band\endcsname} (@r) to[bend right=10] (@l) -- (@l2) to[bend left=10] (@r2);
+\endscope
+}
+
+\tikzset{pingu at clip even odd rule/.code={\pgfseteorule}, % Credit to Andrew Stacey
+pingu at invclip/.style={
+ clip,insert path=
+ [pingu at clip even odd rule]{
+ [reset cm](-\maxdimen,-\maxdimen)rectangle(\maxdimen,\maxdimen)
+ }
+}}
+\pingu at create@extra{jackolantern}{%
+ jack o lantern/.code = \pingu at set@extra{jackolantern}{true}\pingu at color{jackolantern}{#1},
+ jack o lantern/.default = pingu at bronze!97!pingu at black,
+ jack o lantern helmet/.style = {jack o lantern=#1,jack o lantern background=none,jack o lantern position={-2.15:(2.05mm,-11.35mm){1.5}},jack o lantern back stripe a=\@pingu at none, jack o lantern back stripe b=\@pingu at none,jack o lantern back stripe c=\@pingu at none,jack o lantern height=6.25mm,jack o lantern width=6.1mm,hair=\@pingu at none},
+ jack o lantern helmet/.default = pingu at bronze!97!pingu at black,
+ jack o lantern stalk/.code = \pingu at color{jackolantern at stalk}{#1},
+ jack o lantern stalk top/.code = \pingu at color{jackolantern at stalk@top}{#1},
+ jack o lantern background/.code= \pingu at color{jackolantern at background}{#1},
+ jack o lantern stripe a/.code = \pingu at color{jackolantern at stripe@a}{#1},
+ jack o lantern stripe b/.code = \pingu at color{jackolantern at stripe@b}{#1},
+ jack o lantern stripe c/.code = \pingu at color{jackolantern at stripe@c}{#1},
+ jack o lantern back stripe a/.code = \pingu at color{jackolantern at backstripe@a}{#1},
+ jack o lantern back stripe b/.code = \pingu at color{jackolantern at backstripe@b}{#1},
+ jack o lantern back stripe c/.code = \pingu at color{jackolantern at backstripe@c}{#1},
+ jack o lantern outline/.code = \pingu at color{jackolantern at outline}{#1},
+ jack o lantern outline width/.code = \def\pingu at x@jackolantern at outline@w{#1},
+ jack o lantern height/.code = \def\pingu at x@jackolantern at height{#1},
+ jack o lantern width/.code = \def\pingu at x@jackolantern at width{#1},
+ jack o lantern position/.code args = {#1:(#2,#3)#4}{\def\pingu at x@jackolantern at angle{#1}\def\pingu at x@jackolantern at xshift{#2}\def\pingu at x@jackolantern at yshift{#3}\def\pingu at x@jackolantern at scale{#4}}
+}{jack o lantern position={-9:(3.15mm,.95mm){1.3}},jack o lantern stripe a=pingu at black,jack o lantern stripe b=\pingu at color@jackolantern at stripe@a,jack o lantern stripe c=\pingu at color@jackolantern at stripe@b,jack o lantern back stripe a=pingu at black,jack o lantern back stripe b=\pingu at color@jackolantern at stripe@a,jack o lantern back stripe c=\pingu at color@jackolantern at stripe@b,jack o lantern outline=pingu at black,jack o lantern outline width=.7pt,jack o lantern stalk=pingu at green!95!\pingu at color@jackolantern!45!pingu at black,jack o lantern stalk top=\pingu at color@jackolantern at stalk!95!pingu at black,jack o lantern background=\pingu at color@jackolantern!85!pingu at black,jack o lantern height=5.5mm,jack o lantern width=5.75mm}
+
+\def\pingu at jackolantern@outerpath{(0,.125cm)++(-60:{\pingu at x@jackolantern at width} and \pingu at x@jackolantern at height) arc(-60:86:{\pingu at x@jackolantern at width} and \pingu at x@jackolantern at height) to[bend right=3] ++(-3.75mm,0) arc(95:242:{\pingu at x@jackolantern at width} and \pingu at x@jackolantern at height) to[bend left=5] cycle;}
+\def\pingu at x@jackolantern{(-5.15mm,.6mm) to[bend right] ++(1.5mm,-.5mm) -- ++(.33mm,.33mm) to[bend right=10] ++(1.5mm,0) -- ++(.66mm,-.75mm) -- ++(.66mm,.75mm) to[bend right=10] ++(1.5mm,0) -- ++(.33mm,-.33mm) to[bend right] ++(1.5mm,.5mm) to[bend left] ++(-1.5mm,-2.15mm) to[bend left=10] ++(-.33mm,.33mm) to[bend left=10] ++(-1.5mm,0) -- ++(-.66mm,-.5mm) -- ++(-.66mm,.5mm) to[bend left=10] ++(-1.5mm,0) -- ++(-.33mm,-.33mm) to[bend left] cycle}
+
+\def\pingu at x@jackolantern at eye@left{(0.9mm,2mm) -- ++(2mm,-.15mm) to[bend right=40] ++(-.5mm,2mm) -- cycle}
+\def\pingu at x@jackolantern at eye@right{(-3mm,2mm) -- ++(-2mm,-.15mm) to[bend left=40] ++(.5mm,2mm) -- cycle}
+\def\pingu at x@jackolantern at nose{(0.965mm*0.5-3.225mm*0.5,1mm) -- ++(1mm,1.2mm) to[bend right=10] ++(-2mm,0) -- cycle}
+
+\def\pingu at draw@ea at jackolantern{%
+\scope[rotate around={\pingu at x@jackolantern at angle:(\pingu at name-head-top)},%
+shift={(\pingu at name-head-top)},
+shift={(\pingu at x@jackolantern at xshift,\pingu at x@jackolantern at yshift)},
+scale=\pingu at x@jackolantern at scale]
+\scope
+\pgfinterruptboundingbox
+\path[pingu at invclip]\pingu at x@jackolantern \pingu at x@jackolantern at eye@left \pingu at x@jackolantern at eye@right \pingu at x@jackolantern at nose;
+ % give it a small cut
+ \pingu at block{\pingu at color@jackolantern} (0,.125cm)++(-60:{\pingu at x@jackolantern at width} and \pingu at x@jackolantern at height) coordinate (@pkll) arc(-60:86: {\pingu at x@jackolantern at width} and \pingu at x@jackolantern at height) coordinate (@pkl) to[bend right=3] coordinate[pos=.5] (@pkuc) coordinate[pos=.225] (@pksl) coordinate[pos=.775] (@pksr) ++(-3.75mm,0) coordinate (@pkr) arc(95:242:{\pingu at x@jackolantern at width} and \pingu at x@jackolantern at height) coordinate (@pklr) to[bend left=5] coordinate[pos=.5] (@pklc) cycle;
+ \pingu at draw[line join=round,line width=\pingu at x@jackolantern at outline@w]{\pingu at color@jackolantern at outline} \pingu at jackolantern@outerpath;
+\endpgfinterruptboundingbox
+\scope
+\clip (0,.125cm)++(-60:{\pingu at x@jackolantern at width} and \pingu at x@jackolantern at height) arc(-60:86:{\pingu at x@jackolantern at width} and \pingu at x@jackolantern at height) to[bend right=3] ++(-3.75mm,0) arc(95:242:{\pingu at x@jackolantern at width} and \pingu at x@jackolantern at height) to[bend left=5] cycle;
+ \pingu at draw[line cap=round,opacity=.2]{\pingu at color@jackolantern at stripe@a} (@pklr) to[bend left=42] (@pkr);
+ \pingu at draw[line cap=round,opacity=.2]{\pingu at color@jackolantern at stripe@c} (@pkll) to[bend right=54] (@pkl);
+ \pingu at draw[line cap=round,opacity=.2]{\pingu at color@jackolantern at stripe@b} (@pklc) to[bend right=6] (@pkuc);
+\endscope
+\endscope
+ \pingu at draw[fill=\pingu at color@jackolantern at background,rounded corners=.25pt]{\pingu at color@jackolantern at outline} \pingu at x@jackolantern at eye@left;
+ \pingu at draw[fill=\pingu at color@jackolantern at background,rounded corners=.25pt]{\pingu at color@jackolantern at outline} \pingu at x@jackolantern at eye@right;
+
+ \pingu at draw[fill=\pingu at color@jackolantern at background,rounded corners=.25pt]{\pingu at color@jackolantern at outline} \pingu at x@jackolantern at nose;
+
+ \pingu at draw[fill=\pingu at color@jackolantern at background]{\pingu at color@jackolantern at outline} \pingu at x@jackolantern;
+ \scope
+ \clip\pingu at x@jackolantern \pingu at x@jackolantern at eye@left \pingu at x@jackolantern at eye@right \pingu at x@jackolantern at nose;
+ \pingu at draw[line cap=round,opacity=.2]{\pingu at color@jackolantern at backstripe@a} ([xshift=1.6mm]@pklr) to[bend left=18] (@pkr);
+ \pingu at draw[line cap=round,opacity=.2]{\pingu at color@jackolantern at backstripe@c} ([xshift=-1.6mm]@pkll) to[bend right=22] (@pkl);
+ \pingu at draw[line cap=round,opacity=.2]{\pingu at color@jackolantern at backstripe@b} (@pklc) to[bend right=1] (@pkuc);
+ \endscope
+ \pingu at block{\pingu at color@jackolantern at stalk} ([yshift=-.5*\pingu at x@jackolantern at outline@w]@pksl) to[bend left=3] ([yshift=-.5*\pingu at x@jackolantern at outline@w]@pksr) to[bend right=8] ++(.85mm,2mm) -- ++(.65mm,0) coordinate[pos=.5] (@pkc) to[bend right=3] cycle;
+\pingu at block{\pingu at color@jackolantern at stalk@top} (@pkc) ellipse[x radius=.65mm/2, y radius=.085mm];
+\endscope
+}
+
+\pingu at create@wing at extra{hammer}{%
+ hammer \@lr/.code = {\pingu at set@extra{hammer\@lr}{true}\pingu at color{hammer\@lr}{##1}},
+ hammer \@lr/.default = pingu at silver,
+ hammer \@lr\space handle length/.code = \expandafter\def\csname pingu at hammer@\@lr @length\endcsname{##1},
+ hammer \@lr\space handle shift/.code = \expandafter\def\csname pingu at hammer@\@lr @shift\endcsname{##1},
+ hammer \@lr\space width/.code = \expandafter\def\csname pingu at hammer@\@lr @width\endcsname{##1},
+ hammer \@lr\space height/.code = \expandafter\def\csname pingu at hammer@\@lr @height\endcsname{##1},
+ hammer \@lr\space xshift/.code = \expandafter\def\csname pingu at hammer@\@lr @xshift\endcsname{##1},
+ hammer \@lr\space yshift/.code = \expandafter\def\csname pingu at hammer@\@lr @yshift\endcsname{##1},
+ hammer \@lr\space handle/.code = \pingu at color{hammer@\@lr @handle}{##1},%
+ hammer \@lr\space with knob/.style = {hammer \@lr=##1, hammer \@lr\space handle length=\dimexpr9mm+\csname pingu at hammer@\@lr @height\endcsname+.5mm,hammer \@lr\space yshift=\dimexpr-.5mm-\csname pingu at hammer@\@lr @height\endcsname},
+ hammer \@lr\space with knob/.default = pingu at silver
+}{hammer \@lr\space handle length=9mm, hammer \@lr\space handle=pingu at bronze, hammer \@lr\space handle shift=-4mm, hammer \@lr\space width=7mm,hammer \@lr\space height=3.5mm, hammer \@lr\space xshift=-0.5*\csname pingu at hammer@\@lr @width\endcsname,hammer \@lr\space yshift=-1mm}
+\def\pingu at draw@wi at hammer#1{%
+ \pingu at setup@wing{hammer}{#1}%
+\scope[rotate around={\@angle:(\pingu at name-wing-#1)}]
+% \csname pingu at color@hammer#1\endcsname
+ \pingu at block{\csname pingu at color@hammer@#1 at handle\endcsname}(\pingu at name-wing-#1)++(\@sidesign*-.2mm,\csname pingu at hammer@#1 at shift\endcsname) -- ++(0,\csname pingu at hammer@#1 at length\endcsname) arc(180:0:\@sidesign*.4mm and .3mm) coordinate[pos=.5] (\pingu at name-hammer-#1-top) -- ++(0,-\csname pingu at hammer@#1 at length\endcsname) arc(360:180:\@sidesign*.4mm and .3mm) -- cycle;
+ \pingu at block[rounded corners=2pt]{\csname pingu at color@hammer#1\endcsname} (\pingu at name-hammer-#1-top)++(\csname pingu at hammer@#1 at xshift\endcsname,\csname pingu at hammer@#1 at yshift\endcsname) rectangle ++(\csname pingu at hammer@#1 at width\endcsname,\csname pingu at hammer@#1 at height\endcsname);
+\endscope
+}
+
+\pingu at create@wing at extra{plank}{%
+ plank \@lr/.code = {\pingu at set@extra{plank\@lr}{true}\pingu at color{plank\@lr}{##1}},
+ plank \@lr/.default = pingu at bronze!80!pingu at black,
+ plank \@lr\space width/.code = \expandafter\def\csname pingu at plank@\@lr @width\endcsname{##1},
+ plank \@lr\space height/.code = \expandafter\def\csname pingu at plank@\@lr @height\endcsname{##1},
+ plank \@lr\space xshift/.code = \expandafter\def\csname pingu at plank@\@lr @xshift\endcsname{##1},
+ plank \@lr\space yshift/.code = \expandafter\def\csname pingu at plank@\@lr @yshift\endcsname{##1}
+}{plank \@lr\space width=7mm,plank \@lr\space height=16.5mm, plank \@lr\space xshift=0mm,plank \@lr\space yshift=-1mm}
+\def\pingu at draw@wi at plank#1{%
+ \pingu at setup@wing{plank}{#1}%
+\scope[rotate around={\@angle:(\pingu at name-wing-#1)}]
+\pingu at block[rounded corners=2pt]{\@col}([xshift=\csname pingu at plank@#1 at xshift\endcsname,yshift=\csname pingu at plank@#1 at yshift\endcsname]\pingu at name-wing-#1)++({-.5*(\csname pingu at plank@#1 at width\endcsname)},{-.5*(\csname pingu at plank@#1 at height\endcsname)}) rectangle ++({\csname pingu at plank@#1 at width\endcsname},{\csname pingu at plank@#1 at height\endcsname});
+\endscope
+}
+
+% \usetikzlibrary{spy}
+
+\pingu at create@wing at extra{magnifier}{%
+ magnifier \@lr/.code = {\pingu at set@extra{magnifier\@lr}{true}\pingu at color{magnifier\@lr}{##1}}, % \noexpand\tikzset{/pingu/@pingu/.append style={spy scope={circle,draw,magnification=4,size=1cm}}}
+ magnifier \@lr/.default = pingu at bronze,
+ magnifier \@lr\space handle length/.code = \expandafter\def\csname pingu at magnifier@\@lr @length\endcsname{##1},
+ magnifier \@lr\space handle shift/.code = \expandafter\def\csname pingu at magnifier@\@lr @shift\endcsname{##1},
+ magnifier \@lr\space size/.code = \expandafter\def\csname pingu at magnifier@\@lr @size\endcsname{##1},
+ magnifier \@lr\space glass/.code = \pingu at color{magnifier@\@lr @glass}{##1},
+ magnifier \@lr\space opacity/.code = \expandafter\def\csname pingu at magnifier@\@lr @opacity\endcsname{##1},
+ magnifier \@lr\space thick/.code = \expandafter\def\csname pingu at magnifier@\@lr @thick\endcsname{##1},
+ magnifier \@lr\space xshift/.code = \expandafter\def\csname pingu at magnifier@\@lr @xshift\endcsname{##1},
+ magnifier \@lr\space yshift/.code = \expandafter\def\csname pingu at magnifier@\@lr @yshift\endcsname{##1},
+ magnifier \@lr\space handle/.code = \pingu at color{magnifier@\@lr @handle}{##1}%
+}{magnifier \@lr\space handle length=3.5mm, magnifier \@lr\space handle shift=-4mm, magnifier \@lr\space xshift=0mm,magnifier \@lr\space yshift=1mm,magnifier \@lr\space size=2.5mm,magnifier \@lr\space thick=.5mm,magnifier \@lr\space glass=pingu at blue!90!pingu at yellow,magnifier \@lr\space opacity=0.24}
+\def\pingu at draw@wi at magnifier#1{%
+ \pingu at setup@wing{magnifier}{#1}%
+ \scope[rotate around={\@angle:(\pingu at name-wing-#1)}]
+% \csname pingu at color@magnifier#1\endcsname
+ \path ([yshift=\csname pingu at magnifier@#1 at yshift\endcsname+\csname pingu at magnifier@#1 at size\endcsname,xshift=\csname pingu at magnifier@\@lr @xshift\endcsname]\pingu at name-wing-#1) coordinate (@);
+
+ % \spy[draw=green] on (@) in node at (@);
+% \pgfonlayer{foreground}
+ \pingu at block[even odd rule]{\@col} (@) circle[radius=\csname pingu at magnifier@#1 at size\endcsname] circle[radius=\csname pingu at magnifier@#1 at size\endcsname-\csname pingu at magnifier@#1 at thick\endcsname];
+
+ \pingu at block[opacity=\csname pingu at magnifier@#1 at opacity\endcsname]{\csname pingu at color@magnifier@#1 at glass\endcsname} (@) circle[radius=\csname pingu at magnifier@#1 at size\endcsname-\csname pingu at magnifier@#1 at thick\endcsname];
+
+ \pingu at block{\@col} % TODO: adapt size
+ (@) ([shift={(-70:2.5mm)}]@) to[out=230,in=90] ++(-.5mm,-\csname pingu at magnifier@#1 at length\endcsname) arc(360:180:.33mm) to[out=90,in=-50] ++(-.5mm,\csname pingu at magnifier@#1 at length\endcsname);%
+% \endpgfonlayer
+\endscope
}
\ No newline at end of file
Modified: trunk/Master/texmf-dist/tex/latex/tikzpingus/tikzpingus-hats.lib.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tikzpingus/tikzpingus-hats.lib.tex 2023-09-18 01:27:40 UTC (rev 68309)
+++ trunk/Master/texmf-dist/tex/latex/tikzpingus/tikzpingus-hats.lib.tex 2023-09-18 20:05:29 UTC (rev 68310)
@@ -112,4 +112,62 @@
\pingu at block[rounded corners=\pingu at x@conicalhat at rounding]{\pingu at color@conicalhat} (0,-.25cm)++(180:\pingu at x@conicalhat at width/2 and 1mm) coordinate (@) arc (180:0:\pingu at x@conicalhat at width/2 and 1mm) -- ++(.225mm,.6mm) to[bend right=5] ++(-\pingu at x@conicalhat at width/2, \pingu at x@conicalhat at height) to[bend right=5] ([xshift=-.225mm,yshift=.6mm]@) -- cycle;
\endscope
-}
\ No newline at end of file
+}
+
+\pingu at create@extra{witchhat}{%
+ witch hat/.code = \pingu at set@extra{witchhat}{true}\pingu at color{witchhat}{#1},
+ witch hat/.default = pingu at purple!40!black,
+ witch hat base/.code = \pingu at color{witchhat at base}{#1},
+ witch hat coronal/.code = \pingu at color{witchhat at coronal}{#1},
+ witch hat ribbon/.code = \pingu at color{witchhat at ribbon}{#1},
+ witch hat band/.code = \pingu at color{witchhat at band}{#1},
+ witch hat position/.code args = {#1:(#2,#3)#4}{\def\pingu at x@witchhat at angle{#1}\def\pingu at x@witchhat at xshift{#2}\def\pingu at x@witchhat at yshift{#3}\def\pingu at x@witchhat at scale{#4}},
+}{witch hat position={-7:(.625mm,.45mm){1.15}},witch hat base=\pingu at color@witchhat,witch hat coronal=\pingu at color@witchhat!91!white,witch hat ribbon=\pingu at color@witchhat!87!white,witch hat band=!hide}
+
+\newdimen\pingu at witchhat@w at half \pingu at witchhat@w at half=1.125cm
+\newdimen\pingu at witchhat@h \pingu at witchhat@h=1.3cm
+\def\pingupathwitchhatupper{[rounded corners=.65mm](-.625cm,-.25cm) -- ++(.8cm,\pingu at witchhat@h-4.5mm) -- ++(6.5mm,4.5mm) -- ++(-1.5mm,-4.5mm) -- ++(-1.25mm,-\pingu at witchhat@h+4.5mm)}
+\def\pingu at draw@ea at witchhat{%
+\scope[rotate around={\pingu at x@witchhat at angle:(\pingu at name-head-top)},shift={(\pingu at name-head-top)},shift={(\pingu at x@witchhat at xshift,\pingu at x@witchhat at yshift)},scale=\pingu at x@witchhat at scale]
+\pingu at draw[semithick]{\pingu at color@witchhat at band} (-.615cm,-.25cm) to[out=-100,in=180] ++(.5cm,-1.1cm) to[bend right=5] ++(3.5mm,.1mm) to[out=0,in=-78] ++(.433cm,1.1cm);
+\pingu at block[/pingu/@draw=\pingu at color@witchhat at coronal,thick]{\pingu at color@witchhat at base} (0,-.25cm)++(180:\pingu at witchhat@w at half{} and .15cm) arc (180:360:\pingu at witchhat@w at half{} and .15cm) arc (0:180:\pingu at witchhat@w at half{} and .115cm) -- cycle;
+\pingu at block{\pingu at color@witchhat} \pingupathwitchhatupper;
+\clip\pingupathwitchhatupper;
+\pingu at block{\pingu at color@witchhat at ribbon} (\z@,.2mm) ellipse [x radius=.95\pingu at witchhat@w at half, y radius=.12cm];
+\pingu at block{\pingu at color@witchhat} (\z@,.134cm) ellipse [x radius=.95\pingu at witchhat@w at half, y radius=.12cm];
+\endscope
+}
+
+
+\pingu at create@extra{mitra}{%
+ mitra/.default = pingu at red!67!pingu at black,%pingu at black!90!black,
+ mitra/.code = \pingu at set@extra{mitra}{true}\pingu at color{mitra}{#1},
+ mitra height/.code = {\def\pingu at x@mitra at height{#1}},
+ mitra background/.code = \pingu at color{mitra at background}{#1},
+ mitra overset/.code = {\def\pingu at x@mitra at overset{#1}},
+ mitra lower angle/.code = {\def\pingu at x@mitra at lowerangle{#1}},
+ mitra upper angle/.code = {\def\pingu at x@mitra at upperangle{#1}},
+ mitra lower band/.code = \pingu at color{mitra at lower@band}{#1},
+ mitra lower band height/.code = {\def\pingu at x@mitra at lowerband@height{#1}},
+ mitra upper band/.code = \pingu at color{mitra at upper@band}{#1},
+ mitra upper band height/.code = {\def\pingu at x@mitra at upperband@height{#1}},
+ mitra center band/.code = \pingu at color{mitra at center@band}{#1},
+ mitra center band width/.code = {\def\pingu at x@mitra at centerband@width{#1}},
+ mitra position/.code args = {#1:(#2,#3)#4}{\def\pingu at x@mitra at angle{#1}\def\pingu at x@mitra at xshift{#2}\def\pingu at x@mitra at yshift{#3}\def\pingu at x@mitra at scale{#4}},
+}{mitra position={0:(0,0)1},mitra height=1.125cm,mitra overset=1.25mm,mitra lower angle=125,mitra upper angle=-35,mitra lower band=pingu at yellow!75!pingu at black,mitra center band=\pingu at color@mitra at lower@band,mitra lower band height=.2,mitra center band width={2*\pingu at x@mitra at lowerband@height},mitra upper band=\pingu at color@mitra at lower@band,mitra upper band height={1.5*\pingu at x@mitra at lowerband@height},mitra background=\pingu at color@mitra!80!pingu at black}
+
+\newdimen\pingu at mitra@w at half \pingu at mitra@w at half=.625cm
+\def\pingu at x@mitra at path{(0,-.2185cm)++(180:\pingu at mitra@w at half{} and .035cm) arc (180:360:\pingu at mitra@w at half{} and .035cm) [rounded corners=1pt] -- ++(\pingu at x@mitra at overset,.3*\pingu at x@mitra at height) to[out=\pingu at x@mitra at lowerangle,in=\pingu at x@mitra at upperangle] ++(-\pingu at x@mitra at overset-\pingu at mitra@w at half,.7*\pingu at x@mitra at height)
+to[out=180-\pingu at x@mitra at upperangle,in=180-\pingu at x@mitra at lowerangle] ++(-\pingu at x@mitra at overset-\pingu at mitra@w at half,-.7*\pingu at x@mitra at height) [sharp corners] -- cycle}
+\def\pingu at draw@ea at mitra{%
+\scope[rotate around={\pingu at x@mitra at angle:(\pingu at name-head-top)},shift={(\pingu at name-head-top)},shift={(\pingu at x@mitra at xshift,\pingu at x@mitra at yshift)},scale=\pingu at x@mitra at scale]
+\pingu at block{\pingu at color@mitra at background} (0,-.2185cm)++(180:\pingu at mitra@w at half{} and .035cm) arc (180:360:\pingu at mitra@w at half{} and .035cm) [rounded corners=1pt] -- ++(\pingu at x@mitra at overset,.3*\pingu at x@mitra at height) to[out=\pingu at x@mitra at lowerangle,in=\pingu at x@mitra at upperangle] ++(-\pingu at x@mitra at overset-\pingu at mitra@w at half-.66mm,.7*\pingu at x@mitra at height-.1mm)
+to[out=180-\pingu at x@mitra at upperangle+2,in=180-\pingu at x@mitra at lowerangle-2] ++(-\pingu at x@mitra at overset-\pingu at mitra@w at half+.66mm,-.7*\pingu at x@mitra at height+.1mm) [sharp corners] -- cycle;
+\pingu at block{\pingu at color@mitra} \pingu at x@mitra at path;
+% \pingu at block{\pingu at color@mitra} \pingupathmitraupper;
+\scope\clip\pingu at x@mitra at path;
+% TODO: switch to factors non relative to \pingu at x@mitra at overset
+\pingu at block{\pingu at color@mitra at lower@band} (0,-.2185cm)++(180:\pingu at mitra@w at half{} and .035cm) arc (180:360:\pingu at mitra@w at half{} and .035cm) -- ++(\pingu at x@mitra at lowerband@height*\pingu at x@mitra at overset,\pingu at x@mitra at lowerband@height*.3*\pingu at x@mitra at height) arc (0:-180:{\pingu at x@mitra at lowerband@height*\pingu at x@mitra at overset+\pingu at mitra@w at half} and .035cm) -- cycle;
+\pingu at block{\pingu at color@mitra at center@band} (\pingu at x@mitra at centerband@width*\pingu at x@mitra at overset+.1mm,-.2185cm) to[bend right=4] ++(0,\pingu at x@mitra at height) to[bend right] ++(-2*\pingu at x@mitra at centerband@width*\pingu at x@mitra at overset-.1mm,0) to[bend left=4] ++(0,-\pingu at x@mitra at height) -- cycle;
+\pingu at block{\pingu at color@mitra at upper@band} (0,.3*\pingu at x@mitra at height-.2185cm-0.5*\pingu at x@mitra at upperband@height*.3*\pingu at x@mitra at height)++(180:{\pingu at x@mitra at overset+\pingu at mitra@w at half} and .035cm) arc (180:360:{\pingu at x@mitra at overset+\pingu at mitra@w at half} and .035cm) -- ++(0,\pingu at x@mitra at upperband@height*.3*\pingu at x@mitra at height) arc (0:-180:{\pingu at x@mitra at overset+\pingu at mitra@w at half} and .035cm) -- cycle;
+\endscope\endscope}
\ No newline at end of file
Modified: trunk/Master/texmf-dist/tex/latex/tikzpingus/tikzpingus-horse.lib.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tikzpingus/tikzpingus-horse.lib.tex 2023-09-18 01:27:40 UTC (rev 68309)
+++ trunk/Master/texmf-dist/tex/latex/tikzpingus/tikzpingus-horse.lib.tex 2023-09-18 20:05:29 UTC (rev 68310)
@@ -10,9 +10,10 @@
\def\basew{12}
\def\pingu@@horse at scale{.1}
-\def\pingu@@horse@@main{(1.275,.55) -- ++(.1,.2) -- ++(-.25,.25) to[bend right=4] ++(-.425,1.75) to[bend left=15] ++(.05,.2) to[bend right=30] ++(-.1,1.9) to[bend left=30] ++(0,1.65) coordinate(@back) to[bend left=30] ++(2,.625) to[bend right=18,looseness=.8] ++(3.25,-.1) [rounded corners=2*\pingu@@horse at scale] coordinate(@hair) to[out=34,in=185] ++(3,1.3) to[bend left=19] coordinate[pos=.5](@ear) ++(.85,-.4) to[bend left=5] ++(.24,-.45) to[bend right=20] ++(0,-.7) to[bend left=2] ++(.1,-.55) to[out=-85,in=-60,looseness=.75] ++(-.475,-.35) coordinate(@mouth) to[out=-135,in=-120] ++(-.37,.25) -- ++(0,.1)
+\def\pingu@@horse@@main{(1.275,.55) -- ++(\if at pingu@@horse@@donkey at .05\else.1\fi,.2) -- ++(\if at pingu@@horse@@donkey at -.2\else-.25\fi,.25) to[bend right=4] ++(-.425,1.75) to[bend left=15] ++(.05,.2) to[bend right=30] ++(-.1,1.9) to[bend left=30] ++(0,1.65) coordinate(@back) to[bend left=30] ++(2,.625) to[bend right=18,looseness=.8] ++(3.25,-.1) [rounded corners=2*\pingu@@horse at scale] coordinate(@hair) to[out=34,in=185] ++(3,1.3) to[bend left=19] coordinate[pos=.5](@ear) ++(.85,-.4) to[bend left=5] ++(.24,-.45) to[bend right=20] ++(\if at pingu@@horse@@donkey at .25\else0\fi,\if at pingu@@horse@@donkey at -1.2\else-.7\fi) to[bend left=2] ++(.1,-.55) to[out=-85,in=-60,looseness=.75] ++(\if at pingu@@horse@@donkey at -.55\else-.475\fi,\if at pingu@@horse@@donkey at -.45\else-.35\fi) coordinate(@mouth) to[out=-135,in=-120] ++(\if at pingu@@horse@@donkey at -.4\else-.37\fi,\if at pingu@@horse@@donkey at .2\else.25\fi) -- ++(0,.1)
to[out=125,in=-68] ++(-.58,.615) coordinate (@mouth-low)
-to[out=215,in=80] ++(-1.25,-2) to[bend left=24] ++(-.65,-1) to[out=258,in=86] ++(-.42,-1.25) to[bend left=3] ++(-.2,-.6) to[bend right=10] ++(-.14,-1.15) to[bend left=2] coordinate[pos=.35] (@hooffront) ++(.355,-.565) to[bend left=15] ++(-.4,-.075) to[bend left=10] ++(-.28,.1) to[bend left=9] ++(.06,.3) to[bend right=9] ++(-.2,.4) to[out=80,in=-80] ++(.138,1.4) to[out=70,in=-103] ++(.2,1.3) to[bend right=10] ++(-.225,.44) coordinate (@frontleg) to[out=196,in=-25] ++(-3.3,.575) coordinate (@backleg) to[bend right=10] ++(-.8,-1.5) to[bend right=20] ++(.1,-2.35) -- ++(.2,-.25) to[bend right=8] ++(.15,-.26) to[bend left=10] ++(-.55,-.05) -- cycle}
+to[out=215,in=80] ++(-1.25,-2) to[bend left=24] ++(-.65,-1) to[out=258,in=86] ++(-.42,-1.25) to[bend left=3] ++(-.2,-.6) to[bend right=10] ++(-.14,-1.15) to[bend left=2] coordinate[pos=.62] (@hooffront) ++(.355,-.565) to[bend left=15] ++(-.4,-.075) to[bend left=10] ++(-.28,.1) to[bend left=9] ++(.06,.3) to[bend right=9] ++(-.2,.4) to[out=80,in=-80] ++(.138,1.4) to[out=70,in=-103] ++(.2,1.3) to[bend right=10] ++(-.225,.44) coordinate (@frontleg) to[out=196,in=\if at pingu@@horse@@donkey at -65\else-25\fi] ++(-3.3,\if at pingu@@horse@@donkey at .4\else.575\fi) coordinate (@backleg) to[bend right=\if at pingu@@horse@@donkey at 16\else10\fi] ++(-.8,\if at pingu@@horse@@donkey at -1.375\else-1.5\fi) to[bend right=\if at pingu@@horse@@donkey at 9\else20\fi] ++(.1,-2.35) -- ++(\if at pingu@@horse@@donkey at .1\else.2\fi,-.25)
+coordinate (@hoofback) to[bend right=\if at pingu@@horse@@donkey at 9\else8\fi] ++(.15,-.26) to[bend left=10] ++(\if at pingu@@horse@@donkey at -.66\else-.55\fi,\if at pingu@@horse@@donkey at -.15\else-.05\fi) -- cycle}
% #1 is the wing for the color and key assignments
\def\pingu@@drawer at horse#1{
@@ -27,55 +28,93 @@
% Sockel
\csname if at pingu@x at horse@#1 at base@\endcsname
-\pingu at block[draw=\csname pingu at color@horse#1 at base@shade at draw\endcsname,line width=2pt*\pingu@@horse at scale]{\csname pingu at color@horse#1 at base@shade\endcsname} (4.35-\basew/2,.433) -- ++(0,-.5) arc(180:360:\basew/2 and 1) -- ++(0,.5) arc(360:180:\basew/2 and 1);
-\pingu at block[draw=\csname pingu at color@horse#1 at base@draw\endcsname,line width=2pt*\pingu@@horse at scale]{\csname pingu at color@horse#1 at base\endcsname} (4.35,.433) ellipse[x radius=\basew/2,y radius=1];
+\pingu at block[draw=\csname pingu at color@horse#1 at base@shade at draw\endcsname,line width=\@pingu@@horse at lw*\pingu@@horse at scale]{\csname pingu at color@horse#1 at base@shade\endcsname} (4.35-\basew/2,.433) -- ++(0,-.5) arc(180:360:\basew/2 and 1) -- ++(0,.5) arc(360:180:\basew/2 and 1);
+\pingu at block[draw=\csname pingu at color@horse#1 at base@draw\endcsname,line width=\@pingu@@horse at lw*\pingu@@horse at scale]{\csname pingu at color@horse#1 at base\endcsname} (4.35,.433) ellipse[x radius=\basew/2,y radius=1];
\fi
+% background front leg
+\pingu at block[draw=\csname pingu at color@horse#1 at draw\endcsname,line width=\@pingu@@horse at lw*\pingu@@horse at scale]{\csname pingu at color@horse#1\endcsname} [rounded corners=1*\pingu@@horse at scale](@frontleg) to[out=266,in=85] ++(.09,-.5) to[bend left=10] ++(-.15,-.8)
+to[bend right=7] ++(-.05,-.2) to[bend left=13] ++(-.2,-1.15) to[bend right=13] ++(.15,-.2) to[bend left=10] ++(-.07,-.3) to[bend right=100] ++(.45,-.1) to[bend right=10] coordinate[pos=0.08](@hooffront@) ([yshift=5mm,xshift=3mm]@frontleg) -- cycle;
+\pingu at block[draw=\csname pingu at color@horse#1 at fr@hoof\endcsname!80!pingu at black,line width=2pt*\pingu@@horse at scale,rounded corners=.12]{\csname pingu at color@horse#1 at fr@hoof\endcsname} (@hooffront@) to[bend left=2] ++(0,-.565*.665) to[bend left=59] ++(-.225,-.08) -- ++(-.02,.03) to[bend left=20] ++(-.315,.11) to[bend right=6] ++(.092,.2) to[bend right=25] cycle;
+% background back le0
+\pingu at block[draw=\csname pingu at color@horse#1 at draw\endcsname,line width=\@pingu@@horse at lw*\pingu@@horse at scale]{\csname pingu at color@horse#1\endcsname} [rounded corners=1*\pingu@@horse at scale](@backleg) to[out=-115,in=\if at pingu@@horse@@donkey at 120\else130\fi] ++(-.3,-3.5) -- ++(.2,-.3) coordinate(@hoofback@) to[bend left] ++(-.5,-.1)
+-- ++(\if at pingu@@horse@@donkey at -.2\else-.05\fi,.15) -- ++(0,.15) to[bend left=\if at pingu@@horse@@donkey at 45\else60\fi] cycle;
+\pingu at block[draw=\csname pingu at color@horse#1 at br@hoof\endcsname!80!pingu at black,line width=2pt*\pingu@@horse at scale]{\csname pingu at color@horse#1 at br@hoof\endcsname} (@hoofback@) to[bend right=\if at pingu@@horse@@donkey at 9\else9\fi] ++(.206,-.265) to[bend left=10] ++(\if at pingu@@horse@@donkey at -.66\else-.55\fi,\if at pingu@@horse@@donkey at -.15\else-.05\fi) -- ++(-1.73mm,2.42mm) to[bend right=6] cycle;
-\pingu at block[draw=\csname pingu at color@horse#1 at draw\endcsname,line width=1.75pt*\pingu@@horse at scale]{\csname pingu at color@horse#1\endcsname} [rounded corners=1*\pingu@@horse at scale](@frontleg) to[out=266,in=85] ++(.09,-.5) to[bend left=10] ++(-.15,-.8)
-to[bend right=7] ++(-.05,-.2) to[bend left=13] ++(-.2,-1.15) to[bend right=13] ++(.15,-.2) to[bend left=10] ++(-.07,-.3) to[bend right=100] ++(.45,-.1) to[bend right=10] ([yshift=5mm]@frontleg) -- cycle;
+\if at pingu@@horse@@donkey@
+\pingu at block[draw=\csname pingu at color@horse#1 at tail@draw\endcsname,line width=\@pingu@@horse at lw*\pingu@@horse at scale]{\csname pingu at color@horse#1 at tail\endcsname} [rounded corners=1*\pingu@@horse at scale](@back) to[out=215,in=95] ++(-.1,-2) to[out=270,in=92] ++(0,-.75) [sharp corners] to[bend right=20] coordinate[pos=.5] (@) ++(.15,0) to[bend right=10] cycle;
+% TODO: hide support
+%\node[draw=\csname pingu at color@horse#1 at tail@draw\endcsname,fill=\csname pingu at color@horse#1 at tail\endcsname,cloud,cloud puffs=30,cloud ignores aspect,scale=1.33*\pingu@@horse at scale,yshift=16mm,rotate=-5,line width=\@pingu@@horse at lw*\pingu@@horse at scale] at (@) {\rotatebox{90}{\phantom{A}\hskip7.5em}};
+\scope[rotate around={180:(@)}] % adapted from the broom
+\pingu at block[rounded corners=.44pt,draw=\csname pingu at color@horse#1 at tail@draw\endcsname]{\csname pingu at color@horse#1 at tail\endcsname} (@)++(-1mm,-2mm) to[out=115,in=240] ++(3mm,12.5mm) to[out=300,in=65] ([xshift=.95mm,yshift=-2mm]@) to[bend right=4] ([xshift=-.75mm,yshift=-2mm]@) -- cycle;
+\pingu at block[rounded corners=.44pt,draw=\csname pingu at color@horse#1 at tail@draw\endcsname]{\csname pingu at color@horse#1 at tail\endcsname} (@)++(-1mm,-2mm) to[out=115,in=240] coordinate[pos=.17] (@r) coordinate[pos=.19] (@r2) ++(-.75mm,10.5mm) to[out=300,in=65] ([xshift=.95mm,yshift=-2mm]@) to[bend right=4] ([xshift=-.75mm,yshift=-2mm]@) -- cycle;
+\pingu at block[rounded corners=.44pt,draw=\csname pingu at color@horse#1 at tail@draw\endcsname]{\csname pingu at color@horse#1 at tail\endcsname}(@)++(-.5mm,-1.5mm) to[out=115,in=240] ++(.5mm,12mm) to[out=300,in=65] ([xshift=.5mm,yshift=-1.5mm]@) -- cycle;
+\endscope
+\else
+\pingu at block[draw=\csname pingu at color@horse#1 at tail@draw\endcsname,line width=\@pingu@@horse at lw*\pingu@@horse at scale]{\csname pingu at color@horse#1 at tail\endcsname} [rounded corners=1*\pingu@@horse at scale](@back) to[out=215,in=90] ++(-.4,-2.5) to[out=270,in=92] ++(0,-2.8) [sharp corners] to[bend right=20] ++(.6,0) to[bend right=10] cycle;
+\fi
-\pingu at block[draw=\csname pingu at color@horse#1 at draw\endcsname,line width=1.75pt*\pingu@@horse at scale]{\csname pingu at color@horse#1\endcsname} [rounded corners=1*\pingu@@horse at scale](@backleg) to[out=-115,in=130] ++(-.3,-3.65) -- ++(.2,-.3) to[bend left] ++(-.5,-.1)
--- ++(-.05,.15) -- ++(0,.15) to[bend left=60] cycle;
-
-\pingu at block[draw=\csname pingu at color@horse#1 at tail@draw\endcsname,line width=1.75pt*\pingu@@horse at scale]{\csname pingu at color@horse#1 at tail\endcsname} [rounded corners=1*\pingu@@horse at scale](@back) to[out=215,in=90] ++(-.4,-2.5) to[out=270,in=92] ++(0,-2.8) [sharp corners] to[bend right=20] ++(.6,0) to[bend right=10] cycle;
-
% back ear
-\pingu at block[draw=\csname pingu at color@horse#1 at draw\endcsname,line width=1.35pt*\pingu@@horse at scale]{\csname pingu at color@horse#1 at ears\endcsname} ([xshift=.2mm,yshift=-1.5mm]@ear) to[bend left=20] ++(.373,.565) coordinate(@) to[bend left=10] ++(-.15,-.75);
-
+\if at pingu@@horse@@donkey@
+\pingu at block[draw=\csname pingu at color@horse#1 at draw\endcsname,line width=\@pingu@@horse at lw*\pingu@@horse at scale]{\csname pingu at color@horse#1 at ears\endcsname} ([xshift=.2mm,yshift=-1.5mm]@ear) to[bend left=20] ++(.373,1.465) coordinate(@) to[bend left=10] ++(-.15,-1.5);
+\else
+\pingu at block[draw=\csname pingu at color@horse#1 at draw\endcsname,line width=\@pingu@@horse at lw*\pingu@@horse at scale]{\csname pingu at color@horse#1 at ears\endcsname} ([xshift=.2mm,yshift=-1.5mm]@ear) to[bend left=20] ++(.373,.565) coordinate(@) to[bend left=10] ++(-.15,-.75);
+\fi
% and here comes the wheeee (imagine-horse-sound)
-\pingu at block[draw=\csname pingu at color@horse#1 at draw\endcsname,line width=1.75pt*\pingu@@horse at scale]{\csname pingu at color@horse#1\endcsname} [rounded corners=1*\pingu@@horse at scale] \pingu@@horse@@main;
+\pingu at block[draw=\csname pingu at color@horse#1 at draw\endcsname,line width=\@pingu@@horse at lw*\pingu@@horse at scale]{\csname pingu at color@horse#1\endcsname} [rounded corners=1*\pingu@@horse at scale] \pingu@@horse@@main;
-\pingu at draw[line width=1.75pt*\pingu@@horse at scale]{\csname pingu at color@horse#1 at draw\endcsname} ([yshift=-.2mm]@mouth-low) to[bend left=12] ++(.06,.65);
-\pingu at draw[line width=1.75pt*\pingu@@horse at scale]{\csname pingu at color@horse#1 at mouth\endcsname} ([yshift=-.33mm]@mouth) -- ++(-.035,.225);
+\pingu at draw[line width=\@pingu@@horse at lw*\pingu@@horse at scale]{\csname pingu at color@horse#1 at draw\endcsname} ([yshift=-.1mm]@mouth-low) to[bend left=12] ++(.06,.65);
+\pingu at draw[line width=\@pingu@@horse at lw*\pingu@@horse at scale]{\csname pingu at color@horse#1 at mouth\endcsname} ([yshift=-.115mm]@mouth) -- ++(-.035,.225);
-\pingu at draw[line width=1.75pt*\pingu@@horse at scale,line join=round]{\csname pingu at color@horse#1 at nose\endcsname} ([xshift=3.85mm,yshift=2.45mm]@mouth) to[out=140,in=10] ++(-.17,-.074) to[bend right=49] cycle;
+\edef\pingu at tmp{\if at pingu@@horse@@donkey at 4.5mm\else3.85mm\fi}%
+\edef\pingu at tmpb{\if at pingu@@horse@@donkey at 3.65mm\else2.45mm\fi}%
+\pingu at draw[line width=\@pingu@@horse at lw*\pingu@@horse at scale,line join=round]{\csname pingu at color@horse#1 at nose\endcsname} ([xshift=\pingu at tmp,yshift=\pingu at tmpb]@mouth) to[out=140,in=10] ++(-.17,-.074) to[bend right=49] cycle;
-\pingu at draw[line width=1.75pt*\pingu@@horse at scale]{\csname pingu at color@horse#1 at draw\endcsname} ([yshift=-.35mm]@frontleg) to[bend left=12] ++(.01,.325);
-\pingu at draw[line width=1.75pt*\pingu@@horse at scale]{\csname pingu at color@horse#1 at draw\endcsname} ([yshift=-.2mm]@backleg) to[bend right=13] ++(.25,.425);
+\pingu at draw[line width=\@pingu@@horse at lw*\pingu@@horse at scale]{\csname pingu at color@horse#1 at draw\endcsname} ([yshift=-.35mm]@frontleg) to[bend left=12] ++(.01,.325);
+\pingu at draw[line width=\@pingu@@horse at lw*\pingu@@horse at scale]{\csname pingu at color@horse#1 at draw\endcsname} ([yshift=-.2mm]@backleg) to[bend right=13] ++(.25,.425);
-\pingu at block[draw=\csname pingu at color@horse#1 at mane@draw\endcsname,line width=1.75pt*\pingu@@horse at scale]{\csname pingu at color@horse#1 at mane\endcsname} [rounded corners=1*\pingu@@horse at scale](@hair) to[out=34,in=185] ++(3,1.3) to[bend left=10] ++(.415,-.1) -- ++(-.1,-.4) to[out=194,in=30] ([yshift=-11.5mm,xshift=1.5mm]@hair) -- cycle;
+\if at pingu@@horse@@donkey@
+\pingu at block[draw=\csname pingu at color@horse#1 at mane@draw\endcsname,line width=\@pingu@@horse at lw*\pingu@@horse at scale]{\csname pingu at color@horse#1 at mane\endcsname} [rounded corners=1*\pingu@@horse at scale](@hair) to[out=34,in=185] ++(3,1.3) to[bend left=10] ++(.415,-.1) -- ++(-.1,-.25) to[out=186,in=35] ([yshift=-4mm,xshift=1.5mm]@hair) -- cycle;
-\pingu at block[draw=\csname pingu at color@horse#1 at thatch@draw\endcsname,line width=1.35pt*\pingu@@horse at scale]{\csname pingu at color@horse#1 at thatch\endcsname} [rounded corners=1*\pingu@@horse at scale]([xshift=2mm,yshift=-1mm]@ear) -- ++(-.1,-.3275) to[bend left=4] ++(.455,-.175) to[bend right=9] cycle;
+\pingu at block[draw=\csname pingu at color@horse#1 at thatch@draw\endcsname,line width=\@pingu@@horse at lw*\pingu@@horse at scale]{\csname pingu at color@horse#1 at thatch\endcsname} [rounded corners=1*\pingu@@horse at scale]([xshift=2.1mm,yshift=-1.05mm]@ear) -- ++(-.1,-.2) to[bend left=4] ++(.45,-.275) to[bend right=9] cycle;
+\else
+\pingu at block[draw=\csname pingu at color@horse#1 at mane@draw\endcsname,line width=\@pingu@@horse at lw*\pingu@@horse at scale]{\csname pingu at color@horse#1 at mane\endcsname} [rounded corners=1*\pingu@@horse at scale](@hair) to[out=34,in=185] ++(3,1.3) to[bend left=10] ++(.415,-.1) -- ++(-.1,-.4) to[out=194,in=30] ([yshift=-11.5mm,xshift=1.5mm]@hair) -- cycle;
+\pingu at block[draw=\csname pingu at color@horse#1 at thatch@draw\endcsname,line width=\@pingu@@horse at lw*\pingu@@horse at scale]{\csname pingu at color@horse#1 at thatch\endcsname} [rounded corners=1*\pingu@@horse at scale]([xshift=2mm,yshift=-1mm]@ear) -- ++(-.1,-.3275) to[bend left=4] ++(.455,-.175) to[bend right=9] cycle;
+\fi
+
% ear
-\pingu at block[draw=\csname pingu at color@horse#1 at draw\endcsname,line width=1.35pt*\pingu@@horse at scale]{\csname pingu at color@horse#1 at ears\endcsname} ([xshift=-.75mm,yshift=-1mm]@ear) to[bend left=20] ++(.393,.585) coordinate(@) to[bend right=10] ++(-.15,-.7);
-\pingu at block[draw=\csname pingu at color@horse#1 at draw\endcsname,line width=1.35pt*\pingu@@horse at scale]{\csname pingu at color@horse#1 at ears\endcsname} (@) to[bend right=7] ++(-.15,-.7) to[bend right=14] cycle;
+\if at pingu@@horse@@donkey@
+\pingu at block[draw=\csname pingu at color@horse#1 at draw\endcsname,line width=\@pingu@@horse at lw*\pingu@@horse at scale]{\csname pingu at color@horse#1 at ears\endcsname} ([xshift=-1mm,yshift=-1mm]@ear) to[bend left=15] ++(.393,1.685) coordinate(@) to[bend right=17] ++(-.15,-1.8);
+\pingu at block[draw=\csname pingu at color@horse#1 at draw\endcsname,line width=\@pingu@@horse at lw*\pingu@@horse at scale]{\csname pingu at color@horse#1 at ears\endcsname} (@) to[bend right=17] ++(-.15,-1.8) to[bend right=14] cycle;
+\else
+\pingu at block[draw=\csname pingu at color@horse#1 at draw\endcsname,line width=\@pingu@@horse at lw*\pingu@@horse at scale]{\csname pingu at color@horse#1 at ears\endcsname} ([xshift=-.75mm,yshift=-1mm]@ear) to[bend left=20] ++(.393,.585) coordinate(@) to[bend right=10] ++(-.15,-.7);
+\pingu at block[draw=\csname pingu at color@horse#1 at draw\endcsname,line width=\@pingu@@horse at lw*\pingu@@horse at scale]{\csname pingu at color@horse#1 at ears\endcsname} (@) to[bend right=7] ++(-.15,-.7) to[bend right=14] cycle;
+\fi
-
% the eye; this is no error it has draw as fill
\pingu at block{\csname pingu at color@horse#1 at eyes\endcsname} [rounded corners=.25*\pingu@@horse at scale] ([xshift=3mm,yshift=-7.5mm]@ear) to[bend right=20] ++(.125,-.2) to[bend right=50] ++(.1,.125) to[bend left=15] cycle;
+
+\pingu at block[draw=\csname pingu at color@horse#1 at fl@hoof\endcsname!80!pingu at black,line width=2pt*\pingu@@horse at scale]{\csname pingu at color@horse#1 at fl@hoof\endcsname} (@hooffront) to[bend left=2] ++(.355*.49,-.545*.49) to[bend left=11] ++(-.45-.295,-.05+0.033)to[bend right=2] ++(.046,.29) to[bend right=10] cycle;
+\pingu at block[draw=\csname pingu at color@horse#1 at bl@hoof\endcsname!80!pingu at black,line width=2pt*\pingu@@horse at scale]{\csname pingu at color@horse#1 at bl@hoof\endcsname} (@hoofback) to[bend right=\if at pingu@@horse@@donkey at 9\else8\fi] ++(.15,-.26) to[bend left=10] ++(\if at pingu@@horse@@donkey at -.66\else-.55\fi,\if at pingu@@horse@@donkey at -.15\else-.05\fi) -- ++(-1.73mm,2.42mm) to[bend right=6] cycle; %to[bend left=2] ++(.355*.65,-.565*.65) to[bend left=15] ++(-.395,-.075) to[bend left=10] ++(-.293,.105) to[bend left=9] ++(.06,.3) to[bend left=5] cycle;
}
+% universal switch for all three positions
+\newif\if at pingu@@horse@@donkey@
+
\newif\if at pingu@x at horse@left at flip@
\newif\if at pingu@x at horse@right at flip@
\newif\if at pingu@x at horse@left at base@
\newif\if at pingu@x at horse@right at base@
+\newif\if at pingu@x at horse@left at donkey@
+\newif\if at pingu@x at horse@right at donkey@
\pingu at create@wing at extra{horse}{%
horse \@lr/.code = {\pingu at set@extra{horse\@lr}{true}\pingu at color{horse\@lr}{##1}},
horse \@lr/.default = pingu at bronze!80!pingu at black,
horse \@lr\space flip/.is if = @pingu at x@horse@\@lr @flip@,
+ horse \@lr\space donkey/.is if = @pingu at x@horse@\@lr @donkey@,
horse \@lr\space has base/.is if = @pingu at x@horse@\@lr @base@,
horse \@lr\space draw/.code = \pingu at color{horse\@lr @draw}{##1},%
+ horse \@lr\space line width/.code = \@namedef{pingu at horse\@lr @x at line@width}{##1},%
horse \@lr\space mane/.code = \pingu at color{horse\@lr @mane}{##1},%
horse \@lr\space mane draw/.code = \pingu at color{horse\@lr @mane at draw}{##1},%
horse \@lr\space thatch/.code = \pingu at color{horse\@lr @thatch}{##1},%
@@ -91,10 +130,19 @@
horse \@lr\space base draw/.code = \pingu at color{horse\@lr @base at draw}{##1},%
horse \@lr\space base shade/.code = \pingu at color{horse\@lr @base at shade}{##1},%
horse \@lr\space base shade draw/.code = \pingu at color{horse\@lr @base at shade@draw}{##1},%
+ horse \@lr\space front left hoof/.code = \pingu at color{horse\@lr @fl at hoof}{##1},%
+ horse \@lr\space front right hoof/.code= \pingu at color{horse\@lr @fr at hoof}{##1},%
+ horse \@lr\space back left hoof/.code = \pingu at color{horse\@lr @bl at hoof}{##1},%
+ horse \@lr\space back right hoof/.code = \pingu at color{horse\@lr @br at hoof}{##1},%
+ horse \@lr\space front hoofs/.style = {/pingu/horse \@lr\space front left hoof=##1,/pingu/horse \@lr\space front right hoof=##1},
+ horse \@lr\space back hoofs/.style = {/pingu/horse \@lr\space back left hoof=##1,/pingu/horse \@lr\space back right hoof=##1},
+ horse \@lr\space hoofs/.style = {/pingu/horse \@lr\space front hoofs=##1,/pingu/horse \@lr\space back hoofs=##1},
+ horse \@lr\space hoofs/.default = gray!80!white,
+ % TODO: allow colors to be styles?
horse \@lr\space xshift/.code = \@namedef{pingu at x@horse\@lr @xshift}{##1},
horse \@lr\space yshift/.code = \@namedef{pingu at x@horse\@lr @yshift}{##1},
horse \@lr\space on base/.style ={/pingu/horse \@lr\space yshift=4cm},
-}{horse \@lr\space draw=\csname pingu at color@horse\@lr\endcsname!80!pingu at black,horse \@lr\space mane=\csname pingu at color@horse\@lr\endcsname!86!pingu at white,horse \@lr\space mane draw=\csname pingu at color@horse\@lr @mane\endcsname!80!pingu at black,horse \@lr\space eyes=\csname pingu at color@horse\@lr @draw\endcsname,horse \@lr\space mouth=\csname pingu at color@horse\@lr @draw\endcsname,horse \@lr\space nose=\csname pingu at color@horse\@lr @draw\endcsname,horse \@lr\space ears=\csname pingu at color@horse\@lr\endcsname,horse \@lr\space thatch=\csname pingu at color@horse\@lr @mane\endcsname,horse \@lr\space thatch draw=\csname pingu at color@horse\@lr @thatch\endcsname!80!pingu at black,horse \@lr\space tail=\csname pingu at color@horse\@lr @mane\endcsname,horse \@lr\space tail draw=\csname pingu at color@horse\@lr @tail\endcsname!80!pingu at black,horse \@lr\space has base=false,horse \@lr\space base=lightgray!90!black,horse \@lr\space base draw=\csname pingu at color@horse\@lr @base\endcsname!91!pingu at black,horse \@lr\space base shade=lightgray!80!black,horse \@lr\space base shade draw=\csname pingu at color@horse\@lr @base at shade\endcsname!91!pingu at black,horse \@lr\space xshift=0pt,horse \@lr\space yshift=0pt,horse \@lr\space flip=\ifx\@lr\pingu at str@wing at left true\else false\fi}
+}{horse \@lr\space draw=\csname pingu at color@horse\@lr\endcsname!80!pingu at black,horse \@lr\space mane=\csname pingu at color@horse\@lr\endcsname!86!pingu at white,horse \@lr\space mane draw=\csname pingu at color@horse\@lr @mane\endcsname!80!pingu at black,horse \@lr\space eyes=\csname pingu at color@horse\@lr @draw\endcsname,horse \@lr\space mouth=\csname pingu at color@horse\@lr @draw\endcsname,horse \@lr\space nose=\csname pingu at color@horse\@lr @draw\endcsname,horse \@lr\space ears=\csname pingu at color@horse\@lr\endcsname,horse \@lr\space thatch=\csname pingu at color@horse\@lr @mane\endcsname,horse \@lr\space thatch draw=\csname pingu at color@horse\@lr @thatch\endcsname!80!pingu at black,horse \@lr\space tail=\csname pingu at color@horse\@lr @mane\endcsname,horse \@lr\space tail draw=\csname pingu at color@horse\@lr @tail\endcsname!80!pingu at black,horse \@lr\space has base=false,horse \@lr\space base=lightgray!90!black,horse \@lr\space base draw=\csname pingu at color@horse\@lr @base\endcsname!91!pingu at black,horse \@lr\space base shade=lightgray!80!black,horse \@lr\space base shade draw=\csname pingu at color@horse\@lr @base at shade\endcsname!91!pingu at black,horse \@lr\space xshift=0pt,horse \@lr\space yshift=0pt,horse \@lr\space flip=\ifx\@lr\pingu at str@wing at left true\else false\fi,horse \@lr\space donkey=false,horse \@lr\space line width=1.75pt,horse \@lr\space hoofs=\@pingu at none}
\def\pingu at draw@wi at horse#1{%
\pingu at setup@wing{horse}{#1}%
@@ -104,10 +152,78 @@
\else
\scope[xshift=4cm+\csname pingu at x@horse#1 at xshift\endcsname,yshift=-42mm+\csname pingu at x@horse#1 at yshift\endcsname,xscale=-1]
\fi
+\csname if at pingu@x at horse@#1 at donkey@\endcsname
+ \@pingu@@horse@@donkey at true
+\fi
+ \edef\@pingu@@horse at lw{\csname pingu at horse#1 at x@line at width\endcsname}
\pingu@@drawer at horse{#1}
- % hoof
- % \pingu at block[draw=\csname pingu at color@horse#1 at base@shade at draw\endcsname,line width=2pt*\pingu@@horse at scale]{\csname pingu at color@horse#1 at base@shade\endcsname} (@hooffront) to[bend left=2] ++(.355*.65,-.565*.65) to[bend left=15] ++(-.395,-.075) to[bend left=10] ++(-.293,.105) to[bend left=9] ++(.06,.3) to[bend left=5] cycle;
+ % TODO-SET: hoof
\endscope\endscope
}
% todo: make statue extra
-% todo: make horse hat
\ No newline at end of file
+% todo: make horse hat
+
+% to get on horse we create some kind of third wing item: 'on'
+% that will be used to initialize all of the colors and keys
+\newif\if at pingu@x at horse@on at flip@
+\newif\if at pingu@x at horse@on at base@
+\newif\if at pingu@x at horse@on at boundingbox@
+\newif\if at pingu@x at horse@on at donkey@
+% TODO: select keys
+% TODO: option so it does not affect the bounding box (default!)
+\pingu at create@extra{horseon}{%
+ on horse/.code = {\pingu at set@extra{horseon}{true}\pingu at color{horseon}{#1}},
+ on horse/.default = pingu at bronze!80!pingu at black,
+ horse behind/.style = {on horse=#1, on horse scale=.325, on horse yshift=6.15cm},
+ horse behind/.default = pingu at bronze!80!pingu at black,
+ on horse flip/.is if = @pingu at x@horse at on@flip@,
+ on horse donkey/.is if = @pingu at x@horse at on@donkey@,
+ on horse has base/.is if = @pingu at x@horse at on@base@,
+ on horse has bounding box/.is if = @pingu at x@horse at on@boundingbox@,
+ on horse draw/.code = \pingu at color{horseon at draw}{#1},%
+ on horse line width/.code = \@namedef{pingu at horseon@x at line@width}{#1},%
+ on horse mane/.code = \pingu at color{horseon at mane}{#1},%
+ on horse mane draw/.code = \pingu at color{horseon at mane@draw}{#1},%
+ on horse thatch/.code = \pingu at color{horseon at thatch}{#1},%
+ on horse thatch draw/.code = \pingu at color{horseon at thatch@draw}{#1},%
+ on horse tail/.code = \pingu at color{horseon at tail}{#1},%
+ on horse tail draw/.code = \pingu at color{horseon at tail@draw}{#1},%
+ on horse eyes/.code = \pingu at color{horseon at eyes}{#1},%
+ on horse eye/.forward to = /pingu/on horse eyes,%
+ on horse mouth/.code = \pingu at color{horseon at mouth}{#1},%
+ on horse nose/.code = \pingu at color{horseon at nose}{#1},%
+ on horse ears/.code = \pingu at color{horseon at ears}{#1},%
+ on horse base/.code = \pingu at color{horseon at base}{#1},%
+ on horse base draw/.code = \pingu at color{horseon at base@draw}{#1},%
+ on horse base shade/.code = \pingu at color{horseon at base@shade}{#1},%
+ on horse base shade draw/.code = \pingu at color{horseon at base@shade at draw}{#1},%
+ on horse front left hoof/.code = \pingu at color{horseon at fl@hoof}{#1},%
+ on horse front right hoof/.code = \pingu at color{horseon at fr@hoof}{#1},%
+ on horse back left hoof/.code = \pingu at color{horseon at bl@hoof}{#1},%
+ on horse back right hoof/.code = \pingu at color{horseon at br@hoof}{#1},%
+ on horse front hoofs/.style = {/pingu/on horse front left hoof=#1,/pingu/on horse front right hoof=#1},
+ on horse back hoofs/.style = {/pingu/on horse back left hoof=#1,/pingu/on horse back right hoof=#1},
+ on horse hoofs/.style = {/pingu/on horse front hoofs=#1,/pingu/on horse back hoofs=#1},
+ on horse hoofs/.default = gray!80!white,
+ on horse xshift/.code = \@namedef{pingu at x@horseon at xshift}{#1},
+ on horse yshift/.code = \@namedef{pingu at x@horseon at yshift}{#1},
+ on horse scale/.code = \@namedef{pingu at x@horseon at scale}{#1}
+}{on horse draw=\pingu at color@horseon!80!pingu at black,on horse mane=\pingu at color@horseon!86!pingu at white,on horse mane draw=\pingu at color@horseon at mane!80!pingu at black,on horse eyes=\pingu at color@horseon at draw,on horse mouth=\pingu at color@horseon at draw,on horse nose=\pingu at color@horseon at draw,on horse ears=\pingu at color@horseon,on horse thatch=\pingu at color@horseon at mane,on horse thatch draw=\pingu at color@horseon at thatch!80!pingu at black,on horse tail=\pingu at color@horseon at mane,on horse tail draw=\pingu at color@horseon at tail!80!pingu at black,on horse has base=false,on horse base=lightgray!90!black,on horse base draw=\pingu at color@horseon at base!91!pingu at black,on horse base shade=lightgray!80!black,on horse base shade draw=\pingu at color@horseon at base@shade!91!pingu at black,on horse xshift=0pt,on horse yshift=0pt,on horse flip=false,on horse scale=0.75,on horse has bounding box=false,on horse donkey=false,on horse line width=1.75pt,on horse hoofs=\@pingu at none}
+
+
+\def\pingu at draw@eb at horseon{%
+\pingu at layer{background}[scale=\pingu at x@horseon at scale,every path/.append style={line cap=round, line join=round},shift=(\pingu at name-bottom-center)]
+\if at pingu@x at horse@on at donkey@
+ \@pingu@@horse@@donkey at true
+\fi
+\if at pingu@x at horse@on at flip@
+ \scope[xshift=-45mm-\pingu at x@horseon at xshift,yshift=-67mm+\pingu at x@horseon at yshift,xscale=\if at pingu@x at horse@on at donkey@ 1.1\else1\fi,yscale=\if at pingu@@horse@@donkey at .9\else1\fi]
+ \else
+ \scope[xshift=45mm+\pingu at x@horseon at xshift,yshift=-67mm+\pingu at x@horseon at yshift,xscale=\if at pingu@x at horse@on at donkey@-1.1\else-1\fi,yscale=\if at pingu@@horse@@donkey at .9\else1\fi]
+ \fi
+\edef\@pingu@@horse at lw{\pingu at horseon@x at line@width}
+\if at pingu@x at horse@on at boundingbox@\else\pgfinterruptboundingbox\fi
+ \pingu@@drawer at horse{on}
+\if at pingu@x at horse@on at boundingbox@\else\endpgfinterruptboundingbox\fi
+\endscope\endpingu at layer
+}
\ No newline at end of file
Modified: trunk/Master/texmf-dist/tex/latex/tikzpingus/tikzpingus-science-fiction.lib.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tikzpingus/tikzpingus-science-fiction.lib.tex 2023-09-18 01:27:40 UTC (rev 68309)
+++ trunk/Master/texmf-dist/tex/latex/tikzpingus/tikzpingus-science-fiction.lib.tex 2023-09-18 20:05:29 UTC (rev 68310)
@@ -6,7 +6,7 @@
\newif\if at pingu@x at lightsaber@double at left
\newif\if at pingu@x at lightsaber@double at right
\def\pingu at x@saberglow at w@half{.9mm}
-\def\pingulightsaberfactor{.028}
+\def\pingulightsaberfactor{.013}
\pingu at create@wing at extra{lightsaber}{%
lightsaber \@lr/.code = {\pingu at set@extra{lightsaber\@lr}{true}\pingu at color{lightsaber\@lr}{##1}},
lightsaber \@lr/.default = pingu at blue,
@@ -100,13 +100,13 @@
\pingu at layer{foreground}[]
\pgfinterruptboundingbox
\path[clip,/pingu/@invclip] (\pingu at name-wing-#1)++(-.275mm,#2-.1mm) -- ++(.1mm,#4) arc(180:0:.175mm and .25mm) -- ++(.1mm,-#4) arc (0:-180:.275mm and .065mm);
- \@for\i:={1,1.1,1.2,1.3,1.5}\do{
- \pingu at block[/pingu/@glow,fill opacity=\csname pingu at x@lightsaber at ogf@#1\endcsname/\i]{#5} (\pingu at name-wing-#1) ++(.05mm,#2+#4/2) circle[radius=\i*#4];
+ \@for\i:={1,1.1,1.2,1.3,1.4}\do{
+ \pingu at block[fill opacity=\csname pingu at x@lightsaber at ogf@#1\endcsname/\i]{#5} (\pingu at name-wing-#1) ++(.05mm,#2+#4/2) circle[radius=\i*#4];
}
\endpgfinterruptboundingbox
\endpingu at layer
\fi
- % fadings hat a rotation angle bug
+ % fadings had a rotation angle bug
\@for\i:={1,2}\do{
\pingu at block[fill opacity=.125*\i/10]{#5} (\pingu at name-wing-#1)++(-\pingu at x@saberglow at w@half+\i*\i mm/440,#2) -- ++(.05mm,#4) arc(180:0:\pingu at x@saberglow at w@half-.05mm-\i*\i mm/440 and \pingu at one-\i mm/30) -- ++(.05mm,-#4) arc (0:-180:\pingu at x@saberglow at w@half-\i*\i mm/440 and .35mm);
}
@@ -146,7 +146,7 @@
light-staff \@lr\space core width/.code = \expandafter\def\csname pingu at lightstaff@\@lr @core at width\endcsname{##1},%
light-staff \@lr\space glow/.is if = @pingu at x@lightstaff at glow@\@lr,%
light-staff \@lr\space outer glow factor/.code = {\@namedef{pingu at x@lightstaff at ogf@\@lr}{##1}},%
-}{light-staff \@lr\space length=28mm,light-staff \@lr\space staff=pingu at bronze,light-staff \@lr\space head=pingu at green,light-staff \@lr\space core=pingu at white,light-staff \@lr\space glow=\ifpengu at setup@glows@ true\else false\fi,light-staff \@lr\space outer glow factor=.082,light-staff \@lr\space glow length=13mm,light-staff \@lr\space core width=.44mm}
+}{light-staff \@lr\space length=28mm,light-staff \@lr\space staff=pingu at bronze,light-staff \@lr\space head=pingu at green,light-staff \@lr\space core=pingu at white,light-staff \@lr\space glow=\ifpengu at setup@glows@ true\else false\fi,light-staff \@lr\space outer glow factor=.022,light-staff \@lr\space glow length=13mm,light-staff \@lr\space core width=.44mm}
\def\pingu at draw@wi at lightstaff#1{%
\pingu at setup@wing{lightstaff}{#1}%
\scope[rotate around={\@angle:(\pingu at name-wing-#1)}]
@@ -160,7 +160,7 @@
% #1 wing, #2 start, #3 color
\def\pingu at draw@wi at lightstaff@pre#1#2#3{
\csname if at pingu@x at lightstaff@glow@#1\endcsname
-\@for\i:={0,1,2,4,6,7,8,9,10,14}\do{
+\@for\i:={0,1,2,3,6,7,9,10,13}\do{
\pingu at block[fill opacity=\ifnum\i>14 .225\else.1\fi*\i/20]{#3} (#2)++(0,-\i mm/15) -- ++(-\csname pingu at lightstaff@#1 at core@width\endcsname-\i mm/30,1mm+\i mm/30) -- ++(0,2mm+\i mm/15) -- ++(\csname pingu at lightstaff@#1 at core@width\endcsname+\i mm/30,1mm+\i mm/30) -- ++(\csname pingu at lightstaff@#1 at core@width\endcsname+\i mm/30,-1mm-\i mm/30) -- ++(0,-2mm-\i mm/15) -- cycle;
% -- ++(.05mm,#4) arc(180:0:\pingu at x@saberglow at w@half-.05mm-\i*\i mm/440 and \ifnum\i>14 .85mm\else\pingu at one\fi-\i mm/30) -- ++(.05mm,-#4) arc (0:-180:\pingu at x@saberglow at w@half-\i*\i mm/440 and .35mm);
}
@@ -174,8 +174,8 @@
\ifdim\csname pingu at x@lightstaff at ogf@#1\endcsname pt>\z@
\pingu at layer{foreground}[]
\pgfinterruptboundingbox
-\@for\i:={1,1.05,1.1,1.2,1.3,1.315,1.4,1.5}\do{
- \pingu at block[/pingu/@glow,fill opacity=\csname pingu at x@lightstaff at ogf@#1\endcsname/\i]{#3} (#2)++(0,2mm) circle[radius=\i*\csname pingu at lightstaff@#1 at glow@length\endcsname];
+\@for\i:={1,1.1,1.2,1.3,1.4}\do{
+ \pingu at block[fill opacity=\csname pingu at x@lightstaff at ogf@#1\endcsname/\i]{#3} (#2)++(0,2mm) circle[radius=\i*\csname pingu at lightstaff@#1 at glow@length\endcsname];
}
\endpgfinterruptboundingbox
\pingu at block[opacity=.65]{\csname pingu at color@lightstaff@#1 at head@core\endcsname} (#2)++(0,.5mm) -- ++(-.20mm,.75mm) -- ++(0,1.5mm) -- ++(.20mm,.75mm) -- ++(.20mm,-.75mm) -- ++(0,-1.5mm) -- cycle;
Modified: trunk/Master/texmf-dist/tex/latex/tikzpingus/tikzpingus.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tikzpingus/tikzpingus.sty 2023-09-18 01:27:40 UTC (rev 68309)
+++ trunk/Master/texmf-dist/tex/latex/tikzpingus/tikzpingus.sty 2023-09-18 20:05:29 UTC (rev 68310)
@@ -2,7 +2,7 @@
% Licensed under GNU General Public License version 3
% https://opensource.org/licenses/gpl-3.0.html
\def\tikzpingus at filename{tikzpingus}
-\ProvidesPackage{\tikzpingus at filename}[2022/08/24 version v1.0 Penguins in TikZ]
+\ProvidesPackage{\tikzpingus at filename}[2023/09/17 version v1.1 Penguins in TikZ]
\newif\ifpengu at setup@glows@
\DeclareOption{glows}{\pengu at setup@glows at true}\DeclareOption{noglows}{\pengu at setup@glows at false}
\newif\ifpengu at setup@manual at layers@
@@ -21,7 +21,8 @@
\pgfsetlayers{very-background,background,main,middle,foreground}
\fi
% #region whole setup
-% #region colors
+
+% <color definitions>
\def\@pingu at color@ #1#2(#3,#4,#5){\definecolor{pingu@#1}{#2}{#3,#4,#5}}
\@pingu at color@{main}RGB(3,14,29)
\@pingu at color@{black}RGB(23,19,19)
@@ -35,7 +36,7 @@
\@pingu at color@{red}RGB(217, 40, 28)
\@pingu at color@{purple}RGB(244,48,93)
\def\@pingu at none{!hide}
-% #endregion
+% <@color definitions>
% #region lengths and dimens
\newdimen\pingu at one@eight \pingu at one@eight=.125cm % constants to save tokens
@@ -56,7 +57,6 @@
\newdimen\pingu at foot@inner at w \pingu at foot@inner at w=.55cm
\newdimen\pingu at foot@inner at h \pingu at foot@inner at h=.115cm
-\newdimen\pingu at foot@offset at w \pingu at foot@offset at w=-.125cm
\newdimen\pingu at foot@single at w \pingu at foot@single at w=.105cm
\newdimen\pingu at foot@single at h \pingu at foot@single at h=2mm
\def\eyebaseang{38.5}
@@ -106,12 +106,17 @@
\long\def\pingu at create@extra#1#2#3{\expandafter\newif\csname if at pingu@x@#1@\endcsname\pgfqkeys{/pingu}{#2,extra defaults/.append style={#3}}}
\def\pingu at set@extra#1#2{\csname @pingu at x@#1@#2\endcsname}
+% <eyes selectors>
\pingu at create@selection{lefteye}{%
- \path ([yshift=.75mm,xshift=\pingu at eye@shift]\pingu at name-eye-back-left) coordinate (\pingu at name-eye-left);%
+ \path ([yshift=.75mm,xshift=\pingu at eye@shift]\pingu at name-eye-back-left)
+ coordinate (\pingu at name-eye-left);%
}
\pingu at create@selection{righteye}{%
- \path ([yshift=.75mm,xshift=-\pingu at eye@shift]\pingu at name-eye-back-right) coordinate (\pingu at name-eye-right);%
+ \path ([yshift=.75mm,xshift=-\pingu at eye@shift]\pingu at name-eye-back-right)
+ coordinate (\pingu at name-eye-right);%
}
+% <@eyes selectors>
+
\pingu at create@selection{leftwing}{%
\path ([yshift=-6.5mm]\pingu at name-wings-side-left)
coordinate (\pingu at name-wing-left-start)
@@ -125,16 +130,26 @@
coordinate (\pingu at name-wing-right);%
}
\pingu at create@selection{hairstyle}{}
+% <bill selector>
\pingu at create@selection{bill}{%
\coordinate (\pingu at name-bill-bottom) at (\pingu at name-bill);%
}
+% <@bill selector>
+% <feet selectors>
\pingu at create@selection{leftfoot}{}
\pingu at create@selection{rightfoot}{}
+% <@feet selectors>
+% <bodytype selector>
\pingu at create@selection{bodytype}{\pingu at x@bodytype at none}
+% <@bodytype selector>
% #endregion
% #region key setup
-\def\pingu at color#1#2{\expandafter\def\csname pingu at color@#1\endcsname{#2}}
+% <pingu at color>
+\def\pingu at color#1#2{%
+ \expandafter\def\csname pingu at color@#1\endcsname{#2}%
+}
+% <@pingu at color>
% HACK: store scale
\pgfqkeys{/tikz}{scale/.append code={\def\pingu at default@scale{#1}}}
@@ -143,7 +158,9 @@
\newif\if at pingu@draw at metadots
\newif\if at pingu@wi at flip@left
\newif\if at pingu@wi at flip@right
+% <feet conditional>
\newif\if at pingu@feet at front
+% <@feet conditional>
\pgfqkeys{/pingu}{
/pingu/.search also={/tikz,/pgf},
@@ -158,29 +175,47 @@
@block/.style = {/pingu/@pingu at all=#1, fill=#1},
@draw/.style = {/pingu/@pingu at all=#1, cap=round, draw=#1},
@text/.style = {transform shape,text=\pingu at color@body at main},
+ @body/.style = {},
+ @extras/.style = {},
+ @extras at above/.style = {},
+ @extras at below/.style = {},
+ @eyes/.style = {},
+ @belly/.style = {},
+ @wings/.style = {},
+ @wingitems/.style = {},
+ @feet/.style = {},
+ @bill/.style = {},
+ @hair/.style = {},
@clip even odd rule/.code = {\pgfseteorule}, % Credit to Andrew Stacey
@invclip/.style = {clip,insert path=[/pingu/@clip even odd rule]{[reset cm](-\maxdimen,-\maxdimen)rectangle(\maxdimen,\maxdimen)}},
@pingu/.style = {}, @pingu at main/.style = {},
- % feet
+% <feet keys>
left foot color/.code = \pingu at color{foot at left}{#1},
left foot/.code = \pingu at leftfoot@select{#1},
right foot color/.code = \pingu at color{foot at right}{#1},
right foot/.code = \pingu at rightfoot@select{#1},
- feet/.style = {/pingu/left foot={#1}, /pingu/right foot={#1}},
- feet color/.style = {/pingu/left foot color={#1}, /pingu/right foot color={#1}},
+ feet/.style = {
+ /pingu/left foot={#1},
+ /pingu/right foot={#1}
+ },
+ feet color/.style = {
+ /pingu/left foot color={#1},
+ /pingu/right foot color={#1}
+ },
feet front/.is if = @pingu at feet@front,
- % body
+% <@feet keys>
+% <bodytype keys>
body type/.code = \pingu at bodytype@select{#1},
body main/.code = \pingu at color{body at main}{#1},
body head/.code = \pingu at color{body at head}{#1},
body/.style = {/pingu/body main={#1}, /pingu/body head={#1}},
body front/.code = \pingu at color{body at front}{#1},
+% <@bodytype keys>
% belly
belly/.forward to = /pingu/belly text,
belly text/.style = {/pingu/belly raw={\node[/pingu/@text,opacity=.2] {#1};}},
belly raw/.code = \def\pingu at belly@raw{#1},
- heart/.style = {/pingu/belly raw={\node[/pingu/@text,#1] {\Large\faHeart};}},
- % eyes
+% <eyes keys>
left eye/.code = \pingu at lefteye@select{#1},
left eye color/.code = \pingu at color{eye at left}{#1},
left eye second color/.code = \pingu at color{eye at second@left}{#1},
@@ -187,9 +222,19 @@
right eye/.code = \pingu at righteye@select{#1},
right eye color/.code = \pingu at color{eye at right}{#1},
right eye second color/.code = \pingu at color{eye at second@right}{#1},
- eyes/.style = {/pingu/left eye={#1}, /pingu/right eye={#1}},
- eyes color/.style = {/pingu/left eye color={#1}, /pingu/right eye color={#1}},
- eyes second color/.style = {/pingu/left eye second color={#1}, /pingu/right eye second color={#1}},
+ eyes/.style = {
+ /pingu/left eye = {#1},
+ /pingu/right eye = {#1}
+ },
+ eyes color/.style = {
+ /pingu/left eye color = {#1},
+ /pingu/right eye color = {#1}
+ },
+ eyes second color/.style = {
+ /pingu/left eye second color = {#1},
+ /pingu/right eye second color = {#1}
+ },
+% <@eyes keys>
% wings
left wing color/.code = \pingu at color{left at wing}{#1},
left wing/.code = \pingu at leftwing@select{#1},
@@ -206,9 +251,10 @@
right item flip/.forward to = /pingu/right wing item flip,
right wing item angle/.code = {\def\pingu at wing@right at item@angle at user{#1}},%
right wing item flip/.is if = @pingu at wi@flip at right,
- % bill
+% <bill keys>
bill/.code = \pingu at bill@select{#1},
bill color/.code = \pingu at color{bill}{#1},
+% <@bill keys>
% hair color TODO: other colors
hair/.forward to = /pingu/hairs color,
hairs/.forward to = /pingu/hairs color,
@@ -256,6 +302,9 @@
\def\endpingu at layer{\endscope\endpgfonlayer}
% #endregion
+% colorname | mix with
+\def\@pingu at color@mixwith#1#2{\protected at edef\@tmp{#1}\ifx\@tmp\@pingu at none\else\expandafter\def\expandafter#1\expandafter{#1!#2}\fi}
+
% #region complete sets and styles
\newif\if at pingu@do at back@
\pgfqkeys{/pingu}{
@@ -262,6 +311,20 @@
:line/.style = {/pingu/@block/.append style={fill=none,draw=##1!80!black,shade=none,path fading=none}},
:fill/.style = {/pingu/body=#1,/pingu/body front=#1,/pingu/feet color=#1, /pingu/bill color=#1, /pingu/eyes color=#1, /pingu/eyes second color=#1},
:fill/.default = pingu at main,
+ :pingu/.style = {/pingu/@body/.style={#1},/pingu/@wings/.style={#1},/pingu/@eyes/.style={#1},/pingu/@bill/.style={#1},/pingu/@hair/.style={#1},/pingu/@feet/.style={#1}},
+ :mix-draw/.style = {:pingu={/pingu/@block/.append style={/pingu/@pingu at all={####1!#1}, fill={####1!#1}}}},
+ :mix-draw/.default = 50!white,
+ :mix-all/.style = {/pingu/@block/.append style={/pingu/@pingu at all={##1!#1}, fill={##1!#1}},/pingu/@draw/.append style={/pingu/@pingu at all={##1!#1}, draw={##1!#1}}},
+ :mix-all/.default = 50!white,
+ :mix/.style = {
+ /pingu/@body/.code={\@pingu at color@mixwith\pingu at color@body at main{#1}\@pingu at color@mixwith\pingu at color@body at head{#1}},
+ /pingu/@wings/.code={\@pingu at color@mixwith\pingu at color@left at wing{#1}\@pingu at color@mixwith\pingu at color@right at wing{#1}},
+ /pingu/@eyes/.code={\@pingu at color@mixwith\pingu at color@eye at left{#1}\@pingu at color@mixwith\pingu at color@eye at right{#1}\@pingu at color@mixwith\pingu at color@eye at second@left{#1}\@pingu at color@mixwith\pingu at color@eye at second@right{#1}},
+ /pingu/@bill/.code={\@pingu at color@mixwith\pingu at color@bill{#1}},
+ /pingu/@hair/.code={\@pingu at color@mixwith\pingu at color@hair at a{#1}\@pingu at color@mixwith\pingu at color@hair at b{#1}\@pingu at color@mixwith\pingu at color@hair at c{#1}\@pingu at color@mixwith\pingu at color@hair at d{#1}\@pingu at color@mixwith\pingu at color@hair at e{#1}},
+ /pingu/@feet/.code={\@pingu at color@mixwith\pingu at color@foot at left{#1}\@pingu at color@mixwith\pingu at color@foot at right{#1}}
+ },
+ :mix/.default = 50!white,
:ghost parts/.style = {/pingu/@pingu at all/.append style={opacity={#1}}},
:ghost parts/.default = {.5},
:ghost/.style = {/pingu/@pingu/.append style={opacity=#1,transparency group}},
@@ -279,10 +342,10 @@
% #region glows
\ifpengu at setup@glows@
\usetikzlibrary{fadings}%
-\tikzfading[name=pingu at halo fade out,inner color=transparent!0,outer color=transparent!100]
+\tikzfading[name=pingu at halo fade out,inner color=transparent!39,outer color=transparent!100]
\pgfqkeys{/pingu}{@glow/.style={path fading={pingu at halo fade out},#1}}
\else
-\pgfqkeys{/pingu}{@glow/.style={},/pingu/@saber at glow/.style={}}
+\pgfqkeys{/pingu}{@glow/.style={}}
\fi
% #endregion
% #endregion
@@ -301,29 +364,44 @@
\ifpengu at setup@manual at layers@\pgfsetlayers{background,main,middle,foreground}\fi\begingroup
\@pingu at do@back at false
\pgfqkeys{/pingu}{defaults, #1}%
+\ifdim\pingu at side@h at half<10.33mm \PackageWarning{\tikzpingus at filename}{Penguins with a height below 10.33mm may have unwanted artifacts.}\fi
\scope[/pingu/@pingu,/pingu/@pingu at main]
+\scope[/pingu/@body]
\@pingu at drawer@bodytype@
\pingu at body@app
+\endscope
+
\path (\pingu at name-head-center)++(0,-.05mm-\pingu at outer@off) coordinate (\pingu at name-bill);
-\scope[shift=(\pingu at name-belly-center)]
+\scope[shift=(\pingu at name-belly-center),/pingu/@belly]
\clip[use path=\pingu at whitepingu]; \pingu at belly@raw
\endscope
\coordinate (\pingu at name-head) at (\pingu at w@half,.7375cm);
+\scope[/pingu/@eyes]
\@pingu at drawer@lefteye@ \@pingu at drawer@righteye@
+\endscope
\pingu at layer{background}[]\pingu at draw@clothing at behind\endpingu at layer
\pingu at draw@clothing at middle
+\scope[/pingu/@extras,/pingu/@extras at below]
\pingu at draw@extras at below
+\endscope
+\scope[/pingu/@hair]
\@pingu at drawer@hairstyle@
+\endscope
+
\if at pingu@feet at front\else\pingu at layer{background}[]\fi
+\scope[/pingu/@feet]
\@pingu at drawer@leftfoot@ \@pingu at drawer@rightfoot@
+\endscope
\if at pingu@feet at front\else\endpingu at layer\fi
+\scope[/pingu/@wings]
\@pingu at drawer@leftwing@ \@pingu at drawer@rightwing@
+\endscope
\path (\pingu at name-wing-left-start) -- (\pingu at name-wing-left) --
([turn]\csname @pingu at wingdown@\@pingu at select@leftwing@ @\endcsname:2.45mm)
@@ -346,10 +424,17 @@
coordinate (\pingu at name-wing-right-start-up);
\pingu at draw@clothing at main
+\scope[/pingu/@bill]
\@pingu at drawer@bill@
+\endscope
+
+\scope[/pingu/@extras,/pingu/@extras at above]
\pingu at draw@extras at above
+\endscope
+\scope[/pingu/@wingitems]
\pingu at draw@wing at items
\endscope
+\endscope
\if at pingu@draw at metadots \@pingu at draw@dots \fi
\pingu at post
\endgroup
@@ -413,38 +498,69 @@
}
% #endregion
% #region none
+% <pingu at x@bodytype at none>
\def\pingu at x@bodytype at none{%
-\path[save path=\pingu at lowerpingu] (0,\pingu at outer@off)
-% left side
-to[bend right=\pingu at bend] coordinate[pos=.775] (\pingu at name-waist-right) ++(0,-\pingu at side@h at half-\pingu at outer@off)
-% feety stuff
-arc (180:270:\pingu at foot@outer at w{} and \pingu at foot@outer at h) coordinate (\pingu at name-foot-right)
-arc (270:332:\pingu at foot@inner at w{} and \pingu at foot@inner at h)
-coordinate (\pingu at name-bottom-center)
-arc (208:270:\pingu at foot@inner at w{} and \pingu at foot@inner at h) coordinate (\pingu at name-foot-left)
-arc (270:360:\pingu at foot@outer at w{} and \pingu at foot@outer at h)%
-% right side
-to[bend right=\pingu at bend] coordinate[pos=.225] (\pingu at name-waist-left) ++(0,\pingu at side@h at half+\pingu at outer@off)
-% coordinate
-coordinate (\pingu at name-wings-side-left)
--- (0,\pingu at outer@off) coordinate (\pingu at name-wings-side-right) coordinate[pos=.5] (\pingu at name-head-center) -- cycle;
+ % set the lower half
+ \path[save path=\pingu at lowerpingu] (0,\pingu at outer@off)
+ % left side
+ to[bend right=\pingu at bend]
+ coordinate[pos=.775] (\pingu at name-waist-right)
+ ++(0,-\pingu at side@h at half-\pingu at outer@off)
+ % feety stuff
+ arc (180:270:\pingu at foot@outer at w{} and \pingu at foot@outer at h)
+ coordinate (\pingu at name-foot-right)
+ arc (270:332:\pingu at foot@inner at w{} and \pingu at foot@inner at h)
+ coordinate (\pingu at name-bottom-center)
+ arc (208:270:\pingu at foot@inner at w{} and \pingu at foot@inner at h)
+ coordinate (\pingu at name-foot-left)
+ arc (270:360:\pingu at foot@outer at w{} and \pingu at foot@outer at h)
+ % right side
+ to[bend right=\pingu at bend]
+ coordinate[pos=.225] (\pingu at name-waist-left)
+ ++(0,\pingu at side@h at half+\pingu at outer@off)
+ % switch to left
+ coordinate (\pingu at name-wings-side-left)
+ -- (0,\pingu at outer@off)
+ coordinate[pos=.5] (\pingu at name-head-center)
+ coordinate (\pingu at name-wings-side-right)
+ -- cycle;
+ % set the upper half
+ \path[save path=\pingu at upperpingu] (\pingu at name-head-center)
+ ++(0,\pingu at head@h at half)
+ coordinate (\pingu at name-head-top)
+ arc(90:450:\pingu at w@half{} and \pingu at head@h at half)
+ coordinate[pos=\pinguanglehr] (\pingu at name-head-right)
+ coordinate[pos=\pinguanglehl] (\pingu at name-head-left);
-\path[save path=\pingu at upperpingu] (\pingu at name-head-center)
-++(0,\pingu at head@h at half) coordinate (\pingu at name-head-top)
-arc(90:450:\pingu at w@half{} and \pingu at head@h at half)
-coordinate[pos=\pinguanglehr] (\pingu at name-head-right)
-coordinate[pos=\pinguanglehl] (\pingu at name-head-left);
+ \coordinate (\pingu at name-belly-back) at (\pingu at w@half,-1cm);
+ \coordinate (\pingu at name-belly-center) at (\pingu at w@half,-.68\pingu at side@h at half);
-\coordinate (\pingu at name-belly-back) at (\pingu at w@half,-1cm);
-\coordinate (\pingu at name-belly-center) at (\pingu at w@half,-.68\pingu at side@h at half);
-\path[save path=\pingu at whitepingu] (\pingu at name-belly-back)++(-\pingu at w@half+\pingu at one,\pingu at lower@off) to[bend right=.8\pingu at bend] ++(0,1.05cm-\pingu at side@h at half-\pingu at lower@off) arc (180:270:4mm and 2mm) arc (270:331:5mm and .85mm) arc (207:270:5mm and .85mm) arc (270:360:4mm and 2mm) to[bend right=.8\pingu at bend] ++(0,\pingu at side@h at half-1.05cm+\pingu at lower@off) arc (0:180:\pingu at w@half-.96mm and \pingu at w@half-\pingu at one) -- cycle;
+ % set the white above
+ \path[save path=\pingu at whitepingu] (\pingu at name-belly-back)
+ ++(-\pingu at w@half+\pingu at one,\pingu at lower@off)
+ to[bend right=.8\pingu at bend]
+ ++(0,1.05cm-\pingu at side@h at half-\pingu at lower@off)
+ arc (180:270:4mm and 2mm)
+ arc (270:331:5mm and .85mm)
+ arc (207:270:5mm and .85mm)
+ arc (270:360:4mm and 2mm)
+ to[bend right=.8\pingu at bend]
+ ++(0,\pingu at side@h at half-1.05cm+\pingu at lower@off)
+ arc (0:180:\pingu at w@half-.96mm and \pingu at w@half-\pingu at one)
+ -- cycle;
-\coordinate (\pingu at name-eye-back-right) at ([xshift=-.275cm,yshift=.25cm-\pingu at outer@off]\pingu at name-head-center);
-\coordinate (\pingu at name-eye-back-left) at ([xshift=.275cm,yshift=.25cm-\pingu at outer@off]\pingu at name-head-center);
+ \coordinate (\pingu at name-eye-back-right)
+ at ([xshift=-.275cm,yshift=.25cm-\pingu at outer@off]\pingu at name-head-center);
+ \coordinate (\pingu at name-eye-back-left)
+ at ([xshift=.275cm,yshift=.25cm-\pingu at outer@off]\pingu at name-head-center);
-\coordinate (\pingu at name-head-back-con-right) at ([xshift=-\pingu at headcon@x,yshift=-\pingu at headcon@y]\pingu at name-eye-back-right);
-\coordinate (\pingu at name-head-back-con-left) at ([xshift=\pingu at headcon@x,yshift=-\pingu at headcon@y]\pingu at name-eye-back-left);
+ \coordinate (\pingu at name-head-back-con-right)
+ at ([xshift=-\pingu at headcon@x,yshift=-\pingu at headcon@y]\pingu at name-eye-back-right);
+ \coordinate (\pingu at name-head-back-con-left)
+ at ([xshift=\pingu at headcon@x,yshift=-\pingu at headcon@y]\pingu at name-eye-back-left);
}
+% <@pingu at x@bodytype at none>
+
% #endregion
% #region chubby
\pingu at bodytype@add{chubby}{%
@@ -523,51 +639,85 @@
% #endregion
% #region eyes
% name core | left | right
-\long\def\@pingu at eyes@s#1#2#3{\@ifnextchar[{\@pingu at eyes@s@{#1}{#2}{#3}}{\@pingu at eyes@s@{#1}{#2}{#3}[pingu at black]}}
-\long\def\@pingu at eyes@s@#1#2#3[#4]{%
+% <pingu at eyes@s>
+\long\def\pingu at eyes@s#1#2#3{%
+ \@ifnextchar[%
+ {\pingu at eyes@s@{#1}{#2}{#3}}%
+ {\pingu at eyes@s@{#1}{#2}{#3}[pingu at black]}%
+}
+\long\def\pingu at eyes@s@#1#2#3[#4]{%
\pgfqkeys{/pingu}{%
- left eye #1/.style = {/pingu/left eye={#1}, /pingu/left eye color={##1}},%
- left eye #1/.default = {#4},%
- right eye #1/.style = {/pingu/right eye={#1}, /pingu/right eye color={##1}},%
- right eye #1/.default = {#4},%
- eyes #1/.style = {/pingu/eyes={#1}, /pingu/eyes color={##1}},%
- eyes #1/.default = {#4}%
+ left eye #1/.style = {/pingu/left eye={#1}, /pingu/left eye color={##1}},
+ left eye #1/.default = {#4},
+ right eye #1/.style = {/pingu/right eye={#1}, /pingu/right eye color={##1}},
+ right eye #1/.default = {#4},
+ eyes #1/.style = {/pingu/eyes={#1}, /pingu/eyes color={##1}},
+ eyes #1/.default = {#4}
}%
\pingu at lefteye@add{#1}{#2}\pingu at righteye@add{#1}{#3}%
}
-\pgfqkeys{/pingu}{eyes none/.style={eyes=none},left eye none/.style={left eye=none},right eye none/.style={right eye=none}} % adding the alias
+% <@pingu at eyes@s>
+\pgfqkeys{/pingu}{%
+ eyes none/.style = {eyes=none},
+ left eye none/.style = {left eye=none},
+ right eye none/.style = {right eye=none}
+} % adding the alias
-\@pingu at eyes@s{normal}{%
- \pingu at block{\pingu at color@eye at left} ([yshift=.75mm,xshift=\pingu at eye@shift]\pingu at name-eye-back-left) coordinate (\pingu at name-eye-left) ellipse [x radius=.1225cm, y radius=.1365cm];
+% <eyes normal>
+\pingu at eyes@s{normal}{%
+ \pingu at block{\pingu at color@eye at left}
+ ([yshift=.75mm,xshift=\pingu at eye@shift]\pingu at name-eye-back-left)
+ coordinate (\pingu at name-eye-left)
+ ellipse [x radius=.1225cm, y radius=.1365cm];
}{%
- \pingu at block{\pingu at color@eye at right} ([yshift=.75mm,xshift=-\pingu at eye@shift]\pingu at name-eye-back-right) coordinate(\pingu at name-eye-right) ellipse [x radius=.1225cm, y radius=.1365cm];
+ \pingu at block{\pingu at color@eye at right}
+ ([yshift=.75mm,xshift=-\pingu at eye@shift]\pingu at name-eye-back-right)
+ coordinate(\pingu at name-eye-right)
+ ellipse [x radius=.1225cm, y radius=.1365cm];
}
+% <@eyes normal>
-\@pingu at eyes@s{vertical}{%
+\pingu at eyes@s{vertical}{%
\pingu at block{\pingu at color@eye at left} ([yshift=.75mm,xshift=\pingu at eye@shift]\pingu at name-eye-back-left) coordinate (\pingu at name-eye-left) ellipse [x radius=1.13mm, y radius=.145cm];
}{%
\pingu at block{\pingu at color@eye at right} ([yshift=.75mm,xshift=-\pingu at eye@shift]\pingu at name-eye-back-right) coordinate(\pingu at name-eye-right) ellipse [x radius=1.13mm, y radius=.145cm];
}
-\@pingu at eyes@s{shiny}{%
- \pingu at block{\pingu at color@eye at left} ([yshift=.75mm,xshift=\pingu at eye@shift]\pingu at name-eye-back-left) coordinate(\pingu at name-eye-left) ellipse [x radius=.22cm, y radius=.26cm];
- \pingu at block{\pingu at color@eye at second@left} (\pingu at name-eye-left)++(\eyebaseang:.85mm and \pingu at one) ellipse [x radius=.8mm, y radius=\pingu at one];
- \pingu at block{\pingu at color@eye at second@left} (\pingu at name-eye-left)++(\eyebaseang+180:.12cm and .14cm) ellipse [x radius=.25mm, y radius=.35mm];
+% <eyes shiny>
+\pingu at eyes@s{shiny}{%
+ \pingu at block{\pingu at color@eye at left}
+ ([yshift=.75mm,xshift=\pingu at eye@shift]\pingu at name-eye-back-left)
+ coordinate(\pingu at name-eye-left)
+ ellipse [x radius=.22cm, y radius=.26cm];
+ \pingu at block{\pingu at color@eye at second@left}
+ (\pingu at name-eye-left)++(\eyebaseang:.85mm and \pingu at one)
+ ellipse [x radius=.8mm, y radius=\pingu at one];
+ \pingu at block{\pingu at color@eye at second@left}
+ (\pingu at name-eye-left)++(\eyebaseang+180:.12cm and .14cm)
+ ellipse [x radius=.25mm, y radius=.35mm];
}{%
- \pingu at block{\pingu at color@eye at right} ([yshift=.75mm,xshift=-\pingu at eye@shift]\pingu at name-eye-back-right) coordinate(\pingu at name-eye-right) ellipse [x radius=.22cm, y radius=.26cm];
- \pingu at block{\pingu at color@eye at second@right} (\pingu at name-eye-right)++(\eyebaseang:.85mm and \pingu at one) ellipse [x radius=.8mm, y radius=\pingu at one];
- \pingu at block{\pingu at color@eye at second@right} (\pingu at name-eye-right)++(\eyebaseang+180:.12cm and .14cm) ellipse [x radius=.25mm, y radius=.35mm];
+ \pingu at block{\pingu at color@eye at right}
+ ([yshift=.75mm,xshift=-\pingu at eye@shift]\pingu at name-eye-back-right)
+ coordinate(\pingu at name-eye-right)
+ ellipse [x radius=.22cm, y radius=.26cm];
+ \pingu at block{\pingu at color@eye at second@right}
+ (\pingu at name-eye-right)++(\eyebaseang:.85mm and \pingu at one)
+ ellipse [x radius=.8mm, y radius=\pingu at one];
+ \pingu at block{\pingu at color@eye at second@right}
+ (\pingu at name-eye-right)++(\eyebaseang+180:.12cm and .14cm)
+ ellipse [x radius=.25mm, y radius=.35mm];
}
+% <@eyes shiny>
-\@pingu at eyes@s{wink}{%
+\pingu at eyes@s{wink}{%
\coordinate (\pingu at name-eye-left) at ([yshift=.75mm,xshift=\pingu at eye@shift]\pingu at name-eye-back-left);
- \pingu at block[rounded corners=.002cm,rotate around={-4:(\pingu at name-eye-left)}]{\pingu at color@eye at left} (\pingu at name-eye-left)++(174:.14cm and .14cm)++(0,-.065cm) arc (174:6:.14cm and .14cm) arc (-6:-174:.1mm and .08mm) arc (6:174:.12cm and .065cm) arc (-6:-174:.1mm and .08mm) -- cycle;
+ \pingu at block[rotate around={-4:(\pingu at name-eye-left)}]{\pingu at color@eye at left} (\pingu at name-eye-left)++(174:.14cm and .14cm)++(0,-.065cm) arc (174:6:.14cm and .14cm) arc (-6:-174:.1mm and .08mm) arc (6:174:.12cm and .065cm) arc (-6:-174:.1mm and .08mm) -- cycle;
}{%
\coordinate (\pingu at name-eye-right) at ([yshift=.75mm,xshift=-\pingu at eye@shift]\pingu at name-eye-back-right);
- \pingu at block[rounded corners=.002cm,rotate around={4:(\pingu at name-eye-right)}]{\pingu at color@eye at right} (\pingu at name-eye-right)++(174:.14cm and .14cm)++(0,-.065cm) arc (174:6:.14cm and .14cm) arc (-6:-174:.1mm and .08mm) arc (6:174:.12cm and .065cm) arc (-6:-174:.1mm and .08mm) -- cycle;
+ \pingu at block[rotate around={4:(\pingu at name-eye-right)}]{\pingu at color@eye at right} (\pingu at name-eye-right)++(174:.14cm and .14cm)++(0,-.065cm) arc (174:6:.14cm and .14cm) arc (-6:-174:.1mm and .08mm) arc (6:174:.12cm and .065cm) arc (-6:-174:.1mm and .08mm) -- cycle;
}
-\@pingu at eyes@s{shock}{%
+\pingu at eyes@s{shock}{%
\pingu at block{\pingu at color@eye at left} ([yshift=.75mm,xshift=\pingu at eye@shift]\pingu at name-eye-back-left) coordinate (\pingu at name-eye-left) ellipse [x radius=.1535cm, y radius=.1575cm];
\pingu at block{\pingu at color@eye at second@left} ([yshift=.75mm,xshift=\pingu at eye@shift]\pingu at name-eye-back-left) coordinate (\pingu at name-eye-left) ellipse [x radius=.1325cm, y radius=.1375cm];
}{%
@@ -575,7 +725,7 @@
\pingu at block{\pingu at color@eye at second@right} ([yshift=.75mm,xshift=-\pingu at eye@shift]\pingu at name-eye-back-right) coordinate(\pingu at name-eye-right) ellipse [x radius=.1325cm, y radius=.1375cm];
}
-% \let\@pingu at eyes@s\relax
+% \let\pingu at eyes@s\relax
% #endregion
% #region wings
@@ -585,8 +735,8 @@
% name core | left | right | above: \iftrue | angle for items | wing down [left]
\long\def\@pingu at wings@s#1#2#3#4#5#6{%
\pgfqkeys{/pingu}{%
- left wing #1/.style = {/pingu/left wing={#1}, /pingu/left wing color={##1}},%
- left wing #1/.default = \pingu at color@body at main,%
+ left wing #1/.style = {/pingu/left wing={#1}, /pingu/left wing color={##1}},%
+ left wing #1/.default = \pingu at color@body at main,%
right wing #1/.style = {/pingu/right wing={#1}, /pingu/right wing color={##1}},%
right wing #1/.default = \pingu at color@body at main,%
wings #1/.style = {/pingu/wings={#1}, /pingu/wings color={##1}},%
@@ -727,8 +877,13 @@
% #endregion
% #region feet
-\long\def\@pingu at feet@s#1#2#3{\@ifnextchar[{\@pingu at feet@s@{#1}{#2}{#3}}{\@pingu at feet@s@{#1}{#2}{#3}[pingu at yellow]}}
-\long\def\@pingu at feet@s@#1#2#3[#4]{%
+% <pingu at feet@s>
+\long\def\pingu at feet@s#1#2#3{%
+ \@ifnextchar[%
+ {\pingu at feet@s@{#1}{#2}{#3}}%
+ {\pingu at feet@s@{#1}{#2}{#3}[pingu at yellow]}%
+}
+\long\def\pingu at feet@s@#1#2#3[#4]{%
\pgfqkeys{/pingu}{%
left foot #1/.style = {/pingu/left foot={#1}, /pingu/left foot color={##1}},%
left foot #1/.default = {#4},%
@@ -739,24 +894,56 @@
}%
\pingu at leftfoot@add{#1}{#2}\pingu at rightfoot@add{#1}{#3}%
}
-\pgfqkeys{/pingu}{feet none/.style={/pingu/feet=none}, /left foot none/.style={/pingu/left foot=none}, right foot none/.style={/pingu/right foot=none}}
+% <@pingu at feet@s>
+\pgfqkeys{/pingu}{%
+ feet none/.style={/pingu/feet=none},
+ left foot none/.style={/pingu/left foot=none},
+ right foot none/.style={/pingu/right foot=none}
+}
-\@pingu at feet@s{normal}{%
+% <feet normal>
+\pingu at feet@s{normal}{%
\coordinate (@tmp) at ([xshift=-.5\pingu at foot@single at h]\pingu at name-foot-left);
- \pingu at block[rotate around={-25+\basicfeetbend:(@tmp)}]{\pingu at color@foot at left} (@tmp) ellipse [x radius=\pingu at foot@single at w,y radius=\pingu at foot@single at h];
- \pingu at block[rotate around={\basicfeetbend:(\pingu at name-foot-left)}]{\pingu at color@foot at left} (\pingu at name-foot-left) ellipse [x radius=\pingu at foot@single at w,y radius=\pingu at foot@single at h];
+ \pingu at block[rotate around={-25+\basicfeetbend:(@tmp)}]{\pingu at color@foot at left}
+ (@tmp) ellipse [
+ x radius=\pingu at foot@single at w,
+ y radius=\pingu at foot@single at h
+ ];
+ \pingu at block[rotate around={\basicfeetbend:(\pingu at name-foot-left)}]
+ {\pingu at color@foot at left} (\pingu at name-foot-left) ellipse [
+ x radius=\pingu at foot@single at w,
+ y radius=\pingu at foot@single at h
+ ];
+
\coordinate (@tmp) at ([xshift= .5\pingu at foot@single at h]\pingu at name-foot-left);
- \pingu at block[rotate around={25+\basicfeetbend:(@tmp)}]{\pingu at color@foot at left} (@tmp) ellipse [x radius=\pingu at foot@single at w,y radius=\pingu at foot@single at h];
+ \pingu at block[rotate around={25+\basicfeetbend:(@tmp)}]{\pingu at color@foot at left}
+ (@tmp) ellipse [
+ x radius=\pingu at foot@single at w,
+ y radius=\pingu at foot@single at h
+ ];
}{%
\coordinate (@tmp) at ([xshift=-.5\pingu at foot@single at h]\pingu at name-foot-right);
- \pingu at block[rotate around={-25-\basicfeetbend:(@tmp)}]{\pingu at color@foot at right} (@tmp) ellipse [x radius=\pingu at foot@single at w,y radius=\pingu at foot@single at h];
- \pingu at block[rotate around={-\basicfeetbend:(\pingu at name-foot-right)}]{\pingu at color@foot at right} (\pingu at name-foot-right) ellipse [x radius=\pingu at foot@single at w,y radius=\pingu at foot@single at h];
+ \pingu at block[rotate around={-25-\basicfeetbend:(@tmp)}]{\pingu at color@foot at right}
+ (@tmp) ellipse [
+ x radius=\pingu at foot@single at w,
+ y radius=\pingu at foot@single at h
+ ];
+ \pingu at block[rotate around={-\basicfeetbend:(\pingu at name-foot-right)}]
+ {\pingu at color@foot at right} (\pingu at name-foot-right) ellipse [
+ x radius=\pingu at foot@single at w,
+ y radius=\pingu at foot@single at h
+ ];
\coordinate (@tmp) at ([xshift= .5\pingu at foot@single at h]\pingu at name-foot-right);
- \pingu at block[rotate around={25-\basicfeetbend:(@tmp)}]{\pingu at color@foot at right} (@tmp) ellipse [x radius=\pingu at foot@single at w,y radius=\pingu at foot@single at h];
+ \pingu at block[rotate around={25-\basicfeetbend:(@tmp)}]{\pingu at color@foot at right}
+ (@tmp) ellipse [
+ x radius=\pingu at foot@single at w,
+ y radius=\pingu at foot@single at h
+ ];
}
+% <@feet normal>
-\@pingu at feet@s{sit}{%
+\pingu at feet@s{sit}{%
\pingu at layer{foreground}[]
\coordinate (@tmp) at ([xshift=-.35\pingu at foot@single at h,yshift=-.4mm]\pingu at name-foot-left);
\pingu at block[rotate around={\basicfeetbend:(@tmp)}]{\pingu at color@foot at left} (@tmp)
@@ -770,19 +957,29 @@
\endpingu at layer
}
-\@pingu at feet@s{simple}{%
- \pingu at block[rotate around={-\basicfeetbend:(\pingu at name-foot-left)}]{\pingu at color@foot at left} (\pingu at name-foot-left) ellipse [x radius=2.66\pingu at foot@single at w,y radius=\pingu at foot@single at h];
+% <feet simple>
+\pingu at feet@s{simple}{%
+ \pingu at block[rotate around={-\basicfeetbend:(\pingu at name-foot-left)}]
+ {\pingu at color@foot at left} (\pingu at name-foot-left) ellipse [
+ x radius=2.66\pingu at foot@single at w,
+ y radius=\pingu at foot@single at h
+ ];
}{%
- \pingu at block[rotate around={\basicfeetbend:(\pingu at name-foot-right)}]{\pingu at color@foot at right} (\pingu at name-foot-right) ellipse [x radius=2.66\pingu at foot@single at w,y radius=\pingu at foot@single at h];
+ \pingu at block[rotate around={\basicfeetbend:(\pingu at name-foot-right)}]
+ {\pingu at color@foot at right} (\pingu at name-foot-right) ellipse [
+ x radius=2.66\pingu at foot@single at w,
+ y radius=\pingu at foot@single at h
+ ];
}
+% <@feet simple>
-\@pingu at feet@s{back}{%
+\pingu at feet@s{back}{%
\pingu at block{\pingu at color@foot at left} ([yshift=.2\pingu at foot@single at h]\pingu at name-foot-left) ellipse [x radius=2.5\pingu at foot@single at w,y radius=.435\pingu at foot@single at h];
}{%
\pingu at block{\pingu at color@foot at right} ([yshift=.2\pingu at foot@single at h]\pingu at name-foot-right) ellipse [x radius=2.5\pingu at foot@single at w,y radius=.435\pingu at foot@single at h];
}
-\@pingu at feet@s{chubby}{%
+\pingu at feet@s{chubby}{%
\pingu at layer{foreground}[rotate around={-\basicfeetbend+45:(\pingu at name-foot-left)}]
\pingu at block\pingu at color@foot at left ([xshift=-3mm,yshift=-1.65mm]\pingu at name-foot-left) to[bend right=3] ++(5mm,0) -- ++(.05mm,.6mm) to[out=83,in=129,looseness=1.125] cycle;
\ifx\pingu at color@foot at left\@pingu at none\else
@@ -807,7 +1004,8 @@
% #region bill
% name core | main
-\long\def\@pingu at bill@s#1#2{%
+% <pingu at bill@s>
+\long\def\pingu at bill@s#1#2{%
\pgfqkeys{/pingu}{%
bill #1/.style = {/pingu/bill={#1}, /pingu/bill color={##1}},%
bill #1/.default = pingu at yellow% TODO: defaults
@@ -815,30 +1013,35 @@
\pingu at bill@add{#1}{#2}%
}
\pgfqkeys{/pingu}{bill none/.style={/pingu/bill=none}}
+% <@pingu at bill@s>
-\@pingu at bill@s{normal}{%
-\pingu at block{\pingu at color@bill} (\pingu at name-bill)++(-.19cm,0)
- arc (180:360:.19cm and .225cm)
- coordinate[pos=.5] (\pingu at name-bill-bottom)
- to[bend right=.25cm] cycle;
+% <bill normal>
+\pingu at bill@s{normal}{%
+ \pingu at block[rounded corners=.1mm]{\pingu at color@bill}
+ (\pingu at name-bill)++(-.19cm,0) arc (180:360:.19cm and .225cm)
+ coordinate[pos=.5] (\pingu at name-bill-bottom) -- ++(-.2mm,.05mm)
+ to[bend right=10] ([xshift=-.17cm,yshift=.05mm]\pingu at name-bill)
+ -- cycle;
}
+% <@bill normal>
-\@pingu at bill@s{foreground}{%
+\pingu at bill@s{foreground}{%
\pingu at layer{foreground}[]
-\pingu at block{\pingu at color@bill} (\pingu at name-bill)++(-.19cm,0)
+\pingu at block{\pingu at color@bill} [rounded corners=.1mm] (\pingu at name-bill)++(-.19cm,0)
arc (180:360:.19cm and .225cm)
coordinate[pos=.5] (\pingu at name-bill-bottom)
- to[bend right=.25cm] cycle;
+ -- ++(-.2mm,.05mm) to[bend right=10] ([xshift=-.17cm,yshift=.05mm]\pingu at name-bill)--cycle;
\endpingu at layer
}
-\@pingu at bill@s{flat}{%
-\pingu at block{\pingu at color@bill} (\pingu at name-bill)++(-.19cm,0)
- arc (180:360:.19cm and .225cm)
- coordinate[pos=.5] (\pingu at name-bill-bottom)
+% <bill flat>
+\pingu at bill@s{flat}{%
+ \pingu at block{\pingu at color@bill} (\pingu at name-bill)++(-.19cm,0)
+ arc (180:360:.19cm and .225cm)
+ coordinate[pos=.5] (\pingu at name-bill-bottom)
-- cycle;
}
-
+% <@bill flat>
% #endregion
% #endregion
@@ -868,26 +1071,32 @@
\def\pingu@@xif at eb#1#2{\csname if at pingu@x@#1@\endcsname\csname pingu at draw@eb@#2\endcsname\fi}
\def\pingu at xif@eb#1#2{\ifcsname if at pingu@x@#1@\endcsname{\pingu@@xif at eb{#1}{#2}}\fi}
\def\pingu at draw@extras at below{%
+ \pingu at xif@eb{heart}{heart}%
\pingu at xif@eb{devilwings}{devilwings}%
\pingu at xif@eb{glow}{glow}%
+ \pingu at xif@eb{belt}{belt}%
\pingu at xif@eb{tie}{tie}%
\pingu at xif@eb{pants}{pants}%
\pingu at xif@eb{medal}{medal}%
\pingu at xif@eb{bowtie}{bowtie}%
\pingu at xif@eb{cup}{cup}%
+ \pingu at xif@eb{vampireteeth}{vampireteeth}%
\pingu at xif@eb{blush}{blush}%
\pingu at xif@eb{eyepatchleft}{eyepatch at l}%
\pingu at xif@eb{eyepatchright}{eyepatch at r}%
\pingu at xif@eb{monocleleft}{monocle at l}%
\pingu at xif@eb{monocleright}{monocle at r}%
+ \pingu at xif@eb{horseon}{horseon}%
}
% #region cup
\pingu at create@extra{cup}{%
- % extra cup % TODO: as selection
cup/.code = {\pingu at set@extra{cup}{true}\pingu at color{cup}{#1}},
cup/.default = pingu at green,
+ cup steam/.code = \pingu at color{cup at steam}{#1},%
+ cup steam/.default = lightgray!90!orange,%
+ cup steam shift/.code = \def\pingu at x@cup at steam@shift{#1},%
cup straw/.code = \pingu at color{cup at straw}{#1}%
-}{cup straw=\pingu at color@cup}
+}{cup straw=\pingu at color@cup,cup steam=\@pingu at none,cup steam shift=0mm}
\def\pingu at draw@eb at cup{%
\pingu at block[rounded corners=.25mm]{\pingu at color@cup} (\pingu at name-belly-center)++(-.325cm,.275cm) to[bend right=2] ++(.5mm,-.675cm) to[bend right=8] ++(.55cm,\z@) to[bend right=2] ++(.5mm,.675cm);
@@ -895,6 +1104,13 @@
\path (\pingu at name-belly-center)++(-.115cm,.275cm) coordinate (\pingu at name-straw-outer-start);
\pingu at block[rounded corners=.15mm]{\pingu at color@cup at straw} (\pingu at name-straw-outer-start) -- (\pingu at name-cup-straw-outer-angle) -- (\pingu at name-bill) -- ++(.5mm,0) -- ([xshift=.5mm]\pingu at name-cup-straw-outer-angle) -- ([xshift=.5mm]\pingu at name-straw-outer-start) -- cycle;
\pingu at block{\pingu at color@cup} (\pingu at name-belly-center)++(0,.275cm) ellipse [x radius=.325cm,y radius=.5mm];
+
+ % TODO: configure opacity
+ \pgfonlayer{foreground}
+ \pingu at block[rounded corners=.05mm,opacity=.55]{\pingu at color@cup at steam} (\pingu at name-belly-center)++(1.5mm+\pingu at x@cup at steam@shift,4mm) coordinate(@) to[out=100,in=260] ++(.3mm,3.75mm) -- ++(0.1mm,0) to[out=280,in=80] ([xshift=.1mm]@) -- cycle;
+ \pingu at block[rounded corners=.05mm,opacity=.55]{\pingu at color@cup at steam} (\pingu at name-belly-center)++(0mm+\pingu at x@cup at steam@shift,3.33mm) coordinate(@) to[out=100,in=260] ++(.2mm,2.75mm) -- ++(0.1mm,0) to[out=280,in=80] ([xshift=.1mm]@) -- cycle;
+ \pingu at block[rounded corners=.05mm,opacity=.55]{\pingu at color@cup at steam} (\pingu at name-belly-center)++(-1.25mm++\pingu at x@cup at steam@shift,3.65mm) coordinate(@) to[out=100,in=260] ++(.3mm,3.75mm) -- ++(0.1mm,0) to[out=280,in=80] ([xshift=.1mm]@) -- cycle;
+ \endpgfonlayer
}
% #endregion
@@ -971,11 +1187,14 @@
\pingu at xif@ea{headband}{headband}%
\pingu at xif@ea{strawhat}{strawhat}%
\pingu at xif@ea{hat}{hat}%
+ \pingu at xif@ea{mitra}{mitra}%
+ \pingu at xif@ea{witchhat}{witchhat}%
\pingu at xif@ea{constructionhelmet}{constructionhelmet}%
\pingu at xif@ea{conicalhat}{conicalhat}%
\pingu at xif@ea{crown}{crown}%
\pingu at xif@ea{cakehat}{cakehat}%
\pingu at xif@ea{pumpkinhat}{pumpkinhat}%
+ \pingu at xif@ea{jackolantern}{jackolantern}%
\pingu at xif@ea{princesscrown}{princesscrown}%
\pingu at xif@ea{rook}{rook}%
\pingu at xif@ea{halo}{halo}%
@@ -983,8 +1202,11 @@
\pingu at xif@ea{headphone}{headphone}%
\pingu at xif@ea{sheriffstar}{sheriffstar}%
\pingu at xif@ea{santahat}{santahat}%
+ \pingu at xif@ea{woolhat}{woolhat}%
+ \pingu at xif@ea{deerhat}{deerhat}%
\pingu at xif@ea{santabeard}{santabeard}%
\pingu at xif@ea{banner}{banner}%
+ \pingu at xif@ea{bee}{bee}%
}
% #region halo
\newif\if at pingu@x at halo@glow
@@ -1037,7 +1259,7 @@
\pingu at block{\pingu at color@sheriffstar!98!pingu at black} (@.outer point \i) circle [radius=.2mm];
}
-\node[,outer sep=0pt,inner xsep=0pt,inner ysep=.25mm] (@s) at (@) {\ifx\pingu at color@sheriffstar at lines\@pingu at none\else\color{\pingu at color@sheriffstar at lines}\fi\pingu at x@sheriff at star@content};
+\node[outer sep=0pt,inner xsep=0pt,inner ysep=.25mm] (@s) at (@) {\ifx\pingu at color@sheriffstar at lines\@pingu at none\else\color{\pingu at color@sheriffstar at lines}\fi\pingu at x@sheriff at star@content};
\pingu at draw[line width=.002mm]{\pingu at color@sheriffstar at lines} (@s.north east) -- (@s.north west);
\pingu at draw[line width=.002mm]{\pingu at color@sheriffstar at lines} (@s.south east) -- (@s.south west);
\endpingu at layer}
@@ -1107,14 +1329,31 @@
% #region staff
\pingu at create@wing at extra{staff}{%
- staff \@lr/.code = {\pingu at set@extra{staff\@lr}{true}\pingu at color{staff\@lr}{##1}},
- staff \@lr/.default = pingu at bronze,
- staff \@lr\space length/.code =\expandafter\def\csname pingu at staff@\@lr @length\endcsname{##1},
-}{staff \@lr\space length=28mm}
+ staff \@lr/.code = {\pingu at set@extra{staff\@lr}{true}\pingu at color{staff\@lr}{##1}},
+ staff \@lr/.default = pingu at bronze,
+ staff \@lr\space length/.code = \expandafter\def\csname pingu at staff@\@lr @length\endcsname{##1},
+ staff \@lr\space raise/.code = \expandafter\def\csname pingu at staff@\@lr @raise\endcsname{##1},
+ staff \@lr\space code app/.code = \expandafter\appto\csname pingu at staff@\@lr @code\endcsname{##1},
+ staff \@lr\space code pre/.code = \expandafter\preto\csname pingu at staff@\@lr @code\endcsname{##1},
+ staff \@lr\space code/.code = \expandafter\def\csname pingu at staff@\@lr @code\endcsname{##1},
+ spear \@lr/.style = {staff \@lr, staff \@lr\space code app={
+ \noexpand\pgfonlayer{background}
+ \fill[##1,rounded corners=1pt] ([yshift=-1.5mm]\noexpand\pingu at name-staff-\@lr-top) -- ++(1mm,1.5mm) -- ++(-1mm,4mm) -- ++(-1mm,-4mm) -- cycle;
+ \noexpand\endpgfonlayer
+ }},
+ spear \@lr/.default=gray,
+ cross \@lr/.style = {staff \@lr=##1, staff \@lr\space code app={
+ \noexpand\pgfonlayer{foreground}
+ \fill[##1,rounded corners=1pt] ([yshift=-4.5mm,xshift=-4mm]\noexpand\pingu at name-staff-\@lr-top) rectangle ++(8mm,1mm);
+ \noexpand\endpgfonlayer
+ }},
+ cross \@lr/.default=pingu at bronze
+}{staff \@lr\space length=28mm,staff \@lr\space raise=-11mm,staff \@lr\space code={}}
\def\pingu at draw@wi at staff#1{%
\pingu at setup@wing{staff}{#1}%
\scope[rotate around={\@angle:(\pingu at name-wing-#1)}]
- \pingu at block{\csname pingu at color@staff#1\endcsname}(\pingu at name-wing-#1)++(\@sidesign*-.2mm,-11mm) -- ++(0,\csname pingu at staff@#1 at length\endcsname) arc(180:0:\@sidesign*.4mm and .3mm) coordinate[pos=.5] (\pingu at name-staff-#1-top) -- ++(0,-\csname pingu at staff@#1 at length\endcsname) arc(360:180:\@sidesign*.4mm and .3mm) -- cycle;
+ \pingu at block{\csname pingu at color@staff#1\endcsname}(\pingu at name-wing-#1)++(\@sidesign*-.2mm,\csname pingu at staff@#1 at raise\endcsname) -- ++(0,\csname pingu at staff@#1 at length\endcsname) arc(180:0:\@sidesign*.4mm and .3mm) coordinate[pos=.5] (\pingu at name-staff-#1-top) -- ++(0,-\csname pingu at staff@#1 at length\endcsname) arc(360:180:\@sidesign*.4mm and .3mm) -- cycle;
+ \csname pingu at staff@#1 at code\endcsname
\endscope
}
% #endregion
@@ -1154,6 +1393,7 @@
% library | selector | keys
\def\pingu at dummy@selector#1#2#3{\edef\tmp at list{#3}\@for\@current:=\tmp at list\do{\expandafter\pingu@@dummy at selector\expandafter{\@current}{#1}{#2}}}
\def\pingu at defaultlibs{}\def\pingu@@defaultlibs{}
+\providecommand\pingulibpathprefix{}
\def\pingu at load@library#1{%
% store common catcodes
\expandafter\edef\csname pingu at lib@#1 at atcode\endcsname{\the\catcode`\@}%
@@ -1160,7 +1400,7 @@
\expandafter\edef\csname pingu at lib@#1 at barcode\endcsname{\the\catcode`\|}%
\expandafter\edef\csname pingu at lib@#1 at dollarcode\endcsname{\the\catcode`\$}%
\catcode`\@=11 \catcode`\|=12 \catcode`\$=3\relax
-\def\pingu at tmp{tikzpingus-#1.lib.tex}\relax
+\def\pingu at tmp{\pingulibpathprefix tikzpingus-#1.lib.tex}\relax
\InputIfFileExists{\pingu at tmp}{}{\PackageError{\tikzpingus at filename}{There is no '#1' library (searched: '\pingu at tmp')}}
% restore catcodes
\catcode`\@=\csname pingu at lib@#1 at atcode\endcsname
@@ -1180,29 +1420,30 @@
\pingu at dummy@lib{glasses}{glasses,glasses round,monocle left,monocle right}
\pingu at dummy@lib{medieval}{rook,crown,princess crown}
\pingu at dummy@lib{cloak}{cloak,cape}
-\pingu at dummy@lib{christmas}{santa hat,santa beard}
+\pingu at dummy@lib{christmas}{santa hat,santa beard,wool hat,deer hat,present left, present right,snowball left, snowball right}
\pingu at dummy@lib{science-fiction}{lightsaber left,lightsaber right}
-\pingu at dummy@lib{fun}{cake-hat,pumpkin-hat,lollipop left,lollipop right}
+\pingu at dummy@lib{fun}{cake-hat,pumpkin-hat,lollipop left,lollipop right,vampire teeth,broom left,broom right,jack o lantern,jack o lantern helmet,hammer left, hammer right,plank left, plank right,magnifier left, magnifier right}
\pingu at dummy@lib{technology}{vr-headset,headphone,vr-controller left,vr-controller right,laptop left,laptop right}
\pingu at dummy@lib{flags}{flag left,flag right}
-\pingu at dummy@lib{hats}{strawhat,hat,cap,construction helmet,conical hat}
+\pingu at dummy@lib{hats}{strawhat,hat,cap,construction helmet,conical hat,witch hat,mitra}
\pingu at dummy@lib{sport}{head band,medal}
-\pingu at dummy@lib{formal}{tie,bow tie,pants}
+\pingu at dummy@lib{formal}{tie,bow tie,pants,belt}
\pingu at dummy@lib{signs}{sign post left,sign post right}
\pingu at dummy@lib{devil}{devil horns,devil wings,devil fork left,devil fork right,eyes devil,left eye devil,right eye devil}
\pingu at dummy@selector{devil}{lefteye}{devil}
\pingu at dummy@selector{devil}{righteye}{devil}
\pingu at dummy@lib{safe}{mask}
-\pingu at dummy@lib{magic}{handcast left,handcast right}
+\pingu at dummy@lib{magic}{hand cast left,hand cast right}
\pingu at dummy@lib{movement}{}% register the lib
\pingu at dummy@selector{movement}{bodytype}{tilt-right,tilt-left}
-\pingu at dummy@lib{emotions}{eyes sad,left eye sad,right eye sad,eyes angry,left eye angry,right eye angry,eyes hearts,left eye heart,right eye hearts,bill angry,blush}
+\pingu at dummy@lib{emotions}{eyes sad,left eye sad,right eye sad,eyes angry,left eye angry,right eye angry,eyes hearts,left eye heart,right eye hearts,bill angry,blush,eyes critical,left eye critical,right eye critical}
\pingu at dummy@selector{emotions}{lefteye}{sad,angry,hearts}
\pingu at dummy@selector{emotions}{righteye}{sad,angry,hearts}
-\pingu at dummy@lib{horse}{horse left,horse right}
+\pingu at dummy@lib{horse}{horse left,horse right,on horse,horse behind}
+\pingu at dummy@lib{bee}{bee}
\ifpengu at setup@bare@\else
\pinguloadlibraries{\pingu@@defaultlibs}
\fi
-\endinput
\ No newline at end of file
+\endinput
More information about the tex-live-commits
mailing list.