{
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\draw (0,0) circle(2);
\foreach \i in {0, 45, 90, 135, 180, 225, 270, 315} {
\coordinate (A\i) at (\i:2); % 定义点的位置
\draw[fill] (A\i) circle (2pt); % 画点
}
\foreach \i in {0, 45, 90, 135, 180, 225, 270, 315} {
\pgfmathsetmacro{\next}{\i+45}
\ifnum\next=360 \pgfmathsetmacro{\next}{0} \fi
\draw[->] (A\i) -- (A\next);
}
\end{tikzpicture}
\end{document}
}
这是我的Latex代码
上面代码报错的原因是缺少int(\i+45)
\documentclass[tikz,border=1cm]{standalone}
\begin{document}
\begin{tikzpicture}
\draw (0,0) circle(2);
\foreach \i in {0,45,...,315}{
\coordinate (A\i) at (\i:2); % 定义点的位置
\draw[fill] (A\i) circle (2pt); % 画点
}
\foreach \i in {0,45,...,315} {
\pgfmathsetmacro{\next}{int(\i+45)}
\ifnum \next=360\relax
\pgfmathsetmacro{\next}{0}
\fi
\draw[->] (A\i) -- (A\next);
}
\end{tikzpicture}
\end{document}
我很想知道这种图的来源,包括它的所在学科,英文名称以及大致含义。
同时你这个图可拓展性较差,下面的实现也很不优雅,我没有兴趣封装成接口。
另外为了论坛问题的neat
,请你删除这一无效问题,想要修改问题可以使用补充问题功能,而不是重新开一个新的问题。
下面是en画的实现过程...
\documentclass[tikz,border=8pt]{standalone}
\usetikzlibrary{arrows.meta,decorations.markings}
\begin{document}
\begin{tikzpicture}[cap = round]
% \draw (0,0) circle(2);
\foreach \i in {30,60,...,150,240,270,300}{
\node[circle,draw,inner sep=1pt,outer sep=0pt,minimum size=2pt] (A\i) at (\i:2) {}; % 画点
}
\foreach \i in {30,60,...,120,240,270} {
\pgfmathsetmacro{\next}{int(\i+30)}
\path[->] (A\i) edge[bend right=8] (A\next);
}
\foreach \angle/\txt in {30/2,60/1,90/0,120/n-1,150/n-2}{
\node[label={[anchor=\angle+180,outer sep=1pt,inner sep=1.5pt,]\scriptsize$\txt$}] at (\angle:2) {};
}
\foreach \i in {180,210,330,0}{
\node[circle,inner sep=0pt,outer sep=0pt,minimum size=0pt] (A\i) at (\i:2) {}; % 画点
}
\foreach \i in {150,210,300,0} {
\pgfmathsetmacro{\next}{int(\i+30)}
\ifnum \next=360 \pgfmathsetmacro{\next}{0} \fi
\path[->] (A\i) edge[bend right=10] (A\next);
}
\path[dotted] (A180) edge[bend right=10] (A210)
(A330) edge[bend right=10] (A0);
\end{tikzpicture}
\end{document}
其实要想优雅一点,可以用rotate
把整个路径划分为:
不过个人觉得意义不是很大。