es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Desafortunadamente, el paquete kableExtra no ofrece una solución directa para el problema conocido del paquete colortbl. Una posible solución es modificar manualmente el código LaTeX resultante después de haber sido generado por kableExtra. Esto se puede hacer estableciendo keep_tex: true en el encabezado YAML del documento rmarkdown, 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 con colortbl 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 es xcolor, que se puede utilizar con kableExtra especificando el formato en la función cell_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 con kableExtra, existen enfoques alternativos que se pueden utilizar para lograr resultados similares.

Comments are closed.