这与从样式中设置 tikz 节点的内容,但这个问题和相应的答案已有八年历史,node contents
当时还没有选项。
我本想回答访问 tikz 矩阵单元格内容以编程方式设置单元格样式具有节点样式,其中fill
和node contents
由可以固定到每个矩阵单元中的参数定义。例如:
\begin{tikzpicture}[mystyle/.style={draw, node contents={#1}},
mystyle/.default={A}]
\matrix[matrix of nodes, nodes in empty cells, nodes={mystyle}]{
|[mystyle={B}]|&&\\
&&\\};
\end{tikzpicture}
由于这不起作用,我最终node contents
用label=center:#1
在主节点固定一定大小时起作用的方法进行了替换。
那么问题是为什么以前的代码不起作用?
这是经过先前测试的代码以及所需但不起作用的解决方案。
\documentclass[border=2mm,tikz]{standalone}
\usetikzlibrary{matrix}
\begin{document}
\begin{tikzpicture}
\matrix[matrix of nodes, nodes in empty cells, nodes={draw, node contents={A}}]{
&&\\&&\\};
\end{tikzpicture}
\begin{tikzpicture}[mystyle/.style={draw, node contents={A}}]
\matrix[matrix of nodes, nodes in empty cells, nodes={mystyle}]{
&&\\&&\\};
\end{tikzpicture}
\begin{tikzpicture}[mystyle/.style={draw, node contents={#1}}]
\matrix[matrix of nodes, nodes in empty cells, nodes={mystyle={A}}]{
&&\\&&\\};
\end{tikzpicture}
\begin{tikzpicture}[mystyle/.style={draw, node contents={#1}}, mystyle/.default={A}]
\matrix[matrix of nodes, nodes in empty cells, nodes={mystyle}]{
&&\\&&\\};
\end{tikzpicture}
\begin{tikzpicture}[mystyle/.style={draw, node contents={#1}}, mystyle/.default={A}]
\matrix[matrix of nodes, nodes in empty cells, nodes={mystyle}]{
|[mystyle={B}]|&&\\&&\\};
\end{tikzpicture}
\end{document}
答案1
node contents
1) 只能用作节点选项中的最后一个键;2) 它改变节点语法。
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[nodes=draw]
% without `node contents`, node parser keeps working until a pair of braces
\node {text};
% with `node contents`, node parser stops immediately
\node at (1,0) [node contents=text];
\end{tikzpicture}
\end{document}
但对于matrix of nodes
,这两个条件都不成立。
- 传递给选项的任何样式
nodes={...}
实际上every node/.append style={...}
都在节点解析器开始之前执行(并且当解析器启动时它会用进行初始化node contents={}
),因此nodes={node contents={...}}
不会产生任何效果。 - ,
matrix of nodes
矩阵单元将始终具有以下形式
注意到execute at begin cell={\node[...] \bgroup} execute at end cell ={\egroup;}
\bgroup <cell content> \egroup
节点内容形成了正常的语法。
您可能对如何matrix of nodes
在顶部定义execute at (begin|end) cell
以及更多矩阵样式感兴趣,tikzlibrarymatrix.code.tex
。
或者,我认为你的原始任务可以通过选项解决execute at begin node
,再加上一些技巧:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix}
\begin{document}
\begin{tikzpicture}[execute at begin node={\mytext},
execute at begin node once/.store in=\mytext,
mystyle/.style={draw, execute at begin node once={#1}},
mystyle/.default={A}]
\matrix[matrix of nodes, nodes in empty cells, nodes={mystyle}]{
|[mystyle={B}]|&&\\
&&\\};
\end{tikzpicture}
\end{document}