我目前正在开发一个 R 包,该包将在几周内提交给 CRAN。该包需要一些 latex 包才能运行。这些 Latex 包可在 CTAN 上找到,并通过 rmarkdown::latex_dependency()
注入(inject)到 RMarkdown 文档的序言中。
这就是我的actual knit_print method的理念.
#' @export
knit_print.my_class <- function(obj, ...) {
knitr::raw_latex(
to_latex(obj),
meta = list(
rmakrdown::latex_dependency(
"ragged2e"
)
)
)
}
我的问题是如何以 CRAN 接受此提交的方式指定这些依赖项。据我所知,有四种选择
- 按原样提交软件包,并通过文档和描述文件的
SystemRequirements
字段添加安装说明。 - 在我的 R 包中包含所有必需的 Latex 包,并以某种方式使它们可供客户端的 Latex 编译器使用
- 添加依赖项 tinytex可以自动安装CTAN包
- 如果不满足依赖项,则在安装过程中抛出错误
到目前为止,我使用了选项(1)。
我的 travis (ubuntu 14.04) 配置是
apt install texlive-latex-extra
tlmgr install standalone
对于 appveyor (Windows Server 2012 R2 x64),我解压缩 miktex-portable.exe
并将其添加到 PATH。然后我得到以下包。
mpm --install=standalone
mpm --install=ms
mpm --install=pbox
mpm --install=xcolor
mpm --install=colortbl
mpm --install=mptopdf
到目前为止我发现了什么
- 使用 Google 搜索外部依赖项和 CRAN 提交仅产生有关 C 和 C++ 依赖项的信息,这对我的事业没有帮助。
- 查看一些源代码发现
articles
直接在inst/
中包含某些.sty
文件,这让我相信,(2 )是正确答案。但是,文章定义了自定义输出格式,并且不必“安装” latex 包,因为.sty
文件作为模板的一部分复制到渲染目录. - magick使用配置文件,在不满足(系统)依赖性的情况下阻止安装。它还会抛出一条信息丰富的错误消息,指示客户端如何满足依赖关系。
- tinytex 包在提交时没有在 CRAN 上运行任何编译测试。我也无法让tinytex在appveyor上工作
最佳答案
我对CRAN Repository Policy相当熟悉并且通常不提供 CRAN 等的外部依赖。
也就是说,我根据需要从 GitHub 下载预构建的库,对 CRAN 进行了一些扩展。之后您可以为您的包建模。
但我真正认为你应该做的是......在本地准备你的 pdf 小插图,然后让 R 包按原样“注入(inject)”它。例如 this post by Mark 中解释了如何做到这一点我刚刚转换了我的 RcppAnnoy包来做到这一点。当然,YMMV。
关于r - 将具有 CTAN 依赖项的 R 包提交给 CRAN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56300873/