向CRAN提交具有CTAN依赖关系的R包

时间:2019-05-25 00:54:28

标签: r latex packaging cran external-dependencies

我目前正在研究一个R包,它将在几周内提交给CRAN。该软件包需要一些乳胶软件包才能运行。这些乳胶软件包可在CTAN上获得,并通过rmarkdown::latex_dependency()注入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接受此提交的方式指定那些依赖项。据我所知,有四个选项

  1. 按原样提交软件包,并通过文档和DESCRIPTION文件的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总结仅产生有关C和C ++依赖关系的信息,这对我的事业没有帮助。
  • 通过查看某些源代码,我们发现rticles直接在.sty中包含某些inst/文件,这使我相信(2)是正确的答案。但是,rticles定义了自定义输出格式,并且由于.sty文件已作为模板的一部分复制到渲染目录,因此不必“安装”乳胶程序包。
  • magick使用一个配置文件,该文件可在不满足(系统)依赖性的情况下阻止安装。它还会抛出一条提示性错误消息,指示客户端如何才能满足依赖关系。
  • tinytex软件包在提交时未在CRAN上运行任何编译测试。我也无法使tinytex在appveyor上正常工作

1 个答案:

答案 0 :(得分:2)

我对CRAN Repository Policy相当熟悉,并且通常没有CRAN等提供的外部依赖项

这表示我可以根据需要从GitHub上下载预构建的库,从而对CRAN有所帮助。之后,您可以为您的包裹建模。

但是我真正认为您应该做的是……在本地准备pdf小插图,然后让R包按原样“注入”。例如,在this post by Mark中已说明了如何执行此操作,而我只是将RcppAnnoy程序包转换为执行此操作。当然是YMMV。