2

我目前正在研究将在几周内提交给 CRAN 的 R 包。该包需要一些乳胶包才能运行。这些乳胶包在 CTAN 上可用,并通过rmarkdown::latex_dependency().

这是我实际 knit_print 方法的概念。

#' @export
knit_print.my_class <- function(obj, ...) {
  knitr::raw_latex(
    to_latex(obj), 
    meta = list(
      rmakrdown::latex_dependency(
        "ragged2e"
      )
    )
  )
}

我的问题是如何以某种方式指定这些依赖项,以便 CRAN 接受此提交。据我所知,有四种选择

  1. 按原样提交包,并通过说明文件的文档和SystemRequirements字段添加安装说明。
  2. 在我的 R 包中包含所有必要的乳胶包,并以某种方式使它们可用于客户端的乳胶编译器
  3. 向tinytex添加一个依赖,它可以自动安装 CTAN 包
  4. 如果不满足依赖关系,则在安装过程中抛出错误

到目前为止,我使用了选项(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 sumbissions 仅产生有关 C 和 C++ 依赖项的信息,这对我的事业没有帮助。
  • 查看一些源代码发现直接rticles包含某些.sty文件,inst/这让我相信,(2)是正确的答案。但是,rticles定义了自定义输出格式并且那些不必“安装”乳胶包,因为.sty文件作为模板的一部分被复制到渲染目录。
  • magick使用一个配置文件来阻止安装,以防(系统)依赖项不满足。它还会抛出一条信息性错误消息,指示客户端如何满足依赖关系。
  • tinytex 包在提交时没有在 CRAN 上运行任何编译测试。我也不能让tinytex在appveyor上工作
4

1 回答 1

2

我相当熟悉CRAN 存储库策略,并且通常没有规定CRAN 等 外部依赖项。

也就是说,我通过根据需要从 GitHub 上下载预先构建的库来扩展 CRAN。之后你可以为你的包建模。

但我真正认为你应该做的是......在本地准备你的 pdf 小插图,然后让 R 包按原样“注入”它。如何做到这一点在Mark 的这篇文章中进行了解释,我刚刚转换了我的RcppAnnoy包来做到这一点。当然,YMMV。

于 2019-05-25T01:15:43.123 回答