David
David

Reputation: 10152

rmarkdown read code from file and display with highlight

I have two RMarkdown files. main.Rmd which is the main file which is rendered as well as example.Rmd which holds a longer example and is used elsewhere (hence it lives in its own document).

I want to include example.Rmd in the main.Rmd file with code highlighting of its RMarkdown code but the code of example.Rmd does not need to be executed, as if I set eval=FALSE and copied all code into the chunk by hand.

An example MWE is

main.Rmd

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

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

and in example.Rmd

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

```{r}
# code that is not executed but shown in main.Rmd
data <- ...
```

Upvotes: 2

Views: 587

Answers (1)

Shafee
Shafee

Reputation: 19867

Set eval=FALSE in the example.Rmd file and then include it in main.Rmd using child chunk option.

example.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")
```

main.Rmd

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

```{r example, child="example.Rmd"}
```

code chunk included from another file with syntax highlighting


Edit

To show full source-code of the Rmarkdown file, one possible option could be reading that Rmd file and then cat it with chunk option comment="".

Now about the syntax highlighting; there's a chunk option class.output with which it is possible to specify a language name for which pandoc supports syntax highlighting.

You can get the list of language names for which pandoc has syntax highlighting support by running the following,

pandoc --list-highlight-languages

(Note, if you don't have pandoc installed separately, you can also use the pandoc installed with Rstudio itself. Run rmarkdown::pandoc_exec() to get the pandoc executable path)

Now, the file we are trying to include actually contains not just R code, but also markdown and yaml syntaxes. So it's a kind of mixed thing and pandoc has no syntax highlighting support out of the box for this. Still I have chosen c as syntax highlighting language just to show the possibility. (Also tried r, but syntax-highlighting is not so distinctive)

---
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")
```

included contents of rmd file with possible custom syntax highlighting


But still if you want a specific syntax-highlighting for Rmarkdown, you can actually create one. See here from the pandoc documentation itself and also this answer on SO about this.

Upvotes: 5

Related Questions