我正在处理一个图形,由于某种原因,相对坐标停止工作(以前是这样的)。我删除了所有代码,直到最低限度,但它们仍然不起作用。我不知道我做错了什么,所以我只在这里包含它:
\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}
在此示例中,A和b定位在上面而不是相邻。为什么?
答案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
TikZ
(TikZ 2.10 手册- 第 394 至 398 页)。
答案3
该++
运算符仅在一个\draw
、\fill
或命令内有效。要使示例按预期工作,请\path
使用\node
\path ++(2, 0) node (p1) {a} ++(2, 0) node (p2) {b};