% style `goo': liquid drops that bleed into their neighbours and drip down; % tunables \fancyqr@goo@bleed, \fancyqr@goo@jitter, \fancyqr@goo@round, % \fancyqr@goo@drip \def\fancyqr@goo@ch#1#2{\@ifundefined{fancyqr@goo@#1}{\@namedef{fancyqr@goo@#1}{#2}}{}}% \fancyqr@goo@ch{bleed}{.34}\fancyqr@goo@ch{jitter}{.26}\fancyqr@goo@ch{drip}{.45}\fancyqr@goo@ch{round}{.5}% \def\fancyqr@goo@jt{\fancyqr@goo@jitter*(rand()-.5)}% % the roundness of a corner between two sides (#1, #2 1 for a neighbour), the % scale \fancyqr@goo@t of the control points in thousandths \def\fancyqr@goo@sett#1#2{\edef\fancyqr@goo@tf{\ifcase\numexpr#1+#2\relax.85\or.30\else.10\fi}% \edef\fancyqr@goo@t{\fpeval{round(1000*(1-\fancyqr@goo@tf*\fancyqr@goo@round+.5*\fancyqr@goo@jt))}}}% \def\fancyqr@goo@v#1{\csname fancyqr@goo@#1\endcsname}% \def\fancyqr@goo@lerp#1#2{\strip@pt\dimexpr\fancyqr@goo@v{#1}pt+(\fancyqr@goo@v{#2}pt-\fancyqr@goo@v{#1}pt)*\fancyqr@goo@t/1000\relax}% % a curve with the control points between the points #1,#2 and #3,#4 (names) % ending at #5,#6 \def\fancyqr@goo@quarter#1#2#3#4#5#6{% \curveto(\fancyqr@goo@lerp{#1}{#3},\fancyqr@goo@lerp{#2}{#4})(\fancyqr@goo@lerp{#5}{#3},\fancyqr@goo@lerp{#6}{#4})(\fancyqr@goo@v{#5},\fancyqr@goo@v{#6})% }% % drips: \kk{xc}{hb}{hr/hb}{L}{rb/L}{sk}{hn} gives centre, half width of the base, % right/left width ratio, length, tip radius, tip shift and neck half width % (0: tapering). A drip is a fillet into the stem, an optional neck and bulb, % a round tip and the mirrored right side. \def\fancyqr@goo@ds{(\fancyqr@goo@drip/.45)}% \def\fancyqr@goo@kk#1#2#3#4#5#6#7{% \edef\fancyqr@goo@p{\fpeval{(#1,#2,#3,#4,#5,#6,#7)}}% \expandafter\fancyqr@goo@kb\fancyqr@goo@p }% \def\fancyqr@goo@kb(#1,#2,#3,#4,#5,#6,#7){% \def\fancyqr@goo@hn{#7}\def\fancyqr@goo@fv{min(.24,.42*#4)}% \def\fancyqr@goo@fa{min(.2,.06+.5*#2)}\def\fancyqr@goo@fb{min(.2,.06+.5*#2*#3)}% \edef\fancyqr@goo@z{\fpeval{(#5*#4,#1-#2-\fancyqr@goo@fa,#1+#2*#3+\fancyqr@goo@fb,#1-#2,#1+#2*#3,% \fancyqr@goo@yb-\fancyqr@goo@fv,\fancyqr@goo@yb-#4+#5*#4,#1+#6)}}% \expandafter\fancyqr@goo@kc\fancyqr@goo@z \edef\fancyqr@goo@z{\fpeval{(min(\fancyqr@goo@Ey+1.7*\fancyqr@goo@rb,\fancyqr@goo@ya-.03),% #1+.5*#6-#7,#1+.5*#6+#7,\fancyqr@goo@xT-\fancyqr@goo@rb,\fancyqr@goo@xT+\fancyqr@goo@rb,% \fancyqr@goo@Ey-1.33*\fancyqr@goo@rb,\fancyqr@goo@Ey+.6*\fancyqr@goo@rb)}}% \expandafter\fancyqr@goo@kd\fancyqr@goo@z }% \def\fancyqr@goo@kc(#1,#2,#3,#4,#5,#6,#7,#8){% \def\fancyqr@goo@rb{#1}\def\fancyqr@goo@xa{#2}\def\fancyqr@goo@xe{#3}\def\fancyqr@goo@xl{#4}% \def\fancyqr@goo@xr{#5}\def\fancyqr@goo@ya{#6}\def\fancyqr@goo@Ey{#7}\def\fancyqr@goo@xT{#8}% }% \def\fancyqr@goo@kd(#1,#2,#3,#4,#5,#6,#7){% \def\fancyqr@goo@yn{#1}\def\fancyqr@goo@xnl{#2}\def\fancyqr@goo@xnr{#3}\def\fancyqr@goo@xtl{#4}% \def\fancyqr@goo@xtr{#5}\def\fancyqr@goo@ytc{#6}\def\fancyqr@goo@yx{#7}% \ifdim\fancyqr@goo@hn pt>\z@\edef\fancyqr@goo@yv{\fpeval{#1-.6*\fancyqr@goo@rb}}\fi }% % a curve through the corner of its bounding box (points by name) \def\fancyqr@goo@cv#1#2#3#4#5#6{\fancyqr@goo@cvto(\fancyqr@goo@v{#1},\fancyqr@goo@v{#2})(\fancyqr@goo@v{#3},\fancyqr@goo@v{#4})(\fancyqr@goo@v{#5},\fancyqr@goo@v{#6})}% \def\fancyqr@goo@dr{% \fancyqr@goo@cv{xl}{yb}{xl}{yb}{xl}{ya}% \ifdim\fancyqr@goo@hn pt>\z@ \fancyqr@goo@cv{xl}{yn}{xnl}{ya}{xnl}{yn}\fancyqr@goo@cv{xnl}{yv}{xtl}{yx}{xtl}{Ey}% \else\fancyqr@goo@cv{xl}{Ey}{xtl}{ya}{xtl}{Ey}\fi \fancyqr@goo@cv{xtl}{ytc}{xtr}{ytc}{xtr}{Ey}% \ifdim\fancyqr@goo@hn pt>\z@ \fancyqr@goo@cv{xtr}{yx}{xnr}{yv}{xnr}{yn}\fancyqr@goo@cv{xnr}{ya}{xr}{yn}{xr}{ya}% \else\fancyqr@goo@cv{xtr}{ya}{xr}{Ey}{xr}{ya}\fi \fancyqr@goo@cv{xr}{yb}{xr}{yb}{xe}{yb}% }% % a drip is stored with the x range it spans, the bottom edge joins up to it \def\fancyqr@goo@keep{% \expandafter\xdef\csname fancyqr@goo@a\the\fancyqr@goo@n\endcsname{\fancyqr@goo@xa}% \expandafter\xdef\csname fancyqr@goo@e\the\fancyqr@goo@n\endcsname{\fancyqr@goo@xe}% \expandafter\xdef\csname fancyqr@goo@p\the\fancyqr@goo@n\endcsname{\fancyqr@goo@sh}% }% \def\fancyqr@goo@dbl#1#2#3#4{% \fancyqr@goo@kk{#1}{\fancyqr@goo@rn{.05}{.02}}{\fancyqr@goo@w}{#2}{.15}{\fancyqr@goo@j{.06}}{0}% \edef\fancyqr@goo@sh{\fancyqr@goo@dr}\edef\fancyqr@goo@sa{\fancyqr@goo@xa}% \fancyqr@goo@kk{#3}{\fancyqr@goo@rn{.05}{.02}}{\fancyqr@goo@w}{#4}{.12}{\fancyqr@goo@j{.1}}{0}% \edef\fancyqr@goo@sh{\fancyqr@goo@sh\fancyqr@goo@lnto(\fancyqr@goo@xa,\fancyqr@goo@yb)\fancyqr@goo@dr}% \let\fancyqr@goo@xa\fancyqr@goo@sa \fancyqr@goo@keep }% \def\fancyqr@goo@one#1#2#3#4#5#6#7{% \fancyqr@goo@kk{#1}{#2}{#3}{#4}{#5}{#6}{#7}\edef\fancyqr@goo@sh{\fancyqr@goo@dr}\fancyqr@goo@keep }% % random values: a+b*rand(), a drip length, a signed jitter, a width ratio, a % centre jittered by #1 or put to a side of the middle by a+b*rand() \def\fancyqr@goo@rn#1#2{(#1+#2*rand())}% \def\fancyqr@goo@len#1#2{\fancyqr@goo@rn{#1}{#2}*\fancyqr@goo@ds}% \def\fancyqr@goo@j#1{#1*(rand()-.5)}% \def\fancyqr@goo@w{(.9+.2*rand())}% \def\fancyqr@goo@cj#1{(.5+\fancyqr@goo@j{#1})}% \def\fancyqr@goo@sd#1#2{(.5+(rand()<.5?-1:1)*\fancyqr@goo@rn{#1}{#2})}% % kinds: sag, dome, three tapers, two one-sided, three bulbs, strand, fat, doubles \def\fancyqr@goo@kind{% \ifcase\fpeval{trunc(16*rand())}% \fancyqr@goo@one{\fancyqr@goo@cj{.1}}{\fancyqr@goo@rn{.26}{.07}}{\fancyqr@goo@w}{\fancyqr@goo@len{.07}{.07}}{.3}{\fancyqr@goo@j{.06}}{0}% \or\fancyqr@goo@one{\fancyqr@goo@cj{.2}}{\fancyqr@goo@rn{.2}{.1}}{\fancyqr@goo@w}{\fancyqr@goo@len{.18}{.1}}{.42}{\fancyqr@goo@j{.06}}{0}% \or\fancyqr@goo@one{\fancyqr@goo@cj{.2}}{\fancyqr@goo@rn{.2}{.08}}{\fancyqr@goo@w}{\fancyqr@goo@len{.3}{.1}}{.28}{\fancyqr@goo@j{.14}}{0}% \or\fancyqr@goo@one{\fancyqr@goo@cj{.3}}{\fancyqr@goo@rn{.18}{.08}}{\fancyqr@goo@w}{\fancyqr@goo@len{.3}{.1}}{.22}{\fancyqr@goo@j{.2}}{0}% \or\fancyqr@goo@one{\fancyqr@goo@cj{.3}}{\fancyqr@goo@rn{.12}{.06}}{\fancyqr@goo@w}{\fancyqr@goo@len{.3}{.1}}{.17}{\fancyqr@goo@j{.2}}{0}% \or\fancyqr@goo@one{\fancyqr@goo@cj{.3}}{\fancyqr@goo@rn{.28}{.06}}{.3}{\fancyqr@goo@len{.32}{.1}}{.17}{\fancyqr@goo@j{.1}}{0}% \or\fancyqr@goo@one{\fancyqr@goo@cj{.3}}{\fancyqr@goo@rn{.08}{.04}}{3.3}{\fancyqr@goo@len{.32}{.1}}{.17}{\fancyqr@goo@j{.1}}{0}% \or\fancyqr@goo@one{\fancyqr@goo@sd{.2}{.07}}{\fancyqr@goo@rn{.13}{.04}}{\fancyqr@goo@w}{\fancyqr@goo@len{.5}{.14}}{.26}{\fancyqr@goo@j{.12}}{\fancyqr@goo@rn{.08}{.03}}% \or\fancyqr@goo@one{\fancyqr@goo@sd{.2}{.07}}{\fancyqr@goo@rn{.12}{.04}}{\fancyqr@goo@w}{\fancyqr@goo@len{.54}{.1}}{.21}{\fancyqr@goo@j{.2}}{\fancyqr@goo@rn{.075}{.025}}% \or\fancyqr@goo@one{\fancyqr@goo@sd{.2}{.07}}{\fancyqr@goo@rn{.11}{.03}}{\fancyqr@goo@w}{\fancyqr@goo@len{.45}{.15}}{.12}{\fancyqr@goo@j{.24}}{0}% \or\fancyqr@goo@one{\fancyqr@goo@sd{.12}{.15}}{\fancyqr@goo@rn{.15}{.03}}{\fancyqr@goo@w}{\fancyqr@goo@len{.34}{.08}}{.28}{\fancyqr@goo@j{.08}}{\fancyqr@goo@rn{.08}{.02}}% \or\fancyqr@goo@dbl{\fancyqr@goo@rn{.26}{.05}}{\fancyqr@goo@len{.14}{.1}}{\fancyqr@goo@rn{.68}{.06}}{\fancyqr@goo@len{.3}{.18}}% \or\fancyqr@goo@dbl{\fancyqr@goo@rn{.26}{.05}}{\fancyqr@goo@len{.3}{.18}}{\fancyqr@goo@rn{.68}{.06}}{\fancyqr@goo@len{.14}{.1}}% \or\fancyqr@goo@one{\fancyqr@goo@cj{.2}}{\fancyqr@goo@rn{.24}{.05}}{\fancyqr@goo@w}{\fancyqr@goo@len{.34}{.1}}{.33}{\fancyqr@goo@j{.1}}{0}% \or\fancyqr@goo@dbl{\fancyqr@goo@rn{.26}{.05}}{\fancyqr@goo@len{.3}{.15}}{\fancyqr@goo@rn{.68}{.06}}{\fancyqr@goo@len{.3}{.15}}% \else\fancyqr@goo@one{.5}{.3}{1}{.08*\fancyqr@goo@ds}{.35}{\fancyqr@goo@j{.06}}{0}% \fi }% % shapes are drawn once into a pool, tiles pick from it \@ifundefined{fancyqr@goo@n}{\newcount\fancyqr@goo@n}{}% \let\fancyqr@goo@cvto\curveto \let\fancyqr@goo@lnto\lineto \def\fancyqr@goo@pool{48}% \def\fancyqr@goo@yb{-.01}% \def\fancyqr@goo@fill{% \ifnum\fancyqr@goo@n<\fancyqr@goo@pool\relax \fancyqr@goo@kind\advance\fancyqr@goo@n\@ne \expandafter\fancyqr@goo@fill\fi }% \def\fancyqr@goo@mk{% \begingroup \let\fancyqr@goo@cvto\relax\let\fancyqr@goo@lnto\relax \fancyqr@goo@n\z@\fancyqr@goo@fill \endgroup \xdef\fancyqr@goo@built{\fancyqr@goo@drip}% }% \def\fancyqr@goo@tile#1#2#3#4{% \roundjoin\roundcap \ifnum#1=\@ne\edef\fancyqr@goo@u{\fpeval{1+\fancyqr@goo@bleed+\fancyqr@goo@jt}}% \else\edef\fancyqr@goo@u{\fpeval{1-.5*\fancyqr@goo@jitter*rand()-.4*\fancyqr@goo@drip*rand()}}\fi \ifnum#3=\@ne\edef\fancyqr@goo@r{\fpeval{1+\fancyqr@goo@bleed+\fancyqr@goo@jt}}% \else\edef\fancyqr@goo@r{\fpeval{1-.5*\fancyqr@goo@jitter*rand()}}\fi \ifnum#2=\@ne\edef\fancyqr@goo@l{\fpeval{-\fancyqr@goo@bleed+\fancyqr@goo@jt}}% \else\edef\fancyqr@goo@l{\fpeval{.5*\fancyqr@goo@jitter*rand()}}\fi \edef\fancyqr@goo@ry{\fpeval{.5+.5*\fancyqr@goo@jt-.3*\fancyqr@goo@drip*rand()}}% \edef\fancyqr@goo@ly{\fpeval{.5+.5*\fancyqr@goo@jt-.3*\fancyqr@goo@drip*rand()}}% \edef\fancyqr@goo@ux{\fpeval{.5+.5*\fancyqr@goo@jt}}% \moveto(\fancyqr@goo@r,\fancyqr@goo@ry)% \fancyqr@goo@sett{#3}{#1}\fancyqr@goo@quarter{r}{ry}{r}{u}{ux}{u}% \fancyqr@goo@sett{#1}{#2}\fancyqr@goo@quarter{ux}{u}{l}{u}{l}{ly}% \ifnum#4=\@ne \edef\fancyqr@goo@d{\fpeval{-\fancyqr@goo@bleed-\fancyqr@goo@drip*rand()+\fancyqr@goo@jt}}% \edef\fancyqr@goo@dx{\fpeval{.5+.5*\fancyqr@goo@jt}}% \fancyqr@goo@sett{#2}{#4}\fancyqr@goo@quarter{l}{ly}{l}{d}{dx}{d}% \fancyqr@goo@sett{#4}{#3}\fancyqr@goo@quarter{dx}{d}{r}{d}{r}{ry}% \else \ifx\fancyqr@goo@built\fancyqr@goo@drip\else\fancyqr@goo@mk\fi \edef\fancyqr@goo@k{\fpeval{trunc(\fancyqr@goo@pool*rand())}}% \expandafter\let\expandafter\fancyqr@goo@xa\csname fancyqr@goo@a\fancyqr@goo@k\endcsname \expandafter\let\expandafter\fancyqr@goo@xe\csname fancyqr@goo@e\fancyqr@goo@k\endcsname \fancyqr@goo@sett{#2}{#4}\fancyqr@goo@quarter{l}{ly}{l}{yb}{xa}{yb}% \csname fancyqr@goo@p\fancyqr@goo@k\endcsname \fancyqr@goo@sett{#4}{#3}\fancyqr@goo@quarter{xe}{yb}{r}{yb}{r}{ry}% \fi \closepath\fillpath }% \def\fancyqr@goo@np#1#2#3#4{\newpattern#1#2#3#4{\fancyqr@goo@tile#1#2#3#4}}% \fancyqr@goo@np0000\fancyqr@goo@np1000\fancyqr@goo@np0001\fancyqr@goo@np0100\fancyqr@goo@np0010\fancyqr@goo@np1100% \fancyqr@goo@np1010\fancyqr@goo@np0101\fancyqr@goo@np0011\fancyqr@goo@np1001\fancyqr@goo@np0110\fancyqr@goo@np1111% \fancyqr@goo@np0111\fancyqr@goo@np1011\fancyqr@goo@np1101\fancyqr@goo@np1110% \FancyQrStyleSet{finder=inherit}%