其实这个是我一直没想好怎么解决的一个问题,想听下大家的意见。问题很简单,放在 Github 上的 R 包通常会带一个 README.md,如果想在其中插入图片,一个很自然的想法就是在包里面建一个文件夹,然后在 README.md 中用相对路径引用。

但问题来了,这个图片文件夹应该怎么放呢?如果是 <package root>/images,那么 CRAN 会警告,因为 images 不是 R 包的标准文件夹。CRAN 允许放 <package root>/inst/images,但问题在于,安装后的包,会把 images 移动到 <package root> 下面,因此安装后 README.md 里面的路径就错了,这也会影响到 CRAN 上 R 包的 README 页面。也就是说,Github 上的 README.md 和 CRAN 上包的 README 没法同时指向正确的路径。这要怎么破?之前我都是把图片上传网盘,不知道有没有用包内图片的方法?

我的 ecce 包有一个 logo,我把它放在 ./man/figures/ 路径下。其他的图片放在某个网站上连接过来应该没啥问题,貌似官方对 README.md 文档的审核没那么严格,我曾今把 logo.pngREADME.md 文件里误写为 logo.PNG,依然通过了 CRAN 审核,后来我赶紧提交了更新版,并发邮件说明了情况。

    如果图片是R代码产生的,可以考虑usethis::use_readme_rmd(),这样默认会生成一个Rmd文档,里面会预配置产生图片的位置,写完了直接devtools::build_readme()就可以生成需要的md文档了,而且默认也会在.Rbuildignore文件里排除掉Rmd文档。图片位置默认就是在man文件夹里。如果不是R代码产生的就无所谓了,怎么方便怎么来。

    knitr::opts_chunk$set(
      collapse = TRUE,
      comment = "#>",
      fig.path = "man/figures/README-",
      out. Width = "100%"
    )

    man/figures/ 存图片的具体规则在 Writing R Extension 里有提到:

    The files containing the figures should be stored in the directory man/figures. Files with extensions .jpg, .jpeg, .pdf, .png and .svg from that directory will be copied to the help/figures directory at install time. (Figures in PDF format will not display in most HTML browsers, but might be the best choice in reference manuals.) Specify the filename relative to man/figures in the \figure directive.

    大概弄明白了,CRAN 上生成的 README 也是基于源码包的路径,比如 ggplot2 的 logo,在 CRAN 的 README 页面 用的是 <img src="man/figures/logo.png">,跟 Github 的 README.md 一样。