我有一个 tikz 矩阵,如下面的代码所示,其中包含一些空单元格。(不必担心列和行分隔的问题。为了简单起见,我省略了这一点。)
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{matrix}
\begin{document}
\begin{tikzpicture}[
table/.style={
matrix of nodes,
nodes in empty cells,
nodes = {fill=gray, draw = black},
}
]
\matrix (test) [table] {
1 & 2 & 3 \\
4 & & 5 \\
};
\end{tikzpicture}
\end{document}
我使用该nodes in empty cells
选项是因为我希望单元格可以通过矩阵名称和列/行号进行寻址。该选项的一个含义是每个空单元格都包含一个node
无内容的单元格,但是其样式与所有其他节点相同。
我正在寻找一种方法来赋予空单元格不同的样式(不同的填充颜色且没有边框),而无需
- 失去单细胞的可寻址性
- 必须手动向每个空单元格添加样式。
是否存在我尚未找到的选项,或者我必须nodes in empty cells
自己“模仿”该选项来插入一些不同的风格?
答案1
库中在空单元格中添加节点的宏matrix
似乎是\tikz@lib@matrix@empty@cell
,定义在 的第 24 行tikzlibrarymatrix.code.tex
。您也许可以为空单元格创建新样式,然后从库中重新定义该宏,以在宏定义中找到的matrix
新样式中包含该样式。node
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{matrix}
\tikzset{empty node/.style={draw=none,fill=none}}
\makeatletter
\def\tikz@lib@matrix@empty@cell{\iftikz@lib@matrix@empty\node[name=\tikzmatrixname-\the\pgfmatrixcurrentrow-\the\pgfmatrixcurrentcolumn,empty node]{};\fi}
\makeatother
\begin{document}
\begin{tikzpicture}[
table/.style={
matrix of nodes,
nodes in empty cells,
nodes = {fill=gray, draw = black},
}
]
\matrix (test) [table] {
1 & 2 & 3 \\
4 & & 5 \\
};
\draw [red] (test-2-2.center) -- (test-1-3.center);
\end{tikzpicture}
\end{document}
答案2
据我所知,没有empty cells
样式。但您可以使用 来.list
声明必须使用特定样式的单个单元格列表。代码如下乔尔森回答TikZ 矩阵,组合或行和列的样式
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{matrix}
\begin{document}
\begin{tikzpicture}[
table/.style={
matrix of nodes,
nodes in empty cells,
nodes = {fill=gray, draw = black},
},
myset/.style args = {(#1,#2)}{%
row #1 column #2/.style={nodes={draw=none, fill=none, inner sep=0pt}}}
]
\matrix (test) [table,myset/.list={(2,2),(3,1),(3,3)}] {
1 & 2 & 3 \\
4 & & 5 \\
& 6 & \\
};
\draw[red] (test-3-1)--(test-2-2)--(test-3-3);
\end{tikzpicture}
\end{document}