Цикл по списку, разделенному запятыми, в среде с повторением цикла

Цикл по списку, разделенному запятыми, в среде с повторением цикла

Я пытаюсь пройти по списку, разделенному запятыми, в loop-repeatсреде. Но все имена меток печатаются одновременно, и добавляется номер цикла.

Как мне определить и связать список имен переменных с нитями соответствующим образом? Я пробовал несколько вариантов, но пока безуспешно.

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

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

решение1

Ваше предложение работает, в принципе, но есть синтаксические ошибки. Если вам нужен массив строк, вам нужно обернуть записи в ". Затем записи массива можно прочитать с помощью

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

что отличается от вашего выражения: вам нужны дополнительные {и }, и вам нужно получить доступ к записям с квадратными скобками, а первая запись имеет индекс 0, отсюда и \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}

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

решение2

Я могу предложить expl3базовое решение, которое позволяет избежать проблем с \edefили , \defа также проблем с именами переменных.

В \xloopнем есть необязательный аргумент (начальная точка, по умолчанию 1), обязательный для конечной точки и код для выполнения, где #1относится к текущему значению в цикле. Дополнительный необязательный аргумент для шага можно легко добавить, если он вам нужен.

Команда \listdefineдолжна быть понятной сама по себе; команда \listextractизвлекает запрошенный элемент из списка (индекс начинается с 1); во втором аргументе \listextractможно использовать арифметические выражения.

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

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

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