如下所示,当颜色为白色时,代码无法重新定义颜色(例如rgb(1,1,1))。
\documentclass{standalone}
\usepackage{tikz}
\usepackage{xcolor}
\begin{document}
\foreach \code/\col in {%
{1,1,1}/white,
{1,1,0}/yellow,
{1,0,1}/pink
}{
\ifx {\code} {1,1,1}
\definecolor{tempcolor}{rgb}{1,0,0}
\else
\definecolor{tempcolor}{rgb}{\code}
\fi
\textcolor{tempcolor}{\col};
}
\end{document}
为什么我的病情恶化了?
答案1
修订:您最初的尝试几乎完全成功。
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\edef\speciallist{1,1,1}
\foreach \code/\col in {%
{1,1,1}/white,
{1,1,0}/yellow,
{1,0,1}/pink
}{
\ifx\code\speciallist
\definecolor{tempcolor}{rgb}{1,0,0}
\else
\definecolor{tempcolor}{rgb}{\code}
\fi
\textcolor{tempcolor}{\col};
}
\end{document}
旧答案:钛钾Z 附带了比较这些列表的所有工具,您无需加载其他软件包。(顺便说一句,您也不必加载xcolor
。)更详细地说,Ti钾Z 允许您解析列表(或数组),这允许您定义一个数量,如果所有条目都与您的目标列表一致,则为 0,否则为 1。更详细地说,我计算一个数量
\pgfmathtruncatemacro{\myx}{sign(abs({\code}[0]-{\speciallist}[0])+abs({\code}[1]-{\speciallist}[1])+abs({\code}[2]-{\speciallist}[2]))}
在哪里
\pgfmathtruncatemacro
确保得到一个整数,使得\ifnum
(仅适用于整数)有效。- 论点是
|first entry of \code - first entry of \speciallist|+|second entry of \code - second entry of \speciallist|+|third entry of \code - third entry of \speciallist|
。
显然,只有当列表中的所有条目都一致时,这个数量才为 0。此处,{\code}[0]
计算为列表的第一个条目\code
,依此类推。
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\edef\speciallist{1,1,1}
\foreach \code/\col in {%
{1,1,1}/white,
{1,1,0}/yellow,
{1,0,1}/pink
}{
\pgfmathtruncatemacro{\myx}{sign(abs({\code}[0]-{\speciallist}[0])+abs({\code}[1]-{\speciallist}[1])+abs({\code}[2]-{\speciallist}[2]))}
\ifnum\myx=0
\definecolor{tempcolor}{rgb}{1,0,0}
\else
\definecolor{tempcolor}{rgb}{\code}
\fi
\textcolor{tempcolor}{\col};
}
\end{document}
答案2
从技术上讲,您希望看到是否\code
等于1,1,1
文本字符串。您可以使用它。如果小于/等于/大于(按字典顺序),\pdfstrcmp{<strA>}{<strB>}
则返回 -1/0/1 :<strA>
<strB>
\documentclass{article}
\usepackage{tikz}
\begin{document}
\foreach \code/\col in {%
{1,1,1}/white,%
{1,1,0}/yellow,%
{1,0,1}/pink%
}{
\ifnum\pdfstrcmp{\code}{1,1,1}=0
\definecolor{tempcolor}{rgb}{1,0,0}%
\else
\definecolor{tempcolor}{rgb}{\code}%
\fi
\textcolor{tempcolor}{\col};
}
\end{document}