Graphviz 可移植性和字体。如何使方案在不同的操作系统上相同?

Graphviz portability and fonts. How make schemes identical on different OSs?

我在 Mac 上使用 Graphviz,但我的大多数应用 运行 在 Ubuntu 的服务器上。我注意到,在不同的操作系统上编译时,具有相同源代码的点方案绘制有点不同。

在我看来,主要原因是系统上的字体不同。即使我使用相同的通用字体和相同的大小 — 它们看起来差异太大,这对布局影响很大。

所以问题是:是否有可能在整个系统的 Graphviz 方案中使字体看起来相同?

下面附上演示问题的示例。为方便起见,附上图片作为链接。

源代码:

digraph {
    graph [label="Mac" labelloc=t]
    dpi=100
    pad=0.2
    rankdir=LR
    a [shape=rect label="width=1" width=1]
    b [shape=rect label="width=1.5 Arial" width=1.5 fontname=Arial]
    c [shape=rect label="width=2.7 Arial 20" width=2.7 fontname=Arial fontsize=20]
    d [shape=rect label="width=4 Helvetica" width=4 fontname=Helvetica]
    e [shape=rect label="width=5 Helvetica 25" width=5 fontname=Helvetica fontsize=25]
    f [shape=rect label="width=6, blue 0.8, red 0.2" width=6 style=filled color="blue:red;0.2" fontcolor=white]
}

正如您在方案中看到的那样——字体并不是唯一的问题:填充两种颜色在 Mac\Ubuntu 和 Win10 上看起来有点不同。但这个具体问题可能是因为我的 Windows 机器上有 graphviz 2.38。

现在相同的方案但没有节点标签:

digraph {
    graph [label=Mac labelloc=t]
    dpi=100
    pad=0.2
    rankdir=LR
    a [shape=rect label="" width=1]
    b [shape=rect label="" width=1.5 fontname=Arial]
    c [shape=rect label="" width=2.7 fontname=Arial fontsize=20]
    d [shape=rect label="" width=4 fontname=Helvetica]
    e [shape=rect label="" width=5 fontname=Helvetica fontsize=25]
    f [shape=rect label="" width=6 style=filled color="blue:red;0.2" fontcolor=white]
}

这里的结果几乎相同(除了该死的颜色列表)

问题似乎出在装在 Homebrew 中的 graphviz 版本上。 Graphviz 在那里很奇怪,尤其是它不包含 Cairo 引擎,而且字体确实有一些问题。

所以我删除了 Homebrew 版本并从 MacPorts 安装了 Graphviz。现在我在 Mac 上构建图像时的字体大小几乎与 Ubuntu 和 Windows 上的相同。字体并不完全相同,但对于开发过程来说已经足够接近了。

Same image generated by Graphviz from MacPorts