评论

评论

我正在尝试实现以下目标:

示例图像

(请忽略节点样式,我已经对那部分进行了排序,我正在努力解决的是边缘问题!)

我的图表可以有无向边,将任意节点集连接在一起;我使用小的垂直标记来区分不同的边。例如,上面最右边的边是具有两个源节点和一个目标的单边,而其左边的两条边是不同的。

我的问题是:

  1. 我怎样才能轻松地添加垂直标记(我理想情况下想说“在 70% 的边缘后添加一个小标记”)?

  2. 如何指定具有多个源节点(或多个目标节点)的边?我想我应该在连接点之间指定一个点作为边的“汇合”点。

我意识到第 2 个问题很模糊,因为我没有明确说明我想要什么,但我希望有人能给我指明正确的方向!

到目前为止,我的(非常)糟糕的尝试如下:

\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}
    \node[draw, circle] (p0)                     {};
    \node[draw, circle] (p1) [right of=p0]       {};
    \node[draw, circle] (p2) [above right of=p1] {};
    \node[draw, circle] (p3) [below right of=p1] {};
    \node[draw, circle] (p4) [below right of=p2] {};
    \draw (p0.east) to (p1.west);
    \draw (p1.east) to (p2.west);
    \draw (p1.east) to (p3.west);
    \draw (p2.east) -- (p3.east) -- (p4.west); % This is just wrong! :-)
\end{tikzpicture}
\end{document}

谢谢!

答案1

评论

关于你的问题

  1. 您可以mark inside在路径上使用该属性,其中第一个参数是放置标记的路径段,例如\draw[mark inside=0.7] (0,0) -- (1,1);将标记设置在线的 70% 处。

  2. 我在三个节点之间引入了一个名为的附加节点(helper)

执行

\documentclass[tikz]{standalone}
\usetikzlibrary{petri,decorations.markings}
\tikzset{
    >=latex,
    node distance = 2cm,
    every place/.style = {minimum size = 6mm},
    mark inside/.style = {
        postaction = {
            decorate,
            decoration={
                markings,
                mark=at position #1 with {\draw[-] (0,-0.1) -- (0,0.1);}
            }
        }
    }
}
\begin{document}
\begin{tikzpicture}
    % Places
    \node[place,tokens=1] (p0)                                           {};
    \node[coordinate]     (start)  [node distance=0.5cm,left of=p0]      {};
    \node[place,tokens=1] (p1)     [right of=p0]                         {};
    \node[place]          (p2)     [above right of=p1]                   {};
    \node[place]          (p3)     [below right of=p1]                   {};
    \node[coordinate]     (helper) [below right of=p2]                   {};
    \node[place]          (p4)     [node distance=0.7cm,right of=helper] {};
    \node[coordinate]     (end)    [node distance=0.5cm,right of=p4]     {};
    % Connections
    \draw (start)   edge[->]                               (p0.west);
    \draw (p0.east) edge[>->]                              (p1.west);
    \draw (p1.east) edge[>->,mark inside=0.5,out=0,in=180] (p2.west);
    \draw (p1.east) edge[>->,mark inside=0.5,out=0,in=180] (p3.west);
    \draw (p2.east) edge[>-,out=0,in=180]                  (helper);
    \draw (p3.east) edge[>-,out=0,in=180]                  (helper);
    \draw (helper)  edge[mark inside=0,->]                 (p4.west);
    \draw (p4.east) edge[>-]                               (end);
\end{tikzpicture}
\end{document}

输出

在此处输入图片描述

相关内容