Bookdown / Knitr / Kable 完美输出为 HTML 但没有 Table 为 PDF

Bookdown / Knitr / Kable Outputting Perfectly to HTML but No Table to PDF

我正在使用 bookdown 包使用 knitr::kable 函数生成一个包含 tables 的大型文档。我可以让文档完美地在 HTML 中生成 tables,但在 PDF 中,table 内容仅显示为数字列表。输出到 Word 也是如此。编译后的 LaTeX 似乎也是一个数字列表。

其他包(如 sjplot)的输出也是如此。

同样的问题也出现在sample code from the bookdown book.


knitr::kable(
  list(
    head(iris[, 1:2], 3),
    head(mtcars[, 1:3], 5)
  ),
  caption = 'A Tale of Two Tables.', booktabs = TRUE
)

在 HTML 中产生预期的输出:

但是,在 PDF 中生成以下内容:

index.rmd 中的 YAML header 是:

#output ~~~~~~~~~~~ [see _output.yml] 
site: bookdown::bookdown_site
output: [bookdown::gitbook, bookdown::pdf_book, bookdown::word_document2, bookdown::html_document2]
documentclass: book

_output.yml中的输出设置为:

bookdown::pdf_book:
    keep_tex: true
    latex_engine: xelatex
    includes:
      in_header: tex/biblio.tex
    number_sections: yes
    pandoc_args: ["--top-level-division=chapter"]

事实证明问题出在与 kableExtra 包的一些交互中

因此,即使您指定(正如我在示例代码中所做的那样)knitr 命名空间 (knitr::kable),如果 kableExtra 已加载。因此,此 在呈现为 PDF 时将不起作用

library(kableExtra, warn.conflicts = TRUE)
knitr::kable(head(iris, 20), caption = 'Here is a nice table!',  booktabs = TRUE)

虽然 HTML 输出一切正常,但 PDF 格式的渲染对 table 不起作用,您最终得到的是 table 单元格值的列表(对于 PDF 和 Word)- 如上图所示。

要解决,删除任何库语句

然后,确保卸载包:

detach("package:kableExtra", unload = TRUE)

最后,对我来说,我发现我需要从 R-Studio "Session" 菜单中 "Restart R and Clear All Outputs" 或 "Terminate R"。