在bookdown中交叉引用DT :: datatable

时间:2018-04-13 14:58:03

标签: r-markdown knitr dt bookdown

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

1 个答案:

答案 0 :(得分:1)

  

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

直接在预订中为Table创建DT:datatable字幕是不可能的。

<强>解释

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

其他问题

但是,您也缺少交叉引用的关键要求as explained here

  

&#34;与数字一样,带字幕的表格也会编号并可以参考。&#34;

解决方法

最佳解决方法是将表视为数字,将Figure添加到块标头并使用fig.cap引用它:

\@ref(fig:chunk-name)

enter image description here

  

您将在包装作者https://bookdown.org/yihui/bookdown/html-widgets.html bookdown 一书中看到此方法。如果它对于一晖来说足够好,对我来说已经足够了。