更改多语言knitr / RMarkdown文档中的提示

时间:2016-08-18 16:43:31

标签: r bash knitr r-markdown

我正在编写一个显示bash命令和R命令的.Rmd文件。有没有办法区分具有R代码的块与具有bash代码的块?有一个knitr chunk选项可以将R命令提示符插入一个块中,以便

```{R, prompt = "true"}
plot(rnorm(100))
```

变为

> plot(rnorm(100))

但对于bash块这个

```{bash, prompt = "true"}
pandoc --version
```

变成这个

> pandoc --version

当我更喜欢这个时

$ pandoc --version

2 个答案:

答案 0 :(得分:6)

你可以尝试一个简单的钩子:

---
output: html_document
---

```{r}
library('knitr')
knit_hooks$set(
  prompt = function(before, options, envir) {
    options(prompt = if (options$engine %in% c('sh','bash')) '$ ' else 'R> ')
})
```

```{r, prompt=TRUE}
1+1
```

but for the bash chunks this

```{bash, prompt=TRUE}
pandoc --version | head -1
```

```{r, prompt=TRUE}
1+1
```

enter image description here

您可以添加opts_chunk$set(prompt=TRUE),这样您就不必为每个块继续编写prompt=TRUE

答案 1 :(得分:2)

这有点笨重,但我才意识到我可以“切换”提示这样做:

```{r, echo = F}
options(prompt = "$ ")
```

```{bash, eval = F, prompt = T}
pandoc --version
```

```{r, echo = F}
options(prompt = "> ")
```

```{r, eval = F, prompt = T}
plot(rnorm(100))
```

给出了

$ pandoc --version
> plot(rnorm(100))