루프 반복 환경에서 쉼표로 구분된 목록을 순환합니다.

루프 반복 환경에서 쉼표로 구분된 목록을 순환합니다.

환경에서 쉼표로 구분된 목록을 순환하려고 합니다 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}

여기에 이미지 설명을 입력하세요

관련 정보