简单进程同步图

简单进程同步图

我已经在 OpenOffice 中绘制了一些进程同步图,但我想要一个比这更优雅的解决方案。

我想要创建的是如下图所示的进程同步图。我浏览过texample.net,但找不到任何接近我想要做的事情。

有人可以与我分享他/她的智慧吗?

加拿大广播公司

答案1

calc库帮助我们计算虚线所需的角度。

线上的点是预先定义的,因此我们可以简单地更改那里的值。例如,坐标p1-2是相对于p1-1的。p1-3p1-2

坐标p23是实线转换为弯曲虚线的点。

代码

\documentclass[tikz,convert=false]{standalone} % the standalone class is for this MWE
% \usepackage{tikz}                       % use an appropriate class in your document
\usetikzlibrary{calc}
\tikzset{
  bar/.style={
    insert path={+(180:#1) edge[-,line cap=rect] +(right:#1) + (0,0)}
  },
  bar/.default=2pt+1.5\pgflinewidth,% mimics the | arrow
  curved/.style={
    out=200,
    in=160,
    distance=+1cm
  }
}
\begin{document}
\begin{tikzpicture}[y=-1cm, x=1.5cm, >=stealth]
\foreach \xValue in {1,2,3} 
  \draw[|-] (\xValue,0) -- ++(90:4) node[at start, above] {P\xValue};

  \path (1, .5) coordinate (p1-1)
     ++ (0,1  ) coordinate (p1-2)
     ++ (0, .5) coordinate (p1-3)
        (2,1  ) coordinate (p2-1)
        (2,1.4) coordinate (p2-2)
        (2,2.5) coordinate (p2-3)
      (2.7,1.8) coordinate (p23)
        (3,2.7) coordinate (p3-1)
        (3,3  ) coordinate (p3-2)
        ;

  \foreach \cStart/\cTarget in {p1-1/p2-1, p1-1/p3-1, p2-2/p1-3}
    \path [->] (\cStart) [bar] edge (\cTarget) (\cTarget) [bar];

  \foreach \lBase/\cStart/\cTarget in {p1/1/2, p2/2/3}
    \path [->] (\lBase-\cStart) [bar] edge[curved] (\lBase-\cTarget) (\lBase-\cTarget) [bar];

  \path let \p1=(p2-2),
            \p2=(p23),
            \n1={atan2(\x2-\x1,\y2-\y1)} 
        in (\p1) edge (\p2)
        (\p2) edge [out=\n1, in=\n1-180, dashed,->] (p3-2) (p3-2) [bar];

  \draw[<-] (.5,4) -- ++ (270:1) node[above] {temps};
\end{tikzpicture}
\end{document}

输出

在此处输入图片描述

相关内容