标签位置角度问题

标签位置角度问题

为什么“F”没有定位在节点周围?那么如何微调位置?

\documentclass[tikz]{standalone}

\begin{document}
\begin{tikzpicture}

\foreach \x in {0,5,...,360} {
\coordinate[label=\x:$F$] (F) at (0,0) ;}

\end{tikzpicture}
\end{document}

答案1

我认为这是个错误。文档指出,锚点以某种方式根据给定的角度(和其他方面)确定,但用户可以根据需要更改它们。唉,明确给出另一个锚点不会改变任何东西:

\documentclass[tikz]{standalone}

\begin{document}
\begin{tikzpicture}

\foreach \x in {0,-22.5,-45,-67.5,90,120,150,10,20} {
\draw[red](0,0)--(\x:1);
\node[draw,pin={[pin distance=10pt,circle,draw,inner sep=0pt,outer sep=0pt]\x:$F$},circle] (F) at (0,0) {x};}

\end{tikzpicture}
\end{document}

但你可以规避它。

  1. 在标签位置创建坐标。(从而防止错误计算任何锚点。)
  2. 将您的标签放置在这些坐标处。

代码:

\documentclass[tikz]{standalone}

\begin{document}
\begin{tikzpicture}

\foreach[count=\n] \x in {0,-22.5,-45,-67.5,90,120,150,10,20} {
\draw[red](0,0)--(\x:1);
\coordinate[label={[label distance=20pt,alias=l\n,coordinate]\x:}] (F) at (0,0);
\node[anchor=center] at (l\n){$F$};
}

\end{tikzpicture}
\end{document}

在此处输入图片描述

答案2

该手册(PGF 手册 3.00,第 17.10.2 节)确实概述了如何计算标签的位置和锚点,并且指出:

如果不想这样,你必须自己设置锚点

但是我无法让它工作,所以......

以下简单的技巧可能会提供解决方案。请注意,label anchor computed键必须位于label(或every label) 选项中,或者位于路径周围的范围内(并且绝对不是在路径选项中)。

\documentclass[tikz]{standalone}
\usetikzlibrary{quotes}

\makeatletter
\let\tikz@compute@direction@orig=\tikz@compute@direction
\newif\iftikz@label@anchor@computed
\def\tikz@compute@direction#1{%
  \iftikz@label@anchor@computed%
    \tikz@compute@direction@orig{#1}%
  \else%
    \let\tikz@do@auto@anchor=\relax
    \pgfmathsetcount{\c@pgf@counta}{#1+180}%
    \edef\tikz@anchor{\the\c@pgf@counta}%
  \fi%
}
\tikzset{%
  label anchor computed/.is if=tikz@label@anchor@computed,
  label anchor computed=true,
}

\begin{document}
\begin{tikzpicture}[label distance=2cm, every label/.style={shape=circle}]
\foreach \x in {0,10,...,350} {
\coordinate [label={[fill=red, fill opacity=.5]\x:}];
\coordinate [label={[label anchor computed=false, fill=blue, fill opacity=.5]\x:}];
\draw[black] (0,0)--++(\x:2cm);}
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案3

仅供记录。您需要定义节点的样式,因为默认情况下,它是正方形。使用定义的shape = circle,右上角的图片显示了一些精度问题,但可以通过增加角度的增量来改善(如下所示逐渐改善),从而防止锚点计算错误。这里的角度增量为(右上)5,10,15,20,25,30(右下)。

在此处输入图片描述

代码

\documentclass[border=1cm]{standalone}
\usepackage{tikz}
\tikzset{vertex/.style = {shape=circle,minimum size=2cm},
state/.style={draw=none,
  }}

\begin{document}
\begin{tikzpicture}[scale=3]

\foreach \x in {0,5,...,360} {
\coordinate[vertex,label=\x:$F$] (F) at (0,0) ;}

\foreach \x in {0,5,...,360} {
\coordinate[state,label=\x:$F$] (F) at (0,0) ;}  % if `state` style is removed, one gets the same result for squared F.

\foreach \x in {0,10,...,360} {
\coordinate[vertex,label=\x:$F$] (F) at (4,0);}

\foreach \x in {0,15,...,360} {
\coordinate[vertex,label=\x:$F$] (F) at (8,0);}

\foreach \x in {0,20,...,360} {
\coordinate[vertex,label=\x:$F$] (F) at (0,-4);}

\foreach \x in {0,25,...,360} {
\coordinate[vertex,label=\x:$F$] (F) at (4,-4);}

\foreach \x in {0,30,...,360} {
\coordinate[vertex,label=\x:$F$] (F) at (8,-4);}


\end{tikzpicture}
\end{document}

相关内容