我如何以多种格式生成R包vignette?

21

我使用knitrrmarkdown编写R包的示例文档。得益于pandoc的魔力,将这些文档转换成各种格式非常容易。我希望可以利用这一点,将示例文档提供为HTML和PDF两种格式。在文档元数据块中,rmarkdown支持指定多个输出格式的参数设置。例如,我可以像这样设置:

output:
  html_document:
    standalone: true
    smart: true
    normalize: true
    toc: true
    highlight: tango
    self-contained: true
    theme: cerulean
  pdf_document:
    toc: true
    highlight: tango
geometry: margin=2cm
documentclass: article
classoption: a4paper

从R命令行,我可以使用rmarkdown::render来构建输出文档,而且单独构建任意一个或两个都没有问题。但是,当只构建软件包时,只使用列在第一位的输出格式。我尝试使用Makefile来构建两个文件,类似于以下内容:

all: output1.pdf output2.html
output1.pdf output2.html : input.Rmd
  rmarkdown::render("$<", output_format = c("pdf_document", "html_document"))

all: %.Rmd
    $(R_HOME)/bin/Rscript -e "rmarkdown::render('$*.Rmd', 'all')"

在这种情况下,所有输出文件都已生成,但只有一个被R视为vignette,即成功。要将其他输出包含在docs/中,它们必须添加到.install_extras中。虽然这确保它们可以通过HTML索引访问,但它们被单独列出,不与vignettes一起列出,我认为无法通过vignette()从R中访问。

是否有更好的方法(或任何自动化的方法)来做到这一点?


2
请注意,这与 https://github.com/yihui/knitr/issues/1051 是同一个问题。 - Yihui Xie
感谢@Yihui。很高兴知道你正在研究这个问题。你有机会调查了吗?特别是关于与R CMD check的兼容性,似乎是关于可行性的一个重要问题。 - Peter Humburg
你可以尝试在makefile中添加代码行来切换html到pdf。生成vignette后,使用sed命令将html切换为pdf,重新生成文件,然后再切换回来。 - Josh
@Josh,问题在于R坚持认为每个小品文源文件应该产生一个输出文件。虽然可以通过在*.install_extras*中列出它们来生成额外的输出并将它们复制到docs/,但它们并不被视为小品文。 - Peter Humburg
你可以复制你的小品文。保留原始输出的HTML文件,并创建一个*.pdf.Rmd版本。Makefile是一个很好的地方来完成这个任务。 - Josh
1个回答

2

两个方案:

  1. 你可以“包含”公共内容,并有两个具有不同标头的源文件,或者

  2. 如果额外的小册子真的没有出现在索引中,请自己编写。来自Writing R extensions:“在安装时,除非目录inst / doc中存在文件index.html,否则将从\VignetteIndexEntry语句自动创建软件包中所有小册子的HTML索引。该索引链接到软件包的HTML帮助索引。”小册子索引条目也可能是使您可能具有相同名称的小册子被识别为不同的线索。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接