在knitr中跨行分割r块标题

Ale*_*kin 2 r knitr r-markdown

当我在我的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)))
```
Run Code Online (Sandbox Code Playgroud)

CL.*_*CL. 12

不,您不能在块选项中插入换行符.从手册:

块选项必须写在一行; 块选项中不允许换行

但是,如果你在编辑器中拼命想要整洁的格式化,你可以通过一个额外的变量绕道而行,但这会使代码膨胀很多:

---
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)
```
Run Code Online (Sandbox Code Playgroud)

使用该选项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)
```
Run Code Online (Sandbox Code Playgroud)

(我假设问题是关于代码看起来(在编辑器中)不是关于输出中的换行符.)

  • 没错。根据设计,块头必须是一行。 (2认同)

Rus*_*yde 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)))
```
Run Code Online (Sandbox Code Playgroud)

诚然,这无助于处理很长的图形标题,并且 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)))
```
Run Code Online (Sandbox Code Playgroud)