pdw
pdw

Reputation: 363

How to I keep a kable caption with a floating table?

I'm writing a pdf report in RMarkdown and want to float_left a kable with a caption. This works without a caption:

---
title: "test2"
output: pdf_document
header-includes:
  - \usepackage{wrapfig}
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
options(knitr.table.format="latex")
```{r, echo=FALSE}
library(knitr)
library(kableExtra)

kbl(head(cars), booktabs=T) %>% 
kable_styling(latex_options = "striped", position = "float_left")

But adding caption="A Caption" to the kbl line, as in

kbl(head(cars), caption="A Caption", booktabs=T) %>% throws this error:

! Extra }, or forgotten \endgroup.
\endwraptable ...kip \egroup \box \z@ \fi \egroup 
                                                  \WF@floatstyhook \def \wid...
l.164 \end{wraptable}

Error: LaTeX failed to compile test2.tex. See https://yihui.org/tinytex/r/#debugging for debugging tips. See test2.log for more info.
Execution halted

I've searched SO for what I'd think would be a frequent situation, but have found nothing. It must be something simple I'm missing. Help please.

Upvotes: 3

Views: 479

Answers (1)

bttomio
bttomio

Reputation: 2306

There is a solution here (although the caption moves to the bottom): https://github.com/haozhu233/kableExtra/issues/221#issuecomment-400473530

Following this solution, you could try this .Rmd file:

---
title: "test2"
output: pdf_document
header-includes:
  - \usepackage{wrapfig}
---
  
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
options(knitr.table.format="latex")
```

Lorem ipsum dolor sit amet, consecteturadipiscing elit.  Cras sit amet mauris inex ultricies elementum vel rutrum dolor.Phasellus tempor convallis dui, in hendreritmauris placerat scelerisque. Maecenas a ac-cumsan enim, a maximus velit. Pellentesquein risus eget est faucibus convallis nec atnulla. Phasellus nec lacinia justo. Morbifermentum, orci id varius accumsan, nibhneque porttitor ipsum, consectetur luctusrisus arcu ac ex. Aenean a luctus augue. Suspendisse et auctor nisl. Suspendisse cursus ultrices quam nonvulputate. Phasellus et pharetra neque, vel feugiat erat. Sed feugiat elit at mauris commodo consequat. Sedcongue lectus id mattis hendrerit. Mauris turpis nisl, congue eget velit sed, imperdiet convallis magna. Namaccumsan urna risus, non feugiat odio vehicula eget.

```{r, echo=FALSE}
library(knitr)
library(kableExtra)
library(xtable)

xtable2kable <- function(x) {
  out <- capture.output(print(x, table.placement = NULL))[-(1:2)]
  out <- paste(out, collapse = "\n")
  structure(out, format = "latex", class = "knitr_kable")
}

xtable(head(cars), booktabs=T, caption="A Caption") %>%
  xtable2kable() %>%
  kable_styling(latex_options = "striped", position = "float_left")
```

Lorem ipsum dolor sit amet, consecteturadipiscing elit.  Cras sit amet mauris inex ultricies elementum vel rutrum dolor.Phasellus tempor convallis dui, in hendreritmauris placerat scelerisque. Maecenas a ac-cumsan enim, a maximus velit. Pellentesquein risus eget est faucibus convallis nec atnulla. Phasellus nec lacinia justo. Morbifermentum, orci id varius accumsan, nibhneque porttitor ipsum, consectetur luctusrisus arcu ac ex. Aenean a luctus augue. Suspendisse et auctor nisl. Suspendisse cursus ultrices quam nonvulputate. Phasellus et pharetra neque, vel feugiat erat. Sed feugiat elit at mauris commodo consequat. Sedcongue lectus id mattis hendrerit. Mauris turpis nisl, congue eget velit sed, imperdiet convallis magna. Namaccumsan urna risus, non feugiat odio vehicula eget.

Lorem ipsum dolor sit amet, consecteturadipiscing elit.  Cras sit amet mauris inex ultricies elementum vel rutrum dolor.Phasellus tempor convallis dui, in hendreritmauris placerat scelerisque. Maecenas a ac-cumsan enim, a maximus velit. Pellentesquein risus eget est faucibus convallis nec atnulla. Phasellus nec lacinia justo. Morbifermentum, orci id varius accumsan, nibhneque porttitor ipsum, consectetur luctusrisus arcu ac ex. Aenean a luctus augue. Suspendisse et auctor nisl. Suspendisse cursus ultrices quam nonvulputate. Phasellus et pharetra neque, vel feugiat erat. Sed feugiat elit at mauris commodo consequat. Sedcongue lectus id mattis hendrerit. Mauris turpis nisl, congue eget velit sed, imperdiet convallis magna. Namaccumsan urna risus, non feugiat odio vehicula eget.

Output:

enter image description here

Upvotes: 2

Related Questions