在bookdown中交叉引用DT::datatable

问题描述 投票:0回答:2

我正在尝试在 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 表,则会有多个具有相同编号的表。或许可以将所有表格视为数字。然而,这不是标准方法。通常,表格和数字有单独的计数器。

r r-markdown knitr dt bookdown
2个回答
4
投票

此问题已在 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)
```

enter image description here

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


3
投票

自从 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)
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.