![轮廓 gnuplots 的外部化](https://linux22.com/image/305431/%E8%BD%AE%E5%BB%93%20gnuplots%20%E7%9A%84%E5%A4%96%E9%83%A8%E5%8C%96.png)
根据数据文件(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"}
}