tikz-uml 节点位置不符合预期

tikz-uml 节点位置不符合预期

参见下面的示例,我期望:

  1. 节点之间的距离以边界而不是中心来衡量。A、B、C 现在重叠了。
  2. 节点 E 应该在 D 下方,现在它与 D 重叠。
  3. 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

不太清楚会发生什么,但出于某种原因,当您使用长度宏时它不起作用。用\dx0.5cm 替换,它就可以正常工作。另一种有效的方法(至少在这里)是使用declare functiondxdy对于最后一点,您可以指定northsouth锚点来获取边界之间的中点。

在此处输入图片描述

\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}

相关内容