23

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

本文档中描述的使用空存根的技巧Rnw在 R 3.0 中似乎不起作用。该文件表明现在有一种更好的方法,\VignetteEngine{}但目前还不清楚这对静态 PDF 文件是如何工作的。

4

3 回答 3

14

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

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

并确保拥有:

Suggests: R.rsp
VignetteBuilder: R.rsp

在你的包的说明文件中。这也适用于静态 HTML 小插曲。这也在R.rsp小插图之一中得到了解释。

于 2014-06-08T21:49:08.013 回答
4

这适用于本博客文章中所述的普通 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 用于完全传统的小插图构建,并且不会施加任何额外的依赖关系。

于 2019-06-09T04:41:40.117 回答
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()首先 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 文件。

希望这可以帮助

于 2013-10-31T23:42:31.217 回答