如何在 pgf-umlcd 中创建钻石继承

如何在 pgf-umlcd 中创建钻石继承

情况

我想创建不同的类图,尤其是显示多重继承中的菱形问题

因为它看起来特别容易使用,所以我决定使用它,pgf-umlcd但这导致了这个......

问题

当创建这种菱形继承时,LaTeX 不允许我编译pgf-umlcd图。我只能使用 MWE 中显示的解决方法来创建所需的结果。

此外,我尝试了其他图表,结果也出现了同样的错误(即所示的示例1.2.2 版本代码在这里)。

如何在 pgf-umlcd 中创建多重继承图?

平均能量损失

\documentclass{standalone}

\usepackage[simplified]{pgf-umlcd}

\begin{document}

\begin{tikzpicture}
\begin{class}[text width=1.5cm]{Dog}{0,0}
\end{class}

\begin{class}[text width=3cm]{Labrador}{-1.75,-1.5}
\inherit{Dog}
\end{class}

\begin{class}[text width=3cm]{Poodle}{1.75,-1.5}
\inherit{Dog}
\end{class}

\begin{class}[text width=3cm]{Labradoodle2}{0,-3}
%\inherit{Poodle}
\inherit{Labrador}
\end{class}

\begin{class}[text width=3cm]{Labradoodle}{0,-3}
\inherit{Poodle}
%\inherit{Labrador} % uncomment for error
\end{class}
\end{tikzpicture}

\end{document}

编辑: 另外说明一下:我发现链接的 pdf 可以与相应的(可在线) 版本的pgf-umlcd(github 存储库整体上按原样工作)。 版本仅在文件第 194 行和第 208 行之间的两行有所不同pgf-umlcd.sty(参见摘录中的第 4 行和第 10 行):

github = good(摘自手册:2015 年 5 月 31 日)

%% connections
\begin{pgfonlayer}{connectionlayers}
\ifnum\c@umlcdClassAbstractClassNum>0
\foreach \c in {\umlcdClassAbstractClass}{
  \draw [umlcd style inherit line] (\c) -- (\umlcdClassName);
}
\fi

\ifnum\c@umlcdClassInterfaceNum>0
\foreach \c in {\umlcdClassInterface}{
  \draw [umlcd style implement line] (\c) -- (\umlcdClassName);
}
\fi
\end{pgfonlayer}

安装 = 错误(来自手册:2012 年 1 月 31 日;通过 TeX Live Utility 安装)

%% connections
\begin{pgfonlayer}{connectionlayers}
\ifnum\c@umlcdClassAbstractClassNum>0
\foreach \c in \umlcdClassAbstractClass {
  \draw [umlcd style inherit line] (\c) -- (\umlcdClassName);
}
\fi

\ifnum\c@umlcdClassInterfaceNum>0
\foreach \c in \umlcdClassInterface {
  \draw [umlcd style implement line] (\c) -- (\umlcdClassName);
}
\fi
\end{pgfonlayer}

两人都这么说\ProvidesPackage{pgf-umlcd}[2011/10/01 v0.3dev Some LaTeX macros for UML Class Diagrams.]

答案1

好吧,您已经回答了自己的问题。如果您不想使用 GitHub 中的版本,可以使用\patchcmdfrom etoolboxto patch \endclassAndInterfaceCommon,删除多余的括号:

代码输出

\documentclass[border=5mm]{standalone}

\usepackage[simplified]{pgf-umlcd}
\usepackage{etoolbox}

\patchcmd{\endclassAndInterfaceCommon}
{{\umlcdClassInterface}}
{\umlcdClassInterface}
{}{}

\patchcmd{\endclassAndInterfaceCommon}
{{\umlcdClassAbstractClass}}
{\umlcdClassAbstractClass}
{}{}

\begin{document}

\begin{tikzpicture}
\begin{class}[text width=1.5cm]{Dog}{0,0}
\end{class}

\begin{class}[text width=3cm]{Labrador}{-1.75,-1.5}
\inherit{Dog}
\end{class}

\begin{class}[text width=3cm]{Poodle}{1.75,-1.5}
\inherit{Dog}
\end{class}

\begin{class}[text width=3cm]{Labradoodle}{0,-3}
\inherit{Poodle}
\inherit{Labrador} 
\end{class}
\end{tikzpicture}

\end{document}

相关内容