Ich habe eine Reihe vordefinierter Koordinaten, bei denen ich mehrere Linien in einem Diagramm zeichnen möchte, indem ich Koordinaten wiederverwende. Wenn ich einen Koordinatenwert ändere, möchte ich ihn nur einmal ändern müssen und nicht in mehreren Koordinatenlisten. Daher möchte ich etwas wie das Folgende tun
\documentclass[tikz]{standalone}
\usepackage{tikz,pgfplots}
\pgfplotsset{compat=1.9}
\begin{document}
\begin{tikzpicture}
\begin{axis}
\coordinate (p1) at (1,1);
\coordinate (p2) at (2,2);
\addplot coordinates{(p1)(p2)};
\end{axis}
\end{tikzpicture}
\end{document}
Um etwas zu erzeugen, das so aussieht
Aber anscheinend kann das Leben nicht so einfach sein, denn ich erhalte die folgende Fehlermeldung
Runaway argument?
p1)(p2)\pgfplots@EOI \pgfplotsscanlinelengthcleanup
\pgfplots@coord@stream@end
\ETC.
Paragraph ended before \pgfplots@loop@next was complete.
<to be read again>
\par
l.15
Ich habe versucht, die Koordinaten auch außerhalb der Achsenumgebung zu definieren, aber das hat auch nicht funktioniert.
Irgendwelche Ideen, wie man vordefinierte Koordinaten in einer \addplot-Koordinatenliste verwendet?
Antwort1
Wie bereits erwähnt, liegt dies wahrscheinlich daran, dass pgfplots seine Erweiterungen verzögert. Auf diese Weise ist es möglich, automatisch in die relevante Region zu zoomen und so weiter. Daher kann ich Ihnen keine schöne Lösung anbieten. Der beste Workaround, den ich erstellen konnte, ist
\documentclass[tikz]{standalone}
\makeatletter
% from https://tex.stackexchange.com/q/56353/121799
\newcommand{\gettikzxy}[3]{%
\tikz@scan@one@point\pgfutil@firstofone#1\relax
\global\edef#2{\the\pgf@x}%
\global\edef#3{\the\pgf@y}%
}
\newcommand{\gettikzcoordinates}[2]{%
\tikz@scan@one@point\pgfutil@firstofone#1\relax
\pgfmathsetmacro{\myx}{round(0.99626*\the\pgf@x/0.0283465)/1000}
\pgfmathsetmacro{\myy}{round(0.99626*\the\pgf@y/0.0283465)/1000}
\global\edef#2{(\myx,\myy)}%
}
\makeatother
\usepackage{tikz,pgfplots}
\pgfplotsset{compat=1.9}
\begin{document}
\begin{tikzpicture}
\coordinate (p1) at (1,1);
\coordinate (p2) at (2,2);
\begin{axis}
\gettikzcoordinates{(p1)}{\Pone}
\gettikzcoordinates{(p2)}{\Ptwo}
\addplot coordinates{\Pone\Ptwo};
\end{axis}
\end{tikzpicture}
\end{document}
Dieser Code erzeugt das gewünschte Diagramm. Wie Sie überprüfen können, erhalten Sie einen Fehler, wenn Sie \begin{axis}
vor die Anweisungen verschieben, im Wesentlichen, weil die Koordinaten nicht definiert wurden, als sie benötigt wurden. Sehr oft können Sie damit auskommen , aber in dieser Situation bin ich nur in Endlosschleifen gefangen. (Das ist hier nicht relevant, ich wollte nur angeben, woher ich die Idee hatte, wie man die Koordinaten extrahiert.)\coordinate
\edef\temp{<something>}\temp
\gettikzxy