鉴于以下 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
);起始注释;以及结束注释。如果箭头方向不是 或L
,R
则文本将分别直接打印在箭头的开头或结尾处
\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}