Newsgroup: it.comp.software.tex
Titolo: Più di un background layer con Beamer e PGF/TikZ. È possibile?

Vorrei ottenere un frame incrementale con Beamer composto dalle 
seguenti 3 slide:
1ª - mostra alcuni nodi nella parte superiore di un diagramma e sullo 
sfondo (layer "background" di PGF) traccia un rettangolo giallo che li 
ingloba
2ª - oltre alla precedenti slide, mostra altri nodi nella parte 
inferiore del diagramma e sullo sfondo un altro rettangolo giallo che 
li ingloba (un altro background, che viene dopo il primo ma prima del 
layer "main")
3ª - oltre alle precedenti slide, mostra il resto del diagramma
però al momento le slide mi vengono così:
1ª - nodi superiori OK, loro rettangolo di background OK, però viene 
mostrato già qui anche il secondo rettangolo (vuoto) che vorrei solo 
dalla seconda slide in poi
2ª - OK, è come la voglio io
3ª - anche questa OK
Posso ottenere ciò che voglio? Da quel che capisco del manuale 
PGF/TikZ, il problema è con gli overlay e i comandi \begin{pgfonlayer}. 
Vorrei che la parte del background dentro pgfonlayer nel 
\visible<2->{...} fosse veramente disegnata a partire dalla seconda 
slide, invece lo è dalla prima. Allego il codice e racchiudo tra 
%%%%%%%%%% la parte sbagliata in questione.
%!TEX encoding = UTF-8 Unicode
\documentclass[english]{beamer}
\usepackage[utf8x]{inputenc}
\usepackage[english]{babel}
\usepackage{tikz}
\usetikzlibrary{arrows,shapes,positioning,calc}
\pgfdeclarelayer{background}
\pgfsetlayers{background,main}
% block styles used in diagram
\tikzset{reddish_box/.style={
    	rectangle,minimum size=6mm,very thick,
	draw=red!50!black!50,top color=white,
	bottom color=red!50!black!20
	}
}
\tikzset{grey_rounded_box/.style={
	rectangle,minimum size=6mm,
	rounded corners=2mm,very thick,
	draw=black!50,	top color=white,
	bottom color=black!20
	}
}
\tikzset{transparent_box/.style={
	rectangle,draw=white,top color=white
	}
}
\begin{document}
\begin{frame}{Algorithm sketch}
\begin{figure}
\begin{tikzpicture}[auto,scale=0.75,%
			transform shape] % thus, nodes are also affected by scaling
	\tikzstyle{line} = [draw, -latex'];
	\visible<3->{
		\node (cross_prod) {$\times$};
		\node[right=of cross_prod] (result) {rotation aligning them};
	}
	\visible<1->{
		\node[transparent_box, above=of cross_prod] (target_or) {orientation};
		\node[reddish_box, left=of target_or] (target_rec) {3D reconstruction};
		\node[grey_rounded_box, above left=of target_rec] 
(left_target_tracker) {left eye tracker};
		\node[grey_rounded_box, above=of target_rec] (right_target_tracker) 
{right eye tracker};
		\node[grey_rounded_box, above right=of target_rec] (target_kin) {kinematics};
		\begin{pgfonlayer}{background} % big coloured rectangle
			% compute helper coordinates
			\path (left_target_tracker.west |- 
right_target_tracker.north)+(-0.5,0.3) node (nw_target) {};
			\path (target_rec.south -| target_or.east)+(+0.3,-0.2) node (se_target) {};
			\path[fill=yellow!18,rounded corners, draw=black!50, dashed] 
(nw_target) rectangle (se_target);
		\end{pgfonlayer}
	}
	\visible<2->{
		\node[transparent_box, below=of cross_prod] (hand_or) {orientation};
		\node[reddish_box, left=of hand_or] (hand_rec) {3D reconstruction};
		\node[grey_rounded_box, below left=of hand_rec] (left_hand_tracker) 
{left eye tracker};
		\node[grey_rounded_box, below=of hand_rec] (right_hand_tracker) 
{right eye tracker};
		\node[grey_rounded_box, below right=of hand_rec] (hand_kin) {kinematics};
		%%%%%%%%%%
		\begin{pgfonlayer}{background} % big coloured rectangle
			% compute helper coordinates
			\path (left_hand_tracker.west |- hand_rec.north)+(-0.5,0.3) node 
(nw_hand) {};
			\path (right_hand_tracker.south -| hand_kin.east)+(+0.3,-0.2) node 
(se_hand) {};
			\path[fill=yellow!18,rounded corners, draw=black!50, dashed] 
(nw_hand) rectangle (se_hand);
		\end{pgfonlayer}
		%%%%%%%%%%
	}
	\visible<3->{
		\path[line] (target_or) -> (cross_prod);
		\path[line] (hand_or) -> (cross_prod);
		\path[line] (cross_prod) -> (result);
	}
\end{tikzpicture}
\end{figure}
\end{frame}
\end{document}
-- 
Tchau, -João do Sabão

 dalla seconda slide in poi
Mi ha aiutato un collega. Una soluzione possibile, non so se elegante, 
è quella di porre il \path incriminato (quello del secondo rettangolo 
background) dentro a un \visible<2-> (a sua volta dentro di 
{pgfonlayer}{background}). Così:
[...]
	\visible<2->{
		\node[transparent_box, below=of cross_prod] (hand_or) {orientation};
		\node[reddish_box, left=of hand_or] (hand_rec) {3D ellipse};
		\node[grey_rounded_box, below left=of hand_rec] (left_hand_tracker) 
{left eye tracker};
		\node[grey_rounded_box, below=of hand_rec] (right_hand_tracker) 
{right eye tracker};
		\node[grey_rounded_box, below right=of hand_rec] (hand_kin) {kinematics};
		\path[line] (hand_rec) -> (hand_or);
		\path[line] (left_hand_tracker) -> (hand_rec);
		\path[line] (right_hand_tracker) -> (hand_rec);
		\path[line] (hand_kin) -> (hand_rec);
	}
   %%%%%%%%%%
	\begin{pgfonlayer}{background} % big coloured rectangle
		% compute helper coordinates
		\path (left_hand_tracker.west |- hand_rec.north)+(-0.5,0.3) node 
(nw_hand) {};
		\path (right_hand_tracker.south -| hand_kin.east)+(+0.3,-0.2) node 
(se_hand) {};
		\visible<2->{ % necessary, otherwise this second background will be 
drawn <1->
			\path[fill=yellow!18,rounded corners, draw=black!50, dashed] 
(nw_hand) rectangle (se_hand);
		}
	\end{pgfonlayer}
   %%%%%%%%%%
	\visible<3->{
[...]
