在R包中使用静态(预建)PDF小插图

时间:2013-10-31 20:59:53

标签: r cran

从R 3.0开始,在CRAN包中包含静态PDF文件作为“晕影”的正确方法是什么?

使用空存根Rnw的{​​{3}}中描述的技巧似乎在R 3.0中不起作用。该文档表明现在有一种基于\VignetteEngine{}的更好的方法,但是对于静态PDF文件的效果还不是很清楚。

3 个答案:

答案 0 :(得分:13)

使用R.rsp(> = 1.19.0),您可以添加一个包含以下内容的微小“vignettes / main.pdf.asis”文本文件,以包含静态PDF“vignettes / main.pdf”。 p>

%\VignetteIndexEntry{My amazing package}
%\VignetteEngine{R.rsp::asis}

并确保拥有:

Suggests: R.rsp
VignetteBuilder: R.rsp

在您的包的DESCRIPTION文件中。这也适用于静态HTML插图。其中一个R.rsp插图也解释了这一点。

答案 1 :(得分:2)

更新2014-06-08:有关在R包中包含静态PDF和HTML文件的更好解决方案,请参阅此主题中有关如何使用R.rsp的其他答案(> = 0.19) .0)及其R.rsp::asis小插图引擎。

您只需要一个<name>.Rnw文件,其名称与您的静态<name>.pdf文件相匹配,例如

vignettes/
  static.pdf
  static.Rnw

其中<name>.Rnw(此处static.Rnw)是最小有效的Sweave文件,例如

%\VignetteIndexEntry{<title to be displayed on the R vignette index page>}
\documentclass{article}
\begin{document}
\end{document}

这个小插图源文件(<name>.Rnw)欺骗R CMD build来构建它,即R tools::buildVignettes()将像往常一样将<name>.Rnw轻扫<name>.tex。但是,由于buildVignettes()的设计方式,它将检测我们的静态<name>.pdf文件已经由Sweave引擎创建,因此它不会将该伪TeX文件编译成PDF文件(这会覆盖我们的文件)静态文件)。

重要的是要理解的是(i)在R CMD build,(ii)期间,小插曲是“构建”的,并且在构建时,它们被复制到inst/doc/目录(如果遗漏的话)内置包。此外,(iii)vignettes/目录将成为构建包的一部分,即<pkgname>_<version>.tar.gz文件。因此,请务必查看inst/doc/

所以,要明确这一点,如果某人决定阻止这种策略,使用虚拟<name>.Rnw可能会被视为可能破坏的黑客攻击。但是,如果发生这种情况,则完全可以创建非Sweave插图引擎,其唯一目的是将<name>.pdf文件编译为... <name>.pdf文件。由于R中添加了非Sweave支持(> = 3.0.0),因此这是有效的。我一直在考虑将这种引擎添加到R.rsp包中,例如\ {VignetteEngine :: R.rsp} StaticPDF。有了它你甚至不必拥有那个虚拟的Rnw文件 - 只有PDF文件。

希望这有帮助

答案 2 :(得分:1)

这可用于in this blog post中所述的普通LaTeX技巧。

我最近改用当前的R版本(现在为3.6.0)进行此操作,请参见this wrapper .Rnw file,其中仅包含:

\documentclass{article}
\usepackage{pdfpages}
%\VignetteIndexEntry{Using Annoy in C++}
%\VignetteKeywords{Rcpp, Annoy, R, Cpp, Approximate Nearest Neighbours}
%\VignettePackage{RcppAnnoy}

\begin{document}
\includepdf[pages=-, fitpaper=true]{UsingAnnoyInCpp.pdf}
\end{document}

优点是,它使用Sweave进行了完全传统的小插图构建,并且没有附加依赖项。