节点与其标签之间的距离似乎取决于标签的插入方式:
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\draw [help lines] (0,0) grid (4,4);
\node[above] at (1,1) {A};
\node[label=above:B] at (1,1) {};
\node[left] at (3,2) {C};
\node[label=left:D] at (3,2) {};
\end{tikzpicture}
\end{document}
如果我指定该label distance
选项,似乎只有 B 和 D 受到影响。
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[label distance=3mm]
\draw [help lines] (0,0) grid (4,4);
\node[above] at (1,1) {A};
\node[label=above:B] at (1,1) {};
\node[left] at (3,2) {C};
\node[label=left:D] at (3,2) {};
\end{tikzpicture}
\end{document}
例如,我知道\node[left]
隐式地在指定坐标的左侧创建一个新节点。如何控制创建此节点的距离,以便无论使用哪种语法,距离都是相同的?
答案1
区别在于 a\node
不是零大小的对象。它有一个inner sep
,默认情况下为 0.333em,因此空的默认节点的宽度/高度为 0.666em。如果您添加draw
到节点选项中,这一点就变得很明显了。
另一方面,如果您使用 a\coordinate[label=..
而不是 a ,则会得到相同的结果。 A是一种特殊类型的,用于为坐标命名以供以后重复使用,其大小为零,所有锚点都指向该锚点。\node
coordinate
node
center
下图中的方块是添加了标签的节点。您可以看到差异来自何处。所做above
的只是设置anchor=south
。但对于节点,south
锚点位于指定的坐标处,对于(标签节点的)label
锚点south
位于north
父节点的锚点处,该父节点以同一坐标为中心。
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\draw [help lines] (0,0) grid (4,4);
\node[draw,label=above:A] (a) at (1,2) {};
\node[above] at (a) {A};
\node[draw,label=left:C] (c) at (2,2) {};
\node[left] at (c) {C};
\coordinate[label=above:A] (a) at (1,1);
\node[above] at (a) {A};
\coordinate[label=left:C] (c) at (2,1);
\node[left] at (c) {C};
\end{tikzpicture}
\end{document}
看起来您不能全局设置right
/ above
/等的偏移量,因此如果您已经设置label distance=3mm
并且想要普通节点的相同偏移量,则需要例如above=3mm
。
或者您可以加载positioning
库并设置above=of <named coordinate>
,然后您可以使用设置默认距离node distance
,就像您对所做的那样label distance
。例如:
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{positioning}
\begin{document}
\begin{tikzpicture}[
label distance=3mm,
node distance=3mm
]
\draw [help lines] (0,0) grid (4,4);
% all three As end up in the same place
\coordinate[label=above:A] (a) at (1,2);
\node[above=of a] {A}; % positioning library
\node[above=3mm] at (a) {A}; % standard above
% same thing here, all Cs are in the same place
\coordinate[label=left:C] (c) at (2,2);
\node[left=of c] {C};
\node[left=3mm] at (c) {C};
\end{tikzpicture}
\end{document}