Verwenden von Gnuplot-Code mit mehreren Codezeilen in LaTeX

Verwenden von Gnuplot-Code mit mehreren Codezeilen in LaTeX

Ich versuche, mehrere Codezeilen mit Gnuplot zu plotten \addplot gnuplot, aber das funktioniert nicht und es wird keine Plotausgabe erstellt. Ist es möglich, eine Datei mit Code aufzurufen oder mehrere Zeilen mit Funktionsdeklarationen zu haben?

Danke!

PS: Ein einfaches Online-Gnuplot funktioniert (z. B. plot [-10:100] real(sin(x)**besj0(x))), shell-escapemuss aber ebenfalls aktiviert werden.

Beispiel:

\documentclass{standalone}

\usepackage{tikz,pgfplots}
\usepackage{amsmath}
\usepackage[per=slash, decimalsymbol=comma, loctolang={DE:ngerman,UK:english},]{siunitx}


\begin{document}
\usepgfplotslibrary{units}
 \begin{tikzpicture}
  \begin{axis}[width=0.95\linewidth,
            height=7.5cm,
        legend pos=north east,
            grid=major, 
            grid style={dashed,gray!30}, 
            xlabel=Frequency in \si{\hertz}, 
            ylabel=Impedance in \si{\ohm},
        enlarge x limits=false,
        xmode=log,
        xmax=10^9 ]

\addplot gnuplot[raw gnuplot,mark=none,color=cyan] {
j=sqrt(-1)
zc(f,c) = 1/(j*2*pi*f*c)
zl(f,l) = j*2*pi*f*l
zpar(z1,z2) = z1*z2/(z1+z2)
zmodel(f,r,c) = zpar(r, zc(f,c))
azmodel(f) = abs(zmodel(f,R1,C1))
R1= 5.6e6
C1= 1e-9
plot azmodel(x)
};
%  plot [-10:100] real(sin(x)**besj0(x))

\end{axis}
\end{tikzpicture}<>

\end{document}

Antwort1

Sie müssen ;am Ende jeder Gnuplot-Zeile ein hinzufügen.

Grund: pgfplotsschreibt eine Datei yourfile.pgf-plot.gnuplot, die dann an gnuplot weitergegeben wird. Darin steht dein Code in einer Zeile. Gnuplot kann daher einzelne Zuweisungen nicht unterscheiden. Mit ;am Ende der Zeilen lässt sich das beheben und gnuplot erzeugt die benötigte Tabelle ( yourfile.pgf-plot.table).

\documentclass{standalone}

\usepackage{tikz,pgfplots}
\usepackage{amsmath}
\usepackage[per=slash, decimalsymbol=comma, loctolang={DE:ngerman,UK:english},]{siunitx}


\begin{document}
\usepgfplotslibrary{units}
 \begin{tikzpicture}
  \begin{axis}[width=0.95\linewidth,
            height=7.5cm,
        legend pos=north east,
            grid=major, 
            grid style={dashed,gray!30}, 
            xlabel=Frequency in \si{\hertz}, 
            ylabel=Impedance in \si{\ohm},
        enlarge x limits=false,
        xmode=log,
        xmax=10^9 ]

\addplot gnuplot[raw gnuplot,mark=none,color=cyan] {
% add semicolons here
j=sqrt(-1);
zc(f,c) = 1/(j*2*pi*f*c);
zl(f,l) = j*2*pi*f*l;
zpar(z1,z2) = z1*z2/(z1+z2);
zmodel(f,r,c) = zpar(r, zc(f,c));
azmodel(f) = abs(zmodel(f,R1,C1));
R1= 5.6e6;
C1= 1e-9;
plot azmodel(x);
};
%  plot [-10:100] real(sin(x)**besj0(x))

\end{axis}
\end{tikzpicture}<>

\end{document}

Haftungsausschluss: Ich musste gnuplot manuell ausführen, da etwas mit meiner Installation nicht stimmte. Aber mit den Semikolons hat es funktioniert, ohne sie ging es nicht.

Bearbeiten: Wenn Sie gnuplot von der Befehlszeile aus ausführen, wird Ihnen dies angezeigt und ^die zweite Zeile verweist auf die Stelle des Fehlers:

user@mashine:~/path/to/file> gnuplot yourfile.pgf-plot.gnuplot
set format "%.7e";; j=sqrt(-1) zc(f,c) = 1/(j*2*pi*f*c) zl(f,l) = j*2*pi*f*l zpar(z1,z2) = z1*z2/(z1+z2) zmodel(f,r,c) = zpar(r, zc(f,c)) azmodel(f) = abs(zmodel(f,R1,C1)) R1= 5.6e6 C1= 1e-9 plot azmodel(x) 
                               ^
"yourfile.pgf-plot.gnuplot", line 2: ';' expected

verwandte Informationen