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 中的所有内部节点。