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

Changing the prompt in a multilanguage knitr/RMarkdown document

我正在编写一个显示 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

有点笨拙,但我刚刚意识到我可以 "toggle" 提示执行此操作:

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

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

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

并且您可以添加 opts_chunk$set(prompt=TRUE) 这样您就不必为每个块

继续编写 prompt=TRUE