将Markdown代码块添加到R Markdown文档

4
我想要编写一个R Markdown文档,其中展示了如何撰写R Markdown文档的代码示例。例如,我希望在文档中展示如何将文本呈现为粗体。
`**this is bold**` will render 'this is bold' with bold text, i.e. **this is bold**

这个没问题,可以使用`将文本渲染为代码格式。但是,我无法弄清楚如何正确显示代码块。例如:

```{markdown, eval=FALSE}
  ```{r}
  x = rnorm(1)
  ```
```

这种方法行不通,因为Markdown不支持R语言。我不能用`来包裹R代码块,因为我需要该符号来标记代码块的开头,而且它只能作为内联使用。

我可以通过实际使用R进行一些跳跃操作。

```{r, echo="FALSE"}
o = "```{r}\nx=sample(1)\n```\n"
cat(o)
```

这将呈现为

## ```{r}
## x=sample(1)
## ```

但是对于我来说,写文档并生成的代码不允许简单地复制/粘贴更加复杂。

有没有本地方法可以呈现将创建R代码块所需的Markdown作为代码呈现?


1
knitr 常见问题解答 7: https://yihui.name/knitr/faq/ - Yihui Xie
@YihuiXie 你可能会对阅读Mark的回答感兴趣,它可能值得出现在你的常见问题解答中。 - Dan Chaltiel
@DanChaltiel 谢谢!我在发布时就已经阅读了Mark的答案。不过,knitr FAQ 7提供了基本相同的解决方案。 - Yihui Xie
3个回答

4
我在Rmarkdown中发现了一本名为bookdown的书,其中包含有通过Rmarkdown渲染的R代码块的示例。这本书的源码可以在GitHub上找到,相应章节的链接位于 这里
下面的代码块能按预期运行。我无法解释为什么在代码块的开头需要`r ''`,但它是必须的。
````markdown
`r ''````{r}
x = sample(1)
```
````

1
如果您在三个反引号后面不加{r},rmarkdown将只是将该块传递给markdown,它几乎可以正常工作。例如,这样做。
```
  ```{r}
  x = rnorm(1)
  ```
```

显示为

screenshot

这不太对,r周围的大括号被删除了。(我认为是r-markdown做的,而不是markdown。)我不知道是否有选项可以强制它们出现,但如果在r之前有非字母字符,则会出现它们。您可以输入一个空格,或者(如果您能想出如何)一个零宽度空格,R将使用"\u200B"显示它。

1
您可以使用实验性的knitrhooks包,该包添加了块选项chunk_head,使我们能够保留标题。该软件包正在GitHub here上开发中。
要安装该软件包,请使用命令devtools::install_github("nathaneastwood/knitrhooks")。安装后,您可以通过加载软件包并在标头中调用函数chunk_head()来使用块挂钩。
以下是一个例子:
---
title: "Untitled"
output: pdf_document
---

```{r, include = FALSE}
library(knitrhooks)
chunk_head()
```


```{r, chunk_head = TRUE, echo = TRUE}
x <- sample(1)
```

enter image description here

很遗憾,这不会显示语法高亮,但正如this issue中所讨论的那样,这是knitr处理文件的限制。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接