该 MWE 的预期输出是两个重叠节点(即B
和C
)。
但是,\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
顺序很重要。Ti钾Z 解析器从左到右进行解析。这意味着你需要第一的将节点距离(局部)设置为 1cm node distance = 1cm
,然后让 Ti钾C
Z通过以下方式计算节点的实际坐标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}
如您所见,现在B
和C
节点彼此重叠。
答案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 翻译