在RStudio中,`knit`始终有效,但是`rmarkdown :: render`在第二次运行时会失败(但不是第一次!)

Mar*_*nar 5 r knitr r-markdown kableextra kable

我正在尝试做一些非常简单的事情:以PDF格式生成报告。终于找到了重现我问题的方法。我需要用于rmarkdown::render根据中的数据创建报告GlobalEnv。我正在使用tinytex包裹。这里是test.Rmd

---
title: "Untitled"
output: pdf_document
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE)
library(kableExtra)
library(tidyverse)
```

## R Markdown

```{r cars}
mtcars %>%
  kable(booktabs = TRUE) %>%
  kable_styling(latex_options = "striped")
```
Run Code Online (Sandbox Code Playgroud)

作品:

RStudio中的“编织”似乎总是在此文件上运行,按预期方式生成mtcars数据帧,并使用kable()

不起作用(但应该吗?):

运行rmarkdown::render("test.Rmd")可以在“第一次运行”中进行,但不能在第二次运行中进行。它引发错误:

! LaTeX Error: Unknown float option `H'.
Run Code Online (Sandbox Code Playgroud)

此后,RStudio中的“编织”将生成PDF,但是R / knitr会打印rmarkdown::render("test.Rmd")命令中的所有警告/错误消息。

附加信息

rmarkdown::render("test.Rmd")如果将上述代码块更改为,则运行不会产生错误

```{r cars}
mtcars %>%
  kable()
```
Run Code Online (Sandbox Code Playgroud)

Mnl*_*Mnl 5

那对我不起作用。我在 xcolor 选项中遇到冲突。第3页指出的解决方案:https://haozhu233.github.io/kableExtra/awesome_table_in_pdf.pdf

是添加:

options(kableExtra.latex.load_packages = FALSE)
Run Code Online (Sandbox Code Playgroud)

在 YAML 中:

header-includes:
- \usepackage{booktabs}
- \usepackage{longtable}
- \usepackage{array}
- \usepackage{multirow}
- \usepackage{xcolor}
- \usepackage{wrapfig}
- \usepackage{float}
- \usepackage{colortbl}
- \usepackage{pdflscape}
- \usepackage{tabu}
- \usepackage{threeparttable}
- \usepackage{threeparttablex}
- \usepackage[normalem]{ulem}
- \usepackage{makecell}
Run Code Online (Sandbox Code Playgroud)

请注意,您可以删除任何不需要的包。


Mar*_*nar 3

我选择回答我自己的问题,因为我找到了一种解决方法,如果有人找到错误的原因,则希望不需要该解决方法。

看起来 PDF 渲染引擎除了最基本的 LaTeX 安装之外不识别任何东西tinytex。我尝试tinytex::tlmgr_install手动安装必要的 LaTeX 包,但它们都返回了“包已存在”消息。

解决方案

我已将以下内容添加到 Rmd 中的 YAML 中:

header-includes:
   - \usepackage{booktabs}
   - \usepackage{float}
   - \usepackage{colortbl}
   - \usepackage[table]{xcolor}
Run Code Online (Sandbox Code Playgroud)

我基本上添加了每一\usepackage行,直到我没有收到我正在寻找的格式的错误。

工作 RMD 代码

rmarkdown::render()和(Rstudio)都knit可以工作(也可以在我自己的代码上工作!):

---
title: "Untitled"
output: pdf_document
header-includes:
   - \usepackage{booktabs}
   - \usepackage{float}
   - \usepackage{colortbl}
   - \usepackage[table]{xcolor}
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE)
library(kableExtra)
library(tidyverse)
```

## R Markdown

```{r cars}
mtcars %>%
  kable(booktabs = TRUE) %>%
  kable_styling(latex_options = "striped")
```
Run Code Online (Sandbox Code Playgroud)