# Customize circled numbers

Below is one solution (by @Stefan) for circled numbers with the help of tikz. What can I do to make it such that I can in-place customize its draw color, fill color, text color, etc.?

\documentclass[tikz,border=7pt]{standalone}
\newcommand*\circled[1]{\tikz[baseline=(char.base)]{
\node[shape=circle,draw,inner sep=2pt] (char) {#1};}}

\begin{document}
\circled{1}
\end{document}


I would recommend using tikzmark here because this amazing library detects which mode (text vs. math mode, if math mode, which) you are in, so you won't have to care about this. And I would like to argue that one should specify the line width in relative units such that it scales with the font size. Of course, you have all the possibilities to color stuff and so on. (The best part is that you can connect the nodes in paths and so on.)

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{tikzmark}
\tikzset{mycircled/.style={circle,draw,inner sep=0.1em,line width=0.04em}}
\begin{document}
abc \tikzmarknode[mycircled,draw=red]{t1}{d}
{\Huge \tikzmarknode[mycircled,draw=blue,text=purple]{t1}{D}}
$\int\limits_{\tikzmarknode[mycircled,red]{a1}{a}}^{\tikzmarknode[mycircled,blue]{b1}{b}} f(x)\,\mathrm{d}x=F(\tikzmarknode[mycircled,red]{a2}{a})- F(\tikzmarknode[mycircled,blue]{b2}{b})$
\begin{tikzpicture}[overlay,remember picture]
\draw[latex-latex,red] (a1) to[bend right] (a2);
\draw[latex-latex,blue] (b1) to[bend left] (b2);
\end{tikzpicture}
\end{document}


• The TikZ Wizard at work! – user36296 Mar 24 at 13:01
• @marmot Why can't I compile your code? – blackened Mar 24 at 13:31
• @blackened Probably because you have not the most recent version of tikzmark. \tikzmarknode was added last June or so. You may have to update your TeX installation. – marmot Mar 24 at 13:32

Edit after @marmot's (kind :P) comment (thanks):

This answer REALLY takes some care about a somehow constant size for all letters but not when line width is increased/decreased, because I had to set this parameter as extra or make some hacks in the way that it will be provided to my macro and I am not really sure if the OP need to change the line width (I just gave it initally as an idea about improving the appearance.)

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\makeatletter
\newlength{\mylength}
\xdef\CircleFactor{1.1}
\setlength\mylength{\dimexpr\f@size pt}
\newsavebox{\mybox}

\newcommand*\circled[2][draw=blue]{\savebox\mybox{\vbox{\vphantom{WL1/}#1}}\setlength\mylength{\dimexpr\CircleFactor\dimexpr\ht\mybox+\dp\mybox\relax\relax}\tikzset{mystyle/.style={circle,#1,minimum height={\mylength}}}
\tikz[baseline=(char.base)]
\node[mystyle] (char) {#2};}
\makeatother
\begin{document}
This answer takes care of the current font size in a way that \circled{i} and \circled{W} will appear the same size here and in the next paragpaph with a \verb|\tiny| (or whatever font).

\noindent Demonstration:\\
\circled{i}\circled{i}\circled{W}\circled{W}\\
\circled{W}\circled{W}\circled{i}\circled{i}

\tiny This answer takes care of the current font size in a way that \circled{i} and \circled{W} will appear the same size here and in the this with a \verb|\tiny| (or whatever font).

\noindent Demonstration:\\
\noindent\circled{i}\circled{i}\circled{W}\circled{W}\\
\circled{W}\circled{W}\circled{i}\circled{i}

\normalsize Also you can give a parameter inside an optional argument of the command and have different appearance:

\circled[text=blue,fill=red,draw=black]{W}\circled[fill=yellow,draw=red,text=blue]{W}

\end{document}


This is the old answer that DOESN'T REALY take care for the size according to my answer here.

You will select the style and could add your preferred style inside the optional argument of the definition of the command (I just placed the draw=blue option)

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\makeatletter
\def\mfontsize{\f@size}
\newcommand*\circled[2][draw=blue]{\tikzset{mystyle/.style={circle,#1,minimum height={\mfontsize*1.4}}}\tikz[baseline=(char.base)]
{
\node[mystyle] (char) {\vphantom{WAH1g}#2};}}
\makeatother

\begin{document}
This is \circled{a} \circled[text=blue,fill=orange,draw=red, line width=0.3mm]{1} balloon.

\end{document}


• Takes care of the size. Really? Try \begin{document} \noindent\circled{i} \noindent\circled{w} \end{document} – marmot Mar 24 at 12:51
• @marmot: Possibly it was a lie... :P. If it was for "real" your example would not fail. (Thanks... kidding because this "Really?" heard funny to me. Edited). – koleygr Mar 24 at 13:39

You can add more parameters to the command.

MWE:

\documentclass[tikz,border=7pt]{standalone}
\newcommand*\circled[4]{\tikz[baseline=(char.base)]{
\node[shape=circle, fill=#2, draw=#3, text=#4, inner sep=2pt] (char) {#1};}}

\begin{document}
\circled{1}{red}{green}{blue}
\end{document}


Result:

You can also specify default values for the colors using \NewDocumentCommand from the xparse package:

\documentclass[tikz,border=7pt]{standalone}
\usepackage{xparse}
\NewDocumentCommand{\circleddefaults}{
O{black}
O{yellow}
O{orange}
m
}{
\tikz[baseline=(char.base)]{
\node[shape=circle, fill=#1, draw=#2, text=#3, inner sep=2pt] (char) {#4};}}

\newcommand*\circled[4]{\tikz[baseline=(char.base)]{
\node[shape=circle, fill=#2, draw=#3, text=#4, inner sep=2pt] (char) {#1};}}

\begin{document}
\circled{1}{red}{green}{blue}

\circleddefaults[blue,brown]{2} % two colors specified, third default

\circleddefaults{3} % all defaults
\end{document}


Here is a "double" customization that defines :

• an optional parameter of \circled that can be any style applied to the node,
• an optional every number style that, if defined, is applied to all circled numbers.
\documentclass[border=7pt]{standalone}
\usepackage{tikz}
\newcommand*\circled[2][]{\tikz[baseline=(char.base)]{
\node[shape=circle,draw,inner sep=2pt,#1,every number/.try] (char) {#2};}}
\tikzstyle{every number}=[draw=red] % I like to use tikzstyle ;)
\begin{document}
\circled{1}\circled[fill=yellow]{2}
\end{document}


Here there is a minimal proposal hoping to have understood your request.

\documentclass[tikz,border=7pt]{standalone}
\newcommand*\circled[1]{\tikz[baseline=(char.base)]{
\node[shape=circle, fill= red, draw=yellow, inner sep=2pt] (char) {#1};}}

\begin{document}
\circled{1}
\end{document}

• I need to be able to change the style when I use it. – blackened Mar 24 at 9:15
• In my humble opinion, it is necessary to change the excellent macro according to your needs with a new command. It depends on what you need. Have you looked at TikZ's manual? – Sebastiano Mar 24 at 9:17