在序列图 / Tikz uml / pgf-umlsd 上添加内容

在序列图 / Tikz uml / pgf-umlsd 上添加内容

鉴于以下 MWE在 pgf-umlsd 中配置箭头(链接上的编译版本):

\documentclass{article}
\usepackage{float}
\usepackage{tikz}
\usetikzlibrary{positioning, fit, calc, shapes, arrows}
\usepackage[underline=false]{pgf-umlsd}
\begin{document}

\begin{figure}[H]
    \centering
    \begin{sequencediagram}
        \newinst{c}{Client}
        \newinst[6]{s}{Server}

        \mess[1]{c}{Longer label}{s}
        \mess[1]{s}{label}{c}
        \mess[1]{c}{label}{s}
        \mess[1]{s}{Longer label}{c}
    \end{sequencediagram}
    \caption{Client-Server messaging}
\end{figure}
\end{document}

我想在左侧虚线竖条的左侧和右侧虚线竖条的右侧添加一些“处理内容”。 (如果可以的话,\newline也可以在这些“处理内容”里面添加一些)


文本示例“线性化”*:

        Client          Server
      c^2 | --------------->| init
          |                 | f=f(c^2)
   g=g(f) | <---------------| f
        g | --------------->| check if h=g
          | <---------------| OK

*我的意思是我仍然想使用上面的 tex 形式,它具有很好的渲染效果。

我唯一想补充的是双方的信息在每个箭的起点和终点。如果可能的话,我正在寻找一个简单的解决方案。

提前感谢您提供的任何帮助。

答案1

\mess我在样式中找到了 的定义,并对其进行了改编,因为\bloodymess其末尾有三个附加参数。现在,强制参数 4、5 和 6 是:箭头方向(L, 或R);起始注释;以及结束注释。如果箭头方向不是 或LR则文本将分别直接打印在箭头的开头或结尾处

\documentclass{article}
\usepackage{float}
\usepackage{tikz}
\usetikzlibrary{positioning, fit, calc, shapes, arrows}
\usepackage[underline=false]{pgf-umlsd}
% message between threads
% Example:
% \bloodymess[delay]{sender}{message content}{receiver}{DIR}{start note}{end note}
\newcommand{\bloodymess}[7][0]{
  \stepcounter{seqlevel}
  \path
  (#2)+(0,-\theseqlevel*\unitfactor-0.7*\unitfactor) node (mess from) {};
  \addtocounter{seqlevel}{#1}
  \path
  (#4)+(0,-\theseqlevel*\unitfactor-0.7*\unitfactor) node (mess to) {};
  \draw[->,>=angle 60] (mess from) -- (mess to) node[midway, above]
  {#3};

  \if R#5
    \node (#3 from) at (mess from) {\llap{#6~}};
    \node (#3 to) at (mess to) {\rlap{~#7}};
  \else\if L#5
         \node (#3 from) at (mess from) {\rlap{~#6}};
         \node (#3 to) at (mess to) {\llap{#7~}};
       \else
         \node (#3 from) at (mess from) {#6};
         \node (#3 to) at (mess to) {#7};
       \fi
  \fi
}
\begin{document}

\begin{figure}[H]
    \centering
    \begin{sequencediagram}
        \newinst{c}{Client}
        \newinst[6]{s}{Server}

        \bloodymess[1]{c}{Longer label}{s}{R}{Start}{Server receives}
        \bloodymess[1]{s}{label}{c}{L}{Server responds}{}
        \bloodymess[1]{c}{label}{s}{R}{2nd handshake begins}{}
        \bloodymess[1]{s}{Longer label}{c}{L}{}{End}
    \end{sequencediagram}
    \caption{Client-Server messaging}
\end{figure}
\end{document}

在此处输入图片描述

相关内容