64

We have tons of nice TikZ-drawn pictures on this site. Among them some great pictures of animals like cfr's cat code. But they are distributed all over the site.

As we definitely miss a place to collect them, this post asks about nice examples of animals/pets drawn with TikZ. Especially those pictures about ducks are welcome.

For all of the duck friends, quack!

Please do not close this question too early (I know it's a bit out-of-concept here, but there are other well-known showcases).

21 Answers 21

51
+100

enter image description here

\documentclass[tikz,border=5]{standalone}
\usepackage[prefix=]{xcolor-material}
\pgfmathdeclarerandomlist{material}{%
{Red}{Blue}{Green}}
\tikzset{%
  half clip/.code={
    \clip (0, -256) rectangle (256, 256);
  },
  color/.code=\colorlet{fill color}{#1},
  color alias/.code args={#1 as #2}{\colorlet{#1}{#2}},
  colors alias/.style={color alias/.list/.expanded={#1}},
  execute/.code={#1},
  on left/.style={.. on left/.style={#1}},
  on right/.style={.. on right/.style={#1}},
  split/.style args={#1 and #2}{
    on left ={color alias=fill color as #1},
    on right={color alias=fill color as #2, half clip}
  }
}
\newcommand\reflect[2][]{%
\begin{scope}[#1]\foreach \side in {-1, 1}{\begin{scope}
\ifnum\side=-1 \tikzset{.. on left/.try}\else\tikzset{.. on right/.try}\fi
\begin{scope}[xscale=\side]#2\end{scope}
\end{scope}}\end{scope}}

\tikzset{%
cat/.pic={
\tikzset{x=3cm/5,y=3cm/5,shift={(0,-1/3)}}
\useasboundingbox (-1,-1) (1,2);
\fill [BlueGrey900] (0,-2)
  .. controls ++(180:3) and ++(0:5/4) .. (-2,0)
  arc (270:90:1/5)
  .. controls ++(0:2) and ++(180:11/4) .. (0,-2+2/5);
\foreach \i in {-1,1}
  \scoped[shift={(1/2*\i,9/4)}, rotate=45*\i]{
    \clip [overlay] (0, 5/9) ellipse [radius=8/9];
    \clip [overlay] (0,-5/9) ellipse [radius=8/9];
    \fill [BlueGrey900] ellipse [radius=1];
    \clip [overlay] (0, 7/9) ellipse [radius=10/11];
    \clip [overlay] (0,-7/9) ellipse [radius=10/11];
    \fill [Purple100] ellipse [radius=1];
  };
\fill [BlueGrey900] ellipse [x radius=3/4, y radius=2];
\fill [BlueGrey100] ellipse [x radius=1/3, y radius=1];
\fill [BlueGrey900]
  (0,15/8) ellipse [x radius=1, y radius=5/6]
  (0, 8/6) ellipse [x radius=1/2, y radius=1/2]
  {[shift={(-1/2,-2)}, rotate= 10]  ellipse [x radius=1/3, y radius=5/4]}
  {[shift={( 1/2,-2)}, rotate=-10] ellipse [x radius=1/3, y radius=5/4]};
\fill [BlueGrey500]
  (-1/9,11/8) ellipse [x radius=1/5, y radius=1/5]
  ( 1/9,11/8) ellipse [x radius=1/5, y radius=1/5];
\fill [Purple100]
  (0,12/8)     ellipse [x radius=1/10, y radius=1/5]
  (0,12/8+1/9) ellipse [x radius=1/5 , y radius=1/10];
\foreach \i in {-1,1}
  \scoped[shift={(1/2*\i,2)}, rotate=35*\i]{
    \clip [overlay] (0, 1/7) ellipse [radius=2/7];
    \clip [overlay] (0,-1/7) ellipse [radius=2/7];
    \fill [Yellow50] ellipse [radius=1];
  };
\scoped{
  \clip (-1,-2) rectangle ++(2,1);
  \fill [BlueGrey900] (0,-2) ellipse [radius=1/2];
  \fill [Grey100]
    (-1/2,-2) ellipse [x radius=1/3, y radius=1/4]
    ( 1/2,-2) ellipse [x radius=1/3, y radius=1/4];
};
\foreach \i in {-1,1}
  \foreach \j in {-1,0,1}
    \fill [Grey100, shift={(0,11/8)}, xscale=\i, rotate=\j*15,
      shift=(0:1/2)]
      ellipse [x radius=1/3, y radius=1/64];
},
duck/.pic={
\tikzset{x=3cm/100,y=3cm/100, shift={(-50,-50)}}
\fill [Amber800] (58,28)
  .. controls (56,28) and (55,27) .. (55,26)
  .. controls (55,25) and (56,16) .. (55,15)
  .. controls (54,14) and (54,12) .. (55,11)
  .. controls (56,10) and (66, 7) .. (68, 7)
  .. controls (70, 7) and (75,15) .. (73,15)
  .. controls (71,15) and (62,13) .. (60,15)
  .. controls (58,17) and (60,25) .. (60,26)
  .. controls (60,27) and (59,28) .. (58,28)
  -- cycle;
\fill [BlueGrey900] (1,57)
  .. controls ( 0,51) and ( 4,44) .. (10,42)
  .. controls (16,40) and (23,40) .. (24,47)
  -- cycle;
\begin{scope}
\clip [preaction={fill=LightGreen}] (74,96)
  .. controls (66,96) and (62,92) .. (60,88)
  .. controls (58,84) and (58,76) .. (61,68)
  -- (76,68)
  .. controls (72,72) and (74,74) .. (75,75)
  .. controls (82,75) and (88,76) .. (88,84)
  .. controls (88,92) and (82,96) .. (74,96)
  -- cycle;
\fill [Grey100] (57,68) rectangle +(20,4);
\end{scope}
\fill [BlueGrey50]
  (14,48)
  .. controls (14,34) and (32,21) .. (53,21)
  .. controls (55,21) and (57,21) .. (61,22)
  .. controls (81,27) and (92,36) .. (92,48)
  -- cycle;
\fill [Brown500] (61,68)
  .. controls (65,52) and (68,40) .. (61,22)
  .. controls (84,26) and (92,36) .. (92,48)
  .. controls (92,60) and (82,65) .. (76,68)
  -- cycle;
\fill [BlueGrey400] (56,64)
  .. controls (45,64) and (40,60) .. (32,56)
  .. controls (24,52) and ( 8,52) .. ( 8,48)
  .. controls (8, 44) and (24,36) .. (40,36)
  .. controls (56,36) and (68,44) .. (72,48)
  .. controls (76,52) and (72,56) .. (68,60)
  .. controls (64,64) and (60,64) .. (56,64)
  -- cycle;
\fill [Amber500] (88,84)
  .. controls (86,84) and ( 87,82) .. (86,81)
  .. controls (85,80) and ( 80,79) .. (83,76)
  .. controls (86,73) and ( 95,71) .. (97,71)
  .. controls (99,71) and (100,72) .. (99,73)
  .. controls (98,74) and ( 92,77) .. (91,80)
  .. controls (90,83) and ( 90,84) .. (88,84)
  -- cycle;
\fill (78,87)
  .. controls (77,85) and (80,82) .. (83,84)
  .. controls (83,87) and (80,88) .. (78,87)
  -- cycle;
\fill [Amber700] (50,25)
  .. controls (48,25) and (47,24) .. (47,23)
  .. controls (47,22) and (48,13) .. (47,12)
  .. controls (46,11) and (46, 9) .. (47, 8)
  .. controls (48, 7) and (58, 4) .. (60, 4)
  .. controls (62, 4) and (67,12) .. (65,12)
  .. controls (63,12) and (54,10) .. (52,12)
  .. controls (50,14) and (52,22) .. (52,23)
  .. controls (52,24) and (51,25) .. (50,25)
  -- cycle;},
horse/.pic={
\begin{scope}[x=3cm/448,y=3cm/448]
\fill [Brown200]
  (-128,128)
  to [bend left]  ++(-16,-128) to [bend right] ++( 32,  8)
  to [bend left]  ++(-48, -96) to [bend right] ++( 56,   8)
  to [bend left]  ++(-64, -96) to [bend right]   (  0, -96)
  (128,128)
  to [bend left] ++(32,-128) to [bend right] ++(-40,40)
  to [bend left] ++( 0, -96) to [bend right] ++(-64,96);
\reflect[
  on left ={color alias=ears as Brown600},
  on right={color alias=ears as Brown700},
  color 0/.style={ears}, color 1/.style={BlueGrey900}
]{
  \foreach \j in {0, 1}
  \fill [color \j]
  [shift={(96,120)}, rotate=45, scale=9/10-\j/3, xscale=9/10]
  (-72,0)
  .. controls ++( 90: 8) and ++(180:16) .. ( 0, 48)
  .. controls ++(  0:16) and ++( 90:12) .. (88,  0)
  .. controls ++(270:12) and ++(  0: 8) .. ( 0,-48)
  .. controls ++(180: 8) and ++(270: 8) .. cycle;
}
\reflect[split=Brown600 and Brown700]{%
  \fill [fill color] (-56,-160)
  .. controls ++( 90:176) and ++(270: 96) .. (-112,  64)
  arc (180:0: 112 and 112)
  .. controls ++(270: 96) and ++( 90:176) .. (  56,-160) -- cycle;
}
\reflect[split=Grey50 and Grey200]{%
  \fill [fill color] (0,-48)
    .. controls ++(135:48) and ++(225:48) .. (0,168)
    .. controls ++(315:48) and ++( 45:48) .. cycle;
}

\reflect[split=Brown50 and Brown100]{%
  \fill [fill color] (0,-164) ellipse [x radius=56, y radius=56];
}
\reflect[split=Brown200 and Brown300]{%
  \fill [fill color] (0,-164) ellipse [x radius=48, y radius=40];
}
\reflect[split=Brown50 and Brown100]{%
  \fill [fill color] (0,-144) ellipse [x radius=64, y radius=48];
}
\reflect[split=Brown50 and Brown100]{
  \fill [fill color]  (36, -128) ellipse [x radius=24, y radius=40];
  \fill [BlueGrey900] (36, -128) ellipse [x radius=12, y radius=24];
}
\fill [BlueGrey900]
  (-72, 64) ellipse [radius=20]
  ( 72, 64) ellipse [radius=20];
\fill [Brown200]
  (0,192)
  .. controls ++(180:64) and ++( 90:64) .. (-128, 64)
  .. controls ++( 60:16) and ++(180:16) .. ( -64,128)
   to [bend left]  (-80,88)
   to [bend right] (  0, 128)
   to [bend left]  (-16,  64)
   .. controls ++( 0:64) and ++(270:32) .. (96,144)
   .. controls ++(90:32) and ++(  0:64) .. cycle;
\end{scope}},
chimpanzee/.pic={
\tikzset{x=3cm/3.5,y=3cm/3.5, shift={(0,1/4)}}
\fill [BlueGrey700] (165:5/4 and 1) ellipse [radius=1/2];
\fill [Pink100]     (165:5/4 and 1) ellipse [radius=1/3];
\fill [BlueGrey700]
  (0,-1/2) ellipse [x radius=1, y radius=4/3]
  (0,   0) ellipse [x radius=4/3, y radius=1];
\scoped{
  \clip(0,-2) rectangle(9/5,1);
  \fill [BlueGrey900] (15:5/4 and 1) ellipse [radius=1/2];
  \fill [Pink200]     (15:5/4 and 1) ellipse [radius=1/3];
  \fill [BlueGrey900]
    (0,-1/2) ellipse [x radius=1, y radius=4/3]
    (0,   0) ellipse [x radius=4/3, y radius=1];
}
\fill [Pink100]            (  0,-2/3) ellipse [x radius=5/6, y radius=  1];
\fill [Pink100, xscale=-1] (1/2,   0) ellipse [x radius=3/5, y radius=2/3];
\fill [Pink100, xscale= 1] (1/2,   0) ellipse [x radius=3/5, y radius=2/3];
\scoped{
  \clip(0,-2) rectangle(9/5,1);
  \fill [Pink200]            (  0,-2/3) ellipse [x radius=5/6, y radius=  1];
  \fill [Pink200, xscale=-1] (1/2,   0) ellipse [x radius=3/5, y radius=2/3];
  \fill [Pink200, xscale= 1] (1/2,   0) ellipse [x radius=3/5, y radius=2/3];
}
\foreach \i in {-1,1}
  \fill [BlueGrey900, xscale=\i] (1/2,0) ellipse [radius=1/4];
\fill [Pink300]
  (-1/7,-2/3) ellipse [radius=1/9]
  ( 1/7,-2/3) ellipse [radius=1/9];
\fill [Pink300]
  (-1/2,-1) arc (180:360:1/2 and 1/8) arc (360:180:1/2 and 1/4);
},
shark/.pic={
\tikzset{x=3cm/22,y=3cm/22,shift={(-8,-11)}}
\fill [BlueGrey200]
  (2,16.75) -- ++(0.5,-1) -- ++(0.5,1) -- cycle
  (3,16.25) -- ++(0.5,-1) -- ++(0.5,1) -- cycle
  (1,17)    -- ++(0.5,-1) -- ++(0.5,1) -- cycle
  (2,15.5)  -- ++(-.5,-1) -- ++(1,0) -- cycle
  (3,15)    -- ++(-.5,-1) -- ++(1,0) -- cycle;
\fill [BlueGrey700] (6,12)
  .. controls (5,11) and (5,8)  .. (6,7)
  .. controls (7,8)  and (7,9)  .. (8,10)
  .. controls (8,11) and (7,12) .. (6,12)-- cycle;
\fill [BlueGrey500] (0,20)
  .. controls (0,19)  and (0,18)  .. (1,17)
  .. controls (3,16)  and (4,16)  .. (4,15)
  .. controls (4,14)  and (2,15)  .. (1,15)
  .. controls (2,13)  and (3,12)  .. (5,10)
  .. controls (7,8)   and (11,6)  .. (14,5)
  .. controls (14,3)  and (14,1)  .. (15,0)
  .. controls (15,2)  and (15,3)  .. (16,4)
  .. controls (17,5)  and (18,6)  .. (20,6)
  .. controls (19,7)  and (16,7)  .. (15,6)
  .. controls (14,10) and (11,15) .. (9,17)
  .. controls (7,19)  and (3,20)  .. (0,20) -- cycle;
\fill [BlueGrey100] (0,20)
  .. controls (0,19) and (0,18) .. (1,17)
  .. controls (3,16) and (4,16) .. (4,15)
  .. controls (4,14) and (2,15) .. (1,15)
  .. controls (2,13) and (3,12) .. (5,10)
  .. controls (7,8)  and (11,6) .. (14,5)
  .. controls (13,8) and (7,8)  .. (6,12)
  .. controls (5,16) and (2,19) .. (0,20) -- cycle;
\fill [BlueGrey500] (3,13)
  .. controls (2,12) and (2,9)  .. (3,8)
  .. controls (4,9)  and (4,10) .. (5,11)
  .. controls (5,12) and (4,13) .. (3,13) -- cycle;
\fill [BlueGrey500] (9,18)
  .. controls (8,18)  and (7.5,17.5) .. (7,17)
  .. controls (7,16)  and (9,14)     .. (10,14)
  .. controls (10,15) and (11,17)    .. (12,17)
  .. controls (11,18) and (10,18)    .. (9,18) -- cycle;
\fill [BlueGrey800] (6,17.5) circle [radius=0.5];
},
squid/.pic={
\begin{scope}[x=3cm/480,y=3cm/480]
\useasboundingbox (-256, -256) (256, 256);
\reflect[split={DeepOrange500 and DeepOrange700}]{
  \fill [fill color] (0,96) ellipse [x radius=96, y radius=128];
  \fill [fill color]
    (72,-16)
    .. controls ++(270:72) and ++(270:40) .. ++(108,  -16)
    .. controls ++( 90:64) and ++(270:64) .. ++(-40,128)
    .. controls ++( 90:32) and ++(270:32) .. ++( 40, 96)
    arc (180:0:4)
    .. controls ++(270: 32) and ++( 90: 32) .. ++(-24, -96)
    .. controls ++(270: 64) and ++( 90: 64) .. ++( 56,-128)
    .. controls ++(270:128) and ++(270:160) ..   (  0, -16);
  \fill [fill color]  (64, 16) circle [radius=48];
  \fill [Grey50]      (64, 16) circle [radius=32];
  \fill [BlueGrey900] (64, 16) circle [radius=12];
  \fill [fill color]  (-4, -20)
    .. controls ++(270:256) and ++(225: 64) .. (128,-192)
    arc (315:495:4)
    .. controls ++(210: 64) and ++(270:192) .. (48, -40);
}
\fill [DeepOrange900]
  (-40,-40) arc (180:360:40 and 16) arc (360:180:40 and 40);
\fill [DeepOrange300]
  (-32,108) circle [radius=16] (-40,160) circle [radius=12]
  (-20,196) circle [radius= 8]  ( 40,160) circle [radius=16]
  ( 64,120) circle [radius= 8]  ( 40,100) circle [radius=12];
\end{scope}
},
owl/.pic={
\begin{scope}[x=3cm/512,y=3cm/512]
\foreach \i in {-3,...,3}
  \fill [Brown900, shift={(0,128)}, rotate=-\i*13]
    (0,0) arc (90:450:48 and 144);
\foreach \i in {-1,...,1}
  \fill [Brown900, shift={(0,32)}, rotate=-\i*10]
    (0,0) arc (90:450:32 and 128);
\reflect[split={Brown700 and Brown800}]{
  \fill [fill color] (0,224)
  .. controls ++(180:96) and ++( 90:96) .. (-112,32)
  .. controls ++(270:96) and ++(180: 0) .. (0,-148)
  .. controls ++(  0: 0) and ++(270:96) .. ( 112,32)
  .. controls ++( 90:96) and ++(  0:96) .. cycle;
}
\reflect[
  on left ={colors alias={
    outer eye as Brown600, eyebrow as Brown800, chest as Brown100}},
  on right={colors alias={
    outer eye as Brown700, eyebrow as Brown900, chest as Brown200},
    half clip}]{
  \fill [outer eye]   (64, 128) circle [radius=80];
  \fill [Grey100]     (64, 128) circle [radius=40];
  \fill [BlueGrey900] (64, 128) circle [radius=20];
  \fill [eyebrow]  (0,112)
    .. controls ++( 90:128) and ++(270:64) .. (160,240)
    .. controls ++(270:112) and ++( 90:64) .. cycle;
  \fill [chest] 
    (0,-140)
    .. controls ++(135:32) and ++(270:32) .. (-64,-40)
    arc (180:0:64)
    .. controls ++(270:32) and ++( 45:32) .. cycle;
}
\reflect[
  on left ={colors alias={
    beak as Amber500, perch as BlueGrey800, foot as Brown600, 
    talon as Amber500}},
  on right={colors alias={
    beak as Amber700, perch as BlueGrey900, foot as Brown700, 
      talon as Amber700}, half clip}]{
  \fill [beak] (0,28)
    .. controls ++(135:32) and ++(270:16) .. (-32,64)
    arc (180:0:32)
    .. controls ++(270:16) and ++(45:32) .. cycle;
  \fill [perch]
    (-192,-128) arc (90:270:12) -- ++(384,0) arc (270:450:12) -- cycle;
  \tikzset{shift={(0, -128)}}
  \fill [foot]
    (3, 0) arc (180:0:36 and 24) -- cycle;
  \foreach \j in {-1,0,1}
    \scoped[shift={(40+20*\j,0)}]\fill [talon]
       (10,0) arc (0:180:10) -- (0,-16) -- cycle;
}
\end{scope}},
cow/.pic={
\begin{scope}[x=3cm/480,y=3cm/480]
\reflect[]{
\tikzset{shift={(32,140)}, rotate=-45}
  \fill [BlueGrey100] (0,0) arc (0:90:32 and 96) arc (90:0:96);
  \fill [BlueGrey200] (32,0) arc (0:90:64 and 96) arc (90:0:96);
}
\foreach \i in {-1, 1}\foreach \j in {0, 1}
\fill \ifnum\j=0 \ifnum \i=-1 [BlueGrey700] \else [BlueGrey800] \fi\else [BlueGrey900] \fi
  [xscale=\i, shift={(128,88)}, rotate=10, scale=1-\j/3]
  (-72,0)
  .. controls ++( 90: 8) and ++(180:16) .. ( 0, 48)
  .. controls ++(  0:16) and ++( 90:12) .. (88,  0)
  .. controls ++(270:12) and ++(  0: 8) .. ( 0,-48)
  .. controls ++(180: 8) and ++(270: 8) .. cycle;
\reflect[split={BlueGrey700 and BlueGrey800}]{%
  \fill [fill color] (-64,-160)
  .. controls ++( 90:144) and ++(270: 64) .. (-120,  64)
  arc (180:0: 120 and 112)
  .. controls ++(270: 64) and ++( 90:144) .. (  64,-160) -- cycle;
}
\reflect[split=Grey50 and Grey200]{%
  \fill [fill color](-64,-160)
    .. controls ++( 75:144) and ++(270: 64) .. (-16,  64)
    .. controls ++( 90: 32) and ++(180: 72) .. (  0, 168)
    .. controls ++(  0: 72) and ++( 90: 32) .. ( 16,  64)
    .. controls ++(270: 64) and ++(105:144) .. ( 64,-160) -- cycle;
}
\reflect[split=Pink100 and Pink200]{
  \fill [fill color] (0,-160) ellipse [x radius=64, y radius=56];
}
\fill [Pink300] (0, -160) ellipse [x radius=48, y radius=40];
\reflect[split=Pink100 and Pink200]{
  \fill [fill color] (0,-128) ellipse [x radius=80, y radius=56];
}
\fill [Pink300]
  (-32, -128) ellipse [radius=16]
  ( 32, -128) ellipse [radius=16];
\fill [BlueGrey900]
  (-64, 64) ellipse [radius=24]
  ( 64, 64) ellipse [radius=24];
\end{scope}
},
bee/.pic={
\begin{scope}[x=3cm/480,y=3cm/480, rotate=-45, shift=(270:48)]
\reflect[
  on left= {colors alias={body as BlueGrey800, stripes as Amber500}},
  on right={colors alias={body as BlueGrey900, stripes as Amber700}, half clip},
  lower wing/.style={fill=BlueGrey100}, upper wing/.style={fill=BlueGrey50}]{
  \fill [body] (0,-160)
    .. controls ++(120:64) and ++(270:64) .. (-88, -16)
    .. controls ++( 90:64) and ++(225:64) .. (  0, 128)
    .. controls ++(315:64) and ++( 90:64) .. ( 88, -16)
    .. controls ++(270:64) and ++( 60:64) .. cycle;
  \fill [body] (0,128) ellipse [x radius=80, y radius=56];
  \fill [body]
    (32,160) arc (180:90:64) -- ++(6,-6) coordinate [midway] (@)
    arc (90:180:64) -- cycle;
  \fill [body] (@) circle [radius=12];
  \begin{scope}
    \clip (0,-160)
      .. controls ++(120:64) and ++(270:64) .. (-88, -16)
      .. controls ++( 90:64) and ++(225:64) .. (  0, 128)
      .. controls ++(315:64) and ++( 90:64) .. ( 88, -16)
      .. controls ++(270:64) and ++( 60:64) .. cycle;
    \foreach \i in {0,...,2}
      \fill [stripes] (-256, -160 + \i*80) rectangle ++(512, 40);
  \end{scope}
  \foreach \s [count=\i from -1] in {lower wing, upper wing}
    \fill [style=\s, shift={(16,56)}, rotate=\i*32]
      (0,0)
      .. controls ++( 30:64) and ++(180:32) .. (128,56)
      arc (90:-90:56)
      .. controls ++(180:32) and ++(330:64) .. cycle;
}
\end{scope}},
monkey/.pic={%
\begin{scope}[x=3cm/448,y=3cm/448]
\useasboundingbox (-256, -256) (256, 256);
\reflect[
  on left ={ color alias/.list={skin as Brown700, ears as Pink100}},
  on right={ color alias/.list={skin as Brown900, ears as Pink200}, half clip }
]{
  \fill [skin] (140, 80) circle  [radius=56];
  \fill [ears] (140, 80) circle  [radius=32];
  \fill [skin] (  0, 72) ellipse [x radius=140, y radius=112];
  \fill [skin] (  0,-64) ellipse [x radius=172, y radius=112];
}
\reflect[
  on left ={color alias/.list={face as Pink100}},
  on right={color alias/.list={face as Pink200}, half clip}
  ]{
  \fill [face] (0,-64) ellipse [x radius=140, y radius=88];
  \fill [face] (40,64) ellipse [radius=64];
}
\reflect{
  \fill [BlueGrey900] (40, 64) circle [radius=24];
  \fill [Pink300]     (24,-16) circle [radius=16];
}
\fill [Pink300]
  (-96,-72) arc (180:360:96 and 32) arc (360:180:96 and 56);
\end{scope}},
donkey/.pic={
\begin{scope}[x=3cm/480,y=3cm/480]
\reflect[
  on left ={color alias=ears as BlueGrey500},
  on right={color alias=ears as BlueGrey700},
  outer ear/.style={fill=ears}, inner ear/.style={fill=BlueGrey900}
]{
  \foreach \s [count=\j from 0] in {outer ear, inner ear}
  \fill [style=\s]
  [shift={(88,120)}, rotate=75, scale=9/10-\j/3, xscale=3/2]
  (-72,0)
  .. controls ++( 90: 8) and ++(180:16) .. ( 0, 48)
  .. controls ++(  0:16) and ++( 90:12) .. (88,  0)
  .. controls ++(270:12) and ++(  0: 8) .. ( 0,-48)
  .. controls ++(180: 8) and ++(270: 8) .. cycle;
}
\reflect[split=BlueGrey500 and BlueGrey700]{%
  \fill [fill color] (-56,-160)
  .. controls ++( 90:112) and ++(270: 128) .. (-112,  48)
  arc (180:0:112 and 96)
  .. controls ++(270: 128) and ++( 90:112) .. (  56,-160) -- cycle;
}
\reflect[split=Grey500 and Grey600]{%
  \fill [fill color] (0,-164) ellipse [x radius=56, y radius=56];
}
\reflect[split=Grey700 and Grey800]{%
  \fill [fill color] (0,-164) ellipse [x radius=48, y radius=40];
}
\reflect[split=Grey500 and Grey600]{%
  \fill [fill color] (0,-144) ellipse [x radius=64, y radius=48];
  \fill [fill color]  (36, -128) ellipse [x radius=24, y radius=40];
  \fill [BlueGrey900] (36, -128) ellipse [x radius=12, y radius=24];
}
\fill [BlueGrey900]
  (-72, 40) ellipse [radius=20]
  ( 72, 40) ellipse [radius=20]
  (-8,160)
  to [bend left]  ++( 16, 32) to [bend right] ++( 16,-48)
  to [bend left]  ++( 16, 32) to [bend right] ++( 16,-48)
  to [bend right] ++(-32,-48) to [bend left]  ++(-16, 32)
  to [bend right] ++(-32,-32) to [bend left]  ++(  0, 32)
  to [bend right] ++(-32,-16) to [bend left]  ++( 16, 40)
  to [bend right] ++(-16, 32) to [bend left]  cycle;
\end{scope}},
chipmunk/.pic={
\begin{scope}[x=3cm/448,y=3cm/448]
\reflect[
  on left ={colors alias={fur as Brown500, ear as Pink100}},
  on right={colors alias={fur as Brown700, ear as Pink200}, half clip}
]{
  \begin{scope}[shift={(88,56)}, rotate=-10]
  \fill [fur] (0,0) arc (270:90:40 and 64) arc (90:-90:24 and 64);
  \fill [ear] (0,0) arc (270:90:32 and 48) arc (90:-90:16 and 48);
  \end{scope}
  \fill [fur] ( 0,  -8) ellipse [x radius=128, y radius=176];
  \fill [fur] (96,-72) ellipse [x radius= 96, y radius= 88];
}
\reflect[split={Grey300 and Grey400}]{
  \fill [fill color, shift={(72,-80)}, yscale=-1] (-96,0) 
  arc (180:270: 96 and 80) arc (270:360:112 and 88)
  to [bend left ] ++(-20,-8) 
  to [bend right] ++(12,32)
  to [bend left ] (30:96 and 80)
  arc (30:180:96 and 80) -- cycle;
  \fill [fill color] (56,16) [rotate=-5] ellipse [x radius=48, y radius=96];
}
\reflect[split={Brown100 and Brown200}]{
  \fill [Grey100] (4,-56) -- ++(0,-64) -- ++(24,0) -- ++(16,64) -- cycle;
  \fill [fill color] (0,-40) ellipse [x radius=80, y radius=48];
  \fill [fill color] (0,-48) ellipse [x radius=64, y radius=56];
}
\reflect[split={BlueGrey800 and BlueGrey900}]{
  \fill [fill color]
    (0,-56) 
    .. controls ++(  0:16) and ++(315:16) .. ( 36,0)
    .. controls ++(135:16) and ++( 45:16) .. (-36,0)
    .. controls ++(225:16) and ++(180:16) .. cycle;
  \fill [BlueGrey900] (56, 40) circle [radius=20];
}
\end{scope}},
ladybird/.pic={
\begin{scope}[x=3cm/512,y=3cm/512]
\tikzset{rotate=-45}
\reflect[split=BlueGrey800 and BlueGrey900]{
  \fill [fill color] (0,16) ellipse [x radius=96, y radius=144];
  \foreach \i [count=\n from 0] in {1,0,-1} \foreach \j in {0,1}
  \fill [fill color, shift=(40-\n*40:96 and 144), 
    rotate=30-\n*40, shift=(0:\j*60), 
    xscale=1-\j/3, yscale=1-\j/6, rotate=\i*\j*15]
    (0,4) -- ++(64,4) -- ++(0,-16) -- (0,-4) -- cycle;
}
\reflect[
  on left ={colors alias={spot as Grey800, wing as Red600}},
  on right={colors alias={spot as Grey900, wing as Red900}, half clip}
]{
\clip [preaction={fill=wing}] 
  (0,0 |- 45:128 and 144) -- (45:128 and 144) arc (45:-80:128 and 144);
\fill [spot] 
  ( 0, 96) circle [radius=32]
  (64, 64) circle [radius=16]
  (24,  0) circle [radius=24]
  (96, 16) circle [radius=12]
  (72,-64) circle [radius=20];
}
\reflect[
  on left ={colors alias={body as BlueGrey800, eye as Grey100}},
  on right={colors alias={body as BlueGrey900, eye as Grey200}, half clip}
]{
  \fill [body]
    (16,160) arc (180:90:64) -- ++(4,-4) coordinate [midway] (@)
    arc (90:180:64) -- cycle;
  \fill [body] (@) circle [radius=8];
  \clip [postaction={fill=body}] (80,128) 
    .. controls ++( 90:32) and ++(  0:32) .. (  0,192)
    .. controls ++(180:32) and ++( 90:32) .. (-80,128)
    .. controls ++(270:32) and ++(180:32) .. (  0,96)
    .. controls ++(  0:32) and ++(270:32) .. cycle;
  \fill [eye] (64,160) circle [radius=24];
}
\end{scope}},
dog/.pic={
\begin{scope}[x=3cm/480,y=3cm/480]
\useasboundingbox (-256, -256) (256, 256);
\reflect[split=Brown400 and Brown500]{
  \fill [fill color] (0,-64) ellipse [x radius=160, y radius=144];
  \fill [fill color] (0, 32) ellipse [x radius=128, y radius=112];
  \fill [fill color] (32,96)
  .. controls ++( 75:128) and ++(105:128) .. ++(192,  0)
  .. controls ++(285: 96) and ++(285: 96) .. ++(-80,-32)
  .. controls ++(105: 64) and ++( 75: 32) .. cycle;
}
\reflect[split={Grey100 and Grey200}]{
  \clip (0,-64) ellipse [x radius=160, y radius=144];
  \fill [fill color](0,-224) 
    .. controls ++(  0:64) and ++(270:64) .. ++(96,64)
    .. controls ++( 90:64) and ++(270:64) .. ++(-96,192)
    .. controls ++(270:64) and ++( 90:64) .. ++(-96,-192)
    .. controls ++(270:64) and ++(180:64) .. cycle;
}
\reflect[split={Pink100 and Pink200}]{
  \fill [fill color](0,-192) ellipse [x radius=28, y radius=32];
}
\reflect[split={BlueGrey800 and BlueGrey900}]{
  \fill [fill color](0,-144) 
    .. controls ++(  0:20) and ++(315:20) .. ++( 40,64)
    .. controls ++(135:20) and ++( 45:20) .. ++(-80, 0)
    .. controls ++(225:20) and ++(180:20) .. cycle;
  \fill [BlueGrey900] (56, 0) circle [radius=20];
  \fill [fill color] (-8,-112)
  -- ++(16,0) -- ++(0,-32) arc (180:360:24)
  arc (180:0:8) arc (360:180:40);
}
\end{scope}}
}
\begin{document}
\begin{tikzpicture}
\foreach \animal [count=\i from 0, evaluate={\x=mod(\i,3)*5; \y=-floor(\i/3)*5;}]
  in {bee,cat,chimpanzee,chipmunk,cow,dog,donkey,duck,horse,ladybird,
      monkey,owl,shark,squid}{
\pgfmathrandomitem\materialColor{material}
\scoped[shift={(\x,\y)}]{
\fill [fill=\materialColor50] circle [radius=2];
\pic {\animal};
\node [below]at (0, -2) {\ttfamily\animal};
}}
\end{tikzpicture}
\end{document}
  • 1
    I love the cat! The other animals too, but especially the cat! – user36296 Feb 7 '18 at 10:17
  • That duck is a beauty! :) – Paulo Cereda Feb 8 '18 at 8:28
  • Gorgeous! <3<3<3 – CarLaTeX Feb 8 '18 at 8:41
  • 1
    ladybird must be changed to ladybug. – Gold Digging Programmer Dec 28 '18 at 23:11
  • 1
    This should be a package in CTAN. – pushpen.paul Jan 22 at 14:28
50

Super TeX Duck

Click here for the proper soundtrack

\documentclass{standalone}
\usepackage{tikzducks}

\begin{document}

\begin{tikzpicture}
    \definecolor{superblue}{RGB}{28,82,156}
    \definecolor{superred}{RGB}{255,70,70}
    \duck[tshirt=superblue, bill=superred!40!brown, longhair=brown!70!red!80!black, cape=superred]
    \begin{scope}[xscale=0.01, yscale=-0.01, yshift=-7200, xshift=100]
        \path[fill=yellow!70!brown,line join=miter,line cap=butt,miter limit=4.00,line width=0.280pt] 
        (19.1501,169.8999) .. controls (22.6621,185.2587) and (26.1741,200.6174) .. (29.6861,215.9762) .. controls (48.0064,202.1310) and (66.3266,188.2858) .. (84.6469,174.4406) .. controls (82.8840,171.7633) and (83.5049,166.2477) .. (79.3603,166.0137) .. controls (62.9510,164.8761) and (46.5417,163.7384) .. (30.1324,162.6008) .. controls (26.4716,165.0339) and (22.8108,167.4669) .. (19.1501,169.8999) -- cycle;
        \path[fill=superred,line join=miter,line cap=butt,miter limit=4.00,line width=0.280pt] (30.3892,160.9069) .. controls (26.0015,163.8232) and (21.6137,166.7395) .. (17.2258,169.6556) .. controls (20.9503,185.9422) and (24.6743,202.2289) .. (28.3985,218.5155) .. controls (47.8256,203.8338) and (67.2526,189.1521) .. (86.6798,174.4706) .. controls (84.9008,171.2752) and (85.0408,167.0414) .. (82.1598,164.4961) .. controls (64.9030,163.2997) and (47.6461,162.1033) .. (30.3892,160.9069) -- cycle(29.8755,164.2947) .. controls (32.3633,163.8271) and (33.8198,165.0958) .. (31.6902,167.0082) .. controls (28.9838,171.6934) and (26.2774,176.3786) .. (23.5710,181.0638) .. controls (23.1554,177.2602) and (20.9993,173.6756) .. (21.6242,169.7787) .. controls (24.3746,167.9507) and (27.1251,166.1227) .. (29.8755,164.2947) -- cycle(76.7801,167.5466) .. controls (80.4604,166.5323) and (82.8325,171.9430) .. (81.6657,174.6950) .. controls (79.5366,177.3566) and (76.2910,178.8331) .. (73.7649,181.0982) .. controls (72.5330,181.7268) and (68.5768,185.8417) .. (70.3548,182.6185) .. controls (72.4966,177.5945) and (74.6383,172.5705) .. (76.7801,167.5466) -- cycle(39.6974,171.1477) .. controls (42.2965,171.3279) and (44.8956,171.5081) .. (47.4946,171.6883) .. controls (42.6972,180.8632) and (38.3661,190.3004) .. (33.2358,199.2896) .. controls (31.4746,202.1278) and (26.2131,201.6511) .. (27.3590,197.6295) .. controls (26.4820,193.7940) and (25.6049,189.9585) .. (24.7279,186.1229) .. controls (27.6766,181.5339) and (29.9816,176.4251) .. (33.7500,172.4331) .. controls (35.4497,171.2057) and (37.6550,170.8843) .. (39.6974,171.1477) -- cycle(55.7860,172.2631) .. controls (59.7578,172.8436) and (63.9574,172.1465) .. (67.7430,173.7593) .. controls (69.7610,177.0238) and (67.0777,180.4981) .. (66.1501,183.6430) .. controls (65.7213,187.4117) and (62.3605,189.8584) .. (59.5157,191.9592) .. controls (54.5406,195.4546) and (49.8125,199.2863) .. (44.9199,202.8973) .. controls (40.7783,202.6790) and (42.3696,197.6021) .. (43.9068,195.3714) .. controls (47.1153,189.7669) and (49.8067,183.8583) .. (52.8097,178.1329) .. controls (53.8018,176.1763) and (54.7939,174.2197) .. (55.7860,172.2631) -- cycle(29.0428,204.9923) .. controls (32.9677,205.3274) and (36.8926,205.6624) .. (40.8175,205.9975) .. controls (37.3725,207.7884) and (35.2074,211.6132) .. (31.2514,212.4846) .. controls (29.5641,210.3889) and (29.9644,207.4023) .. (29.0428,204.9923) -- cycle;
        \path[draw=black,line join=miter,line cap=butt,miter limit=4.00,line width=0.280pt] (30.3892,160.9069) .. controls (26.0015,163.8232) and (21.6137,166.7395) .. (17.2258,169.6556) .. controls (20.9503,185.9422) and (24.6743,202.2289) .. (28.3985,218.5155) .. controls (47.8256,203.8338) and (67.2526,189.1521) .. (86.6798,174.4706) .. controls (84.9999,171.3774) and (84.7278,166.4000) .. (82.1598,164.4961) .. controls (64.9030,163.2997) and (47.6461,162.1033) .. (30.3892,160.9069) -- cycle(29.8755,164.2947) .. controls (31.3768,164.5060) and (34.3214,163.9495) .. (32.2315,166.0711) .. controls (29.3447,171.0687) and (26.4578,176.0663) .. (23.5710,181.0638) .. controls (23.1458,177.3914) and (20.8902,172.9885) .. (21.6242,169.7787) .. controls (24.3746,167.9507) and (27.1251,166.1227) .. (29.8755,164.2947) -- cycle(76.7801,167.5466) .. controls (80.5319,166.6672) and (81.1722,170.3187) .. (82.2166,173.1606) .. controls (81.7613,176.2320) and (78.2235,177.2884) .. (76.2097,179.2506) .. controls (74.0365,180.8929) and (71.8633,182.5353) .. (69.6901,184.1776) .. controls (72.0534,178.6339) and (74.4168,173.0903) .. (76.7801,167.5466) -- cycle(39.6974,171.1477) .. controls (42.2965,171.3279) and (44.8956,171.5081) .. (47.4946,171.6883) .. controls (42.8362,180.7076) and (38.4557,189.8707) .. (33.6002,198.7877) .. controls (31.8670,201.5779) and (26.5743,202.6315) .. (27.4439,198.0007) .. controls (26.5386,194.0414) and (25.6332,190.0822) .. (24.7279,186.1229) .. controls (27.5616,181.6166) and (29.9448,176.7409) .. (33.4174,172.6921) .. controls (35.1561,171.2620) and (37.5122,170.8656) .. (39.6974,171.1477) -- cycle(55.7860,172.2631) .. controls (59.7604,172.8439) and (63.9586,172.1470) .. (67.7430,173.7593) .. controls (70.1370,177.4786) and (66.0436,181.5940) .. (65.7890,185.4784) .. controls (63.4243,190.1696) and (58.3136,192.3876) .. (54.4844,195.6692) .. controls (51.2962,198.0785) and (48.1080,200.4879) .. (44.9199,202.8973) .. controls (40.3492,202.7990) and (42.6086,196.8794) .. (44.3878,194.7420) .. controls (48.1872,187.2490) and (51.9866,179.7561) .. (55.7860,172.2631) -- cycle(29.0428,204.9923) .. controls (32.9677,205.3274) and (36.8926,205.6624) .. (40.8175,205.9975) .. controls (37.3797,207.7837) and (35.1608,211.6508) .. (31.2514,212.4846) .. controls (29.7442,210.8968) and (29.8959,207.3157) .. (29.0428,204.9923) -- cycle;
    \end{scope}
\end{tikzpicture}

\end{document}

enter image description here enter image description here

Bat Duck

The symbol is borrowed from https://tex.stackexchange.com/a/47394/36296

\documentclass{standalone}
\usepackage{tikzducks}

\begin{document}

\begin{tikzpicture}
    \duck[body=black!60!gray, bill=orange!50!gray,cape=black!50!gray]
    \fill[black!60!gray,rotate=210, xshift=-60, yshift=-72] (0.40,1.20)--(0.50,0.90)--(0.70,1.20);
    \fill[black!60!gray,rotate=150, xshift=-15, yshift=-97] (0.40,1.20)--(0.50,0.90)--(0.70,1.20);
    %Following logo based on https://tex.stackexchange.com/a/47394/36296
    \begin{scope}[scale=0.05, rotate=-5, xshift=270, yshift=400]
        \filldraw[fill=yellow] (0,0) ellipse (7.0 and 4.3);
    \draw[line width=0.1mm] (0,0) ellipse (6.5 and 3.8);
    \draw[line width=0.1mm,dashed,white] (0,0) ellipse (6.0 and 3.3);
        \pgfsetlinewidth{0.1mm}
        \pgfpathmoveto{\pgfpoint{0}{2.7cm}}
        \pgfpathlineto{\pgfpoint{0.5cm}{2.7cm}}
        \pgfpathlineto{\pgfpoint{1cm}{3.25cm}}
        \pgfpathcurveto{\pgfpoint{1.2cm}{1.3cm}}{\pgfpoint{1.3cm}{1cm}}{\pgfpoint{2cm}{1cm}}
        \pgfpathcurveto{\pgfpoint{3cm}{1cm}}{\pgfpoint{3cm}{2.2cm}}{\pgfpoint{2cm}{3.1cm}}
        \pgfpatharcto{6cm}{3.3cm}{0}{0}{0}{\pgfpoint{3.2cm}{-2.8cm}}
        \pgfpathcurveto{\pgfpoint{4cm}{-2cm}}{\pgfpoint{4cm}{0}}{\pgfpoint{2.2cm}{-1.8cm}}
        \pgfpathcurveto{\pgfpoint{1.5cm}{-1cm}}{\pgfpoint{1cm}{-1cm}}{\pgfpoint{0cm}{-3.2cm}}
        \pgftransformcm{-1}{0}{0}{1}{\pgfpointorigin} % This is the coordinate change from x to -x
        \pgfpathcurveto{\pgfpoint{1cm}{-1cm}}{\pgfpoint{1.5cm}{-1cm}}{\pgfpoint{2.2cm}{-1.8cm}}
        \pgfpathcurveto{\pgfpoint{4cm}{0cm}}{\pgfpoint{4cm}{-2cm}}{\pgfpoint{3.2cm}{-2.8cm}}
        \pgfpatharcto{6cm}{3.3cm}{0}{0}{1}{\pgfpoint{2cm}{3.1cm}}
        \pgfpathcurveto{\pgfpoint{3cm}{2.2cm}}{\pgfpoint{3cm}{1cm}}{\pgfpoint{2cm}{1cm}}
        \pgfpathcurveto{\pgfpoint{1.3cm}{1cm}}{\pgfpoint{1.2cm}{1.3cm}}{\pgfpoint{1cm}{3.25cm}}
        \pgfpathlineto{\pgfpoint{0.5cm}{2.7cm}}
        \pgfpathclose
        \pgfusepath{fill,stroke}   
    \end{scope}
\end{tikzpicture}

\end{document}

enter image description here

Trekkie ducks

\documentclass{standalone}

\usepackage{tikzducks}
\usepackage{fontawesome}

\definecolor{unigold}{RGB}{203,157,52}
\definecolor{uniblue}{RGB}{46,114,167}
\definecolor{unired}{RGB}{177,49,34}

\definecolor{skink}{RGB}{245,206,193}
\definecolor{skins}{RGB}{255,222,151}
\definecolor{skinu}{RGB}{146,113,96}

\newcommand*{\insignia}{\node[rotate=15] at (wing) {\color{yellow!80!brown}\faLocationArrow};}

\begin{document}

\begin{tikzpicture}
\duck[tshirt=black!60!gray, jacket=unigold, body=skink, shorthair=brown!80!black, bill=skink!60!gray]
\insignia
\end{tikzpicture}

\begin{tikzpicture}
\duck[tshirt=black!60!gray, jacket=uniblue, body=skins, shorthair=black!60!brown, bill=skins!60!gray]
\fill[skins,rotate=175, xshift=-46, yshift=-76] (0.45,1.20)--(0.50,0.80)--(0.65,1.20);
\insignia
\end{tikzpicture}

\begin{tikzpicture}
\duck[tshirt=black!60!gray, jacket=unired, body=skinu, longhair=black!60!brown, bill=skinu!70!black]
\insignia
\end{tikzpicture}
\end{document}

enter image description here

Italy duck for CarLaTeX

\documentclass{standalone}
\usepackage{tikzducks}
\usepackage{graphicx}
\begin{document}

\begin{tikzpicture}
    \duck
    \node[rotate=-20] at (2,1) {\includegraphics[width=1.5cm]{bc-ditalie.mps}};
\end{tikzpicture}   

\end{document}

enter image description here

Witch duck for cfr

"catcode" borrowed from How can we draw a Christmas tree with decorations, using TikZ?

\pdfminorversion=7
\RequirePackage[rgb,pdftex,dvipsnames,x11names]{xcolor}
\documentclass[tikz,border=5pt]{standalone}
\usetikzlibrary{calc,intersections,backgrounds}
\pgfdeclarelayer{foreground}
\pgfdeclarelayer{pen}
\pgfdeclarelayer{corff}
\pgfsetlayers{background,corff,main,pen,foreground}
\makeatletter
% adapted (simplified version) from tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrarybackgrounds.code.tex
  \tikzset{%
    on foreground layer/.style={%
          execute at begin scope={%
            \pgfonlayer{foreground}%
            \let\tikz@options=\pgfutil@empty%
            \tikzset{every on foreground layer/.try,#1}%
            \tikz@options%
          },
          execute at end scope={\endpgfonlayer}
    },
    on pen layer/.style={
          execute at begin scope={%
            \pgfonlayer{pen}%
            \let\tikz@options=\pgfutil@empty%
            \tikzset{every on pen layer/.try,#1}%
            \tikz@options%
          },
          execute at end scope={\endpgfonlayer}
    },
    on corff layer/.style={
          execute at begin scope={%
            \pgfonlayer{corff}%
            \let\tikz@options=\pgfutil@empty%
            \tikzset{every on corff layer/.try,#1}%
            \tikz@options%
          },
          execute at end scope={\endpgfonlayer}
    },
    stripiau cwt/.style={draw=#1, very thin, shorten >=-5mm, shorten <=-5mm, double=#1, double distance=3.5mm},
    stripiau corff/.style={very thin, draw=#1, fill=#1},
    trwyn/.style={circle, yshift=1.25mm, minimum width=2.5mm, inner sep=0pt},
    llenwi cath/.style={fill=#1},
    llygaid/.style n args=2{inner color=#1, outer color=#2, ultra thick, draw},
    pics/cath b/.style n args=5{
      code={
        [ultra thick]
        \begin{pgfonlayer}{pen}% ref. workaround from http://tex.stackexchange.com/a/218166/ (Mark Wibrow)
          \begin{scope}[very thin]% [on pen layer={very thin}]
          \path [clip]
            (0,10mm) coordinate (pen1) arc (90:65:19mm and 20mm) coordinate [pos=.75] (pp1) coordinate (pen2)
              arc (65:45:19mm and 20mm)  coordinate (pen3)
              arc (45:-60:19mm and 20mm) coordinate [pos=.05] (pp4) coordinate [pos=.4] (pp5) coordinate [pos=.45] (pp8) coordinate [pos=.75] (pp9)  coordinate (pen8)
              arc (-60:-90:19mm and 20mm) coordinate (pen10)
              arc (-90:-120:19mm and 20mm) coordinate (pen9)
              arc (-120:-225:19mm and 20mm) coordinate [pos=.25] (pp10) coordinate [pos=.55] (pp11) coordinate [pos=.6] (pp6) coordinate [pos=.95] (pp7) coordinate (pen4)
              arc (-225:-245:19mm and 20mm) coordinate (pen5)
              arc (-245:-270:19mm and 20mm) coordinate [pos=.25] (pp2)
              ;
          \path [stripiau corff=#1]
            (pp2) [out=-45, in=95] to ($(pen1) - (0,10mm)$) coordinate (pp3) [out=85, in=-135] to (pp1) |- +(5mm,5mm) -| cycle
            (pp4) [out=-135, in=25] to +(-7.5mm,-4mm) [out=-25, in=115] to (pp5) -| +(5mm,5mm) |- cycle
            (pp7) [out=-45, in=155] to +(7.5mm,-4mm) [out=-155, in=65] to (pp6) -| +(-5mm,5mm) |- cycle
            (pp8) [out=-135, in=-25] to +(-17.5mm,0mm) [out=-45, in=115] to (pp9) -| +(5mm,5mm) |- cycle
            (pp11) [out=-45, in=-155] to +(17.5mm,0mm) [out=-135, in=65] to (pp10) -| +(-5mm,5mm) |- cycle
            ;
          \end{scope}
        \end{pgfonlayer}
        \path
          (pen2) ++(4mm,7.5mm) coordinate (pen6)
          (pen5) ++(-4mm,7.5mm) coordinate (pen7);
        \path [rounded corners=1pt, llenwi cath=#2]
          (pen1) arc (90:65:19mm and 20mm)
            [out=80, in=-110] to (pen6) [out=-80, in=85] to
          (pen3) arc (45:-225:19mm and 20mm)
            [out=95, in=-100] to (pen7) [out=-70, in=100] to
          (pen5) arc (-245:-270:19mm and 20mm);
        \begin{scope}[on foreground layer={ultra thick}]
          \draw [rounded corners=1pt, ultra thick]
            (pen1) arc (90:65:19mm and 20mm)
              [out=80, in=-110] to (pen6) [out=-80, in=85] to
            (pen3) arc (45:-225:19mm and 20mm)
              [out=95, in=-100] to (pen7) [out=-70, in=100] to
            (pen5) arc (-245:-270:19mm and 20mm);
        \end{scope}
      \path [llenwi cath=#2]% corff
          (pp8) [out=35, in=100] to coordinate [pos=.075] (corff7) coordinate [pos=.1] (corff8) coordinate [pos=.2] (corff9) coordinate [pos=.225] (corff10) coordinate [pos=.325] (corff11) coordinate [pos=.35] (corff12) coordinate [pos=.45] (corff13) coordinate [pos=.475] (corff14) coordinate [pos=.575] (corff15) coordinate [pos=.6] (corff16) coordinate [pos=.7] (corff17) coordinate [pos=.725] (corff18) coordinate [pos=.825] (corff19) coordinate [pos=.86] (corff20) coordinate [pos=.96] (corff21) ++(75mm,-15mm) coordinate (corff5)
            [out=-80, in=-85] to coordinate [pos=.6] (corff6) coordinate [pos=.7] (corff22) coordinate [pos=.775] (corff23) coordinate [pos=.825] (corff24) coordinate [pos=.875] (corff27) coordinate [pos=.9] (corff25) coordinate [pos=.985] (corff26) (pen9);
         \begin{scope}[ultra thick]% stripiau'r corff
            \clip
              (pp8) [out=35, in=100] to (corff5)
                [out=-80, in=-85] to (pen9) |- cycle;
            \path [stripiau corff=#1]
              (pp8) [out=-95, in=65] to ++(7.5mm,-15mm) [out=45, in=-175] to (corff7)
              (corff8) [out=-85, in=50] to ++(7.5mm,-17.5mm) [out=45, in=-135] to (corff9)
              (corff10) [out=-90, in=60] to ++(5mm,-20mm) [out=50, in=-140] to (corff11)
              (corff12) [out=-100, in=55] to ++(2.5mm,-20mm) [out=50, in=-145] to (corff13)
              (corff14) [out=-110, in=50] to ++(0,-20mm) [out=40, in=-155] to (corff15)
              (corff16) [out=-115, in=40] to ++(-3.5mm,-18.5mm) [out=30, in=-170] to (corff17)
              (corff18) [out=-135, in=20] to ++(-7.5mm,-16.5mm) [out=10, in=-180] to (corff19)
              (corff20) [out=-170, in=-5] to ++(-10mm,-12.5mm) [out=-15, in=140] to (corff21)
              (corff26) [out=-45, in=-135] to ++(20mm,-1.5mm) [out=-115, in=45] to (corff25) -- +(-5mm,0) |- cycle
              (corff27) [out=40, in=-115] to ++(20mm,7.5mm) [out=-105, in=65] to (corff24) -- +(-5mm,0) |- cycle;
         \end{scope}
        \draw [ultra thick, name path=corff]
          (pp8) [out=35, in=100] to ++(75mm,-15mm)
            [out=-80, in=-85] to coordinate [pos=.6] (corff6) (pen9);
        \draw [ultra thick, llenwi cath=#2]% coesau
          (corff22) ++(17.5mm,12.5mm) coordinate (coes1)
          (corff23) ++(12.5mm,15mm) coordinate (coes2)
          (coes1) [out=-120, in=35] to (corff22) [out=-145, in=5] to ++(-20mm,-7.5mm) [out=-175, in=0] to ++(-5mm,0) arc (-90:90:-5mm and 3mm) coordinate (coes9) [out=0, in=-175] to ++(5mm,0) coordinate (coes11) [out=5, in=-145] to (corff23) [out=35, in=-100] to (coes2);
        \begin{pgfonlayer}{background}% ref. workaround from http://tex.stackexchange.com/a/218166/ (Mark Wibrow)
          \begin{scope}
            \draw [ultra thick, llenwi cath=#2]% coesau
              (corff23) [out=-145, in=5] to (coes11) [out=-175, in=0] to (coes9) arc (-90:90:-4mm and 2.5mm) [out=0, in=-145] to (corff24)
              ;
          \end{scope}
        \end{pgfonlayer}
        \path [llenwi cath=#2]% llenwi'r cwt
          (corff5) [out=-80, in=-15] to ($(corff6) + (0,-2.5mm)$) coordinate (cwt5)
            [out=165, in=-90] to ++(-5mm,5mm) coordinate (cwt6)
            [out=90, in=170] to ++(7.5mm,5mm) coordinate (cwt7)
            [out=-10, in=-95] to ($(corff5) + (-15mm,-2.5mm)$) coordinate (cwt8)
          ;
        \begin{scope}[ultra thick]% stripiau'r cwt
          \clip (corff5) [out=-80, in=-15] to
              coordinate [pos=.1] (cwt9)
              coordinate [pos=.15] (cwt10a)
              coordinate [pos=.25] (cwt11a)
              coordinate [pos=.345] (cwt12a)
              coordinate [pos=.44] (cwt13a)
              coordinate [pos=.53] (cwt14a)
              coordinate [pos=.62] (cwt15a)
              coordinate [pos=.71] (cwt16a)
              coordinate [pos=.805] (cwt17a)
              coordinate [pos=.9] (cwt18a)
              coordinate [pos=1] (cwt19a)
              (cwt5)
            [out=165, in=-90] to
              coordinate [pos=.45] (cwt20a)
              (cwt6)
            [out=90, in=170] to
              coordinate [pos=.65] (cwt20b)
              (cwt7)
            [out=-10, in=-95] to
              coordinate [pos=.025] (cwt19b)
              coordinate [pos=.125] (cwt18b)
              coordinate [pos=.225] (cwt17b)
              coordinate [pos=.325] (cwt16b)
              coordinate [pos=.425] (cwt15b)
              coordinate [pos=.525] (cwt14b)
              coordinate [pos=.625] (cwt13b)
              coordinate [pos=.725] (cwt12b)
              coordinate [pos=.825] (cwt11b)
              coordinate [pos=.925] (cwt10b)
              (cwt8)
            |- (corff21) -- cycle;
          \path [stripiau corff=#1]
            (corff5) [out=110, in=10] to ++(-7.5mm,-3.5mm) [out=0, in=120] to (cwt9);
          \path [llenwi cath=#1]
            (cwt20a) [out=80, in=-80] to (cwt20b) [out=170, in=90] to (cwt6) [out=-90, in=165] to cycle
            ;
          \foreach \i in {10,...,19}
            \draw [stripiau cwt=#1] (cwt\i a) [out=90, in=-60] to (cwt\i b);
        \end{scope}
        \draw [ultra thick, name path=cwt]
          (corff5) [out=-80, in=-15] to (cwt5)
            [out=165, in=-90] to (cwt6)
            [out=90, in=170] to (cwt7)
            [out=-10, in=-95] to (cwt8)
          ;
         \begin{scope}[on foreground layer={ultra thick}]
          \draw
            (pen10) -- ++(0,7.5mm) coordinate (ceg1)
              [out=-45, in=180] to +(5mm,-2.5mm) coordinate (ceg2)
              [out=0, in=-100] to +(2.5mm,3.5mm) coordinate (ceg3)
             ;
          \draw
            (ceg1)
              [out=-135, in=0] to +(-5mm,-2.5mm) coordinate (ceg4)
              [out=180, in=-80] to +(-2.5mm,3.5mm) coordinate (ceg5)
            ;
          \path (ceg1)
            node (trwyn1) [trwyn, anchor=west] {}
            node (trwyn2) [trwyn, anchor=east] {};
          \draw
            ($(trwyn1)!1/2!(trwyn2)$) coordinate (trwyn) [out=10,in=140] to +(25mm,7.5mm)
            (trwyn) [out=-10, in=120] to +(.5mm,-5mm)
            (trwyn) [out=-40, in=130] to +(-1.5mm,-5mm)
            ;
          \draw
            (trwyn) [out=170,in=40] to +(-25mm,7.5mm)
            (trwyn) [out=-170, in=60] to +(-.5mm,-5mm)
            (trwyn) [out=-140, in=50] to +(1.5mm,-5mm)
            ;
          \path (ceg1)
            node (trwyn1) [trwyn, draw, ball color=#5, anchor=west] {}
            node (trwyn2) [trwyn, draw, ball color=#5, anchor=east] {};
         \end{scope}
          \draw [llygaid={#3}{#4}]
          ({$(pen1)!2/5!(pen10)$} -| {$(pen8)!3/4!(pen4)$}) coordinate (llygad chwith)
            ++(-5mm,0) coordinate (llygad chwith 1) [out=20, in=180] to ++(6mm,2.5mm) coordinate (llygad chwith 2) [out=0, in=120] to ++(4mm,-2.5mm)
            [out=-120, in=0] to ++(-4mm,-2.5mm) [out=180, in=-20] to ++(-6mm,2.5mm)
          ;
          \draw [llygaid={#3}{#4}]
            ({$(pen1)!2/5!(pen10)$} -| {$(pen9)!3/4!(pen3)$}) coordinate (llygad de)
              ++(5mm,0) coordinate (llygad de 1) [out=160, in=0] to ++(-6mm,2.5mm) coordinate (llygad de 2) [out=180, in=40] to ++(-4mm,-2.5mm)
              [out=-40, in=180] to ++(4mm,-2.5mm) [out=0, in=-160] to ++(6mm,2.5mm)
          ;
          \fill [ball color=black] (llygad chwith 1 -| llygad chwith 2) circle (2.5mm);
          \fill [ball color=black] (llygad de 1 -| llygad de 2) circle (2.5mm);
          \begin{scope}[on foreground layer={ultra thick}]
            \draw [shorten >=1pt]
              ($(pen2)!7/10!(pen3)$) coordinate (clust1) [out=125, in=-80] to (pen6);
            \draw [shorten >=1pt]
              ($(pen5)!7/10!(pen4)$) coordinate (clust2) [out=55, in=-100] to (pen7);
          \end{scope}
          \begin{scope}% llenwi clust de
            \clip (clust1) [out=125, in=-80] to (pen6) [out=-110, in=80] to (pen2) |- cycle;
            \path [stripiau corff=#1, rounded corners=1pt]
              (clust1) [out=125, in=-80] to (pen6) [out=-110, in=80] to (pen2) arc (65:45:19mm and 20mm)
              ;
          \end{scope}
          \begin{scope}% llenwi clust chwith
            \clip (clust2) [out=55, in=-100] to (pen7) [out=-70, in=100] to (pen5) |- cycle;
            \path [stripiau corff=#1, rounded corners=1pt]
              (clust2) [out=55, in=-100] to (pen7) [out=-70, in=100] to (pen5) arc (-245:-225:19mm and 20mm)
              ;
          \end{scope}
          % dim yn ddefnyddiol ar hyn o bryd ond gobeithio bynnan nhw ar ôl iddyn nhw fix the bug!
          \coordinate (-pen) at (pen1);
          \coordinate (-clust chwith) at (pen7);
          \coordinate (-clust de) at (pen6);
        }
    },
}
\makeatother

\usepackage{tikzducks}

\begin{document}
  \colorlet{lliw llygaid3}{Chartreuse1}
  \colorlet{lliw llygaid4}{Green4}
  \colorlet{lliw trwyn1}{LightPink2}
  \colorlet{cath5}{LavenderBlush3}
  \colorlet{cath6}{LavenderBlush4}
  \begin{tikzpicture}
    \path (-8,0) rectangle (10,21);
    \begin{scope}[transform canvas={scale=8},xshift=-30pt,yshift=-10pt]
        \duck[longhair=red!80!black,jacket=black!50!gray,magicwand]
            \fill[black!50!gray,rotate=-15] (0.44,2.13) ellipse (0.75 and 0.17);    
            \fill[black!50!gray,rotate=-15] (0.05,2.2)--(0.45,3.2)--(0.82,2.2);
      \end{scope}
    \pic {cath b={cath6}{cath5}{lliw llygaid3}{lliw llygaid4}{lliw trwyn1}};
  \end{tikzpicture}
\end{document}

enter image description here

Queen duck

(code for including the crown by Ulrike Fischer)

\documentclass{standalone}

\usepackage{tikzducks}
\usepackage[LSBC5,T1]{fontenc}

\definecolor{skin}{RGB}{225,219,206}
\definecolor{bill}{RGB}{170,123,154}
\definecolor{dress}{RGB}{184,209,206}
\definecolor{crown}{RGB}{90,76,183}

\usepackage{chessfss}
\setboardfontencoding{LSBC5}%
\setboardfontcolors{%
    whiteonwhitepiecemask=crown,
    whitepiece=gray!60!white
}

\begin{document}

\begin{tikzpicture}
    \duck[body=skin,bill=bill,jacket=dress,tshirt=teal!20!dress,shorthair=gray!60!white]
    \node[rotate=-10] at (1.03,2.45) {\scalebox{2.1}{\WhiteKingOnWhite}}; 
    \fill[gray!60!white,rotate=-10] (0.6,2.18) ellipse (0.38 and 0.1);
\end{tikzpicture}

\end{document}

enter image description here

Farm animals

\documentclass{standalone}
\usepackage{tikzducks}

\definecolor{skin}{RGB}{161,140,126}
\definecolor{bill}{RGB}{238,212,191}
\definecolor{hair}{RGB}{89,72,72}

\begin{document}

\begin{tikzpicture}
    \duck[body=skin,bill=bill,shorthair=hair]
    \node[skin,rotate=45,scale=3] at (1.7,1.55) {\textsf{s}};
    \fill[hair,rotate=45] (2.4,0.13) ellipse (0.15 and 0.07);
    \begin{scope}[yshift=1]
        \clip (0.3,2.2) circle (0.4);
    \fill[skin] (0.9,2.3) circle (0.4);
  \end{scope}
    \begin{scope}[yshift=1]
        \clip (0.3,2.2) circle (0.35);
    \fill[bill] (0.9,2.3) circle (0.35);
  \end{scope}
    \begin{scope}
        \clip (1.5,2.05) circle (0.4);
    \fill[skin] (1.0,2.35) circle (0.4);
  \end{scope}
    \begin{scope}
        \clip (1.5,2.05) circle (0.35);
    \fill[bill] (1.0,2.35) circle (0.35);
  \end{scope}  
\end{tikzpicture}   

\begin{tikzpicture}
    \duck[body=bill!30!white,bill=bill,shorthair=bill]
    \fill[bill] (1.85,1.35) circle (0.2);
    \begin{scope}[yshift=1]
        \clip (0.3,2.2) circle (0.4);
    \fill[bill] (0.9,2.3) circle (0.4);
  \end{scope}
    \begin{scope}[yshift=1]
        \clip (0.3,2.2) circle (0.35);
    \fill[bill!30!white] (0.9,2.3) circle (0.35);
  \end{scope}
    \begin{scope}
        \clip (1.5,2.05) circle (0.4);
    \fill[bill] (1.0,2.35) circle (0.4);
  \end{scope}
    \begin{scope}
        \clip (1.5,2.05) circle (0.35);
    \fill[bill!30!white] (1.0,2.35) circle (0.35);
  \end{scope}  
\end{tikzpicture}   

\begin{tikzpicture}
    \duck[body=red!20!white,bill=red!40!white,shorthair=red!30!white]
    \node[red!20!white,rotate=25,scale=3] at (1.7,1.51) {\textsf{s}};
    \begin{scope}[yshift=-1]
        \clip (0.3,2.2) circle (0.35);
    \fill[red!30!white] (0.9,2.3) circle (0.35);
  \end{scope}
    \begin{scope}
        \clip (1.5,2.02) circle (0.35);
    \fill[red!30!white] (1.0,2.35) circle (0.35);
  \end{scope}  
\end{tikzpicture}       

\end{document}

enter image description here

  • The male super duck has some interesting hair... – TeXnician Aug 18 '17 at 14:25
  • @TeXnician "add more hair styles" is on my list of future enhancements - for now this is the best I could do. – user36296 Aug 18 '17 at 14:29
  • @TeXnician I will do after someone else post an answer (this question should not be a one-duck show :) – user36296 Aug 18 '17 at 14:54
  • 2
    your enthusiasm for ducks is next level! fantastic :) – cmhughes Aug 18 '17 at 15:01
  • 1
    Wouldn't a cat from the Halloween version be more appropriate for a witch? – cfr Aug 27 '17 at 1:28
28

Now this is community wiki, I feel comfortable starting a list of links. Please add links to this list if you're aware of other questions featuring animals on site.

We mustn't forget that human beings are also members of the animal kingdom.

Off-site:

  • @CarLaTeX Do you know any additions? I'm sure I'm forgetting some. I only found the tortoises by accident, even though I drew them :). – cfr Aug 19 '17 at 21:55
  • @CarLaTeX Please add links as appropriate - this is community wiki, after all :-). – cfr Feb 4 '18 at 19:30
  • @CarLaTeX I think I edited at the same time - sorry. – cfr Feb 4 '18 at 19:52
  • The birds at tex.stackexchange.com/a/46983 are nice too. But they may not get along with your cats. – Thérèse Feb 4 '18 at 20:15
  • 1
    @Thérèse Please add them. I promise not to edit for a bit so I don't overwrite you. – cfr Feb 4 '18 at 20:52
27
\documentclass[pstricks,border=12pt]{standalone}
\usepackage{pst-vehicle,tikzducks}

\def\V{\rput(1,1.5){\psscalebox{-2 2}{\tikz{\duck[alien=red]}}}}
\def\F{cos(x)/2+x/3}

\begin{document}
\foreach \i in {0,0.2,...,8}{
\begin{pspicture}(-1,0)(11,5)   
    \psplot{-1}{11}{\F}
    \psVehicle[vehicle=\SelfDefinedVehicle,ownvehicle=\V,showSlope=false,frontwheel=\SpokesWheelB,backwheel=\SpokesWheelA,rB=1,rF=0.7,d=3]{.5}{\i}{\F}
\end{pspicture}}
\end{document}

enter image description here

Feature: The tube valve of the front wheel is rolling without "sleeping".

  • 3
    OH MY THIS IS FANTASTIC – Paulo Cereda Sep 14 '17 at 9:15
  • 3
    To the duckmobile! – Paulo Cereda Sep 14 '17 at 9:16
  • Have you had another account on the tex exchange? Your style reminds me of another user.... – cmhughes Jan 6 '18 at 8:05
  • I thought so :) good to see you again – cmhughes Jan 6 '18 at 9:33
25

Cat code demonstration for those fortunate enough to be uninitiated.

cat codes

\documentclass[border=11pt,x11names,svgnames,dvipsnames]{standalone}
\usepackage{tikz}
\usetikzlibrary{cathod,positioning}
\begin{document}
\begin{tikzpicture}
  \pic {cath eistedd={enw=bob}};
    \pic at (60mm,0)  {cath eistedd bathodyn={enw=rusty, bathodyn={\textsf{\textbf{\Huge R}}}, lliw=DarkOrange1, llenwi=DarkOrange1, stripiau=OrangeRed3, ceg=Chocolate4, llygaid mewnol=Chartreuse, llygaid allanol=DarkGoldenrod1, trwyn=Orange1, llygaid amlinellol=DarkOrange4, trwyn amlinellol=DarkOrange4, wisgers/.style={DarkOrange4}}};
  \pic [below right=-20mm and 0pt of bob] {cath gorwedd={enw=dilly, llenwi=white, stripiau=gray, llygaid mewnol=cyan, llygaid allanol=blue!50!cyan, trwyn=pink}};
\end{tikzpicture}
\end{document}

One or more of these cats have appeared in

  • 2
    If there’s tikzducks and tikzpeople, CTAN needs a tikzcats package. Please, please, please, on behalf of all crazy cat-ladies! – Thérèse Aug 19 '17 at 15:02
  • 1
    @Thérèse And my code is much less professional than the others'. You can't dress my cats up or arm them with swords or have them play soccer or ... anything. They lie there or sit there and that's it! (Maybe I could argue that's because their cats?) – cfr Aug 19 '17 at 21:53
  • 1
    @cfr As I don't really know what I am actually doing (I don't know anything about tikz), it is actually not surprising that I draw them in another way then someone who knows tikz :) I agree with Therese, a cat package would be lovely! – user36296 Aug 19 '17 at 22:09
  • 3
    Yes, they just lie or sit there because they’re cats. Beautiful cats who need no dressing up. ;-) – Thérèse Aug 20 '17 at 0:21
  • 2
    @MichaelPalmer Aha! An argument against my needing to make a package of it - thank you :-). – cfr Aug 27 '17 at 1:25
25

Soccer ducks

\documentclass{article}
\usepackage{tikzducks}
\usetikzlibrary{shapes.geometric}
\usepackage{subcaption}

\definecolor{verdep}{RGB}{0,100,55}
\definecolor{bluinter}{RGB}{0,102,170}
\definecolor{rossocagliari}{RGB}{149,20,38}
\definecolor{blucagliari}{RGB}{23,52,84}

\newcommand{\aggiusto}{\clip (-.4,-.2) rectangle (2.4,2.5);
    \fill[cyan!30] (-.4,-.2) rectangle (2.4,2.5);}

\makeatletter
\newcommand*{\stripes}[1][]{\tikzset{/stripes/.cd,#1}\stripes@draw}

\tikzset{
    /stripes/.cd,
    color/.code=\def\stripes@color{#1},
    distance/.code=\def\stripes@distance{#1},
    width/.code=\def\stripes@width{#1},
    height/.code=\def\stripes@height{#1},
    initialx/.code=\def\stripes@initialx{#1},
    initialy/.code=\def\stripes@initialy{#1},
    rotate/.code=\def\stripes@rotate{#1},
    shifttype/.code=\def\stripes@shifttype{#1},
    % set defaults
    color=black,
    distance=.3,
    width=.15cm,
    height=2cm,
    initialx=.2,
    initialy=1,
    rotate=0,
    shifttype=xshift,
}

\def\stripes@draw{
    \begin{scope}
        \clip \duckpathjacket;
        \foreach \shifta in {0,\stripes@distance,...,2.4} 
            {\node[rectangle, fill=\stripes@color, draw=\stripes@color, inner sep=0pt, 
                text width=\stripes@width,
                minimum height=\stripes@height, 
                \stripes@shifttype=\shifta cm,
                rotate=\stripes@rotate] at (\stripes@initialx,\stripes@initialy) {};}
    \end{scope}
}
\makeatother

\tikzset{%
    pics/soccerball/.style args={#1/#2/#3}{code={%
            \draw[#3,fill=#1] (0,0) circle [radius=.9];
            \begin{scope}
                \clip (0,0) circle [radius=.9];
                \foreach \i in {-.4,.4}
                \node[regular polygon,regular polygon sides=6,fill=#2,minimum height=3.5ex] at (\i,.4) {};
                \foreach \i in {-.8,0,.8} 
                \node[regular polygon,regular polygon sides=6,fill=#2,minimum height=3.5ex] at (\i,-.4) {};
            \end{scope}
    }}
}
\begin{document}
\begin{figure}
\centering
\begin{subfigure}{0.32\textwidth}\centering
\begin{tikzpicture}
    \aggiusto
    \duck[tshirt=black]
    \stripes[color=bluinter]
    \pic[scale=.4, transform shape] at (.2,.3) {soccerball={bluinter/black/white}};
\end{tikzpicture}
\caption{Inter duck}
\end{subfigure}
\begin{subfigure}{0.32\textwidth}\centering
\begin{tikzpicture} 
    \aggiusto
    \duck[tshirt=black]
    \stripes[color=white]
    \pic[scale=.4, transform shape] at (.2,.3) {soccerball={white/black/black}};
\end{tikzpicture}
\caption{Juve duck}
\end{subfigure}
\begin{subfigure}{0.32\textwidth}\centering
\begin{tikzpicture}
    \aggiusto
    \duck[tshirt=black]
    \stripes[color=red]
    \pic[scale=.4, transform shape] at (.2,.3) {soccerball={red/black/black}};
\end{tikzpicture}
\caption{Milan duck}
\end{subfigure}
\vspace{4ex}

\begin{subfigure}{0.32\textwidth}\centering
\begin{tikzpicture} 
    \aggiusto
    \duck[tshirt=green]
    \stripes 
    \pic[scale=.4, transform shape] at (.2,.3) {soccerball={green/black/black}};
\end{tikzpicture}
\caption{M\"{o}nchengladbach duck}
\end{subfigure}
\begin{subfigure}{0.32\textwidth}\centering
\begin{tikzpicture} 
    \aggiusto
    \duck[tshirt=green,jacket=verdep] 
    \pic[scale=.4, transform shape] at (.2,.3) {soccerball={verdep/green/green}};
\end{tikzpicture}
\caption{Palmeiras duck}
\end{subfigure}
\begin{subfigure}{0.32\textwidth}\centering
    \begin{tikzpicture} 
    \aggiusto
    \duck[tshirt=orange,jacket=orange] 
    \stripes[color=yellow, shifttype=yshift, width=5cm, height=.15cm, distance=.3,
        initialx=0, initialy=0] 
    \pic[scale=.4, transform shape] at (.2,.3) {soccerball={yellow/orange/black}};
    \end{tikzpicture}
    \caption{Van Duck's team}
\end{subfigure}
\vspace{4ex}

\begin{subfigure}{0.32\textwidth}\centering
    \begin{tikzpicture} 
    \aggiusto
    \duck[tshirt=white, jacket=blucagliari] 
    \stripes[color=rossocagliari, width=.64cm, distance=3]
    \pic[scale=.4, transform shape] at (.2,.3) {soccerball={blucagliari/rossocagliari/white}};
    \end{tikzpicture}
    \caption{Cagliari duck}
\end{subfigure}
\begin{subfigure}{0.32\textwidth}\centering
    \begin{tikzpicture} 
    \aggiusto
    \duck[tshirt=blue, jacket=blue] 
    \stripes[color=white, initialy=.65, height=.6cm, width=3cm]
    \stripes[color=red, initialy=.7, height=.1cm, width=3cm]
    \stripes[color=black, initialy=.6, height=.1cm, width=3cm]
    \pic[scale=.4, transform shape] at (.2,.3) {soccerball={blue/white/black}};
    \end{tikzpicture}
    \caption{Sampdoria duck}
\end{subfigure}
\begin{subfigure}{0.32\textwidth}\centering
    \begin{tikzpicture} 
    \aggiusto
    \duck[tshirt=blue, jacket=blue] 
    \stripes[color=white, rotate=45, width=.25cm, height=1.2cm, 
        initialx=.12, initialy=.9, distance=3]
    \stripes[color=white, rotate=-70, width=.25cm, height=1.8cm,  
        initialx=1.26, initialy=.81, distance=3]
    \pic[scale=.4, transform shape] at (.2,.3) {soccerball={white/blue/black}};
    \end{tikzpicture}
    \caption{Brescia duck}
\end{subfigure}

\caption{Soccer ducks}
\end{figure}

\end{document}

enter image description here

Cook duck

\documentclass{article}
\usepackage{tikzducks}
\usetikzlibrary{shapes.symbols}
\usepackage{subcaption}

\newcommand{\aggiusto}{\clip (-.6,-.2) rectangle (2.4,3);}

\tikzset{%
    pics/rollingpin/.style args={#1/#2}{code={%
        \draw[#2, fill=#1, rotate=45] (.06,.71) -- ++(0,.15) to[out=90, in=90] ++(.07,0) -- ++(0,-.15);
        \draw[#2, fill=#1, rotate=45] (0,0) to[bend right] ++(.2,0) -- ++(0,.7) to[bend right] ++(-.2,0) -- cycle;
        \draw[#2, rotate=45] (0,0) to[bend left] ++(.2,0);
        \draw[#2, fill=#1, rotate=-135] (-.13,0) -- ++(0,.15) to[out=90, in=90] ++(.07,0) -- ++(0,-.15);
    }},
    pics/cookcap/.style args={#1/#2}{code={%
        \node[cloud,draw=#2,fill=#1, rotate=-30, text width=.4cm, aspect=2, inner ysep=0pt] at (.4,.45) {};
        \draw[#2,fill=#1, rotate=-30] (-.1,.38) -- (-.1,0) to[bend right] ++(.42,0) -- ++(0,.38);
    }},
}

\begin{document}
\begin{figure}
\centering
\begin{tikzpicture}
    \aggiusto
    \duck[book=\scalebox{0.35}{\bfseries\hspace{2pt}Pizzas},bookcolour=red]
    \pic at (.1,.7) {rollingpin={brown/black}};
    \pic at (head) {cookcap={white/cyan}};
\end{tikzpicture}
\caption*{Cook duck\\ (no pineapple pizza on the menu)}
\end{figure}

\end{document}

enter image description here

  • 1
    Very nice!!!!!! – user36296 Aug 18 '17 at 21:38
  • 1
    The football duck would be a very nice addition to the package. May I add something based on your code to the package (of course mentioning you as the contributor of the football duck)? Otherwise I would just add a link in the documentation and point to this answer. – user36296 Aug 18 '17 at 21:53
  • @samcarter I'll be honored if you use some of my code in the tikzducks package! Please do it! – CarLaTeX Aug 19 '17 at 2:00
  • Take as much time as you want, ducks can wait to play football :) As for the stripes, I was trying to test if maybe slightly bent stripes would work. What would you think of using \duckpathjacket for the stripes, this way one could use a tshirt in one of the team colour underneath and have the effect of a collar? – user36296 Aug 19 '17 at 10:40
  • 2
    That's where 100% percent of my xkeyval knowledge come from :) Without egreg (the duck hero!) the ducks would be pretty boring and not customisable. – user36296 Aug 19 '17 at 11:01
24

Maxwell's demon.

\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[line width=.2cm,line cap=round]
  \draw (0,0) circle (1);
  % Eyes
  \filldraw (180:.2) ellipse (.1 and .2);
  \filldraw (180:.65) ellipse (.1 and .2);
  % Mouth
  \draw (200:1) to[out=-20,in=220] (-50:.3);
  % Feet
  \draw (250:1) -- ++(250:.5) -- ++(160:.5);
  \draw (300:1) -- ++(300:.5) -- ++(200:.5);
  % Horns
  \filldraw (120:1) to[out=160,in=-90] (120:2) to[out=-120,in=120] (160:1) arc(160:120:1) -- cycle;
  \filldraw (70:.9) to[out=20,in=-90] (60:2) to[out=-60,in=40] (20:.8) to[bend left] (70:.9) -- cycle;
  % Tail
  \draw (-30:1) to[bend right] (-10:2);
  \filldraw (-10:2) to[bend left] (-5:1.9) to[bend right] (10:2.5) to[bend left] (-12:2.2) to[bend left] (-10:2) -- cycle;
\end{tikzpicture}
\end{document}

enter image description here

  • 1
    Interesting interpretation of an animal/pet/duck ;) – TeXnician Aug 19 '17 at 7:24
  • +1, but now I wonder what Maxwell's Zombies would look like! – user36296 Aug 19 '17 at 10:53
  • tex.stackexchange.com/questions/212525/… ;) – cfr Aug 19 '17 at 13:01
  • Very beautiful, though I'm thinking the mouth is just a tad high...maybe \draw (203:1) to[out=-20,in=220] (-55:.36);?? – Steven B. Segletes Nov 17 '17 at 13:56
24

(continuation from the previous answer due to lengths constraints)

Zorro duck

\documentclass{standalone}
\usepackage{tikzducks}

\begin{document}

\begin{tikzpicture}
    \duck[cape=black,hat=black]
    \begin{scope}
        \clip (0.90,1.50) ellipse (0.50 and 0.625);
        \fill[black,rotate=-15] (-0.1,1.59) rectangle (1.3,1.88);
    \end{scope}
    \fill[white!85!yellow, rotate=-20] (0.23,1.7675) ellipse (0.0893 and 0.125);
    \fill[black, rotate=-20] (0.26,1.7575) ellipse (0.0357 and 0.0714);
    \fill[white!85!yellow, rotate=-20] (-0.06,1.74) ellipse (0.0786 and 0.1143);
    \fill[black, rotate=-20] (-0.03,1.73) ellipse (0.0286 and 0.0643);
    \node[rotate=-5] at (0.4,0.7) {\fontfamily{pzc}\selectfont zzz};
    \fill[black,rotate=24] (0.1,0.21) rectangle (1.1,0.23);
    \fill[black,rotate=24] (1.2,0.22) ellipse (0.15 and 0.03);
    \fill[black,rotate=24] (1.08,0.22) ellipse (0.03 and 0.15);
\end{tikzpicture}   

\end{document}

enter image description here

Frosty duck

\documentclass{standalone}
\usepackage{tikzducks}

\begin{document}

\begin{tikzpicture}
    \fill[blue!15!white] (0,0) rectangle (2.2,2.5);
    \duck[body=white,eye=white,tophat=black]
    \draw[very thick] (0.9,0.3) -- (1.2,1) (1.2,1) -- (1,1.3) (1.2,1) -- (1.3,1.3) (1.2,1) -- (1.5,1.4) (1.32,1.15) -- (1.6,1.3) ;
    \fill[black] (0.53,0.75) circle (0.05);
    \fill[black] (0.5,0.6) circle (0.05);
    \fill[black] (0.47,0.45) circle (0.05);
\end{tikzpicture}   

\end{document}

enter image description here

Happy Christmas to all of you!

(The following code needs the development version of the tikzducks https://github.com/samcarter/tikzducks/blob/master/tikzducks.sty )

\documentclass{standalone}
\usepackage{tikzducks}
\definecolor{fskin}{RGB}{161,140,126}%
\definecolor{fbill}{RGB}{238,212,191}%
\definecolor{fhair}{RGB}{89,72,72}%
\definecolor{crown}{RGB}{255,220,123}
\definecolor{skin}{RGB}{255,215,146}

\begin{document}

\begin{tikzpicture}

\fill[blue!20!white] (-1.5,-0.7) rectangle (19.2,7.2);

% sheep #1
\begin{scope}[xscale=-0.6,yscale=0.6]
    \duck[body=white!80!brown, bill=white!60!brown, sheep]
\end{scope}

% donkey
\begin{scope}[xscale=-0.8,yscale=0.8,xshift=-70,yshift=10]
    \duck[body=fskin,bill=fbill,shorthair=fhair,bunny,inear=fbill]
    \node[fskin,rotate=150,scale=3] at (1.75,1.59) {\reflectbox{\small\textsf{s}}};
    \fill[fhair,rotate=45] (2.65,0.05) ellipse (0.15 and 0.07); 
\end{scope}  

% building
\begin{scope}[scale=0.038,yshift=300,xshift=-1500]
    \path[draw=brown!50!black,line width=6.000pt] (129.0546,0.7705) .. controls (122.1203,65.4904) and (113.6451,66.6461) .. (113.6451,66.6461) -- (113.6451,66.6461) (91.3013,59.3266) .. controls (92.3303,59.5764) and (93.3577,59.8332) .. (94.3832,60.0971) .. controls (139.4171,71.6830) and (180.7789,97.1457) .. (211.4045,132.1365) .. controls (242.2399,97.1582) and (283.7423,71.7125) .. (328.9019,60.0971) .. controls (329.9275,59.8333) and (330.9548,59.5765) .. (331.9838,59.3266) (294.2305,0.7705) .. controls (301.1648,65.4904) and (309.6400,66.6461) .. (309.6400,66.6461) -- (309.6400,66.6461);
\end{scope}

% Mary
\begin{scope}[xscale=-1,yshift=15,xshift=-150]
    \duck[tshirt=blue!30!gray,longhair,body=skin]
\end{scope} 

% crib
\begin{scope}[scale=0.25,xshift=650,yshift=145]
    \duck
\end{scope}
\begin{scope}[scale=0.038,yshift=1200,xshift=4100]
    \path[draw=brown,line join=miter,line cap=butt,miter limit=10.00,line width=1.275pt] (5.6693,-15.5908) -- (22.6775,-28.3468)(22.6775,-15.5908) -- (5.6693,-28.3468);
    \path[fill=brown,nonzero rule] (0.0000,-5.6693) -- (28.3468,-5.6693) -- (22.6775,-17.0082) -- (5.6693,-17.0082);
\end{scope}

% Joseph
\begin{scope}[xscale=1,yshift=10,xshift=190]
    \duck[tshirt=red!30!brown,shorthair=brown!50!black,body=skin]
\end{scope} 

% sheep #2
\begin{scope}[xscale=0.6,yscale=0.6,yshift=10,xshift=455]
    \duck[body=white!80!brown, bill=white!60!brown, sheep]
\end{scope}

% Magi #1
\begin{scope}[yshift=-20,xshift=360]
    \duck[tshirt=green!10!brown,shorthair=brown,crown=crown,body=skin,jacket=green!30!brown,buttons=green!10!brown!80!black,cake]
\end{scope}

% Magi #2   
\begin{scope}[yshift=0,xshift=420]
    \duck[tshirt=red!30!brown,shorthair=brown!45!black,crown=crown!70!yellow,body=skin!30!brown!80!black,bill=orange!50!brown!65!black,jacket=red!30!brown!80!black,beard,buttons=brown!45!black,pizza]
\end{scope}

% Magi #3   
\begin{scope}[yshift=-10,xshift=480]
    \duck[tshirt=teal!30!brown,shorthair=brown!65!red,crown=crown!80!yellow,body=skin!90!white,jacket=teal!30!brown!80!black,buttons=white!50!brown,wine]
\end{scope} 

% comet
\begin{scope}[xscale=0.03,yscale=-0.03,yshift=-7000,xshift=-2000]
    \path[fill=crown!80!yellow] (238.7832,10.0000) -- (234.8516,26.2656) -- (218.1582,27.4336) -- (230.2793,38.9707) -- (222.9434,54.0117) -- (238.9961,49.2832) -- (248.3535,63.1562) -- (252.2852,46.8906) -- (268.9785,45.7227) -- (261.8457,38.9336) .. controls (270.2556,38.8419) and (278.6830,40.2309) .. (286.5977,43.0781) .. controls (298.4672,47.3482) and (309.1501,54.8655) .. (317.1777,64.5957) .. controls (319.3767,67.2610) and (321.3804,70.0887) .. (323.1660,73.0469) -- (316.1934,49.2793) -- (325.9688,44.4219) .. controls (323.7865,42.0532) and (321.4179,39.8563) .. (318.8926,37.8574) .. controls (309.1476,30.1439) and (297.0216,25.4810) .. (284.6191,24.6797) .. controls (276.2092,24.1363) and (267.6990,25.3763) .. (259.7676,28.2207) -- (264.1934,19.1445) -- (248.1406,23.8730) -- (238.7832,10.0000) -- cycle;
\end{scope}

\end{tikzpicture}

\end{document}

enter image description here

Astro duck

\documentclass{standalone}
\usepackage{tikzducks}

\begin{document}

\begin{tikzpicture}
\duck[glasses];

\begin{scope}[scale=0.7,yshift=90,xshift=10]
\fill[gray] (-2.9466,0.3003) -- (-3.1837,-0.4402) -- (-2.7744,-0.5708) -- (-2.7308,-0.4348) -- (-1.8176,-0.7262) -- (-2.6937,-2.5325) -- (-2.4891,-2.6173) -- (-1.7766,-1.1484) -- (-1.7910,-2.8438) -- (-1.5698,-2.8326) -- (-1.5560,-1.2208) -- (-0.8785,-2.6173) -- (-0.6739,-2.5325) -- (-1.5011,-0.8272) -- (-0.3532,-1.1935) -- (-0.3096,-1.0574) -- (-0.1147,-1.1196) -- (-0.0566,-0.9382) -- (-0.2516,-0.8760) -- (-0.2032,-0.7249) -- (-2.5809,0.0337) -- (-2.5373,0.1697) -- (-2.9466,0.3003) -- cycle;
\end{scope}
\end{tikzpicture}

\end{document}

enter image description here

Harlequin duck

\documentclass{standalone}

\usepackage{tikzducks}

\begin{document}

\begin{tikzpicture}
\duck[harlequin,jacket=red,stripes={\stripes[color=blue, width=0.46, distance=3]}]
\end{tikzpicture}

\end{document}

enter image description here

Arara

\documentclass{standalone}

\usepackage{tikzducks}


\begin{document}

\begin{tikzpicture}[scale=4]
\duck[parrot,bill=gray!80!black]
\shade[left color=cyan!90!blue,right color=blue!70!black] \duckpathwing;
\shade[bottom color=yellow!70!brown, top color=green!40!teal] \duckpathcrazyhair;
\shade[bottom color=yellow!70!brown, top color=cyan!90!blue]
        (1.56,1.76) .. controls (1.60,1.74) and (1.62,1.72) .. (1.63,1.69) .. controls (1.67,1.63) and (1.71,1.55) .. (1.69,1.47) .. controls (1.67,1.40) and (1.65,1.31) .. (1.66,1.23) .. controls (1.66,1.20) and (1.69,1.19) .. (1.72,1.18) .. controls (1.77,1.17) and (1.82,1.19) .. (1.87,1.20) .. controls (1.94,1.22) and (2.01,1.24) .. (2.08,1.27) .. controls (2.13,1.30) and (2.16,1.35) .. (2.16,1.40) .. controls (2.15,1.45) and (2.14,1.50) .. (2.11,1.54) .. controls (2.08,1.55) and (2.09,1.50) .. (2.08,1.49) .. controls (2.06,1.42) and (2.01,1.37) .. (1.95,1.35) .. controls (1.93,1.33) and (1.97,1.36) .. (1.97,1.38) .. controls (1.99,1.44) and (1.97,1.50) .. (1.94,1.55) .. controls (1.91,1.60) and (1.89,1.64) .. (1.85,1.67) .. controls (1.83,1.68) and (1.85,1.63) .. (1.85,1.61) .. controls (1.87,1.55) and (1.87,1.48) .. (1.83,1.43) .. controls (1.83,1.50) and (1.80,1.56) .. (1.76,1.61) .. controls (1.72,1.67) and (1.67,1.71) .. (1.61,1.75) .. controls (1.61,1.76) and (1.60,1.76) .. (1.60,1.76) -- cycle;
\end{tikzpicture}

\end{document}

enter image description here

Don Camillo and Peppone

\documentclass{standalone}
\usepackage{tikzducks}

\begin{document}


\begin{tikzpicture}[xscale=-1]
    \selectcolormodel{gray}
    \duck[tshirt=white,jacket=brown!50!black,buttons=gray,hat=brown!50!black,tie=brown,stripes={
     \stripes[rotate=0,width=0.02,color=gray,distance=0.1]}]
     \begin{scope}[xshift=62,yshift=1,xscale=-1]
\fill[gray!50!black] (1.8158,1.4731) .. controls (1.5890,1.5312) and (1.5142,1.3598) .. (1.2808,1.3608) .. controls (1.1720,1.2048) and (1.9376,1.4368) .. (1.8158,1.4731) -- cycle;
\end{scope}
\end{tikzpicture}   


\begin{tikzpicture}
    \selectcolormodel{gray}
    \duck[tshirt=black,buttons=gray,laughing]
 \fill[black, start angle=0, end angle=150, radius=0.5] (1.4,1.75) arc;
   \fill[black,rotate=-15] (0.44,2.1) ellipse (0.6 and 0.1);
    \fill[white,rotate=-12] (0.32,1.) rectangle (0.43,1.15);
\end{tikzpicture}   


\end{document}

enter image description here

Zebra

\documentclass{standalone}
\usepackage{tikzducks}

\begin{document}

\begin{tikzpicture}
    \fill[brown!50!white] (0,0) rectangle (3,2.6);
        \begin{scope}[yshift=-6]
            \clip[rotate=-5] (0.68,2.38) ellipse (0.3 and 0.4);
            \fill[gray!10!white,rotate=-5] (0.28,2.26) ellipse (0.3 and 0.4);
        \end{scope}
    \duck[body=gray!10!white,stripes={\stripes[distance=0.25,width=0.125,rotate=0,initialx=0.06]},horsetail,mohican=black]
        \begin{scope}[yshift=-5,xshift=1]
            \clip[rotate=-5] (0.68,2.38) ellipse (0.3 and 0.4);
            \fill[gray!10!white,rotate=-5] (1.06,2.2) ellipse (0.3 and 0.4);
        \end{scope}
\end{tikzpicture}

\end{document}

enter image description here

  • You should say the reason of the triple z :) – CarLaTeX Sep 5 '17 at 8:39
  • @CarLaTeX "DPCorro" sounds bad... – TeXnician Sep 5 '17 at 9:41
  • @CarLaTeX the zzz is left for interpretation by the beholder – user36296 Sep 5 '17 at 9:44
  • @TeXnician What about Dorro? – CarLaTeX Sep 5 '17 at 10:26
  • Oooh the snow duck! <3 <3 <3 – CarLaTeX Dec 10 '17 at 13:15
19

Sadly, the code for Mr. Dinosaur is too long, so I have to link it externally here.

For those who are wondering who is this bloke, here is a reference background (from Peppa Pig Wiki): Mr. Dinosaur ​is George Pig's favourite toy, based on a T-Rex.

The integration with tikzducks is quite straightforward:

\begin{tikzpicture}
\duck[cap]
\node [xshift=15] at (wing) {\scalebox{.12}{\mrdinosaur}};
\end{tikzpicture}

George duck

Dinosaur! Grrrr! :)

19

Ducks love pizza, swimming and a little diving:enter image description here

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% uncomment \def\export{} below to export animation
%% to multipage PDF a.pdf and run
%% 
%%  convert -density 300 -delay 4 -loop 0 -alpha remove a.pdf b.gif
%%
%% to get an animated GIF b.gif at 100/4 = 25 frames per s
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%\def\export{}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\ifdefined\export
  \documentclass[export]{standalone}
\else
  \documentclass{standalone}
\fi  

\usepackage{animate}
\usepackage{xsavebox}
\usepackage{tikzducks}
\usepackage{graphicx}
\usetikzlibrary{shapes.callouts,calc}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% adjustable parameter: frame number; 
%% enlarge for smoothness 
\newcommand\framefac{2} % times 72
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\newcommand\DuckSong[1]{\ifcase#1
All%
\or
my%
\or
little%
\or
ducklings,%
\or
Swimming%
\or
in%
\or
the%
\or
lake,%
\or
Heads%
\or
dunk%
\or
in%
\or
the%
\or
water,%
\or
As%
\or
little%
\or
tails%
\or
do%
\or
shake.%
\fi%
}

\ExplSyntaxOn
\let\intEval\int_eval:n
\let\intMod\int_mod:nn
\let\intComp\int_compare:nTF
\let\intCase\int_case:nnF
\ExplSyntaxOff

\begin{document}

\xsbox{Duck}{\tikz{\duck}}%
\xsbox{CarlaDuck}{\tikz{\duck[pizza,squareglasses=brown!50!black,longhair=black!70!brown]}}%
\xsbox{Boat}{\tikz{%
  \filldraw[fill=white,line width=0.1pt] (0.6,0.71)--(1,1.2)--(1.4,0.71)--(1,0.6)--cycle;
  \node[scale=0.1,rotate=10,anchor=south east] at (2.3,0.9) {\includegraphics{pauloTransp}};
  \filldraw[fill=white,line width=0.1pt] (0,0)--(2,0)--(2.4,1)--(1,0.6)--(-0.4,1)--cycle;}}%
\begin{animateinline}[autoplay, loop, controls=false]{25}
  \multiframe{\intEval{72*\framefac}}{iX=0+1}{
  \begin{tikzpicture}
    \fill[use as bounding box,white!90!blue] (-1,-1) rectangle (7.2,3);
    \node[scale=2,anchor=center,rotate=6*cos(360/(72*\framefac-1)*\iX)] at ({-3.8+\iX*13.8/(72*\framefac-1)},{0.9+0.1*sin(360/(72*\framefac-1)*\iX)}){\theBoat};
    \fill[blue!60!black] plot[variable=\x,domain=-1:7.2,samples=82] ({\x},{0.1+0.3*sin(100*(\x-0.5*\iX/10/\framefac))})--(7.2,-1)--(-1,-1)--(-1,0);
    \fill[blue] plot[variable=\x,domain=-1:7.2,samples=82] ({\x},{0.05+0.3*sin(100*(\x-\iX/10/\framefac))})--(7.2,-1)--(-1,-1)--(-1,0);
    \node[rotate=27.63*cos(100*(2.2-\iX/10/\framefac))] (duck) at ({2.2},{0.95+0.3*sin(100*(2.2-\iX/10/\framefac))}){\theCarlaDuck};
    \node[ellipse callout,text width=3.5em,align=center,draw,anchor=east,callout absolute pointer={($(duck.west)+(0.3,0.1)$)},fill=white] (song)
      at ($(duck)+(-1,1)$) {\makebox[0pt][c]{\DuckSong{\intEval{(\iX-\intMod{\iX}{4*\framefac})/(4*\framefac)}}}};
    \foreach \duckscal/\duckoff in {0.3/0,0.25/1,0.2/2,0.15/3,0.12/4}  
      \node[
        rotate=\intComp{\duckoff<4}{0}{\intComp{\iX<36*\framefac}{0}{
        \intCase{\iX}{{36*\framefac}{22.5}{36*\framefac+1}{45}{36*\framefac+2}{67.5}{72*\framefac-3}{67.5}{72*\framefac-2}{45}{72*\framefac-1}{22.5}}{90}}}
        +27.63*cos(100*(3.6+\duckoff*0.7-\iX/10/\framefac)),scale=\duckscal,anchor=south] at ({3.6+\duckoff*0.7},{0.3*sin(100*(3.6+\duckoff*0.7-\iX/10/\framefac))-0.04}){\theDuck};
    \fill[blue] plot[variable=\x,domain=-1:7.2,samples=82] ({\x},{0.3*sin(100*(\x-\iX/10/\framefac))})--(7.2,-1)--(-1,-1)--(-1,0);
    \fill[blue!60!white] plot[variable=\x,domain=-1:7.2,samples=82] ({\x},{0.3*sin(100*(\x-2*\iX/10/\framefac))-0.2})--(7.2,-1)--(-1,-1)--(-1,0);
    \draw[white,line width=1pt] (-1,-1) rectangle (7.2,3);
  \end{tikzpicture}
  }
\end{animateinline}

\end{document}

For compilation, you need ↗Paulo, the Captain. Save it as pauloTransp.png in the current directory.

By default, the code compiles to a single-page PDF with an embedded animation. It requires Acrobat Reader for viewing. For producing an animated GIF, as shown above, follow instructions in the code.

  • Maybe this technique could solve tex.stackexchange.com/q/445193/36296 Could you please have a look? – user36296 Aug 8 '18 at 19:01
  • This is a bit more involved, I am afraid. I always feared this question would come up some day. Perhaps some internal modifications of animate are required. – AlexG Aug 8 '18 at 20:12
  • 1
    ...... Ok, done. – AlexG Aug 24 '18 at 10:39
18

A video has been made with the help of the tikzducks package.

enter image description here

The complete video is here https://vimeo.com/246256860

The code is on github (too large and too many files for an answer) https://github.com/cereda/duck-extravaganza

A few teasers:

enter image description here

enter image description here

17

I missed a beard for the "santa" duck.

It might not be pretty, and the code is definitely not pretty. But being a novice at LaTeX I'm happy with it!

    \begin{tikzpicture}
    \duck[santa=red!80!black, jacket=red!80!gray, tshirt=white,];

    %This prompts the beard%
    \fill[white!80!brown](1.3,1.3) ellipse (0.12 and 0.12);
    \fill[white!80!brown] (1.2,1.15) ellipse (0.12 and 0.12);
    \fill[white!80!brown] (0.5,1.05) ellipse (0.1 and 0.1);
    \fill[white!80!brown](0.525,0.90) ellipse (0.12 and 0.12);
    \fill[white!80!brown] (0.525,0.75) ellipse (0.12 and 0.12);
    \fill[white!80!brown] (0.65,0.65) ellipse (0.14 and 0.14);
    \fill[white!80!brown] (0.75,0.75) ellipse (0.12 and 0.12);
    \fill[white!80!brown] (0.85,0.85) ellipse (0.12 and 0.12);
    \fill[white!80!brown] (0.95,0.95) ellipse (0.12 and 0.12);
    \fill[white!80!brown] (1.05,1.05) ellipse (0.12 and 0.12);
    \fill[white!80!brown] (1.15,1.25) ellipse (0.12 and 0.12);
    \fill[white!80!brown] (1,1.20) ellipse (0.12 and 0.12);
    \fill[white!80!brown] (0.85,1.20) ellipse (0.12 and 0.12);
    \fill[white!80!brown] (0.75,1.15) ellipse (0.12 and 0.12);
    \fill[white!80!brown] (0.65,1.10) ellipse (0.12 and 0.12);
    \fill[white!80!brown] (0.58,1.07) ellipse (0.12 and 0.12);
    \fill[white!80!brown] (0.42,1.46) ellipse (0.07 and 0.07);
    \fill[white!80!brown] (0.52,1.45) ellipse (0.07 and 0.07);
    \fill[white!80!brown] (0.6,1.44) ellipse (0.07 and 0.07);
    \fill[white!80!brown] (0.68,1.40) ellipse (0.07 and 0.07);
    \fill[white!80!brown] (0.76,1.36) ellipse (0.07 and 0.07);
    \fill[white!80!brown] (0.8,1.25) ellipse (0.12 and 0.12);
    \fill[white!80!brown] (0.85,1.28) ellipse (0.12 and 0.12);
    \fill[white!80!brown] (0.38,1.44) ellipse (0.05 and 0.05);
    \fill[white!80!brown] (1,1.28) ellipse (0.12 and 0.12);
    \fill[white!80!brown] (1.3,1.3) -- (0.5,1.05) -- (0.65,0.65) -- cycle;

    %Beard ends here%

    \end{tikzpicture}

Santa duck with beard

Merry Chirstmas!

/Mihikma

Quack

  • ... and welcome to TeX.SX! – Bobyandbob Nov 17 '17 at 13:31
  • Really Fantastic!! Too bad I already printed my X-mas cards :( – user36296 Nov 17 '17 at 13:32
  • <3 <3 <3 I'll use it for my Xmas cards! – CarLaTeX Nov 17 '17 at 13:44
  • 1
    Absolutely fantastic! – Paulo Cereda Nov 17 '17 at 13:45
  • 2
    @Mihikma May I add something similar to the tikzducks package? Of course I'd give credit to you. – user36296 Nov 17 '17 at 16:01
17

Finally, a marmot!

\documentclass[12pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{shadings}
\usetikzlibrary{shapes.callouts}
\begin{document}
\begin{tikzpicture}
%right foot
\begin{scope}[transform canvas={xshift=-0.03cm,yshift=0.12cm},scale=0.7]
%\draw[smooth,blue,thick] plot coordinates 
\shade[smooth,upper right=white!30!black,lower left=black,lower right=black,upper left=black] plot coordinates
{(1.4,0)(2,0.08)(3,0.08)(3.6,0.3)(3,0.5)(2.4,0.65)(2,0.6)(1.6,0.4)(1.4,0)};
\end{scope}
%\draw[smooth,blue,thick] plot coordinates %left foot
\shade[smooth,upper right=white!30!black,lower left=black,lower right=black,upper left=black] plot coordinates
{(1.4,0)(2,0.08)(3,0.08)(3.6,0.3)(3,0.5)(2.4,0.65)(2,0.6)(1.6,0.4)(1.4,0)};
%\draw[smooth,blue,thick] plot coordinates %body
\shade[smooth,upper left=brown!70!black,upper right=brown,lower left=black!50!brown,upper
    right=orange,lower right=orange!50!brown,smooth] plot coordinates
{(1.8,8.85)(1.3,8)(1,7)(0.97,6)(1,5)(1.18,4)(1.25,3)(1.39,2)(1.6,1)(1.8,0.6)(2,0.4)(3,0.2)(4,0)(5,0.1)(6,0.3)(6.6,0.45)(7,0.5)%tail
(8,0.7)(8.5,1)(9,1.45)(9.3,2)(9.4,2.6)(9.35,3)(9.2,3.48)(9,3.6)(8.9,3.6)(8.6,3.5)(8.48,3)(8.4,2.4)(8.3,2)(8,1.6)(7.6,1.35)(7.4,1.3)(7.2,1.35)(6.95,1.35)%end tail
(6.82,2)(6.65,3)(6.45,4)(6.28,5)(6.22,6)(6.03,7)(5.85,8)(5.75,9)(5.55,10)(5.25,11)%ear position
(4.5,12)(4,12.1)(3,12.15)(2.5,12.15)(2,11.85)(1.1,11.3)%nose position
(0.8,11.1)(0.65,11)(0.6,10.8)(0.8,10)(1,9.6)(1.4,9.15)(1.8,8.85)};
%\draw[smooth,blue,thick] plot coordinates %face
\shade[smooth,upper left=white!90!black,upper right=white!80!black,lower
left=white!75!black,upper right=white!85!black,lower right=orange!50!brown,smooth] plot coordinates
{(2.6,8.6)(2.5,9)(2.4,9.5)(2.45,10)(2,10.8)(1.8,11)(1.1,11.3)%from now on as above
(0.8,11.1)(0.65,11)(0.6,10.8)(0.8,10)(1,9.6)(1.4,9.15)(1.8,8.85)};
%\draw[smooth,blue,thick] plot coordinates %nose
\shade[smooth,upper right=white,lower left=black,lower right=black,upper left=black] plot coordinates
{(1.1,11.3)(0.8,11.1)(0.65,11)(0.6,10.8)(0.7,10.45)(1,10.5)(1.3,10.8)(1.3,11)(1.1,11.3)};
\shade[smooth,upper right=black!80!white,lower left=black,lower right=black,upper left=black] plot coordinates %mouth
{(0.8,10)(1.2,9.8)(1.5,10)(1.4,9.6)(1.2,9.5)(1,9.6)(0.8,10)};
\draw[smooth,black,thick,fill=white] plot coordinates %teeth
{(1,9.82)(1,9.55)(1.1,9.53)(1.11,9.73)(1.12,9.51)(1.22,9.51)(1.32,9.84)(1.33,9.86)(1,9.82)};
\draw[smooth,brown,thick] plot coordinates %chin
{(1.8,8.85)(2.6,8.6)(3,8.58)(4,8.5)};
%\draw[smooth,blue,thick] plot coordinates %ears
\shade[smooth,upper left=brown!70!black,upper right=brown!80!black,lower left=black!50!brown,upper
    right=orange!20!brown,lower right=orange!25!brown,smooth] plot coordinates
{(4.9,11.1)(5.4,11.4)(5.4,11.8)(5.2,11.95)(4.8,11.9)(4.6,11.6)(4.9,11.1)};
\shade[smooth,upper left=white](2.8,10.8) circle (0.4); %outer eye
\shade[upper right=white,lower left=black,lower right=black,upper left=black](2.74,10.8) circle (0.27); inner eye
\begin{scope}[transform canvas={xshift=-0.5cm,yshift=0}]
%\draw[smooth,black,thick] plot coordinates %left arm
\shade[upper left=brown!70!black,upper right=brown!80!black,lower left=black!50!brown,upper
    right=orange!20!brown,lower right=orange!25!brown,smooth] plot coordinates
{(3.5,5.6)(2.5,5.5)(1.35,5.85)(1.2,6)(1.3,6.3)(1.35,6.4)(2.4,6.8)(3,7)(3.5,5.6)};
%\draw[smooth,blue,thick] plot coordinates %left claws
\shade[upper right=white!30!black,lower left=black,lower right=black,upper left=black] plot coordinates
{(0.8,5.2)(1,5.6)(1.6,6)(1.62,6.2)(1.5,6.5)(1,6.45)(0.75,6.2)(0.6,6)(0.5,5.5)(0.75,5.65)(0.8,5.2)};
\end{scope}
\node[ellipse callout, draw,text width=1.8cm,text centered, callout
 relative pointer={(1.5,-1)},fill=white] at (-1.4,11.3) (hallo) {I love ducks!};
\end{tikzpicture}
\end{document}

enter image description here

There are claims that marmots are very relevant to string theory...

\documentclass[border=4pt,12pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{shadings}
\usetikzlibrary{shapes.callouts}
\begin{document}
\begin{tikzpicture}[font=\sffamily]
%right foot
\begin{scope}[transform canvas={xshift=-0.03cm,yshift=0.12cm},scale=0.7]
%\draw[smooth,blue,thick] plot coordinates 
\shade[smooth,draw=white,upper right=white!30!black,lower left=black,lower right=black,upper left=black] plot coordinates
{(1.4,0)(2,0.08)(3,0.08)(3.6,0.3)(3,0.5)(2.4,0.65)(2,0.6)(1.6,0.4)(1.4,0)};
\end{scope}
\begin{scope}[transform canvas={yshift=-0.13cm,xshift=0.32cm}]
%\draw[smooth,blue,thick] plot coordinates %left foot
\shade[smooth,draw=white,upper right=white!30!black,lower left=black,lower right=black,upper left=black] plot coordinates
{(1.4,0)(2,0.08)(3,0.08)(3.6,0.3)(3,0.5)(2.4,0.65)(2,0.6)(1.6,0.4)(1.4,0)};
\end{scope}
%\draw[smooth,blue,thick] plot coordinates %body
\shade[smooth,upper left=brown!70!black,upper right=brown,lower left=black!50!brown,upper
    right=orange,lower right=orange!50!brown,smooth] plot coordinates
{(1.8,8.85)(1.3,8)(1,7)(0.97,6)(1,5)(1.18,4)(1.25,3)(1.39,2)(1.6,1)(1.8,0.6)(2,0.4)(3,0.2)(4,0)(5,0.1)(6,0.3)(6.6,0.45)(7,0.5)%tail
(8,0.7)(8.5,1)(9,1.45)(9.3,2)(9.4,2.6)(9.35,3)(9.2,3.48)(9,3.6)(8.9,3.6)(8.6,3.5)(8.48,3)(8.4,2.4)(8.3,2)(8,1.6)(7.6,1.35)(7.4,1.3)(7.2,1.35)(6.95,1.35)%end tail
(6.82,2)(6.65,3)(6.45,4)(6.28,5)(6.22,6)(6.03,7)(5.85,8)(5.75,9)(5.55,10)(5.25,11)%ear position
(4.5,12)(4,12.1)(3,12.15)(2.5,12.15)(2,11.85)(1.1,11.3)%nose position
(0.8,11.1)(0.65,11)(0.6,10.8)(0.8,10)(1,9.6)(1.4,9.15)(1.8,8.85)};
%\draw[smooth,blue,thick] plot coordinates %face
\shade[smooth,upper left=white!90!black,upper right=white!80!black,lower
left=white!75!black,upper right=white!85!black,lower right=orange!50!brown,smooth] plot coordinates
{(2.6,8.6)(2.5,9)(2.4,9.5)(2.45,10)(2,10.8)(1.8,11)(1.1,11.3)%from now on as above
(0.8,11.1)(0.65,11)(0.6,10.8)(0.8,10)(1,9.6)(1.4,9.15)(1.8,8.85)};
%\draw[smooth,blue,thick] plot coordinates %nose
\shade[smooth,upper right=white,lower left=black,lower right=black,upper left=black] plot coordinates
{(1.1,11.3)(0.8,11.1)(0.65,11)(0.6,10.8)(0.7,10.45)(1,10.5)(1.3,10.8)(1.3,11)(1.1,11.3)};
\shade[smooth,upper right=black!80!white,lower left=black,lower right=black,upper left=black] plot coordinates %mouth
{(0.8,10)(1.2,9.8)(1.5,10)(1.4,9.6)(1.2,9.5)(1,9.6)(0.8,10)};
\draw[smooth,black,thick,fill=white] plot coordinates %teeth
{(1,9.82)(1,9.55)(1.1,9.53)(1.11,9.73)(1.12,9.51)(1.22,9.51)(1.32,9.84)(1.33,9.86)(1,9.82)};
\draw[smooth,brown,thick] plot coordinates %chin
{(1.8,8.85)(2.6,8.6)(3,8.58)};
%\draw[smooth,blue,thick] plot coordinates %ears
\shade[smooth,upper left=brown!70!black,upper right=brown!80!black,lower left=black!50!brown,upper
    right=orange!20!brown,lower right=orange!25!brown,smooth] plot coordinates
{(4.9,11.1)(5.4,11.4)(5.4,11.8)(5.2,11.95)(4.8,11.9)(4.6,11.6)(4.9,11.1)};
\shade[smooth,upper left=white](2.8,10.8) circle (0.4); %outer eye
\shade[upper right=white,lower left=black,lower right=black,upper left=black](2.74,10.8) circle (0.27); inner eye
\begin{scope}[transform canvas={xshift=-0.5cm,yshift=0}]
%\draw[smooth,black,thick] plot coordinates %left arm
\shade[upper left=brown!70!black,upper right=brown!80!black,lower left=black!50!brown,upper
    right=orange!20!brown,lower right=orange!25!brown,smooth] plot coordinates
{(3.5,5.6)(2.5,5.5)(1.35,5.85)(1.2,6)(1.3,6.3)(1.35,6.4)(2.4,6.8)(3,7)(3.5,5.6)};
%\draw[smooth,blue,thick] plot coordinates %left claws
\shade[upper right=white!30!black,lower left=black,lower right=black,upper left=black] plot coordinates
{(0.8,5.2)(1,5.6)(1.6,6)(1.62,6.2)(1.5,6.5)(1,6.45)(0.75,6.2)(0.6,6)(0.5,5.5)(0.75,5.65)(0.8,5.2)};
\end{scope}
\node[ellipse callout, draw,text width=1.8cm,text centered, callout
 relative pointer={(1,-0.5)},fill=white] at (-1.5,11.8) (11D) {11D
 supergravity};
\node[ellipse callout, draw,text width=1.8cm,text centered, callout
 relative pointer={(-0.5,-0.1)},fill=white] at (7.4,12) (hetE8) {heterotic
 E$_8\times$E$_8$};
\node[ellipse callout, draw,text width=1.8cm,text centered, callout
 relative pointer={(0.2,-0.6)},fill=white] at (8.4,5) (hetSO) {heterotic
 SO(32)};
\node[ellipse callout, draw,text width=1.8cm,text centered, callout
 relative pointer={(0.8,-0.4)},fill=white] at (-1.4,7) (typeI) {type I};
\node[ellipse callout, draw,text width=1.8cm,text centered, callout
 relative pointer={(1.2,-0.8)},fill=white] at (-0.8,1.4) (typeIIA) {type IIA};
\node[ellipse callout, draw,text width=1.8cm,text centered, callout
 relative pointer={(1.6,-0.05)},fill=white] at (-1.4,0) (typeIIB) {type IIB};
\node(M) at (2,14){\Huge Does M stand for marmot?};
\end{tikzpicture}
\end{document}

enter image description here

  • How did we survive without a marmot? – user36296 Jan 5 '18 at 22:17
  • @ArtificialStupidity Yes, I'm aware of this. That's why I wrote that I intend to edit this later. Actually, I am trying to convince LaTeX or the editor to do that 4 me. (Of course, I know how to strip of the digits, I am asking about the removal of unnecessary coordinates.) Any suggestions? – marmot Jan 5 '18 at 22:27
  • Wow! Great contribution to the duck pond! – CarLaTeX Jan 6 '18 at 6:20
  • That's really a marmot and not a cross between a beaver and a penguin? – cfr Jan 8 '18 at 0:22
  • 1
    @samcarter Your tikzmarmots is missing here! ;-) – Ignasi Jul 13 '18 at 10:48
17

The following examples part of the TikZlings, now also available as package on CTAN: https://www.ctan.org/pkg/tikzlings

Teddy bear:

\documentclass{standalone}
\usepackage{tikz}

\usepackage{tikzducks}

\begin{document}
\begin{tikzpicture}
%  mitte: x=0.925

% Body %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\fill[brown!70!black] (0.925,0.75) ellipse (0.55 and 0.65); 
\fill[brown!50!white] (0.925,0.7) ellipse (0.35 and 0.4); 

% Feet %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\fill[brown!70!black] (1.35,0.3) circle (0.28); 
\fill[brown!70!black] (0.50,0.3) circle (0.28);
\fill[brown!50!white] (1.35,0.3) circle (0.17); 
\fill[brown!50!white] (0.50,0.3) circle (0.17);

% Ears %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\fill[brown!70!black] (1.30,1.95) circle (0.15);
\fill[brown!70!black] (0.55,1.95) circle (0.15);
\fill[brown!50!white] (1.30,1.95) circle (0.1);
\fill[brown!50!white] (0.55,1.95) circle (0.1);

% Head %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\fill[brown!70!black] (0.925,1.55) circle (0.5); 

% Muzzle %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\fill[brown!50!white] (0.925,1.4) ellipse (0.28 and 0.2); 
\fill[brown!70!white!80!red] (0.925,1.5) ellipse (0.15 and 0.08); 

% Eyes %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\fill[brown!30!black] (0.77,1.7) circle (0.05); 
\fill[brown!30!black] (1.08,1.7) circle (0.05); 

% Mouth %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\draw[brown!30!black] (1.07,1.38) arc [start angle=-20, end angle=-160, radius=0.16];

% Arms %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\fill[brown!70!black,rotate around={-50:(1.45,0.9)}] (1.45,0.9) ellipse (0.35 and 0.15);
\fill[brown!70!black,rotate around={50:(0.4,0.9)}] (0.4,0.9) ellipse (0.35 and 0.15);

\duck[invisible,tophat]

\end{tikzpicture}
\end{document}

enter image description here

Pingu:

\documentclass{standalone}

\makeatletter
\RequirePackage{tikz}

\newcommand*{\penguin}[1][]{%
    \begin{scope}%
        \tikzset{/penguin/.cd,#1}%
        \penguin@draw%
    \end{scope}%
}

\newif\ifpenguin@name
\newif\ifpenguin@threeD

\tikzset{
  %
  % Pass unknown keys on to tikz
  %
  /penguin/.search also={/tikz,/pgf},
  /penguin/.cd,
  name/.code         = \penguin@nametrue \def\penguin@name{#1},
  %
  % body
  %
  body/.code         = \def\penguin@body{#1},
  body               = black,
  belly/.code        = \def\penguin@belly{#1},
  belly              = white!95!black,
  feet/.code         = \def\penguin@feet{#1},
  feet               = yellow!50!orange,
  bill/.code         = \def\penguin@bill{#1},
  bill               = orange,  
  eye/.code          = \def\penguin@eye{#1},
  eye                = white!95!black,
  pupil/.code        = \def\penguin@pupil{#1},
    pupil              = black, 
    %
    % options
    %
    3D/.code                 = \penguin@threeDtrue, 
}

\def\penguin@draw{%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% minimal bounding box size 
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\path (0.06,0.15) rectangle (1.8,2.13);
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 
% switch between 2D and 3D, from
% https://chat.stackexchange.com/transcript/message/45991801#45991801
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\ifpenguin@threeD
    \def\penguin@part@draw##1{\shade[ball color=##1]}
\else
    \def\penguin@part@draw##1{\fill[##1]}
\fi
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Body parts
% 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Arms %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\penguin@part@draw{\penguin@body,rotate around={-50:(1.5,1.2)}} (1.5,1.2) ellipse (0.38 and 0.1);
\penguin@part@draw{\penguin@body,rotate around={50:(0.35,1.2)}} (0.35,1.2) ellipse (0.38 and 0.1);  
%
% Body %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\penguin@part@draw{\penguin@body} (1.52,0.92) .. controls (1.52,0.26) and (1.28,0.18) .. (0.95,0.18) .. controls (0.61,0.18) and (0.32,0.26) .. (0.32,0.92) .. controls (0.32,1.58) and (0.59,2.11) .. (0.92,2.11) .. controls (1.25,2.11) and (1.52,1.58) .. (1.52,0.92) -- cycle;
%
% Belly %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\penguin@part@draw{\penguin@belly} (0.925,0.6) ellipse (0.48 and 0.35);
%
% Feet %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{scope}[xshift=4]
    \penguin@part@draw{\penguin@feet} (0.5319,0.3941) .. controls (0.5138,0.4505) and (0.4245,0.6014) .. (0.3275,0.6533) .. controls (0.2261,0.7075) and (0.2214,0.6369) .. (0.2428,0.5960) .. controls (0.2712,0.5416) and (0.2237,0.5302) .. (0.1952,0.5384) .. controls (0.1022,0.5653) and (0.0298,0.5169) .. (0.1131,0.4340) .. controls (0.1335,0.4137) and (0.2100,0.3557) .. (0.0982,0.3492) .. controls (0.0250,0.3450) and (0.0181,0.2680) .. (0.1082,0.2445) .. controls (0.2000,0.2206) and (0.3206,0.2043) .. (0.4571,0.2096) .. controls (0.5454,0.2131) and (0.5602,0.3059) .. (0.5319,0.3941) -- cycle;
\end{scope}
\begin{scope}[xshift=49,xscale=-1]
    \penguin@part@draw{\penguin@feet} (0.5319,0.3941) .. controls (0.5138,0.4505) and (0.4245,0.6014) .. (0.3275,0.6533) .. controls (0.2261,0.7075) and (0.2214,0.6369) .. (0.2428,0.5960) .. controls (0.2712,0.5416) and (0.2237,0.5302) .. (0.1952,0.5384) .. controls (0.1022,0.5653) and (0.0298,0.5169) .. (0.1131,0.4340) .. controls (0.1335,0.4137) and (0.2100,0.3557) .. (0.0982,0.3492) .. controls (0.0250,0.3450) and (0.0181,0.2680) .. (0.1082,0.2445) .. controls (0.2000,0.2206) and (0.3206,0.2043) .. (0.4571,0.2096) .. controls (0.5454,0.2131) and (0.5602,0.3059) .. (0.5319,0.3941) -- cycle;
\end{scope}
%
% Eyes %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{scope}[xshift=2,yshift=-1]
\fill[\penguin@eye, rotate=-10] 
  (0.38,1.7675) ellipse (0.1 and 0.15);
\penguin@part@draw{\penguin@pupil, rotate=-10} 
  (0.41,1.7575) ellipse (0.0357 and 0.0714);
\end{scope}
\begin{scope}[xshift=-2,yshift=-1]
\fill[\penguin@eye, rotate=10]
  (1.43,1.44) ellipse (0.1 and 0.15);
\penguin@part@draw{\penguin@pupil, rotate=10}
  (1.4,1.43) ellipse (0.0357 and 0.0714);
\end{scope}  
%
% Bill %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\penguin@part@draw{\penguin@bill} (1.2480,1.4591) .. controls (1.0717,1.3257) and (1.0316,1.4365) .. (0.9225,1.4358) .. controls (0.8205,1.4353) and (0.7596,1.3468) .. (0.6178,1.4542) .. controls (0.8470,0.9682) and (1.1004,1.1827) .. (1.2480,1.4591) -- cycle;
%
}
\makeatother

\usepackage{tikzducks}

\begin{document}

\begin{tikzpicture}
    \penguin
    \duck[invisible,tophat=gray!60!black]
\end{tikzpicture}   

\begin{tikzpicture}
    \penguin[3D]
\end{tikzpicture}   

\end{document}

enter image description here

12

At CarLaTeX's request, triggered by this question and that answer, working my way up to the \marmot command. ;-)

\documentclass[12pt]{standalone}
\usepackage{pgf,tikz}
\usetikzlibrary{shadings}
\usetikzlibrary{shapes.callouts}
\begin{document}
\begin{tikzpicture}
\shade[upper left=red,upper left=brown,lower left=black!50!brown,upper
right=orange,lower right=orange!50!brown,smooth]
plot coordinates {(8.487120635907601,5.055577303411975)  (8.653420477717171,5.393068158849042)  (8.897979068613598,5.784361904283323)  (9.054496566787309,6.151199790627962)  (9.176775862235523,6.635425800602885)  (9.31861984495545,7.222366418754307)  (9.343075704045093,7.8728922705388)  (9.308837501319593,8.293533046880652)  (9.157211174963809,8.538091637777077)  (8.85395852225224,8.391356483239223)  (8.443100089546245,7.956042191443585)  (8.076262203201606,7.579421961463089)  (7.748553691400395,7.232148762390164)  (7.4501922105067555,6.811507986048312)  (7.279001196879258,6.459343615157459)  (7.176286588702759,6.038702838815606)  (7.773848252993539,7.404007626215198)  (7.819564427995601,7.651505539157395)  (7.8264669877139506,7.867492374912536)  (7.804077433222327,8.056204334199078)  (7.727313246393903,8.254511816839173)  (7.608968458366749,8.372856604866326)  (7.465035608063454,8.414437206065056)  (7.285919172130465,8.38245212821988)  (7.0716191505677815,8.216129723424961)  (6.863716144574133,7.944256561740961)  (6.738974340977944,7.649993845565335)  (6.665408661934038,7.4548848707097575)  (6.668607169718555,7.090254983274744)  (6.646217615226932,6.610478815597094)  (6.604737979609691,6.154467171231563)  (6.5529724229494555,5.787402314913527)  (6.463559188718139,5.5756341285761994)  (6.1529658487567245,5.330924224364176)  (5.757665234260378,5.114450078330462)  (5.354877070877689,4.897975137756692)  (5.,4.5)  (4.821479324121693,4.163687330534155)  (4.6136620201907865,3.858888618102158)  (4.530535098618423,3.6372168272425243)  (4.436895027217463,3.5000557234720557)  (4.349819298957242,3.3215504805386034)  (4.317165900859659,3.1365145579856346)  (4.328050366892187,2.9471248490196547)  (4.347642405750737,2.7707964992927083)  (4.450381667535669,2.5159314321415236)  (4.532041887458237,2.3563228204746856)  (4.7881580317608385,2.2264088342342356)  (5.059121488776634,2.0779357071022933)  (5.344932258505623,1.899767954543962)  (5.484652825467143,1.8292695614504035)  (5.506329987815211,1.737194466087021)  (5.476711191510275,1.4854346974950627)  (5.617400473958722,1.0966879959927742)  (5.958016631465489,0.27106404899267567)  (6.269309791973645,-0.2515451024553113)  (6.6694882347995845,-0.7059850290542589)  (7.07644936309715,-0.96372707697605)  (7.395235580263576,-1.0315539316923108)  (7.496975862337968,-1.1400768992383281) (7.496975862337968,-1.1400768992383281)  (7.5,-1.5)  (7.35453946743382,-1.7573012771563017)  (7.0696666776255235,-1.8522588737590668)  (6.696618976686088,-1.9607818413050841)  (6.506703783480558,-2.1778277763971188)  (6.330353961218279,-2.367742969602649)  (6.316788590275027,-2.5780062192230577)  (7.083232048568776,-2.6187023320528144)  (7.754717910259759,-2.6187023320528144)  (8.236288578745212,-2.5712235337514318)  (8.453334513837248,-2.354177598659397)  (8.751772674588796,-2.0693048088511015)  (8.98916666609571,-1.8115627609293103)  (9.165516488357987,-1.540255342064267)  (9.33447506356106,-1.3968710396354151)  (9.6,-1.4)  (9.883136971295853,-1.5659555269247534)  (10.228207353518993,-1.7660963486141739)  (10.664976183641343,-1.9674263178593647)  (10.841494002882714,-2.0195793099079515)  (10.973882367313742,-2.0998146822903925)  (10.921729375265155,-2.2482501211979082)  (10.941788218360765,-2.4287797090584)  (11.142376649316867,-2.60529752829977)  (11.59570650327766,-2.653438751729235)  (12.237589482337189,-2.617332834157136)  (12.662836955964126,-2.5772151479659158)  (13.148260958877895,-2.505003312821719)  (14.344478214484807,-2.502493194173754)  (15.369243602427948,-2.3819325602980905)  (15.851486137930603,-1.759035951940496)  (16.18302788108868,-0.8548311978730202)  (15.640505028648192,-0.9151115148108518)  (15.781159101503134,-0.1515608335983167)  (15.469710797324336,0.9736717492412088)  (14.746346994070354,2.1089510515703727)  (13.741901035087823,3.0462093916695716)  (12.74202561081047,3.652194497292207)  (11.620953165408594,4.04608481594692)  (10.378683698882188,4.076384071228052)  (9.424257157526535,3.8794389119006953)  (8.833421679544463,3.833990028978998)  (8.484980243811448,4.030935188306354)  (8.257735829202957,4.364226996398804)  (8.247996636798005,4.764611473259732)  (8.487120635907601,5.055577303411975)};

\draw[thick,smooth,brown] plot coordinates { (10.970355256269126,-1.9322725401224543)  (11.047142365016613,-1.7786983226274815)  (11.215647409212487,-1.6443208823193802)  (11.492934190800634,-1.5440710458990508)  (11.787284774332665,-1.5355391449271076)  (12.077369407378725,-1.4886136895814215)  (12.416294906384667,-1.4948048149804178)  (12.799824433796168,-1.5628503762953614)  (13.090564559414563,-1.714406399224099)  (13.310166143658245,-1.8845203025114576)};

\draw[thick,smooth,fill=black] plot coordinates { (6.176715812497315,3.9442760413021656)  (6.433821047703658,3.9250890834509464)  (6.671739325058781,3.963462999153385)  (6.834828466794148,4.115039966178019)  (6.8309910752239045,4.35295824353314)  (6.712031936546342,4.475754773780944)  (6.512487574893659,4.535234343119725)  (6.3263740837368285,4.483429556921433)  (6.159447550431217,4.329933894111677)  (6.14217928836512,4.180275622872165)  (6.16136624621634,4.045966917913629)  (6.1460166799353635,3.932763866591434)};

\draw[ultra thick,smooth] plot coordinates { (4.9,3.4)  (4.867460280572349,3.253821969982106)  (4.719583397599846,3.1622025968360994)  (4.623141952182997,3.0657611514192507)  (4.507412217682777,3.138092235481887)  (4.404541342571471,3.3149015520794434)};

\draw[ultra thick,smooth] plot coordinates { (4.652234498957524,2.8886104804097017)  (4.769852024033724,2.977169558114133)  (4.9137605253034256,3.1487527711664685)  (4.978796097992618,3.2926612724361695)};

\draw[ultra thick,smooth] plot coordinates { (4.589966397446596,2.870621917750989)  (4.4751163435486605,2.945343639564103)  (4.40316209291381,3.072647313764223)  (4.378254852309438,3.220707021801319)};

 \node[ellipse callout, draw,text width=1.8cm,text centered, callout
 relative pointer={(0.5,-1)},fill=white] at (3.7,5) (hallo) {I love marmots!};
\end{tikzpicture}
\end{document}

enter image description here

  • +1 (even if this is a community wiki and you won't get reputation for it) :) – CarLaTeX Jan 5 '18 at 18:51
  • @CarLaTeX That's fine, I really like the rabbit's statement ;-) – marmot Jan 5 '18 at 18:52
  • 1
    Ducks love marmots too :) – CarLaTeX Jan 5 '18 at 18:55
  • @CarLaTeX OK, they no longer have to wait. ;-) – marmot Jan 5 '18 at 21:45
12

The TikZducks got a smaller sibling, the TikZmarmots:

\documentclass{standalone}

\usepackage{tikzmarmots}
\usepackage{tikzducks}

\begin{document}

\begin{tikzpicture}
    \marmot[whiskers,teeth]
\end{tikzpicture}

\begin{tikzpicture}
    \marmot
    \duck[invisible,crown]
    \begin{scope}[scale=0.7,xshift=9,yshift=18]
        \duck[invisible,cake=red!50!violet]
    \end{scope}
\end{tikzpicture}

\end{document}

enter image description here

  • 2
    Oh my!!! How could we survive so long without? ;-) – marmot Jul 15 '18 at 12:59
  • Awwwww.... so cute! – pushpen.paul Jan 22 at 11:35
11

Chicken out of the egg - PSTricks:

... as a hint for a Duckling out of the egg :-)

\documentclass{standalone}
\usepackage{pstricks}
\begin{document}
\makeatletter
\def\psfs@asolid{\pst@fill{\pst@usecolor\psfillcolor eofill}}
\makeatother

%% Color Definitions
\definecolor{CouleurI}{cmyk}{0,0,0,0}
\definecolor{CouleurII}{cmyk}{.500694,.256565,.266178,0}
\definecolor{CouleurIII}{cmyk}{.00231937,.288243,.807706,0}
\definecolor{CouleurIV}{cmyk}{.000885023,.590173,.93637,0}
\definecolor{CouleurV}{cmyk}{.320531,.93048,.867948,.422095}
\definecolor{CouleurVI}{cmyk}{.163363,.0721752,.0742809,0}

\psscaleboxto(-1,-1){
\psset{unit=0.01}
\begin{pspicture}(0,0)(512,512)
%% Path : 1
\pscustom[fillstyle=solid,fillcolor=CouleurII,linestyle=none]{
\moveto(39.111,274.958)
\psline(71.111,227.556)
\psline(113.778,270.222)
\psline(170.667,241.778)
\psline(213.333,284.444)
\psline(270.222,199.111)
\psline(327.111,241.778)
\psline(369.778,227.556)
\psline(398.222,270.222)
\psline(440.889,227.556)
\psline(469.333,284.444)
\psline(440.889,384)
\psline(284.444,455.111)
\psline(128,426.667)
\psline(42.667,341.333)
\psline(39.111,274.958)
\closepath
}
%% Path : 2
\pscustom[fillstyle=solid,fillcolor=CouleurIII,linestyle=none]{
\moveto(426.041,209.237)
\psbezier(426.34,205.141)(426.667,201.074)(426.667,196.907)
\psbezier(426.667,112.384)(365.17,42.396)(284.501,28.814)
\psbezier(301.412,25.131)(313.387,21.575)(298.667,14.222)
\psbezier(282.809,6.28601)(266.937,16.057)(256.014,26.24)
\psline(255.986,26.24)
\psbezier(245.049,16.057)(229.205,6.28601)(213.333,14.222)
\psbezier(198.613,21.575)(210.588,25.131)(227.499,28.814)
\psbezier(146.844,42.396)(85.333,112.384)(85.333,196.907)
\psbezier(85.333,201.074)(85.66,205.141)(85.959,209.237)
\psbezier(79.09,303.118)(-3.68301,440.889)(256,440.889)
\psbezier(515.684,440.889)(432.896,303.118)(426.041,209.237)
\closepath
}
%% Path : 3
\pscustom[fillstyle=solid,fillcolor=CouleurIV,linestyle=none]{
\moveto(298.667,199.111)
\psbezier(298.667,222.677)(279.566,227.556)(256,227.556)
\psbezier(232.434,227.556)(213.333,222.677)(213.333,199.111)
\psbezier(213.333,175.545)(232.434,156.444)(256,156.444)
\psbezier(279.566,156.444)(298.667,175.545)(298.667,199.111)
\closepath
}
%% Path : 4
\pscustom[fillstyle=solid,fillcolor=CouleurV,linestyle=none]{
\moveto(184.889,163.556)
\psbezier(184.889,175.346)(175.346,184.889)(163.556,184.889)
\psbezier(151.765,184.889)(142.222,175.346)(142.222,163.556)
\psbezier(142.222,151.765)(151.765,142.222)(163.556,142.222)
\psbezier(175.346,142.222)(184.889,151.765)(184.889,163.556)
\closepath
}
%% Path : 5
\pscustom[fillstyle=solid,fillcolor=CouleurV,linestyle=none]{
\moveto(369.778,163.556)
\psbezier(369.778,175.346)(360.22,184.889)(348.444,184.889)
\psbezier(336.668,184.889)(327.111,175.346)(327.111,163.556)
\psbezier(327.111,151.765)(336.668,142.222)(348.444,142.222)
\psbezier(360.22,142.222)(369.778,151.765)(369.778,163.556)
\closepath
}
%% Path : 6
\pscustom[fillstyle=solid,fillcolor=CouleurVI,linestyle=none]{
\moveto(440.889,355.556)
\psline(398.222,341.333)
\psline(341.333,426.667)
\psline(298.667,355.556)
\psline(270.222,384)
\psline(213.333,355.556)
\psline(170.667,412.444)
\psline(128,327.111)
\psline(85.333,355.556)
\psline(38.485,245.12)
\psbezier(31.986,264.306)(28.444,284.672)(28.444,305.778)
\psbezier(28.444,419.684)(130.332,512)(256,512)
\psbezier(381.668,512)(483.556,419.684)(483.556,305.778)
\psbezier(483.556,288.085)(480.839,271.019)(476.203,254.62)
\psline(440.889,355.556)
\closepath
}
\end{pspicture}
}
\end{document}

enter image description here

11

One can also make very realistic movies. ;-)

UPDATE: Made use of a transparency group. This avoids making hidden parts visible. Presumably it is always a good idea to use a transparency group if you want to play with the opacity of a tikzling.

\documentclass[border=3.14mm,tikz]{standalone}
\usepackage{tikz-3dplot}
\usetikzlibrary{patterns,marmots,ducks,3d,shapes.callouts,calc}
\makeatletter % https://tex.stackexchange.com/a/48776/121799
\tikzoption{canvas is xy plane at z}[]{%
  \def\tikz@plane@origin{\pgfpointxyz{0}{0}{#1}}%
  \def\tikz@plane@x{\pgfpointxyz{1}{0}{#1}}%
  \def\tikz@plane@y{\pgfpointxyz{0}{1}{#1}}%
  \tikz@canvas@is@plane
}
\makeatother
%
\tikzset{
brick height/.store in=\BrickHeight, 
brick height=10pt,
brick width/.store in=\BrickWidth, 
brick width=20pt,
}

\tikzset{Wall/.style args={with colors #1 and #2}{path picture={
\fill[#1] let \p1=($(path picture bounding box.north east)-(path picture bounding
box.south west)$), \n1={int(scalar(\x1/\BrickWidth)+1))},
\n2={int(scalar(\y1/\BrickHeight)+1)} in
foreach \WallX in {1,...,\n1}
 {foreach \WallY in {1,...,\n2}
 {($(path picture bounding box.south west)+({(\WallX-2)*\BrickWidth},
 {(\WallY-1)*\BrickWidth})$) rectangle ++ (2*\BrickWidth,2*\BrickHeight)}
};
\draw[#2] let \p1=($(path picture bounding box.north east)-(path picture bounding
box.south west)$), \n1={int(scalar(\x1/\BrickWidth)+1))},
\n2={int(scalar(\y1/\BrickHeight)+1)} in
foreach \WallX in {1,...,\n1}
 {foreach \WallY in {1,...,\n2}
 {($(path picture bounding box.south west)+({(\WallX-2)*\BrickWidth},
 {(\WallY-1)*\BrickWidth})$)  -- ++ (2*\BrickWidth,0)
 ($(path picture bounding box.south west)+({(\WallX-2)*\BrickWidth},
 {(\WallY-1/2)*\BrickWidth})$)  -- ++ (2*\BrickWidth,0)
 ($(path picture bounding box.south west)+({(\WallX-2)*\BrickWidth},
 {(\WallY-1)*\BrickWidth})$)  -- ++ (0,\BrickHeight)
 ($(path picture bounding box.south west)+({(\WallX-1.5)*\BrickWidth},
 {(\WallY-1.5)*\BrickWidth})$)  -- ++ (0,\BrickHeight)}
};
}}}
\tikzset{pics/.cd,
  duck/.style={code={\duck[#1]}},
  marmot/.style={code={\marmot[#1]}}
}
%
\newcommand\QueenRhyme[1]{\ifcase#1
\or
Mirror,
\or
mirror
\or
on
\or
the
\or
wall,
\or
who
\or
is
\or
the
\or
cutest
\or
of
\or
them
\or
all?
\or
\or
\or
\fi
}
\begin{document}
\tdplotsetmaincoords{110}{-30}
\foreach \X [count=\Y] in {-1,-0.9,...,1}
{\begin{tikzpicture}[font=\sffamily]
 \path[use as bounding box] (-3,-2) rectangle (6,5);
 \pgfmathtruncatemacro{\xtest}{sign(cos(\tdplotmainphi+90))}
 \pgfmathtruncatemacro{\ytest}{sign(-cos(\tdplotmainphi))}
 \begin{scope}[tdplot_main_coords]
  \begin{scope}[canvas is xy plane at z=0,transform shape]
   \fill[brown!80!black] (0,0) rectangle (10,8);
  \end{scope}
  \begin{scope}[canvas is xz plane at y=0,transform shape]
    \draw[Wall={with colors gray!50!black and gray!60}] (0,0) rectangle (10,10);
  \end{scope}
  \begin{scope}[canvas is xz plane at y=3,transform shape]
      \pic[local bounding box=duck] at (4.5,0.5) {duck={crown,laughing, bill=red,longhair=black}};
      \ifnum\Y<13
       \node[ellipse callout,fill=white, draw,anchor=east, callout absolute
     pointer={(4.7,2)},text width=1.5cm,align=center] 
     (song) at (5.5,3.4) {\QueenRhyme{\Y}};
      \fi
  \end{scope}
  \begin{scope}[canvas is yz plane at x=0,transform shape]
   \draw[Wall={with colors gray!50!black and gray!60}] (0,0) rectangle (10,10);
   \shade[top color=blue!20,bottom color=blue!30,middle color=blue!10] (1.5,1) rectangle (5.5,5);
   \ifnum\Y>10
   \begin{scope}[transparency group,opacity=\X]
   \pic at (2.5,1.6) {marmot={whiskers,teeth}};
   \end{scope}
   \fi
  \end{scope}
 \end{scope}
\end{tikzpicture}}
\end{document}

enter image description here

10

This is more work in progress. A first attempt to adapt @samcarter's stellar tikzduck and tikzmarmot packages to draw koalas. This is the style file

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% The tikzkoalas package
% A package to bring little koalas into tikz
% Maintained by ...
%
% Project repository and bug tracker:
% ...
%
% Released under the LaTeX Project Public License v1.3c or later
% See http://www.latex-project.org/lppl.txt
%
% Version 0.1
% August 29, 2018  
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\ProvidesPackage{tikzkoalas}
 [2018/08/29 v0.1 Drawing koalas in TikZ]

\RequirePackage{tikzducks}

\usetikzlibrary{fadings} 

\tikzfading[name=tikzling@blush,
inner color=transparent!50,
outer color=transparent!100]



\newcommand*{\koala}[1][]{%
    \begin{scope}%
        \tikzset{/koala/.cd,#1}%
        \koala@draw%
    \end{scope}%
}

\newif\ifkoala@name
\newif\ifkoala@blush
\newif\ifkoala@whiskers
\newif\ifkoala@sleeping
\newif\ifkoala@threeD

\definecolor{koala@gray}{RGB}{160,160,160}

\tikzset{
  %
  % Pass unknown keys on to tikz
  %
  /koala/.search also={/tikz,/pgf},
  /koala/.cd,
  name/.code         = \koala@nametrue \def\koala@name{#1},
  %
  % body
  %
  body/.code         = \def\koala@body{#1},
  body               = koala@gray,
  %
  % options
  %
  blush/.code            = \koala@blushtrue,
  sleeping/.code        = \koala@sleepingtrue,
  3D/.code           = \koala@threeDtrue,
}




\def\koala@draw{%
\ifkoala@threeD
        \def\koala@part@draw[##1]{\shade[ball color=##1]}
\else
        \def\koala@part@draw[##1]{\fill[##1]}
\fi
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% minimal bounding box size 
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\path (0.3,0.1) rectangle (1.83,2.17);
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Body parts
% 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Feet %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\fill[\koala@body!50!black] (1.18,0.2) ellipse (0.23 and 0.09); 
\fill[\koala@body!50!black] (0.67,0.2) ellipse (0.23 and 0.09);
%
% Ears %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\koala@part@draw[\koala@body] (1.33,2.13) ellipse (0.3 and 0.23);
\fill[\koala@body!40!white] (1.33,2.13) ellipse (0.15 and 0.12);
\koala@part@draw[\koala@body] (0.52,2.13) ellipse (0.3 and 0.23);
\fill[\koala@body!40!white] (0.52,2.13) ellipse (0.15 and 0.12);
%
% Body %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\koala@part@draw[\koala@body] (1.48,0.92) .. controls (1.48,0.26) and (1.28,0.18) .. (0.95,0.18) .. controls (0.61,0.18) and (0.28,0.26) .. (0.28,0.92) .. controls (0.28,1.58) and (0.59,2.17) .. (0.92,2.17) .. controls (1.25,2.17) and (1.48,1.58) .. (1.48,0.92) -- cycle;
%
% Head %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\koala@part@draw[\koala@body] (0.925,1.7) ellipse (0.55 and 0.45);
%
% Belly %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\koala@part@draw[\koala@body!40!white] (1.35,0.71) .. controls (1.35,0.41) and (1.17,0.27) .. (0.92,0.27) .. controls (0.69,0.27) and (0.48,0.41) .. (0.48,0.71) .. controls (0.48,1.01) and (0.67,1.26) .. (0.91,1.26) .. controls (1.15,1.26) and (1.35,1.01) .. (1.35,0.71) -- cycle;
%
% Arms %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\koala@part@draw[\koala@body,rotate around={-110:(0.3,1)}] (0.3,1) ellipse (0.42 and 0.13);
\fill[\koala@body!50!black,rotate around={-20:(0.18,0.65)}] (0.18,0.65) ellipse (0.12 and 0.08);
\koala@part@draw[\koala@body,rotate around={-70:(1.55,1)}] (1.55,1) ellipse (0.42 and 0.13);
\fill[\koala@body!50!black,rotate around={20:(1.67,0.65)}] (1.67,0.65) ellipse (0.12 and 0.08);
%
% Nose %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\shade[ball color=black] (0.775,1.6) to[out=-110,in=180] (0.925,1.45)
to[out=0,in=-70] (1.075,1.6) to[out=110,in=-45] (1,1.74)
to[out=135,in=45] (0.85,1.74) to[out=-135,in=70] cycle;
%(0.925,1.6) circle (0.15);
%
% Eyes %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\ifkoala@sleeping
    \draw[thin] (0.59,1.77) arc (180:360:0.08 and 0.04);
    \draw[ultra thin] (0.59,1.77) arc (180:0:0.08 and 0.08);
    \draw[thin] (1.26,1.77) arc (0:-180:0.08 and 0.04);
    \draw[ultra thin] (1.26,1.77) arc (0:180:0.08 and 0.08);
    \foreach \koala@X in {-135,-112.5,-90,-67.5,-45}
     { \draw[very thin] (0.67,1.77) ++(\koala@X:0.08 and 0.04)  -- 
     ++ ({(\koala@X+90)/2-90}:0.06 and 0.03);
     \draw[very thin] (1.18,1.77) ++(\koala@X:0.08 and 0.04)  -- 
     ++ ({-90+(90+\koala@X)/2}:0.06 and 0.03);} 
\else
    \shade[ball color=black] (0.67,1.77) circle (0.08); 
    \shade[ball color=black] (1.18,1.77) circle (0.08); 
\fi
%
% Mouth %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\ifkoala@threeD
    \draw[black,thick] (1.02,1.42) arc [start angle=-50, end angle=-130, radius=0.16];
\else   
    \draw[\koala@body!50!black,thick] (1.02,1.42) arc [start angle=-50, end angle=-130, radius=0.16];
\fi
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% optional
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Blushed %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\ifkoala@blush
    \fill[red,path fading=tikzling@blush] (0.63,1.55) circle (0.1); 
    \fill[red,path fading=tikzling@blush] (1.22,1.55) circle (0.1);
\fi
%
}

And here is an MWE:

\documentclass[border={1cm 3.14mm 1cm 3.14mm}]{standalone}
\usepackage{tikzkoalas}
\begin{document}
\begin{tikzpicture}
 \node[anchor=south,align=center] at (0.925,3) {\verb|\koala|};
 \koala 
\end{tikzpicture}
\begin{tikzpicture}
 \node[anchor=south,align=center] at (0.925,3) {\verb|\koala[3D]|};
 \koala[3D] 
\end{tikzpicture}
\begin{tikzpicture}
 \node[anchor=south,align=center] at (0.925,3) {\verb|\koala[sleeping]|};
 \koala[sleeping] 
\end{tikzpicture}
\begin{tikzpicture}
 \node[anchor=south,align=center] at (0.925,3) {\verb|\koala[blush,3D]|};
 \koala[blush,3D] 
\end{tikzpicture}
\begin{tikzpicture}
 \node[anchor=south,align=center] at (0.925,3) {\verb|\koala[sleeping,3D]|};
 \koala[sleeping,3D] 
\end{tikzpicture}
\end{document}

enter image description here

10

This is just a proposal … I wanted to make this ship with some beach and some hills with forests and so on … but for now just the ship.

\documentclass[border=5pt,tikz]{standalone}
\usepackage{tikzducks}
\usetikzlibrary{calc,decorations.text}
\definecolor{Orange}{RGB}{255,178,70}
\definecolor{dunkel}{RGB}{201,45,4}
\definecolor{mast}{RGB}{255,132,22}
\definecolor{segel}{RGB}{255,249,203}
\definecolor{flagge}{RGB}{212,32,41}
\definecolor{gelb}{RGB}{255,199,76}
\definecolor{strand}{RGB}{254,246,174} %for beach
\begin{document}
    \begin{tikzpicture}
        \draw[xshift=-.1cm,fill=mast] (3.1,-2.1) -- (3.15,1.9) arc(-180:-360:.05) -- (3.3,-2.1) -- cycle;
        \draw[fill=mast,rotate=-10,xshift=2cm,yshift=.5cm,rounded corners=1pt] (0,0) rectangle (2,.1);
        \draw[fill=mast,rotate=-10,xshift=1.6cm,yshift=1.9cm,rounded corners=1pt] (0,0) rectangle (2.5,.1);
            \draw[fill=segel,xshift=1.6cm,yshift=1.9cm] (2.3,-.66) to[bend right=45] (2.55,-1.8) .. controls (.3,-.8) and (.4,-1.4) .. (.3,-1.5) to[bend left=45] (.5,-.34) -- cycle;
            \draw[fill=segel,xshift=1.5cm,yshift=.5cm] (.58,-.35) to[bend right=45] (.6,-1.8) .. controls (.2,-1.4) and (2,-1.5) .. (2.4,-2) to[bend left=30] (2.3,-.66) -- cycle;
                \draw[fill=Orange] (5.3,-1.2) -- (5.25,-1.7) .. controls (5.2,-2) and (5.4,-2.1) .. (5.5,-2.15) 
                %to[bend left=45] (5.5,-4);
                .. controls (5.8,-3) and (6,-3.5) .. (5.5,-4) .. controls (2.6,-4.5) and (2.7,-4.3) .. (.1,-3.98) to[bend right=5] (.05,-2) to[bend right=5] (.05,-1.6) to[bend right=5] (2,-1.8) to[bend right=5] (2.2,-2.1) -- (4.1,-2) to[bend right=45] (4.1,-1.2);
                    \draw[fill=dunkel] (0,-1.5) to[bend right=5] (2,-1.8) --+ (.3,-.3) --+ (2,-.2) arc(270:360+90:.25 and .4) --+ (1.3,0) --+ (1.3,-.1) --+ (.25,-.08) arc(90:270:-.15 and .4) --+ (-2,-.13) to[bend left=10] (1.95,-1.9) to[bend left=3] (0,-1.65);
                        \draw[fill=dunkel] (0,0) -- (.2,.05) to[bend right=7] (.3,-4) --+ (-.2,-.05) to[bend left=5] (0,0);
                    \fill[dunkel] (.7,-2.2) circle(.25);
                    \fill[gelb] (.7,-2.2) circle(.15);
                \foreach \x in {4.5,4.75,5}
                {
                    \fill[rounded corners=1pt,dunkel,xshift=\x cm,yshift=-2cm] (0,0) rectangle (.15,.5);
                }
        \draw[fill=dunkel,xshift=5cm,yshift=-1.2cm] (0,0) rectangle (.1,1);
        \node[minimum width=1cm,minimum height=.5cm,xshift=5.45cm,yshift=-1.27cm,above] (a) at (.05,1) {};
            \draw[fill=flagge] (a.south west) to[bend left=45] ($(a.south west)!.5!(a.south east)$) to[bend right=45] (a.south east) -- (a.north east) to[bend left=45] ($(a.north east)!.5!(a.north west)$) to[bend right=45] (a.north west) -- cycle;
        \path [xshift=1.35cm,yshift=.9cm,postaction={decorate,decoration={text along path,text align=center,text={TeX.SX}}}] (.6,-2) .. controls (.2,-1.4) and (2,-1.5) .. (2.4,-2);
        \path [rotate=180,xshift=-4.35cm,yshift=-2.2cm,postaction={decorate,decoration={text along path,text align=center,text={|\tt|@samcarter}}}] (2.55,1.8) .. controls (2.7,.8) and (1,1.4) .. (.3,1.8);
        \begin{scope}[scale=.2,xshift=2cm,yshift=-7.85cm,rotate=-20]
            \duck[speech={\scalebox{.2}{\rotatebox{-25}{Argh!!!}}}]
        \end{scope}
        \begin{scope}[scale=.2,xshift=13.6cm,xscale=-1,yshift=-10.3cm,rotate=-10]
            \duck[sunglasses=blue,speech={\scalebox{.2}{\rotatebox{15}{Nah.}}}]
        \end{scope}
        \begin{scope}[scale=.2,xshift=23cm,xscale=-1,yshift=-5.85cm,rotate=-10]
            \duck[recedinghair=white,beard,speech={\scalebox{.1}{\rotatebox{15}{Follow the sun!}}}]
        \end{scope}
        \begin{scope}[shift={(2.6,2.4)}]
            \fill[even odd rule,brown!80!black] (0,0) arc(180:360:.5) (0,0) arc(180:360:.5 and .2);
            \draw[brown!80!black,fill=white] (.5,0) circle(.5 and .2);
        \end{scope}
        \begin{scope}[scale=.2,xshift=14.5cm,yshift=11.5cm,rotate=-10]
            \duck[hat=black!70!brown!50!blue,cape=magenta,speech={\scalebox{.15}{\rotatebox{-15}{Fly away!}}}]
        \end{scope}
    \end{tikzpicture}
\end{document}

Here is the output:

Screenshot


UPDATE: This is just a little comic – feel free to complete the story!

\documentclass[border=5pt,tikz]{standalone} %article
\usepackage{tikzmarmots,tikzducks}
\usetikzlibrary{calc,shapes,positioning}
\definecolor{forest}{RGB}{34,139,34}
\definecolor{aqua}{RGB}{127,255,212}
\definecolor{ground}{RGB}{239,206,163}
\definecolor{gras}{RGB}{98,174,48}
\definecolor{sky}{RGB}{135,206,235}
\definecolor{navo}{RGB}{255,222,173}
\definecolor{water}{RGB}{64,164,223}
\begin{document}
%   \resizebox{\textwidth}{!}{
    \begin{tikzpicture}
        \begin{scope}
            \clip (-.1,-6.1) rectangle (8.06,3.1);
            \draw[shorten >=-4cm,double distance=1mm] ($(0,0)!.6!(8,.5)$) --+ (.5,-.5);
            \draw[double distance=1mm] (0,0) -- (8,.5);
                \draw[double distance=1mm] (0,-6) rectangle (8,3);
            \draw[double distance=1mm] (.06,-3) -- (7.95,-3);
        \end{scope}
        \begin{scope}
            \clip (.05,.05) -- (7.95,.57) -- (7.95,2.95) -- (.05,2.95) -- cycle;
            \foreach \x in {-1.2,-1,...,10}
            \foreach \y in {.2,.4,...,10}
            {
                \fill[red] (\x,\y) circle(1pt);
            }
            \node[minimum width=2cm,fill=white,cloud,draw,inner sep=0pt,cloud puffs=20] at (4,1.6) {\LARGE\bf BANG!};
        \end{scope}
        \begin{scope}
            \clip (.07,-.05) -- ([yshift=-.05cm]$(0,0)!.6!(8,.5)$) -- ([yshift=.05cm]7.95,-3) -- ([yshift=.05cm].07,-3) -- cycle;
%               \fill[orange!20] (0,-3) rectangle (10,3);
            \begin{scope}[yshift=-3cm]
%                   \fill[rounded corners=.2cm,aqua] (2,.07) rectangle (9,1);
                    \fill[bottom color=sky,top color=sky!40] (0,0) rectangle (8,3.5);
                            \fill[xshift=-1cm,gras] (0,1) -- (4,1) to[bend right=20] (0,1);
                            \fill[xshift=1cm,gras] (0,1) -- (4,1) to[bend right=30] (0,1);
                            \fill[xshift=2cm,gras] (0,1) -- (4,1) to[bend right=40] (0,1);
                            \fill[xshift=3.5cm,gras] (0,1) -- (4,1) to[bend right=25] (0,1);
                        \fill[yshift=1cm,rounded corners=.1cm,ground] (-1,.07) rectangle (8,-1);
                \marmot\coordinate (a) at (1,1.45);
                    \node at (6.5,.5) {\tiny\sl
                        \begin{tabular}{l}
                            Meanwhile in \\
                            \textsc{New Marmot} \ldots
                        \end{tabular}
                    };
                \node[text width=3.5cm,
                      fill=white,rectangle callout,
                      callout absolute pointer=(a.west),
                      draw] at (3.7,1.7) 
                      {\small I've got the magical letter \emph{\color{orange}k}. What should I do now?};
                    \node[rotate=-50,orange] at (.7,.65) {\emph{k}};
            \end{scope}
        \end{scope}
        \begin{scope}
            \clip ($(.35,0)!.6!(8,.4)$) -- (7.94,.45) -- (7.94,-2.75) -- cycle;
            \foreach \x in {0,.2,...,4.4}
            {
                \draw[xshift=5cm,red,ultra thick,xshift=\x cm] (60:.5) -- (240:3.1);
            }
            \node[fill=white,star,star points=10,draw] at (7,-1) {\sl Swoosh!};
        \end{scope}
        \begin{scope}
            \clip (.07,-3.05) -- (7.95,-3.05) -- (7.95,-5.93) -- (.07,-5.93) -- cycle;
                        \fill[navo,yshift=-4.4cm] ([xshift=4.25cm]0,-.4) -- ([xshift=4.25cm]0,-2) -- ([xshift=7.75cm]0,-2) -- ([xshift=7.75cm]0,-.4) arc(0:-180:1.75cm and 1.1cm) --+ (0,-2);
                    \fill[xshift=6cm,yshift=-4.8cm,navo!90!black] (0,0) circle(1.8cm and 1.1cm);
                        \draw[ultra thick,red,xshift=4.25cm,yshift=-4.5cm,navo!90!black] (0,-.4) -- (0,-2);
                        \draw[ultra thick,red,xshift=7.75cm,yshift=-4.5cm,navo!90!black] (0,-.4) -- (0,-2);
                \fill[xshift=6cm,yshift=-4.8cm,water!60] (0,0) circle(1.7cm and 1cm);
%               \begin{scope}[xshift=-3.5cm]
%                   \fill[navo!90,yshift=-4.4cm] ([xshift=4.25cm]0,-.4) -- ([xshift=4.25cm]0,-2) -- ([xshift=7.75cm]0,-2) -- ([xshift=7.75cm]0,-.4) arc(0:-180:1.75cm and 1.1cm) --+ (0,-2);
%                   \fill[xshift=6cm,yshift=-4.8cm,navo!70!brown] (0,0) circle(1.8cm and 1.1cm);
%                   \draw[ultra thick,red,xshift=4.25cm,yshift=-4.5cm,navo!70!brown] (0,-.4) -- (0,-2);
%                   \draw[ultra thick,red,xshift=7.75cm,yshift=-4.5cm,navo!70!brown] (0,-.4) -- (0,-2);
%                   \fill[xshift=6cm,yshift=-4.8cm,water!60] (0,0) circle(1.7cm and 1cm);
%               \end{scope}
%               \begin{scope}[xshift=-7cm]
%                   \fill[navo,yshift=-4.4cm] ([xshift=4.25cm]0,-.4) -- ([xshift=4.25cm]0,-2) -- ([xshift=7.75cm]0,-2) -- ([xshift=7.75cm]0,-.4) arc(0:-180:1.75cm and 1.1cm) --+ (0,-2);
%                   \fill[xshift=6cm,yshift=-4.8cm,navo!90!black] (0,0) circle(1.8cm and 1.1cm);
%                   \draw[ultra thick,red,xshift=4.25cm,yshift=-4.5cm,navo!30!brown] (0,-.4) -- (0,-2);
%                   \draw[ultra thick,red,xshift=7.75cm,yshift=-4.5cm,navo!30!brown] (0,-.4) -- (0,-2);
%                   \fill[xshift=6cm,yshift=-4.8cm,water!60] (0,0) circle(1.7cm and 1cm);
%               \end{scope}
            \begin{scope}[shift={(2,-5.75)}]
            \begin{scope}[xshift=3cm]
                \duck
                    \node[text width=3cm,rounded corners=4pt,fill=white,draw,rectangle callout,callout absolute pointer={([xshift=-.2cm]bill)}] at (-3,1) {Oh no, our beautiful letter \emph{\color{orange}k}, it's missing!};
                \end{scope}
                        \node at (5,2.4) {\tiny\sl
                            \begin{tabular}{l}
                                Somewhere else \\
                                in Duc\underline{\textcolor{white}{k}}\textcolor{forest}{\textit{city}} \ldots
                            \end{tabular}
                        };
                \end{scope}
        \end{scope}
    \end{tikzpicture}
%}
\end{document}

Here is the output:

Screenshot

  • 2
    Noah’s ark for the TeX menagerie! – Thérèse Aug 31 '18 at 16:22
  • 2
    This is gorgeous! – user36296 Sep 2 '18 at 22:49
  • 2
    I wished I could upvote a second time for the comic! – user36296 Sep 3 '18 at 22:26
  • 1
    I guess I know the answer: they will continue as duc and markmot. ;-) Really nice! ;-) – marmot Sep 3 '18 at 22:28
10

A Ulysses butterfly made using the tikz and animate packages. The wings flap intermittently.

enter image description here

It might be possible to adapt this code to create other species of butterflies. If anyone does this please tag me to show me what you create. I'd love to see it. :)

\documentclass[a4paper,landscape]{article}
%\documentclass[export]{standalone}
% All design and code created by Ulysses. Please credit me if you use a significant portion of this anywhere.

\usepackage[margin=0.5cm]{geometry}
\usepackage{animate}
\usepackage{tikz}
\usepackage{times}
\usetikzlibrary{decorations.text}

\newcommand{\halfwing}[1]{
\begin{scope}[yscale=1,xscale=#1]
    % Lower Wing
    \filldraw[fill=black!90!white!,draw=black,thick,rounded corners=1mm] (0,0.2) -- (0,1.4) -- (-2,1.4) .. controls (-4,0.8) .. (-4.3,0.2) .. controls (-4.48,0.08) .. (-4.5,-0.15) .. controls (-4.9,-0.5) and (-4.9,-0.7) .. (-4.7,-0.9) .. controls (-4.7,-1) .. (-4.6,-1.1) .. controls (-4.9,-1.8) .. (-4.2,-2) -- (-4,-2.4) .. controls (-4.1,-3) .. (-3.6,-3.1) -- (-3.25,-3.7) .. controls (-3.5,-4.5) .. (-4.1,-5.4) .. controls (-4.2,-5.9) and (-3.6,-5.9) .. (-3.5,-5.4) .. controls (-3.55,-5.1) and (-3.4,-4.8) .. (-3,-4.1) -- (-2.6,-4.1) .. controls (-2.35,-4.35) .. (-2,-4.2) .. controls (-1.75,-4.6) and (-1.25,-4.6) .. (-1.25,-3.90) .. controls (-0.9,-4) .. (-0.6,-2.8) -- (-0.3,-1) -- (0,0.2);
    \shadedraw[top color=blue!45!cyan!,bottom color=blue!20!cyan!,draw=black,rounded corners=1mm] (-0.8,-3) .. controls (-0.5,-2) .. (-0.30,-0.95){[rounded corners=0mm] .. controls (-0.15,-0.3) .. (-0.05,0.45) -- (-0.05,0.7)} -- (-0.7,0.4) .. controls (-0.9,-2) .. (-0.8,-3);
    \shadedraw[top color=blue!60!cyan!,bottom color=blue!20!cyan!,draw=black] (-1.1,-2.9) .. controls (-1.4,2) and (0.5,2) .. (-1.1,-2.9);
    \shadedraw[top color=blue!70!cyan!,bottom color=blue!20!cyan!,draw=black] (-1.6,-2.8) .. controls (-0.9,3.7) and (0,-0.1) .. (-1.6,-2.8);
    \shadedraw[top color=blue!70!cyan!,bottom color=blue!20!cyan!,draw=black] (-2.1,-2.6) .. controls (-0.9,3.7) and (-0.3,-0.1) .. (-2.1,-2.6);
    \shadedraw[top color=blue!80!cyan!,bottom color=blue!20!cyan!,draw=black] (-2.6,-2.2) .. controls (-0.3,3.7) and (-0.3,-0.1) .. (-2.6,-2.2);
    \shadedraw[top color=blue!80!cyan!,bottom color=blue!20!cyan!,draw=black] (-3,-1.7) .. controls (0.1,3.7) and (0.1,-0.1) .. (-3,-1.7);
    \shadedraw[top color=blue!80!cyan!,bottom color=blue!20!cyan!,draw=black] (-3.4,-1.2) .. controls (0.77,3) and (0.77,-0.2) .. (-3.4,-1.2);
    \shadedraw[top color=blue!80!cyan!,bottom color=blue!20!cyan!,draw=black] (-3.6,-0.6) .. controls (0.77,2.2) and (0.77,-0.5) .. (-3.6,-0.6);
    \shadedraw[top color=blue!80!cyan!,bottom color=blue!15!cyan!,draw=black] (-3.5,0) .. controls (0.77,1.8) and (0.77,-0.2) .. (-3.5,0);
    \shadedraw[top color=blue!80!cyan!,bottom color=blue!10!cyan!,draw=black] (-2.5,0.7) .. controls (0.77,2) and (0.77,0) .. (-2.5,0.7);
    \shadedraw[top color=blue!45!cyan!,bottom color=blue!15!cyan!,draw=black] (-0.05,0.6) -- (-0.05,0.9) .. controls (-4,-0.5) and (-1.5,-2) .. (-0.05,0.6);

    % Upper Wing
    \filldraw[fill=black!90!white!,draw=black,thick] (0,1) -- (0,2.2) [rounded corners=7mm] parabola[bend at end] (-6,6) -- (-5,1) -- (0,1);
    \shadedraw[top color=blue!20!cyan!,bottom color=blue!70!cyan!,draw=black] (-4,3.5) .. controls (3,-1) and (-2,4) .. (-4,3.5);
    \shadedraw[top color=blue!15!cyan!,bottom color=blue,draw=black] (-4.1,3) .. controls (3.9,-0.5) and (-2.1,4) .. (-4.1,3);
    \shadedraw[top color=blue!15!cyan!,bottom color=blue!80!cyan!,draw=black] (-4.2,2.5) .. controls (4,-0.2) and (-2.2,3.5) .. (-4.2,2.5);
    \shadedraw[top color=blue!15!cyan!,bottom color=blue!70!cyan!,draw=black] (-4.2,1.8) .. controls (4,0.3) and (-2.2,3) .. (-4.2,1.8);
    \shadedraw[top color=cyan,bottom color=blue!60!cyan!,draw=black] (-4.2,1.2) .. controls (4.05,0.9) and (-2.2,2.4) .. (-4.2,1.2);
    \shadedraw[top color=cyan,bottom color=blue!60!cyan!,draw=black] (-0.05,1.85) -- (-0.05,1.80) .. controls (-6.5,6.5) and (-2,5.5) .. (-0.05,1.85);
    \shadedraw[top color=blue!10!cyan!,bottom color=blue!50!cyan!,draw=black] (-0.05,1.8) -- (-0.05,1.4) .. controls (-7.5,5.5) and (-2,5) .. (-0.05,1.8);
\end{scope}
}

\newcommand{\butterfly}[1]{
\begin{tikzpicture}
    % Guide lines
    %\draw[step=1cm,lightgray,very thin] (-20,-14) grid (20,14);
    %\begin{scope}[xshift=-0.35cm]
    %\draw[step=0.2cm,lightgray,very thin] (-7,-7) grid (0,2);
    %\draw[step=1cm,cyan,very thin] (-7,-7) grid (0,2);
    %\end{scope}

    % Background
    \filldraw[color=cyan!20!white!,draw=black, line width=3pt] (0,0) circle (10cm);

    % Text
    \draw (0,-7) node {\Huge Papilio Ulysses};
    \draw[decoration={text along path,text={Design and code created by Ulysses.},text align={center}},decorate,rotate=90] (0,0) circle (9.8cm);

    % Antenna
    \draw[thick] (0,2.7) parabola[bend at end] (-1.5,5.2);
    \filldraw[fill=black!80!white!,draw=black,thick] (-1.5,5.2) .. controls ++(-0.2,0.1) and ++(-0.5,-0.3) .. ++(0,0);
    \begin{scope}[yscale=1,xscale=-1]
    \draw[thick] (0,2.7) parabola[bend at end] (-1.5,5.2);
    \filldraw[fill=black!80!white!,draw=black,thick] (-1.5,5.2) .. controls ++(-0.2,0.1) and ++(-0.5,-0.3) .. ++(0,0);
    \end{scope}

    % Body
    \filldraw[fill=black!80!white!,draw=black,thick,rounded corners=2.5mm] (0,2.5) -- (0.35,2.5) -- (0.45,1.5) -- (0.45,0) -- (0.25,-2) -- (-0.25,-2) -- (-0.45,0) -- (-0.45,1.5) -- (-0.35,2.5) -- (0,2.5);
    \shade[inner color=black!70!white!,outer color=black!80!white!] (0,2.24) ellipse (0.35cm and 0.24cm);
    \shade[inner color=black!70!white!,outer color=black!80!white!] (0,1.75) ellipse (0.4cm and 0.25cm);
    \shade[inner color=black!70!white!,outer color=black!80!white!] (0,1.25) ellipse (0.42cm and 0.25cm);
    \shade[inner color=black!70!white!,outer color=black!80!white!] (0,0.75) ellipse (0.42cm and 0.25cm);
    \shade[inner color=black!70!white!,outer color=black!80!white!] (0,0.25) ellipse (0.42cm and 0.25cm);
    \shade[inner color=black!70!white!,outer color=black!80!white!] (0,-0.25) ellipse (0.4cm and 0.25cm);
    \shade[inner color=black!70!white!,outer color=black!80!white!] (0,-0.75) ellipse (0.35cm and 0.25cm);
    \shade[inner color=black!70!white!,outer color=black!80!white!] (0,-1.25) ellipse (0.3cm and 0.25cm);
    \shade[inner color=black!70!white!,outer color=black!80!white!] (0,-1.74) ellipse (0.25cm and 0.24cm);

    % Head
    \shadedraw[inner color=black!60!white!,outer color=black!80!white!,draw=black,thick,rounded corners=2mm] (0,3) -- (0.45,3) -- (0.2,2.3) -- (-0.2,2.3) -- (-0.45,3) -- (0,3);
    \shadedraw[inner color=white!60!black,outer color=black, draw=black,thick] (-0.25,2.85) circle (0.2cm);
    \shadedraw[inner color=white!60!black,outer color=black, draw=black,thick] (0.25,2.85) circle (0.2cm);

    % Wings
    \begin{scope}[xshift=-0.35cm]
    \halfwing{#1}
    \end{scope}
    \begin{scope}[xshift=0.35cm]
    \halfwing{-#1}
    \end{scope}
\end{tikzpicture}
}

\begin{document}

\begin{figure}[p]
\centering
\begin{animateinline}[autoplay,loop,scale=1]{13}
    \butterfly{1}
\newframe
    \butterfly{0.883}
\newframe
    \butterfly{0.6}
\newframe
    \butterfly{0.317}
\newframe
    \butterfly{0.2}
\newframe
    \butterfly{0.317}
\newframe
    \butterfly{0.6}
\newframe
    \butterfly{0.883}
\newframe
    \butterfly{1}
\newframe
    \butterfly{0.883}
\newframe
    \butterfly{0.6}
\newframe
    \butterfly{0.317}
\newframe
    \butterfly{0.2}
\newframe
    \butterfly{0.317}
\newframe
    \butterfly{0.6}
\newframe
    \butterfly{0.883}
\newframe
    \butterfly{1}
\newframe
    \butterfly{0.883}
\newframe
    \butterfly{0.6}
\newframe
    \butterfly{0.317}
\newframe
    \butterfly{0.2}
\newframe
    \butterfly{0.317}
\newframe
    \butterfly{0.6}
\newframe
    \butterfly{0.883}
\newframe[1.5]
    \butterfly{1}
\end{animateinline}
\end{figure}
\end{document}
  • 3
    Beautiful! I made an SVG version of it. Just added global option dvisvgm to article and also \pagestyle{empty}. Then, latex, finally dvisvgm --no-fonts --exact --zoom=-1 on the DVI file. – AlexG Dec 14 '18 at 11:17

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.