bookdown 中的子图重复标题

Subplots in bookdown repeating the caption

The section of the bookdown manual on generating figures 演示了一个案例,其中 include_graphics() 可以被赋予长度 > 1 的路径向量,从而产生许多具有单个标题的子图:

但是,当我在我的 thesisdown 分支中尝试此操作时,在 PDF 输出中我得到了为每个子图重复的图形标题(并且,根据间距判断,整个图形环境)。这是一个可重现的例子:

---
output: bookdown::pdf_document2
toc: false
---


```{r, echo = FALSE}
for(i in 1:3){
  jpeg(filename = paste0("temp_", i, ".jpg"), width = 600, height = 250)
  plot(cars)
  title(main = i)
  dev.off()
}
```

```{r fig.cap = "Caption", out.width="100%", fig.ncol = 1, echo = FALSE}
knitr::include_graphics(paste0("temp_", 1:3, ".jpg"))
```

我希望更多的是堆叠的五张图片,底部有一个标题。这似乎也打破了数字 cross-referencing,因为每个地块都有自己的数字编号,并且 cross-references 到块渲染为 ??

获取子图需要在块 header 中设置一些额外的设置。

  • fig.subcap 是子图的标题列表
  • fig.ncol:子图的列数
  • out.width:输出的数字宽度。您通常会将此 100% 除以子列数。

子图是使用 subfig 包构建的。您可以将其包含在您的 LaTeX bookdown 模板中,或者您可以将其添加到 YAML 中,如下所示:

这是一个例子:

---
output: bookdown::pdf_document2
toc: false
header-includes:
   - \usepackage{subfig}
---

```{r, echo = FALSE}
for(i in 1:3){
  jpeg(filename = paste0("temp_", i, ".jpg"), width = 600, height = 250)
  plot(cars)
  title(main = i)
  dev.off()
}
```

```{r fig.cap = "Caption", out.width="100%", fig.ncol = 1, echo = FALSE, fig.subcap= c("First", "Second", "Third")}
knitr::include_graphics(paste0("temp_", 1:3, ".jpg"))
```