Hon*_*Ooi 1 markdown r r-markdown r-package
有没有办法从Markdown(.md)文件创建包装插图,而不是Rmarkdown(.Rmd)或任何其他类型?
我发现了另一个问题,但它是关于生成/保持输入的.md输出.Rmd,而我想从输入开始.md.
问题是要使用非Sweave晕影,你必须有一个晕影引擎.由于写作R附加手册第1.4.2解释
通过"小插图引擎"支持Sweave以外格式的小插图....
R使用引擎指定的文件扩展名识别非Sweave晕影.例如,knitr包支持扩展名.Rmd(代表"R markdown").例如,用户使用\ VignetteEngine行指示晕影源中的晕影引擎
%\ VignetteEngine {knitr :: knitr}
这指定了在处理小插图时用于代替Sweave的包名称和引擎.由于Sweave是随R分发提供的唯一引擎,因此必须在包描述文件的"VignetteBuilder"字段中指定提供任何其他引擎的包,并且还在"建议","导入"或"取决于"字段中指定(因为它的名称空间必须可用于构建或检查您的包).
...
想要提供晕影引擎的包编写者需要在包.onLoad函数中注册这些引擎.例如,该功能可以进行呼叫
tools :: vignetteEngine("knitr",weave = vweave,tangle = vtangle,pattern ="[.] Rmd $",package ="knitr")
不幸的是,没有一个knitr小插图引擎(在这里找到)使用的模式将拾取纯md文档.
vignetteEngine("md", package=pkgname,
pattern="[.]md$",
weave=rspWeave,
tangle=function(file, ..., pattern="[.]md$") asisTangle(file, ..., pattern=pattern)
)
Run Code Online (Sandbox Code Playgroud)
它允许您指定R.rsp::md为晕影引擎并使用markdown vignettes.但是,正如评论中所讨论的那样,似乎没有办法允许自定义CSS样式表更改默认格式.
所以,我在这个GitHub回购中mdVignettes提供的R包中提供了我自己的降价晕影引擎.
要使用它,只需添加
Suggests: mdVignettes
VignetteBuilder: mdVignettes
Run Code Online (Sandbox Code Playgroud)
到你的DESCRIPTION文件.然后,创建一个包含的插图
%\VignetteEngine{mdVignettes::md}
Run Code Online (Sandbox Code Playgroud)
您可以使用包含自定义CSS样式表
output:
html_document:
css: custom.css
Run Code Online (Sandbox Code Playgroud)
代替
output: html_document
Run Code Online (Sandbox Code Playgroud)
在YAML前端(用custom.css样式表的文件名替换).
举个例子,我创建了一个虚拟R包
devtools::create("vigex", rstudio = FALSE)
Run Code Online (Sandbox Code Playgroud)
然后我将上面的Suggests和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!")
Run Code Online (Sandbox Code Playgroud)
以及以下内容vignettes/custom.css:
code {
background: wheat;
color: green;
}
Run Code Online (Sandbox Code Playgroud)
然后我通过插件安装了包装
devtools::install("vigex", build_vignettes = TRUE)
Run Code Online (Sandbox Code Playgroud)
并vignette("vigex")显示以下内容:
首先,添加
Suggests: R.rsp
VignetteBuilder: R.rsp
Run Code Online (Sandbox Code Playgroud)
到你的DESCRIPTION文件.然后,创建一个包含的插图
%\VignetteEngine{R.rsp::md}
Run Code Online (Sandbox Code Playgroud)
就这么简单.我这样做了
package.skeleton("vignetteEX")
Run Code Online (Sandbox Code Playgroud)
从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.
Run Code Online (Sandbox Code Playgroud)
然后我构建并安装了包(通过R CMD build和R CMD INSTALL),并能够通过打开小插图
vignette("vignetteEX")
Run Code Online (Sandbox Code Playgroud)
一个更简单的解决方案是将原始 Markdown 包含在 Rmarkdown 存根中。
你的.md 包含:
# R Markdown
lorem ipsum
Run Code Online (Sandbox Code Playgroud)
然后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"}
```
Run Code Online (Sandbox Code Playgroud)
这样,您就可以用纯 Markdown 进行编写,并且只需使用 Rmd 存根即可构建小插图。这就是你想要的吗?