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

时间:2018-10-23 06:12:32

标签: r markdown r-markdown r-package

相对于Rmarkdown(.md)或任何其他类型,有没有一种方法可以从Markdown(.Rmd)文件中创建包装小插图?

我发现了this other question,但这是关于从.md输入生成/保持.Rmd输出的,而我想从.md输入开始。

2 个答案:

答案 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提供了降价小插图引擎(请参见herehere):

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

at this GitHub repo

另一种解决方案:使用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 buildR 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存根即可构建小插图。那是你想要的吗?