![`\node` 和 `\coordinate` 的实现在显示上存在差异](https://linux22.com/image/310546/%60%5Cnode%60%20%E5%92%8C%20%60%5Ccoordinate%60%20%E7%9A%84%E5%AE%9E%E7%8E%B0%E5%9C%A8%E6%98%BE%E7%A4%BA%E4%B8%8A%E5%AD%98%E5%9C%A8%E5%B7%AE%E5%BC%82.png)
这里有四种TikZ
环境来绘制两条平行线段。在所有环境中,第一条线段的一个端点都用 或 指定\coordinate(A)
,\node(A){$A$};
第二条线段的一个端点都用\coordinate(B)
或指定\node(B){$B$};
。
首先指定点 A;没有给出它的坐标。TikZ
默认情况下将其放置在原点吗?它似乎被放置在原点,因为在第二个图中,我有命令\node at (0,0) {$O$};
,并且“O”被排版在 A 的坐标处。
除了“A”的位置不同之外,第二个和第三个显示完全相同。在第二个显示中,我使用\coordinate(A);
和\node at (0,0) {$A$};
来定位“A”,而在第三个显示中,我使用\node[inner sep=0pt,outer sep=0pt] (A){$A$};
来定位“A”。在第二个显示中,“A”似乎位于 (0,0) 的中心,而在第三个显示中,“A”似乎排版在 (0,0) 的左侧。为什么会有差异?
第三和第四个显示屏的编码中唯一的区别是,我inner sep=0pt
在节点命令中有一个选项用于在第三显示屏中排版“A”,inner sep=1.5pt
在节点命令中有一个选项用于在第四个显示屏中排版“A”。与第三显示屏相比,为什么这会移动第四显示屏中的“所有内容”?
\documentclass{amsart}
\usepackage{tikz}\usetikzlibrary{calc,positioning}
\begin{document}
\begin{tikzpicture}
\coordinate(A);
\coordinate[right=of A](B);
\draw[yellow, line width=2pt] (A) -- ++(1,1);
\draw[red] (B) -- ++(1,1);
\end{tikzpicture}
\vskip1.25mm
\begin{tikzpicture}
\coordinate(A);
\coordinate[right=of A](B);
\draw[yellow, line width=2pt] (A) -- ++(1,1);
\draw[red] (B) -- ++(1,1);
\node at (0,0) {$A$};
\end{tikzpicture}
\vskip1.25mm
\begin{tikzpicture}
\node[inner sep=0pt,outer sep=0pt] (A){$A$};
\coordinate[right=of A](B);
\draw[yellow, line width=2pt] (A) -- ++(1,1);
\draw[red] (B) -- ++(1,1);
\end{tikzpicture}
\vskip1.25mm
\begin{tikzpicture}
\node[inner sep=1.5pt,outer sep=0pt] (A) {$A$};
\coordinate[right=of A] (B);
\draw[yellow, line width=2pt] (A) -- ++(1,1);
\draw[red] (B) -- ++(1,1);
\end{tikzpicture}
\end{document}
答案1
以下内容有帮助吗?
\documentclass[tikz,border=5pt,mult]{standalone}
\usetikzlibrary{positioning}
\begin{document}
\begin{tikzpicture}[every node/.style={draw}]
\draw [help lines] (-1,-1) grid (2,2);
\coordinate(A);
\coordinate[right=of A](B);
\draw [blue] (A) -- ++(1,1);
\draw (B) -- ++(1,1);
\node at (0,0) {$A$};
\path [fill=blue] (0,0) circle (1.5pt);
\end{tikzpicture}
\begin{tikzpicture}[every node/.style=draw]
\draw [help lines] (-1,-1) grid (2,2);
\node[inner sep=0pt,outer sep=0pt] (A){$A$};
\coordinate[right=of A](B);
\draw [blue] (A) -- ++(1,1);
\draw (B) -- ++(1,1);
\path [fill=blue] (0,0) circle (1.5pt);
\end{tikzpicture}
\end{document}
在第一种情况下,蓝线是从坐标A
,并B
相对于此坐标定位。由于坐标是点,因此这相当于从 处绘制(0,0)
。
在第二种情况下,蓝线从节点 开始绘制A
,并B
相对于节点定位。TikZ 假设您要从节点边界上的最近点绘制或测量。即使A
有零inner sep
和outer sep
,它仍然具有正大小,因为它包含占用空间的字母A
。因此,在这种情况下,线是从 的稍上方和 的稍右侧绘制的(0,0)
,并B
相对于 的稍右侧的点定位(0,0)
。
您可以通过指定center
:
\begin{tikzpicture}[every node/.style=draw]
\draw [help lines] (-1,-1) grid (2,2);
\node[inner sep=0pt,outer sep=0pt] (A){$A$};
\coordinate[right=of A.center](B);
\draw [blue] (A.center) -- ++(1,1);
\draw (B) -- ++(1,1);
\path [fill=blue] (0,0) circle (1.5pt);
\end{tikzpicture}
或者,如果节点A
没有内容,并且为零sep
,它的行为将类似于坐标,因为它基本上不占用空间:
\begin{tikzpicture}[every node/.style=draw]
\draw [help lines] (-1,-1) grid (2,2);
\node[inner sep=0pt,outer sep=0pt] (A){};
\coordinate[right=of A](B);
\draw [blue] (A) -- ++(1,1);
\draw (B) -- ++(1,1);
\node at (A) {$A$};
\path [fill=blue] (0,0) circle (1.5pt);
\end{tikzpicture}
请注意,在每种情况下A
都以原点(0,0)
(以蓝点标记)为中心。