文档中包含多个 TIKZ-UML 用例时无法正确显示

文档中包含多个 TIKZ-UML 用例时无法正确显示

我正在使用 TIKZ-UML 创建四个简单的用例图。我将它们分别放在单独的文件中,以确保它们都能按要求进行编译。

我在序言中包含了所需的软件包,并在文档中包含了对包含 tikzpictures 的文件的引用。当我编译第一个图表时,它可以很好地编译(和显示),但以下三个图表似乎受到第一个图表的 \usecase 中规定的宽度的影响。

该图表是文档中包含的第一个图表:

\begin{figure}
\centering

\begin{tikzpicture}

\umlactor[y=4]{Supervisor}
\umlactor[y=2]{Co-Supervisor}
\umlactor[y=0]{Examinator}

\umlusecase[x=5, y=2, fill=lightgray!50, width=3cm]{Determining examiner availability}

\umlactor[x=10, y=2]{Secretary}

\umlassoc{Supervisor}{usecase-1}
\umlassoc{Co-Supervisor}{usecase-1}
\umlassoc{Examinator}{usecase-1}

\umlassoc{usecase-1}{Secretary}

\end{tikzpicture}
\caption{Scenario: Determining examiner availbility.}
\end{figure}

其它图表大致相同,只是 \usecase 的文本不同(并且宽度可能不同)。

该图的序言包含:

\usepackage{tikz}
\usepackage{tikz-uml}
\usetikzlibrary{positioning,chains,fit,shapes,calc}

示例链接: 第一张图没问题,下一张图宽度不对

答案1

问题是您usecase-1在关联中总是引用 。但是,名称和计数器是全局的,因此在第二个 中tikzpicture,您应该引用usecase-2

节点和锚点是全局定义的,因此即使您没有usecase-1在第二张图片中定义,您仍然可以像定义它一样引用它,并且线条最终会位于与第一张图片相同的位置。

或者,您可以将计数器重置tikzumlUseCaseNum0每个新值的开始位置tikzpicture,这样编号将重新开始:

\documentclass{article}
\usepackage{tikz}
\usepackage{tikz-uml}
\usetikzlibrary{positioning,chains,fit,shapes,calc}


\begin{document}

\begin{tikzpicture}

\umlactor[y=4]{Supervisor}
\umlactor[y=2]{Co-Supervisor}
\umlactor[y=0]{Examinator}

\umlusecase[x=5, y=2, fill=lightgray!50, width=3cm]{Determining examiner availability}

\umlactor[x=10, y=2]{Secretary}

\umlassoc{Supervisor}{usecase-1}
\umlassoc{Co-Supervisor}{usecase-1}
\umlassoc{Examinator}{usecase-1}

\umlassoc{usecase-1}{Secretary}

\end{tikzpicture}

\begin{tikzpicture}
\setcounter{tikzumlUseCaseNum}{0}% Reset the counter
\umlactor[y=4]{Supervisor}
\umlactor[y=2]{Co-Supervisor}
\umlactor[y=0]{Examinator}

\umlusecase[x=5, y=2, fill=lightgray!50, width=2cm]{Sudden}

\umlactor[x=10, y=2]{Secretary}

\umlassoc{Supervisor}{usecase-1}
\umlassoc{Co-Supervisor}{usecase-1}
\umlassoc{Examinator}{usecase-1}

\umlassoc{usecase-1}{Secretary}

\end{tikzpicture}


\end{document}

相关内容