我正在使用TikZ的UML包装制作UML 序列图并希望在使用时删除“:”字符(分隔类名和实例名)\begin{umlcreatecall}[]{A}{B}
。当使用时,可以使用no ddots
选项\umlobject[no ddots, x=4]{A}
最初定义生命线而不是动态定义生命线(例如在序列的一部分期间使用构造函数“创建”)
示例 1:在 umlobject 上设置“no ddots”
\begin{tikzpicture}
\begin{umlseqdiag}
\umlobject[no ddots, x=4]{A}
\umlobject[no ddots, x=8]{B}
\begin{umlcall}[op=create]{A}{B}
\end{umlcall}
\end{umlseqdiag}
\end{tikzpicture}
示例 2:需要找到与 umlcreatecall 配合使用的类似于“no ddots”的内容
\begin{tikzpicture}
\begin{umlseqdiag}
\umlobject[no ddots, x=4]{A}
\begin{umlcreatecall}[x=8]{A}{B}
\end{umlcreatecall}
\end{umlseqdiag}
\end{tikzpicture}
更新:这里有一个例子,说明了为什么要在 tikz-uml 中使用\begin{}
and \end{}
;具体来说,因为它在语义上是如何嵌套函数调用的(需要告诉宏/ tikz-uml“激活框”应该延伸多远以及箭头如何定位)。
\begin{tikzpicture}
\begin{umlseqdiag}
\umlobject[no ddots, x=0]{A}
\umlobject[no ddots, x=6]{B}
\umlobject[no ddots, x=12]{C}
\begin{umlcall}[op=doComplexTask(), type=synchron, with return]{A}{B}
\begin{umlcall}[op=doSomethingWithC(), type=synchron, with return]{B}{C}
\end{umlcall}
% Calling these without the \begin and \end does not work
%\umlcall[op=doMoreStuff(), type=synchron]{B}{B}
%\umlcall[op=doStuffWithA(), type=synchron, with return]{B}{A}
\end{umlcall}
\end{umlseqdiag}
\end{tikzpicture}
答案1
的tikz-uml
灵活性和编程方式不像 TikZ(每个设置在使用前都是默认的)。这意味着包含的宏在应用选项之前:
已定义。使用的没有可用的特殊选项(既不是也不是)。\umlobject
\umlobject
\umlcreatecall
every umlobject
every created umlobject
以下有效,但会覆盖所有可能:
的\umlobject
和幸存下来,这就是第二个例子必须保持对本地样式的改变的\umlcreatecall
原因。{ }
every node
代码
\documentclass[tikz,convert=false]{standalone}
\usepackage{tikz-uml}
\begin{document}
\begin{tikzpicture}
\begin{umlseqdiag}
\umlobject[no ddots, x=2]{A}
\umlcreatecall[x=4,/tikz/nodes={/tikzuml/obj/no ddots}]{A}{B}
\umlobject[x=6]{C}
\end{umlseqdiag}
\end{tikzpicture}
\begin{tikzpicture}
\begin{umlseqdiag}
\umlobject[no ddots, x=2]{A}
{\umlcreatecall[x=4,/tikz/nodes={/tikzuml/obj/no ddots}]{A}{B}}
\umlobject[x=6]{C}
\end{umlseqdiag}
\end{tikzpicture}
\end{document}
答案2
虽然\umlcreatecall
调用了\umlobject
“no ddots”选项,但未定义。这是个失误。修复将在 tikz-uml 的下一个版本中发布,即将推出。