如何对齐图的节点?

如何对齐图的节点?

我使用以下代码来获取我的图表,

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{arrows}

\begin{document}

\begin{tikzpicture}[->,auto, node distance=3cm, 
                    thick,main node/.style={font=\sffamily\large\bfseries$\bullet$}]

  \node[main node] (1) {1};
  \node[main node] (2) [below left of=1] {2};
  \node[main node] (3) [below  of=1] {3};
  \node[main node] (4) [below right of=1] {4};
  \node[main node] (5) [below of =3] {5}; 

  \path[every node/.style={font=\sffamily\small}]
    (1) edge node [right] {$e_2$} (3)
    (2) edge node [left] {$e_1$} (1)
    (3) edge node [right] {$e_5$} (5)
    (4) edge [left] node[right] {$e_3$} (1)
    (5) edge node[left] {$e_4$} (2)
        edge node[right] {$e_6$} (4);
\end{tikzpicture}

\end{document}

结果如下,

在此处输入图片描述

但我想要的是这样的身材,

在此处输入图片描述

到这里,节点已经排列整齐了。如何做到呢?

答案1

借助 TikZ 库,positioning这很容易实现:

在此处输入图片描述

\documentclass[tikz]{standalone}
\usetikzlibrary{arrows,quotes,positioning}

\begin{document}
    \begin{tikzpicture}[->,auto, 
    node distance=2cm and 3cm, % changed
    thick,
    main node/.style={font=\sffamily\large\bfseries$\bullet$},
every edge node/.style={font=\sffamily\small}
                    ]
  \node[main node] (1) {1};
  \node[main node] (2) [below  left=of 1] {2};
  \node[main node] (3) [below=of 1] {3};
  \node[main node] (4) [below right=of 1] {4};
  \node[main node] (5) [below= of 3] {5};

  \draw
    (1) edge["$e_2$"] (3)
    (2) edge["$e_1$"] (1)
    (3) edge["$e_5$"] (5)
    (4) edge["$e_3$" '] (1)
    (5) edge["$e_4$"] (2)
        edge["$e_6$" '] (4);
    \end{tikzpicture}
\end{document}

定位的主要区别在于 定义node distance=<vertical distance> and <horizontal distance>,就您的情况而言node distance=2cm and 3cm。对于您使用的positioning库,您还需要更改节点放置的语法。例如,正确的语法是below left=of 1(请参阅 的不同位置=!)。

我也擅自改变了路径标记方式。有了quotes库就更短了。

当然,你可以在automata库的帮助下以不同的、可能更有效的方式绘制此图,作为自动机。有关说明,请参阅41 自动机绘图库,TikZ 手册(版本 3.0.1a)第 513 页

相关内容