\axis의 \draw에서 \foreach 변수가 작동하지 않는 이유는 무엇입니까?

\axis의 \draw에서 \foreach 변수가 작동하지 않는 이유는 무엇입니까?

\foreach환경 내에서 TikZ의 이상한 동작을 발견했습니다 \begin{axis}.

이것은 작동합니다:

\foreach \x in {-2,-1,...,2} {
  \addplot[thick, domain=0.05+(\x*2-1)*pi/2:+(\x*2+1)*pi/2-0.05] (x, {tan(deg(x))}); 
}

하지만 그렇지 않습니다:

\foreach \x in {-2,-1,...,2} {
  \draw (\x,-5) -- (\x,5);
}

오류가 발생합니다.

! Undefined control sequence.
<argument> \x 
              ,-5
l.771     \end{axis}

정말 이상한 부분은 다음과 같습니다. 축이 경계를 정의한 경우에만 실패합니다. 예를 들어, 다음은 작동하지만 아무것도 그리지 않는 MWE입니다.

\documentclass{standalone}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
  \begin{axis} % [ ymin=-3, ymax=3, xmin=-5, xmax=5]
    \foreach \q in {-2,-1,...,2} {
      \draw (axis cs: \q,-5) -- (axis cs: \q,5);
    }
  \end{axis}
\end{tikzpicture}
\end{document}

하지만 주석을 제거하면 실패하게 됩니다.

왜 이런 일이 발생하며 어떻게 방지할 수 있나요?

(나의 최종 목표는 접선 함수의 5개 부분과 수직적 증상을 그리는 것입니다.)

답변1

Pgfplots는 TikZ처럼 그리기 명령을 구문 분석하지 않습니다. 먼저 그릴 모든 경로를 수집한 다음 최대값과 최소값 등을 얻기 위해 몇 가지 마법을 수행해야 합니다. 따라서 이러한 목적을 위해서는 완전히 확장된 경로 설명을 제공해야 합니다. 첫 번째 문제가 있는 것은 \x해당 값으로 대체되지 않았으므로 pgfplots가 경로를 읽기로 결정할 때 \x루프 외부에 정의되지 않은 경로만 확인합니다. 이를 위해 다른 루프 방법과 아래에 제공된 방법이 있습니다.

또한 점을 정의해야 합니다 axis cs. 그렇지 않으면 축의 가시 영역에 있는 것이 보장되지 않습니다. 대신 다음을 사용할 수 있습니다.

\begin{tikzpicture}
\begin{axis}[ymax=5,ymin=-5,xmax=2.1,xmin=-2.1]
\pgfplotsinvokeforeach{-2,...,2}{
  \draw (axis cs:#1,-5) -- (axis cs:#1,5);
}
\end{axis}
\end{tikzpicture}

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

그러나 이것이 점근선에만 해당된다면 추가 x 틱과 추가 틱에 대한 그리드 옵션을 사용하는 것이 더 좋습니다.

관련 정보