如何使用 pgf-umlsd 在序列图中绘制虚线水平线?

如何使用 pgf-umlsd 在序列图中绘制虚线水平线?

我正在使用 Tikz 绘制序列图。我首先尝试了tikz-uml,但它有一些问题,我询问了另一个问题

我现在正在尝试pgf-umlsd,但它缺乏对块中替代方案之间的虚线水平线的支持alt

这是我目前拥有的:

\documentclass{article}
\usepackage{pgf-umlsd}
\usepackage{tikz}
\usepackage{pgfplots}
\usetikzlibrary{arrows}
\usepackage{pgf-umlsd}

\begin{document}

\begin{sequencediagram}
  \newthread{t}{:Thread}
  \newinst[1]{i}{:Instance}

  \begin{sdblock}{alt}{[condition]}
    \begin{call}{t}{if\_true()}{i}{}
    \end{call}
 \begin{call}{t}{if\_false()}{i}{}
    \end{call}
  \end{sdblock}
\end{sequencediagram}

\end{document}

原来的

我想像这样在两个选项之间画一条虚线。我该怎么做?

期望输出

我已经找到了\separateline 的定义,但是该线并非在块的边界处开始/结束alt

\documentclass{article}
\usepackage{pgf-umlsd}
\usepackage{tikz}
\usepackage{pgfplots}
\usetikzlibrary{arrows}
\usepackage{pgf-umlsd}

\begin{document}

\newcommand{\separateline}[3][dotted, color=black, very thick]{
    \stepcounter{seqlevel}
    \path
    (#2)+(.1,-\theseqlevel*\unitfactor-.8*\unitfactor) node (from) {}
    (#3)+(-.1,-\theseqlevel*\unitfactor-.8*\unitfactor) node (to) {};
    \draw[#1] (from) -- (to);
}

\begin{sequencediagram}
  \newthread{t}{:Thread}
  \newinst[1]{i}{:Instance}

  \begin{sdblock}{alt}{[condition]}
    \begin{call}{t}{if\_true()}{i}{}
    \end{call}

\separateline{t}{i}

 \begin{call}{t}{if\_false()}{i}{}
    \end{call}
  \end{sdblock}
\end{sequencediagram}

\end{document}

在此处输入图片描述

答案1

如果你查看pgf-umlsd.sty文件,将会看到 被sdblock绘制为一个,其角位于和 的rectangle坐标上。并且这些坐标将随着每个新的 而重新定义。nwsesdblock

那么我的建议是在每个 之后立即绘制分隔线sdblock。如果您希望在块元素之间进行一些分隔,请使用\stepcounter

完整的代码可能是:

\documentclass{article}
\usepackage{pgf-umlsd} % Already loads TiKZ and libraries arrows and shadows

\begin{document}

\begin{sequencediagram}
  \newthread{t}{:Thread}
  \newinst[1]{i}{:Instance}

  \begin{sdblock}{alt}{[condition]}
    \begin{call}{t}{if\_true()}{i}{}
    \end{call}

    \stepcounter{seqlevel} %Vertical empty space between `calls`

    \begin{call}{t}{if\_false()}{i}{}
    \end{call}
  \end{sdblock}

  \path (nw)--coordinate (aux) (se); 
  \draw[dashed] (nw|-aux)--(aux-|se);
\end{sequencediagram}

\end{document}

在此处输入图片描述

相关内容