![Pegando nomes de nós tikz de um array arrayjobx](https://rvso.com/image/475716/Pegando%20nomes%20de%20n%C3%B3s%20tikz%20de%20um%20array%20arrayjobx.png)
Estou tentando criar um comando para compor jogos de formato normal com dois jogadores e um conjunto variável de ações para cada jogador. Até agora, tenho o seguinte 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}
O que produz a seguinte imagem:
Gostaria de criar um comando diferente para definir recompensas, ou seja, os rótulos dos nós atualmente rotulados como RAW, CAW, ... Para fazer isso, queria que esses nós tivessem como nomes as strings que defini atualmente como rótulos; essencialmente, eu esperava usar este código nas linhas 22-23 (que não está funcionando):
\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) {};
No entanto, nada que tentei me permitiu usar um valor de array arrayjobx como nome para um nó tikz. Alguma solução alternativa? Estou aberto a usar um pacote diferente do arrayjobx, desde que me permita ler facilmente uma matriz de nomes de linhas/colunas a partir de uma entrada de comando.
Responder1
O código proposto (R\row(\the\numexpr#1-\i+1\relax)\col(\the\numexpr \j\relax))
para o nome do \node
não funciona porque \row(1)
não é expansível, conforme ilustrado abaixo.
\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}
O código abaixo usa expl3
em vez de arrayjobx
.
O quadro é desenhado com um único arquivo grid
.
O comando \seq_map_indexed_inline:Nn
é usado para percorrer as sequências e acompanhar o í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}