TikZ-PGF – Solving Problems Drawing a Sleeping Duck

tikz-pgftikzducks

I'm trying to draw a sleeping duck, using the extremely cool tikzducks.sty. And I encounter two problems. To explain them, let me present the MWE first.

\documentclass{standalone}
\usepackage{tikzducks}
\usetikzlibrary{decorations.pathreplacing}
\begin{document}
\begin{tikzpicture}[scale=9] % changing the scale to 1 (or even somewhat larger values) fails
 \duck[eye=yellow!50!brown,pupil=yellow!50!brown]
        \begin{scope}[ultra thick,rotate=-20,decoration={ticks,raise=-4,amplitude=4,segment length=8
        }]
        \draw[decorate] (0.161,1.682) arc [start angle=220, end angle=320,x radius=0.0893, y radius=0.125];
%       \draw[decorate] (0.23,1.7675) ellipse (0.0893 and 0.125); %from tikzducks.sty
        \draw[decorate] (-0.06,1.74) ellipse (0.0786 and 0.1143); %from tikzducks.sty
%       \draw[decorate] (-0.125,1.67) arc [start angle=220, end angle=320,x radius=0.0893, y radius=0.125];
        \end{scope}
\end{tikzpicture}
\end{document}

enter image description here

The right eye (OK, the duck would say it's her left eye) is roughly as I want it to be. However, I had to move the center of the ellipse whose arc I was drawing relative to the values found in tikzducks.sty. On the left I I drew the complete ellipse, and no adjustment of the coordinates was necessary. (Of course, ultimately I'd like only a arc here, too.) So my first question is whether one can draw an elliptical arc sitting on the ellipse without adjusting this coordinate.

What is more, if I downscale the picture, i.e. remove the [scale=9] after begin{tikzpicture}, the compilation fails with a ! Dimension too large. error. Is there a way to fix this? (Or do the ducks have to stay awake all the time? 😉

Best Answer

I wouldn't use decorate. You run into problems at different scales, also you can't really fine tune the length. I would draw the eyelashes one by one, and perhaps even bend some. As the line width doesn't scale, some style to adapt the lashes will be needed. A sleeping mask is perhaps easier ;-).

\documentclass{article}
\usepackage{tikzducks}

\begin{document}

\begin{tikzpicture}[scale=1] 
\duck

\path[rotate=-20]
    (0.23,1.7675)coordinate(ECR) ellipse (0.0893 and 0.125);

\path[rotate=-20]
    (-0.06,1.74)coordinate(ECL) ellipse (0.0786 and 0.1143);

\foreach \x/\y in {0/1,1/2,2/3,3/3.3,4/3,5/2,6/1.4}
{ \draw[brown!50!black,rotate=-20,line cap=round] (ECR)--++(\x*15+220:0.11cm+\y*0.012cm); };

\foreach \x/\y in {0/1,1/2,2/3,3/3.3,4/3,5/2,6/1.4}
{ \draw[brown!50!black,rotate=-20,line cap=round] (ECL)--++(\x*15+220:0.11cm+\y*0.009cm); };
%
%
\fill[rotate=-20,yellow!50!brown]
    (0.23,1.7675) ellipse (0.0893 and 0.125);
%
\fill[rotate=-20,yellow!50!brown]
    (-0.06,1.74) ellipse (0.0786 and 0.1143);

\end{tikzpicture}

\begin{tikzpicture}[scale=5] % changing the scale to 1 (or even somewhat larger values) fails
\duck

\path[rotate=-20]
    (0.23,1.7675)coordinate(ECR) ellipse (0.0893 and 0.125);

\path[rotate=-20]
    (-0.06,1.74)coordinate(ECL) ellipse (0.0786 and 0.1143);

\begin{scope}[ultra thick]
\foreach \x/\y in {0/1,1/2,2/3,3/3.3,4/3,5/2,6/1.4}
{ \draw[brown!50!black,rotate=-20,line cap=round] (ECR)--++(\x*15+220:0.11cm+\y*0.012cm); };

\foreach \x/\y in {0/1,1/2,2/3,3/3.3,4/3,5/2,6/1.4}
{ \draw[brown!50!black,rotate=-20,line cap=round] (ECL)--++(\x*15+220:0.11cm+\y*0.009cm); };
\end{scope}
%
%
\fill[rotate=-20,yellow!50!brown]
    (0.23,1.7675) ellipse (0.0893 and 0.125);
%
\fill[rotate=-20,yellow!50!brown]
    (-0.06,1.74) ellipse (0.0786 and 0.1143);

\end{tikzpicture}
\end{document}

enter image description here