Подтвердить что ты не робот

Как я могу создать виньетки R в нескольких форматах?

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

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()).

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

4b9b3361

Ответ 1

Две вещи:

  • вы можете "включить" общий контент и иметь два исходных файла с разными заголовками или

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