Проблема
Проблема в том, что для использования виньеток, не относящихся к 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")
отображали следующее:
Альтернативное решение: использование 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")