我在使用 pgfplots 时遇到了一个奇怪的问题,并使用宏将字符串返回到要包含的文件。
MWE 代码:
\documentclass[a4paper,10pt]{article}
\usepackage{pgfplots}
\usepgfplotslibrary{groupplots}
\newenvironment{type}[1]{%
\newcommand\getFile[1]{%
directory1/#1/##1}
}{}
\begin{document}
\begin{type}{directory2}
File:
\begin{tikzpicture}[baseline]
\begin{groupplot}[
group style={
group size=2 by 1,
},
]
\nextgroupplot
\addplot graphics[
xmin=0,
xmax=100,
ymin=0,
ymax=100,
] {directory1/directory2/test_1.eps};
\nextgroupplot
\addplot graphics[
xmin=0,
xmax=100,
ymin=0,
ymax=100,
] {\getFile{test_1.eps}};
\end{groupplot}
\end{tikzpicture}
\end{type}
\end{document}
错误:
LaTeX Error: File `directory1/directory2/test_1.eps' not found.
See the LaTeX manual or LaTeX Companion for explanation.
Type H <return> for immediate help.
...
l.33 \end{groupplot}
注释掉第二个图,第一个图就可以正常工作,因此文件就在那里,可以找到目录,并且 pgfplots 可以很好地包含文件。使用宏包含第二个图会返回正确的文件(错误中是这么说的),但它找不到它。
答案1
该问题似乎是pgfplots
和相互作用中的扩展问题\includegraphics
。
它可以简化为以下最小工作示例:
\documentclass{standalone}
\usepackage{graphics}
\newenvironment{type}[1]{%
\newcommand\getFile[1]{%
directory1/#1/##1}
}{}
\begin{document}
\begin{type}{directory2}
File:
\def\TEMP{\getFile{P.pdf}}
\includegraphics{\TEMP}
\end{type}
\end{document}
这正是pgfplots
导致\includegraphics
——失败的原因。显然,\includegraphics
无法正确扩展宏。我深入研究后发现,它可以处理一扩展级别,但不是两个。
然而,它手柄当它自动附加文件扩展名时进行扩展——以下示例效果很好:
\documentclass{standalone}
\usepackage{graphics}
\newenvironment{type}[1]{%
\newcommand\getFile[1]{%
directory1/#1/##1}
}{}
\begin{document}
\begin{type}{directory2}
File:
\def\TEMP{\getFile{P}}
\includegraphics{\TEMP}
\end{type}
\end{document}
因此,适合您的解决方案是:使用\getFile{test_1}
而不是\getFile{test_1.eps}
。
\documentclass[a4paper,10pt]{article}
\usepackage{pgfplots}
\usepgfplotslibrary{groupplots}
\newenvironment{type}[1]{%
\newcommand\getFile[1]{%
directory1/#1/##1}
}{}
\begin{document}
\begin{type}{directory2}
File:
\begin{tikzpicture}[baseline]
\begin{groupplot}[
group style={
group size=2 by 1,
},
]
\nextgroupplot
\addplot graphics[
xmin=0,
xmax=100,
ymin=0,
ymax=100,
] {directory1/directory2/test_1.eps};
\nextgroupplot
\addplot graphics[
xmin=0,
xmax=100,
ymin=0,
ymax=100,
] {\getFile{test_1}};
\end{groupplot}
\end{tikzpicture}
\end{type}
\end{document}
我将修改这样的代码库pgfplots
,以消除不必要的临时变量。