我希望能够控制 TikZ 中节点边缘之间的距离。在下面的示例中,我希望“节点 B”的左边缘与节点 A 的右边缘正好相距 5 厘米。但是,right of=A, node distance=5cm
设置节点中心之间的距离。
\documentclass[tikz,border=10pt]{standalone}
\usetikzlibrary{arrows, arrows.meta, backgrounds, calc, intersections, decorations.markings, decorations.pathreplacing, positioning, shapes}
\begin{document}
\begin{tikzpicture}
\draw node[draw, rectangle, text centered] (A) {Node A};
\draw node[draw, rectangle, right of=A, node distance=5cm, text centered] (B) {Node B};
\begin{scope}[>=latex]
\draw[<->] ($(A.east)$) -- ($(B.west)$) node[midway, above] {\tiny{I want this distance to be 5 cm}};
\draw[<->] ($(A)+(0mm,-5mm)$) -- ($(B)+(0mm,-5mm)$) node[midway, below] {\tiny{not this distance}};
\end{scope}
\end{tikzpicture}
\end{document}
我找到了这个相关的答案,但解决方案(即使用“right = of A”而不是“right of = A”)对我来说不起作用:在tikz中设置边界之间的节点距离
答案1
您的代码示例最好按以下方式编写:
\documentclass[tikz, border=10pt]{standalone}
\usetikzlibrary{arrows, arrows.meta,
backgrounds,
calc,
decorations.markings, decorations.pathreplacing,
intersections,
positioning,
shapes}
\begin{document}
\begin{tikzpicture}[> = latex,
node distance = 50mm,
]
\draw node[draw] (A) {Node A}; % default shape is rectangle
\draw node[draw, right=of A] (B) {Node B}; % used is positioning package sybntay
\draw[<->] (A) -- node[above, font=\tiny] {I want this distance to be 5 cm} (B);
\draw[<->] ($(A.south)+(0mm,-5mm)$)
-- node[below, font=\tiny] {not this distance}
($(B.south)+(0mm,-5mm)$);
\end{tikzpicture}
\end{document}
- 正如@Qrrbrbirlbel 在他的评论中提到的,
node distance
最好在节点之外定义。上面定义为tikzpicture
选项,但是您可以在\tikzset
节点之前甚至在文档序言中全局定义它。 - 在绘图节点处采用默认形状
rectangle
。 - 如果您未规定节点的大小,则其边框将围绕其内容绘制(考虑默认值)
inner sep
,因此在这种情况下定义text=centered
没有意义。顺便说一句,text=centered
是过时的语法(除了一些罕见的例外),您应该使用align=center
。 - 对于节点边界之间的距离,您应该使用
positioning
语法。根据您的情况right=of A
(或者right= 5cm od A
,如果您不喜欢使用全局定义的“节点距离”)。 - 有关详细信息,
tikz
您需要阅读其文档,请参阅第一部分和第三部分中的第一个教程:TikZ 不是一个绘画程序(完整文档非常庞大(1321页)。 - 顺便说一句,在您的文档示例(MWE:最小工作示例)中,仅加载和
arrows
库就足够了。calc
positioning