沿路径移动标签

沿路径移动标签

朋友们,考虑以下代码:

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{automata,positioning}

\begin{document}

\pagestyle{empty}

\begin{tikzpicture}[shorten >=1pt,node distance=2cm,on grid,auto,/tikz/initial text=] 
   \node[state,initial] (q_0) {$q_0$};
   \node[state] (q_2) [above of=q_0] {$q_2$};
   \node[state] (q_1) [left of=q_2] {$q_1$};
   \node[state] (q_3) [right of=q_2] {$q_3$};
   \node[state] (q_5) [right of=q_0] {$q_5$};
   \node[state] (q_4) [left of=q_0] {$q_4$};   
   \node[state] (q_7) [below of=q_0] {$q_7$};
   \node[state] (q_6) [left of=q_7] {$q_6$};
   \node[state] (q_8) [right of=q_7] {$q_8$};

   \path[->,every node/.style={font=\scriptsize}]
    (q_0) edge [bend left=15] node {$a$} (q_2)
    (q_2) edge [bend left=15] node {$b$} (q_0)
    (q_0) edge [bend left=15] node {$c$} (q_5)
    (q_5) edge [bend left=15] node {$d$} (q_0)
    (q_0) edge [bend left=15] node {$e$} (q_7)
    (q_7) edge [bend left=15] node {$f$} (q_0)
    (q_0) edge [bend left=15] node {$g$} (q_4)
    (q_4) edge [bend left=15] node {$h$} (q_0)
    (q_0) edge [bend left=15] node {$i$} (q_1)
    (q_1) edge [bend left=15] node {$j$} (q_0)
    (q_0) edge [bend left=15] node {$k$} (q_3)
    (q_3) edge [bend left=15] node {$l$} (q_0)
    (q_0) edge [bend left=15] node {$m$} (q_8)
    (q_8) edge [bend left=15] node {$n$} (q_0)
    (q_0) edge [bend left=15] node {$o$} (q_6)
    (q_6) edge [bend left=15] node {$p$} (q_0);  
\end{tikzpicture}

\end{document}

输出结果如下:

自动机 1

到目前为止,一切都很好(相信我,更糟糕的图画)。

我想知道是否可以将标签移动到路径上的任意位置,即:

小路

我发现的解决方法是绘制一条没有标签的路径,然后将\draw文本置于正确的绝对位置。我试图实现这样的目标:

自动机 2

我是 TikZ 新手,所以请耐心等待。我相信有比我使用的方法更好的方法。有什么想法吗?:-)

答案1

[midway]您可以使用、[near start]和等选项[near end][very near end]指定标签的位置。

(q_0) edge [bend left=15] node [red, near end] {$a$} (q_2)
(q_2) edge [bend left=15] node [blue, near start]{$b$} (q_0)
(q_0) edge [bend left=15] node [green, near end] {$c$} (q_5)
(q_0) edge [bend left=15] node [red, very near end] {$k$} (q_3)

在此处输入图片描述

正如 Gonzalo 指出的那样,这些内容记录在手册第 193 页,对应如下:

at start pos=0

very near start pos=0.125

near start pos=0.25

very near end pos=0.875

near end pos=0.75

at end pos=1

答案2

它比你想象的要简单得多。例如,用这个替换你的第一个边:

 (q_0) edge [bend left=15] node[pos=0.8] {$a$} (q_2)

并在0.8零和一之间的数字之间进行游戏。

答案3

在您的示例中,交替使用near endnear start

(q_0) edge [bend left=15] node [near end] {$a$} (q_2)
(q_2) edge [bend left=15] node [near start] {$b$} (q_0)

相关内容