在 tikz-uml 包中使用 umlcreatecall 时是否可以删除 ddots?

在 tikz-uml 包中使用 umlcreatecall 时是否可以删除 ddots?

我正在使用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}   

使用 umlobject 创建实例

示例 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}   

使用 umlcreatecall 创建实例

更新:这里有一个例子,说明了为什么要在 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}

嵌套调用的示例(与 umlcall 或 umlcreatecall 配合使用)

答案1

tikz-uml灵活性和编程方式不像 TikZ(每个设置在使用前都是默认的)。这意味着包含的宏在应用选项之前:已定义。使用的没有可用的特殊选项(既不是也不是)。\umlobject\umlobject\umlcreatecallevery umlobjectevery 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 的下一个版本中发布,即将推出。

相关内容