2015-07-03 1 views
17

Я использую knitr и rmarkdown написать виньетки для R пакетов. Благодаря магии pandoc эти документы легко превратить в различные форматы. Я хотел бы воспользоваться этим, предлагая виньетки как HTML, так и PDF. Существует поддержка от rmarkdown, чтобы указать параметры для нескольких форматов вывода в блоке метаданных документов. Например, я мог бы что-то вроде этого:Как создать виньетки R в нескольких форматах?

output: 
    html_document: 
    standalone: true 
    smart: true 
    normalize: true 
    toc: true 
    highlight: tango 
    self-contained: true 
    theme: cerulean 
    pdf_document: 
    toc: true 
    highlight: tango 
geometry: margin=2cm 
documentclass: article 
classoption: a4paper 

Из R командной строки можно использовать rmarkdown::render построить один или оба выходных документов без трудностей. Однако при создании пакета используется только формат вывода, который указан первым. Я попытался включить Makefile, который строит и включив что-то вдоль линий

all: %.Rmd 
    $(R_HOME)/bin/Rscript -e "rmarkdown::render('$*.Rmd', 'all')" 

и что является успешным в том смысле, что все выходные файлы генерируются, но только один из них признается виньетка на R Чтобы получить дополнительные выходы, включенные в docs/, они должны быть добавлены к .install_extras. Хотя это гарантирует, что они доступны через индекс HTML, они перечислены отдельно от виньет, и я не думаю, что они могут быть доступны из R (через vignette()).

Есть ли лучший способ (или любой автоматизированный способ) для этого?

+2

FYI, это тот же вопрос, как https://github.com/yihui/knitr/issues/1051 –

+0

Благодаря @Yihui. Приятно знать, что вы изучаете это. У вас была возможность еще разобраться? В частности, как совместимость с R CMD проверкой кажется важным вопросом относительно осуществимости этого. –

+0

Вы можете попробовать включить строки в свой make, чтобы переключиться с html на pdf. Создайте виньетку, используйте 'sed' для переключения с html на pdf, сгенерируйте и вернитесь назад. – Josh

ответ

1

две вещи:

  1. можно «включить» общее содержание и имеют два исходных файлов с разными заголовками, или,

  2. если дополнительная виньетка действительно не отображается в индекс, напишите свой собственный. Начиная с Writing R extensions: «Во время установки HTML-индекс для всех виньет в пакете автоматически создается из операторов \ VignetteIndexEntry, если файл index.html не существует в каталоге inst/doc. Этот индекс связан с индексом справки HTML для пакет «. Запись индекса виньетки также может быть ключом к тому, чтобы ваши, вероятно, идентично названные виньетки были распознаны как разные.