我想在使用以下设计的图形中定义覆盖(Beamer 意义上的)tikz-network
包裹。
例如,假设我有下图:
\documentclass{standalone}
\usepackage{tikz}
\usepackage{tikz-network}
\begin{document}
\begin{frame}
\begin{tikzpicture}
\Vertex[x=0.0, y=1.0, label=$v_1$]{v1}
\Vertex[x=1.0, y=1.0, label=$v_2$]{v2}
\Vertex[x=2.0, y=1.0, label=$v_3$]{v3}
\Edge[color=black](v1)(v2)
\Edge[color=black](v2)(v3)
\end{tikzpicture}
\end{frame}
\end{document}
并且我希望节点v1
在步骤 2 中消失。我尝试使用visible on
这里建议的密钥:https://tex.stackexchange.com/a/136166/31360看起来像这样:
\documentclass{beamer}
\usepackage{tikz}
\usepackage{tikz-network}
\tikzset{
invisible/.style={opacity=0},
visible on/.style={alt={#1{}{invisible}}},
alt/.code args={<#1>#2#3}{%
\alt<#1>{\pgfkeysalso{#2}}{\pgfkeysalso{#3}} % \pgfkeysalso doesn't change the path
},
}
\begin{document}
\begin{frame}
\begin{tikzpicture}
\Vertex[x=0.0, y=1.0, label=$v_1$, visible on=<2->]{v1}
\Vertex[x=1.0, y=1.0, label=$v_2$]{v2}
\Vertex[x=2.0, y=1.0, label=$v_3$]{v3}
\Edge[color=black](v1)(v2)
\Edge[color=black](v2)(v3)
\end{tikzpicture}
\end{frame}
\end{document}
但它似乎不适用于tikz-network
,因为我收到"Package xkeyval Error: 'on visible' undefined in families 'vertex'
“错误。我猜解决方案是将密钥扩展到vertex
(以及扩展到edge
),但我不知道如何做到这一点。
答案1
由于不了解tikz-network
软件包,我不知道是否可以调整样式visible on
。tikz-network
不过,仍然可以使用经典控件与 beamer 进行叠加。
要做到这一点,你必须把自己置于一个框架环境中(你已经忘记了)。命令\onslide
和\only
是相同的,除了\onslide
保留它不显示的位置。
\documentclass{beamer}
\usepackage{tikz}
\usepackage{tikz-network}
% \tikzset{
% invisible/.style={opacity=0},
% visible on/.style={alt={#1{}{invisible}}},
% alt/.code args={<#1>#2#3}{%
% \alt<#1>{\pgfkeysalso{#2}}{\pgfkeysalso{#3}} % \pgfkeysalso doesn't change the path
% },
% }
\begin{document}
\begin{frame}
\begin{tikzpicture}
\onslide<1->{\Vertex[x=0.0, y=1.0, label=$v_1$]{v1}}
\onslide<2->{\Vertex[x=1.0, y=1.0, label=$v_2$]{v2}}
\onslide<3->{\Vertex[x=2.0, y=1.0, label=$v_3$]{v3}}
\only<2->{\Edge[color=black](v1)(v2)}
\only<3>{\Edge[color=black](v2)(v3)}
\end{tikzpicture}
\end{frame}
\end{document}
使用 www.DeepL.com/Translator 翻译
答案2
如果你切换到beamer
,你可以使用\alt
Ti 的命令钾您尝试使用的 Z 样式正在使用。不幸的是,tikz-network
它有自己的不透明度键,因此您可以执行以下操作:
\documentclass{beamer}
\usepackage{tikz}
\usepackage{tikz-network}
\begin{document}
\begin{frame}[t]
\frametitle{A network}
\begin{tikzpicture}
\begin{scope}
\alt<2->{}{\def\VertexFillOpacity{0}\def\VertexLineOpacity{0}
\def\VertexTextOpacity{0}}
\Vertex[x=0.0, y=1.0, label=$v_1$]{v1}
\end{scope}
\Vertex[x=1.0, y=1.0, label=$v_2$]{v2}
\Vertex[x=2.0, y=1.0, label=$v_3$]{v3}
\Edge[color=black](v1)(v2)
\Edge[color=black](v2)(v3)
\end{tikzpicture}
\end{frame}
\end{document}
或者,边缘也消失了,而风格也发生了变化。
\documentclass{beamer}
\usepackage{tikz}
\usepackage{tikz-network}
\tikzset{
network invisible/.code={\def\VertexFillOpacity{0}\def\VertexLineOpacity{0}\def\VertexTextOpacity{0}
\def\EdgeOpacity{0}\def\EdgeTextFillOpacity{0}\def\EdgeTextOpacity{0}},
network visible on/.code={\alt#1{}{\tikzset{network invisible}}}}
\begin{document}
\begin{frame}[t]
\frametitle{A network}
\begin{tikzpicture}
\begin{scope}[network visible on=<2->]
\Vertex[x=0.0, y=1.0, label=$v_1$]{v1}
\end{scope}
\Vertex[x=1.0, y=1.0, label=$v_2$]{v2}
\Vertex[x=2.0, y=1.0, label=$v_3$]{v3}
\begin{scope}[network visible on=<2->]
\Edge[color=black](v1)(v2)
\end{scope}
\Edge[color=black](v2)(v3)
\end{tikzpicture}
\end{frame}
\end{document}