我正在尝试在 bookdown 项目中创建对
DT::datatable
的引用。
bookdown 手册规定
(\#tab:label)
应放置在表格标题的开头。为了进行测试,我在 R-studio 中创建了一个新的 bookdown 项目,但用以下 _output.yml
配置替换了 html_book
的内容(我只对 HTML 输出感兴趣)。
bookdown::html_book:
toc: yes
theme: null
highlight: pygments
split_by: none
然后我在
01-intro.Rmd
底部添加了以下代码。
```{r irisTab}
DT::datatable(iris, caption = '(\\#tab:irisTab) Iris table')
```
See Table \@ref(tab:irisTab).
我的期望是
(\\#tab:irisTab)
将被Table 2.2
或至少2.2
取代,下面的参考将是2.2
。然而,这是行不通的。标签保持原样,参考文献为 ??
。
我能得到的最接近的结果是将标题文本放在表格之前。
Table (\#tab:irisTab): Iris table
```{r irisTab}
DT::datatable(iris)
```
See Table \@ref(tab:irisTab).
在这种情况下,参考有效,但标签
(\#tab:irisTab)
在输出中仍然逐字保留,即它不会按预期替换为 2.2
。
有什么方法可以创建一个带有标题并且可以引用的DT表吗?
更新 1:@mikey-harper 建议使用
fig.cap
。但是, fig.cap
仅更新 fig
计数器,而不更新 tab
计数器。因此,如果您有任何非 DT 表,则会有多个具有相同编号的表。或许可以将所有表格视为数字。然而,这不是标准方法。通常,表格和数字有单独的计数器。
此问题已在 GitHub 上报告:https://github.com/rstudio/bookdown/issues/313
无法直接在 bookdown 中为
Table
创建 DT:datatable
标题。
解释
像
DT:datatable
这样的 HTML 小部件的行为与 knitr:kable
命令不同,后者通常用于在 bookdown 中创建表格。 Table
标题只会为 kable
生成的表格生成,而像这样的所有图像/图形/html 输出都不会作为表格标签,而是作为 Figure
。
其他问题
但是,您还缺少交叉引用的关键要求,如此处所述:
“与图一样,带有标题的表格也会被编号并可以参考。”
解决方法
最好的解决方法是将表格视为图形,在块标题中添加
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)
```
您将在包作者的bookdown书中看到这种方法:https://bookdown.org/yihui/bookdown/html-widgets.html。如果对一辉来说足够好,对我来说也足够好。
自从 StackOverflow 中的最后一个答案以来,GitHub Issue thread 一直在继续,并且出现了一个有用的 solution - 至少对我而言
bookdown::html_document2
- 已经出现。为了简单起见,我将在这里重现它,但最初编写该块的是ldecicco-USGS。
---
title: "Untitled"
site: bookdown::bookdown_site
output: bookdown::gitbook
documentclass: book
---
```{r myDThtmltools, results="asis", echo=FALSE}
library(DT)
datatable(head(iris))
cat("<table>", paste0("<caption>",
"(#tab:myDThtmltools)",
"caption",
"Here's my caption",
"</caption>"),
"</table>", sep ="\n")
```
Tab. \@ref(tab:myDThtmltools)