LaTeX에서 여러 코드 줄과 함께 gnuplot 코드 사용

LaTeX에서 여러 코드 줄과 함께 gnuplot 코드 사용

여러 줄의 코드를 사용하여 gnuplot을 사용하여 플롯하려고 합니다 \addplot gnuplot. 그러나 이 방법은 작동하지 않으며 플롯 출력이 생성되지 않습니다. 코드가 포함된 파일을 호출하거나 함수 선언이 포함된 여러 줄을 포함하는 것이 가능합니까?

감사해요!

추신: 간단한 온라인 gnuplot이 작동합니다(예: 플롯 [-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

;각 gnuplot 줄 끝에 a를 추가해야 합니다 .

이유: 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

관련 정보