首先,创建可重现的示例并不容易,因为我的问题与构建提供自定义编织格式的包有关。我希望我可以清楚地解决问题,并对你的想法感兴趣如何解决这个问题。
问题
我正在写一个包含自定义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/
文件夹中。
我想过将这些资源复制到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}}
。