在 bookdown 中交叉引用 DT::datatable

rbr*_*isk 6 knitr r-markdown dt bookdown

DT::datatable我正在尝试在 bookdown 项目中创建一个引用。

书籍手册规定(\#tab:label)应将其放置在表格标题的开头。_output.yml为了进行测试,我在 R-studio 中创建了一个新的 bookdown 项目,但用以下配置替换了内容html_book(我只对 HTML 输出感兴趣)。

bookdown::html_book:
    toc: yes
    theme: null
    highlight: pygments
    split_by: none
Run Code Online (Sandbox Code Playgroud)

然后我在 的底部添加了以下代码01-intro.Rmd

```{r irisTab}
DT::datatable(iris, caption = '(\\#tab:irisTab) Iris table')
```

See Table \@ref(tab:irisTab).
Run Code Online (Sandbox Code Playgroud)

我的期望是,它将(\\#tab:irisTab)被替换Table 2.2或至少被替换2.2,并且下面的参考将是2.2。然而,这是行不通的。标签保持逐字不变,参考文献为??

我能得到的最接近的结果是将标题文本放在表格之前。

Table (\#tab:irisTab): Iris table

```{r irisTab}
DT::datatable(iris)
```

See Table \@ref(tab:irisTab).
Run Code Online (Sandbox Code Playgroud)

在这种情况下,引用有效,但标签(\#tab:irisTab)在输出中仍然逐字保留,即它没有按2.2预期替换。

有没有办法创建一个带有标题并且可以引用的DT表?

更新 1:@mikey-harper 建议使用fig.cap. 但是,fig.cap仅更新fig计数器而不更新tab计数器。因此,如果您有任何非 DT 表,则会有多个具有相同编号的表。或许可以将所有表格视为数字。然而,这不是标准方法。通常,表格和数字有单独的计数器。

Mic*_*per 4

此问题已在 GitHub 上报告:https ://github.com/rstudio/bookdown/issues/313

无法直接Table为内部书籍创建标题。DT:datatable

解释

HTML 小部件的行为与通常用于在 bookdown 中创建表格的命令DT:datatable不同。knitr:kable标题Table只会为kable生成的表格生成,而像这样的所有图像/图形/html 输出都不会作为表格标签,而是作为Figure.

附加问题

然而,您还缺少交叉引用的关键要求,如下所述

“与图表一样,带有标题的表格也将被编号并可供参考。”

解决方法

最好的解决方法是将表视为图形,将 a 添加fig.cap到块标头并使用以下命令引用它\@ref(fig:chunk-name)

---
title: "Untitled"
output: bookdown::html_book
---

Table \@ref(fig:irisTab): Iris table

```{r irisTab, fig.cap="A table"}
DT::datatable(iris)
```
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

您将在包作者的bookdown书中看到这种方法:https: //bookdown.org/yihui/bookdown/html-widgets.html。如果对一辉来说足够好,那么对我来说也足够好。