如何获取所包含的独立文件中的当前路径?
1.理论示例:
我们假设以下目录结构:
main.tex
img/
|-standalonefile.tex
|-data
独立文件.tex:
\documentclass{standalone}
\begin{document}
\somecommand{data}
\end{document}
主文本:
\documentclass{article}
\usepackage{standalone}
\begin{document}
\includestandalone{img/standalonefile}
\end{document}
现在standalonefile.tex
可以编译,但main.tex
找不到data
。我找不到在\includestandalone
内部使用路径的方法standalonefile.tex
。
2. 实际示例pgfplots
(MWE)(我正在寻找一个通用的解决方案)
目录结构:
main.tex
plots/
|- plot1/
|- plot1.tex
|- data.csv
主文本
\documentclass{article}
\usepackage[subpreambles]{standalone}
\begin{document}
\includestandalone{plots/plot1/plot1}
\end{document}
图1.tex
\documentclass{standalone}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}
\addplot table [x=x, y=y, col sep=semicolon]{data.csv};
\end{axis}
\end{tikzpicture}
\end{document}
数据.csv
x;y
0;0
1;1
现在plot1.tex
可以编译,但main.tex
无法data.csv
找到。
解决方案的想法
- 这样的命令
\mystandalonedir
将返回- 主文件的相对路径(如果包含)
\includestandalone
- 如果没有包含,则无
- 主文件的相对路径(如果包含)
- 以某种方式改变基本目录
\includestandalone
- (或者是其他东西 ;) )
答案1
我的答案可能不太优雅,但大致上这是我处理自己文件这个问题的方法。基本思路是设置一个路径宏\datapath
。
对于您给出的实例,我建议如下:
主文本
\documentclass{article}
\usepackage[subpreambles]{standalone}
\newcommand{\includestandalonewithpath}[3][]{%
\begingroup%
\newcommand{\datapath}{#2}%
\includestandalone[#1]{\datapath/#3}%
\endgroup}
\begin{document}
\includestandalonewithpath{plots/plot1}{plot1}
\end{document}
图1.tex
\providecommand{\datapath}{.}
\documentclass{standalone}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}
\addplot table [x=x, y=y, col sep=semicolon]{\datapath/data.csv};
\end{axis}
\end{tikzpicture}
\end{document}
如果您的数据文件位于相对于图1.tex例如
plots/plot1/data/data.csv
然后,你将拥有:
\addplot table [x=x, y=y, col sep=semicolon]{\datapath/data/data.csv};
答案2
我只是将 Thomas F. Sturm 的答案与自动字符串分割结合起来。此方法\includestandalonewithpath
可以像 一样使用\includestandalone
。
主文本
\documentclass{article}
\usepackage[subpreambles]{standalone}
\usepackage{xstring}
\newcommand{\includestandalonewithpath}[2][]{%
\begingroup%
\StrCount{#2}{/}[\matches]%
\StrBefore[\matches]{#2}{/}[\datapath]%
\includestandalone[#1]{#2}%
\endgroup%
}
\begin{document}
\includestandalonewithpath{plots/plot1/plot1}
\end{document}
图1.tex
\documentclass{standalone}
\providecommand{\datapath}{.}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}
\addplot table [x=x, y=y, col sep=semicolon]{\datapath/data.csv};
\end{axis}
\end{tikzpicture}
\end{document}