我正在尝试编写一个宏,给定一些坐标,将矩阵中相应的单元格颜色设为黑色。这与这个问题。我无法改编该问题中的一个答案。以下是一些代码:
\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
为。1
row 1column 1
\space
解决此问题的一种方法是在第一个之后使用\i
:row \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}