参见下面的示例,我期望:
- 节点之间的距离以边界而不是中心来衡量。A、B、C 现在重叠了。
- 节点 E 应该在 D 下方,现在它与 D 重叠。
- D 和 A 的中间点由中心测量,我希望它由边界测量。
梅威瑟:
\documentclass[border=5pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{positioning,calc}
\usepackage{tikz-uml}
\begin{document}
\tiny\begin{tikzpicture}[show background grid]
\def\dx{0.5cm}
\def\dy{1.5cm}
\umlclass{AAAAAA}{}{};
\umlclass[left=\dx of AAAAAA]{BBBBBBBBB}{}{};
\umlclass[right=\dx of AAAAAA]{C}{}{};
\umlclass[below=\dy of AAAAAA]{D}{}
{+foo()\\
+bar()\\
+hello()};
\umlclass[below=\dy of D]{E}{}{};
\node[circle,fill=black] (M) at ($(D)!0.5!(AAAAAA)$) {};
\umlinherit[geometry=-|]{D}{AAAAAA};
\umlinherit[geometry=-|]{M}{BBBBBBBBB};
\umlinherit[geometry=-|]{M}{C};
\end{tikzpicture}
\end{document}
答案1
不太清楚会发生什么,但出于某种原因,当您使用长度宏时它不起作用。用\dx
0.5cm 替换,它就可以正常工作。另一种有效的方法(至少在这里)是使用declare function
和dx
。dy
对于最后一点,您可以指定north
和south
锚点来获取边界之间的中点。
\documentclass[border=5pt]{standalone}
\usepackage{tikz-uml}
\usetikzlibrary{positioning,calc}
\begin{document}
\begin{tikzpicture}[
show background grid,
declare function={
dx=0.5cm;
dy=1.5cm;
}
]
\umlclass{AAAAAA}{}{};
\umlclass[left=dx of AAAAAA]{BBBBBBBBB}{}{};
\umlclass[right=dx of AAAAAA]{C}{}{};
\umlclass[below=dy of AAAAAA]{D}{}
{+foo()\\
+bar()
+hello()};
\umlclass[below=dy of D]{E}{}{};
\node[circle,fill=black] (M) at ($(D.north)!0.5!(AAAAAA.south)$) {};
\umlinherit[geometry=-|]{D}{AAAAAA};
\umlinherit[geometry=-|]{M}{BBBBBBBBB};
\umlinherit[geometry=-|]{M}{C};
\end{tikzpicture}
\end{document}