Estou encontrando algum comportamento estranho com TikZ \foreach
dentro de um \begin{axis}
ambiente.
Isso funciona:
\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))});
}
mas isso não acontece:
\foreach \x in {-2,-1,...,2} {
\draw (\x,-5) -- (\x,5);
}
Dá o erro
! Undefined control sequence.
<argument> \x
,-5
l.771 \end{axis}
Aqui está a parte realmente estranha: ele só falha quando o eixo define limites. Por exemplo, aqui está um MWE que funciona (mas não desenha nada):
\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}
mas remover o comentário faz com que ele falhe.
Por que isso acontece e como posso evitá-lo?
(Meu objetivo final é desenhar cinco segmentos da função tangente e seus síntotas vericais.)
Responder1
Pgfplots não analisa os comandos de desenho como o TikZ faz. Ele deve primeiro reunir todos os caminhos a serem traçados e depois fazer alguma magia negra para obter o máximo e o mínimo, etc. Portanto, para tais fins, você precisa fornecer descrições de caminhos totalmente expandidas. No seu primeiro problema, \x
nunca foi substituído pelo seu valor, então quando o pgfplots decide ler seus caminhos, ele apenas vê \x
o que não está definido fora do loop. Para esse propósito, você tem outros meios de loop e um fornecido a seguir.
Além disso, você precisa axis cs
definir os pontos, caso contrário não é garantido que eles estejam na área visível do eixo. Em vez disso, você pode usar o seguinte;
\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}
Mas se isso for apenas para assíntotas, então será melhor usar x ticks extras e opções de grade para ticks extras.