我在 here 找到了一个很好的事件图,但没有源代码。它如下所示:
Plantuml - 在事件图上方绘制注释-LMLPHP

我尝试用plantuml绘制它,下面是我的代码:

@startuml
skinparam linetype ortho

(*) -down-> "clone repository"
note right
A:git clone url/to/repository
scp -p url/to/hooks/commit_msg repository/.git/hooks
end note
-down->[get an assignment] "coding"
-down-> "commit locally"
note right
B:git add xxx
git commit
end note
-down-> "review"
note right
C:git push origin refs/for/<branch>
end note
if "" then
  -left->[rejected] "rework"
  -up-> "recommit"
'note left
'D:git add xxx
'git commit --amend
'end note
  -right-> "review"
else
  --right-->[approved] "submit"
note right: E:click "submit" on on corresponding gerrit page
  -up-> "update local repository"
note right
F:git pull --rebase
end note
  -left->[get another task(a new cycle)] "coding"
@enduml

输出是:
Plantuml - 在事件图上方绘制注释-LMLPHP

显然,仍然不如原图:
  • 上面/下面的注释不起作用,不知道怎么做(例如下面的 E 注释)
  • 中心流不在直线上。
  • “提交”到“更新本地存储库”已更改 2 次。

  • 我怎样才能像原始输出一样改进它?

    最佳答案

    Plantuml 会自动放置节点,如果你想把节点放在精确的位置,TikZ 可能会做得更好:

    \documentclass[convert={outfile=\jobname.png}]{standalone}
    \usepackage{tikz}
    \usetikzlibrary{arrows,chains,positioning,shapes,scopes,quotes,decorations.markings,shapes.multipart,shapes.callouts}
    \begin{document}
    
    \newcommand{\ann}[3][]
    {
      \node[align=center, draw=noteBorderColor,fill=noteBackgroundColor,
            rectangle callout, anchor=pointer,
            callout relative pointer={(#2)},#1] {#3};
    }
     \begin{tikzpicture}[>=latex,node distance =8mm,
        every text node part/.style={align=left},
        start chain = going below,
        base/.style = {draw, rounded corners,
                       minimum width=20mm, minimum height=4mm,
                       align=center,
                       inner sep=1mm, outer sep=0mm,
                       },
         box/.style = {base, on chain, join=by {->}},
       start/.style = {box,minimum size=2mm,circle,fill=black},
         end/.style = {box,circle, on chain},
    decision/.style = {box, diamond, aspect=1,
                       rounded corners=0pt, minimum size=2mm}
       ]
    \definecolor{noteBackgroundColor}{RGB}{251,251,119}
    \definecolor{noteBorderColor}{RGB}{168,0,54}
    
    \node[start] (A) {};
    \node[box] (B) {clone repository};
    \ann[right=9mm of B]{182:8mm}{git clone url/to/repository \\scp -p url/to/hooks/commit\_msg repository/.git/hooks};
    \node[box] (C) {coding};
    \node[box] (D) {commit locally};
    \ann[right=9mm of D]{182:8mm}{git add xxx \\ git commit};
    \node[box] (E) {review};
    \ann[right=9mm of E]{182:8mm}{git push origin refs/for/branch};
    \node[decision] (F) {};
    {[start branch]
      \node[box,left=2cm of F] (G) {rework};
      \node[box,on chain=going above] (H) {recommit};
      \ann[above=5mm of H]{270:4mm}{git add xxx \\ git commit --amend};
    }
    {[start branch]
      \node[box,right=6cm of F] (I) {submit};
      \ann[below=5mm of I]{90:4mm}{click "submit" on corresponding gerrit page};
    
      \node[base]  (J)  at (I |- C) {update local repository};
      \ann[right=9mm of J]{182:8mm}{git pull --rebase};
    }
    \draw[->] (H) -- (E);
    \draw[->] (F) -- (I);
    \draw[->] (J) --node [above] {get another task(new cycle)} (C);
    \draw[red,->] (I) edge (J) (J) to (C);
    \end{tikzpicture}
    \end{document}
    
    输出:
    Plantuml - 在事件图上方绘制注释-LMLPHP

    关于Plantuml - 在事件图上方绘制注释,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45048113/

    10-11 15:08