![如何用lua和tikz绘制网络图?](https://linux22.com/image/478048/%E5%A6%82%E4%BD%95%E7%94%A8lua%E5%92%8Ctikz%E7%BB%98%E5%88%B6%E7%BD%91%E7%BB%9C%E5%9B%BE%EF%BC%9F.png)
我在读本文关于使用 和 进行绘图lua
。tikz
在文章的第 45 页,作者给出了一个示例代码来演示如何执行此操作。以下是他的lua
代码:
-- File SimpleDemo.lua
local MyAlgorithmClass = {}
function MyAlgorithmClass:run()
local g = self.digraph
local alpha = (2 * math.pi) / #g.vertices
local radius = g.options.radius
for i,vertex in ipairs(g.vertices) do
vertex.pos.x = radius * math.cos(i * alpha)
vertex.pos.y = radius * math.sin(i * alpha)
end
end
-- "Publish" the algorithm
local graph_drawing_framework = require "pgf.gd.interface.InterfaceToAlgorithms"
graph_drawing_framework.declare{
key = "simple demo layout",
algorithm = MyAlgorithmClass,
preconditions = { connected = true }
}
在接下来的页面中,他添加了四段tikz{…}
代码来显示输出。第三个示例出现了以下错误:
! Package pgfkeys Error: I do not know the key '/tikz/stub' and I am going to ignore it. Perhaps you misspelled it.
这是我的tex
文档,其中包含第三个示例:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{graphs, graphdrawing, mindmap}
\usegdlibrary{SimpleDemo}
\begin{document}
\tikz \graph [ simple demo layout, radius=1cm]{
a --[orient=right] b -- c -- a;
d -- e;
f -- g -- h -- d --[stub,red] f;
e --[stub, red] g;
};
\end{document}
graphs, graphdrawing, mindmap
库解决了其他 3 个示例的问题。我必须添加哪一个才能解决第 3 个示例的问题?
答案1
以下是stub
样式的一种可能定义,其作用类似于您引用的幻灯片中看到的作用。我使用了一种内置定位算法,但这对线条样式来说并不重要。幻灯片 46 显示了如何更改节点的样式。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{graphs, graphdrawing, calc} % <-- added the calc library
\usegdlibrary{circular}
\tikzset{stub/.style={
to path={%
(\tikztostart) -- ($(\tikztostart)!0.3!(\tikztotarget)$)
($(\tikztostart)!0.7!(\tikztotarget)$) -- (\tikztotarget)
}
}}
\begin{document}
\tikz \graph [ simple necklace layout, radius=1cm, nodes={circle,draw=blue!80,fill=blue!10}]{
d -- e;
f -- g -- h -- d --[stub,red] f;
e --[stub, red] g;
};
\end{document}