从 R 3.0 开始,将静态 PDF 文件作为“小插图”包含在 CRAN 包中的正确方法是什么?
本文档中描述的使用空存根的技巧Rnw
在 R 3.0 中似乎不起作用。该文件表明现在有一种更好的方法,\VignetteEngine{}
但目前还不清楚这对静态 PDF 文件是如何工作的。
这适用于本博客文章中所述的普通 LaTeX 技巧。
我最近切换到使用当前 R 版本(即现在 3.6.0)执行此操作,请参阅此包装器 .Rnw 文件,其中仅包含:
\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 用于完全传统的小插图构建,并且不会施加任何额外的依赖关系。
更新 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()
首先 Sweave<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 (>= 3.0.0) 中添加了非 Sweave 支持,这是有效且可能的。我一直在考虑将这样的引擎添加到 R.rsp 包中,例如 \VignetteEngine{R.rsp::StaticPDF}。有了它,您甚至不必拥有那个虚拟的 Rnw 文件 - 只有 PDF 文件。
希望这可以帮助