如何创建颜色数组?

如何创建颜色数组?

我正在尝试将颜色数组(任意长度)传递到宏命令中,然后在填充 tikz 形状的背景时使用。我成功了,但是,我遇到了none“颜色”问题(或缺少颜色)。为了处理这种特殊边缘情况下的字符串到颜色的转换,我使用 if 条件创建了以下工作示例:

\documentclass{article}
\usepackage{tikz}
\usepackage{graphicx,pgf}
\usepackage{listofitems}
\usepackage{ifthen}

\usetikzlibrary{arrows,calc}

\newcommand{\Test}[2]
{%
    \readlist\mylist{#1}
    \readlist\colors{#2}
    
    \noindent\makebox[\linewidth]{\rule{\paperwidth}{0.4pt}}

    \foreach \Next [count=\i] in {#1}
    {%
        % Conditionally create the color variable with the correct color information.
        % Latex compiler will complain if you just try and use `fill=\colors[\i]` straight up.
        \ifthenelse{\equal{\colors[\i]}{none}}
        {%
            If \colors[\i] == none => TRUE!
            \def\mycol{none}
        }
        {%
            If \colors[\i] == none => FALSE!
            \def\mycol{\colors[\i]!100}
        }
    
        % Print the array elements to the document output.
        \i. \mylist[\i], \colors[\i]\\
        
        \begin{tikzpicture}
            \filldraw  [fill=\mycol,
                        draw=orange] (0.1in,0.1in) rectangle ++(0.5in,0.5in);
        \end{tikzpicture}
        
        \noindent\makebox[\linewidth]{\rule{\paperwidth}{0.4pt}}
    }
}

\begin{document}

\Test{hello, world, township}{none, green, blue}
%\Test{hello, world, township}{green, none, blue}

\end{document}

(本文编译于Overleaf.com使用 XeLaTeX 编译器。

这将产生正确的输出:

但是,如果我尝试none在颜色输入数组中的第一个点以外的任何其他点使用它,它就会停止工作,编译器也会对我发疯。例如,如果取消注释该行\Test{hello, world, township}{green, none, blue},则会发生以下情况:

编译器错误:

如输出所示,if-else 语句现在停止工作并产生不正确的结果。即使我正在比较字符串none和,当查看数组位置 2+ 时,none它也会将它们视为相等。false

有谁知道为什么我的颜色逻辑阵列在这种情况下不起作用?
为什么 if 条件没有按预期发挥作用?

相关内容