tikz-pic 的边框到边框放置

tikz-pic 的边框到边框放置

tikz-pic 的放置与其相对 (0,0) 坐标有关,但我想考虑 tikz-pic 的整体结构,例如,当您说 时,tikz-pic 和节点(或其他 tikz-pic,如果可能)之间的距离为 1cm \pic[right = 1cm of x]{mypic}。我只能使用嵌套图片除此之外,tikz-pics 的放置工具的行为似乎与节点的放置工具的行为不同。

在以下示例中,两个位置均使用库right=of中的资源进行positioning(下面的代码),但每种情况下产生的距离不同:“节点到节点”(在 tikz-pic 内)和“节点到 pic”。有没有办法让 tikz-pic 的定位具有与节点定位类似的行为,即指定的值会导致 tikz-pic 和相关元素的边框之间的距离?

在此处输入图片描述

只是想让图片更清晰:有一张由节点 A 和 B 组成的 tikz-pic,其中 A 和 B 彼此相距 5 厘米(如顶部的蓝线所示,tikz 从“边界到边界”进行放置)。然后我将这张 tikz-pic 放置在节点 X 右侧 5 厘米处。显然,节点 X 和 A 之间的距离(黑线)与 5 厘米(底部的蓝线作为参考)非常不同。我期望放置从“边界到边界”或“中心到中心”(红线)进行,但事实并非如此。

\documentclass[tikz]{standalone}

\usetikzlibrary{positioning}

\renewcommand{\familydefault}{\sfdefault}

\begin{document}
\begin{tikzpicture}

  \pgfmathtruncatemacro\w{5};

  % ------------------------------------------------
  % code under discussion is between these commented
  % dashed lines. The rest of it is there only to
  % illustrate the points of the question.

  \tikzset{
    >=latex,
    some/.pic={
      \coordinate(aux);
      \node[draw, left= \w/2 of aux](a){A};
      \node[draw, right= \w of a](b){B};
    },
  }

  \node[draw](x){X};
  \pic[right=\w of x, local bounding box=s]{some};
  %------------------------------------------------

  \draw[<->](x)--(a)node[midway,above]{length$\neq$\w cm};
  \draw[<->](a)--(b)node[midway,above]{length=\w cm};

  %% blue lines are reference for the expected length
  \begin{scope}[blue]
    \coordinate[yshift=-5mm](ref1)at(x.south east);
    \draw[dashed](x.south east)--(ref1);
    \draw[<->](ref1)--+(\w, 0)node[midway, above]{\w cm}coordinate(ref2);
  \end{scope}    

  \node[
  draw,
  right=of ref2,
  anchor=north west,
  align=flush center,
  ](aux){Between node and pic:\\border to center.};
  \draw[->](aux.north west)to[out=90+45, in=45](ref2);

  \begin{scope}[blue]
    \coordinate[yshift=4mm](ref1)at(b.north west);
    \coordinate[yshift=4mm](ref2)at(a.north east);
    \draw[dashed](b.north west)--(ref1);
    \draw[dashed](a.north east)--(ref2);
    \draw[<->](ref1)--+(-\w, 0)node[midway,above]{\w cm};
  \end{scope}

  \node[
  draw,
  right=of ref1,
  anchor=north west,
  align=flush center,
  ](aux){Between nodes:\\border to border.};

  \draw[->](aux.north west)to[out=90+45, in=45](ref1);

  %% length is incorrect for the red line
  \begin{scope}[red]
    \coordinate[yshift=-14mm](ref1);
    \coordinate[yshift=-14mm](ref2)at(s.center);
    \draw[dashed](x.south)--(ref1);
    \draw[dashed](s.center)--(ref2);
    \draw[<->](ref1)--(ref2)node[midway, above]{$\neq$\w cm};
  \end{scope}

\end{tikzpicture}
\end{document}

更新1:

有趣的是,如果 tikz-pic 包含一个足够大的节点,可以将 tikz-pic 的所有其他内容都包含在其中,则定位行为与我上面问的非常相似。但是,tikz-pic 内部的节点仍然放错了位置(橙色方块应该正好位于字母 A 上方)。

在此处输入图片描述

\documentclass[tikz, border=1mm]{standalone}

\usetikzlibrary{positioning}

\renewcommand{\familydefault}{\sfdefault}

\begin{document}
\begin{tikzpicture}

  \tikzset{
    >=latex,
    some/.pic={
      \node[draw, minimum size=1cm](a){A};
      \node[draw=orange]at(a){};
    },
  }

  \node[draw](x){X};
  \pic[right=1cm of x, local bounding box=s]{some};
  \draw[<->, blue](x.north east)--(x.north east-|a.north west);
  \draw[<->, red](x.south east)--(x.south east-|s.south west);
  \draw[<->, yellow!80!black](x.east)--+(1cm,0);

\end{tikzpicture}
\end{document}

更新2:

“Update1” 的答案:当在节点之间使用时,定位库命令(right=of和朋友)将更改放置到彼此最接近的节点的锚点(west在本例中)。当与 tikz-pic 一起使用时也会发生同样的情况,但是在这种情况下,此锚点配置将传输给 tikz-pic 中的所有内部节点。

相关内容