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

时间:2019-06-15 00:00:41

标签: r r-markdown knitr kable kableextra

我正在尝试做一些非常简单的事情:生成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")
```

作品:

RStudio中的“编织”似乎总是可以在此文件上运行,并按预期生成mtcars数据帧,并用kable()很好地格式化

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

运行rmarkdown::render("test.Rmd")在第一次运行时有效,但第二次则无效。它引发错误:

! LaTeX Error: Unknown float option `H'.

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

其他信息

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

```{r cars}
mtcars %>%
  kable()
```

2 个答案:

答案 0 :(得分:3)

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

是添加:

options(kableExtra.latex.load_packages = FALSE)

在 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}

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

答案 1 :(得分:1)

我选择回答自己的问题,因为我发现了一种变通办法,如果有人发现错误的原因,希望该变通办法是不必要的。

似乎PDF渲染引擎只能识别tinytex的最基本的LaTeX安装。我尝试tinytex::tlmgr_install来手动安装必要的LaTeX软件包,但它们都返回了“软件包已存在”消息。

解决方案

我在Rmd中的YAML中添加了以下内容:

header-includes:
   - \usepackage{booktabs}
   - \usepackage{float}
   - \usepackage{colortbl}
   - \usepackage[table]{xcolor}

我基本上在每一行\usepackage上都添加了一行,直到我没有找到想要的格式错误为止。

有效的Rmd代码

rmarkdown::render()knit(Rstudio)都可以工作(以及我自己的OWN代码!):

---
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")
```