为什么“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}
但你可以规避它。
- 在标签位置创建坐标。(从而防止错误计算任何锚点。)
- 将您的标签放置在这些坐标处。
代码:
\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}