是否可以使用命令[midway]
、[near end]
等移动顶点权重[near start]
?仅仅陈述{above}
和{below}
并不总是有帮助,因为权重有时会重叠:
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{center}
\begin{tikzpicture}[scale=4,auto,swap]
\foreach \pos /\name in {{(0,0)/4},{(1,0)/5},{(2,0)/6},{(0,1)/1},{(1,1)/2},{(2,1)/3}} \node[vertex](\name) at \pos{$\name$};
\foreach \source /\dest /\weight /\pos in {1/6/12/{above left},3/4/10/{above right},4/5/6/{below},5/6/9/{below},1/5/7/{above left},3/5/6/{right}} \path[edge] (\source) -- node[weight, \pos] {$\weight$} (\dest);
\foreach \source /\dest /\weight in {1/2/12,2/3/7,2/4/4,3/6/5,4/1/10,6/2/8} \path[arrow] (\source) -- node[weight] {$\weight$} (\dest);
\end{tikzpicture}
\end{center}
\end{document}
答案1
这个答案提出了 [0 1] 之间的相对位置概念,其中 0 表示一条线starting point
,1 表示end point
一条线。因此,分别pos=0.1, 0.5, 0.9
表示near start
、midway
和near end
。通过这样做,位置的单词被转换成0
和之间的十进制数1
。这些数字可以由用户在循环中定义foreach
。
注意:虚线彩色线是为了演示两个节点之间的权重,可以轻松从中删除[options]
。
代码:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{arrows,positioning}
\begin{document}
\begin{center}
\begin{tikzpicture}[scale=4,auto,swap]
\foreach \pos/\name in {{(0,0)/4},{(1,0)/5},{(2,0)/6},{(0,1)/1},{(1,1)/2},{(2,1)/3}}
{\node[draw,circle,black] (\name) at \pos{$\name$};}
\foreach \source /\dest /\weight /\pos in {1/6/12/0.1,3/4/10/0.25,4/5/6/0.40,5/6/9/0.65,1/5/7/0.80,3/5/6/0.95}
{\path[draw,dotted,cyan] (\source) -- node[pos=\pos, above] {$\weight$} (\dest);}
\foreach \source /\dest /\weight/\pos in {1/2/12/0.1,2/3/7/0.25,2/4/4/0.40,3/6/5/0.65,4/1/10/0.8,6/2/8/0.95}
{\path[draw,dotted, red] (\source) -- node[pos=\pos, below] {$\weight$} (\dest);}
\end{tikzpicture}
\end{center}
\end{document}