如何用lua和tikz绘制网络图?

如何用lua和tikz绘制网络图?

我在读本文关于使用 和 进行绘图luatikz在文章的第 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}

相关内容