KableExtra: el comando \cellcolor de colortbl no llena toda la celda cuando se utiliza en combinación con \makecell.
Estoy buscando una solución alternativa para un problema conocido en el que \cellcolor del paquete colortbl no funciona correctamente con \makecell. Como se menciona, probablemente ya exista una solución alternativa en Latex, pero estoy buscando una solución en términos del paquete R kableExtra al producir archivos pdf usando rmarkdown. Aquí hay una captura de pantalla: como se puede ver, algunas celdas no están llenas por completo.
Aquí hay un ejemplo de reproducción mínimamente reproducible en rmarkdown:
biblioteca(kableExtra)
biblioteca(tidyverse)
# Data
df <- tribble(
~col1, ~col2,
"texto muy largo que necesita ser dividido en varias líneas para que quepa", 4,
"texto muy largo que necesita ser dividido", 4,
"texto muy largo que necesita una solución", 4,
) %>%
modify_at(
.x = .,
.at = 1,
.f = stringr::str_wrap,
width = 25
)
# Tabla
df %>%
mutate(across(.cols = 1, .fns = linebreak, align = "l")) %>%
kbl(x = ., escape = FALSE) %>%
row_spec(row = 1:3, background = "#e5e5e5")
Una solución posible es especificar keep_tex: true en el YAML y solucionar el problema en el archivo .tex manualmente antes de usar pandoc. Pero estoy generando muchas tablas y esto no puede ser eficiente. Cualquier sugerencia de una posible solución alternativa sería muy apreciada.
davy.ai
Desafortunadamente, el paquete
kableExtra
no ofrece una solución directa para el problema conocido del paquetecolortbl
. Una posible solución es modificar manualmente el código LaTeX resultante después de haber sido generado porkableExtra
. Esto se puede hacer estableciendokeep_tex: true
en el encabezado YAML del documentormarkdown
, lo que evitará que pandoc convierta LaTeX a pdf. Luego, una vez que se haya generado el archivo LaTeX, puedes editar manualmente para solucionar el problema concolortbl
y luego usar LaTeX para compilar el pdf.Sin embargo, este enfoque puede ser engorroso y llevar mucho tiempo, especialmente si estás generando muchas tablas. Otra solución posible es utilizar un paquete alternativo a
colortbl
para la coloración de celdas. Uno de estos paquetes esxcolor
, que se puede utilizar conkableExtra
especificando el formato en la funcióncell_spec()
. Aquí hay un ejemplo:“`{r}
library(kableExtra)
library(tidyverse)
Data ——————————————————————–
df <- tribble( ~col1, ~col2, "texto muy largo que necesita ser dividido en varias líneas para que quepa", 4, "texto muy largo que necesita ser dividido", 4, "texto muy largo que necesita una solución", 4, ) %>%
modify_at(
.x = .,
.at = 1,
.f = stringr::str_wrap,
width = 25
)
Table ——————————————————————-
df %>%
mutate(across(.cols = 1, .fns = linebreak, align = “l”)) %>%
kbl(x = ., escape = FALSE) %>%
row_spec(row = 1:3, background = “gray90”) %>%
cell_spec(even_row() >> odd_column(), “background”, “gray80”) %>%
cell_spec(odd_row() >> even_column(), “background”, “gray80”)
“`
En este ejemplo, utilizamos la función
cell_spec()
para especificar que las filas pares y las columnas impares, y las filas impares y las columnas pares, deben tener un color de fondo gris. Este enfoque puede extenderse a otros requisitos de formato, según sea necesario.En general, aunque no hay una solución directa para el problema del paquete
colortbl
conkableExtra
, existen enfoques alternativos que se pueden utilizar para lograr resultados similares.