\documentclass[tikz, border=0.2cm]{standalone}
\usepackage{listofitems}
\def \angleArray {0,30,60,90,120,150,180} % degrees
\def \colorArray {blue, orange, maroon, purple, violet, navy, cyan}
\foreach \angle [count=\j] in \angleArray {
\draw[->, thick, rotate=\angle, \colorArray[\j]] (0,0) to (7, 0) node [above right, \colorArray[\j], rotate=\angle] {$\angle^\circ$};
}
\end{tikzpicture}
\end{document}
我关注了邮政,但出现错误:包 pgfkeys 错误:不知道密钥 /tikz/blue、orange、....?
答案1
这可以实现您的目标。要忽略项目列表中的空格,您需要 的星号版本\readlist*
。maroon
并且navy
不是xcolor
包中的有效颜色名称。我想您的意思是Marnoon
来自dvipsnames
和Navy
来自svgnames
。因此,您需要使用独立文档类选项加载这两个选项。为了避免 tikz 选项中的方括号冲突,您可以将 放在{}
周围\colorarray[\j]
。
\documentclass[dvipsnames,svgnames,tikz,border=0.2cm]{standalone}
\usepackage{listofitems}
\def \angleArray {0, 30, 60, 90, 120, 150, 180} % degrees
\readlist* \colorarray {blue, orange, Maroon, purple, violet, Navy, cyan}
\begin{document}
\begin{tikzpicture}
\foreach \angle [count=\j from 1] in \angleArray {%
\draw[->, thick, rotate=\angle,{\colorarray[\j]}] (0,0) to (7, 0) node [above right,{\colorarray[\j]},rotate=\angle] {$\angle^\circ$};}
\end{tikzpicture}
\end{document}
答案2
如果存在问题,请发布可编译代码或产生错误的代码(该错误的文本包含在您的问题中)。
您需要\begin{document}
、\begin{tikzpicture}
和 来定义未定义的颜色。我只是替换了标准颜色。
您还需要\readlist
创建数组。
由于语法依赖于方括号,pgf 的解析器存在问题,因此在使用它之前请从数组中检索该项目。
最后,您需要从颜色名称中删除空格,或者再次使用这些名称定义颜色。我删除了空格。
\documentclass[tikz, border=0.2cm]{standalone}
\usepackage{listofitems}
\begin{document}
\begin{tikzpicture}
\def \angleArray {0,30,60,90,120,150,180} % degrees
\readlist \colorArray {blue,orange,red,purple,violet,brown,cyan}
\foreach \angle [count=\j] in \angleArray {
\edef\tempa{\colorArray[\j]}
\draw[->, thick, rotate=\angle, \tempa] (0,0) to (7, 0) node [above right, rotate=\angle, \tempa] {$\angle^\circ$};
}
\end{tikzpicture}
\end{document}
就我个人而言,我会使用 LaTeX 3 来处理数组。请注意,这listofitems
是一个通用的 TeX 包,它使用_
而不是 作为字母评级器@
,就像 LaTeX 3 一样,但(显然)使用完全不同且非标准的语法。
[没有视觉效果是 Okular 的问题,而不是 TeX 错误。我犯过很多错误,但这不是其中之一。]
答案3
listofitems
我发现和的尝试\foreach
相当笨拙。
定义一个用于管理项目列表并从中检索项目的小型基础设施并不困难。
这里我们只想执行与角度数量一样多的步骤,因此“number foreach”循环更简单:当前索引可以称为#1
。
\documentclass{article}
\usepackage[dvipsnames,svgnames]{xcolor}
\usepackage{tikz}
\ExplSyntaxOn
\NewDocumentCommand{\definelist}{mm}
{
\clist_clear_new:c { l_cheonlang_list_#1_clist }
\clist_set:cn { l_cheonlang_list_#1_clist } { #2 }
}
\NewExpandableDocumentCommand{\listcount}{m}
{
\clist_count:c { l_cheonlang_list_#1_clist }
}
\NewExpandableDocumentCommand{\listitem}{mm}
{
\clist_item:cn { l_cheonlang_list_#1_clist } { #2 }
}
\NewDocumentCommand{\nforeach}{O{1}mm}
{
\int_step_inline:nnn { #1 } { #2 } { #3 }
}
\ExplSyntaxOff
\begin{document}
\begin{tikzpicture}[
makeray/.style={
rotate=\listitem{angles}{#1},
color=\listitem{colors}{#1},
},
]
\definelist{angles}{0, 30, 60, 90, 120, 150, 180}
\definelist{colors}{blue, orange, Maroon, purple, violet, Navy, cyan}
\nforeach{\listcount{angles}}{
\draw[->,thick,makeray=#1] (0,0) to (7, 0) node [above right,makeray=#1]
{$\listitem{angles}{#1}^\circ$};
}
\end{tikzpicture}
\end{document}
请注意,定义样式会使代码更加紧凑。
答案4
万一您没有考虑到允许\foreach
您在每次迭代中组装多个属性的排列,我认为以这种方式可视化对应关系比将它们分开要好,但也许您希望它是这样,以便您可以执行其他操作,但如果您要在 for 环境中使用它们,您可以使用它们或不使用它们,这取决于您是否将它们放在绘图说明中。
结果:
梅威瑟:
\documentclass[tikz,border=3.14]{standalone}
\usepackage[dvipsnames]{xcolor}
\begin{document}
\begin{tikzpicture}
\def\MyArray{%Angle/Color
0/orange,
15/yellow,
30/lime,
45/green,
60/SeaGreen,
75/Cyan,
90/NavyBlue,
105/blue,
120/violet,
135/magenta,
150/RubineRed,
165/red,
180/BrickRed%
}
\foreach \angle/\clr in \MyArray {
\draw[->, thick,draw=\clr] (0,0) -- (\angle:7) node [anchor=180+\angle, text=\clr] {$\angle^\circ$};
}
\end{tikzpicture}
\end{document}