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