# Can we make a love heart with LaTeX?

I understand that this post may cause some down votes because it seems a bit off-topic, but having seen the discussions on Christmas Tree with LaTeX I am still willing to try.

My Girlfriend's birthday is coming (OK, actually less than 12 hrs!).

I would like to write her a little love note. Both of us have just started our PhD. So I suddenly come up with this idea of drawing a red cute love heart to her using LaTeX. It must be of a lot of fun!

Come on, TeX geeks and gurus, we do understand love! :D

-
“Both of us have just started our PhD.” I am sure that you will leave the graphic representation up to her, then. Equations are good enough: mathworld.wolfram.com/HeartCurve.html – Harold Cavendish Oct 20 '13 at 17:00
@HaroldCavendish Could be a PhD in the humanities... – Jubobs Oct 20 '13 at 21:57
Better still, make her a love-heart acrostic: tex.stackexchange.com/questions/121440/… – Steven B. Segletes Oct 20 '13 at 23:59
@StevenB.Segletes Awesome suggestion! – Sibbs Gambling Oct 21 '13 at 6:07
You also have a Valentine's heart in TeXample.net – Ignasi Oct 21 '13 at 6:28

## Still version:

\documentclass[border=12pt,pstricks]{standalone}
\usepackage{pst-plot}

\def\x(#1){sin(#1)^3}
\def\y(#1){(13*cos(#1)-5*cos(2*#1)-2*cos(3*#1)-cos(4*#1))/16}

\psset{algebraic,plotpoints=100}

\begin{document}

\begin{pspicture}[showgrid=bottom](-2,-2)(2,2)
\psparametricplot[origin={0,0.15}]{0}{\psPiTwo}{\x(t)|\y(t)}
\end{pspicture}

\end{document}

## Animated version:

\documentclass[border=12pt,pstricks]{standalone}
\usepackage{pst-plot}
\usepackage[nomessages]{fp}
\FPeval\Delta{round(2*pi/30:2)}

\def\x(#1){sin(#1)^3}
\def\y(#1){(13*cos(#1)-5*cos(2*#1)-2*cos(3*#1)-cos(4*#1))/16}

\psset{algebraic,plotpoints=100}

\begin{document}
\multido{\n=0.00+\Delta}{31}{%
\begin{pspicture}[showgrid=false](-1.5,-1.5)(1.5,1.5)
\psparametricplot[origin={0,0.15},linecolor=red]{0}{\n}{\x(t)|\y(t)}
\end{pspicture}}

\end{document}

## Photo Clipper

\documentclass[border=12pt,pstricks]{standalone}
\usepackage{graphicx}
\newsavebox\IBox
\savebox\IBox{\includegraphics{pretty}}
\usepackage{pst-plot}

\def\x(#1){sin(#1)^3}
\def\y(#1){(13*cos(#1)-5*cos(2*#1)-2*cos(3*#1)-cos(4*#1))/16}

\psset
{
algebraic,
plotpoints=100,
xunit=.5\wd\IBox,
yunit=.5\ht\IBox,
}

\usepackage{mathtools}
\begin{document}

\begin{pspicture}[showgrid=false](-1,-1)(1,1.5)
\begin{psclip}{\psparametricplot[origin={0,0.15}]{0}{\psPiTwo}{\x(t)|\y(t)}}
\rput(0,0){\usebox\IBox}
\end{psclip}
\rput(0,1.25){%
\color{red}\large
\displaystyle\! \begin{aligned} x(t)&=\sin^3 t\\ y(t)&=(13\cos t -5\cos 2t -2\cos 3t -\cos 4t)/16 \end{aligned}}
\rput(0,1){HAPPY BIRTHDAY}
\end{pspicture}

\end{document}

## PDF animated version

Compile it with pdflatex -shell-escape filename as there are some \immediate\write18{} in my code below.

\documentclass[preview,border=12pt]{standalone}
\usepackage{filecontents}
\begin{filecontents*}{heart.tex}
\documentclass[border=12pt,pstricks]{standalone}
\usepackage{graphicx}
\newsavebox\IBox
\savebox\IBox{\includegraphics[scale=3]{example-grid-100x100pt}}
\usepackage{pst-plot}

\def\x(#1){sin(#1)^3}
\def\y(#1){(13*cos(#1)-5*cos(2*#1)-2*cos(3*#1)-cos(4*#1))/16}

\psset
{
algebraic,
plotpoints=1000,
xunit=.5\wd\IBox,
yunit=.5\ht\IBox,
linewidth=10pt,
}

\usepackage[nomessages]{fp}
\FPeval\Delta{round(2*pi/30:2)}
\usepackage{mathtools}
\begin{document}

\multido{\n=0.00+\Delta}{31}{%
\begin{pspicture}[showgrid=false](-1,-1)(1,1.5)
\begin{psclip}{\psparametricplot[origin={0,0.15}]{0}{\psPiTwo}{\x(t)|\y(t)}}
\rput(0,0){\usebox\IBox}
\end{psclip}
\rput(0,1.25){%
\color{red}\large
\displaystyle\! \begin{aligned} x(t)&=\sin^3 t\\ y(t)&=(13\cos t -5\cos 2t -2\cos 3t -\cos 4t)/16 \end{aligned}}
\rput(0,1){HAPPY BIRTHDAY}
\psparametricplot[origin={0,0.15},linecolor=red]{0}{\n}{\x(t)|\y(t)}
\end{pspicture}}

\end{document}
\end{filecontents*}

\usepackage{animate}
\immediate\write18{latex heart}
\immediate\write18{dvips heart}
\immediate\write18{ps2pdf heart.ps}
\begin{document}
\animategraphics[controls,autoplay,loop,scale=1]{7}{heart}{}{}
\end{document}

-
As usual, please focus on the code rather than on the dummy picture. – kiss my armpit Oct 20 '13 at 18:16
Sorry I can't do that. I don't even see the browser window :) – percusse Oct 20 '13 at 22:36
Yes I will marry her. Wait, what question... :) – Paulo Cereda Oct 21 '13 at 0:51
Hopefully they up-voted for my code and not for the dummy picture. – kiss my armpit Oct 21 '13 at 8:58
@Marienplatz no, they didn't (but I did:-) – David Carlisle Oct 22 '13 at 1:54

Here's a TikZing heart!

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\pagestyle{empty}
\begin{document}
\begin{tikzpicture}
\draw[red,fill=red] (0,0) .. controls (0,0.75) and (-1.5,1.00) .. (-1.5,2)  arc (180:0:0.75)  -- cycle;
\draw[red,fill=red] (0,0) .. controls (0,0.75) and ( 1.5,1.00) .. ( 1.5,2)  arc (0:180:0.75) -- cycle;
\end{tikzpicture}
\end{document}

-
Nice! Simple and classic! Thanks! Where should I touch if I wanna make it bigger w.r.t. the A4 paper? – Sibbs Gambling Oct 20 '13 at 17:37
You can pass x=2cm,y=2cm as an option to the tikzpicture environment. – A.Ellett Oct 20 '13 at 17:46
@perfectionm1ng have a look at the standalone documentclass- it was made for images :) – cmhughes Oct 21 '13 at 16:58

This may be cheesy and slightly off-topic, but here goes... Because my girlfriend's present still hadn't arrived on her birthday, I had to improvise; I made a coupon similar to the following, which she really liked. Perhaps that could give you ideas...

Of course, don't forget to buy her a real present. Most women don't like cheapskates :)

\documentclass{article}
\usepackage[dvipsnames]{xcolor}
\usepackage{pgfornament}

\newcommand\mycoupon{%
￼\begin{tikzpicture}[color=Maroon,
every node/.style={inner sep=0pt}]
%\draw[help lines] (-6,-3) grid (6,3);
\node[minimum width=12cm, minimum height=6cm](vecbox){};
\draw[thin, gray!20]
(vecbox.north west)
-- (vecbox.north east)
-- (vecbox.south east)
-- (vecbox.south west)
-- cycle;
\node[anchor=north west] at (vecbox.north west)
{\pgfornament[width=2cm]{61}};
\node[anchor=north east] at (vecbox.north east)
{\pgfornament[width=2cm,symmetry=v]{61}};
\node[anchor=south west] at (vecbox.south west)
{\pgfornament[width=2cm,symmetry=h]{61}};
\node[anchor=south east] at (vecbox.south east)
{\pgfornament[width=2cm,symmetry=c]{61}};
\node at (0,0)
{
\LARGE
\begin{tabular}{c}
Coupon for one snuggle time\                with \textbf{Farticle Pilter}
\end{tabular}
};
\node at (0,-2.7)
{
\tiny
\begin{tabular}{c}
Coupon redeemable by \textbf{insert name} only, whenever she wants.\                Issued on \textbf{insert date}. Does not expire\ldots{} ever!
\end{tabular}
};
\end{tikzpicture}
}

\begin{document}

\pagestyle{empty}
\noindent
\mycoupon\\[1em]
\mycoupon\\[1em]
\mycoupon

\end{document}
-
dude it's sweet! Thanks! BTW, your advice on real present helps. haha! – Sibbs Gambling Oct 20 '13 at 17:07
How fo I handle this error? ! LaTeX Error: File `pgfornament.sty' not found. Thanks! – Sibbs Gambling Oct 20 '13 at 17:16
@perfectionm1ng You must install Alain Matthes's pgfornament package. I don't think it's part of any distribution yet. You can download it from there. – Jubobs Oct 20 '13 at 17:19
\documentclass{standalone}
\usepackage{arev}
\usepackage{xcolor}
\begin{document}
\rule[-2pt]{0pt}{10pt}
\textcolor{red}{$\varheart$}
\rule{0pt}{10pt}
\end{document}

-
Red color with arrow missing otherwise perfect – texenthusiast Oct 20 '13 at 17:11
What's with the struts? – Werner Oct 20 '13 at 17:11
The struts prevent standalone from chopping off the top of the heart; I tried without them and it looked even worse. – Benjamin McKay Oct 20 '13 at 17:13
\documentclass[preview,border=12pt]{standalone} \usepackage{arev} \usepackage{xcolor} \usepackage{graphicx} \begin{document} \scalebox{10}{\textcolor{red}{$\varheart$}} \end{document} is my suggestion. – kiss my armpit Oct 20 '13 at 18:13

Use shapepar to write your note:

\documentclass[svgnames]{article}
\usepackage{fontspec,microtype,shapepar,xcolor}
\setmainfont{TeX Gyre Chorus}
\begin{document}
\textcolor{Crimson}{\heartpar{Lorem ipsum dolor sit amet, consectetuer
adipiscing elit, sed diam nonummy nibh euismod tincidunt ut
laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim
veniam, quis nostrud exerci tation ullamcorper suscipit lobortis
nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure
dolor in hendrerit in vulputate velit esse molestie consequat, vel
illum dolore eu feugiat nulla facilisis at vero eros et accumsan
et iusto odio dignissim qui blandit praesent luptatum zzril
delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum
dolor sit amet, consectetuer adipiscing elit, sed diam nonummy
nibh euismod tincidunt ut laoreet dolore magna aliquam erat
volutpat.}}
\end{document}

The longer your note, and the shorter or more “hyphenatable” your words toward the end of the note, the more likely it is that shapepar will produce a pleasing shape, without rivers or the underfull lines seen in my image; I recommend microtype for the same reason.

-
Why I end up with this error? I am using TexMaker XeLaTeX. ! Undefined control sequence.<argument> \c_keys_code_root_tlfontspec/Ligatures/Historic ...tureoption{Ligatures}{Historic}{Historical} and ! fontspec error: "font-not-found"!! The font "TeX Gyre Chorus" cannot be found.!! See the fontspec documentation for further information.!! For immediate help type H <return>.!............................................... \setmainfont{TeX Gyre Chorus} – Sibbs Gambling Oct 21 '13 at 6:50
+1: Combine it with a love poem and you have a truely romantic love heart! – Daniel Oct 21 '13 at 9:40
@perfectionm1ng TeX Gyre Chorus does not have the hlig feature, only the dlig (use Ligatures=Rare or Ligatures=Discretionary). But that wouldn’t account for the “font-not-found.” Which operating system do you use? – Thérèse Oct 21 '13 at 10:05
@perfectionm1ng shapepar doesn't require any particular fonts, or xetex, so you can experiment with any fonts you normally use. – David Carlisle Oct 22 '13 at 1:56
@perfectionm1ng -- What David means is you can simply not load fontspec and (therefore) skip the \setmainfont command. If you are using regular pdflatex, simply add \usepackage[T1]{fontenc} (recommended) and choose a font from the LaTeX font catalogue. – jon Oct 22 '13 at 5:03

a beating heart ...

\documentclass[border=12pt,pstricks]{standalone}
\usepackage{pst-plot,multido}
\psset{algebraic,plotpoints=1000,unit=5,linewidth=10pt}
\begin{document}

\multido{\iA=20+20}{4}{%
\begin{pspicture}(-1,-1.1)(1,0.8)
\psparametricplot[linecolor=red!50,fillstyle=solid,
fillcolor=red!\iA,linejoin=1]{0}{\psPiTwo}%
{sin(t)^3 | (13*cos(t)-5*cos(2*t)-2*cos(3*t)-cos(4*t))/16}
\end{pspicture}}

\end{document}

for the animation:

convert -delay 10 -loop 0 -density 300 -scale 300 -alpha remove heart.pdf heart.gif

And the same as a 3D cardioid:

\documentclass[pstricks]{standalone}
\usepackage{pst-solides3d}
\begin{document}

\multido{\iA=20+20,\iB=10+20,\iC=150+10}{4}{%
\begin{pspicture}(-4,-4)(4,4)% the main 2D area
\psset{lightsrc=viewpoint,viewpoint=50 -20 20 rtp2xyz,Decran=\iC}
\defFunction[algebraic]{heart}(u,v)
{ sin(u)^3*cos(v) }%                               x=f(u,v)
{ sin(u)^3*sin(v) }%                               y=f(u,v)
{ (13*cos(u)-5*cos(2*u)-2*cos(3*u)-cos(4*u))/16 }% z=f(u)
\psSolid[object=surfaceparametree,linecolor=red!\iB,
base=0 pi pi 4 div neg 5 pi mul 2 div,
fillcolor=red!\iA,function=heart,linewidth=0.1\pslinewidth,ngrid=40]
\end{pspicture}}

\end{document}

-
+1: I hope she does not suffer from epilepsy. By the way, pst-plot automatically loads multido. – kiss my armpit Oct 20 '13 at 18:45
Cool! I like it a lot! – Sibbs Gambling Oct 21 '13 at 2:09
+1 but could you slow it down a bit? :) – cmhughes Oct 21 '13 at 2:47
no, I am so nervous that you may like it .... ;-) – Herbert Oct 21 '13 at 4:53
I am compiling it with XeLaTeX, texmaker. The heart is seperated into 4 pages, each page showing a static heart with one color. Any idea? – Sibbs Gambling Oct 21 '13 at 7:00

A three-dimensional version- nice to have an application of volumes of revolution

% arara: pdflatex
% !arara: indent: {overwrite: on}
\documentclass{standalone}
\usepackage{pgfplots}

\pgfplotsset{compat=1.9}
\pgfplotsset{
/pgfplots/colormap={pink}{color(0cm)=(purple); color(1cm)=(pink!80!purple); color(2cm)=(pink!90); color(3cm)=(pink) }
}

\begin{document}

\begin{tikzpicture}
\begin{axis}[
view={0}{10},
axis equal,
axis lines=none,
colormap name =pink,
]
surf,
samples=50,
domain=0:2*pi,y domain=0:2*pi,
z buffer=sort,
opacity=0.15]
(
{(sin(deg(x)))^3*cos(deg(y))},
{(sin(deg(x)))^3*sin(deg(y))},
{(13*cos(deg(x))-5*cos(2*deg(x))-2*cos(3*deg(x))-cos(4*deg(x)))/16}
);
\end{axis}
\end{tikzpicture}

\end{document}
-
For my wife :) Maybe this will convince her to learn LaTeX and join the site? – cmhughes Oct 21 '13 at 1:57
Beautiful! She will definitely learn and join Anyway, she will need it to write thesis LOL – Sibbs Gambling Oct 21 '13 at 2:09
Ah Ah AAAAhhh! No words! – Harish Kumar Oct 21 '13 at 5:44
Love is best expressed in three dimensions. Be careful, the bottom cusp is rather sharp (infinitely sharp, actually - don't touch it). – Thomas Oct 21 '13 at 10:51
Beautiful plot! I added it to the PGFplots example gallery. – Stefan Kottwitz Mar 17 '14 at 11:18

Unicode has many to choose from: xetex '\font\tenrm="Symbola:color=DD0000" at 3cm \rm ♥ ❤ ♡ \char"1F497\ \char"1F493\ \char"1F498 \bye'

-
I'm new. Any reason you're using XeTex rather than the standard LaTeX? – jvriesem Feb 8 '14 at 8:31
@jvriesem: I rarely use LaTeX; when I need something so complicated that I think it's not worth the effort to do in plain XeTeX/LuaTeX, I go for ConTeXt. But note that you can do the same thing as in this example with XeLaTeX or LuaLaTeX: the only requirements are a Unicode-aware engine and a font which includes the glyphs. Though, you'd want to use an abstraction layer for the font-loading (ie. package fontspec) so you can use the features of LaTeX New Font Selection Scheme (NFSS). Oh, and warm welcome to tex.se! :-) – morbusg Feb 8 '14 at 8:51
Thanks! I appreciate your explanation. – jvriesem Feb 13 '14 at 22:46

From TeXample.net, the author is Alain Matthes:

% Valentine heart
% Author: Alain Matthes
\documentclass{article}
\usepackage[usenames,dvipsnames]{xcolor}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
and +(90:2cm) .. (0,0) .. controls  +(-90:2cm) and +(90:3cm) ..
(4,-8) .. controls +(90:3cm) and +(-90:2cm) ..(8,0)  .. controls
+(90:2cm) and  +(60:2cm) .. (4,1);
\end{tikzpicture}
\end{document}

-

Joining late the party!!!

A very simple heart beat proposal with hobby and some shading:

\documentclass{beamer}
\usepackage{tikz}

\makeatletter
color(0cm)=(tikz@ball!60!white);
color(0.4cm)=(tikz@ball!85!white);
color(0.7cm)=(tikz@ball);
color(0.9925cm)=(tikz@ball!75!black);
rgb(1cm)=(1,1,1)
}

color(0cm)=(tikz@ball!80!white);
color(0.4cm)=(tikz@ball!90!white);
color(0.7cm)=(tikz@ball);
color(0.9925cm)=(tikz@ball!75!black);
rgb(1cm)=(1,1,1)
}
\makeatother

% original code by Daniel:
% http://tex.stackexchange.com/questions/55806/tikzpicture-in-beamer#55849
\tikzset{
invisible/.style={opacity=0,text opacity=0},
visible on/.style={alt=#1{}{invisible}},
alt/.code args={<#1>#2#3}{%
\alt<#1>{\pgfkeysalso{#2}}{\pgfkeysalso{#3}}
},
}

% original code in
% http://tex.stackexchange.com/questions/84513/highlighting-in-beamer-using-tikz-nodes#84608
\tikzset{
}

\begin{document}
\begin{frame}
\begin{tikzpicture}[scale=4]
(0,0) to[curve through={(0.25,0.4) .. (0.5,0.6) .. (0.5,1.2) .. (0.4,1.25)}]  (0,1)
(0,1) to[curve through={(-0.4,1.25)..(-0.5,1.2) .. (-0.5,0.6).. (-0.25,0.4)}](0,0);
\end{tikzpicture}
\end{frame}
\end{document}

The result:

-
\draw[use Hobby shortcut] ([out angle=85,in angle=85]0,0) .. (1,0) .. ([Hobby finish]0,-2) .. ([out angle=95,in angle=95]-1,0) .. (0,0); – Loop Space Oct 22 '13 at 11:42
@AndrewStacey: definitely more elegant :) But my twisted mind prefers coordinates... – Claudio Fiandrino Oct 22 '13 at 11:50
+1 this reminds me of Jessica Rabbit :) – cmhughes Feb 25 '14 at 16:51

And then there's Knuth's METAFONT heart, adapted here for Metapost. See p.134 of the METAFONT book.

prologues := 3;
outputtemplate := "heart.eps";
beginfig(1);
path heart, p;
heart = (100,162) .. (140,178){right} .. (195,125){down}
.. (100,0){curl 0} .. (100,0){curl 0} .. {up}(5,125) .. {right}(60,178) .. (100,162);
p = (100,200) -- (200,200) -- (200,100) -- (200,0) -- (0,0) -- (0,100) -- (0,200) -- (100,200);
for n=0 upto 10: draw interpath(n/10,p,heart) withcolor .987red; endfor
endfig;
end.

-

I know this is a bit late, but for reference, OP didn't say what sort of PhD...

\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[yscale=-1]
\draw[fill=red!30!white](.456,3.236)
.. controls (.422,4.168) and (.408,5.095) .. (.461,6.046)
.. controls (.475,6.228) and (.365,6.400) .. (.379,6.601)
-- (.819,11.816)
.. controls (.843,12.194) and (.838,13.389) .. (.900,13.972)
.. controls (.943,14.340) and (2.870,14.340) .. (2.903,13.972)
.. controls (2.927,13.699) and (2.932,13.436) .. (2.903,13.169)
-- (1.847,5.401)
.. controls (1.914,4.627) and (2.033,3.924) .. (2.129,3.193)
.. controls (2.177,2.906) and (.441,2.863) .. (.456,3.236) ;
\draw[fill=red!30!white] (.456,3.236)
.. controls (.422,4.168) and (.408,5.095) .. (.461,6.046)
.. controls (.475,6.228) and (.365,6.400) .. (.379,6.601)
-- (.819,11.816)
.. controls (.843,12.194) and (.838,13.389) .. (.900,13.972)
.. controls (.943,14.340) and (2.870,14.340) .. (2.903,13.972)
.. controls (2.927,13.699) and (2.932,13.436) .. (2.903,13.169)
-- (1.847,5.401)
.. controls (1.914,4.627) and (2.033,3.924) .. (2.129,3.193)
.. controls (2.177,2.906) and (.441,2.863) .. (.456,3.236) ;
\draw[fill=red!60!white] (.303,6.697)
.. controls (-.161,7.442) and (-.022,9.641) .. (.484,11.118)
.. controls (.795,12.022) and (1.297,12.414) .. (2.062,12.801)
.. controls (3.429,13.513) and (5.112,13.714) .. (6.598,13.795)
.. controls (9.495,13.957) and (9.738,11.735) .. (8.974,8.967)
.. controls (8.744,8.126) and (8.123,7.815) .. (7.917,7.222)
.. controls (7.683,6.606) and (7.310,5.999) .. (6.598,5.420)
.. controls (5.570,4.579) and (1.230,5.210) .. (.303,6.697) ;
\fill[fill=red!25!white] (2.540,6.405)
.. controls (2.296,6.257) and (1.890,6.300) .. (1.608,6.424)
.. controls (1.274,6.577) and (1.101,6.802) .. (1.001,7.151)
.. controls (.858,7.652) and (1.025,8.293) .. (1.106,8.795)
.. controls (1.149,9.072) and (1.149,9.402) .. (1.254,9.684)
.. controls (1.278,9.746) and (1.278,9.823) .. (1.360,9.870)
.. controls (1.426,9.909) and (1.412,9.732) .. (1.460,9.651)
.. controls (1.747,9.144) and (2.210,8.346) .. (2.502,7.834)
.. controls (2.602,7.657) and (2.631,7.437) .. (2.531,7.303)
.. controls (2.411,7.146) and (2.206,6.883) .. (2.306,6.768)
.. controls (2.382,6.682) and (2.621,6.453) .. (2.540,6.405) ;
\fill[fill=red!25!white] (4.204,6.606)
.. controls (5.413,6.434) and (5.327,7.543) .. (5.466,7.796)
.. controls (5.599,8.054) and (6.350,8.785) .. (6.498,9.029)
.. controls (6.646,9.273) and (7.282,9.947) .. (7.067,10.616)
.. controls (6.847,11.290) and (5.776,11.582) .. (5.212,11.429)
.. controls (4.643,11.271) and (3.773,10.941) .. (3.166,11.113)
.. controls (2.559,11.280) and (1.350,10.793) .. (1.790,10.052)
.. controls (2.225,9.311) and (3.640,6.692) .. (4.204,6.606) ;
\draw[fill=yellow] (1.307,3.107)
.. controls (1.675,3.107) and (1.976,3.169) .. (1.976,3.250)
.. controls (1.976,3.327) and (1.675,3.394) .. (1.307,3.394)
.. controls (.934,3.394) and (.633,3.327) .. (.633,3.250)
.. controls (.633,3.169) and (.934,3.107) .. (1.307,3.107) ;
\draw[fill=blue!20!red!80!white] (1.307,3.107)
.. controls (1.675,3.107) and (1.976,3.169) .. (1.976,3.250)
.. controls (1.976,3.327) and (1.675,3.394) .. (1.307,3.394)
.. controls (.934,3.394) and (.633,3.327) .. (.633,3.250)
.. controls (.633,3.169) and (.934,3.107) .. (1.307,3.107) ;
\fill[fill=red!10!white] (1.024,14.000)
.. controls (.991,13.929) and (.924,12.146) .. (1.039,12.323)
.. controls (1.120,12.452) and (1.498,12.753) .. (1.870,12.767)
.. controls (2.004,12.777) and (1.918,14.129) .. (1.875,14.163)
.. controls (1.789,14.230) and (1.110,14.173) .. (1.024,14.000) ;
\fill[fill=red!10!white] (.618,3.432)
-- (.618,6.247)
.. controls (.852,5.941) and (1.086,5.745) .. (1.345,5.578)
.. controls (1.364,5.033) and (1.368,4.125) .. (1.345,3.556)
.. controls (1.096,3.556) and (.862,3.518) .. (.618,3.432) ;
\draw[fill=white] (4.872,5.215)
.. controls (4.944,5.607) and (4.891,5.884) .. (4.595,6.061)
.. controls (4.389,6.185) and (3.749,6.013) .. (3.864,5.664)
.. controls (3.974,5.339) and (4.088,5.081) .. (4.346,4.923)
.. controls (4.533,4.813) and (4.858,5.119) .. (4.872,5.215) ;

\draw[fill=red!80!blue] (5.662,5.665)
.. controls (5.643,5.732) and (5.624,5.803) .. (5.604,5.880)
.. controls (5.944,6.076) and (6.355,6.640) .. (6.522,7.314)
.. controls (6.699,8.031) and (6.336,8.284) .. (5.853,8.796)
.. controls (5.523,9.154) and (5.313,9.541) .. (5.303,10.014)
.. controls (5.485,9.106) and (5.844,8.958) .. (6.030,8.877)
.. controls (6.278,8.767) and (6.221,9.221) .. (6.159,10.029)
.. controls (6.341,9.412) and (6.298,8.944) .. (6.274,8.752)
.. controls (6.245,8.561) and (6.589,8.370) .. (6.685,8.093)
.. controls (6.799,7.777) and (6.924,8.069) .. (6.991,8.208)
.. controls (7.153,8.547) and (7.311,8.681) .. (7.263,8.987)
.. controls (7.096,10.033) and (6.780,10.387) .. (6.250,10.650)
.. controls (6.728,10.492) and (6.833,10.373) .. (6.976,10.230)
.. controls (6.991,10.440) and (6.900,10.870) .. (6.962,11.209)
.. controls (6.957,10.669) and (7.277,9.197) .. (7.469,9.044)
.. controls (7.579,8.953) and (8.296,9.632) .. (8.372,10.139)
.. controls (8.458,10.698) and (8.936,11.535) .. (8.716,12.213)
.. controls (8.970,11.458) and (8.535,10.636) .. (8.635,10.445)
.. controls (8.778,10.641) and (9.060,11.037) .. (9.027,11.257)
.. controls (8.994,11.477) and (9.170,11.874) .. (9.094,12.333)
.. controls (9.228,11.883) and (9.065,11.702) .. (9.118,11.377)
.. controls (9.166,11.052) and (8.979,10.626) .. (8.836,10.359)
.. controls (8.549,9.828) and (7.889,9.187) .. (7.373,8.595)
.. controls (7.708,8.796) and (8.535,9.077) .. (8.487,9.369)
.. controls (8.434,9.661) and (8.860,9.900) .. (9.027,10.306)
.. controls (8.903,9.928) and (8.587,9.656) .. (8.568,9.321)
.. controls (8.554,8.982) and (8.023,8.815) .. (7.889,8.762)
.. controls (7.995,8.752) and (8.253,8.748) .. (8.348,8.834)
.. controls (8.444,8.920) and (8.702,9.097) .. (8.912,9.044)
.. controls (8.539,9.044) and (8.463,8.671) .. (8.286,8.657)
.. controls (8.109,8.647) and (7.641,8.566) .. (7.531,8.470)
.. controls (7.015,8.016) and (6.599,7.223) .. (6.819,7.271)
.. controls (7.344,7.381) and (7.899,7.471) .. (8.377,7.988)
.. controls (8.023,7.567) and (7.999,7.562) .. (7.478,7.314)
.. controls (7.091,7.137) and (6.537,6.979) .. (6.355,6.511)
.. controls (6.250,6.229) and (5.887,5.789) .. (5.662,5.665) ;
\draw[fill=red!80!blue] (3.387,5.951)
.. controls (3.779,7.003) and (2.665,8.600) .. (1.857,9.866)
.. controls (1.384,10.607) and (1.704,11.157) .. (2.364,11.305)
.. controls (2.842,11.410) and (4.515,11.004) .. (4.993,11.023)
.. controls (5.480,11.037) and (5.604,10.856) .. (5.882,10.559)
.. controls (5.815,10.894) and (5.256,11.305) .. (4.997,11.209)
.. controls (4.735,11.114) and (4.199,11.229) .. (3.975,11.338)
.. controls (4.280,11.425) and (4.787,11.401) .. (5.179,11.601)
.. controls (5.571,11.802) and (5.920,11.750) .. (6.159,11.300)
.. controls (6.140,11.730) and (5.538,11.955) .. (5.126,11.783)
.. controls (4.715,11.616) and (3.736,11.434) .. (3.401,11.434)
.. controls (3.176,11.429) and (3.009,11.468) .. (2.617,11.563)
.. controls (3.324,11.635) and (4.252,12.084) .. (5.165,12.304)
.. controls (5.863,12.471) and (6.680,12.452) .. (6.790,12.189)
.. controls (6.895,11.946) and (7.072,11.840) .. (7.473,11.793)
.. controls (7.000,12.008) and (6.866,12.156) .. (6.814,12.438)
.. controls (7.015,12.490) and (7.411,12.256) .. (7.626,12.457)
.. controls (7.846,12.658) and (8.439,12.653) .. (8.864,12.381)
.. controls (8.386,12.730) and (7.770,12.710) .. (7.607,12.557)
.. controls (7.445,12.405) and (7.077,12.553) .. (6.862,12.591)
.. controls (6.647,12.634) and (6.446,12.644) .. (5.891,12.548)
.. controls (5.714,12.620) and (5.657,12.715) .. (5.867,12.792)
.. controls (6.082,12.835) and (6.537,12.806) .. (7.014,12.806)
.. controls (7.258,12.806) and (7.430,12.935) .. (7.631,12.811)
.. controls (7.832,12.682) and (8.033,12.873) .. (8.324,13.016)
.. controls (7.999,12.906) and (7.746,12.768) .. (7.660,12.897)
.. controls (7.574,13.031) and (7.263,12.916) .. (7.163,12.940)
.. controls (7.292,12.992) and (7.493,12.935) .. (7.507,13.136)
.. controls (7.526,13.337) and (8.057,13.284) .. (7.999,13.652)
.. controls (7.923,13.294) and (7.540,13.423) .. (7.406,13.179)
.. controls (7.277,12.940) and (6.885,13.055) .. (6.680,13.031)
.. controls (6.250,12.973) and (5.557,13.074) .. (5.461,12.639)
.. controls (5.217,12.600) and (4.921,12.514) .. (4.682,12.419)
.. controls (4.687,12.538) and (5.103,13.026) .. (5.461,13.102)
.. controls (5.815,13.174) and (6.532,13.155) .. (6.699,13.681)
.. controls (6.345,13.174) and (5.614,13.356) .. (5.294,13.260)
.. controls (4.978,13.160) and (4.213,12.285) .. (3.898,12.189)
.. controls (3.583,12.099) and (3.272,11.922) .. (3.157,11.989)
.. controls (3.062,12.084) and (3.119,12.600) .. (3.583,12.581)
.. controls (4.046,12.562) and (4.362,12.882) .. (4.620,13.356)
.. controls (4.271,12.897) and (3.721,12.615) .. (3.358,12.744)
.. controls (2.990,12.868) and (2.823,11.936) .. (2.598,11.812)
.. controls (2.373,11.683) and (1.594,11.377) .. (1.503,11.042)
.. controls (1.465,11.377) and (2.106,11.903) .. (2.043,12.677)
.. controls (1.953,11.922) and (1.522,11.783) .. (1.317,11.377)
.. controls (1.111,10.966) and (1.212,10.555) .. (1.417,9.991)
.. controls (1.422,9.971) and (3.836,6.267) .. (2.588,5.985)
.. controls (2.235,5.904) and (1.981,5.813) .. (1.757,5.660)
.. controls (1.871,4.489) and (2.187,2.481) .. (2.650,2.405)
.. controls (3.176,2.314) and (4.185,2.878) .. (4.175,3.289)
.. controls (4.166,3.724) and (3.817,4.766) .. (3.994,5.201)
.. controls (3.759,5.397) and (3.277,5.617) .. (3.387,5.951) ;
\fill[fill=red!90!blue!70!white] (2.942,5.378)
.. controls (2.875,5.339) and (2.736,5.378) .. (2.722,5.459)
.. controls (2.712,5.535) and (2.741,5.583) .. (2.779,5.674)
.. controls (3.013,6.066) and (3.200,6.716) .. (2.980,7.266)
.. controls (2.803,7.720) and (2.564,8.226) .. (2.296,8.661)
.. controls (2.048,9.068) and (1.627,9.670) .. (1.565,10.363)
.. controls (1.579,10.105) and (1.837,9.737) .. (1.952,9.512)
.. controls (2.263,8.905) and (3.071,7.815) .. (3.214,7.180)
.. controls (3.362,6.534) and (3.243,5.875) .. (3.071,5.597)
.. controls (3.066,5.540) and (3.028,5.425) .. (2.942,5.378) ;
\fill[fill=red!90!blue!70!white] (2.793,2.424)
.. controls (2.253,3.542) and (2.115,3.948) .. (2.014,5.712)
.. controls (2.019,5.784) and (2.349,5.903) .. (2.339,5.841)
.. controls (2.301,4.665) and (2.650,3.289) .. (3.138,2.486)
.. controls (3.032,2.447) and (2.870,2.419) .. (2.793,2.424) ;
\draw (2.526,6.104)
.. controls (2.990,5.937) and (2.541,6.688) .. (2.545,6.673)
.. controls (2.454,6.831) and (2.521,6.869) .. (2.564,6.922)
.. controls (2.717,7.123) and (2.932,7.165) .. (2.660,7.471) ;
\draw (.461,3.241)
.. controls (.576,3.657) and (2.187,3.657) .. (2.129,3.198) ;
\draw[fill=red!30!white] (3.687,5.731)
.. controls (3.520,6.229) and (5.541,6.616) .. (5.556,6.214)
.. controls (5.570,5.827) and (5.790,5.325) .. (5.800,4.919)
.. controls (5.809,4.584) and (4.480,4.250) .. (4.308,4.517)
.. controls (4.084,4.866) and (3.854,5.249) .. (3.687,5.731) ;
\draw (4.299,4.531)
.. controls (4.189,4.885) and (5.752,5.315) .. (5.800,4.961) ;
\draw[fill=blue!20!red!80!white] (5.097,4.594)
.. controls (5.436,4.694) and (5.699,4.823) .. (5.680,4.919)
.. controls (5.656,5.009) and (5.360,5.000) .. (5.020,4.899)
.. controls (4.681,4.799) and (4.428,4.675) .. (4.452,4.584)
.. controls (4.475,4.493) and (4.757,4.493) .. (5.097,4.594) ;
\end{tikzpicture}

\end{document}

-
Beautiful answer! I wish I had a similar control using controls. You should try to answer: Holiday contest! Drawing a picture of Krampus for Yule. :) – OSjerick Dec 13 '13 at 3:36
They're not my paths - they're from clip art, with some filters to convert .eps paths to tikz paths. For Krampus, I'd have to find the vector artwork to do the conversion. – Andrew Kepert Dec 13 '13 at 3:45
+1 Love Heart for Dr.Love :) – texenthusiast Dec 13 '13 at 3:47
Nice work! I'm really impressed. How did you get all of those points? – jvriesem Feb 8 '14 at 8:34
@jvriesem - They're not my points - they're from clip art, with some filters to convert .eps points to tikz points. – Andrew Kepert Feb 9 '14 at 7:56

By means of a pgfplots code, I drew a plot using the formula of a heart. I have the formula from what is presented in this webpage, but I have changed some variables to make a nicer heart plot. Also, higher amounts of samples gives better

% pdflatex
\documentclass{standalone}
\usepackage{tikz}
\usepackage{pgfplots}

\begin{document}
\begin{tikzpicture}
\pgfmathdeclarefunction{R}{1}{\pgfmathparse{(sin(deg(#1))*sqrt(abs(cos(deg(#1)))))/(sin(deg(#1))+8/5)-1.5*sin(deg(#1))+1.5}}
\begin{axis}
[
hide x axis,
hide y axis,
domain=-pi:pi,
samples=1000,
]
\end{axis}
\end{tikzpicture}
\end{document}

And if you are a heartbroken, you can draw this instead :D

% pdflatex
\documentclass{standalone}
\usepackage{tikz}
\usepackage{pgfplots}

\begin{document}
\begin{tikzpicture}
\pgfmathdeclarefunction{R}{1}{\pgfmathparse{(sin(deg(#1))*sqrt(abs(cos(deg(#1)))))/(sin(deg(#1))+8/5)-1.5*sin(deg(#1))+1.5}}
\begin{axis}
[
hide axis,
]