在单独的 tikz 图片中创建、读取和写入动态数组

在单独的 tikz 图片中创建、读取和写入动态数组

我想创建一个正方形网格(m 宽 x n 高),并在其中打印坐标。第二张图片是所有行在 tikz 图片中连接在一起的图片。我可以在两个单独的 tikz 图像中执行此操作吗?

% tikzpicture 1
% Each of this is in a box
(0, 0) (0, 1) (0, 2) ... (0, m) 
(1, 0) (1, 1) (1, 2) ... (1, m) 
(2, 0) (2, 1) (2, 2) ... (2, m) 
(3, 0) (3, 1) (3, 2) ... (3, m) 
...
(n, 0) (n, 1) (n, 2) ... (n, m) 
% tikzpicture 2
% Each of this is in a box, so adjecent boxes
(0, 0) (0, 1) (0, 2).... (0, m) (1, 0) (1, 1) (1, 2) (1, m) ... (2, 0) (2, 1) (2, 2) (2, m) ... (3, 0) (3, 1) (3, 2) (3, m) ... (n, 0) (n, 1) (n, 2) ...(n, m) 

但是如果尺寸 (mxn) 发生变化,我希望它也能动态变化。当我使用两个 foreach 循环按顺序计算坐标时,另一个循环按顺序打印预先计算的数组。

这是我目前为止得到的第一次循环:

\documentclass{article}
\usepackage{amsmath}
\usepackage{xparse}
\usepackage{tikz}
\usetikzlibrary{positioning}
\usetikzlibrary{fit} % for small squares in src/2D_array_indexing
\usetikzlibrary{shapes}
\usetikzlibrary{tikzmark}

\begin{document}

\def\gridSize{10mm}
\def\SquareDim{4mm}
\def\Width{4}
\def\Height{3}
\begin{center}
    \begin{tikzpicture}[x=\gridSize, y=-\gridSize]
        \newcommand\Square[1]{+(-#1,-#1) rectangle +(#1,#1)}
        %%%%%% \draw [very thin, lightgray] (0,0) grid (6,4); % Temporary grid
        \foreach \x in {0,...,\Width}
        \foreach \y in {0,...,\Height}
            {
                \draw (\x,\y) \Square{\SquareDim};
                \node[anchor=center, minimum size=1cm] at (\x,\y) {\scriptsize{(\x, \y)}};
                 % Store the values in sequence in an array here for printing it out later.
            }
    \end{tikzpicture}
\end{center}
\end{document}

这是我目前从第一个循环中得到的:

我目前所拥有的...

我曾尝试寻找在数组中存储和打印字符串的答案,但似乎都不起作用。

编辑

添加了一个完整的示例,不,我没有特定的原因在 tikzpicture 中创建数组,它可以在两个 tikz 图片中有效的任何范围之外或之下。(谢谢!@cfr)。

附言:我不知道是否应该包含所有提到的软件包,因为它们是在我尝试从其他各种 StackOverflow 答案中寻找答案时积累起来的。

答案1

我们有这种类型的例子https://www.alanshawn.com/tech/2020/10/04/latex3-tutorial.html

代码

\documentclass{article}
\usepackage{tikz}
\tikzset{
  mynode/.style={
    minimum height=0.8cm,
    minimum width=0.8cm,
    draw,
    anchor=north west,
    font=\scriptsize
  }
}
\ExplSyntaxOn
\int_new:N \l_x_int
\int_new:N \l_libx_int
\int_new:N \l_y_int
\NewDocumentCommand{\printgrid}{ m m }
{
  % #1 the number of row (x)
  % #2 the number of column (y)
\begin{tikzpicture}
\int_step_inline:nn {#1} 
  {
    \int_step_inline:nn {#2} {
      \int_set:Nn \l_x_int{ \int_eval:n { ####1 } - 1 }
      \int_set:Nn \l_y_int { \int_eval:n { ##1 } - 1 }
      \node[mynode] at (\int_eval:n { \l_x_int }, -\int_eval:n { \l_y_int }) {(\int_eval:n { \l_x_int },\int_eval:n { \l_y_int })};
    }
  }
\end{tikzpicture}
}

\NewDocumentCommand{\printline}{ m m }
{
  \begin{tikzpicture}
    \int_step_inline:nn { #1 } 
      {
        \int_step_inline:nn {#2} {
          \int_set:Nn \l_x_int{ \int_eval:n { ####1 } - 1 + ( ##1 - 1 ) * #2}
          \int_set:Nn \l_libx_int{ \int_eval:n { ####1 } - 1 }
          \int_set:Nn \l_y_int { \int_eval:n { ##1 } - 1 }
          \node[mynode] at (\int_eval:n { \l_x_int }, 0 ) {(\int_eval:n { \l_libx_int },\int_eval:n { \l_y_int })};
        }
      }
    \end{tikzpicture}
    
}
\ExplSyntaxOff
\begin{document}
In grid:

\printgrid{2}{3}

And in line:

\printline{2}{3}
\end{document}

在此处输入图片描述

相关内容