在knitr中将r块头拆分为多行

8
当我在R代码块头部插入长的标题等内容时,能够将头部分成多行会更好。是否有简单的方法来实现这个功能?例如:
```{r, echo=FALSE, warning=FALSE, 
    fig.cap="Here is my really long caption.  It'd be nice to split this and other portions across lines"}
    print(plot(x=runif(100),y=runif(100)))
```

换行符 \n 能用吗? - lawyeR
2个回答

19

不,您不能在代码块选项中插入换行符。来自手册

代码块选项必须写在一行中;代码块选项内不允许出现换行符。

但是,如果您非常想在编辑器中获得整齐的格式,可以通过额外的变量来绕道处理,但这会大大增加代码量:

---
output: 
  pdf_document:
    fig_caption: yes
---
```{r}
mycaption <- "This is my 
very long caption
that spans over
several lines.
(in the editor)"
```

```{r, fig.cap = mycaption}
plot(1)
```

有了eval.after选项,甚至可以在使用它作为选项值的块中定义mycaption

---
output: 
  pdf_document:
    fig_caption: yes
---
```{r}
library(knitr)
opts_knit$set(eval.after = "fig.cap")
```

```{r, fig.cap = mycaption}
mycaption <- "This is my 
very long caption
that spans over
several lines.
(in the editor)"

plot(1)
```

我假设这个问题是关于代码在编辑器中的外观,而不是输出中的换行符。


2
没错。块头必须是单行设计。 - Yihui Xie
@JEdwards 感谢您对于维护 Stack Overflow 答案的关注。不过,我们需要确保编辑时尊重原始答案作者的意图。此类更新应该作为独立的答案进行发布,就像已经发布的那样。取而代之的是,您可以投票支持新的、更优选的解决方案,使它在答案列表中排名靠前。 - Ian Campbell

8

从knitr v1.35版本开始 (https://github.com/yihui/knitr/releases/tag/v1.35),您可以在多行上编写代码块头。

语法与典型的rmarkdown代码块语法略有不同。要实现此目标,您需要将rmarkdown代码块标题扩展到代码块的注释中。您需要按照以下方式重写示例:

```{r}
#| echo=FALSE, warning=FALSE,
#| fig.cap="Here is my really long caption.  It'd be nice to split this and other portions across lines"
print(plot(x=runif(100),y=runif(100)))
```

不可否认的是,这并不能帮助我们处理非常长的图例标题,CL 建议将图例标题放入变量中仍然是个好主意。

但是,新的语法还允许您使用 yaml 语法指定块选项,而 yaml 允许多行字符串。因此,您可以执行以下操作:

```{r}
#| echo: false
#| warning: false
#| fig.cap: >
#|   Here is my really long caption.  It'd be nice to
#|   split this and other portions across lines

print(plot(x=runif(100),y=runif(100)))
```

实际上,注释样式的代码块标题可以在没有yaml的情况下跨多行进行硬换行。该功能(包括一个带有长标题的示例)已在此处文档化 - j-fisher

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