我想使用包standalone
和PGFPlots
和TikZ
来生成图形。具体来说,我希望在构建主文档时使用buildmissing
包选项仅在缺少图形时才生成standalone
图形,但同时,如果我正在处理它们,我想单独生成它们。但是,如果图形位于子目录中,我似乎无法使其工作。
./
├── figures/
│ ├── sub.csv
│ └── sub.tex
├── main.tex
├── same.csv
└── same.tex
主要文件为main.tex
:
\documentclass{article}
\usepackage[mode=buildmissing]{standalone}
\begin{document}
Same directory:
\includestandalone{same}
Sub directory:
\includestandalone{figures/sub}
\end{document}
同一目录中的独立图形为same.tex
:
\documentclass[tikz,crop]{standalone}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}
\addplot+ table [col sep=comma, x=x, y=y] {same.csv};
\end{axis}
\end{tikzpicture}
\end{document}
同一目录中的独立图形从以下位置读取 CSV 数据same.csv
:
x,y
1,2
3,4
5,6
7,8
9,0
子目录中的独立图形为figures/sub.tex
:
\documentclass[tikz,crop]{standalone}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}
\addplot+ table [col sep=comma, x=x, y=y] {sub.csv};
\end{axis}
\end{tikzpicture}
\end{document}
子目录中的独立图形从以下位置读取 CSV 数据figures/sub.csv
:
x,y
1,-2
3,-4
5,-6
7,-8
9,-0
如果我手动编译这些图,一切都会正常进行,并生成 PDF 文件。如果我随后编译主文档,则会包含这些 PDF 文件。
但是,如果我在手动编译图形之前编译主文档,则只有第一个文档可以正确生成。第二个文档会生成一个空图,因为它无法访问文件sub.csv
。据我所知,相对路径始终被视为相对于初始文档,但在这种情况下,初始文档位于两个不同的目录中,具体取决于我是否编译主文档或独立图形。
我用作PGFPlots
示例,但如果我想包含任何其他带有\input{}
或 的文件,也会出现此问题\include{}
。例如,我有时有一个包含首字母缩略词和字体的通用序言,我想在主文档和图形中使用它们,但我无法从两个文件中都包含它并使其正常工作。
答案1
我用的是currfile
\currfiledir
包来解决这个问题。您可以在您的sub.tex
构建绝对路径中使用。
figures/sub.tex
:
\documentclass[tikz,crop]{standalone}
\usepackage{currfile}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}
\addplot+ table [col sep=comma, x=x, y=y] {\currfiledir sub.csv};
\end{axis}
\end{tikzpicture}
\end{document}
确保也导入了currfile
您的main.tex
。