Bookdown / Knitr / Kable выводит идеально до HTML, но без таблицы в PDF - PullRequest
1 голос
/ 19 апреля 2020

Я использую пакет bookdown для создания большого документа с таблицами, используя функцию knitr :: kable. Я могу получить документ для создания таблиц в HTML отлично, но в PDF содержимое таблицы просто отображается в виде списка чисел. Это также верно для вывода в Word. Скомпилированный LaTeX также выглядит как список чисел.

Это также верно для вывода из других пакетов, таких как sjplot.

Та же проблема возникает и при коде образца из книги учета.


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

Получает ожидаемый результат в HTML:

HTML Output

Но в PDF выдает следующее:

enter image description here

Заголовок YAML в индексе. rmd:

#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"]

1 Ответ

3 голосов
/ 19 апреля 2020

Оказывается, проблема возникает из-за некоторого взаимодействия с пакетом 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 не работает для таблицы, и вы просто получите список значений ячеек таблицы (как для PDF, так и для Word) - как показано на рисунке выше.

Чтобы решить, удалите все операторы библиотеки

Затем убедитесь, что вы выгружаете пакет:

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

И, наконец, для себя я обнаружил, что мне нужно "Перезапустить R и очистить все выходы" или "Завершить R" из R-Studio "Session" меню.

...