rmarkdown 从文件中读取代码并高亮显示

Dav*_*vid 2 r knitr r-markdown

我有两个 RMarkdown 文件。main.Rmd这是渲染的主文件,example.Rmd它包含更长的示例并在其他地方使用(因此它位于自己的文档中)。

我想example.Rmd在文件中包含突出显示其 RMarkdown 代码的代码,但不需要执行main.Rmd代码,就好像我手动将所有代码设置并复制到块中一样。example.Rmdeval=FALSE

MWE 的一个例子是

main.Rmd

---
title: This is main.rmd
output: html_document
---

```{r}
# attempt that doesnt work
cat(readLines("example.Rmd"), sep = "\n")
```
Run Code Online (Sandbox Code Playgroud)

并在example.Rmd

---
title: This is example.rmd
output: html_document
---

```{r}
# code that is not executed but shown in main.Rmd
data <- ...
```
Run Code Online (Sandbox Code Playgroud)

sha*_*fee 5

eval=FALSEexample.Rmd文件中设置,然后使用chunk 选项将其包含在main.Rmdchild中。

示例.Rmd

---
title: This is example.Rmd
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(eval = FALSE)
```

```{r}
# This is from example.Rmd
x <- rnorm(10) 
y <- rnorm(10)

lm(y ~ x)
```


```{r}
# some comments
print("This is from example.Rmd")
```
Run Code Online (Sandbox Code Playgroud)

主.Rmd

---
title: This is main.Rmd
output: 
  html_document:  
    highlight: haddock
---

```{r example, child="example.Rmd"}
```
Run Code Online (Sandbox Code Playgroud)

使用语法突出显示从另一个文件包含的代码块


编辑

要显示 Rmarkdown 文件的完整源代码,一种可能的选择是读取该 Rmd 文件,然后cat使用块选项读取它comment=""

现在介绍语法高亮;有一个块选项class.output,可以指定 pandoc 支持语法突出显示的语言名称。

您可以通过运行以下命令来获取 pandoc 支持语法突出显示的语言名称列表:

pandoc --list-highlight-languages
Run Code Online (Sandbox Code Playgroud)

(注意,如果没有单独安装pandoc,也可以使用Rstudio本身安装的pandoc,运行rmarkdown::pandoc_exec()即可获取pandoc可执行路径)

现在,我们尝试包含的文件实际上不仅包含 R 代码,还包含 markdown 和 yaml 语法。所以这是一种混合的东西,pandoc 没有对此进行开箱即用的语法突出显示支持。我仍然选择c作为语法突出显示语言只是为了展示可能性。(也尝试过r,但语法高亮不是那么有特色)

---
title: This is main.Rmd
output:
  html_document:
    highlight: tango
---

## Rmarkdown

```{r example, echo=FALSE, class.output="c", comment=""}
cat(readLines("example.Rmd"), sep = "\n")
```
Run Code Online (Sandbox Code Playgroud)

包含 rmd 文件的内容以及可能的自定义语法突出显示


但如果您想要 Rmarkdown 的特定语法突出显示,您实际上可以创建一个。请参阅pandoc 文档本身以及有关此问题的此答案。