Tikz-UML 序列图:如何延长生命线并缩小 \umlfpart 之前的垂直空间?

Tikz-UML 序列图:如何延长生命线并缩小 \umlfpart 之前的垂直空间?

我在用Tikz UML创建序列图。

c:C我怎样才能延长和的生命线d:D以匹配 的生命线长度b:B?我怎样才能缩小 产生的虚线前的垂直空间\umlfpart

\documentclass[border=3mm]{standalone}
\usepackage[english]{babel}
\usepackage{tikz}
\usepackage{tikz-uml}

\begin{document}

\begin{tikzpicture}
 \tikzumlset{fill object = white, fill call = gray!20} 
\begin{umlseqdiag}
\umlobject[class=B]{b}
\umlobject[class=C]{c}
\umlobject[class=D]{d}


\begin{umlfragment}[type=loop]
\begin{umlcallself}[op=run]{b} 

\begin{umlcall}[op=send, type=asynchron]{b}{c}
    \begin{umlfragment}[type=alt, label=condition, inner xsep=8]
        \begin{umlcall}[op=send, type=synchron, return=send update]{c}{d}
            \begin{umlcallself}[padding=1.5, op=run]{d} 
            \end{umlcallself}
        \end{umlcall}
        \begin{umlcallself}[op=assess update]{c} 
            \begin{umlcall}[op=send update, type=synchron, return=acknowledge]{c}{b}
            \end{umlcall}
            \begin{umlcall}[op=allow continue, type=asynchron]{c}{b}
            \end{umlcall}
        \end{umlcallself}
        \umlfpart[default]
        \begin{umlcall}[op=allow continue, type=asynchron]{c}{b}
        \end{umlcall}
    \end{umlfragment}
\end{umlcall}

\end{umlcallself}

\end{umlfragment}

\end{umlseqdiag}
\end{tikzpicture}

\end{document}

这是我目前拥有的:

序列图

我希望有这样的延长生命线:

在此处输入图片描述

答案1

新版本tikz-uml提到的N. Kielbasiewicztikz-uml作者)他的评论似乎已经发布了。如手册中所述,该\umlsdnode宏现在可用于延长生命线,因此对于您的示例,您可以尝试例如

\umlsdnode[dt=1.5]{b}
\umlsdnode[dt=5]{c}
\umlsdnode[dt=32]{d}

我还添加了LaRiFaRi 的建议padding减少垂直间距。

完整代码:

代码部分输出

\documentclass[border=3mm]{standalone}
\usepackage[english]{babel}
\usepackage{tikz-uml}

\begin{document}

\begin{tikzpicture}
 \tikzumlset{fill object = white, fill call = gray!20} 
\begin{umlseqdiag}
\umlobject[class=B]{b}
\umlobject[class=C]{c}
\umlobject[class=D]{d}


\begin{umlfragment}[type=loop]
\begin{umlcallself}[op=run]{b} 

\begin{umlcall}[op=send, type=asynchron]{b}{c}
    \begin{umlfragment}[type=alt, label=condition, inner xsep=8]
        \begin{umlcall}[op=send, type=synchron, return=send update]{c}{d}
            \begin{umlcallself}[padding=1.5, op=run]{d} 
            \end{umlcallself}
        \end{umlcall}
        \begin{umlcallself}[op=assess update]{c} 
            \begin{umlcall}[op=send update, type=synchron, return=acknowledge]{c}{b}
            \end{umlcall}
            \begin{umlcall}[op=allow continue, padding=-2.5, type=asynchron]{c}{b}
            \end{umlcall}
        \end{umlcallself}
        \umlfpart[default]
        \begin{umlcall}[op=allow continue, type=asynchron]{c}{b}
        \end{umlcall}
    \end{umlfragment}
\end{umlcall}

\end{umlcallself}

\end{umlfragment}
\umlsdnode[dt=1.5]{b}
\umlsdnode[dt=5]{c}
\umlsdnode[dt=32]{d}
\end{umlseqdiag}
\end{tikzpicture}
\end{document}

相关内容