轮廓 gnuplots 的外部化

轮廓 gnuplots 的外部化

根据数据文件(XYZ.csv),我想在我的.tex 文件内绘制轮廓图。

我正在使用 lualatex 进行编译。
主要问题是 gnuplot 轮廓图与 lualatex 结合的外部化!

首先,让我向你展示一下我的主要文件:

% !TEX program = lualatex
\documentclass{scrartcl}

\usepackage{lipsum}

\usepackage{tikz}
    % define global foldernames for input and output
    \def\folderINP{figINP}
    \def\folderOUT{figOUT}
    % load library
    \usetikzlibrary{external}
    % set LuaLaTeX for externalization
    \tikzexternalize[shell escape=-enable-write18]
    \tikzset{%
        external/system call ={lualatex \tikzexternalcheckshellescape -halt-on-error -interaction=batchmode -jobname "\image" "\texsource"}
    }
    % folder prefix for externalization
    \tikzsetexternalprefix{\folderOUT/Fig}
    % new command for 'auto-filename' for externalized graphics
    \newcommand{\includefigure}[1]{%
        \tikzsetnextfilename{#1}%
        \input{\folderINP/#1.tex}%
    }

\usepackage{pgfplots}
\pgfplotsset{compat=newest}

\usepackage{pgfplotstable}
\pgfplotstableset{%
    col sep=semicolon,
    x index=0,
    y index=1,
    header=false
}%

\begin{filecontents*}{data/XYZ.csv}
    1.000000 ; 1.000000 ; 2.035000
    1.000000 ; 2.000000 ; 2.410000
    1.000000 ; 3.000000 ; 2.657000
    1.000000 ; 4.000000 ; 2.793000
    1.000000 ; 5.000000 ; 3.144000
    1.000000 ; 6.000000 ; 3.245000

    2.000000 ; 1.000000 ; 3.447500
    2.000000 ; 2.000000 ; 4.077500
    2.000000 ; 3.000000 ; 4.510000
    2.000000 ; 4.000000 ; 4.600500
    2.000000 ; 5.000000 ; 5.419000
    2.000000 ; 6.000000 ; 5.591000

    3.000000 ; 1.000000 ; 4.886000
    3.000000 ; 2.000000 ; 5.571000
    3.000000 ; 3.000000 ; 5.763000
    3.000000 ; 4.000000 ; 6.438500
    3.000000 ; 5.000000 ; 7.287000
    3.000000 ; 6.000000 ; 7.390000
\end{filecontents*}

\begin{document}    

\lipsum[1]
\begin{figure}[ht!]
    \centering
    \tikzset{external/export=false}
    \includefigure{contour}
\end{figure}

\end{document}

命令中加载的图形本身(contour.tex)\includefigure如下所示:

%!TEX root=../main.tex
\begin{tikzpicture}
    \begin{axis}[view = {0}{90}]%
        \addplot3[%
            surf,shader=interp,opacity=0.8
        ] table {data/XYZ.csv};
        \addplot3[%
            contour gnuplot={levels={0.0,5.0,10.0,15.0,20.0},draw color=black},
        ] table {data/XYZ.csv};
    \end{axis}
\end{tikzpicture}

如果您编译这些代码片段,则应该不会有任何问题(因为 tikzpicture 不会由于命令而被外部化\tikzset{external/export=false}

评论:
为了完成这个最小的工作,一个文件夹数据, 一个文件夹神经性磷酸化和一个文件夹出图必须与主文本文件。文件夹内神经性磷酸化文件轮廓线.tex必须得救。


问题是这样的:
如果我想外部化这个轮廓图(通过删除带有的行\tikzset{external/export=false}),它不起作用!在我看来,原因是 gunpop 的临时文件的位置(。桌子。脚本.dat) 因为它们是在与 main.tex 文件相同的级别上创建的,而不是在出图文件夹和其他文件夹一样。有没有办法告诉 gnuplot 在文件夹中创建这些文件出图以便使它们可用于编译过程?

日志文件中记录的错误是:

! Package pgfplots Error: sorry, plot file{figOUT/Figcontour_contourtmp0.table}
could not be opened.

(因为它不存在于文件夹 figOUT 中。它存在于上一级,但名称不正确……名称是主轮廓tmp0.表


最后评论:
我可以告诉你,一切都基于路拉泰克斯编译,因为如果我用pdflatex一切安好。

解决方案是以某种方式告诉 lualatex 编译的 shell 转义重命名并存储 gnuplot 的所有文件。

答案1

这是由于external库中的一个错误造成的。它已在 PGF CVS 中修复。

为了克服这个弱点,你有两个选择:

1.使用合适的版本pgfplots并替换\usetikzlibrary{external}\usepgfplotslibrary{external}(也包含错误修复)或

2.使用方法:

\tikzset{%
    external/system call ={lualatex -enable-write18 -halt-on-error -interaction=batchmode -jobname "\image" "\texsource"}
}

相关内容