![如何在 TikZ-UML 中向生命线添加注释](https://linux22.com/image/327109/%E5%A6%82%E4%BD%95%E5%9C%A8%20TikZ-UML%20%E4%B8%AD%E5%90%91%E7%94%9F%E5%91%BD%E7%BA%BF%E6%B7%BB%E5%8A%A0%E6%B3%A8%E9%87%8A.png)
有一个注释与参与者相连me
,我想在查找钥匙操作后将节点连接到生命线。这可能吗?
(我尝试使用name
但总是出现错误。)
\documentclass{article}
\usepackage{tikz-uml}
\begin{document}
\begin{tikzpicture}[auto]
\begin{umlseqdiag}
\umlactor[x=0, class=Person]{me}
\umlboundary[x=6, class=Door]{door}
\umlcontrol[x=12, class=Bed]{bed}
\begin{umlcallself}[op={find keys}]{me}
\end{umlcallself}
\begin{umlcall}[op={open door}, return={door opened}]{me}{door}
\end{umlcall}
\umlnote[x=5,y=-5]{me}{This note should be connected to my lifeline instead of the actor, e.g. after find keys.}
\end{umlseqdiag}
\end{tikzpicture}
\end{document
答案1
关于 tikz-uml 的文档没有提到这一点,但这是可能的。事实上,当你定义一个 umlcall(或 umlcallself)时,你会绘制两个活动矩形。在这些矩形的顶部和底部,节点用特殊名称定义。
以下是示例的代码:
\begin{tikzpicture}
\begin{umlseqdiag}
\umlactor[x=0, class=Person]{me}
\umlboundary[x=6, class=Door]{door}
\umlcontrol[x=12, class=Bed]{bed}
\begin{umlcallself}[op={find keys}, name=callfk]{me}
\end{umlcallself}
\begin{umlcall}[op={open door}, return={door opened}]{me}{door}
\end{umlcall}
\umlnote[x=5,y=-5]{sb-callfk}{This note should be connected to my lifeline instead of the actor, e.g. after find keys.}
\end{umlseqdiag}
\end{tikzpicture}
通过给自己调用的“find keys”命名,就可以猜出这些节点的名字。
对于发送方,其活动矩形顶部有一个名为 (st-callfk) 的节点,st 代表“起始-顶部”,底部有一个名为 (sb-callfk) 的节点,sb 代表“起始-底部”。对于接收方,其活动矩形顶部有一个名为 (et-callfk) 的节点,et 代表“结束-顶部”,底部有一个名为 (eb-callfk) 的节点,eb 代表“结束-底部”。
我没想到有人可能需要在生命线上定义注释,所以当前的节点名称可能值得改进。也许使用发送方/接收方而不是开始/结束会更好。由于我很快就会发布 tikz-uml 的新版本,我将更新这些节点名称。