为什么 TikZ 中的相对坐标不适用于此示例?

为什么 TikZ 中的相对坐标不适用于此示例?

我正在处理一个图形,由于某种原因,相对坐标停止工作(以前是这样的)。我删除了所有代码,直到最低限度,但它们仍然不起作用。我不知道我做错了什么,所以我只在这里包含它:

\documentclass[english]{article}

\usepackage[T1]{fontenc}
\usepackage{babel}
\usepackage{tikz}
\usetikzlibrary{shapes,arrows}
\usetikzlibrary{fit}
\usetikzlibrary{backgrounds}
\usetikzlibrary{positioning}
\usetikzlibrary{calc}

\begin{document}
\begin{tikzpicture}
  % Nodes
  \node at (0, 0) (input) {i};
  \node at ++(2, 0) (p1) {a};
  \node at ++(2, 0) (p2) {b};
\end{tikzpicture}
\end{document}

在此示例中,Ab定位在上面而不是相邻。为什么?

答案1

因为它们相对于同一个坐标。如果你用它替换环境 (0,0)中的最后一行,它就会移动。或者如果你想定义相对于其他节点的节点位置,你可以使用。tikzpicture\node at ++(4, 0) (p2) {b};

\begin{tikzpicture}
  \node at (0, 0) (input) {i};
  \node at ($(input)+(2,0)$) (p1) {a};
  \node at ($(input)+(4,0)$) (p2) {b};
\end{tikzpicture}

\usetikzlibrary{calc}你的序言中。

正如杰克所说,++(...)语法有效之内TikZ 命令,并且相对于最后保存的位置。在行的开头,坐标设置为,(0,0)因此每个相对坐标都相对于(0,0)。要使每个坐标相对于最后一个,请使用如上所述的显式坐标/节点,或将您的语句合并为一个:

\begin{tikzpicture}
\node {i} node at ++(2,0) (p1) {a} node at ++(4,0) (p2) {b};
\end{tikzpicture}

请注意,第一个节点不需要明确的坐标(via at),因为它位于(0,0)路径的起始位置。

答案2

...或者(继续@percusse 和@Jake 的回答),因为你positioning无论如何都要加载 TikZ 库,所以你可以写:

\begin{tikzpicture}[node distance=2cm, on grid]
% Nodes
\node at (0, 0) (input) {i};
\node (p1) [right=of input] {a};
\node (p2) [right=of p1] {b};
\end{tikzpicture}

这使得代码更容易理解,并且稍后只需修改一个数字即可更改节点之间的距离。如果放置在环境中,您甚至可以拥有间距不同的节点“组” scope

根据您的实际应用,您可能需要查看库petri TikZTikZ 2.10 手册- 第 394 至 398 页)。

答案3

++运算符仅在一个\draw\fill或命令内有效。要使示例按预期工作,请\path使用\node\path ++(2, 0) node (p1) {a} ++(2, 0) node (p2) {b};

相关内容