# Beamer, tikz-cd: uncover does not work

I have a similar problem to this one, only I'm using tikz-cd instead of tikz.

Here is a minimal example:

\begin{frame}
\begin{tikzcd}[ampersand replacement=\&]
1{\uncover<2->{\arrow{r}}}\&2
\end{tikzcd}
\end{frame}


This will have two slides, both having the arrow. Removing the {...} will lead to an Error:

Giving up on this path. Did you forget a semicolon?


Using \only instead of \uncover does work, but does move things in bigger diagrams, which I don't want.

Is there a workaround without converting all my tikz-cd diagrams into tikzpictures?

## 1 Answer

Use the visible on style:

\documentclass{beamer}
\usepackage{tikz-cd}

\tikzset{
invisible/.style={opacity=0},
visible on/.style={alt={#1{}{invisible}}},
alt/.code args={<#1>#2#3}{%
\alt<#1>{\pgfkeysalso{#2}}{\pgfkeysalso{#3}}%
}
}

\begin{document}

\begin{frame}
\begin{tikzcd}[ampersand replacement=\&]
1 \arrow[visible on=<2->,r]\arrow[visible on=<3>,d] \& 2\arrow[visible on=<2->,d] \\
3 \arrow[visible on=<3>,r] \& 4
\end{tikzcd}
\end{frame}

\end{document}


• How can you apply this visibility to the nodes? That is, to make them appear together with each relevant arrow? – Tom Verhoeff Jul 26 '19 at 21:06
• I found the answer to my question: you can pass key-value pairs to nodes using the syntax |[key=value]| before the node. Thus, node 3 can be shown from slide three onwards with |[visible on=<3->]| 3. – Tom Verhoeff Jul 28 '19 at 12:01
• @Tom-Verhoeff, I can't believe that works! Thanks for answering your own question publicly. – Timtro Jan 25 '20 at 5:21