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

如何向自定义beamer模板提供资源文件,r,latex,r-markdown,knitr,r-package,R,Latex,R Markdown,Knitr,R Package,首先,创建一个可复制的示例并不容易,因为我的问题涉及构建一个提供定制knitr格式的包。我希望我能把我的问题说清楚,并对你的想法感兴趣,如何最好地解决这个问题 问题 我正在编写一个包含定制knitr格式的R包(精确地说是格式化的beamer幻灯片)。 在这些beamer幻灯片中,我使用命令包含了一个*.stytex文件 \input{$resource$/thefile.sty} 其中,$resources$是我通过自定义格式函数提供的一个pandoc变量。这将决定 \input{/path/

首先,创建一个可复制的示例并不容易,因为我的问题涉及构建一个提供定制knitr格式的包。我希望我能把我的问题说清楚,并对你的想法感兴趣,如何最好地解决这个问题

问题

我正在编写一个包含定制knitr格式的R包(精确地说是格式化的beamer幻灯片)。 在这些beamer幻灯片中,我使用命令包含了一个
*.sty
tex文件

\input{$resource$/thefile.sty}
其中,
$resources$
是我通过自定义格式函数提供的一个pandoc变量。这将决定

\input{/path/to/packagelibrary/package/resources/thefile.sty}
当安装包时,从我的模板创建一个新的RMD文档并编织它时,
*.sty
确实可以在已安装的包目录中找到。但是LaTeX发出了警告

创建的输出:Untitled.pdf警告消息:LaTeX警告:
您已请求包“”,但该包提供了“thefile.sty”

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

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


我愿意听取任何关于如何解决这个问题的建议。

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

正如这个答案所示,在
\usepackage{}
调用中包含一个路径基本上利用了错误检查中的失败。你在日志中看到的警告是故意的

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

\makeatletter
\def\input@path{{$resource$/}}
\makeatother
\usepackage{thefile}
文件sty中
包括

\ProvidesPackage{thefile}
(请注意,这两个位置都不包括
.sty
扩展名。)


我说这有点脆弱,因为代码的其他部分可能正在使用
\input@path
。这里可以有多条路径,但我的TeX知识还不够深入,不知道如何在现有路径上添加额外的路径。我所能说的是,如果你从定义开始,你想以定义结束,但是它看起来有点脆弱

正如这个答案所示,在
\usepackage{}
调用中包含一个路径基本上利用了错误检查中的失败。你在日志中看到的警告是故意的

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

\makeatletter
\def\input@path{{$resource$/}}
\makeatother
\usepackage{thefile}
文件sty中
包括

\ProvidesPackage{thefile}
(请注意,这两个位置都不包括
.sty
扩展名。)


我说这有点脆弱,因为代码的其他部分可能正在使用
\input@path
。这里可以有多条路径,但我的TeX知识还不够深入,不知道如何在现有路径上添加额外的路径。我所能说的是,如果你从定义开始,你想以定义结束,你不想LaTeX风格的文件通常从
\ProviderPackage
开始吗?听起来好像您的
文件.sty
有类似的内容,但您是使用
\input
而不是
\usepackage
加载它的。
\usepackage{$resource$/thefile.sty}
会工作吗?不幸的是,这没有什么区别。警告仍然存在。我在某个地方读到,这与LaTeX解析文件路径有关,但找不到更多详细信息。
.sty
文件中的命令是
\ProvidesPackage{myfile.sty}
。我想这就是问题所在,因为这些文件通常位于本地texmf树中。@MartinSchmelzer它应该是
\ProvidesPackage{thefile}
(没有
.sty
)。我建议将你的.sty文件安装在tex可以自动找到的位置(例如,你的texmf树),这样你就不必担心任何路径。如果你把包放在某个在线的地方,也许我们可以尝试一下。LaTeX样式的文件不是通常以
\ProviderPackage
开头吗?听起来好像您的
文件.sty
有类似的内容,但您是使用
\input
而不是
\usepackage
加载它的。
\usepackage{$resource$/thefile.sty}
会工作吗?不幸的是,这没有什么区别。警告仍然存在。我在某个地方读到,这与LaTeX解析文件路径有关,但找不到更多详细信息。
.sty
文件中的命令是
\ProvidesPackage{myfile.sty}
。我想这就是问题所在,因为这些文件通常位于本地texmf树中。@MartinSchmelzer它应该是
\ProvidesPackage{thefile}
(没有
.sty
)。我建议将你的.sty文件安装在tex可以自动找到的位置(例如,你的texmf树),这样你就不必担心任何路径。如果你把包放在某个在线的地方,也许我们可以尝试一下。这很有效。这可能不是预期的方式,但我会使用它。我不明白为什么一开始就不打算包含使用绝对路径的包。不管怎样,谢谢。这很有效。这可能不是预期的方式,但我会使用它。我不明白为什么一开始就不打算包含使用绝对路径的包。无论如何,谢谢。