Tomando nombres de nodos tikz de una matriz arrayjobx

Tomando nombres de nodos tikz de una matriz arrayjobx

Estoy intentando crear un comando para componer juegos en forma normal con dos jugadores y un conjunto variable de acciones para cada jugador. Hasta ahora tengo el siguiente código:

\documentclass{article}
\usepackage{tikz}
\usepackage{arrayjobx}

\newcommand \Length [1] {%
  \csname total@#1\endcsname
}

\newcommand{\nfgrid}[2]{
\newarray\row
\readarray{row}{#1}
\newarray\col
\readarray{col}{#2}
\draw[-,very thick] (0,0) to (2*\Length{col},0);
\foreach \i in {1,2,...,\Length{row}}{
        \draw[-,very thick] (0,2*\i) to (2*\Length{col},2*\i);
        \node (A) at (-1,2*\i-1) {\row(\the\numexpr\Length{row}-\i+1\relax)};
    }
\draw[-,very thick] (0,0) to (0,2*\Length{row});
\foreach \i in {1,2,...,\Length{col}}{
        \draw[-,very thick] (2*\i,0) to (2*\i,2*\Length{row});
        \node (A) at (2*\i-1,2*\Length{row}+1) {\col(\the\numexpr\i\relax)};
    }
\foreach \i in {1,2,...,\Length{row}}{
    \foreach \j in {1,2,...,\Length{col}}{
        \node (A) at (2*\j-1.5,2*\i-1.5) {R\row(\the\numexpr\Length{row}-\i+1\relax)\col(\the\numexpr \j\relax)};
        \node (A) at (2*\j-0.5,2*\i-0.5) {C\row(\the\numexpr\Length{row}-\i+1\relax)\col(\the\numexpr \j\relax)};
        \draw[-,very thin] (2*\j,2*\i-2) to (2*\j-2,2*\i);
        }
    }
}

\begin{document}
\begin{tikzpicture}
\nfgrid{A&B&C}{W&X&Y&Z}
\end{tikzpicture}
\end{document}

Lo que produce la siguiente imagen: Una imagen de una cuadrícula con 3 filas y 4 columnas. Las columnas están indexadas W,X,Y,Z; las filas están indexadas A,B,C. Cada cuadrado de la cuadrícula se divide por la mitad en diagonal, con la mitad inferior izquierda etiquetada con R y la fila y columna en la que se encuentra y la mitad superior derecha etiquetada de manera similar comenzando con C.

Me gustaría crear un comando diferente para establecer pagos, es decir, las etiquetas de los nodos actualmente etiquetados como RAW, CAW,... Para hacer eso, quería que esos nodos tuvieran como nombres las cadenas que actualmente configuré como etiquetas; Básicamente esperaba usar este código en las líneas 22-23 (que no funciona):

\node (R\row(\the\numexpr#1-\i+1\relax)\col(\the\numexpr \j\relax)) at (2*\j-1.5,2*\i-1.5) {};
\node (C\row(\the\numexpr#1-\i+1\relax)\col(\the\numexpr \j\relax)) at (2*\j-0.5,2*\i-0.5) {};

Sin embargo, nada de lo que he probado me ha permitido usar un valor de matriz arrayjobx como nombre para un nodo tikz. ¿Alguna solución? Estoy abierto a usar un paquete diferente a arrayjobx, siempre que me permita leer fácilmente una serie de nombres de filas/columnas desde una entrada de comando.

Respuesta1

El código propuesto (R\row(\the\numexpr#1-\i+1\relax)\col(\the\numexpr \j\relax))para el nombre de \nodeno funciona porque \row(1)no es expandible, como se ilustra a continuación.

\documentclass[border=6pt]{standalone}
\usepackage{arrayjobx}
\begin{document}
\newarray\row
\readarray{row}{a&b&c}
\def\testA{\row(1)}%\def works but \edef does not work
\testA
\end{document}

El siguiente código utiliza expl3en lugar de arrayjobx.

El marco se dibuja con un solo grid.

El comando \seq_map_indexed_inline:Nnse utiliza para recorrer las secuencias y realizar un seguimiento del índice.

\documentclass[border=6pt]{standalone}
\usepackage{tikz}
\ExplSyntaxOn
\seq_new:N \l__Chip_row_seq
\seq_new:N \l__Chip_column_seq
\NewDocumentCommand \nfgrid { m m }
  {
    \seq_set_from_clist:Nn \l__Chip_row_seq {#1}
    \seq_set_from_clist:Nn \l__Chip_column_seq {#2}
    \draw [ very~thick , step = 2 ] ( 0 , 0 ) grid ( 2 * \seq_count:N \l__Chip_column_seq , 2 * \seq_count:N \l__Chip_row_seq ) ;
    \seq_map_indexed_inline:Nn \l__Chip_row_seq
      {
        \node (##2) at ( -1 , { 2 * ( \seq_count:N \l__Chip_row_seq - ##1 ) + 1 } ) {##2};
      }
    \seq_map_indexed_inline:Nn \l__Chip_column_seq
      {
        \node (##2) at ( 2 * ##1 - 1 , 2 * \seq_count:N \l__Chip_row_seq + 1 ) {##2};
      }
    \seq_map_indexed_inline:Nn \l__Chip_row_seq
      {
        \seq_map_indexed_inline:Nn \l__Chip_column_seq
          {
            \node ( R ##2 ####2 ) at ( 2 * ####1 - 1.5 , { 2 * ( \seq_count:N \l__Chip_row_seq - ##1 ) + 0.5 } ) { R ##2 ####2 };
            \node ( C ##2 ####2 ) at ( 2 * ####1 - 0.5 , { 2 * ( \seq_count:N \l__Chip_row_seq - ##1 ) + 1.5 } ) { C ##2 ####2 };
            \draw [ very~thin ] ( 2 * ####1 - 2 , 2 * ##1 ) -- ++ ( 2 , -2 ) ;
          }
      }
  }
\ExplSyntaxOff
\begin{document}
\begin{tikzpicture}
\nfgrid{A,B,C}{W,X,Y,Z}
\end{tikzpicture}
\end{document}

ingrese la descripción de la imagen aquí

información relacionada