Cómo utilizar la operación matemática en un índice de matriz creado por el paquete arrayjob

Cómo utilizar la operación matemática en un índice de matriz creado por el paquete arrayjob

Quiero poner cada número de la matriz en una cuadrícula usando tikz.

\documentclass[tikz]{standalone}
\usepackage{pgffor}
\usepackage{multido}
\usetikzlibrary{calc}
\usepackage{arrayjob}
\newarray\Values
\readarray{Values}{I&F&I&G&L&O&C&K&E&D&A&W&A&Y&.}
\begin{document}
\begin{tikzpicture}
    \draw (0,0) grid(5,3);
  %     \foreach \x in {1,2,3,4,5}
  %         \foreach \y in {1,2,3}
  %         {
  %             \node at (\x-0.5,\y-0.5) {\Values(\x+\y*5)};
  %         }
    \multido{\dx=0cm+1cm,\iColumn=1+1}{5}{%
        \multido{\dy=0cm+1cm,\iRow=1+2}{3}{%
        \node at (\dx+0.5cm,\dy+0.5cm) {\Values(\iColumn+\iRow*5)};}}
\end{tikzpicture}
\end{document}

Pero tengo algo como esto. El resultado es similar si lo reemplazo \multidocon \foreach. La operación matemática parece no ser compatible con el índice de la matriz. ¿Cómo puedo solucionar esto por favor?

ingrese la descripción de la imagen aquí

Respuesta1

Deberías usar arrayjobx, pero no admite la aritmética en sus argumentos.

\documentclass[tikz]{standalone}
\usepackage{pgffor}
\usepackage{multido}
\usetikzlibrary{calc}
\usepackage{arrayjobx}
\newarray\Values
\readarray{Values}{I&F&I&G&L&O&C&K&E&D&A&W&A&Y&.}

\begin{document}
\begin{tikzpicture}
    \draw (0,0) grid(5,3);
      \foreach \x in {1,2,3,4,5}
        {
          \foreach \y in {1,2,3}
            {
              \node at (\x-0.5,\y-0.5) {\expandafter\Values\expandafter(\the\numexpr\x+\y*5)};
            }
        }
\end{tikzpicture}
\end{document}

Más fácilmente, defina un comando que haga el trabajo:

\documentclass[tikz]{standalone}
\usepackage{pgffor}
\usepackage{multido}
\usetikzlibrary{calc}
\usepackage{arrayjobx}
\newarray\Values
\readarray{Values}{I&F&I&G&L&O&C&K&E&D&A&W&A&Y&.}

\newcommand{\Get}[2]{%
  \expandafter#1\expandafter(\the\numexpr#2\relax)%
}

\begin{document}
\begin{tikzpicture}
    \draw (0,0) grid(5,3);
      \foreach \x in {1,2,3,4,5}
        {
          \foreach \y in {1,2,3}
            {
              \node at (\x-0.5,\y-0.5) {\Get\Values{\x+\y*5}};
            }
        }
\end{tikzpicture}
\end{document}

Con herramientas más modernas:

\documentclass[tikz]{standalone}
\usepackage{pgffor}
\usetikzlibrary{calc}

\ExplSyntaxOn
\NewDocumentCommand{\definearray}{mm}
 {
  \seq_clear_new:c { l_jasmine_array_#1_seq }
  \seq_set_split:cnn { l_jasmine_array_#1_seq } { & } { #2 }
 }
\cs_generate_variant:Nn \seq_set_split:Nnn { c }

\NewExpandableDocumentCommand{\getarrayitem}{mm}
 {
  \seq_item:cn { l_jasmine_array_#1_seq } { #2 }
 }
\ExplSyntaxOff

\definearray{Values}{I&F&I&G&L&O&C&K&E&D&A&W&A&Y&.}

\begin{document}
\begin{tikzpicture}
    \draw (0,0) grid(5,3);
      \foreach \x in {1,2,3,4,5}
        {
          \foreach \y in {1,2,3}
            {
              \node at (\x-0.5,\y-0.5) {\getarrayitem{Values}{\x+\y*5}};
            }
        }
\end{tikzpicture}
\end{document}

Los tres fragmentos de código producen el mismo resultado.

ingrese la descripción de la imagen aquí

Respuesta2

Código

\documentclass[tikz]{standalone}
\usetikzlibrary{graphs}
\begin{document}
\tikz
  \graph[
    grid placement, wrap after=5, branch up,
    fresh nodes, nodes={
      draw, minimum size=+1cm, text height=+\ht\strutbox, text depth=+0pt},
  ]{I, F, I, G, L, O, C, K, E, D, A, W, A, Y, .};

\tikz
  \draw (0,0) grid (5,3) [shift={(.5,.5)}]
    graph[
      grid placement, wrap after=5, branch up,
      fresh nodes, nodes={text height=+\ht\strutbox, text depth=+0pt},
    ]{I, F, I, G, L, O, C, K, E, D, A, W, A, Y, .};

\tikz
  \node foreach[count=\i from 0] \t in {I, F, I, G, L, O, C, K, E, D, A, W, A, Y, .}
    [draw, minimum size=+1cm, text height=+\ht\strutbox, text depth=+0pt]
      at ({mod(\i,5)},{int(\i/5)}) {\t};
\end{document}

Producción

ingrese la descripción de la imagen aquí

información relacionada