TikZ:从数组中获取颜色并用它来绘图

TikZ:从数组中获取颜色并用它来绘图

使用该arrayjob包,我可以从数组中提取字符串,例如,获取蒂克兹打印该文本:

\documentclass{standalone}
\usepackage{tikz}
\usepackage{arrayjob}
\newarray\colours
\readarray{colours}{red&orange&yellow&green&blue&purple}

\begin{document}
    \begin{tikzpicture}
        \foreach \i in {1,2,5} {
            \draw (0,\i) node{\colours(\i)};
        }
    \end{tikzpicture}
\end{document}

在此处输入图片描述

但是,我想以相同的方式为线条着色,颜色各不相同。我天真地尝试了以下代码,但不起作用:

\documentclass{standalone}
\usepackage{tikz}
\usepackage{arrayjob}
\newarray\colours
\readarray{colours}{red&orange&yellow&green&blue&purple}

\begin{document}
    \begin{tikzpicture}
        \foreach \i in {1,2,5} {
            \draw[\colours(\i)] (0,\i)--++(1,0);
        }
    \end{tikzpicture}
\end{document}

这是一个玩具示例,用于说明我想要什么。在这个小示例中,有明显的方法可以做到这一点,但不是我的应用程序。我想通过索引从数组中提取颜色,并使用该颜色为线条着色。

编辑: 感谢 SebGlav,我找到了一些方法。我将在下面留下答案。现在答案中有三个好的解决方案,谢谢大家!

答案1

按照建议,使用 Ti 的数组功能Z你可以获得:

\documentclass{standalone}
\usepackage{tikz}
%\usepackage{arrayjob}
%\newarray\colours
%\readarray{colours}{red&orange&yellow&green&blue&purple}
\def\mycolours{{"red","orange","yellow","green","blue","purple"}}

\begin{document}
    \begin{tikzpicture}
        \foreach \i [evaluate=\i as \usecolor using {\mycolours[\i]}]in {1,2,5} {
            \draw[color=\usecolor] (0,\i)--++(1,0);
        }
    \end{tikzpicture}
\end{document}

在此处输入图片描述

答案2

pgfkeys 可以是你的数组

\documentclass[tikz]{standalone}
\pgfkeys{
    /benis/.cd,
    1/.initial=red,
    2/.initial=orange,
    3/.initial=yellow,
    4/.initial=green,
    5/.initial=blue,
    6/.initial=purple,
}
\begin{document}
    \begin{tikzpicture}
        \foreach \i in {1,2,5} {
            \pgfkeysgetvalue{/benis/\i}\thiscolor
            \draw (\i,\i/2)node[circle,draw=\thiscolor]{\thiscolor};
        }
    \end{tikzpicture}
\end{document}

答案3

感谢 SebGlav,我终于可以开始工作了。我必须输入我想要的颜色的 RGB 代码,但没问题。以下代码有效:

\documentclass{standalone}
\usepackage{tikz}
\usepackage{xcolor}

\begin{document}
    \newcommand{\colours}{{"FF0000","FFA500","FFFF00","008000","0000FF","800080"}}
    \begin{tikzpicture}
        \foreach \i in {1,2,5} {
            \pgfmathsetmacro{\currentcolour}{\colours[\i]}
            \definecolor{currentcolour}{HTML}{\currentcolour}
            \draw[currentcolour] (0,\i)--++(1,0);
        }
    \end{tikzpicture}
\end{document}

答案4

TeX(因此,TikZ)的数组操作相当不方便。数字、文本(包括颜色)、点(作为 2 个坐标对)数组的简单使用如下。

在此处输入图片描述

\documentclass[tikz,border=5mm]{standalone}

\begin{document}

% array of numbers a[i], i=0,1,2,3
\def\a{{6,8,11,12}}

% array of texts b[i], i=0,1,2,3
\def\b{{"blue","red","orange","teal"}}

% array of points (coordinates) c[i], i=0,1,2,3
\def\c{{"(1,2)","(1.5,1.5)","(3,2.5)","(5,3)"}}

\begin{tikzpicture}
\draw (0,.5) rectangle (6.5,3.5);
\foreach \i in {0,...,3}{
\pgfmathsetmacro{\ii}{int(\i+1)}
\pgfmathsetmacro{\tmpa}{\a[\i]}
\pgfmathsetmacro{\tmpb}{\b[\i]}
\pgfmathsetmacro{\tmpc}{\c[\i]}
\path (0,-\i) node[right,\tmpb,align=left]
{The \ii-th element is $\tmpa{}$ with \tmpb{} color\\
associated with the point $\tmpc$};
\fill[\tmpb] \tmpc node[above]{\tmpa} circle(2pt);
}
\end{tikzpicture}
\end{document}

相关内容