我确信这非常简单:我想画一个圆,并以特定的等距角度显示一些单词。因此,我可以使用 将圆绘制为弯曲箭头 \foreach
。如何使用相同的方法\foreach
从单词列表中获取我想要显示的单词?以下是一些代码(不是我编写的,但在 texexample.net 中找到)
\def \n {12}
\def \radius {4cm}
\def \margin {9}
\foreach \s in {1,...,\n}
{
\node at ({360/\n * (\s - 1)}:\radius) {\s};
\draw[->, >=latex] ({360/\n * (\s - 1)+\margin}:\radius)
arc ({360/\n * (\s - 1)+\margin}:{360/\n * (\s)-\margin}:\radius);
}
\end{tikzpicture}
\end{document}
现在,{\s}
我希望它显示文字,而不是在节点上显示数字。
答案1
我不太清楚您的工作流程需要什么,但有多种方法可以制作这样的图形。按照您的示例,一种方法是创建一个额外的文本数组并从中选取元素。
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\def\textarray{{"this","is","a","array","but","it","is","not","the","array","however","also"}}
\def \n {12}
\def \radius {4cm}
\def \margin {9}
\foreach \s in {1,...,\n}
{
\node at ({360/\n * (\s - 1)}:\radius) {\pgfmathparse{\textarray[\s-1]}\pgfmathresult};
\draw[->, >=latex] ({360/\n * (\s - 1)+\margin}:\radius)
arc ({360/\n * (\s - 1)+\margin}:{360/\n * (\s)-\margin}:\radius);
}
\end{tikzpicture}
\end{document}
您可以使用额外选项将旋转等属性添加到节点,就像您计算位置一样。此外,您可能还想阅读文本装饰在手册中。
答案2
您还可以通过以下方式定义一个包含增量数字和要放置在该位置的单词的列表:
\newcommand{\WordList}{1/one, 2/two, 3/three, 4/four, 5/five, 6/six, 7/seven, 8/eight, 9/nine}
得到:
笔记:
- 在这种特定情况下,percusse 的答案显然更好,但这在其他类似情况下可能会有用。
代码:
\documentclass{standalone}
\usepackage{tikz}
\newcommand{\WordList}{1/one, 2/two, 3/three, 4/four, 5/five, 6/six, 7/seven, 8/eight, 9/nine}
\def\n{9}
\def \radius {4cm}
\def \margin {9}
\begin{document}
\begin{tikzpicture}
\foreach \s/\word in \WordList {
\node at ({360/\n * (\s - 1)}:\radius) {\word};
\draw[->, >=latex] ({360/\n * (\s - 1)+\margin}:\radius)
arc ({360/\n * (\s - 1)+\margin}:{360/\n * (\s)-\margin}:\radius);
}
\end{tikzpicture}
\end{document}
\end{document}
答案3
这只是对彼得·格里尔的解决方案:您可以使用\foreach \x [count=\s] in {text}
,这样迭代次数就会保存在,\s
并且您可以将文本指定为逗号分隔的列表:
\documentclass[parskip]{scrartcl}
\usepackage[margin=15mm]{geometry}
\usepackage{tikz}
\begin{document}
\def \n {10}
\def \radius {4cm}
\def \margin {9}
\begin{tikzpicture}
\foreach \x [count=\s] in {one,two,three,four,five,six,seven,eight,nine,ten}
{
\node at ({360/\n * (\s - 1)}:\radius) {\x};
\draw[->, >=latex] ({360/\n * (\s - 1)+\margin}:\radius)
arc ({360/\n * (\s - 1)+\margin}:{360/\n * (\s)-\margin}:\radius);
}
\end{tikzpicture}
\end{document}