以编程方式设置 tixz 矩阵节点的样式

以编程方式设置 tixz 矩阵节点的样式

我正在尝试编写一个宏,给定一些坐标,将矩阵中相应的单元格颜色设为黑色。这与这个问题。我无法改编该问题中的一个答案。以下是一些代码:

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


\begin{document}
\begin{tikzpicture}
\tikzstyle{mymatrix}=[draw]  
\foreach \i in {1,2,3} {
    \globaldefs=1 
    \edef\dotikzset{
        \noexpand\tikzset{
            mymatrix/.append style={
                row \i column \i/.style={
                    nodes={fill=black}
                }
            }
        }
    }
    \dotikzset
}

  \matrix [matrix of nodes, mymatrix, nodes in empty cells, nodes={draw, minimum size=5mm}]
  {
     &  &  \\
     &  &  \\
     &  &  \\
  };
\end{tikzpicture}

\end{document}

我期望它将对角线颜色设为黑色,但它只生成白色单元格。如果我将\i行中的一个替换row \i column \i为常量,它就可以正常工作。我不明白为什么它不能在两个引用的情况下工作\i

答案1

当 TeX 扩展row \i column \i/.style后的空间时\i,会删除 。因此当 时结果\i为。1row 1column 1

\space解决此问题的一种方法是在第一个之后使用\irow \i\space column \i/.style

答案2

您还可以使用列表处理程序

\documentclass[tikz]{standalone}
\usetikzlibrary{matrix}
\begin{document}
\begin{tikzpicture}[mymatrix/.style={draw}]  
\tikzset{
  mymatrix/.append style={row #1 column #1/.style={nodes={fill=black}}},
  mymatrix/.list={1,2,3}
}
  \matrix [matrix of nodes, mymatrix, nodes in empty cells, nodes={draw, minimum size=5mm}]
  {
     &  &  \\
     &  &  \\
     &  &  \\
  };
\end{tikzpicture}
\end{document}

相关内容