情况
我想创建不同的类图,尤其是显示多重继承中的菱形问题。
因为它看起来特别容易使用,所以我决定使用它,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 中的版本,可以使用\patchcmd
from etoolbox
to 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}