访问 tikz 矩阵单元格内容以编程方式设置单元格样式

访问 tikz 矩阵单元格内容以编程方式设置单元格样式

我正在尝试设置 tikz 矩阵的每个单元格的样式。但是,我找不到有关如何访问单元格内容以将其作为选项传递给样式的信息。

我想要做的是这样的:

\documentclass{standalone}

\usepackage{tikz}
\usetikzlibrary{matrix}

\begin{document}
\begin{tikzpicture}[]
\matrix[matrix of nodes]{
  |[fill=white!10!black]| 10 & |[fill=white!20!black]| 20 & |[fill=white!100!black]| 100 \\
};
\end{tikzpicture}
\end{document}

在此处输入图片描述

理想情况下,我想抓取内容并将其用作选项的条件fill

execute at begin cell我尝试使用和自行设置节点,execute at end cell但内容尚不可用作为参数(#1)。我还尝试天真地将内容存储在宏中execute at begin cell\def\macro\bgroup然后用关闭它,execute at end cell=\egroup\node[fill=white!\macro!black]{\macro};但这也不起作用。我想我需要某种不使用括号来获取所有内容的方法。

是否存在一个宏或键可以存储单元格的内容以便访问和操作它?

有没有办法可以在不访问宏中的内容的情况下实现我想要做的事情?

答案1

这里我没有直接抓取节点/单元内容(这样设置节点选项就太晚了),而是execute at begin node将代码插入到节点内容中。

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{matrix}

\begin{document}
\begin{tikzpicture}[
  my style/.style={
    fill=white!#1!black,
    execute at begin node={#1}
  }
]
  \matrix[matrix of nodes] {
    |[my style=10]|  & 
    |[my style=20]|  &
    |[my style=100]| \\
  };
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案2

这是一个棘手的解决方案。我尝试用 定义样式,node contents但没有成功。作为替代解决方案,可以使用居中标签。但您需要为节点固定最小尺寸。

\documentclass{standalone}

\usepackage{tikz}
\usetikzlibrary{matrix}

\tikzset{
    mystyle/.style={fill=red!#1!blue, label=center:#1, minimum size=8mm}}
    
\begin{document}
\begin{tikzpicture}[]
\matrix[matrix of nodes]{
  |[mystyle=10]| & |[mystyle=20]| & |[mystyle=50]| \\
};
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容