Quarto文档上带有kableExtra的多列脚注

Multicolumn Footnote with kableExtra on Quarto document

提问人:Robert 提问时间:10/15/2023 更新时间:10/16/2023 访问量:78

问:

我有一个用kableExtra生成的表格,上面有一个跨越几列的脚注。如果我在 R 中单独运行它,它会正确显示。但是,当在 Quarto 文档中运行时,它会将脚注的文本限制为第一列的宽度。

这是一个可重现的例子

library(kableExtra)
dt <- mtcars[1:5, 1:4]

# HTML table
kbl(dt, caption = "Demo Table") %>%
  kable_styling(bootstrap_options = "striped",
                full_width = F) %>%
  add_header_above(c(" ", "Group 1" = 2, "Group 2[note]" = 2)) %>%
  footnote(c("Let's make a very long table footnote"))

enter image description here以前有没有人经历过这种情况,如果有,知道如何解决它?

R 夸托 kable kableextra

评论


答:

0赞 Quinton.Quagliano 10/15/2023 #1

将 Quarto 编织为 PDF(通过 LaTeX)时,为作品添加参数:threeparttable = TRUEfootnote()

# In LaTeX format

base::library(package = kableExtra)
    dt <- mtcars[1:5, 1:4]

# PDF table
kableExtra::kbl(
  x        = dt, 
  caption  = "Demo Table",
  booktabs = TRUE
) %>%
  kableExtra::kable_styling(
    bootstrap_options = "striped",
    full_width        = FALSE
  ) %>%
  kableExtra::add_header_above(
    c(
      " ", 
      "Group 1" = 2, 
      "Group 2[note]" = 2
    )
  ) %>%
  kableExtra::footnote(
    general           = "Let's make a very long table footnote",
    threeparttable    = TRUE, # PAY ATTENTION HERE
    footnote_as_chunk = TRUE
  )

这是使用threeparttable LaTeX包来产生我们想要的效果。此处明确提到了此选项。

对于HTML,恐怕这个问题要困难得多,因为您将无法访问LaTeX包,因此无法工作。整理你的代码 - 我注意到删除你的标题行实际上允许文本扩展更多。因此,删除此代码会产生这种效果:threeparttable = TRUE

  kableExtra::add_header_above(
    c(
      " ", 
      "Group 1" = 2, 
      "Group 2[note]" = 2
    )
  ) %>%

基于此,脚注换行在某种程度上是由于组的标题列的格式。我玩了许多函数的参数,但无法找到防止文本换行的明确方法。似乎有些人对新的(呃)Quarto 格式和这个包有一些问题,也许值得阅读这里的一些未解决的问题。

鉴于所有这些,我建议要么切换到 PDF 格式,放弃标题行,要么查看其他可能能够做到这一点的软件包(也许?gt

评论

0赞 Robert 10/15/2023
感谢您抽出宝贵时间探索这个问题。我需要使用 HTML,所以暂时没有 PDF。我会通读未解决的问题,甚至可能打开我自己的一个问题。
0赞 Quinton.Quagliano 10/15/2023
没关系!如果您找到解决方案,我绝对建议您回到这里进行编辑 - 我将来可能需要它;)
2赞 Robert 10/15/2023
明确!如果 Quarto 要像 Posit 想要的那样成为这片土地的法律,那么这个故障应该会得到解决。
0赞 Julian 10/16/2023 #2

这似乎是错误,我会打开一个问题。同时,您可以尝试 parse-latex 过滤器,首先将表构建为 latex 表,然后让过滤器将其转换为 HTML,即

---
format: html
filters: [parse-latex]
---

```{r}
library(kableExtra)
dt <- mtcars[1:5, 1:4]

# HTML table
kbl(dt,format = "latex", caption = "Demo Table") %>%
  kable_styling(bootstrap_options = "striped",
                full_width = F) %>%
  add_header_above(c(" ", "Group 1" = 2, "Group 2[note]" = 2)) %>%
   footnote(general = "Here is a general comments of the table that might be very long. "
           )
```

评论

0赞 Robert 10/17/2023
非常好。非常感谢!