范围内的 Tikz 节点名称(在 beamer 演示中)

范围内的 Tikz 节点名称(在 beamer 演示中)

我试图做同样的事情这个问题,即在范围之间添加边。但是,我正在使用 \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}

相关内容