包裹进口使得\input
(和\include
) 一个.tex
文档成为可能,该文档本身\input
(或\includegraphics
等) 使用相对路径进行填充。我希望这也适用于\addplot file
中的pgfplots
,但事实并非如此。有没有办法在 中使用相对路径pgfplots
?
失败的例子:将 main.tex 放在任意位置并编辑fig.tex
.- 文件的路径fig.tex
,input.tex
并plot.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
但它可以完成工作。
编辑
我的解决方案至少可以追溯到这个问题。