一个语绘工具

还在大学那会就从一个UC的聚聚那里得知了graphviz,后来断断续续的使用没有很深入的去体验,最近写博客要一些图了,所以又重新使用了这个工具,但是发现了不少问题。 这个工具有不少问题但为什么还要用呢?因为现在的版本管理几乎都是text-based,而语绘的代码是可以很好的被例如git这种版本管理工具进行版本管理,现在想想也许machine learning可以做picture content-based的图片版本管理也说不定!不过我猜Adobe PS应该有实现他们自家的版本管理,不过还是不及ML实现的通用图片版本管理诱人。 graphviz的图形还算挺丰富的,诸如复杂表格这些都可以实现。前一篇博客用到的一个简单的小demo如下
这张图片对应的代码
digraph {
        node[shape=box]
        s1[label="1: x = 1"]
        s2[label="2: y = 2"]
        s3[label="3: e = 0"]
        s4[label="4: if e > 10 goto 7"]
        s5[label="5: e = y + x"]
        s6[label="6: x = x + 1 goto 4"]
        s7[label="7: y = x "]
        rankdir = TB
        s1 -> s2 -> s3 -> s4 -> s5 -> s6 -> s7
        s4 -> s7
        s6 -> s4
}
但也是这上面这个图,我想把曲线调整到整齐的折直线却查了不少资料,但是最后却发现只能靠不可见图形填充位置来实现
代码复杂了不少
digraph {
        node[shape=box]

        splines=false

        s1[label="1: x = 1"]
        s2[label="2: y = 2"]
        s3[label="3: e = 0"]

        s4[label="4: if e > 10 goto 7"]
        {rank=same; s4; s4_left_help; s4_right_help}
        s4_left_help[color=white, label=""]
        s4_right_help[color=white, label=""]

        s5[label="5: e = y + x"]

        s6[label="6: x = x + 1 goto 4"]
        {rank=same; s6; s6_left_help}
        s6_left_help[color=white, label=""]

        s7[label="7: y = x "]
        {rank=same; s7; s7_left_help; s7_right_help}
        s7_left_help[color=white, label=""]
        s7_right_help[color=white, label="   "]

        rankdir = TB

        s1 -> s2 -> s3 -> s4 -> s5 -> s6 -> s7

        s4_left_help:e -> s6_left_help:e[arrowhead = none]
        s6_left_help:e -> s6:w[arrowhead = none]
        s4_left_help:e -> s4:w

        s6_left_help:s -> s7_left_help:n[style=invis]
        s7_left_help:e -> s7:w[style=invis]
        s7:e -> s7_right_help:w[arrowhead=none]
        s7_right_help:w -> s4_right_help:w[arrowhead=none]
        s4 -> s4_right_help[dir=back]
}