\documentclass{article}
\usepackage[margin=12mm]{geometry}
\usepackage{hyperref}
\usepackage[underline=true]{pgf-umlsd}
\usetikzlibrary{calc}
\begin{document}
\begin{sequencediagram}
\newinst{ue}{UE}
\newinst[3]{nodeb}{Node B}
\newinst[3]{rnc}{RNC}
\mess{ue}{RRC Connection Request}{rnc}
\mess{rnc}{Radio Link Setup Request}{nodeb}
\mess{nodeb}{Radio Link Setup Response}{rnc}
\mess{rnc}{Establish Request}{nodeb}
\mess{nodeb}{Establish Confirm}{rnc}
\mess{rnc}{RRC Connection Setup}{ue}
\postlevel
\mess{nodeb}{Synchronization Indication}{rnc}
\filldraw[fill=black!30] ($(RRC Connection Setup to)+(0,-.3)$) rectangle ($(Synchronization Indication from) +(0,.3)$)
node[midway] {L1 Synchronization};
\mess{ue}{RRC Connection Setup Complete}{rnc}
\end{sequencediagram}
\end{document}
是否可以为箭头对分配不同的颜色,并为每种协议层的颜色添加图例?
答案1
由于pgf-umlsd
使用序列图的环境,您可以简单地为相关消息的范围tikzpicture
设置 TikZ 键:draw=<color>
\begin{scope}[draw=<color>]
\mess[<delay>]{<sender>}{<message content>}{<receiver>}
\end{scope}
或者,如果您想定义一个方便的宏,您可以将此代码片段放在您的序言中:
\usepackage{xargs}
\newcommandx\colmess[5][2=0]{%
\begin{scope}[draw=#1]%
\mess[#2]{#3}{#4}{#5}%
\end{scope}%
}
它为您提供了一个用于以彩色箭头形式发送消息的新宏\colmess{<color>}[<delay>]{<sender>}{<message content>}{<receiver>}
。
答案2
包pgf-umlsd
不允许指定“消息”(箭头)的颜色(或任何其他选项)。但是,您可以将一条消息或一组消息封装在 tikz 中,scope
并在范围内更改颜色,例如:
\begin{scope}[draw=red]
\mess{rnc}{Radio Link Setup Request}{nodeb}
\mess{nodeb}{Radio Link Setup Response}{rnc}
\end{scope}
如果您打算多次使用此构造,也许更好的想法是\colormess
使用相同的技巧定义自己的构造来绘制彩色消息:
\newcommand{\colormess}[4]{%
\begin{scope}[draw=#1]
\mess{#2}{#3}{#4}
\end{scope}
}
然后像这样使用它:
\colormess{red}{rnc}{Radio Link Setup Request}{nodeb}
更好的选择是创建一个\mymess
基于原始代码的\mess
,但也接受任何 tikz 样式传递给绘制命令:
\newcommand{\mymess}[5][0]{
\stepcounter{seqlevel}
\path
(#3)+(0,-\theseqlevel*\unitfactor-0.7*\unitfactor) node (mess from) {};
\addtocounter{seqlevel}{#1}
\path
(#5)+(0,-\theseqlevel*\unitfactor-0.7*\unitfactor) node (mess to) {};
\draw[->,>=angle 60,#2] (mess from) -- (mess to) node[midway, above]
{#4};
\node (#4 from) at (mess from) {};
\node (#4 to) at (mess to) {};
}
可以这样使用:
\mymess{red, dashed, -latex}{rnc}{Radio Link Setup Request}{nodeb}