Raw HTML tables get an equal-width <colgroup> when any cell contains block content, overriding cell widths

Abierto
#15,219 1 comentario 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

@A-G0D ya está trabajando en esto.

Desde el 4/11/2026.

  • #15282 de @A-G0D — abierto

Evaluación

Dificultad
4/5
Tiempo estimado
3-5 días
Aptitud para principiantes
52/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
javascript
Área
backend

Línea de trabajo

Start with src/resources/filters/normalize/astpipeline.lua, where the issue says Quarto reads raw HTML tables with pandoc.read(tableHtml, "html+raw_html"); then trace how the resulting table is written back out. Compare tables with and without declared <col> widths, especially when a cell contains block content. Done means tables without author-specified column widths no longer gain equal-width columns, while declared widths remain intact; the issue suggests resetting widths to ColWidthDefault.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

bug html tables
I have:
  • searched the issue tracker for similar issues
  • installed the latest version of Quarto CLI
  • formatted my issue following the Bug Reports guide
Bug description

When HTML table processing parses a raw HTML table that has no <col> widths, and any cell contains block content (e.g. a <div>), every column gets an equal width in the output. Widths set on the cells are then overridden.

The widths come from Pandoc's HTML reader. With no <col> widths, it leaves the widths unset when every cell is simple, and otherwise assigns 1 / ncols to each column (normalizeColWidths). Quarto reads the table with pandoc.read(tableHtml, "html+raw_html") (astpipeline.lua) and writes it back out, so those widths become a <colgroup>.

This is how it shows up for R users: kableExtra's add_header_above() wraps each group label in a <div>, so column_spec(width = ...) stops working as soon as a spanning header is added (rstudio/rstudio#19321, haozhu233/kableExtra#915). rmarkdown::render() passes the HTML through untouched, so the same table is fine there.

Steps to reproduce
---
format: html
---

```{=html}
<table>
<thead>
<tr><th>a</th><th><div>b</div></th><th>c</th></tr>
</thead>
<tbody>
<tr><td>1</td><td style="width: 5cm">2</td><td>3</td></tr>
</tbody>
</table>
```

The original kableExtra example:

---
format: html
---

```{r}
library(kableExtra)

kable(mtcars[1:5, 1:4], format = "html") |>
  add_header_above(c(" " = 1, "Group 1" = 2, "Group 2" = 2)) |>
  column_spec(2:3, width = "5cm")
```
Actual behavior
<colgroup>
<col style="width: 33%">
<col style="width: 33%">
<col style="width: 33%">
</colgroup>

In the kableExtra example, the <colgroup> has five width: 20% columns, and Chrome draws every column at 160px. The width: 5cm (about 189px) on columns 2 and 3 is ignored.

Expected behavior

No <colgroup>, the same as when the <div> is removed from the header cell, so the widths on the cells apply. In the kableExtra example with html-table-processing: none, there is no <colgroup> and columns 2 and 3 come out at 189px (data-quarto-disable-processing="true" also drops the <colgroup>). Setting tbl-colwidths: false does not help.

A possible fix: after pandoc.read(), reset the column widths to ColWidthDefault when the source table declared no <col> widths, since the equal widths were not specified by the author.

I haven't run the 1.11 pre-release, but the parsing code is unchanged on main, main still pins Pandoc 3.10, and Pandoc 3.12.1's HTML reader behaves the same way.

Your environment
  • Quarto 1.10.19 (the copy bundled with RStudio), run from the command line; same result rendering from RStudio
  • macOS 27.0.1 (the original report is on macOS Sequoia 15.8.1)
  • kableExtra 1.4.1, R 4.6.1
Quarto check output
Quarto 1.10.19
[✓] Checking environment information...
[✓] Checking versions of quarto binary dependencies...
      Pandoc version 3.10.0: OK
      Dart Sass version 1.101.0: OK
      Deno version 2.7.14: OK
      Typst version 0.15.1: OK
[✓] Checking versions of quarto dependencies......OK
[✓] Checking Quarto installation......OK
      Version: 1.10.19
      Path: /Applications/RStudio.app/Contents/Resources/app/quarto/bin
[✓] Checking basic markdown render....OK
[✓] Checking R installation...........OK
      Version: 4.6.1
      Path: /Library/Frameworks/R.framework/Resources
      knitr: 1.52
      rmarkdown: 2.32
[✓] Checking Knitr engine render......OK
Lenguaje dominante
JavaScript
Estrellas
6.1k
Forks
478
Merge medio
17 h 53 min
PR fusionados (30 d)
135

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de quarto-dev/quarto-cli

Todos los issues de quarto-dev/quarto-cli

Issues similares

Más issues de JavaScript

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.