Tikz:节点标签距离取决于标签的添加方式?

Tikz:节点标签距离取决于标签的添加方式?

节点与其标签之间的距离似乎取决于标签的插入方式:

\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是一种特殊类型的,用于为坐标命名以供以后重复使用,其大小为零,所有锚点都指向该锚点。\nodecoordinatenodecenter

下图中的方块是添加了标签的节点。您可以看到差异来自何处。所做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}

相关内容