TikZ 그림 오류: \foreach 루프 내부에 n1이라는 노드가 알려져 있지 않습니다.

TikZ 그림 오류: \foreach 루프 내부에 n1이라는 노드가 알려져 있지 않습니다.

다음 오류가 발생합니다.

! Package pgf Error: No shape named n1 is known.

이 코드를 컴파일하려고 할 때.

\documentclass[border=1mm]{standalone}
\usepackage{tikz,pgfplots}
\usetikzlibrary{calc,arrows}
\usepackage{xifthen}
\begin{document}

\begin{tikzpicture}[scale=1,>=latex',line width=0.7pt]

\foreach \i/\j in {0/1,1/2,2/3,3/4,4/5,5/6,6/7,7/8}{%
\node (n\i) [draw,minimum size=1cm] at (1.7*\i,0){};
\ifthenelse{\i=7}{}{%
\draw[->] (n\i)--(n\j);}%
}
\end{tikzpicture}
\end{document}

귀하의 도움에 진심으로 감사드립니다.

답변1

(적어도 이 경우에는) 다음을 시도해 볼 수 있습니다 chain.

\documentclass[tikz,border=5]{standalone}
\usetikzlibrary{chains,arrows}
\begin{document}
\begin{tikzpicture}[>=latex', ultra thick, 
  start chain, every join/.style=->, node distance=1.7]
\foreach \i in {0,...,8}
  \node (n\i) [draw, minimum size=1cm, on chain, join] {}; 
\end{tikzpicture}
\end{document}

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

답변2

더 깨끗한 구문을 사용하는 것이 좋습니다. 여기에 두 가지 다른 방법이 있습니다.

\documentclass[tikz,border=1mm]{standalone}
\usetikzlibrary{arrows}
\begin{document}
\begin{tikzpicture}[scale=1,>=latex',line width=0.7pt]
\node[draw,minimum size=1cm] (n0) at (0,0) {};
\foreach \x[remember=\x as \lastx (initially 0)] in {1,...,7}{%
\node(n\x) [draw,minimum size=1cm] at (1.7*\x,0){};
\draw[<-] (n\x) -- (n\lastx);
}
\end{tikzpicture}
% If feeling adventurous
\begin{tikzpicture}[scale=1,>=latex',line width=0.7pt]
\node[draw,minimum size=1cm] (n0) at (0,0) {};
\foreach \x[remember=\x as \lastx (initially 0)] in {1,...,7}{%
\draw[<-]node[draw,minimum size=1cm,append after command=(n\x) -- (n\lastx)](n\x) at (1.7*\x,0){};
}
\end{tikzpicture}
\end{document}

정수를 엄격하게 사용하는 경우 다음과 같이 벗어날 수 있습니다.\ifnum\i=7\else....\fi

답변3

편집: \foreach진술을 위반하지 않고 다음 두 가지 방법으로 이 작업을 수행할 수 있습니다.

\documentclass[border=1mm]{standalone}
\usepackage{tikz,pgfplots}
\usetikzlibrary{calc,arrows}
\usepackage{xifthen}
\begin{document}
\begin{tikzpicture}[>=latex',line width=0.7pt]
\foreach [evaluate=\i as \j using \i-1]\i in {0,...,7}{%
\node (n\i) [draw,minimum size=1cm] at (1.7*\i,0){};
\ifthenelse{\i=0}{}{%
\draw[->] (n\j)--(n\i);}%
}
\end{tikzpicture}
\begin{tikzpicture}[>=latex',line width=0.7pt]
\foreach \i/\j in {0/-1,1/0,2/1,3/2,4/3,5/4,6/5,7/6}{%
\node (n\i) [draw,minimum size=1cm] at (1.7*\i,0){};
\ifthenelse{\i=0}{}{%
\draw[->] (n\j)--(n\i);}%
}
\end{tikzpicture}
\end{document}

나는 Jake의 의견에 동의한다. \foreach다음과 같이 두 부분으로 분리하면 이 작업을 수행할 수 있습니다 .

\documentclass[border=1mm]{standalone}
\usepackage{tikz,pgfplots}
\usetikzlibrary{calc,arrows}
\usepackage{xifthen}
\begin{document}

\begin{tikzpicture}[scale=1,>=latex',line width=0.7pt]

\foreach \i/\j in {0/1,1/2,2/3,3/4,4/5,5/6,6/7,7/8}%
\node (n\i) [draw,minimum size=1cm] at (1.7*\i,0){};

\foreach \i/\j in {0/1,1/2,2/3,3/4,4/5,5/6,6/7,7/8}{%
\ifthenelse{\i=7}{}{%
\draw[->] (n\i)--(n\j);}%
}
\end{tikzpicture}
\end{document}

n0모든 노드 가 n7상위 루프에서 확실히 생성되므로 이는 올바르게 작동해야 합니다 \foreach.

관련 정보