相对于Rmarkdown(.md
)或任何其他类型,有没有一种方法可以从Markdown(.Rmd
)文件中创建包装小插图?
我发现了this other question,但这是关于从.md
输入生成/保持.Rmd
输出的,而我想从.md
输入开始。
答案 0 :(得分:8)
问题在于,要使用非Sweave晕影,您必须具有晕影引擎。正如section 1.4.2 of the Writing R Extensions manual解释
通过“ vignette引擎”支持除Sweave之外的其他格式的小插图。...
R使用引擎指定的文件扩展名识别非编织的小插图。例如,knitr软件包支持扩展名.Rmd(代表“ R markdown”)。例如,用户使用\ VignetteEngine行指示小插图源中的小插图引擎
%\ VignetteEngine {knitr :: knitr}
这指定在处理小插图时要使用的软件包名称和引擎名称,以代替Sweave。由于Sweave是随R发行版一起提供的唯一引擎,因此必须在软件包DESCRIPTION文件的“ VignetteBuilder”字段中指定提供任何其他引擎的软件包,并在“ Suggests”,“ Imports”或“ Depends”字段中指定(因为其名称空间必须可用于构建或检查您的程序包)。
...
想要提供小插图引擎的软件包编写者需要在包.onLoad函数中注册这些引擎。例如,该函数可以进行呼叫
tools :: vignetteEngine(“ knitr”,编织= vweave,缠结= vtangle, pattern =“ [。] Rmd $”,package =“ knitr”)
不幸的是,knitr
的小插图引擎(发现为here)中没有一个使用可提取纯md
文档的模式。
R.rsp
提供了降价小插图引擎(请参见here和here):
vignetteEngine("md", package=pkgname,
pattern="[.]md$",
weave=rspWeave,
tangle=function(file, ..., pattern="[.]md$") asisTangle(file, ..., pattern=pattern)
)
,它允许您将R.rsp::md
指定为小插图引擎并使用markdown小插曲。但是,正如评论中所讨论的那样,似乎没有办法允许自定义CSS样式表更改默认格式。
因此,我用名为mdVignettes
的{{3}}的R包制作了自己的markdown小插图引擎。
要使用它,只需添加
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)
然后,我将上面的uggess和VignetteBuilder行添加到DESCRIPTION,创建了一个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")
显示以下内容:
首先,添加
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")
答案 1 :(得分:4)
一个更简单的解决方案是将原始markdown包含在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"}
```
这样,您可以使用纯markdown编写代码,只需使用Rmd存根即可构建小插图。那是你想要的吗?