TikZ:全局/本地[节点距离]如何工作?

TikZ:全局/本地[节点距离]如何工作?

该 MWE 的预期输出是两个重叠节点(即BC)。

但是,\node [draw, right = 1cm of A] (B) {B};成功覆盖了的全局设置node distance=2cm,而\node [draw, right = of A, node distance = 1cm] (C) {C};没有。

那么,为什么这两种语法会导致不同的输出?

\documentclass[border=1cm]{standalone}
\usepackage{tikz}
\usetikzlibrary{shapes,arrows,positioning}

\begin{document}
\begin{tikzpicture}[auto, node distance=2cm,>=latex',align=center]
    \node [draw] (A) {A};
    \node [draw, right = 1cm of A] (B) {B};
    \node [draw, right = of A, node distance = 1cm] (C) {C};
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案1

顺序很重要。TiZ 解析器从左到右进行解析。这意味着你需要第一的将节点距离(局部)设置为 1cm node distance = 1cm,然后让 TiCZ通过以下方式计算节点的实际坐标right = of A

\documentclass[border=1cm]{standalone}
\usepackage{tikz}
\usetikzlibrary{shapes,arrows,positioning}

\begin{document}
\begin{tikzpicture}[auto, node distance=2cm,>=latex',align=center]
    \node [draw] (A) {A};
    \node [draw, right = 1cm of A] (B) {B};
    \node [draw, node distance = 1cm, right = of A] (C) {C};
\end{tikzpicture}
\end{document}

在此处输入图片描述

如您所见,现在BC节点彼此重叠。

答案2

的运作node distance非常特殊,而且很难看出。它只当且仅当有一个of part shift part

我引用 3.0.1a 手册第 231 页:

/tikz/node distance=<shifting part>(无默认值,最初为 1cm 和 1cm)此键的值按使用方式使用当且仅当A<of-part>存在,但是 <shifting part>

看看这个例子。

  • 蓝色节点不是在他们的代码中有一个shifting part,所以node distance,所以关键是积极的
  • 红色节点有shifting part,因此node distance密钥是不活跃

例子

\documentclass{book}
\usepackage{tikz}
\usetikzlibrary{positioning}
\begin{document}

\foreach \i in {8,13,17}{
\begin{tikzpicture}[noeud/.style={draw,node distance=\i mm},
                    entre/.style={midway,draw=none,fill=white,inner sep =1pt}]
\draw[fill=green!10] (-1,-.1) rectangle (3,5);
\draw[help lines] (-1,-.1) grid (3,5);
% No shifting part
\begin{scope}[every node/.append style={fill=blue!20,font=\scriptsize}]
\node[noeud,align=center] (a1) at (0,0) {node distance\\ actived};
\node[noeud] (b1) [above=of a1] {1};
\node[noeud] (c1) [above=of b1] {2};
\draw [<->](a1)--(b1)node[entre]{\i mm};
\draw [<->](b1)--(c1)node[entre]{\i mm};
\end{scope}
% Shifting part
\begin{scope}[every node/.append style={fill=red!20,font=\scriptsize}]
\node[noeud,align=center] (a2) at (2,0) {node distance\\ inactived};
\node[noeud] (b2) [above=1cm of a2] {1};
\node[noeud] (c2) [above=1cm of b2] {2};
\draw [<->](a2)--(b2)node[entre]{1 cm};
\draw [<->](b2)--(c2)node[entre]{1 cm};
\end{scope}
\end{tikzpicture}
}
\end{document}

您的代码是

right = 1cm of A

存在shifting part且等于1 cm。因此关键distance node=2cm已禁用。因此,B 点位于距 A 1 厘米正如您所指定的。

然后对于点 C,你可以这样写:

 right = of A, node distance = 1cm

因为 shifting part在此代码中,distance node=2cm关键是积极的因此节点被放置在2cm。然后您再次指定此距离,但它已经被计算出来,因此 pgf 不再执行任何操作,正如您在 10 厘米距离节点键中看到的那样。

代码

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{shapes,arrows,positioning}

\begin{document}  
\begin{tikzpicture}[auto, node distance=2cm]
    \node [draw] (A) {A};
    \node [draw, right = 1cm of A] (B) {B};
    \node [draw, right =of A,circle,fill=red!40,opacity=.5,inner sep =10pt] (B) {B};
    \node [draw, right = of A, node distance = 10cm,fill=blue!40,opacity=.5,inner sep =10pt] (C) {C};
    \node [draw, node distance = 3cm, right = of A,fill=violet,opacity=.5,inner sep =10pt] (D) {D};
\end{tikzpicture}   
\end{document}

使用 www.DeepL.com/Translator 翻译

相关内容