! LaTeX 错误:环境三部分表未定义。仅当使用 bookdown 编织为 pdf 时

问题描述 投票:0回答:1

我正在使用

rmarkdown
创建一个 pdf 文档(我的论文)。我正在使用
bookdown
包来编织所有章节,使用合并和编织方法。 当我通过单击单个 .Rmd 文件的“Knit”来使用编织到
pdf_document2
的方法时,我有一些复杂的表格可以在单个章节中很好地编织。但是,当我尝试编织多个文件时,我收到此错误:
! LaTeX Error: Environment ThreePartTable undefined.

这是我的mwe: 编织以下文档效果很好,并产生了预期的结果

---
header-includes:
- \usepackage{caption}
- \usepackage{pdflscape}
- \usepackage{longtable}
- \usepackage{lmodern}
- \usepackage{graphicx}
- \usepackage{threeparttable}
output:
  bookdown::pdf_document2:
    fig_caption: true
    number_sections: true
    toc: true
    toc_depth: '3'
    latex_engine: xelatex
fontsize: 11pt
always_allow_html: true
---

```{r setup2, include=FALSE}
library(knitr)
knitr::opts_chunk$set(echo = FALSE)
library(readxl)
library(dplyr)
library(kableExtra)
library(stringr)
library(purrr)
```

# General Introduction

## Section

Text

```{r rable}

kbl(mtcars, booktabs = T, escape = F, caption = 'MT Cars')%>%
  kableExtra::footnote('(ref:longcap)', threeparttable =T)
```


(ref:longcap) A reaaaaaa aaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaa aaaaaaaaaaa aaaaaa aaaaaaa aaaaaaaaaa aaaaaaaaa aaaaaaaa aaaaaaaaaaaaaa aaaa aaaaa aaaaaaaa aaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaa aaaaaaaaaa aaaaaaaaa aaaaa aaaaaaaa aaaaaaaaaa aaaaaaa aaaaaaaaa aaaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaa aaaaaaaaaaaaaaa aaaaaaaa aaaaaaaaaaaaaaaally long caption with citations.


```{r rable2 }
iris%>%
  kbl( longtable = T, escape = F, booktabs =  T, caption = 'Table x')%>%
  column_spec(1, width = "8em")%>%
  column_spec(2, width = "10em")%>%
  column_spec(3, width = "9em")%>%
  column_spec(4, width = "10em")%>%
  column_spec(5, width = "12em")%>%
  kable_styling(latex_options= c("repeat_header"), font_size =10, repeat_header_method =  "replace")%>%
  kableExtra::footnote(general = '(ref:longcap)', 
           general_title =   "Abbreviations",
           threeparttable = T)%>%
  landscape()

```

但是,当我使用

bookdown
方法组合多个文件时,即使仅使用相同的代码,也会收到错误。 这是我的
_bookdown.yml
:

index.Rmd 是 YAML 和代码设置:

---
header-includes:
- \usepackage{caption}
- \usepackage{pdflscape}
- \usepackage{longtable}
- \usepackage{lmodern}
- \usepackage{graphicx}
- \usepackage{threeparttable}
output:
  bookdown::pdf_document2:
    fig_caption: true
    number_sections: true
    toc: true
    toc_depth: '3'
    latex_engine: xelatex
fontsize: 11pt
always_allow_html: true
---

```{r setup2, include=FALSE}
library(knitr)
knitr::opts_chunk$set(echo = FALSE)
library(readxl)
library(dplyr)
library(kableExtra)
library(stringr)
library(purrr)
```

和testing2.Rmd是章节内容:


# General Introduction

## Section

Text



```{r rable}

kbl(mtcars, booktabs = T, escape = F, caption = 'MT Cars')%>%
  kableExtra::footnote('(ref:longcap)', threeparttable =T)
```


(ref:longcap) A reaaaaaa aaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaa aaaaaaaaaaa aaaaaa aaaaaaa aaaaaaaaaa aaaaaaaaa aaaaaaaa aaaaaaaaaaaaaa aaaa aaaaa aaaaaaaa aaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaa aaaaaaaaaa aaaaaaaaa aaaaa aaaaaaaa aaaaaaaaaa aaaaaaa aaaaaaaaa aaaaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaa aaaaaaaaaaaaaaa aaaaaaaa aaaaaaaaaaaaaaaally long caption with citations.


```{r rable2 }
iris%>%
  kbl( longtable = T, escape = F, booktabs =  T, caption = 'Table x')%>%
  column_spec(1, width = "8em")%>%
  column_spec(2, width = "10em")%>%
  column_spec(3, width = "9em")%>%
  column_spec(4, width = "10em")%>%
  column_spec(5, width = "12em")%>%
  kable_styling(latex_options= c("repeat_header"), font_size =10, repeat_header_method =  "replace")%>%
  kableExtra::footnote(general = '(ref:longcap)', 
           general_title =   "Abbreviations",
           threeparttable = T)%>%
  landscape()

```

然后我使用以下命令进行渲染:

bookdown::render_book(".", "bookdown::pdf_document2", config_file = "_bookdown.yml", preview = F, clean = T)

我的 YAML 和加载的包在单独运行的文件和索引文件中是相同的。为什么我会收到此错误?第二个表发生错误。和longtable有关系吗?

r latex r-markdown bookdown
1个回答
1
投票

环境

ThreePartTable
未在
threeparttable
样式文件中定义,而是在
threeparttablex
样式中定义。添加

- \usepackage{threeparttablex}

header-includes
文件中的
index.Rmd
将修复该错误。

您可能想知道为什么简单地编织您的第一个文件不需要这个。我也是,但我的猜测是编织自动包含了它,而

bookdown::render_book
调用显然没有包含它。

编辑添加:我相信这是由于

kableExtra
中的错误引起的,该错误已在开发版本中修复。 CRAN 上的版本需要
threeparttablex
但并不强制使用它。开发版本修复了这个错误(以及其他一些错误)。您可以使用安装它

remotes::install_github("haozhu233/kableExtra")

之后您就不需要上面给出的

\usepackage{threeparttablex}
解决方法了。

© www.soinside.com 2019 - 2024. All rights reserved.