![arrayjobx配列からtikzノード名を取得する](https://rvso.com/image/475716/arrayjobx%E9%85%8D%E5%88%97%E3%81%8B%E3%82%89tikz%E3%83%8E%E3%83%BC%E3%83%89%E5%90%8D%E3%82%92%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B.png)
私は、2 人のプレイヤーと各プレイヤーのさまざまなアクション セットを含む通常形式のゲームをタイプセットするためのコマンドを作成しようとしています。これまでのところ、次のコードがあります。
\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}
ペイオフを設定するための別のコマンドを作成したいと思います。これは、現在 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
。
フレームは 1 つの で描画されます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}