Взятие имен узлов tikz из массива arrayjobx

Взятие имен узлов tikz из массива arrayjobx

Я пытаюсь создать команду для набора игр в нормальной форме с двумя игроками и переменным набором действий для каждого игрока. Пока что у меня есть следующий код:

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

Что дает следующую картину: Изображение сетки с 3 строками и 4 столбцами. Столбцы проиндексированы как W, X, Y, Z; строки проиндексированы как A, B, C. Каждый квадрат сетки разделен пополам по диагонали, причем нижняя левая половина помечена буквой R, а строка и столбец, в которых она находится, и верхняя правая половина помечены аналогично, начиная с C.

Я хотел бы создать другую команду для установки выплат, то есть меток узлов, которые в настоящее время помечены как RAW, CAW, ... Чтобы сделать это, я хотел, чтобы эти узлы имели в качестве имен строки, которые я в настоящее время установил в качестве меток; по сути, я надеялся использовать этот код в строках 22-23 (который не работает):

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

Однако, ничего из того, что я пробовал, не позволило мне использовать значение массива arrayjobx в качестве имени для узла tikz. Есть ли обходные пути? Я открыт для использования другого пакета, нежели arrayjobx, пока он позволяет мне легко считывать массив имен строк/столбцов из ввода команды.

решение1

Предложенный код (R\row(\the\numexpr#1-\i+1\relax)\col(\the\numexpr \j\relax))для имени \nodeне работает, поскольку \row(1)не расширяется, как показано ниже.

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

В приведенном ниже коде expl3вместо arrayjobx.

Рамка нарисована одним grid.

Команда \seq_map_indexed_inline:Nnиспользуется для циклического перебора последовательностей и отслеживания индекса.

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

введите описание изображения здесь

Связанный контент