![如何使用 tikz `graphdrawing` 库绘制该图形?](https://linux22.com/image/345726/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20tikz%20%60graphdrawing%60%20%E5%BA%93%E7%BB%98%E5%88%B6%E8%AF%A5%E5%9B%BE%E5%BD%A2%EF%BC%9F.png)
我尝试了很多次,但都无法使用 tikz 库绘制下面的图表graphdrawing
。我很困惑,尤其是它的“布局”概念。
问题:如何使用绘制下面的图形graphdrawing
。
graphdrawing
带有注释的代码:
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{positioning}
% \usetikzlibrary{graphs, graphdrawing}
% \usegdlibrary{layered, force}
\begin{document}
\begin{tikzpicture}[node distance = {1.0cm and 1.5cm}, v/.style = {draw, circle}]
% \graph [spring layout, nodes = {}, horizontal = A to C]
% {
% A -- C -- E,
% B -- {D -- F}
% };
\node (a) [v] {A};
\node (c) [v, right = of a] {C};
\node (e) [v, right = of c] {E};
\draw (a) to node[above] {1} (c);
\draw (c) to node[above] {3} (e);
\node (b) [v, below = of a] {B};
\node (d) [v, right = of b] {D};
\node (f) [v, right = of d] {F};
\draw (b) to node[below] {1} (d);
\draw (d) to node[below] {4} (f);
\draw (a) to node[left] {2} (b);
\draw (c) to node[below] {2} (b);
\draw (c) to node[right] {2} (d);
\draw (e) to node[below] {3} (d);
\draw (e) to node[right] {1} (f);
\end{tikzpicture}
\end{document}
答案1
我认为你试图使用,graphdrawing
而实际上你应该使用正常方式graph
。graphdrawing
当你拥有的东西遵循结构逻辑,但图表本身却不具有固定性质时,库就是为此而生的。引用 Till Tantau 的话:
您无需指定节点和边的确切位置。这可以留给图形绘制算法。该算法将您对图形的描述作为输入,然后决定节点应位于页面上的哪个位置。
在我看来,你所提出的图表看起来就像是你想指定节点的位置,但你想在简洁而有力的方式. 再次引用 Till 的话:
图书馆里没有什么
graph
是你不能用普通的\node
和边缘命令来完成的。相反,它的目的是提供一种简洁而强大的方法来指定存在哪些节点以及它们如何连接。
以下是使用graph
库绘制图形的方法(不需要 Lua):
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{graphs, graphs.standard, quotes}% quotes library is for the [""] edges
\begin{document}
\begin{tikzpicture}[node distance = {1.0cm and 1.5cm}, v/.style = {draw, circle}]
\graph[nodes={circle, draw}, grow right=2.25cm, branch down=1.75cm]{
A -- ["1"] C -- ["3"] E,
B -- ["1",swap] D -- ["4",swap] F,
B -- ["2"] A,
C -- ["2"] {D,B},
D -- ["3",swap] E -- ["1"] F
};
\end{tikzpicture}
\end{document}