Skip to content

Instantly share code, notes, and snippets.

@loopspace
Created April 21, 2022 13:20
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save loopspace/9d4f0f7a4b206e47a705ebfee100b453 to your computer and use it in GitHub Desktop.
Save loopspace/9d4f0f7a4b206e47a705ebfee100b453 to your computer and use it in GitHub Desktop.
Set Deck in TikZ
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{patterns}
\makeatletter
\tikzset{
sub pic actions/.code=\expandafter\tikz@addmode\expandafter{\tikz@picmode}
}
\makeatother
\tikzset{
set/.pic={
\draw[rounded corners,black,ultra thick]
(0,0) rectangle +(\pgfkeysvalueof{/tikz/set/width},
\pgfkeysvalueof{/tikz/set/height});
\foreach \k in {1,...,#1}
{
\pic[
sub pic actions,
pic type/.expanded=\pgfkeysvalueof{/tikz/set/shape},
at={
(.5*\pgfkeysvalueof{/tikz/set/width},
{(.625+.125*#1-.25*\k)*\pgfkeysvalueof{/tikz/set/height}})}
];
}
},
oval/.pic={
\draw[
ultra thick,
sub pic actions,
scale=\pgfkeysvalueof{/tikz/set/width}
]
(-.2,-.1) -- ++(.4,0)
arc[radius=.1, start angle=-90, delta angle=180]
-- ++(-.4,0)
arc[radius=.1, start angle=90, delta angle=180]
;
},
diamond/.pic={
\draw[
ultra thick,
sub pic actions,
scale=\pgfkeysvalueof{/tikz/set/width}
]
(-.3,0) -- +(.3,.1) -- +(.6,0) -- +(.3,-.1) -- cycle;
},
squiggle/.pic={
\draw[
ultra thick,
sub pic actions,
scale=\pgfkeysvalueof{/tikz/set/width}
]
(-.3,0)
++(90+\pgfkeysvalueof{/tikz/set/squiggle angle}:-.1)
arc[
radius={.6/4/sin(\pgfkeysvalueof{/tikz/set/squiggle angle})-.1},
start angle=90+\pgfkeysvalueof{/tikz/set/squiggle angle},
end angle=90-\pgfkeysvalueof{/tikz/set/squiggle angle},
]
arc[
radius={.6/4/sin(\pgfkeysvalueof{/tikz/set/squiggle angle})+.1},
start angle=-90-\pgfkeysvalueof{/tikz/set/squiggle angle},
end angle=-90+\pgfkeysvalueof{/tikz/set/squiggle angle},
]
arc[
radius=.1,
start angle=-90+\pgfkeysvalueof{/tikz/set/squiggle angle},
delta angle=180
]
arc[
radius={.6/4/sin(\pgfkeysvalueof{/tikz/set/squiggle angle})-.1},
end angle=-90-\pgfkeysvalueof{/tikz/set/squiggle angle},
start angle=-90+\pgfkeysvalueof{/tikz/set/squiggle angle},
]
arc[
radius={.6/4/sin(\pgfkeysvalueof{/tikz/set/squiggle angle})+.1},
end angle=90+\pgfkeysvalueof{/tikz/set/squiggle angle},
start angle=90-\pgfkeysvalueof{/tikz/set/squiggle angle},
]
arc[
radius=.1,
start angle=90+\pgfkeysvalueof{/tikz/set/squiggle angle},
delta angle=180
]
-- cycle
;
},
set/.is family,
set/.cd,
shape/.default=oval,
shape/.initial=oval,
squiggle angle/.initial=40,
width/.initial=4,
height/.initial=4,
colour/.style={
#1,
pattern color=#1
},
fill style/.is choice,
fill style/.default=solid,
fill style/solid/.style={
fill,
},
fill style/dashed/.style={
pattern=horizontal lines,
},
fill style/empty/.style={
fill=none,
}
}
\begin{document}
\begin{tikzpicture}
\pic[
set/fill style=empty,
set/colour=red,
set/shape=oval,
set/width=3,
set/height=4
] at (0,0) {set=1};
\pic[
set/fill style=dashed,
set/colour=green,
set/shape=diamond,
set/width=3,
set/height=4
] at (4,0) {set=2};
\pic[
set/fill style=solid,
set/colour=blue,
set/shape=squiggle,
set/width=3,
set/height=4
] at (8,0) {set=3};
\end{tikzpicture}
\end{document}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment