\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 틱과 추가 틱에 대한 그리드 옵션을 사용하는 것이 더 좋습니다.