Использование статической (готовой) виньетки 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-файл.

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

Другие вопросы по тегам