
Quero desenhar um gráfico completo com tikZ. Primeiro os nós, depois as linhas do primeiro nó para os demais, depois as linhas do segundo nó para os demais e assim por diante. Todas essas etapas funcionam com loops foreach e cada desenho deve aparecer passo a passo com a função beamer \visible<..>. Minha ideia era usar um contador LaTeX global para contar todas as etapas em todos os loops foreach.
\documentclass[10pt,ngerman]{beamer}
\usepackage{tikz}
\newcounter{steps}
\begin{document}
\begin{frame}{Complete Graph}
\begin{tikzpicture}[
kreis/.style={circle, draw, minimum size=1.5cm},
]
\foreach [count=\i] \letter in {A,...,F}{%
% \stepcounter{steps}
\visible<\thesteps->{%
\node [kreis] (\letter) at (\i*60+30:2.5) {\huge{\letter}};
}
}
\end{tikzpicture}
\end{frame}
\end{document}
O MWE compila, mas quando removo o comentário, o texmaker é executado em um loop infinito. Por que?
Responder1
Você sempre aumenta o contador para um valor em que mais um slide é inserido porque o slide é "executado" várias vezes. A beamer
classe tem um comando para tais situações, \resetcounteronoverlays
. Usar este comando corrige seu problema.
\documentclass[10pt,ngerman]{beamer}
\usepackage{tikz}
\newcounter{steps}
\resetcounteronoverlays{steps}
\begin{document}
\begin{frame}{Complete Graph}
\begin{tikzpicture}[
kreis/.style={circle, draw, minimum size=1.5cm},
]
\foreach [count=\i] \letter in {A,...,F}{%
\stepcounter{steps}
\visible<\thesteps->{%
\node [kreis] (\letter) at (\i*60+30:2.5) {\huge{\letter}};
}
}
\end{tikzpicture}
\end{frame}
\end{document}
No entanto, eu desenharia isso de forma diferente de qualquer maneira.
\documentclass[10pt,ngerman]{beamer}
\usepackage{tikz}
\usetikzlibrary{overlay-beamer-styles}
\begin{document}
\begin{frame}{Complete Graph}
\begin{tikzpicture}[
kreis/.style={circle, draw, minimum size=1.5cm},
]
\foreach [count=\i] \letter in {A,...,F}{%
{%
\node[visible on=<\i->] [kreis] (\letter) at (\i*60+30:2.5) {\huge{\letter}};
}
}
\end{tikzpicture}
\end{frame}
\end{document}