我正在使用 Modelio,但我想用 LaTeX 完成论文中的所有内容,因此我选择 pgf-umlsd 来制作序列图。我遇到的麻烦是我不知道如何使用此库创建消息来创建实例,您能帮助我吗?查看下面的图片,您可以看到我在说什么。
我的第一个代码:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{arrows,shadows}
\usepackage{pgf-umlsd}
\begin{document}
\begin{sequencediagram}
\newinst{act}{Actor}
\newthread{nr}{NetRoute}
\newthread{nr}{NetScan}
\begin{call}{act}{ Buscar una red}{nr}{ redes }
%\begin{call}{act}{ Buscar una red}{nr}{ redes }
\end{call}
\end{sequencediagram}
\end{document}
得出的结果是:
答案1
你可能想看看TikZ-uml它为您定义了这样一个宏(\umlcreatecall{}{}
)。只需将其下载tikz-uml.sty
到您的主文件夹中并编译以下内容:
% arara: pdflatex
\documentclass{article}
\usepackage{tikz-uml}
\begin{document}
\begin{tikzpicture}
\begin{umlseqdiag}
\umlactor[class=A, fill=blue!20]{Actor}
\umlobject[class=B]{NetRoute}
\umlobject[class=C]{NetScan}
\umlcreatecall[class=D]{NetScan}{NetModel}
\begin{umlcall}[op={buscar una red}, return=redes]{NetScan}{NetModel}
\end{umlcall}
\end{umlseqdiag}
\end{tikzpicture}
\end{document}
得出的结果是:
你应该能够根据自己的需要进行调整。如果没有,你仍然可以在 TikZ 中绘制所有内容,或者你可以看看绘制 UML 的其他可能解决方案。
答案2
如果我理解得好,你想要的是类似的东西\mess
,但上面有一个盒装标签,还有一条连接标签和中点的线。
你可以做类似的事情定制 \mess
。我已将\mess
定义从复制pgf-umlsd.sty
到序言并做了少许更改。结果是\create{origin}{label}{destination}
具有类似语法的命令。
\documentclass[border=2mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{arrows,shadows}
\usepackage{pgf-umlsd}
\newcommand{\create}[4][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=1mm, draw, inner sep=1pt] (create_aux_node)
{#3} coordinate[midway] (create_aux);
\draw (create_aux) -- (create_aux_node);
\node (#3 from) at (mess from) {};
\node (#3 to) at (mess to) {};
}
\begin{document}
\begin{sequencediagram}
\newinst{act}{Actor}
\newthread{nr}{NetRoute}
\newthread{ns}{NetScan}
\begin{call}{act}{ Buscar una red}{ns}{ redes }
\end{call}
\create{act}{create}{nr}
\end{sequencediagram}
\end{document}