Использование статической (предварительно построенной) виньетки PDF в пакете R

Каков правильный способ включения статического PDF файла в качестве "виньетки" в CRAN-пакете с R 3.0?

Трюк, описанный в этот документ использования пустого заглушки Rnw, похоже, не работает в R 3.0. В документе предлагается, что теперь существует лучший способ, основанный на \VignetteEngine{}, но не совсем понятно, как это работает для статических PDF файлов.

Ответ 1

С R.rsp ( >= 1.19.0) вы можете включить статический PDF файл 'vignettes/main.pdf', добавив крошечный 'vignettes/main.pdf.asis', который содержит:

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

и убедитесь, что:

Suggests: R.rsp
VignetteBuilder: R.rsp

в вашем пакете ОПИСАНИЕ файл. Это также работает для статических HTML-виньет. Это также объясняется в одной из R.rsp виньет.

Ответ 2

UPDATE 2014-06-08: для лучшего решения включить статические PDF файлы и HTML файлы в R-пакет, см. мой другой ответ в этом разделе о том, как использовать 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. Это действительно и возможно из-за поддержки без Sweave, добавленной в R ( >= 3.0.0). Я рассматривал возможность добавления такого механизма в пакет R.rsp, например. \VignetteEngine {R.rsp:: StaticPDF}. С этим вам даже не придется иметь этот фиктивный Rnw файл - только файл PDF.

Надеюсь, что это поможет

Ответ 3

Это работает с простым трюком 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 для полностью традиционной сборки виньетки и не налагает никаких дополнительных зависимостей вообще.