For the first, beamer uses templates (itemize item
, itemize subitem
, itemize subsubitem
) to typeset the item symbol. See the section "Itemizations, Enumerations, and Descriptions" (11.1 in my version) in the beamer manual. If you read the source files beamerinnerthemedefault.sty
and beamerbaseauxtemplates.sty
you can see the syntax for declaring other choices for this template. So to define ticks (by which I understand checkmarks) and cross item icons you can do something like this:
\usepackage{pifont}
\defbeamertemplate{itemize item}{cross}{\scriptsize\raise1.25pt\hbox{\donotcoloroutermaths\ding{54}}}
\defbeamertemplate{itemize subitem}{cross}{\tiny\raise1.25pt\hbox{\donotcoloroutermaths\ding{54}}}
\defbeamertemplate{itemize subsubitem}{cross}{\tiny\raise1.25pt\hbox{\donotcoloroutermaths\ding{54}}}
\defbeamertemplate{itemize item}{tick}{\scriptsize\raise1.25pt\hbox{\donotcoloroutermaths\ding{52}}}
\defbeamertemplate{itemize subitem}{tick}{\tiny\raise1.25pt\hbox{\donotcoloroutermaths\ding{52}}}
\defbeamertemplate{itemize subsubitem}{tick}{\tiny\raise1.25pt\hbox{\donotcoloroutermaths\ding{52}}}
Then if you wanted to make those icons the default you would just do:
\setbeamertemplate{itemize item}[cross] % and so on.
But to use your custom icons to highlight the current item you can do this:
\documentclass{beamer}
\useinnertheme{rectangles}% or whatever inner theme you want
% template defs from above
\makeatletter
\newenvironment{crossenv}{%
\only{%
\beamer@computepref\@itemdepth% sets \beameritemnestingprefix
\setbeamertemplate{itemize \beameritemnestingprefix item}[cross]
}% overlay/action specification gets added here by beamer
}{%
}
\newenvironment{tickenv}{%
\only{%
\beamer@computepref\@itemdepth% sets \beameritemnestingprefix
\setbeamertemplate{itemize \beameritemnestingprefix item}[tick]
}% overlay/action specification gets added here by beamer
}{%
}
\makeatother
\begin{document}
\begin{frame}{Single list}
\begin{itemize}
\item<1- | tick@+-> foo
\item<1- | cross@+-> bar
\item<1- | tick@+-> foo, again
\end{itemize}
\end{frame}
\begin{frame}{Nested lists}
\begin{itemize}[<1-| cross@+>]
\item foo
\item bar
\begin{itemize}
\item bar one
\item bar none
\begin{itemize}
\item bar who?
\item bar none
\end{itemize}
\end{itemize}
\item baz
\end{itemize}
\end{frame}
\end{document}
Because the crossenv enviroment surrounds each selected item, the change in template is local. After the crossenv environment the template returns to whatever it was before. This means you don't need to know what the symbol is by default. So this will work with any inner theme you are using.
Final Edits: I think I finally got what you wanted. You have to only change the template at the current itemize level, which requires a bit of h@ckery. But diving into beamerbaselocalstructure.sty
revealed a solution.
Final Final Edits: Now with ticks and crosses both.
I am definitely unfamiliar with both beamer
and tikz
(do not quite get what the \only
are supposed to do) but perhaps this could go in the direction you want:
\documentclass{beamer}
\usepackage{tikz}
\usetikzlibrary{chains}
\newcounter{count}
% helper macro:
\long\def\GobToSemiColon #1;{}
\newcommand\myPicture{
\begin{tikzpicture}
\begin{scope}[start chain = going below]
\ifnum\value{count}<1 \expandafter\GobToSemiColon\fi
\ifnum\value{count}>3 \expandafter\GobToSemiColon\fi
\node[draw, rectangle, on chain] {display only when counter is between
1 and 3};
\ifnum\value{count}>-1 \expandafter\GobToSemiColon\fi
\node[draw, rectangle, on chain] {display only when counter is
negative};
\ifnum\value{count}<100 \expandafter\GobToSemiColon\fi
\ifnum\value{count}>200 \expandafter\GobToSemiColon\fi
\node[draw, rectangle, on chain] {display only if counter is between
100 and 200};
\ifnum\value{count}<3 \expandafter\GobToSemiColon\fi
\ifnum\value{count}>20 \expandafter\GobToSemiColon\fi
\node[draw, circle, on chain] {only when counter is in the range 3 to 20};
\end{scope}
\end{tikzpicture}
}
\begin{document}
\begin{frame}
\only{\setcounter{count}{-3}\myPicture}
\only{\setcounter{count}{105}\myPicture}
\only{\setcounter{count}{39}\myPicture}
\only{\setcounter{count}{2}\myPicture}
\only{\setcounter{count}{5}\myPicture}
\end{frame}
\end{document}
Best Answer
tikzmark
is one option. You can use the information in the link mentioned in samcarter's comment for help locating the right places to end the arrows.