Hallo liebe LaTeX-Freunde,

ich würde gerne Koordinaten (2 double Werte durch Leerzeichen getrennt) zeilenweise aus einer .dat Datei einlesen und diese an ein Makro weiter geben. Mein Minimalbsp. sieht wie folgt aus:

Open in Online-Editor
 \begin{filecontents*}{dumm.dat}
         1.0 2.4
         2.2 1.2
         3.3 3.4
         4.4 1.1
         5.5 9.9 
   \end{filecontents*}

\newcommand\plotF[2]{%Plotte Kreis
    \addplot[samples=100, domain=0:360, red]({(1+#2*#2)*cos(x)+2*#1*#1}, {(1+#2*#2)*sin(x)+2*#2*#2});
}
     \documentclass[margin=2mm]{standalone}
     \usepackage{pgfplots} 
\begin{document}
         \begin{tikzpicture}
         \begin{axis}[clip=false]
             %Hier sollten zeilenweise die Koordinaten aus dumm.dat eingelesen werden und
              das Makro \plotF{x1}{x2} ausgeführt werden
        \end{axis}
       \end{tikzpicture} 
\end{document}

gefragt 23 Mai '15, 09:56

Ross's gravatar image

Ross
37591522
Akzeptiert-Rate: 100%

bearbeitet 23 Mai '15, 09:57


Eine Möglichkeit ist wieder das Paket datatool:

Open in Online-Editor
\begin{filecontents*}{dumm.dat}
1.0 2.4
2.2 1.2
3.3 3.4
4.4 1.1
5.5 9.9
\end{filecontents*}

\documentclass[margin=2mm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.12}

\usepackage{datatool}
\DTLsetseparator{ }% Leerzeichen als Spaltentrenner
\DTLloaddb[noheader]{mylist}{dumm.dat}

\newcommand\plotF[2]{% plotte Kreis
  \addplot[samples=100, domain=0:360, red]
    ({(1+#2*#2)*cos(x)+2*#1*#1}, {(1+#2*#2)*sin(x)+2*#2*#2});
}
\newcommand\argI{}
\newcommand\argII{}

\begin{document}
\begin{tikzpicture}
  \begin{axis}
  \DTLforeach{mylist}{\argI=\dtldefaultkey1,\argII=\dtldefaultkey2}{
    \plotF{\argI}{\argII}
  }
  \end{axis}
\end{tikzpicture} 
\end{document}

alt text

Wenn das dann tatsächlich Kreise werden sollen, musst Du noch mit der Option axis equal dafür sorgen, dass in x- und y-Richtung der gleiche Maßstab verwendet wird:

Open in Online-Editor
\begin{filecontents*}{dumm.dat}
1.0 2.4
2.2 1.2
3.3 3.4
4.4 1.1
5.5 9.9
\end{filecontents*}

\documentclass[margin=2mm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.12}

\usepackage{datatool}
\DTLsetseparator{ }% Leerzeichen als Spaltentrenner
\DTLloaddb[noheader]{mylist}{dumm.dat}

\newcommand\plotF[2]{% plotte Kreis
  \addplot[samples=100, domain=0:360, red]
    ({(1+#2*#2)*cos(x)+2*#1*#1}, {(1+#2*#2)*sin(x)+2*#2*#2});
}
\newcommand\argI{}
\newcommand\argII{}

\begin{document}
\begin{tikzpicture}
  \begin{axis}[axis equal]
  \DTLforeach{mylist}{\argI=\dtldefaultkey1,\argII=\dtldefaultkey2}{
    \plotF{\argI}{\argII}
  }
  \end{axis}
\end{tikzpicture} 
\end{document}

alt text

Permanenter link

beantwortet 23 Mai '15, 14:25

esdd's gravatar image

esdd
17.8k284257
Akzeptiert-Rate: 62%

Super! Dank Dir! Schön, dass einem hier immer so professionell geholfen wird!

(23 Mai '15, 20:32) Ross
Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×298
×11
×9
×4

gestellte Frage: 23 Mai '15, 09:56

Frage wurde gesehen: 8,951 Mal

zuletzt geändert: 23 Mai '15, 20:32