构建矩阵时是否可以将节点标签添加到某些矩阵列或行?

构建矩阵时是否可以将节点标签添加到某些矩阵列或行?

我要这个:

在此处输入图片描述

完成

\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\pgfmatrixcurrentcolumnTiKZ

可能正在使用一些late codeexecute at end cell我找不到它。

是否可以?

答案1

在以下帮助下扎尔科还有一些来自敲击我已经设法定义了几个.styles可以用来或多或少matrix自动地向顶行和左列的节点添加标签的功能。

提议style扎尔科可以轻松应用于行或列,但它不适用于必须应用左侧和顶部标签的角单元格。作为一种解决方法,我定义了一些.list样式,这些样式适用于除顶部行或左侧列的第一个元素之外的所有元素matrix

必须再考虑一下如何区分emptynon 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 1column 1row 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}

相关内容