![TikZ 中的箭头坐标](https://linux22.com/image/248792/TikZ%20%E4%B8%AD%E7%9A%84%E7%AE%AD%E5%A4%B4%E5%9D%90%E6%A0%87.png)
我想编写一个使用 TikZ 创建如下照片的宏:
(来源:微软) 。
但最终我想出了这样的办法:
如您所见,问题在于箭头指向了终点圆的错误一侧(它们总是指向正确的一侧)。这是我的示例的源代码:
\documentclass[11pt]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\usetikzlibrary{calc}
\makeatletter
\@namedef{color@1}{red!40}
\@namedef{color@2}{green!40}
\@namedef{color@3}{blue!40}
\@namedef{color@4}{cyan!40}
\@namedef{color@5}{magenta!40}
\@namedef{color@6}{yellow!40}
\newcommand{\graphitemize}[1]{%
\begin{tikzpicture}[every node/.style={align=center}]
\foreach \gritem [count=\xi] in {#1} {\global\let\maxgritem\xi}
\foreach \gritem [count=\xi] in {#1}
{%
\pgfmathtruncatemacro{\angle}{360/\maxgritem*\xi}
\edef\col{\@nameuse{color@\xi}}
\node[circle,
ultra thick,
draw=white,
fill opacity=.5,
fill=\col,
minimum size=3cm] (satellite\xi) at (\angle:4cm) {\gritem };
}%
\foreach \gritem [count=\xi] in {#1}
{%
\pgfmathsetmacro{\xj}{mod(\xi, \maxgritem) + 1}
\edef\col{\@nameuse{color@\xi}}
\draw[<-,line width=.5cm,opacity=.5,\col] (satellite\xj) to[bend left] (satellite\xi);
}%
\end{tikzpicture}
}%
\begin{document}
\graphitemize{Phase 1,Phase 2, Phase 3, Phase 4}
\end{document}
请注意,我改编了 Altermundus 回答的代码这个问题。如何固定箭头的终止位置?
答案1
问题来自数学运算mod(\xi, \maxgritem) + 1
。TikZ 给出的结果带有小数点,例如1.0, 2.0
等。后来,由于您在节点命名中使用它,它变成了satellite1.0,satellite2.0
。巧合的是,这意味着箭头应该以零角度到达节点边界,因此右侧跟踪很奇怪。
您可以通过将操作线替换为
\pgfmathtruncatemacro{\xj}{mod(\xi, \maxgritem) + 1)}