Использование статической (готовой) виньетки PDF в пакете R
Как правильно включить статический PDF-файл в виде "виньетки" в пакет CRAN начиная с версии R 3.0?
Трюк, описанный в этом документе, с использованием пустой заглушки Rnw
не похоже на работу в R 3.0. Документ предполагает, что теперь есть лучший способ, основанный на \VignetteEngine{}
но не совсем понятно, как это работает для статических файлов PDF.
2 ответа
С помощью 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.
Это работает с помощью простого трюка с 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: Для лучшего решения о включении статических 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's 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-файл.
Надеюсь это поможет