从md文件创建插图,而不是Rmd

Hon*_*Ooi 1 markdown r r-markdown r-package

有没有办法从Markdown(.md)文件创建包装插图,而不是Rmarkdown(.Rmd)或任何其他类型?

我发现了另一个问题,但它是关于生成/保持输入的.md输出.Rmd,而我想从输入开始.md.

duc*_*ayr 8

问题

问题是要使用非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文档.

R.rsp提供降价装饰图引擎(见此处此处):

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")显示以下内容:

小插图的例子

另一种解决方案:使用R.rsp

首先,添加

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 buildR CMD INSTALL),并能够通过打开小插图

vignette("vignetteEX")
Run Code Online (Sandbox Code Playgroud)


Jac*_*sey 6

一个更简单的解决方案是将原始 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 存根即可构建小插图。这就是你想要的吗?