字符串连接宏用于在 pgfplots groupplots 中查找文件

字符串连接宏用于在 pgfplots groupplots 中查找文件

我在使用 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,以消除不必要的临时变量。

相关内容