使用相对路径导入输入 pgfplots

使用相对路径导入输入 pgfplots

包裹进口使得\input(和\include) 一个.tex文档成为可能,该文档本身\input(或\includegraphics等) 使用相对路径进行填充。我希望这也适用于\addplot file中的pgfplots,但事实并非如此。有没有办法在 中使用相对路径pgfplots


失败的例子:将 main.tex 放在任意位置并编辑fig.tex.- 文件的路径fig.texinput.texplot.dat放在同一目录中。我可以编译独立版本fig.tex,但main.tex找不到plot.dat

main.tex

\documentclass{article}
\usepackage{import}
\usepackage{standalone}
\usepackage{pgfplots}
\begin{document}
mainMain
\import{\absolute\path\to\fig.tex}{fig.tex}
\end{document}

fig.tex

\documentclass{standalone}
\usepackage{pgfplots}
\begin{document}
\input{input.tex}  %this is ok
\begin{tikzpicture}
  \begin{axis}
    \addplot file {plot.dat};  %this is not working
  \end{axis}
\end{tikzpicture}
\end{document}

input.tex

anything

plot.dat

1   2

答案1

Pgfplots 逐行处理输入文件,而使用\input或 则无法实现此要求\include。因此,pgfplots 使用\read(低级 TeX 宏) 来完成这项工作。

pgfplots 不支持所请求的功能,需要另行实现。

请注意,虽然 pgfplots 不以编程方式支持它,但您仍然可以修改 TEXINPUTS 变量(即 TeX 全局使用的文件搜索路径):这也将允许 pgfplots 找到您的文件。这在 unix 系统上特别简单(有人知道 miktex 是否也尊重这个变量吗?)。这里的主要思想是将环境变量设置为/your/path:/your/other/path:。注意最后的冒号(:):它告诉 TeX 在此位置附加系统路径。

答案2

看着这是 pgfplots 的功能请求,我发现了这个老问题。我曾经偶然发现了这个问题并找到了解决方案(不幸的是,我没有记录解决方案的来源,我猜不是完全来自我自己)。它并不完美,但有效。我定义了以下宏

\makeatletter
\def\relativepath{\import@path}
\makeatother

每次使用数据文件时都会使用它:

\documentclass{standalone}
\usepackage{pgfplots}
\begin{document}
\input{input.tex}  %this is ok
\begin{tikzpicture}
  \begin{axis}
    \addplot file {\relativepath plot.dat};  %this is not working
  \end{axis}
\end{tikzpicture}
\end{document}

它并不完美,我不喜欢添加宏\relativepath,它是一种import解决方案,pgfplots但它可以完成工作。

编辑

我的解决方案至少可以追溯到这个问题

相关内容