diff --git a/.github/workflows/compile.yaml b/.github/workflows/compile.yaml
index 8281193..5902110 100644
--- a/.github/workflows/compile.yaml
+++ b/.github/workflows/compile.yaml
@@ -30,11 +30,12 @@ jobs:
run: |
pdftoppm -png -r 300 -f 1 -l 1 ./examples/build/showcase.pdf preview
pdftoppm -png -r 300 -f 1 -l 1 ./examples/build/minimal.pdf minimal
+ pdftoppm -png -r 300 -f 1 -l 1 ./examples/build/spl.pdf spl
- name: Commit
run: |
git config --local user.email "action@github.com"
git config --local user.name "GitHub Action"
- git add -f "examples/build/showcase.pdf" "examples/build/minimal.pdf" "doc/build/tikzpingus-doc.pdf" "preview-1.png" "minimal-1.png"
+ git add -f "examples/build/showcase.pdf" "examples/build/minimal.pdf" "examples/build/cloak.pdf" "examples/build/spl.pdf" "doc/build/tikzpingus-doc.pdf" "preview-1.png" "minimal-1.png" "spl-1.png"
git commit -m "Newly compiled data"
- name: Push changes
uses: ad-m/github-push-action@master
diff --git a/.github/workflows/status_check.yaml b/.github/workflows/status_check.yaml
index b498f8d..7b29b3a 100644
--- a/.github/workflows/status_check.yaml
+++ b/.github/workflows/status_check.yaml
@@ -31,6 +31,8 @@ jobs:
root_file: |
showcase.tex
minimal.tex
+ cloak.tex
+ spl.tex
- name: ⬆️ Upload doc artifacts
uses: actions/upload-artifact@v3
with:
diff --git a/README.md b/README.md
index a24afd2..224e197 100644
--- a/README.md
+++ b/README.md
@@ -11,3 +11,6 @@ These are some test files:\
[](https://media.githubusercontent.com/media/EagleoutIce/tikzpingus/gh-pages/build/showcase.pdf)
[](https://media.githubusercontent.com/media/EagleoutIce/tikzpingus/gh-pages/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:\
+[](https://media.githubusercontent.com/media/EagleoutIce/tikzpingus/gh-pages/build/spl.pdf)
diff --git a/examples/.latexmkrc b/examples/.latexmkrc
index 6ed212b..12765d9 100644
--- a/examples/.latexmkrc
+++ b/examples/.latexmkrc
@@ -1,4 +1,4 @@
-@default_files = ('cloak.tex','minimal.tex','showcase.tex');
+@default_files = ('cloak.tex','minimal.tex','showcase.tex','spl.tex');
$pdf_mode = 1;
$pdf_update_method = 1;
$out_dir = 'build';
diff --git a/examples/spl.tex b/examples/spl.tex
new file mode 100644
index 0000000..1d837cc
--- /dev/null
+++ b/examples/spl.tex
@@ -0,0 +1,114 @@
+\documentclass{article}
+
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+
+\makeatletter\def\input@path{{../tex/}}\makeatother
+\usepackage[glows]{tikzpingus}
+\usepackage[active, tightpage]{preview}
+
+\def\familydefault{\sfdefault}
+
+\definecolor{accent}{RGB}{93,45,108}
+
+\usetikzlibrary{arrows.meta}
+
+\def\pinguDoubleCut#1{\pingu[#1,/pingu/@block/.style={fill=##1!20!white},/pingu/@draw/.style={draw=##1!20!white,cap=round}]\pingu[:hide,#1]\pingu[/pingu/@block/.style={fill=##1!20!white},/pingu/@draw/.style={draw=##1!20!white,cap=round},:hide,eyes=wink,bill=normal]}% we overpaint the penguin again for front features
+\def\pinguCut#1{\pingu[eyes=wink,bill=normal,#1,/pingu/@block/.style={fill=##1!20!white},/pingu/@draw/.style={draw=##1!20!white,cap=round}]\pingu[:hide,#1]}
+\newsavebox\pingA \savebox\pingA{\tikz{\pinguDoubleCut{body type=normal}}}
+\newsavebox\pingB \savebox\pingB{\tikz{\pinguDoubleCut{body type=chubby}}}
+\newsavebox\pingC \savebox\pingC{\tikz{\pinguDoubleCut{body type=legacy}}}
+
+\newsavebox\pingD \savebox\pingD{\tikz{\pinguCut{feet=normal}}}
+\newsavebox\pingE \savebox\pingE{\tikz{\pinguCut{feet=simple}}}
+\newsavebox\pingF \savebox\pingF{\tikz{\pinguCut{feet=sit}}}
+
+\newsavebox\pingG \savebox\pingG{\tikz{\pinguCut{left wing=normal,left wing color=pingu@main!20!white,lightsaber left=accent}}}
+% \newsavebox\pingH \savebox\pingH{\tikz{\pinguCut{lollipop right=accent}}}
+\newsavebox\pingI \savebox\pingI{\tikz{\pinguCut{tie=accent}}}
+\newsavebox\pingIb \savebox\pingIb{\tikz{\pinguCut{cake-hat,cake-hat top=accent,cake-hat candle=accent}}}
+\newsavebox\pingIc \savebox\pingIc{\tikz{\pinguCut{tie=accent,tie dots}}}
+\newsavebox\pingId \savebox\pingId{\tikz{\pinguCut{bow tie=accent}}}
+
+
+\newsavebox\pingJ \savebox\pingJ{\tikz{\pinguCut{wings wave}}}
+\newsavebox\pingK \savebox\pingK{\tikz{\pinguCut{wings hug}}}
+\newsavebox\pingL \savebox\pingL{\tikz{\pinguCut{wings shock}}}
+
+\newsavebox\pingM \savebox\pingM{\tikz{\pinguCut{eyes shiny}}}
+\newsavebox\pingN \savebox\pingN{\tikz{\pinguCut{eyes normal}}}
+\newsavebox\pingO \savebox\pingO{\tikz{\pinguCut{eyes sad}}}
+
+\begin{document}
+\preview
+\begin{tikzpicture}[block/.append style={minimum height=\ht\strutbox,minimum width=1.25cm}]
+ \node[block,align=center] (0) at (0,0) {\strut Penguin\\[-.3mm]\footnotesize\itshape\color{gray}Product-Lines};
+ \node[block] (1) at (-6,-1.25) {\strut Body};
+ \node[block] (2) at (-3,-1.25) {\strut Feet};
+ \node[block] (3) at (0,-1.25) {\strut Items};
+ \node[block] (4) at (3,-1.25) {\strut Wings};
+ \node[block] (5) at (6,-1.25) {\strut Eyes};
+
+ \scope[every path/.append style={draw,-{Circle[length=3.33pt]}}]
+ \foreach\i in {1,...,5} {\path(0.south)--(\i.north);}
+\endscope
+
+ \node[scale=.35] (6) at(-7,-2.5) {\usebox\pingA};
+ \node[scale=.35] (7) at(-6,-2.5) {\usebox\pingB};
+ \node[scale=.35] (8) at(-5,-2.5) {\usebox\pingC};
+ \node[scale=.35] (9) at(-4,-2.5) {\usebox\pingD};
+ \node[scale=.35] (10) at(-3,-2.5) {\usebox\pingE};
+ \node[scale=.35] (11) at(-2,-2.5) {\usebox\pingF};
+
+ \node[scale=.35] (14) at(2,-2.5) {\usebox\pingJ};
+ \node[scale=.35] (15) at(3,-2.5) {\usebox\pingK};
+ \node[scale=.35] (16) at(4,-2.5) {\usebox\pingL};
+
+ \node[scale=.35] (17) at(5,-2.5) {\usebox\pingM};
+ \node[scale=.35] (18) at(6,-2.5) {\usebox\pingN};
+ \node[scale=.35] (19) at(7,-2.5) {\usebox\pingO};
+
+ \scope[every path/.append style={{draw}}]
+ \foreach\i in {6,7,8} {\path(1.south)to coordinate[pos=.25] (@\i) (\i.north);}
+ \foreach\i in {9,10,11} {\path(2.south)to coordinate[pos=.25] (@\i) (\i.north);}
+ \foreach\i in {14,15,16} {\path(4.south)to coordinate[pos=.25] (@\i) (\i.north);}
+ \foreach\i in {17,18,19} {\path(5.south)to coordinate[pos=.25] (@\i) (\i.north);}
+ \draw[fill=white] (@6) to[bend right=60] (@8) -- (1.south) -- cycle;
+ \draw[fill=white] (@9) to[bend right=60] (@11) -- (2.south) -- cycle;
+ \draw[fill=white] (@14) to[bend right=60] (@16) -- (4.south) -- cycle;
+ \draw[fill=white] (@17) to[bend right=60] (@19) -- (5.south) -- cycle;
+ \endscope
+
+ \node[block] (12) at(-.75,-2.5) {\strut Wings};
+ \node[block] (13) at(.75,-2.5) {\strut Static};
+
+
+
+ \node[scale=.35] (20) at(-.75,-3.75) {\usebox\pingG};
+ \node[scale=.35] (21) at(.25,-3.75) {\usebox\pingI};
+ \node[scale=.35] (22) at(1.25,-3.75) {\usebox\pingIb};
+ \node[scale=.35] (23) at(-.25,-5.35) {\usebox\pingIc};
+ \node[scale=.35] (24) at(.75,-5.35) {\usebox\pingId};
+
+ \scope[every path/.append style={draw,-{Circle[length=3.33pt,fill=white]}}]
+ \foreach\i in {12,13} {\path(3.south)--(\i.north);}
+ \path(12.south)--(20.north);
+ \endscope
+
+ \scope[every path/.append style={{draw}}]
+ \foreach\i in {6,7,8} {\path(1.south)to coordinate[pos=.25] (@\i) (\i.north);}
+ \foreach\i in {9,10,11} {\path(2.south)to coordinate[pos=.25] (@\i) (\i.north);}
+ \foreach\i in {14,15,16} {\path(4.south)to coordinate[pos=.25] (@\i) (\i.north);}
+ \foreach\i in {17,18,19} {\path(5.south)to coordinate[pos=.25] (@\i) (\i.north);}
+ \draw[fill=white] (@6) to[bend right=60] (@8) -- (1.south) -- cycle;
+ \draw[fill=white] (@9) to[bend right=60] (@11) -- (2.south) -- cycle;
+ \draw[fill=white] (@14) to[bend right=60] (@16) -- (4.south) -- cycle;
+ \draw[fill=white] (@17) to[bend right=60] (@19) -- (5.south) -- cycle;
+ \foreach\i in {21,22} {\path(13.south)to coordinate[pos=.25] (@\i) (\i.north);}
+ \draw[fill=white] (@21) to[bend right=60] (@22) -- (13.south) -- cycle;
+ \foreach\i in {23,24} {\path(21.south)to coordinate[pos=.25] (@\i) (\i.north);}
+ \draw[fill=white] (@23) to[bend right=60] (@24) -- (21.south) -- cycle;
+ \endscope
+\end{tikzpicture}
+\endpreview
+\end{document}
\ No newline at end of file