Reputation: 7725
I would like wrap long text in my kable table. Here is a simple example of a table with column text that is too long and needs to be wrapped for the table to fit on the page.
---
title: "test"
output: pdf_document
---
```{r setup, include=FALSE}
library(knitr)
```
This is my test
```{r test, echo=FALSE}
test <- data.frame(v1=c("This is a long string. This is a long string. This is a long string. This is a long string. This is a long string.",
"This is a another long string. This is a another long string. This is a another long string. This is a another long string. This is a another long string."),
v2=c(1, 2))
kable(test)
```
Upvotes: 51
Views: 37943
Reputation: 21367
I wanted to wrap a long text column from kable
in Quarto. I found success using the tbl-colwidths
option for a chunk. See here.
So for this example it would look like:
```{r}
#| tbl-colwidths: [80, 20]
test <- data.frame(v1=c("This is a long string. This is a long string. This is a long string. This is a long string. This is a long string.",
"This is a another long string. This is a another long string. This is a another long string. This is a another long string. This is a another long string."),
v2=c(1, 2))
kable(test)
```
The [80, 20]
means "spend 80% of the total column width on column 1, and 20% on column 2."
Upvotes: 0
Reputation: 7826
An alternative solution other than the awesome pander
package is to use column_spec
in kableExtra
. In this case, the following code will do the trick.
kable(test, "latex") %>%
column_spec(1, width = "10em")
Upvotes: 68
Reputation: 28622
I've created the pander
package to produce markdown tables in a flexible way. By default, it will split cells with long string to 30 chars, but there are a bunch of global options and fn arguments to override that, enable hyphenation and other tweaks. Quick demo:
> pander::pander(test)
-----------------------------------
v1 v2
------------------------------ ----
This is a long string. This is 1
a long string. This is a long
string. This is a long string.
This is a long string.
This is a another long string. 2
This is a another long string.
This is a another long string.
This is a another long string.
This is a another long string.
-----------------------------------
> pander::pander(test, split.cell = 80, split.table = Inf)
------------------------------------------------------------------------------------
v1 v2
------------------------------------------------------------------------------- ----
This is a long string. This is a long string. This is a long string. This is a 1
long string. This is a long string.
This is a another long string. This is a another long string. This is a another 2
long string. This is a another long string. This is a another long string.
------------------------------------------------------------------------------------
Upvotes: 31