Ich stelle bei TikZs \foreach
innerhalb 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 \x
nie durch ihren Wert ersetzt. Wenn Pgfplots also beschließt, Ihre Pfade zu lesen, sieht es einfach, \x
was 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 cs
die 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}
Wenn dies jedoch nur für Asymptoten gilt, sind zusätzliche X-Ticks und Rasteroptionen für zusätzliche Ticks besser geeignet.