协议消息图-箭头颜色

协议消息图-箭头颜色
\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}

相关内容