节点标签的定位

节点标签的定位
\documentclass{minimal}

\usepackage{tikz}


\begin{document}


\begin{tikzpicture}
    \node[circle,draw=black] (t) at (0,0) {};

    \foreach \i in {0,1,...,359}{
        \node[label={\i:$\circ$}] at (t) {};
    }
\end{tikzpicture}


\end{document}

这让我:

编译结果

我预计标签的位置会围绕节点呈圆形。但是,在节点的北、南、东、西以及某个方形路径上都有标签。有人能给我解释一下吗?

我还希望能够围绕节点设置一条圆形路径,以便定位标签。使用标签选项可以实现这一点吗?

在此处输入图片描述

这是我的具体问题:

\documentclass[border=5pt,tikz]{standalone}

\begin{document}

\begin{tikzpicture}[state/.style={inner sep=0mm,circle,draw=black,minimum width=2mm}]

    \node[state,label={2:Test}] (A) at (0,0) {\tiny A};
    \node[state] (B) at (5,-1) {\tiny B};
    \node[state] (C) at (4,4) {\tiny C};

    \foreach \from/\to in {A/B,B/C,C/A}{
        \path (\from) edge (\to);
    }

\end{tikzpicture}

\end{document}

使用标签角度会在从 2 切换到 3 时产生“跳跃”,以致于它不适合中间。

使用 2 进行编译: 编译 2

使用 3 进行编译: 在此处输入图片描述

当然,您可以手动定位这样的标签,使其适合中间(我知道这一点)。但如果您必须对一堆标签执行此操作,这会非常麻烦。我认为这应该以某种方式直接在标签中工作,以便更容易放置。

然后我尝试添加一个额外的标签节点:

\documentclass[border=5pt,tikz]{standalone}

\begin{document}

\begin{tikzpicture}[state/.style={inner sep=0mm,circle,draw=black,minimum width=2mm}]

    \node[state] (A) at (0,0) {\tiny A};
    \node[state] (B) at (5,-1) {\tiny B};
    \node[state] (C) at (4,4) {\tiny C};

    \node[anchor=west] at ([shift=(20:3mm)]A) {Test};

    \foreach \from/\to in {A/B,B/C,C/A}{
        \path (\from) edge (\to);
    }

\end{tikzpicture}


\end{document}

然后它就可以工作了: 额外标签节点

但是你必须根据角度修改此节点的锚点。例如,如果你坚持使用锚点并使用 180 度角,那么你无需将锚点改为东,即可获得以下结果: 在此处输入图片描述

因此,将标签“平滑”地定位在物体周围的圆圈上会非常好。

答案1

这部分是由于标签的自动锚定,部分是由于其形状。

第一个问题可以通过添加anchor=\i+180标签选项来解决,第二个问题可以通过添加来解决circle

下面是我添加的一些帮助行的示例:

在此处输入图片描述

左边的情况是默认情况(也必须添加circle到节点中\foreach)。中间的情况是anchor明确给出键的情况。您可以清楚地看到,矩形形状是标签不在圆圈上的原因。第三种情况是标签的形状也设置为circle。与红色圆圈的小偏差是大概(但如果我错了请纠正我)由于$ $用于的间距\circ

完整代码如下:

\documentclass[tikz,margin=2mm]{standalone}

\usepackage{tikz}


\begin{document}


\begin{tikzpicture}
    \node[circle,draw=black] (t1) at (0,0) {};

    \foreach \i in {0,30,...,359}{
        \node[label={[draw,draw opacity=0.25]\i:$\circ$}] at (t1) {};
    }

    \node[circle,draw=black] (t2) at (2,0) {};

    \foreach \i in {0,30,...,359}{
        \node[circle,label={[anchor=\i+180,draw,draw opacity=0.25]\i:$\circ$}] at (t2) {};
    }

    \node[circle,draw=black] (t3) at (4,0) {};

    \foreach \i in {0,30,...,359}{
        \node[circle,label={[anchor=\i+180,circle,draw,draw opacity=0.25]\i:$\circ$}] at (t3) {};
    }

    \draw[red] (t1) circle (0.475);
    \draw[red] (t2) circle (0.475);
    \draw[red] (t3) circle (0.475);
\end{tikzpicture}


\end{document}

相关内容