Создание виньетки из md файла, а не Rmd - PullRequest
0 голосов
/ 23 октября 2018

Есть ли способ создать виньетку пакета из файла Markdown (.md), в отличие от Rmarkdown (.Rmd) или любого другого типа?

Я нашел этот другой вопрос но речь идет о генерации / сохранении .md вывода из .Rmd ввода, тогда как я хочу начать с .md ввода.

Ответы [ 2 ]

0 голосов
/ 27 октября 2018

Более простое решение - просто включить исходную уценку в заглушку Rmarkdown.

your.md содержит:

# R Markdown

lorem ipsum

Тогда vignette.Rmd содержит:

---
title: "Vignette Title"
author: "Vignette Author"
date: "`r Sys.Date()`"
output: rmarkdown::html_vignette:
vignette: >
  %\VignetteIndexEntry{Vignette Title}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

```{r child = "your.md"}
```

Таким образом, вы можете писать с чистой уценкой и просто использовать заглушки Rmd для создания виньеток.Это то, что вы хотели?

0 голосов
/ 26 октября 2018

Проблема

Проблема в том, что для использования виньеток, не относящихся к Sweave, необходимо иметь механизм виньетирования.Как объясняется в разделе 1.4.2 руководства по расширению Writing R ,

Виньетки в форматах, отличных от Sweave, поддерживаются через «механизмы виньетирования» ....

R распознает не-Sweave виньетки, используя расширения имени файла, указанные движком.Например, пакет knitr поддерживает расширение .Rmd (расшифровывается как «R markdown»).Пользователь указывает механизм виньетирования в источнике виньетирования, используя строку \ VignetteEngine, например

% \ VignetteEngine {knitr :: knitr}

Указывает имя пакета и механизм дляиспользовать вместо Sweave при обработке виньетки.Так как Sweave - единственный движок, поставляемый с дистрибутивом R, пакет, предоставляющий любой другой движок, должен быть указан в поле «VignetteBuilder» файла DESCRIPTION пакета, а также в полях «Предложения», «Импорт» или «Зависит»(так как его пространство имен должно быть доступно для сборки или проверки вашего пакета).

...

Авторы пакетов, которые хотели бы предоставить движки виньетки, должны зарегистрировать эти движки в функции пакета .onLoad,Например, эта функция может сделать вызов

tools :: vignetteEngine ("knitr", weave = vweave, tangle = vtangle, pattern = "[.] Rmd $", package = "knitr")

К сожалению, ни один из механизмов виньетки knitr (найден здесь ) не использует шаблон, который будет подбирать чистые md документы.

R.rsp обеспечиваетмеханизм виньетки уценки (см. здесь и здесь ):

vignetteEngine("md", package=pkgname,
    pattern="[.]md$",
    weave=rspWeave,
    tangle=function(file, ..., pattern="[.]md$") asisTangle(file, ..., pattern=pattern)
)

, который позволяет указать R.rsp::md в качестве механизма виньетки и использовать виньетки уценки.Однако, как обсуждалось в комментариях, похоже, не существует способа, позволяющего настраиваемым таблицам стилей CSS изменять формат по умолчанию.

Решение

Итак, я приготовил свой собственныймеханизм виньетки markdown, доступный в пакете R под названием mdVignettes доступен в этом репозитории GitHub .

Чтобы использовать его, просто добавьте

Suggests: mdVignettes
VignetteBuilder: mdVignettes

к своему DESCRIPTIONфайл.Затем создайте виньетку, включающую

%\VignetteEngine{mdVignettes::md}

. Вы можете включить пользовательскую таблицу стилей CSS, используя

output:
    html_document:
        css: custom.css

вместо

output: html_document

в фронт-математике YAML (заменив custom.css именем файла вашей таблицы стилей).

В качестве примера я создал фиктивный пакет R с помощью

devtools::create("vigex", rstudio = FALSE)

Затем я добавил приведенные выше строки Suggests и VignetteBuilder в ОПИСАНИЕ, создалв каталог vignettes/ и добавили следующее в vigex.md:

---
title: "A Simple Vignette"
author: "duckmayr"
output:
    html_document:
        css: custom.css
vignette: >
  %\VignetteIndexEntry{vigex}
  %\VignetteEngine{mdVignettes::md}
  %\VignetteEncoding{UTF-8}
---

# A simple vignette

Here's an example of custom-formatted code:

    print("Hello, world!")

и следующее в vignettes/custom.css:

code {
    background: wheat;
    color: green;
}

Затем я установил пакет с виньеткой через

devtools::install("vigex", build_vignettes = TRUE)

И vignette("vigex") отображали следующее:

vignette example

Альтернативное решение: использование R.rsp

Сначала добавьте

Suggests: R.rsp
VignetteBuilder: R.rsp

в ваш файл DESCRIPTION.Затем создайте виньетку, включающую

%\VignetteEngine{R.rsp::md}

Это так просто.Я сделал это, используя

package.skeleton("vignetteEX")

из R, добавив DESCRIPTION строки выше, затем сохранив следующее в vignettes/vignetteEX.md:

---
title: "Vignette Example"
author: "duckmayr"
date: "October 26, 2018"
output: html_document
vignette: >
  %\VignetteIndexEntry{vignetteEX}
  %\VignetteEngine{R.rsp::md}
  %\VignetteEncoding{UTF-8}
---

# A simple vignette

Here it is.

Затем я собрал и установил пакет (через R CMD build и R CMD INSTALL) и смог открыть виньетку через

vignette("vignetteEX")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...