你没有用具体例子来详细表达问题,我也不好猜测你具体需要什么。还是建议你先去读一下手册。
我对 graph 库的理解是这样的。
用户可以用一些变量(参数,其实就是 pgf 的 key),来定义一种计算 node 位置的方法,这些变量例如
\tikzgraphsset{
placement/.cd,
element count/.initial=0,
chain count/.initial=0,
depth/.initial=0,
width/.initial=0,
level/.initial=0,
logical node depth/.code=\def\pgfmathresult{1},
logical node width/.code=\def\pgfmathresult{1},
}%
Graph 库的作者利用这些变量定义了几种计算方式,默认的是 /tikz/graphs/Cartesian placement
这个计算方式。对于这个计算方式来说,用户可以通过调整某些 key 的值(如 /tikz/graphs/chain shift
)来影响这个计算方式的计算结果,但计算方式的框架是不容易修改的。
详细情况请参考手册。
也可以使用 graphdrawing 库引入其他的计算方式,这个库借助 lua 来计算,我不懂 lua。熟悉 lua 的用户可以自己编写一种计算方式。
总之 graph 库以及 graphdrawing 库强调的是“自动计算,自动排布”,非常依赖算法,而不是强调人工干预。如果总是期望用户来控制各个 node 的位置,那就背离了这个思想。所以这个思想主要针对有很多 node 的情况。当然用户也可以根据情况来调整个别 node 的位置,但这不是重点。
在 node 比较多的情况下,并没有绝对的标准来判断一种排布方式是否足够美观,减少用户的干预也未必不是一个好的选择。当然这对算法的设计也就有相当的要求,不是那么轻易就能设计好。例如命令 \usegdlibrary{force}
引入的算法就参考了数篇论文。你可以搜索相关的资料,例如 胡一凡 的作品
如果你想知道如何用参数调整算法的计算结果,应该先去阅读手册,或者手册中给出的参考论文。如果你觉得英文手册不好读,倒是也有关于 graph 库的中文介绍,也不太好读。不过,只要静心读,总能读明白。
问 tikz中如何改变 graph 环境下输出 node 的间距(不等距输出)