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:
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 \node
no 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 expl3
en lugar de arrayjobx
.
El marco se dibuja con un solo grid
.
El comando \seq_map_indexed_inline:Nn
se 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}