# Path problem with included file inside of a standalone file

How can I get the current path inside an included standalone file?

1. Theoretical Example:

let's assume the following directory structure:

main.tex
img/
|-standalonefile.tex
|-data


standalonefile.tex:

\documentclass{standalone}

\begin{document}
\somecommand{data}
\end{document}


main.tex:

\documentclass{article}

\usepackage{standalone}

\begin{document}
\includestandalone{img/standalonefile}
\end{document}


Now standalonefile.tex compiles, but main.tex can't find data. I couldn't find a way to use path from \includestandalone somehow inside standalonefile.tex.

2. Practical example with pgfplots (MWE) (I'm looking for a general solution)

directory structure:

main.tex
plots/
|- plot1/
|- plot1.tex
|- data.csv


main.tex

\documentclass{article}

\usepackage[subpreambles]{standalone}

\begin{document}
\includestandalone{plots/plot1/plot1}
\end{document}


plot1.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}


data.csv

x;y
0;0
1;1


Now plot1.tex compiles fine, but with main.tex the data.csv can't be found.

Ideas for a solution

• a command like \mystandalonedir that would return
• the relative path to the main file, if included with \includestandalone
• nothing, if not included
• change the base dir somehow with the \includestandalone
• (or something else ;) )
• – jub0bs Dec 1 '13 at 19:59
• Oh, I see closing votes ;) If I read the suggested page correctly the solutions over there are only for \input an \include commands. But I'll take another look at it. – someonr Dec 1 '13 at 20:49
• I don't think it's a duplicate. A solution to your problem would involve some patching of \includestandalone. If your question gets closed, I'll vote to reopen it. Martin Scharrer is the author of the standalone package and a moderator on the site. If he sees your question, I'm sure he'll come up with some solution. – jub0bs Dec 1 '13 at 20:50
• With docmute+import packages in the main file you can use \subimport{img/}{standalonefile}. Note that in this case the preamble of the nested file is lost (among another problems like references) but you can \input a common preamble in both files. – Fran Dec 4 '13 at 11:56

My answer is possibly not a very elegant one, but it's roughly the way I handle this problem with my own files. The basic idea is to set up a path macro \datapath.

For your given practical example, I suggest the following:

main.tex

\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}


plot1.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}


This solution will also work, if your data file is in a subdirectory relative to plot1.tex, e.g.

plots/plot1/data/data.csv


Then, you would have:

\addplot table [x=x, y=y, col sep=semicolon]{\datapath/data/data.csv};

• thank you! I just awarded the bounty to you and extended your solution with some string splitting. – someonr Dec 23 '13 at 12:14

I just combined Thomas F. Sturm answer with automatic string splitting. This way \includestandalonewithpath can be used the same way as \includestandalone.

main.tex

\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}


plot1.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}