Tikz-Knotennamen aus einem Arrayjobx-Array übernehmen

Tikz-Knotennamen aus einem Arrayjobx-Array übernehmen

Ich versuche, einen Befehl zum Setzen von Normalformspielen mit zwei Spielern und einem variablen Aktionssatz für jeden Spieler zu erstellen. Bisher habe ich den folgenden Code:

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

Es ergibt sich folgendes Bild: Ein Bild eines Rasters mit 3 Zeilen und 4 Spalten. Die Spalten sind mit W, X, Y, Z indiziert; die Zeilen mit A, B, C. Jedes Quadrat des Rasters ist diagonal in zwei Hälften geteilt, wobei die untere linke Hälfte mit R und der Zeile und Spalte, in der es sich befindet, beschriftet ist und die obere rechte Hälfte ähnlich beschriftet ist, beginnend mit C.

Ich möchte einen anderen Befehl zum Festlegen der Auszahlungen erstellen, also der Bezeichnungen der Knoten, die aktuell als RAW, CAW usw. gekennzeichnet sind. Dazu wollte ich, dass diese Knoten als Namen die Zeichenfolgen haben, die ich aktuell als Bezeichnungen festgelegt habe. Im Wesentlichen wollte ich diesen Code in den Zeilen 22–23 verwenden (der nicht funktioniert):

\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) {};

Nichts von dem, was ich versucht habe, hat es mir jedoch ermöglicht, einen Arrayjobx-Array-Wert als Namen für einen Tikz-Knoten zu verwenden. Gibt es irgendwelche Workarounds? Ich bin offen dafür, ein anderes Paket als arrayjobx zu verwenden, solange es mir ermöglicht, problemlos ein Array von Zeilen-/Spaltennamen aus einer Befehlseingabe zu lesen.

Antwort1

Der vorgeschlagene Code (R\row(\the\numexpr#1-\i+1\relax)\col(\the\numexpr \j\relax))für den Namen \nodefunktioniert nicht, da \row(1)er, wie unten dargestellt, nicht erweiterbar ist.

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

Der folgende Code verwendet expl3anstelle von arrayjobx.

Der Rahmen wird mit einem einzelnen gezeichnet grid.

Der Befehl \seq_map_indexed_inline:Nnwird verwendet, um eine Schleife über die Sequenzen auszuführen und den Index zu verfolgen.

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

Bildbeschreibung hier eingeben

verwandte Informationen