beamer 模板中 `pgfimages` 的路径

beamer 模板中 `pgfimages` 的路径

我正在为我的研究所制作一个 beamer 模板,用于\pgfdeclareimage处理图像。我为不同的项目/实验/小组制作了很多图像和徽标,我将文件组织为

主 文件
夹 /-example.tex-beamerthememy.sty-art/myexample.pdf

现在的问题是如何声明图像。使用

\pgfdeclareimage[width=.5\paperwidth]{test}{art/myexample.pdf} 

适用于与文件和目录.tex位于同一文件夹中的文件。.styart

但是当我将.sty文件和art目录放在我的$TEXMFHOME目录中(并将.tex文件放在其他地方)时,我必须使用

\pgfdeclareimage[width=.5\paperwidth]{test}{myexample.pdf}

有没有一种方法可以声明在两种情况下都有效的图像?


\documentclass{beamer}

% works if .tex file is in the same directory as the .sty file and `testdir`
\pgfdeclareimage[width=.5\paperwidth]{test}{art/myexample.pdf}  

% works if .sty file and `textdir` are in my lokal `texmf` folder
%\pgfdeclareimage[width=.5\paperwidth]{test}{myexample.pdf}     

\begin{document}

    \begin{frame}
         \pgfuseimage{test}
    \end{frame} 

\end{document}

为了使示例简洁,我将示例\pgfdeclareimage.sty文件移到了.tex文件。如果你觉得这太简单了,我会添加一个 .sty 文件

答案1

简而言之,如果您向 传递的不仅仅是文件名(路径)pgfdeclareimagepdflatex它就会在那里查找。否则,它会在完整的搜索路径中查找,该路径通常在环境变量中指定TEXINPUTS

因此,一个简单的解决方案就是添加到./artTEXINPUTS然后只需使用文件名即可pdfdeclareimage

但是,由于这是一个可重复使用的模板,因此您必须考虑用户。例如,MikTeX 处理搜索路径的方式不同,许多用户很难摆弄环境变量,尤其是在使用某些 LaTeX-IDE 时。因此,为了易于使用,我会尝试在模板本身中处理这个问题:

\documentclass{beamer}

\newcommand{\samdeclareimage}[3][]{%
  % first check local art directory to prefer it over TEXINPUTS paths
  \IfFileExists{./art/#3}{%
    \pgfdeclareimage[#1]{#2}{./art/#3}%
  }{%
    % check if we can found it in TEXINPUTS
    \IfFileExists{#3}{%
      \pgfdeclareimage[#1]{#2}{#3}%
    }{%
      \GenericError{}{Theme image #3 not found!}{Consult Sam for all the details, but pressing 'H' might give you the right hint.}{The file '#3' has to be available either in a local 'art' directory or somehwere in your TEXMF tree.}
    }%
  }%
}%

\samdeclareimage[width=.5\paperwidth]{test}{myexample.pdf}  

\begin{document}

    \begin{frame}
         \pgfuseimage{test}
    \end{frame} 

\end{document}

相关内容