# How to make a simple drawing of an apple using only the tikz library?

I need to make simple drawings for example of fruit for children's math exercises.

How to make a simple drawing of an apple or orange using only the tikz library?

UPDATE

\tikzset {
every cherry fruit/.style = {fill,red},
cherry fruit/.style={every cherry fruit/.append style={#1}},
every cherry stem/.style = {brown, ultra thick},
cherry stem/.style={every cherry stem/.append style={#1}},
every cherry leaf/.style = {fill, green},
cherry leaf/.style={every cherry leaf/.append style={#1}},
cherry/.pic = {
\draw[every cherry fruit] (0,0) {[rounded corners=1cm] -- (1,1) --
(2,-1) -- (0,-3) -- (-2,-1) -- (-1,1)} -- cycle;
\draw[bend left, every cherry stem] (0,0) to coordinate[pos=.7] (A)
(1,2);
\draw[bend left, every cherry leaf] (A) to +(-1.5,1) to cycle;
},
every cherry one/.style={},
cherry one/.style={every cherry one/.append style={#1}},
every cherry two/.style={},
cherry two/.style={every cherry two/.append style={#1}},
two cherries/.pic = {
\pic[every cherry one]{cherry};
\pic[xshift=5cm, every cherry two]{cherry};
}
}

\begin{tikzpicture}
% \pic[cherry fruit=yellow]{cherry};
\pic[xshift=5cm]{cherry};
\end{tikzpicture}


some other way with less code?

• Normally you post a minimal and yet complete code of your specific problem. Maybe check here first: tex.meta.stackexchange.com/questions/228 Feb 2, 2018 at 14:13
• – user2478
Feb 2, 2018 at 14:13
• @Marina: it's very nice to hear about your adventures in writing math exercises for children using TeX and friends! Please consider sharing your experience with us! A TUGboat article regarding math teaching for kids with TeX would be fantastic! Feb 4, 2018 at 9:59
• @PauloCereda: I like the idea of sharing my experience but all the merit is Mark Wibrow who has made wonderful drawings for my exercises. Feb 4, 2018 at 14:31
• @Marina: I understand. :) However, there's a lot of things you could tell us, like figures, layout, fonts and even the rhetoric! Congratulations for helping children discover the wonders of knowledge! Feb 5, 2018 at 7:57

More "icon-style" stuff:

\documentclass[tikz,border=5]{standalone}
\usepackage{xcolor-material}
\usetikzlibrary{fit}
\tikzset{%
apple/.pic={
\fill [MaterialBrown] (-1/8,0)
arc (180:120:1 and 3/2) coordinate [pos=3/5] (@)-- ++(1/6,-1/7)
arc (120:180:5/4 and 3/2) -- cycle;
\fill [MaterialLightGreen500] (0,-9/10)
.. controls ++(180:1/8) and ++(  0:1/4) .. (-1/3,  -1)
.. controls ++(180:1/3) and ++(270:1/2) .. (  -1,   0)
.. controls ++( 90:1/3) and ++(180:1/3) .. (-1/2, 3/4)
.. controls ++(  0:1/8) and ++(135:1/8) .. (   0, 4/7)
.. controls ++( 45:1/8) and ++(180:1/8) .. ( 1/2, 3/4)
.. controls ++(  0:1/3) and ++( 90:1/3) .. (   1,   0)
.. controls ++(270:1/2) and ++(  0:1/3) .. ( 1/3,  -1)
.. controls ++(180:1/4) and ++(  0:1/8) .. cycle;
\fill [MaterialLightGreen600] (0, 4/7)
.. controls ++( 45:1/8) and ++(180:1/8) .. ( 1/2, 3/4)
.. controls ++(  0:1/3) and ++( 90:1/3) .. (   1,   0)
.. controls ++(270:1/2) and ++(  0:1/3) .. ( 1/3,  -1)
.. controls ++(180:1/4) and ++(  0:1/8) .. (   0,-9/10);
\fill [MaterialGreen500, shift={(@)}, rotate=-30]
(0,0) arc (45:135:3/4 and 3/5) arc (225:315:3/4 and 3/5);
\fill [MaterialGreen700, shift={(@)}, rotate=-30]
(0,0) arc (315:225:3/4 and 3/5) -- cycle;
},
orange/.pic={
\fill [MaterialOrange600] (0,0) -- (45:1) arc (45:-135:1) -- cycle;
\fill [MaterialOrange700, shift={(0,3/4)}] coordinate (@)
\begin{scope}
\fill [MaterialOrange700, shift=(@)] (90:1/4 and 1/8)
\foreach \i [evaluate={\j=mod(\i,2)+1/4;}]in {0,...,12}{
-- (90+\i*30:\j*3/4 and \j*3/8) } -- cycle;
\end{scope}
\fill [MaterialBrown] (-1/16, 3/4) -- ++(0,1/4) arc (180:0:1/16 and 1/32)
-- ++(0,-1/4) arc (360:180:1/16 and 1/32) -- cycle;
\fill [MaterialGreen500, shift=(@), rotate=-150]
(0,0) arc (45:135:1/2 and 4/5) arc (225:315:1/2 and 3/5);
\fill [MaterialGreen700, shift=(@), rotate=-150]
(0,0) arc (45:135:1/2 and 4/5) -- cycle;
},
lemon/.pic={
\tikzset{rotate=-45}
\fill [MaterialYellow600] (270:1/3 and   1) arc (270:450:1/3 and   1);
\fill [MaterialYellow600] (270:3/4 and 7/8) arc (270:450:3/4 and 7/8);
\begin{scope}[shift=(90:9/10), rotate=-135]
\fill [MaterialGreen500]
(0,0) arc (45:135:1/2 and 4/5) arc (225:315:1/2 and 3/5);
\fill [MaterialGreen700]
(0,0) arc (45:135:1/2 and 4/5) -- cycle;
\tikzset{rotate=90, scale=3/4}
\fill [MaterialGreen500]
(0,0) arc (45:135:1/2 and 4/5) arc (225:315:1/2 and 3/5);
\fill [MaterialGreen700]
(0,0) arc (45:135:1/2 and 4/5) -- cycle;
\end{scope}
},
cherry/.pic={
\foreach \i in {1,2}{
\tikzset{shift={(-1+\i*3/4, -3/5+\i/5)},scale=1/2, rotate=15-\i*10}
\fill [MaterialRed700] (0,19/20)
.. controls ++(180:1/8) and ++(  0:1/4) .. (-1/3,  1)
.. controls ++(180:1/3) and ++( 90:1/2) .. (  -1,  0)
.. controls ++(270:1/2) and ++(180:1/2) .. (   0, -1)
.. controls ++(  0:1/2) and ++(270:1/2) .. (   1,  0)
.. controls ++( 90:1/2) and ++(  0:1/3) .. ( 1/3,  1)
.. controls ++(180:1/4) and ++(  0:1/8) .. cycle;
\fill [MaterialRed800] (0, -1)
.. controls ++(  0:1/2) and ++(270:1/2) .. (   1,  0)
.. controls ++( 90:1/2) and ++(  0:1/3) .. ( 1/3,  1)
.. controls ++(180:1/4) and ++(  0:1/8) .. (   0,19/20) -- cycle;
\fill [MaterialRed900] (0,3/4) coordinate (@\i)
}
\fill [MaterialBrown]
(1/4,11/8) -- (3/8,11/8) coordinate (@)
.. controls ++(270:1/2) and ++(135:1/3) .. (@1)
.. controls ++(135:1/2) and ++(270:1/2) .. cycle;
\fill [MaterialBrown]
(1/4,11/8) -- (3/8,11/8)
.. controls ++(315:1/2) and ++(45:1/2) .. (@2)
.. controls ++(60:1/2) and ++(315:1/2) .. cycle;
\fill [MaterialGreen500, shift={(@)}, rotate=20]
(0,0) arc (45:135:3/4 and 3/5) arc (225:315:3/4 and 3/5);
\fill [MaterialGreen700, shift={(@)}, rotate=20]
(0,0) arc (315:225:3/4 and 3/5) -- cycle;
}}
\begin{document}
\tikz\foreach \i [evaluate={\j=int(mod(\i, 4));}] in {0,...,11}
\path  (\i*30:5)
\ifcase\j pic {apple} \or pic {orange}
\or pic {lemon} \or pic {cherry}\fi;
\end{document}


And a shark...

\documentclass[tikz,border=5]{standalone}
\usepackage{xcolor-material}
\begin{document}
\begin{tikzpicture}
\begin{scope}[scale=1/10]
\fill [MaterialBlueGrey200]
(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 [MaterialBlueGrey700] (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 [MaterialBlueGrey500] (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 [MaterialBlueGrey100] (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 [MaterialBlueGrey500] (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 [MaterialBlueGrey500] (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;
\end{scope}
\end{tikzpicture}
\end{document}


• I am surprised how little code you need for that kind of "reasilm"! Feb 3, 2018 at 10:14
• I love it! Would you know how to draw a fish? Feb 3, 2018 at 15:34
• @Marina For simple stuff (e.g., the balls from your other question, and the fruit above) that I can visualise as made up of simple geometric shapes like circles, segments, rectangles, arcs etc., or from Bézier curves, I do manually (which I concede involves a bit of trail and error). The shark was a pre-existing image I created for a research project focused on L2 learning in Arabic children. This was originally created in inkscape which I exported and processed with regular expressions for this answer. Feb 5, 2018 at 7:50
• Also, as is often overlooked, using a consistent colour palette can also make sets of images look better. As I am lazy I always find a palette created by someone else and I have a particular liking for the Material design colors. Fortunately there is a LaTeX package for them on ctan Feb 5, 2018 at 7:54

Please make sure that the apple doesn't get eaten by a groundhog.

\documentclass{article}
\usepackage{tikz}
\usepgfmodule{nonlineartransformations}
\usetikzlibrary{shapes}
\usetikzlibrary{patterns}
\newcommand{\mytypeout}[1]{\relax}
\makeatletter
% from https://tex.stackexchange.com/q/56353/121799
\newcommand{\gettikzxy}[3]{%
\tikz@scan@one@point\pgfutil@firstofone#1\relax
\global\edef#2{\the\pgf@x}%
\global\edef#3{\the\pgf@y}%
}
% from the manual section 103.4.2
% \pgf@x will contain the \xout{radius} angle
% \pgf@y will contain the distance \pgfmathsincos@{\pgf@sys@tonumber\pgf@x}%
% pgfmathresulty is the sine of radius
% \pgf@x=\pgfmathresultx\pgf@y%
% \pgf@y=\pgfmathresulty\pgf@y%
% what the thing in the pgf manually is probably doing it to express the x coordinate in pt
% then take the cos and sin of x/pt (i.e. if x=50pt then it will return cos(50))
% and multiply the outcome by a the y coordinate
% (x_new,y_new) = (y_old cos(x_old/pt), y_old sin(x_old/pt))
% now comes a slightly modified version
\def\marmotransformation{% modified version of the manual 103.4.2 Installing Nonlinear Transformation
\mytypeout{before:\space\the\pgf@x\space\the\pgf@y\space\xC\space\yC}%
\edef\relX{\the\pgf@x}%
\edef\relY{\the\pgf@y}% Yes, there is a more elegant solution based on \pgfpointadd
\mytypeout{xrel=\relX\space yrel=\relY}%
\pgfmathsetmacro{\relNx}{\xN-\xC}%
\pgfmathsetmacro{\relNy}{\yN-\yC}%
\pgfmathsetmacro{\angleN}{atan2(\relNy,\relNx)}%
\pgfmathsetmacro{\LeN}{veclen(\relNx,\relNy)}%
\mytypeout{relNx=\relNx,\space relNy=\relNy,\space LeN=\LeN,\space angleN=\angleN}%
\pgfmathsetmacro{\myp}{(\relX*\relNx+\relY*\relNy)/(\LeN*28.3465)}
\pgfmathsetmacro{\myo}{(((\relY*\relNx-\relX*\relNy))/(\myp*\LeN*(28.3465*pi/180)))+\angleN)}
\mytypeout{new\space p=\myp,\space o=\myo}
\mytypeout{after:\space\the\pgf@x\space\the\pgf@y}%
} % I have no idea why the factor 5 is needed
% I'm using https://tex.stackexchange.com/a/167109/121799
\begin{document}
\begin{tikzpicture}
\coordinate (C) at (0,3) {};
\gettikzxy{(C)}{\xC}{\yC}
\coordinate (N) at (0,0) {};
\gettikzxy{(N)}{\xN}{\yN}
\begin{scope}[transform shape nonlinear=true]
\pgftransformnonlinear{\marmotransformation}
\end{scope}
\draw[smooth,fill=black](-0.15,3) .. controls (-0.15,2.5) .. (0,2) to
(0.1,2) .. controls (-0.05,2.5) .. (-0.05,3) --cycle;
\end{tikzpicture}\hspace*{1cm}%
\begin{tikzpicture}
\coordinate (C) at (0,3) {};
\gettikzxy{(C)}{\xC}{\yC}
\coordinate (N) at (0,0) {};
\gettikzxy{(N)}{\xN}{\yN}
\begin{scope}[transform shape nonlinear=true]
\pgftransformnonlinear{\marmotransformation}
\end{scope}
\draw[smooth,fill=black](-0.15,3) .. controls (-0.15,2.5) .. (0,2) to
(0.1,2) .. controls (-0.05,2.5) .. (-0.05,3) --cycle;
\end{tikzpicture}\hspace*{1cm}%
\begin{tikzpicture}
\coordinate (C) at (0,3) {};
\gettikzxy{(C)}{\xC}{\yC}
\coordinate (N) at (0,0) {};
\gettikzxy{(N)}{\xN}{\yN}
\begin{scope}[transform shape nonlinear=true]
\pgftransformnonlinear{\marmotransformation}
\end{scope}
\draw[smooth,fill=black](-0.15,3) .. controls (-0.15,2.5) .. (0,2) to
(0.1,2) .. controls (-0.05,2.5) .. (-0.05,3) --cycle;
\end{tikzpicture}
\end{document}


• I don't know why, but somehow this looks unhealthy (+1 however). Feb 2, 2018 at 15:41
• The apples are very nice but in the program I have to put them only recognizes the tikz package. I can not put more libraries. Feb 3, 2018 at 9:14
• That's the apple from Snow White! Feb 3, 2018 at 10:19

Done without tikz. The easiest thing is to grab a transparant png from the web, and use whatever tool (tikz or other) to stack the fruit repeatedly over a colored field.

\documentclass{article}
\usepackage{stackengine,graphicx,xcolor}
\begin{document}
\stackinset{l}{1.3cm}{b}{.7cm}{\includegraphics[width=1.5cm]{Apple.png}}{%
\stackinset{l}{3.3cm}{b}{.3cm}{\includegraphics[width=1.5cm]{Apple.png}}{%
\stackinset{l}{5.3cm}{b}{.9cm}{\includegraphics[width=1.5cm]{Apple.png}}{%
\stackinset{l}{7.3cm}{b}{.3cm}{\includegraphics[width=1.5cm]{Apple.png}}{%
\stackinset{l}{1.3cm}{b}{3.7cm}{\includegraphics[width=1.5cm]{Apple.png}}{%
\stackinset{l}{3.3cm}{b}{3.3cm}{\includegraphics[width=1.5cm]{Apple.png}}{%
\stackinset{l}{5.3cm}{b}{3.9cm}{\includegraphics[width=1.5cm]{Apple.png}}{%
\stackinset{l}{7.3cm}{b}{3.3cm}{\includegraphics[width=1.5cm]{Apple.png}}{%
\textcolor{yellow!20!blue!30}{\rule{10cm}{6.2cm}}%
}}}}}}}}
\end{document}


Note of interest: field set to golden ratio to maximize aesthetic appeal.