如何使用 `knitr::kable` 在 *above* a table 上添加标题?

How to add a caption *above* a table with `knitr::kable`?

当我将一个简单的 Rmarkdown 文档呈现为 github_document 时,table 标题出现在 table 下方而不是上方。它还缺少“Table:”前缀。有什么办法可以改变这种行为吗?谢一辉has made clear认为kable的默认标题位置应该在table之上,而当我运行在Rmarkdown文件之外执行同样的命令时,标题确实出现在table上方顶.

我指的命令是

knitr::kable(mtcars, caption = "mtcars")

我的 Rmarkdown 文档如下所示:

---
title: "Test"
output: github_document
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```

```{r}
knitr::kable(mtcars, caption = "mtcars")
```

指定 format = "pipe"format = "simple" 似乎没有帮助。

转换为 markdown 输出格式时 knitr::kable() 将默认为 format = "pipe"。这是用于 pandoc 的管道 tables。 format = "simple" 用于 Pandoc 的简单 table.

这两种语法是Pandoc的markdown语法。 Pandoc 支持提供标题 (https://pandoc.org/MANUAL.html#extension-table_captions)。

knitr 会为您写下:table 和预期格式的标题。

但是,输出被定义为 Github Flavored Markdown,因此 Pandoc 的 gfm。这种 Markdown 风格不支持标题。因此 Pandoc 会将管道 table 转换为另一个 Markdown table 并抑制标题语法以将文本放在 table 下方。这是 Pandoc 做的。

接受这个.md文件

Table: Demonstration of pipe table syntax.

| Right | Left | Default | Center |
|------:|:-----|---------|:------:|
|   12  |  12  |    12   |    12  |
|  123  |  123 |   123   |   123  |
|    1  |    1 |     1   |     1  |

进行 pandoc 转换会导致

❯ pandoc -t gfm test.md
| Right | Left | Default | Center |
|------:|:-----|---------|:------:|
|    12 | 12   | 12      |   12   |
|   123 | 123  | 123     |  123   |
|     1 | 1    | 1       |   1    |

Demonstration of pipe table syntax.

当输出为 gfm

时,Pandoc 将标题放在下方

问题也在 https://github.com/yihui/knitr/issues/2074

中提出