% \iffalse % <*chit> % -------------------------------------------------------------------- % \fi % \subsubsection{Dice} % % First, a regular 6-sided dice with configurable number of dots. Use % like % % \begin{Syntax} % \cs{pic}\oarg{pic options}\{dice=\meta{eyes}\} % \end{Syntax} % % For example: % % \begin{enumerate} % \item \tikz{\pic[transform shape]{dice=1};} % \item \tikz{\pic[transform shape]{dice=2};} % \item \tikz{\pic[transform shape]{dice=3};} % \item \tikz{\pic[transform shape]{dice=4};} % \item \tikz{\pic[transform shape]{dice=5};} % \item \tikz{\pic[transform shape]{dice=6};} % \end{enumerate} % % \begin{macrocode} \tikzset{ dice bg/.style={ % /utils/exec={ % \pgfgettransformentries{% % \wg@jaca}{% % \wg@jacb}{% % \wg@jacc}{% % \wg@jacd}{% % \wg@tmp}{% % \wg@tmp}% % \pgfmathsetmacro{\wg@tmp}{% % sqrt(abs(\wg@jaca*\wg@jacd-\wg@jacb*\wg@jacc))} % \xdef\wg@tmp{\wg@tmp}},% fill=black, draw=none, minimum width=1cm, minimum height=1cm, scale rounded corners, rounded corners=.1cm, inner sep=0pt, transform shape}, dice fg/.style={ fill=white, shape=circle, inner sep=0pt, minimum size=.2cm, transform shape}, pics/dice/.style={ code={ \node[dice bg] (dice bg) {}; \ifodd#1\node[dice fg] at (dice bg) {};\fi \ifnum#1>1% \node[dice fg] at ($(dice bg)+(-45:.4)$){};% \node[dice fg] at ($(dice bg)+(135:.4)$){};% \fi% \ifnum#1>3% \node[dice fg] at ($(dice bg)+( 45:.4)$){};% \node[dice fg] at ($(dice bg)+(-135:.4)$){};% \fi% \ifnum#1=6% \node[dice fg] at ($(dice bg)+(-.282,0)$){}; \node[dice fg] at ($(dice bg)+( .282,0)$){}; \fi } }, pics/dice/.default=3 } \newcommand\dicemark[2][scale=.5]{% \tikz[baseline={($(dice bg.south east)!.25!(dice bg.north east)$)},#1]{ \pic[transform shape]{dice=3};}} % \end{macrocode} % % Now some shapes of different dice. This was originally done by % \href{https://tex.stackexchange.com/questions/144193/how-do-i-put-a-die-roll-at-the-top-of-each-page#answer-144474}{David % Carlisle}. Usage is for example % % \begin{Syntax} % \cs{node}[shape=\meta{dice},\meta{node options}] \marg{value}; % \end{Syntax} % % where \meta{dice} is one of \texttt{d4}, \texttt{d6}, \texttt{d8}, % \texttt{d10}, \texttt{d12}, or \texttt{d20}. % % \def\DiceExample#1{% % \begin{tikzpicture}[ % die/.style={ % shape=#1, % scale line widths, % line width=1pt, % transform shape, % scale=.7 % }, % fg die/.style={ % die, % fill=##1, % draw=gray!25!white, % text=white}, % die shadow/.style={ % die, % fill=black, % draw=none, % opacity=.5}] % \node[die shadow,rotate=10] at (.20,.07){}; % \node[fg die=red,rotate=10] at (.15,.10){}; % \node[die shadow,rotate=-10] at (-.08,-.11){}; % \node[fg die=blue,rotate=-10] at (-.15,-.1){}; % \draw(-.5,-.5)rectangle(.6,.5); % \end{tikzpicture} % } % % \paragraph{Tetrahedron} % % \DiceExample{d4} % % \begin{macrocode} \pgfdeclareshape{d4}{ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center \anchor{text}{ % this is used to center the text in the node \pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}} \backgroundpath{ % draw border \pgfpathmoveto{\pgfpoint{0cm}{.4cm}} \pgfpathlineto{\pgfpoint{.433cm}{-.35cm}} \pgfpathlineto{\pgfpoint{-.433cm}{-.35cm}} \pgfpathlineto{\pgfpoint{0cm}{.4cm}} % \pgfusepath{draw} %draw border % \pgfusepath{draw} %draw rectangle }} % \end{macrocode} % % \paragraph{Cubic} % % \DiceExample{d6} % % \begin{macrocode} \newif\ifwg@dsixdot\wg@dsixdotfalse \tikzset{ d6 dots/.is if=wg@dsixdot, d6 dots/.initial=false, d6 dots/.default=true } \pgfdeclareshape{d6}{ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center \anchor{text}{ % this is used to center the text in the node \pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}} \backgroundpath{ % draw border \pgfpathrectanglecorners{\pgfpoint{.4cm}{.4cm}}{\pgfpoint{-.4cm}{-.4cm}} % \pgfusepath{draw} %draw rectangle } \behindforegroundpath{ % draw border \ifwg@dsixdot% \edef\numdots{\tikz@node@content}% % Draw over text \pgfpathrectanglecorners{\pgfpoint{.4cm}{.4cm}}{\pgfpoint{-.4cm}{-.4cm}}% \pgfusepath{fill} %draw rectangle \ifx\tikz@textcolor\pgfutilempty% \pgfutil@colorlet{.}{pgfstrokecolor}% \else % \pgfsetfillcolor{\tikz@textcolor}% \pgfutil@colorlet{.}{\tikz@textcolor}% \fi \pgfsetfillcolor{.}% \ifodd\numdots %\message{^^JCenter dot} \pgfpathcircle{\pgfpoint{0cm}{0cm}}{.09cm} \fi \ifnum\numdots=2% %\message{^^JSpecial 2} \pgfpathcircle{\pgfpointpolar{-45}{.32cm}}{.09cm} \pgfpathcircle{\pgfpointpolar{135}{.32cm}}{.09cm} \fi% \ifnum\numdots>2% %\message{^^JAt least 2} \pgfpathcircle{\pgfpointpolar{-45}{.35cm}}{.09cm} \pgfpathcircle{\pgfpointpolar{135}{.35cm}}{.09cm} \fi% \ifnum\numdots>3% %\message{^^JAt least 4} \pgfpathcircle{\pgfpointpolar{ 45}{.35cm}}{.09cm} \pgfpathcircle{\pgfpointpolar{-135}{.35cm}}{.09cm} \fi% \ifnum\numdots=6% %\message{^^JLucky 6} \pgfpathcircle{\pgfpoint{-.247cm}{0cm}}{.09cm} \pgfpathcircle{\pgfpoint{ .247cm}{0cm}}{.09cm} \fi \pgfusepath{fill} %draw rectangle \fi% } } % \end{macrocode} % % \paragraph{Octahedron} % % \DiceExample{d8} % % \begin{macrocode} \pgfdeclareshape{d8}{ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center \anchor{text}{ % this is used to center the text in the node \pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}} \backgroundpath{ % draw border \pgfpathmoveto{\pgfpoint{0cm}{.5cm}} \pgfpathlineto{\pgfpoint{.433cm}{.25cm}} \pgfpathlineto{\pgfpoint{.433cm}{-.25cm}} \pgfpathlineto{\pgfpoint{0cm}{-.5cm}} \pgfpathlineto{\pgfpoint{-.433cm}{-.25cm}} \pgfpathlineto{\pgfpoint{-.433cm}{.25cm}} \pgfpathlineto{\pgfpoint{0cm}{.5cm}} \pgfpathlineto{\pgfpoint{.433cm}{-.25cm}} \pgfpathlineto{\pgfpoint{-.433cm}{-.25cm}} \pgfpathlineto{\pgfpoint{0cm}{.5cm}} % \pgfusepath{draw} %draw interiaor }} % \end{macrocode} % % \paragraph{Decahedron} % % \DiceExample{d10} % % \begin{macrocode} \pgfdeclareshape{d10}{ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center \anchor{text}{ % this is used to center the text in the node \pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}} \backgroundpath{ % draw border \pgfpathmoveto{\pgfpoint{0cm}{.5cm}} \pgfpathlineto{\pgfpoint{.294cm}{-.154cm}} \pgfpathlineto{\pgfpoint{0cm}{-.3cm}} \pgfpathlineto{\pgfpoint{-.294cm}{-.154cm}} \pgfpathlineto{\pgfpoint{0cm}{.5cm}} \pgfpathlineto{\pgfpoint{.475cm}{.1cm}} \pgfpathlineto{\pgfpoint{.475cm}{-.1cm}} \pgfpathlineto{\pgfpoint{0cm}{-.5cm}} \pgfpathlineto{\pgfpoint{-.475cm}{-.1cm}} \pgfpathlineto{\pgfpoint{-.475cm}{.1cm}} \pgfpathlineto{\pgfpoint{0cm}{.5cm}} \pgfpathmoveto{\pgfpoint{.294cm}{-.154cm}} \pgfpathlineto{\pgfpoint{.475cm}{-.1cm}} \pgfpathmoveto{\pgfpoint{-.475cm}{-.1cm}} \pgfpathlineto{\pgfpoint{-.294cm}{-.154cm}} \pgfpathmoveto{\pgfpoint{0cm}{-.5cm}} \pgfpathlineto{\pgfpoint{0cm}{-.3cm}} % \pgfusepath{draw} %draw interiaor }} % \end{macrocode} % % \paragraph{Dodecahedron} % % \DiceExample{d12} % % \begin{macrocode} \pgfdeclareshape{d12}{ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center \anchor{text}{ % this is used to center the text in the node \pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}} \backgroundpath{ % draw border \pgfpathmoveto{\pgfpoint{0cm}{.5cm}} \pgfpathlineto{\pgfpoint{0.294cm}{.405cm}} \pgfpathlineto{\pgfpoint{.475cm}{.173cm}} \pgfpathlineto{\pgfpoint{.475cm}{-.173cm}} \pgfpathlineto{\pgfpoint{.294cm}{-.405cm}} \pgfpathlineto{\pgfpoint{0cm}{-.5cm}} \pgfpathlineto{\pgfpoint{-.294cm}{-.405cm}} \pgfpathlineto{\pgfpoint{-.475cm}{-.173cm}} \pgfpathlineto{\pgfpoint{-.475cm}{.173cm}} \pgfpathlineto{\pgfpoint{-.294cm}{.405cm}} \pgfpathlineto{\pgfpoint{0cm}{.5cm}} \pgfpathlineto{\pgfpoint{0cm}{.349cm}} \pgfpathlineto{\pgfpoint{.332cm}{.108cm}} \pgfpathlineto{\pgfpoint{.205cm}{-.282cm}} \pgfpathlineto{\pgfpoint{-.205cm}{-.282cm}} \pgfpathlineto{\pgfpoint{-.332cm}{.108cm}} \pgfpathlineto{\pgfpoint{0cm}{.349cm}} \pgfpathmoveto{\pgfpoint{.475cm}{.173cm}} \pgfpathlineto{\pgfpoint{.332cm}{.108cm}} \pgfpathmoveto{\pgfpoint{.294cm}{-.405cm}} \pgfpathlineto{\pgfpoint{.205cm}{-.282cm}} \pgfpathmoveto{\pgfpoint{-.294cm}{-.405cm}} \pgfpathlineto{\pgfpoint{-.205cm}{-.282cm}} \pgfpathmoveto{\pgfpoint{-.475cm}{.173cm}} \pgfpathlineto{\pgfpoint{-.332cm}{.108cm}} % \pgfusepath{draw} %draw interiaor }} % \end{macrocode} % % \paragraph{Icosohedron} % % \DiceExample{d20} % % \begin{macrocode} \pgfdeclareshape{d20}{ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center \anchor{text}{ % this is used to center the text in the node \pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}} \backgroundpath{ % draw border \pgfpathmoveto{\pgfpoint{0cm}{.5cm}} \pgfpathlineto{\pgfpoint{.454cm}{.262cm}} \pgfpathlineto{\pgfpoint{.454cm}{-.262cm}} \pgfpathlineto{\pgfpoint{0cm}{-.5cm}} \pgfpathlineto{\pgfpoint{-.454cm}{-.262cm}} \pgfpathlineto{\pgfpoint{-.454cm}{.262cm}} \pgfpathlineto{\pgfpoint{0cm}{.5cm}} \pgfpathlineto{\pgfpoint{0cm}{.292cm}} \pgfpathlineto{\pgfpoint{.253cm}{-.146cm}} \pgfpathlineto{\pgfpoint{-.253cm}{-.146cm}} \pgfpathlineto{\pgfpoint{0cm}{.292cm}} \pgfpathlineto{\pgfpoint{.454cm}{.262cm}} \pgfpathlineto{\pgfpoint{.253cm}{-.146cm}} \pgfpathlineto{\pgfpoint{0cm}{-.5cm}} \pgfpathlineto{\pgfpoint{-.253cm}{-.146cm}} \pgfpathlineto{\pgfpoint{-.454cm}{.262cm}} \pgfpathlineto{\pgfpoint{0cm}{.292cm}} \pgfpathmoveto{\pgfpoint{.454cm}{-.262cm}} \pgfpathlineto{\pgfpoint{.253cm}{-.146cm}} \pgfpathmoveto{\pgfpoint{-.454cm}{-.262cm}} \pgfpathlineto{\pgfpoint{-.253cm}{-.146cm}} % \pgfusepath{draw} %draw interiaor }} % \end{macrocode} % % \iffalse % % -------------------------------------------------------------------- % \fi