Inside a beamer presentation, I would like to compare and contrast several alternatives. For each, I would like to highlight the "pros" (with a \item[\Large\smiley]), the "cons" (with a \item[\Large\frownie]) and "neutral" observations. Is there a symbol with a face that is neither happy, nor sad, but rather neutral?
- 157,807
- 879
-
2Related question: http://tex.stackexchange.com/q/3695/4012 -- possibly even a duplicate, if that question lists all the emoticons available in packages. I'm assuming though that someone will provide a TikZ answer here. – doncherry Jun 07 '12 at 11:32
-
@doncherry Thanks for the comment. I was hoping for a solution without \includegraphics{} – user1202136 Jun 07 '12 at 11:48
-
1looks at http://www.texample.net/tikz/examples/emoticons/ – Alain Matthes Jun 08 '12 at 08:55
9 Answers
Here is a tikz version where you can use \Simley{<smile_level>} and control the smile level (setting shown below in the image) with 1 begin very happy, to -1 being very unhappy:

You can actually use larger numbers, but the results may not be desirable. The 1.75 fudge factor in the code below was used so that the reasonable range is -1...1 so you can adjust those as desired.
Code:
\documentclass{article}
\usepackage{tikz}
\newcommand{\Simley}[1]{%
\begin{tikzpicture}[scale=0.11]
\newcommand{\SmileyRadius}{1.0}%
\draw [fill=brown!10] (0,0) circle (\SmileyRadius)% outside circle
%node [yshift=-0.22\SmileyRadius cm] {\tiny #1}% uncomment this to see the smile factor
;
\pgfmathsetmacro{\eyeX}{0.5*\SmileyRadius*cos(30)}
\pgfmathsetmacro{\eyeY}{0.5*\SmileyRadius*sin(30)}
\draw [fill=cyan,draw=none] (\eyeX,\eyeY) circle (0.15cm);
\draw [fill=cyan,draw=none] (-\eyeX,\eyeY) circle (0.15cm);
\pgfmathsetmacro{\xScale}{2*\eyeX/180}
\pgfmathsetmacro{\yScale}{1.0*\eyeY}
\draw[color=red, domain=-\eyeX:\eyeX]
plot ({\x},{
-0.1+#1*0.15 % shift the smiley as smile decreases
-#1*1.75*\yScale*(sin((\x+\eyeX)/\xScale))-\eyeY});
\end{tikzpicture}%
}%
\begin{document}
\Simley{1}
\Simley{0.5}
\Simley{0}
\Simley{-0.5}
\Simley{-1}
\end{document}
- 223,288
-
10This is great!
\usepackage{tikzemoticon}and then all eyebrows etc. is set by parameters. – percusse Jun 08 '12 at 06:01 -
1@percusse: What?? There is a package for this already??? You should post an answer with an example. – Peter Grill Jun 08 '12 at 06:12
-
2
-
2This answer is so incredibly cool. :) May I suggest lowering the mouth, as the "smiley_level" is decreasing? I tried
\draw[domain=-\eyeX:\eyeX] plot ({\x},{-0.1+#1*0.15-#1*1.75*\yScale*(sin((\x+\eyeX)/\xScale))-\eyeY});At any rate, I favor the idea of creating atizemoticonpackage. :) – user1202136 Jun 08 '12 at 08:19 -
-
3I was already searching for the tikzemoticon package before I read the third reply. :) – Chris Jul 04 '12 at 12:58
Here is a rather amusing one. Please adjust further for more expressive faces.
\documentclass{beamer}
\usepackage{tikz}
\newcommand{\smiley}{\tikz[baseline=-0.75ex,black]{
\draw circle (2mm);
\node[fill,circle,inner sep=0.5pt] (left eye) at (135:0.8mm) {};
\node[fill,circle,inner sep=0.5pt] (right eye) at (45:0.8mm) {};
\draw (-145:0.9mm) arc (-120:-60:1.5mm);
}
}
\newcommand{\frownie}{\tikz[baseline=-0.75ex,black]{
\draw circle (2mm);
\node[fill,circle,inner sep=0.5pt] (left eye) at (135:0.8mm) {};
\node[fill,circle,inner sep=0.5pt] (right eye) at (45:0.8mm) {};
\draw (-145:0.9mm) arc (120:60:1.5mm);
}
}
\newcommand{\neutranie}{\tikz[baseline=-0.75ex,black]{
\draw circle (2mm);
\node[fill,circle,inner sep=0.5pt] (left eye) at (135:0.8mm) {};
\node[fill,circle,inner sep=0.5pt] (right eye) at (45:0.8mm) {};
\draw (-135:0.9mm) -- (-45:0.9mm);
}
}
\begin{document}
\begin{frame}{Pros, Cons and others}
\begin{itemize}
\item[\smiley] Yay!
\item[\frownie] Bah!
\item[\neutranie] Wadeva...
\end{itemize}
\end{frame}
\end{document}

- 157,807
Here is for fun a non-Tikz solution from Knuth himself. Originally published in his paper with the apt name Stable Husbands.

\documentclass{article}
%% Knuths smile box from
%\centerline{\bf Stable Husbands}
%\bigskip
%\centerline{\sl Donald E. Knuth, Rajeev Motwani, and Boris Pittel}
%\centerline{\sl Computer Science Department, Stanford University}
\def\pfbox % new experimental version (DEK, November 88)
{{\ooalign{\hfil\lower.06ex % a smiley face
\hbox{$\scriptscriptstyle\frown$}\hfil\crcr
\hfil\lower.7ex\hbox{\"{}}\hfil\crcr
\mathhexbox20D}}}
\begin{document}
\Huge \pfbox
\end{document}
And of course this is a mathematician's frown \texttt{\meaning\frown}. Change the \frown to a minus sign to get a very neutral one:

- 117,160
Unicode defines lots of emoticons: There is ☺ and ☹ at U+263A and U+2639, and there are many more from U+1F601 onward. The neutral one is U+1F610 NEUTRAL FACE. So, all you need is a font that includes these characters (like DejaVu Sans) and use it with XeLaTeX or LuaLaTeX. E.g.,
% Compile with xelatex or lualatex and DejaVu Sans installed on your system.
\documentclass{beamer}
\usepackage{fontspec}
\newfontfamily\DejaSans{DejaVu Sans}
\newcommand\good{{\color{green}\DejaSans ☺}}
\newcommand\neutral{{\color{blue}\DejaSans }}
\newcommand\bad{{\color{red}\DejaSans ☹}}
\begin{document}
\begin{frame}
\begin{itemize}
\item[\good] Unicode provides a lot of emoticons
\item[\neutral] They even have cat faces: {\DejaSans }
\item[\bad] Few fonts actually include these characters.
\end{itemize}
More samples: {\DejaSans }
\end{frame}
\end{document}

- 89,023
- 26
- 255
- 291
-
17
-
1Using this with
pdflatexseems to be non-trivial, so I posted a dedicated question. – Raphael Nov 14 '12 at 22:01 -
1
-
1I'm sure it doesn't (
xelatexworks as well), but this particular document is supposed to work on machines/installations I don't know. :/ – Raphael Nov 15 '12 at 10:50 -
2With
\setsansfont{DejaVu Sans}you can directly use Unicode smileys without\DejaSans– Jakob Oct 30 '14 at 08:53
Update 4
I'm not an emoticon expert, so I draw some basic emoticons. Finally I changed the names now I define emoticon happy, emoticon sad , emoticon straight face and emoticon wink. I would put the final library on my site now. The shapes are not perfect because, there is a problem when I add some text inside.
First I created the file: tikzlibraryshapes.emoticon.code.tex
% tikzlibraryshapes.emoticon.code.tex
% Basic emoticons
%
\pgfdeclareshape{emoticon happy}
{
\inheritsavedanchors[from=circle]
\inheritanchorborder[from=circle]
\inheritanchor[from=circle]{north}
\inheritanchor[from=circle]{north west}
\inheritanchor[from=circle]{north east}
\inheritanchor[from=circle]{center}
\inheritanchor[from=circle]{west}
\inheritanchor[from=circle]{east}
\inheritanchor[from=circle]{mid}
\inheritanchor[from=circle]{mid west}
\inheritanchor[from=circle]{mid east}
\inheritanchor[from=circle]{base}
\inheritanchor[from=circle]{base west}
\inheritanchor[from=circle]{base east}
\inheritanchor[from=circle]{south}
\inheritanchor[from=circle]{south west}
\inheritanchor[from=circle]{south east}
\inheritbackgroundpath[from=circle]
%
% Background path
%
\inheritbackgroundpath[from=circle]
\beforebackgroundpath{
\pgfutil@tempdima=\radius%
\pgfmathsetlength{\pgf@xb}{\pgfkeysvalueof{/pgf/outer xsep}}%
\pgfmathsetlength{\pgf@yb}{\pgfkeysvalueof{/pgf/outer ysep}}%
\color{black}
\pgfpathellipse{\pgfqpoint{.25\pgfutil@tempdima}{.25\pgfutil@tempdima}}%
{\pgfqpoint{.1\pgfutil@tempdima}{0pt}}%
{\pgfqpoint{0pt}{.15\pgfutil@tempdima}}%
\pgfusepath{fill}%
\pgfpathellipse{\pgfqpoint{-.25\pgfutil@tempdima}{.25\pgfutil@tempdima}}%
{\pgfqpoint{.1\pgfutil@tempdima}{0pt}}%
{\pgfqpoint{0pt}{.15\pgfutil@tempdima}}%
\pgfusepath{fill}%
\pgfusepath{stroke}%
\begingroup
\pgfsetlinewidth{0.4pt}%
\pgflowlevelsynccm
\pgfpathmoveto{\pgfqpoint{-.353\pgfutil@tempdima}{-.353\pgfutil@tempdima}}%
\pgfpatharc{-135}{-45}{.5\pgfutil@tempdima and .5\pgfutil@tempdima}%
\pgfusepath{stroke}%
\endgroup
}}
\pgfdeclareshape{emoticon sad}
{
\inheritsavedanchors[from=circle]
\inheritanchorborder[from=circle]
\inheritanchor[from=circle]{north}
\inheritanchor[from=circle]{north west}
\inheritanchor[from=circle]{north east}
\inheritanchor[from=circle]{center}
\inheritanchor[from=circle]{west}
\inheritanchor[from=circle]{east}
\inheritanchor[from=circle]{mid}
\inheritanchor[from=circle]{mid west}
\inheritanchor[from=circle]{mid east}
\inheritanchor[from=circle]{base}
\inheritanchor[from=circle]{base west}
\inheritanchor[from=circle]{base east}
\inheritanchor[from=circle]{south}
\inheritanchor[from=circle]{south west}
\inheritanchor[from=circle]{south east}
\inheritbackgroundpath[from=circle]
%
% Background path
%
\inheritbackgroundpath[from=circle]
\beforebackgroundpath{
\pgfutil@tempdima=\radius%
\pgfmathsetlength{\pgf@xb}{\pgfkeysvalueof{/pgf/outer xsep}}%
\pgfmathsetlength{\pgf@yb}{\pgfkeysvalueof{/pgf/outer ysep}}%
\color{black}
\pgfpathellipse{\pgfqpoint{.25\pgfutil@tempdima}{.25\pgfutil@tempdima}}%
{\pgfqpoint{.1\pgfutil@tempdima}{0pt}}%
{\pgfqpoint{0pt}{.15\pgfutil@tempdima}}%
\pgfusepath{fill}%
\pgfpathellipse{\pgfqpoint{-.25\pgfutil@tempdima}{.25\pgfutil@tempdima}}%
{\pgfqpoint{.1\pgfutil@tempdima}{0pt}}%
{\pgfqpoint{0pt}{.15\pgfutil@tempdima}}%
\pgfusepath{fill}%
\pgfusepath{stroke}%
\begingroup
\pgfsetlinewidth{0.4pt}%
\pgflowlevelsynccm
\pgfpathmoveto{\pgfqpoint{-.353\pgfutil@tempdima}{-.353\pgfutil@tempdima}}%
\pgfpathcurveto{\pgfqpoint{-.353\pgfutil@tempdima}{-.353\pgfutil@tempdima}}
{\pgfpoint{0pt}{-.153\pgfutil@tempdima}}
{\pgfqpoint{.353\pgfutil@tempdima}{-.353\pgfutil@tempdima}}
\pgfusepath{stroke}%
\endgroup
}}
\pgfdeclareshape{emoticon straight face}
{
\inheritsavedanchors[from=circle]
\inheritanchorborder[from=circle]
\inheritanchor[from=circle]{north}
\inheritanchor[from=circle]{north west}
\inheritanchor[from=circle]{north east}
\inheritanchor[from=circle]{center}
\inheritanchor[from=circle]{west}
\inheritanchor[from=circle]{east}
\inheritanchor[from=circle]{mid}
\inheritanchor[from=circle]{mid west}
\inheritanchor[from=circle]{mid east}
\inheritanchor[from=circle]{base}
\inheritanchor[from=circle]{base west}
\inheritanchor[from=circle]{base east}
\inheritanchor[from=circle]{south}
\inheritanchor[from=circle]{south west}
\inheritanchor[from=circle]{south east}
\inheritbackgroundpath[from=circle]
%
% Background path
%
\inheritbackgroundpath[from=circle]
\beforebackgroundpath{
\pgfutil@tempdima=\radius%
\pgfmathsetlength{\pgf@xb}{\pgfkeysvalueof{/pgf/outer xsep}}%
\pgfmathsetlength{\pgf@yb}{\pgfkeysvalueof{/pgf/outer ysep}}%
\color{black}
\pgfpathellipse{\pgfqpoint{.25\pgfutil@tempdima}{.25\pgfutil@tempdima}}%
{\pgfqpoint{.1\pgfutil@tempdima}{0pt}}%
{\pgfqpoint{0pt}{.15\pgfutil@tempdima}}%
\pgfusepath{fill}%
\pgfpathellipse{\pgfqpoint{-.25\pgfutil@tempdima}{.25\pgfutil@tempdima}}%
{\pgfqpoint{.1\pgfutil@tempdima}{0pt}}%
{\pgfqpoint{0pt}{.15\pgfutil@tempdima}}%
\pgfusepath{fill}%
\pgfusepath{stroke}%
\begingroup
\pgfsetlinewidth{0.4pt}%
\pgflowlevelsynccm
\pgfpathmoveto{\pgfqpoint{-.353\pgfutil@tempdima}{-.353\pgfutil@tempdima}}%
\pgfpathlineto{\pgfqpoint{.353\pgfutil@tempdima}{-.353\pgfutil@tempdima}}
\pgfusepath{stroke}%
\endgroup
}}
\pgfdeclareshape{emoticon wink}
{
\inheritsavedanchors[from=circle]
\inheritanchorborder[from=circle]
\inheritanchor[from=circle]{north}
\inheritanchor[from=circle]{north west}
\inheritanchor[from=circle]{north east}
\inheritanchor[from=circle]{center}
\inheritanchor[from=circle]{west}
\inheritanchor[from=circle]{east}
\inheritanchor[from=circle]{mid}
\inheritanchor[from=circle]{mid west}
\inheritanchor[from=circle]{mid east}
\inheritanchor[from=circle]{base}
\inheritanchor[from=circle]{base west}
\inheritanchor[from=circle]{base east}
\inheritanchor[from=circle]{south}
\inheritanchor[from=circle]{south west}
\inheritanchor[from=circle]{south east}
\inheritbackgroundpath[from=circle]
%
% Background path
%
\inheritbackgroundpath[from=circle]
\beforebackgroundpath{
\pgfutil@tempdima=\radius%
\pgfmathsetlength{\pgf@xb}{\pgfkeysvalueof{/pgf/outer xsep}}%
\pgfmathsetlength{\pgf@yb}{\pgfkeysvalueof{/pgf/outer ysep}}%
\color{black}
\pgfpathmoveto{\pgfqpoint{-.40\pgfutil@tempdima}{.25\pgfutil@tempdima}}%
\pgfpathcurveto{\pgfqpoint{-.40\pgfutil@tempdima}{.25\pgfutil@tempdima}}%
{\pgfqpoint{-.25\pgfutil@tempdima}{.10\pgfutil@tempdima}}%
{\pgfqpoint{-.10\pgfutil@tempdima}{.25\pgfutil@tempdima}}%
\pgfpathellipse{\pgfqpoint{.25\pgfutil@tempdima}{.25\pgfutil@tempdima}}%
{\pgfqpoint{.1\pgfutil@tempdima}{0pt}}%
{\pgfqpoint{0pt}{.15\pgfutil@tempdima}}%
\pgfusepath{fill}%
\pgfusepath{stroke}%
\begingroup
\pgfsetlinewidth{0.4pt}%
\pgflowlevelsynccm
\pgfpathmoveto{\pgfqpoint{-.353\pgfutil@tempdima}{-.353\pgfutil@tempdima}}%
\pgfpatharc{-135}{-45}{.5\pgfutil@tempdima and .5\pgfutil@tempdima}%
\pgfusepath{stroke}%
\endgroup
}}%
\endinput
The name of the first emoticon is emoticon :-). The second is emoticon :-(.
Here an example how to use these new shapes:
\documentclass[11pt]{scrartcl}
\usepackage{tikz}
\usetikzlibrary{shapes.emoticon}
\begin{document}
\vspace{1cm}
\tikz \node [shape=emoticon happy,draw,fill=yellow] {};
\tikz \node [shape=emoticon sad,draw,fill=yellow] {};
\begin{tikzpicture}[ultra thick]
\node [shape=emoticon happy,draw,scale=8,fill=orange] {};
\end{tikzpicture}
\begin{tikzpicture}[ultra thick]
\node [shape=emoticon sad,draw,scale=8,fill=orange] {};
\end{tikzpicture}
\begin{tikzpicture}[ultra thick]
\node [shape=emoticon straight face,draw,scale=8,fill=orange] {};
\end{tikzpicture}
\begin{tikzpicture}[ultra thick]
\node [shape=emoticon wink,draw,scale=8,fill=orange] {};
\end{tikzpicture}
\end{document}

- 95,075
The fontawesome package provides this possibility:
\documentclass{beamer}
\usepackage{fontawesome}
\begin{document}
\begin{frame}
\begin{description}
\item[\faSmileO] good
\item[\faMehO] indifferent
\item[\faFrownO] bad
\end{description}
\end{frame}
\end{document}

- 29,607
-
1
-
1@WangyanLi try it and you'll see:
\faFrown(fontawesomeis only supported in Xe/LuaLaTeX.) – Paul Gessler Feb 01 '15 at 05:45 -
With the latest version of
fontawesome, you must use\faSmileO,\faMehOand\faFrownO... – Paul Gaborit Nov 06 '15 at 14:54 -
1@PaulGessler The
fontawesomepackage works very well withpdflatex. – Paul Gaborit Nov 06 '15 at 14:55 -
@PaulGaborit it didn't at the time this answer was written... :-) Thanks, updated for the latest version. – Paul Gessler Nov 06 '15 at 15:18
I use a stack to make the \SmileBarometer[<level>]. EDITED to make mood scale from -100 to 100.
EDITED to change eye color with mood. RE-EDITED to make eyes \Large.
As Andrew notes in a comment, one could set up macros like \def\SoSo{\SmileBarometer[0]} to lock in particular moods.
\documentclass{article}
\usepackage{xcolor,graphicx,stackengine}
\makeatletter
\newcommand\SmileBarometer[1][100]{%
\savestack\Mouth{\if0#1\color{red}\rule{1.5ex}{.45pt}\else
\color{red}\scalebox{.8}[#1]{\rotatebox{90}{\scalebox{.013}[1]{(}}}\fi}%
\ifnum#1<0\relax\def\eyecolor{cyan!\the\numexpr100#1!red}\else
\def\eyecolor{brown!\the\numexpr100-#1!cyan}\fi
\stackinset{c}{}{c}{-2.5pt}{\Mouth}{%
\stackinset{c}{}{c}{2pt}{\color{\eyecolor}\Large.\kern.7pt.}{\scalebox{1.5}{$\bigcirc$}}}}
\makeatother
\begin{document}
\SmileBarometer{}
\SmileBarometer[80]
\SmileBarometer[60]
\SmileBarometer[0]
\SmileBarometer[-60]
\SmileBarometer[-80]
\SmileBarometer[-100]
\end{document}
- 237,551
-
1I might suggest setting up macros for these percentages instead, e.g.
\superDuper,\meh,\dontAsk... – musarithmia Nov 06 '15 at 16:15
There is the tikzsymbols package which has some small variety of 2D and 3D smileys.
My MWE looks like this:
\documentclass{beamer}
\usepackage{tikzsymbols}
\begin{document}
\begin{frame}
\frametitle{Everything between \textbackslash frowney and \textbackslash smiley}
\begin{itemize}
\item[\cChangey{2}] There is even Schrödingers Cat \SchrodingersCat{0}
\item[\cChangey{0}] Some commands are also available in German
\item[\cChangey{-2}] None \dTongey
\end{itemize}
\end{frame}
\end{document}
And here is a nice Story showing some of the smileys https://tex.stackexchange.com/a/227226/217553
- 124
- 10
With Unicode and lualatex
You can use Unicode emojis to insert all kinds of faces:

Here's the complete source file:
\documentclass{beamer}
\usepackage{fontspec}
\newcommand{\emoji}[1]{%
{\fontspec{Noto Color Emoji}[RawFeature={mode=harf}]{#1}}%
}
\begin{document}
\begin{frame}
\begin{itemize}
\item Happy: \emoji{}
\item Neutral: \emoji{}
\item Not amused: \emoji{}
\item More: \emoji{️❤️️}
\end{itemize}
\end{frame}
\end{document}
Compile the file with lualatex.
This uses Noto Color Emoji as the font that renders the emojis. I installed the font on Arch Linux using
pacman -Sy noto-fonts-emoji
which put NotoColorEmoji.ttf in /usr/share/fonts/noto/.
The \emoji command is used to limit where text is rendered with the Noto Color Emoji font. Otherwise the non-emoji text such as "Happy: " wouldn't appear in the resulting PDF.
lualatex --version gives
This is LuaHBTeX, Version 1.12.0 (TeX Live 2020/Arch Linux)
- 571

