如何向自定义 beamer 模板提供资源文件

How to provide resource files to a custom beamer template

首先,创建一个可重现的示例并不容易,因为我的问题与构建提供自定义 knitr 格式的包有关。我希望我能把我的问题说清楚,并且对你如何最好地解决这个问题的想法很感兴趣。

问题

我正在编写一个包含自定义 knitr 格式的 R 包(准确地说是格式化的 beamer 幻灯片)。 在这些 beamer 幻灯片中,我使用命令

包含了一个 *.sty tex 文件
\input{$resource$/thefile.sty}

其中 $resources$ 是我通过自定义格式函数提供的 pandoc 变量。这将解析为

\input{/path/to/packagelibrary/package/resources/thefile.sty}

安装包时,从我的模板创建一个新的 RMD 文档并编织它,*.sty 确实在安装包目录中找到。但是 LaTeX 抛出警告

Output created: Untitled.pdf Warning message: LaTeX Warning(s):
You have requested package `', but the package provides `thefile.sty'

我知道这只是一个警告,但如果可能的话我也想消除这些。我说 这些,因为最后我有多个文件位于 inst/rmarkdown/templates/mytemplate/resources/ 文件夹中。

我考虑过将这些资源复制到 intermediates 文件夹中,以便之后删除它们。但我不确定这是否可能,甚至是可取的。

我愿意就如何解决这个问题提出任何建议。

有一种方法可以做到,但它看起来有点脆弱。

正如这个答案 https://tex.stackexchange.com/a/124013 所示,在 \usepackage{} 调用中包含一个路径基本上是利用错误检查失败。您在日志中看到的警告是设计使然。

这里有一个解决这个问题的方法,可能对你有用。在调用 LaTeX 之前将此代码放入 .tex 文件中,它会在正确的位置查找您的样式文件而不给出警告:

\makeatletter
\def\input@path{{$resource$/}}
\makeatother
\usepackage{thefile}

并在 thefile.sty 中包含

\ProvidesPackage{thefile}

(请注意,您没有在任何地方包含 .sty 扩展名。)

我说这有点脆弱,因为代码的某些其他部分可能会影响 \input@path。你可以在那里有不止一条路径,但我的 TeX 知识还不够深,不知道如何向现有路径添加一条额外路径。我只能说,如果您从定义 {{a}} 开始,您希望以定义 {{$resource$/}{a}}.

结束