独立文件内的包含文件的路径问题

独立文件内的包含文件的路径问题

如何获取所包含的独立文件中的当前路径?

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}

相关内容