![Tikz-Knotennamen aus einem Arrayjobx-Array übernehmen](https://rvso.com/image/475716/Tikz-Knotennamen%20aus%20einem%20Arrayjobx-Array%20%C3%BCbernehmen.png)
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:
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 \node
funktioniert 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 expl3
anstelle von arrayjobx
.
Der Rahmen wird mit einem einzelnen gezeichnet grid
.
Der Befehl \seq_map_indexed_inline:Nn
wird 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}