Ciclo a través de listas separadas por comas en un entorno de repetición de bucle

Ciclo a través de listas separadas por comas en un entorno de repetición de bucle

Estoy intentando recorrer una lista separada por comas en un loop-repeatentorno. Pero todos los nombres de las etiquetas se imprimen a la vez y se agrega el número de ciclo.

¿Cómo puedo definir y vincular la lista de nombres de variables a las cadenas en consecuencia? Probé varias variaciones pero aún no tuve éxito.

ingrese la descripción de la imagen aquí

\documentclass[tikz,border=5mm]{standalone}
%\documentclass[convert={density=1200,size=4320x3200,outext=.png}]{standalone}
\usepackage{tikz}
\usetikzlibrary{arrows}
\usetikzlibrary{knots}
%
\begin{document}
\begin{tikzpicture}[scale=1.0,>=latex']
%
\draw[fill=white] (0,0) rectangle (5,6);
%
\begin{knot}[ %draft mode=crossings,
clip width=5,
clip radius=6pt]
%
\def\j{$unused$,$\alpha$,$\beta$,$\gamma$}
\edef\x{1}
\loop
\edef\x{\the\numexpr\x+1}
\strand [red,->]
    (1,\x) coordinate (w\x) -- coordinate (e\x)(4,\x) node[anchor=left,above,at start]{\j{\x}};
\ifnum\x<4\repeat
%
\strand [thick,->] (2,1) -- (2,5);
\strand [thick,->] (3,1) -- (3,5);
%\flipcrossings {2}
\end{knot}
%
\end{tikzpicture}
\end{document}

Respuesta1

Su propuesta funciona, en principio, pero hay errores de sintaxis. Si desea una matriz de cadenas, debe envolver las entradas en formato ". Entonces las entradas de la matriz se pueden leer con

\pgfmathsetmacro{\mc}{{\j}[\numexpr\x-2]}

que difiere de su expresión: necesita extra {y }y necesita acceder a las entradas entre corchetes, y la primera entrada tiene índice 0, de ahí el \numexpr\x-1.

\documentclass[tikz,border=5mm]{standalone}
%\documentclass[convert={density=1200,size=4320x3200,outext=.png}]{standalone}
\usepackage{tikz}
\usetikzlibrary{arrows}
\usetikzlibrary{knots}
%
\begin{document}
\begin{tikzpicture}[scale=1.0,>=latex']
%
\draw[fill=white] (0,0) rectangle (5,6);
%
\begin{knot}[ %draft mode=crossings,
clip width=5,
clip radius=6pt]
%
\def\j{"$\alpha$","$\beta$","$\gamma$"}
\edef\x{1}
\loop
\edef\x{\the\numexpr\x+1}
\strand [red,->]
    (1,\x) coordinate (w\x) -- coordinate (e\x)(4,\x) 
    node[anchor=left,above,at start]{\pgfmathsetmacro{\mc}{{\j}[\numexpr\x-2]}%
    \mc};
\ifnum\x<4\repeat
%
\strand [thick,->] (2,1) -- (2,5);
\strand [thick,->] (3,1) -- (3,5);
%\flipcrossings {2}
\end{knot}
%
\end{tikzpicture}
\end{document}

ingrese la descripción de la imagen aquí

Respuesta2

Puedo proponer una expl3solución basada que evite peculiaridades con \edefo \defy también problemas con los nombres de las variables.

Hay \xloopun argumento opcional (punto de inicio, predeterminado 1), uno obligatorio para el punto final y el código a ejecutar, donde #1se refiere al valor actual en el bucle. Se puede agregar fácilmente otro argumento opcional para el paso, si lo necesita.

La orden \listdefinedebe explicarse por sí misma; el comando \listextractextrae el elemento solicitado de la lista (índice que comienza en 1); en el segundo argumento \listextractse pueden utilizar expresiones aritméticas.

\documentclass{article}
%\usepackage{xparse} % not needed for LaTeX 2020-10-01 or later
\usepackage{tikz}
\usetikzlibrary{arrows}
\usetikzlibrary{knots}

\ExplSyntaxOn
% looping through integers
\NewDocumentCommand{\xloop}{O{1}mm}
 {
  \int_step_inline:nnn { #1 } { #2 } { #3 }
 }
% define lists
\NewDocumentCommand{\listdefine}{mm}
 {
  \clist_clear_new:c { l_nivek_list_#1_clist }
  \clist_set:cn { l_nivek_list_#1_clist } { #2 }
 }
% extracting items from lists
\NewExpandableDocumentCommand{\listelement}{mm}
 {
  \clist_item:cn { l_nivek_list_#1_clist } { #2 }
 }
\ExplSyntaxOff

\begin{document}
\begin{tikzpicture}[scale=1.0,>=latex']

\draw[fill=white] (0,0) rectangle (5,6);

\begin{knot}[ %draft mode=crossings,
  clip width=5,
  clip radius=6pt
]
%
\listdefine{j}{$\alpha$,$\beta$,$\gamma$}
\xloop[2]{4}{
  \strand [red,->]
    (1,#1) coordinate (w#1) -- coordinate (e#1)(4,#1) 
     node[anchor=left,above,at start]{\listelement{j}{#1-1}};
}
%
\strand [thick,->] (2,1) -- (2,5);
\strand [thick,->] (3,1) -- (3,5);
\end{knot}
%
\end{tikzpicture}

\end{document}

ingrese la descripción de la imagen aquí

información relacionada