3

我正在使用 Knitr、Markdown 和 Slidify 撰写演示文稿。幻灯片将部分处理 Knitr 作为主题,这就是我偶然发现一个问题的原因。例如,我不能包含一个 knitr-markdown 块以在幻灯片上显示它。即使我做了这样的事情,它总是会在第一次运行时被解释:

```
```{r eval = F, include = T}

```
``` 

如何防止一个块被解释并从最终输出中删除,以便我可以在使用 Markdown 和 Knitr 时显示一个块的结构?

编辑:

我尝试了@Ramnath 的版本,并制作了以下幻灯片:

## Testslide 1

```{r verbatimchunk, verbatim = TRUE}
x = 1 + 1
x
```

```{r regularchunk}
x = 1 + 1
x
```

---

## Testslide 2

```{r verbatimchunk_2, verbatim = TRUE}
x = 1 + 1
x
```

* element 1
* element 2

---

## Testslide 3

* element 1
* element 2


```{r verbatimchunk_3, verbatim = TRUE}
x = 1 + 1
x
```

前两张幻灯片工作正常,但最后一张是问题所在。如果在逐字块之前有一个项目符号列表,它会像往常一样被解释。所以它与@Scott 的第一个解决方案相同。我不明白这个。

编辑 2/3(工作解决方案)

```{r echo = FALSE}
require(knitr)
hook_source_def = knit_hooks$get('source')
knit_hooks$set(source = function(x, options){
  if (!is.null(options$verbatim) && options$verbatim){
    opts = gsub(",\\s*verbatim\\s*=\\s*TRUE\\s*", "", options$params.src)
    bef = sprintf('\n\n    ```{r %s}\n', opts, "\n")
    stringr::str_c(bef, paste(knitr:::indent_block(x, "    "), collapse = '\n'), "\n    ```\n")
  } else {
     hook_source_def(x, options)
  }
})
```

## Testslide

* Element one
* Element two


Some text here breaks list environment:

```{r verbatim = T}
any code
```
4

3 回答 3

3

我认为您需要在 之后添加一个空字符串```{r},并且 knitr 不会执行该块,但会显示它。请参阅此处的示例

幻灯片上的这对我有用(顶部执行而底部不执行)

---

```{r}
list(5, 6, 7)
```


    ```{r}`r ''`
    hist(rnorm(100))
    5 + 6
    ```

---
于 2013-11-11T14:36:30.127 回答
3

这是另一个使用块挂钩的解决方案。这个想法是,如果你有一个带有 option 的块verbatim = TRUE,它会激活钩子并逐字输出块。我已经检查过它是否也适用于 Slidify。

```{r echo = FALSE}
require(knitr)
hook_source_def = knit_hooks$get('source')
knit_hooks$set(source = function(x, options){
  if (!is.null(options$verbatim) && options$verbatim){
    opts = gsub(",\\s*verbatim\\s*=\\s*TRUE\\s*", "", options$params.src)
    bef = sprintf('\n\n    ```{r %s}\n', opts, "\n")
    stringr::str_c(bef, paste(knitr:::indent_block(x, "    "), collapse = '\n'), "\n    ```\n")
  } else {
     hook_source_def(x, options)
  }
})
```

```{r verbatimchunk, verbatim = TRUE}
x = 1 + 1
x
```

```{r regularchunk}
x = 1 + 1
x
```

编辑:列表后代码块的技巧是需要破坏列表环境。一种快速而肮脏的方法就是添加一个空的段落元素。或者,您可以修复挂钩,以便在代码块的开头自动添加一个空段落。

* element 1
* element 2

<p></p>
```{r verbatimchunk_3, verbatim = TRUE}
x = 1 + 1
x
```
于 2013-11-13T04:55:57.590 回答
0

聚会很晚,但这似乎也有效:

```{r echo=FALSE, class.output="r", comment=""}
cat("```{r}\nx <- 1 + 1\nx\n```")
```

或者,等效但可能更好读和写:

```{r echo=FALSE, class.output="r", comment=""}
cat(paste(sep = "\n",
  "```{r}",
  "x <- 1 + 1",
  "x",
  "```"
))
```
于 2019-01-28T19:34:15.480 回答