UML状态图

UML状态图

我正在尝试使用 TikZ 绘制 UML 状态图。我尝试过tikz-uml,但我对它处理状态节点的方式并不满意。虽然我喜欢 TikZ 的多种节点放置选项(与上方相对放置、选择锚点),但我不知道如何使用来做到这一点tikz-uml。此外,它还让我的文本延伸到节点之外。

简要查看 的tikz-uml实现(我仍然是 TeX 新手),我了解到实际上是在标题节点和内容节点周围绘制一个圆角矩形fitting,其中包含库,随后添加了一条分隔状态名称的线。因此,我尝试拥有自己的实现,在一个 TikZ 图片中绘制标题和内容,然后将其放在节点内。这样,我希望保留我已经习惯的普通 TikZ 节点的简单放置。这是代码和问题,我为分隔而绘制的线错误地放置在节点上方(注意:渲染两次以获得与我相同的线条位置):

\documentclass{article}
\usepackage{tikz}
\usepackage{tikz-uml}   
\usepackage[margin=0cm,nohead]{geometry}
\usepackage[active,tightpage]{preview}
\usetikzlibrary{calc}
\usetikzlibrary{positioning}   
\PreviewEnvironment{tikzpicture}
\begin{document}
\begin{tikzpicture}
    \node[draw, rounded corners](box){
        \begin{tikzpicture}[remember picture]
            \node[draw=red](caption) {titel};
            \node[below=0 of caption] {\begin{tabular} ccontent\\more content\end{tabular}};
        \end{tikzpicture}
    };
    \draw (caption.south -| box.west) -- (caption.south -| box.east);
\end{tikzpicture}
\end{document}

为了显示线条的位置,标题框用红色绘制,线条应位于其下边缘,与输出类似tikz-uml。线条实际上是外部黑色节点上方的黑条,绘制在图像上边缘附近。

线错位在框上方


为了进行比较,这里是我尝试过的tikz-uml以及结果(只需用这个替换上面外部 tikzpicture 内的所有内容即可测试):

\begin{umlstate}[x=-3, y=-4, name=discard, do=clear all valid bits]{discard}
\end{umlstate}

使用 tikz uml 覆盖文本

答案1

您可以将状态节点变成“多部分”节点。为此,您需要加载shapes.multipartTikZ 库。然后,您应该能够使用您习惯的所有放置选项。

结果:

在此处输入图片描述

代码:

\documentclass[border=1cm]{standalone}
\usepackage{tikz}
\usetikzlibrary{shapes.multipart}    
\begin{document}
  \begin{tikzpicture}
    \node[rectangle split, rectangle split parts=2, draw, rounded corners]{%
      \tikz\node[draw=red, rectangle, rounded corners]{titel};
      \nodepart{two}
      \begin{tabular}{c}
      content \\ more content
      \end{tabular}
    };
  \end{tikzpicture}
\end{document}

PS. 您也可以将状态节点设为matrix,但这样就很难得到所需的水平线(请参阅讨论)。

相关内容