我通常用 graphiz 来描述图表,并且我喜欢dot2tex生成相应的 TikZ 代码。
为了在演示文稿中解释算法,我需要逐步揭示图形的节点和边缘(当然,不改变布局)。例如,当人们直接编写 tikz 代码时,我可以找到一些关于如何做到这一点的文档Beamer 与 TikZ:逐步发现节点,但在我的例子中,代码是从点规范自动生成的。是否可以在点文件中包含覆盖规范?
答案1
我认为在点文件中您可以只包含标签的覆盖规范。以下是点文件的示例(我称之为 mygraph.dot):
digraph G {
1 [texlbl="{\visible<1->{1}}"];
2 [texlbl="{\visible<2->{2}}"];
3 [texlbl="{\visible<3->{3}}"];
1->2 [label="1/2"];
2->3 [label="1/2"];
3->1 [label="1/2"];
}
现在您可以使用终端创建相应的 TikZ 代码:
dot2tex -ftikz mygraph.dot > mygraph.tex
如您所知,mygraph.tex 是一个完整的 tex 文档,因此您只需复制演示文稿中的图片代码即可。请注意,这仅适用于节点标签,而不适用于边缘标签。
最好的做法是:
- 将点文件导出到 tex 文档中;
- 编辑插入的图片
\pause
。
大约一年后回来......
实际上,使用 GraphViz 的覆盖规范完全可以通过著名的 Daniel 风格来visible on
实现思维导图 tikzpicture 在 beamer 中 (逐步显示)。由于它是一种样式,因此可以通过键将其包含在点文件中,style
并为顶点和边完成工作;对于标签,可以利用构造{\visible<overlay specification>
{label}},或者再次使用visible on
键内的样式lblstyle
。
一个例子:
\documentclass{beamer}
\usepackage{lmodern}
\usepackage{tikz,dot2texi}
\usetikzlibrary{automata,shapes}
\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
},
state st/.style={draw,circle,top color=orange!2,bottom color=red!50!orange!50}
}
\begin{document}
\begin{frame}[fragile]{My graph}
\begin{tikzpicture}
\begin{dot2tex}[styleonly,codeonly,circo,options=-s -tmath]
digraph G {
1 [style="state st,visible on=<2->"];
2 [style="state st,visible on=<3->"];
3 [style="state st,visible on=<4->"];
1->2 [label="1/2",style="visible on=<3->",lblstyle="visible on=<3->"];
2->3 [label="1/2",style="visible on=<4->",lblstyle="visible on=<4->"];
3->1 [label="1/2",style="visible on=<5->",lblstyle="visible on=<5->"];
}
\end{dot2tex}
\end{tikzpicture}
\end{frame}
\end{document}
结果:
假设该文件名为anim-graph.tex
,则必须将其编译为:
pdflatex -shell-escape anim-graph.tex
由于包裹dot2texi
需要运行 dot2tex。