我试图做同样的事情这个问题,即在范围之间添加边。但是,我正在使用 \documentclass{beamer} 制作 Beamer 演示文稿,并且与那里给出的答案完全相同的代码不起作用。当我使用 article 类时,它们工作得很好。例如,我无法编译以下内容:
\documentclass{beamer}
\usepackage{tikz}
\begin{document}
\begin{frame}
\tikzstyle{vertex}=[circle,draw,fill=black!20]
\makeatletter
\tikzset{%
prefix node name/.code={%
\tikzset{%
name/.code={\edef\tikz@fig@name{#1 ##1}}
}%
}%
}
\makeatother
\begin{tikzpicture}
% ---- Copy 1
\begin{scope}[yshift=-32pt,prefix node name=G1]
\node[vertex] (u) at (0, 0) {u};
\node[vertex] (v) at (0, 0) {v};
\end{scope}
% ---- Copy 2
\begin{scope}[yshift=32pt,prefix node name=G2]
\node[vertex] (u) at (0, 0) {u};
\node[vertex] (v) at (0, 0) {v};
\end{scope}
\draw (G1 u) -- (G2 v);
\end{tikzpicture}
\end{frame}
\end{document}
我收到以下错误“!包 pgf 错误:没有已知的名为 'G1' 的形状。”以及“!\iterate 定义中的参数编号非法。”
有人知道在 Beamer 中可行的解决方法吗?
答案1
将样式定义移至序言部分。
此外,\tikzstyle
被认为已被弃用,因此我也将vertex
在其中指定样式\tikzset
。
\documentclass{beamer}
\usepackage{tikz}
\makeatletter
\tikzset{%
vertex/.style={circle,draw,fill=black!20},
prefix node name/.code={%
\tikzset{%
name/.code={\edef\tikz@fig@name{#1 ##1}}
}%
}%
}
\makeatother
\begin{document}
\begin{frame}
\begin{tikzpicture}
% ---- Copy 1
\begin{scope}[yshift=-32pt,prefix node name=G1]
\node[vertex] (u) at (0, 0) {u};
\node[vertex] (v) at (0, 0) {v};
\end{scope}
% ---- Copy 2
\begin{scope}[yshift=32pt,prefix node name=G2]
\node[vertex] (u) at (0, 0) {u};
\node[vertex] (v) at (0, 0) {v};
\end{scope}
\draw (G1 u) -- (G2 v);
\end{tikzpicture}
\end{frame}
\end{document}