[Tex/LaTex] beamer, enumitem – enumerate ball label

#enumeratebeamerenumitemlabels

So, i "need" to use the enumitem package in order to increase the allowed depth for itemize/enumerate.
To use the ball like label in those listing environments, I've tried the following code :

\documentclass[11pt]{beamer}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{lmodern}
\usepackage[francais]{babel}

\usepackage{enumitem}
\usepackage{tikz}

\makeatletter

% create beamer ball commands
\newcommand\beamerball{%
    \parbox[t]{10pt}{\raisebox{0.2pt}{\beamer@usesphere{item}{bigsphere}}}}

\newcommand\tikzball[1]{%
    \tikz[baseline=(char.base)]{%
        \node[circle,ball color=purple, shade, color=white,inner sep=1.2pt] (char) {\tiny #1};
    }
}

% create new list for increased depth
\usepackage{enumitem}
\renewlist{itemize}{itemize}{6}
\setlist[itemize]{label=\beamerball, labelsep=0pt, leftmargin=2em}
\setlist[itemize, 1]{leftmargin=1.2em}
\renewlist{enumerate}{enumerate}{6}
\setlist[enumerate]{label=\tikzball{\arabic*}, leftmargin=2em}
\setlist[enumerate, 1]{leftmargin=1.2em}

\makeatother

\begin{document}
\begin{frame}
    \tikzball{0} tikzball command test

    \begin{itemize}
        \item test 1
        \item test 2
        \begin{enumerate}
            \item test 2.1
            \item test 2.2
        \end{enumerate}
    \end{itemize}
\end{frame}
\end{document}

Itemize works fine, the ball command (tikzball) for enumerate too.
But when I add label=\tikzball{\arabic*} in the enumerate settings, I get an Undefined control sequence error.
Here is the linked log extract :

! Undefined control sequence.
<recently read> \tikz@origsemi 

l.45 \end{frame}

? 
! Emergency stop.
<recently read> \tikz@origsemi 

l.45 \end{frame}

End of file on the terminal!

Best Answer

The \tikzball command must be protected, i.e. use label={\protect\tikzball{...}}.

\documentclass[11pt]{beamer}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{lmodern}
\usepackage[francais]{babel}

\usepackage{enumitem}
\usepackage{tikz}

\makeatletter

% create beamer ball commands
\newcommand\beamerball{%
  \parbox[t]{10pt}{\raisebox{0.2pt}{\beamer@usesphere{item}{bigsphere}}}}

\newcommand\tikzball[1]{%
    \tikz[baseline=(char.base)]{%
      \node[circle,ball color=purple, shade, color=white,inner sep=1.2pt] (char) {\tiny #1};
    }
}

% create new list for increased depth
\usepackage{enumitem}

\renewlist{itemize}{itemize}{6}
\setlist[itemize]{label=\beamerball, labelsep=0pt, leftmargin=2em}
\setlist[itemize, 1]{leftmargin=1.2em}
\renewlist{enumerate}{enumerate}{6}
\setlist[enumerate]{label={\protect\tikzball{\arabic*}}, leftmargin=2em}
\setlist[enumerate, 1]{leftmargin=1.2em}

\makeatother

\begin{document}
\begin{frame}
  \tikzball{0} tikzball command test

    \begin{itemize}
        \item test 1
        \item test 2
        \begin{enumerate}
            \item test 2.1
            \item test 2.2
        \end{enumerate}
    \end{itemize}
\end{frame}
\end{document}

enter image description here