Использование кода gnuplot с несколькими строками кода в LaTeX

Использование кода gnuplot с несколькими строками кода в LaTeX

Я пытаюсь использовать несколько строк кода для построения графика с помощью gnuplot с \addplot gnuplot, однако это не работает и вывод графика не создается. Возможно ли вызвать файл с кодом или иметь несколько строк с объявлениями функций?

Спасибо!

PS: Работает простой онлайновый gnuplot (например, plot [-10:100] real(sin(x)**besj0(x))), его также shell-escapeнеобходимо включить.

Пример:

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

решение1

Вам необходимо добавить a ;в конец каждой строки gnuplot.

Причина: pgfplotsзаписывает файл yourfile.pgf-plot.gnuplot, который затем отправляется в gnuplot. Ваш код в нем написан в одну строку. Поэтому gnuplot не может различать отдельные назначения. С помощью ;в конце строк это можно исправить, и gnuplot создаст нужную таблицу ( 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}

Отказ от ответственности: Мне пришлось запустить gnuplot вручную, потому что что-то не так с моей установкой. Но он работал с точками с запятой, а без них — нет.

Редактировать: если вы запустите gnuplot из командной строки, он сообщит вам об этом, а ^во второй строке укажет на место ошибки:

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

Связанный контент