您可以考虑使用以下技术来避免创建自定义节点形状。您可能需要进一步解决一些品味问题,才能得到您想要的东西。
这种技术的优点是使用类似 HTML 的标签,改变矩形内部和外部的空间变得很简单,只需分别更改内部点数(此处为 4)和外部点数(此处为 16)即可。
digraph {
node [shape=none]
O [label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="16" CELLPADDING="4">
<TR><TD WIDTH="70">\N</TD></TR>
</TABLE>
>]
{a,b,c,d} -> O
}
Run Code Online (Sandbox Code Playgroud)
结果:

您可以更改 BORDER 和 CELLBORDER 参数来显示或隐藏矩形。您可以调整它们的粗细,但只能调整为 1 磅的倍数。我使用 WIDTH 参数来强制宽度与高度的比率,从而导致所有箭头尖端对齐。否则,一些尖端将与不可见的外部矩形的边相交。
据我所知这是不可能的。
唯一可用的选项是使用headclip让边缘到达节点的中心或外部形状的边缘(就像您在示例中所做的那样)。
您可以尝试通过将节点放入集群中来向节点添加一些填充,并将边缘剪辑在集群的(不可见)边界处:
digraph {
compound=true;
subgraph cluster1 {
style=invis;
2;
}
1 -> 2[lhead=cluster1];
}
Run Code Online (Sandbox Code Playgroud)
希望有人知道更好的技巧......