我正在尝试将颜色数组(任意长度)传递到宏命令中,然后在填充 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 条件没有按预期发挥作用?