我正在尝试显示一个希尔伯特矩阵,并通过从数组中选择不同的颜色来对反对角线进行着色,以便单元格 (i,j) 获得颜色\Colors[i+j-1 mod 3]
(以便相邻的具有相同值的单元格获得相同的颜色)。我得到的希尔伯特矩阵上的着色不起作用(目前)。
我尝试跟随(使用 arrayjob 在 foreach 中更改颜色) 但我不知道如何计算颜色,以便稍后在绘制命令中使用它。
我尝试使用以下方法来定义它execute at begin cell
:
\documentclass[tikz,border=2mm]{standalone}
\usepackage{tikz}\usetikzlibrary{matrix}
\begin{document}
\newcommand{\Colors}{{%
"FF0000","00FF00","0000FF",%
%"FF0000","00FF00","0000FF",
}}
%hilbert matrix
\begin{tikzpicture}[
mygridmatrix/.style={matrix of nodes,
nodes={rectangle,
draw,
execute at begin cell=\pgfmathsetmacro{\thecurrentcolor}{\Colors[\the\pgfmatrixcurrentcolumn]}\definecolor{currentcolor}{HTML}{\thecurrentcolor},
fill=currentcolor,
minimum width=8mm,
minimum height=8mm,
node contents={$\frac{1}{\the\pgfmatrixcurrentrow+\the\pgfmatrixcurrentcolumn-1}$},
},
nodes in empty cells,
},
]
\matrix (m) [mygridmatrix]
{
&&&\\
&&&\\
&&&\\
&&&\\
};
\end{tikzpicture}
\end{document}
但这只会产生! Package xcolor Error: Undefined color 'currentcolor'.
:(currentcolor
用任何真实的颜色替换red
都可以使其工作,但所有反对角线都会得到颜色(而不是根据\Colors
-array 的颜色)。
任何帮助均感激不尽。
答案1
我不知道颜色代码应该是什么,但您可以相应地修改以下内容。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix}
\tikzset{
mycolorstyle/.code={%
\pgfmathparse{\Colors[\the\pgfmatrixcurrentcolumn-1]}%
\definecolor{temp}{HTML}{\pgfmathresult}%
\tikzset{fill=temp}%
}
}
\begin{document}
\newcommand{\Colors}{{"FF0000","00FF00","0000FF","FF0000","00FF00","0000FF"}}
%hilbert matrix
\begin{tikzpicture}[
mygridmatrix/.style={matrix of nodes,
nodes={rectangle,
draw,
mycolorstyle,
minimum width=8mm,
minimum height=8mm,
node contents={$\frac{1}{\pgfmathparse{int(\the\pgfmatrixcurrentrow+\the\pgfmatrixcurrentcolumn-1)}\pgfmathresult}$},
},
nodes in empty cells,
},
]
\matrix (m) [mygridmatrix]
{
&&&\\
&&&\\
&&&\\
&&&\\
};
\end{tikzpicture}
\end{document}
您的版本不起作用,因为at begin cell
它是在节点的 hbox 内部调用的,而不是在节点形状本身的创建中调用的,因此更改填充规范为时已晚。