Warum funktioniert eine \foreach-Variable in \draw in einer \axis nicht?

Warum funktioniert eine \foreach-Variable in \draw in einer \axis nicht?

Ich stelle bei TikZs \foreachinnerhalb einer \begin{axis}Umgebung ein merkwürdiges Verhalten fest.

Das funktioniert:

\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))}); 
}

aber das hier nicht:

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

Es gibt den Fehler

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

Und hier kommt der wirklich seltsame Teil: Es schlägt nur fehl, wenn die Achse definierte Grenzen hat. Hier ist beispielsweise ein MWE, das funktioniert (aber nichts zeichnet):

\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}

Das Entfernen des Kommentars führt jedoch zu einem Fehler.

Warum ist das so und wie kann ich es verhindern?

(Mein Endziel besteht darin, fünf Segmente der Tangensfunktion und ihre vertikalen Symptomten zu zeichnen.)

Antwort1

Pgfplots analysiert die Zeichenbefehle nicht wie TikZ. Es muss zuerst alle zu zeichnenden Pfade erfassen und dann etwas schwarze Magie anwenden, um das Maximum und Minimum usw. zu ermitteln. Daher müssen Sie für solche Zwecke vollständig erweiterte Pfadbeschreibungen bereitstellen. In Ihrem ersten Problem wurde eine \xnie durch ihren Wert ersetzt. Wenn Pgfplots also beschließt, Ihre Pfade zu lesen, sieht es einfach, \xwas außerhalb der Schleife nicht definiert ist. Zu diesem Zweck haben Sie andere Möglichkeiten zum Schleifen und eine, die unten angegeben ist.

Außerdem müssen Sie axis csdie Punkte definieren, da sie sonst nicht garantiert im sichtbaren Bereich der Achse liegen. Stattdessen können Sie Folgendes verwenden:

\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}

Bildbeschreibung hier eingeben

Wenn dies jedoch nur für Asymptoten gilt, sind zusätzliche X-Ticks und Rasteroptionen für zusätzliche Ticks besser geeignet.

verwandte Informationen