我要这个:
完成
\documentclass[border=2mm,tikz]{standalone}
\usetikzlibrary{matrix}
\begin{tikzpicture}[
mygridmatrix/.style={matrix of nodes,
row sep=-\pgflinewidth, column sep=-\pgflinewidth,
nodes={draw, minimum size=1cm}, nodes in empty cells},
]
\matrix (m) [mygridmatrix]
{
&&&&&\\
&&&&&\\
&&&&&\\
&&&&&\\
&&&&&\\
&&&&&\\
};
\foreach \i [count=\xi from 0] in {1,...,6}{
\node also [label=above:\xi] (m-1-\i) {};
\node also [label=left:\xi] (m-\i-1) {};
}
\end{tikzpicture}
\end{document}
如您所见,\matrix
绘制网格并随后\foreach
向第一行和列节点添加标签。
我想将第二部分纳入mygridmatrix
定义。我知道我可以用
\matrix (m) [mygridmatrix]
{
|[label=left:0,label=above:0]|&|[label=above:1]| ....\\
|[label=left:1]|& ...\\
...
但我更愿意声明一些row 1/.style
和,它们会自动声明与和column 1/.style
相关的添加标签(只有在构建每个节点时才知道)。\pgfmatrixcurrentrow
\pgfmatrixcurrentcolumn
TiKZ
可能正在使用一些late code
但execute at end cell
我找不到它。
是否可以?
答案1
在以下帮助下扎尔科还有一些来自敲击我已经设法定义了几个.styles
可以用来或多或少matrix
自动地向顶行和左列的节点添加标签的功能。
提议style
的扎尔科可以轻松应用于行或列,但它不适用于必须应用左侧和顶部标签的角单元格。作为一种解决方法,我定义了一些.list
样式,这些样式适用于除顶部行或左侧列的第一个元素之外的所有元素matrix
。
必须再考虑一下如何区分empty
和non empty
细胞。
我仍然对代码不太满意,所以如果你可以改进,请告诉我或添加有更好解决方案的答案。
\documentclass[border=2mm,tikz]{standalone}
\usetikzlibrary{matrix}
\begin{document}
\begin{tikzpicture} [
toplabel/.style={
row 1 column #1/.style={%
execute at begin cell={%
|[label=\the\pgfmatrixcurrentcolumn]|},
execute at empty cell={%
\node[label=\the\pgfmatrixcurrentcolumn]{};}
}
},
leftlabel/.style={
row #1 column 1/.style={%
execute at begin cell={%
|[label=left:\the\pgfmatrixcurrentrow]|},
execute at empty cell={%
\node[label=left:\the\pgfmatrixcurrentrow]{};}
}
},
topleft/.style={
row 1 column 1/.style={%
execute at begin cell={%
|[label=\the\pgfmatrixcurrentcolumn,
label=left:\the\pgfmatrixcurrentrow]|},
execute at empty cell={%
\node[label=left:\the\pgfmatrixcurrentrow,
label=\the\pgfmatrixcurrentcolumn]{};}
}
}
]
\matrix (A) [
matrix of nodes,
nodes in empty cells,
nodes={draw, minimum size=1cm, anchor=center},
row sep=-\pgflinewidth,
column sep=-\pgflinewidth,
topleft,
toplabel/.list={2,...,6},
leftlabel/.list={2,...,6}
]
{A&A& &A&A& \\
&A&A&A&A&A\\
A&A& & &A&A\\
&A&A&A& &A\\
A&A&A&A&A&A\\
A& & & & & \\};
\end{tikzpicture}
\end{document}
答案2
如果您接受不使用第一行和第一列,您可以使用样式row 1
,column 1
并row 1 column 1
执行以下操作:
\documentclass[border=7mm,tikz]{standalone}
\usetikzlibrary{matrix}
\begin{document}
\begin{tikzpicture}[
mygridmatrix/.style={matrix of nodes,
row sep=-\pgflinewidth, column sep=-\pgflinewidth,
nodes={draw, minimum size=1cm,anchor=center},
nodes in empty cells},
row 1/.append style={nodes={draw=none,node contents=\pgfmathparse{int(\pgfmatrixcurrentcolumn-2)}\pgfmathresult}},
column 1/.append style={nodes={draw=none,node contents=\pgfmathparse{int(\pgfmatrixcurrentrow-2)}\pgfmathresult}},
row 1 column 1/.append style={nodes={node contents=}},
]
\matrix (m) [mygridmatrix]
{
&&&&&\\
&&&&&\\
&&&&&\\
&&&&&\\
&&&&&\\
&&&&&\\
};
\end{tikzpicture}
\end{document}
答案3
我理解最初的问题是关于 Ti 中的样式问题钾Z 以及如何处理matrix
网格和网格外的数字。但是,当我看到你的主要问题与矩阵网格以及行数和列数有关时,它让我想起了一个用于更有趣的目的的包:LogicPuzzle 包。
使用起来很容易天际线拼图用于制作带有空单元格和/或数字/字母的矩形网格,并且可以在矩形的每一侧对行和列进行编号,选项如下:
\skylineL{...} % For left
\skylineT{...} % For top
\skylineR{...} % For right
\skylineB{...} % For bottom
此外,还有其他功能,例如:细胞着色、突出显示某些细胞的轮廓等。(见我的答案在这里作为例子。)所以如果你认为这个答案不符合你的要求或在某种程度上没有帮助你,那就把它当作一个只是为了好玩回答。
输出
代码
\documentclass[border=4mm]{standalone}
\usepackage{logicpuzzle}
\begin{document}
\begin{skyline}[rows=6, columns=6]
\skylineL{6,5,4,3,2,1}
\skylineT{1,2,3,4,5,6}
\setrow{6}{A,A,{},A,A,{}}
\setrow{5}{{},A,A,A,A,A}
\setrow{4}{A,A,{},{},A,A}
\setrow{3}{{},A,A,A,{},A}
\setrow{2}{A,A,A,A,A,A}
\setrow{1}{A,{},{},{},{},{}}
\end{skyline}
\end{document}