AmerMathSoc / texml

A repository for texml development
9 stars 2 forks source link

avoid invalid HTML table markup / alternative approaches to table css #67

Closed pkra closed 2 years ago

pkra commented 4 years ago

texml currently generates CSS using nth-child selectors to target individual rows and cells.

In the context of colspan and rowspan, this forced us to add hidden TD elements so that nth-child calculations would fit, cf. https://github.com/AmerMathSoc/texml/issues/45.

Unfortunately, this leads to invalid markup (html spec "If there exists a row or column in the table containing only slots that do not have a cell anchored to them, then this is a table model error.")

One solution would be to modify nth-child calculations (taking colspan and rowspan into account) to avoid this invalid markup.

Alternatively, texml could consider generating "functional CSS" instead, i.e., generate utility classes and add the class names to the table elements. Given the analysis in https://github.com/AmerMathSoc/texml/issues/45#issuecomment-585320408 this seems useful since the variations among styles seems limited. At least, it should be simple to do for borders (which is enough to fix the invalid markup).

I made a first example with a table in mcom3377 at https://codepen.io/pkra/pen/cc864b02c372e7451ad407dd7fffdd47.

pkra commented 3 years ago

While https://bugs.chromium.org/p/chromium/issues/detail?id=2902#c79 is finally being fixed, this issue here persists: texml creates invalid table markup to workaround the limitations of its CSS creation.

pkra commented 3 years ago

A quick research idea: gather stats on CSS rules texml generates.

Here's all the rules we have.

      1 { border-bottom: thin solid black }
      1 { border-right: medium solid black; }
      1 { padding-bottom: 1.0pt; }
      1 { padding-bottom: -12.0pt; }
      1 { padding-bottom: -2.5pt; }
      1 { padding-bottom: 3.61371pt; }
      1 { padding-bottom: 5.05942pt; }
      1 { padding-bottom: 7.11317pt; }
      1 { padding-bottom: 7.22743pt; }
      1 { padding-right: 3.69885pt; }
      1 { padding-right: 7.11317pt; }
      1 { width: 113.81102pt; }
      1 { width: 142.26378pt; }
      1 { width: 180.0pt; }
      1 { width: 216.81pt; }
      1 { width: 86.72377pt; }
      2 { border-top: medium solid black; }
      2 { padding-bottom: 12.0pt; }
      2 { padding-bottom: -15.0pt; }
      2 { padding-bottom: 9.00002pt; }
      2 { padding-right: 1.99168pt; }
      2 { padding-right: 20.0pt; }
      2 { padding-right: 4.2679pt; }
      2 { padding-right: 5.12149pt; }
      2 { width: 108.405pt; }
      2 { width: 140.0pt; }
      2 { width: 22.76228pt; }
      2 { width: 25.6073pt; }
      2 { width: 51.21504pt; }
      2 { width: 75.60242pt; }
      3 { padding-bottom: 10.0pt; }
      3 { padding-bottom: -5.0pt; }
      3 { padding-left: 10.0pt; }
      3 { padding-right: 10.0pt; }
      3 { padding-right: 1.42262pt; }
      3 { vertical-align: middle; }
      3 { width: 19.91684pt; }
      3 { width: 569.05511pt; }
      3 { width: 56.9055pt; }
      4 { padding-bottom: 2.84526pt; }
      4 { padding-bottom: 4.0pt; }
      4 { padding-bottom: 4.26773pt; }
      4 { padding-bottom: 8.0pt; }
      4 { width: 162.6075pt; }
      4 { width: 31.2982pt; }
      4 { width: 42.67912pt; }
      5 { padding-bottom: -4.0pt; }
      5 { padding-bottom: 5.69054pt; }
      5 { padding-left: 1.56468pt; }
      5 { padding-left: 1.70709pt; }
      5 { padding-left: -3.0pt; }
      5 { padding-right: 1.56468pt; }
      5 { padding-right: 1.70709pt; }
      5 { padding-right: -2.84526pt; }
      5 { padding-right: -3.0pt; }
      5 { padding-right: 3.98337pt; }
      5 { width: 48.36958pt; }
      6 { border: none; }
      6 { padding-bottom: 6.0pt; }
      6 { padding-left:  5.0pt; }
      6 { padding-right: 8.53581pt; }
      7 { background-color: Gray; }
      7 { border-left: double black; }
      7 { padding-bottom: -5.69054pt; }
      7 { padding-right: 40.0pt; }
      8 { border-bottom: medium solid black; }
      8 { padding-bottom: -7.5pt; }
      8 { padding-bottom: 7.5pt; }
      9 { padding-bottom: 0.0pt; }
      9 { padding-bottom: -6.0pt; }
      9 { padding-left: 3.69899pt; }
      9 { padding-right: 3.69899pt; }
      9 { padding-right: 5.69054pt; }
      9 { width: 28.45274pt; }
     10 { padding-left: 3.00003pt; }
     10 { padding-left: 4.00002pt; }
     10 { padding-right: 3.00003pt; }
     10 { padding-right: 4.00002pt; }
     12 { padding-right: 2.84526pt; }
     16 { padding-bottom: -10.0pt; }
     16 { padding-bottom: 3.0pt; }
     17 { padding-bottom: 2.0pt; }
     17 { padding-left: 3.8pt; }
     17 { padding-right: 3.8pt; }
     20 { background-color: lightgray; }
     21 { padding-left: 1.5pt; }
     21 { padding-right: 1.5pt; }
     32 { background-color: white; }
     34 { border-top: double black; }
     34 { padding-left: 4.25pt; }
     34 { padding-right: 4.25pt; }
     35 { padding-bottom: 2.5pt; }
     35 { padding-left: 2.5pt; }
     35 { padding-right: 2.5pt; }
     49 { vertical-align: top; }
     60 { padding-left: 2.0pt; }
     60 { padding-right: 2.0pt; }
     62 { background-color: LightGray; }
     75 { padding-bottom: 5.0pt; }
    112 { border-bottom: thin dashed black; }
    126 { padding-right: 0.0pt; }
    146 { padding-bottom: 2.84544pt; }
    169 { padding-left: 3.0pt; }
    169 { padding-right: 3.0pt; }
    171 { padding-left: 0.0pt; }
    181 { border-left: none; }
    192 { border-bottom: double black; }
    241 { border-right: double black; }
    302 { padding-left: 4.0pt; }
    302 { padding-right: 4.0pt; }
    412 { border-right: none; }
    566 { text-align: left; }
    574 { border-top: thin solid black; }
    619 { text-align: right; }
    727 { border-left: thin solid black; }
    871 { border-collapse: collapse; }
   3466 { border-right: thin solid black; }
   4633 { border-bottom: thin solid black; }
   5232 { text-align: center; }
   5601 { padding-right: 5.0pt; }
   5607 { padding-left: 5.0pt; }

How many lines of CSS do we generate?

5 ./mcom/mcom3518/xml/mcom3518.css
11 ./mcom/mcom3483/xml/mcom3483.css
12 ./bproc/bproc26/xml/bproc26.css
12 ./btran/btran49/xml/btran49.css
13 ./bull/bull1707/xml/bull1707.css
13 ./mcom/mcom3343/xml/mcom3343.css
13 ./mcom/mcom3548/xml/mcom3548.css
14 ./mcom/mcom3424/xml/mcom3424.css
15 ./mcom/mcom3431/xml/mcom3431.css
16 ./mcom/mcom3341/xml/mcom3341.css
17 ./mcom/mcom3565/xml/mcom3565.css
18 ./mcom/mcom3338/xml/mcom3338.css
19 ./mcom/mcom3387/xml/mcom3387.css
19 ./mcom/mcom3423/xml/mcom3423.css
19 ./mcom/mcom3441/xml/mcom3441.css
19 ./mcom/mcom3583/xml/mcom3583.css
21 ./btran/btran45/xml/btran45.css
21 ./mcom/mcom3542/xml/mcom3542.css
21 ./mcom/mcom3602/xml/mcom3602.css
21 ./mj3/btran/btran45/xml/btran45.css
21 ./mj3/mcom/mcom3602/xml/mcom3602.css
22 ./bproc/bproc45/xml/bproc45.css
22 ./mcom/mcom3348/xml/mcom3348.css
23 ./gsm/gsm211/xml/gsm211.css
23 ./jams/jams907/xml/jams907.css
24 ./btran/btran52/xml/btran52.css
24 ./mj3/btran/btran52/xml/btran52.css
25 ./bproc/bproc48/xml/bproc48.css
25 ./btran/btran62/xml/btran62.css
25 ./mcom/mcom3539/xml/mcom3539.css
26 ./jams/jams950/xml/jams950.css
26 ./mcom/mcom1180/xml/mcom1180.css
26 ./mcom/mcom3446/xml/mcom3446.css
28 ./btran/btran28/xml/btran28.css
28 ./mcom/mcom3451/xml/mcom3451.css
28 ./mcom/mcom3466/xml/mcom3466.css
29 ./jams/jams385/xml/jams385.css
29 ./jams/jams949/xml/jams949.css
29 ./mcom/mcom3320/xml/mcom3320.css
30 ./mcom/mcom3410/xml/mcom3410.css
32 ./mcom/mcom3609/xml/mcom3609.css
33 ./mcom/mcom3377/xml/mcom3377.css
34 ./bull/bull1670/xml/bull1670.css
34 ./mcom/mcom3416/xml/mcom3416.css
36 ./mcom/mcom3498/xml/mcom3498.css
36 ./mcom/mcom3501/xml/mcom3501.css
37 ./jams/jams421/xml/jams421.css
37 ./mcom/mcom3371/xml/mcom3371.css
37 ./mcom/mcom3426/xml/mcom3426.css
37 ./mcom/mcom3594/xml/mcom3594.css
38 ./btran/btran29/xml/btran29.css
39 ./mcom/mcom3358/xml/mcom3358.css
39 ./mcom/mcom3485/xml/mcom3485.css
39 ./mcom/mcom3490/xml/mcom3490.css
39 ./mcom/mcom3561/xml/mcom3561.css
40 ./mcom/mcom3586/xml/mcom3586.css
41 ./mcom/mcom3398/xml/mcom3398.css
42 ./mcom/mcom3397/xml/mcom3397.css
42 ./mcom/mcom3421/xml/mcom3421.css
42 ./mcom/mcom3505/xml/mcom3505.css
42 ./mcom/mcom3589/xml/mcom3589.css
44 ./jams/jams934/xml/jams934.css
44 ./mcom/mcom3432/xml/mcom3432.css
44 ./mcom/mcom3585/xml/mcom3585.css
45 ./jams/jams928/xml/jams928.css
46 ./mcom/mcom3517/xml/mcom3517.css
47 ./jams/jams960/xml/jams960.css
49 ./mcom/mcom3334/xml/mcom3334.css
50 ./btran/btran25/xml/btran25.css
50 ./mcom/mcom1149/xml/mcom1149.css
50 ./mcom/mcom3370/xml/mcom3370.css
50 ./mcom/mcom3601/xml/mcom3601.css
51 ./mcom/mcom3481/xml/mcom3481.css
52 ./mcom/mcom3360/xml/mcom3360.css
52 ./mcom/mcom3497/xml/mcom3497.css
52 ./mcom/mcom3535/xml/mcom3535.css
53 ./mcom/mcom3580/xml/mcom3580.css
54 ./bproc/bproc15/xml/bproc15.css
54 ./mcom/mcom3486/xml/mcom3486.css
54 ./mcom/mcom3530/xml/mcom3530.css
55 ./mcom/mcom3391/xml/mcom3391.css
56 ./jams/jams477/xml/jams477.css
56 ./mcom/mcom3369/xml/mcom3369.css
58 ./mcom/mcom3450/xml/mcom3450.css
58 ./mcom/mcom3493/xml/mcom3493.css
58 ./mj3/mcom/mcom3493/xml/mcom3493.css
62 ./mcom/mcom3475/xml/mcom3475.css
64 ./mcom/mcom3496/xml/mcom3496.css
65 ./mcom/mcom3393/xml/mcom3393.css
65 ./mcom/mcom3434/xml/mcom3434.css
66 ./jams/jams434/xml/jams434.css
66 ./mcom/mcom3401/xml/mcom3401.css
67 ./mcom/mcom3459/xml/mcom3459.css
68 ./mcom/mcom3477/xml/mcom3477.css
69 ./mcom/mcom3312/xml/mcom3312.css
69 ./mcom/mcom3390/xml/mcom3390.css
70 ./mcom/mcom1441/xml/mcom1441.css
72 ./mcom/mcom3353/xml/mcom3353.css
72 ./mcom/mcom3396/xml/mcom3396.css
72 ./mcom/mcom3473/xml/mcom3473.css
72 ./mcom/mcom3591/xml/mcom3591.css
75 ./mcom/mcom3336/xml/mcom3336.css
76 ./mcom/mcom3436/xml/mcom3436.css
78 ./mcom/mcom3372/xml/mcom3372.css
83 ./mcom/mcom3422/xml/mcom3422.css
83 ./mcom/mcom3478/xml/mcom3478.css
84 ./mcom/mcom3444/xml/mcom3444.css
85 ./mcom/mcom3537/xml/mcom3537.css
86 ./mcom/mcom3504/xml/mcom3504.css
86 ./mcom/mcom3599/xml/mcom3599.css
87 ./btran/btran48/xml/btran48.css
88 ./mcom/mcom3412/xml/mcom3412.css
88 ./mcom/mcom3428/xml/mcom3428.css
90 ./mcom/mcom3354/xml/mcom3354.css
97 ./mcom/mcom3342/xml/mcom3342.css
100 ./mcom/mcom3351/xml/mcom3351.css
101 ./mcom/mcom3389/xml/mcom3389.css
102 ./mcom/mcom3335/xml/mcom3335.css
102 ./mcom/mcom3552/xml/mcom3552.css
102 ./spec/spec100/xml/spec100.css
103 ./mcom/mcom3524/xml/mcom3524.css
104 ./mcom/mcom3527/xml/mcom3527.css
106 ./mcom/mcom3433/xml/mcom3433.css
111 ./mcom/mcom3419/xml/mcom3419.css
115 ./mcom/mcom3457/xml/mcom3457.css
117 ./mcom/mcom3425/xml/mcom3425.css
120 ./btran/btran10/xml/btran10.css
120 ./mcom/mcom1463/xml/mcom1463.css
121 ./mcom/mcom1801/xml/mcom1801.css
131 ./mcom/mcom3376/xml/mcom3376.css
134 ./mcom/mcom3572/xml/mcom3572.css
138 ./mcom/mcom1718/xml/mcom1718.css
142 ./mcom/mcom3592/xml/mcom3592.css
143 ./mcom/mcom3414/xml/mcom3414.css
143 ./mcom/mcom3456/xml/mcom3456.css
145 ./mcom/mcom3386/xml/mcom3386.css
145 ./mcom/mcom3526/xml/mcom3526.css
146 ./mcom/mcom3547/xml/mcom3547.css
155 ./mcom/mcom3506/xml/mcom3506.css
158 ./mcom/mcom3479/xml/mcom3479.css
160 ./mcom/mcom3502/xml/mcom3502.css
161 ./mcom/mcom3499/xml/mcom3499.css
165 ./mcom/mcom3465/xml/mcom3465.css
169 ./mcom/mcom3374/xml/mcom3374.css
170 ./mcom/mcom3464/xml/mcom3464.css
174 ./mcom/mcom3581/xml/mcom3581.css
179 ./mcom/mcom3562/xml/mcom3562.css
182 ./mcom/mcom3367/xml/mcom3367.css
184 ./mcom/mcom3420/xml/mcom3420.css
184 ./mcom/mcom3587/xml/mcom3587.css
191 ./mcom/mcom3536/xml/mcom3536.css
203 ./mcom/mcom3582/xml/mcom3582.css
205 ./mcom/mcom3350/xml/mcom3350.css
206 ./mcom/mcom3471/xml/mcom3471.css
216 ./mcom/mcom3621/xml/mcom3621.css
220 ./mcom/mcom3413/xml/mcom3413.css
222 ./mcom/mcom3462/xml/mcom3462.css
235 ./stml/stml68/xml/stml68.css
238 ./mcom/mcom3514/xml/mcom3514.css
239 ./mcom/mcom2123/xml/mcom2123.css
244 ./bull/bull1681/xml/bull1681.css
246 ./mcom/mcom3403/xml/mcom3403.css
249 ./mcom/mcom3453/xml/mcom3453.css
252 ./mcom/mcom1317/xml/mcom1317.css
253 ./mcom/mcom3488/xml/mcom3488.css
254 ./mcom/mcom3487/xml/mcom3487.css
255 ./mcom/mcom3417/xml/mcom3417.css
261 ./mcom/mcom3402/xml/mcom3402.css
275 ./mcom/mcom3510/xml/mcom3510.css
282 ./mcom/mcom3556/xml/mcom3556.css
283 ./mcom/mcom3455/xml/mcom3455.css
291 ./mcom/mcom3331/xml/mcom3331.css
297 ./mcom/mcom1851/xml/mcom1851.css
315 ./mcom/mcom3333/xml/mcom3333.css
315 ./mcom/mcom3503/xml/mcom3503.css
319 ./mcom/mcom3525/xml/mcom3525.css
321 ./mcom/mcom3563/xml/mcom3563.css
321 ./mj3/mcom/mcom3563/xml/mcom3563.css
346 ./mcom/mcom3366/xml/mcom3366.css
355 ./mcom/mcom3337/xml/mcom3337.css
357 ./mcom/mcom3357/xml/mcom3357.css
379 ./mcom/mcom3399/xml/mcom3399.css
401 ./mcom/mcom3564/xml/mcom3564.css
408 ./mcom/mcom3550/xml/mcom3550.css
424 ./mcom/mcom3461/xml/mcom3461.css
441 ./mcom/mcom3593/xml/mcom3593.css
450 ./mcom/mcom3447/xml/mcom3447.css
456 ./mcom/mcom3458/xml/mcom3458.css
463 ./mcom/mcom1678/xml/mcom1678.css
464 ./mcom/mcom3415/xml/mcom3415.css
464 ./mj3/mcom/mcom3415/xml/mcom3415.css
476 ./mcom/mcom3407/xml/mcom3407.css
477 ./mcom/mcom3411/xml/mcom3411.css
551 ./mcom/mcom3463/xml/mcom3463.css
600 ./mcom/mcom3440/xml/mcom3440.css
675 ./mcom/mcom3507/xml/mcom3507.css
714 ./mcom/mcom3388/xml/mcom3388.css
748 ./mcom/mcom3435/xml/mcom3435.css
766 ./mcom/mcom3405/xml/mcom3405.css
943 ./mcom/mcom3443/xml/mcom3443.css
990 ./mcom/mcom1439/xml/mcom1439.css
1942 ./car/car36/xml/car36.css
pkra commented 3 years ago

There seems to be a lot of potential for switching to a utility-class approach. While the HTML would grow, the savings in CSS would offset it in pure payload and some more in rendering. (And would allow us to fix the invalid markup.)

Anyway, I realize that this doesn't mean the change within texml would not be complex.

davidmjones commented 2 years ago

@pkra Can you take a look at the various table-related test files in the atomic-table-css branch, especially tabular.xml and colortbl.xml? Others are arydshln, booktabs, hhline and multirowcell, which still suffers from the hidden cell counting bug.

davidmjones commented 2 years ago

Also multicolumn and multirow.

pkra commented 2 years ago

Very exciting!

Phew, that took a lot longer than I expected.

pkra commented 2 years ago

random note: dumping all tables into a single HTML file for review gave me a clash of css for these two tables

This seems to have been due to the old booktabs CSS. In any case, I would suggest a texml-related prefix to namespace the class names.

pkra commented 2 years ago

Final note: all tables appear to render the same on Blink, WebKit, Gecko engines. :rocket:

davidmjones commented 2 years ago

tabular

table 3, 4: the hfill has no effect. Could be interpreted as right-align (or perhapsfloat:right which I'd like to avoid)

Won't fix; note added to tabular.tex.

table 4: Should the 5in have an effect?

Dunno. Hasn't been needed so far. Note added to tabular.tex

table 7,8 : B-line is missing an effect for [3\jot] (I think padding-bottom for the cells?)

Fixed.

table 8: l@{X} gives an X in the column but it's not in the right (visual) position

Won't fix; added note.

colortbl tex source is missing xcolor, I think

Hmm. Not needed on my machine -- color is automatically loaded by colortbl and that's good enough. But I'll add it.

row 1, 4, 5: filler cells at end

Ah. I was under the misapprehension that I needed to keep the filler cells to make horizontal rules work. I removed them.

row 2: last cell is green (PDF: gray) because it gets a class derived from the table-level rowcolor, overriding the class on the parent row (derived from row-level rowcolor)

blech. later. maybe.

it will probably avoid headaches if all row color is applied on the cell level

Ok.

row 3,4,5: cmyk to rgb comes out a too dark -- I get #264059 on a conversion tool which seems closer to the PDF

Meh. In practice, that color is too dark to be usable either way -- it was just a random example. I replaced it by something lighter. I went to a lot of trouble to get xcolor to do the color conversion for me. I don't think there's anything to be gained by second guessing it -- color is weird.

row 7: the red cell with 2 padding-left does not match PDF (not sure why the PDF cell looks this way)

Not sure what you're referring to.

arydshln -- looks good (except for the limitation noted in the source)

booktabs

That was broken. Fixed now.

hline: The double border lines come out quite differently across browsers; it's not great but good enough for now

I don't think we have any papers that use it (yet) -- I was just trying to be thorough in the test file.

multirowcell: table 2: there's a difference in how HTML spreads out the columns across the colspan. I don't see any css so this is probably core table layout.

Interesting. It looks like the browser is allocates the spanned columns equal shares of the width of the combined column. Cf. the new third tables in multicolumn.tex and multirowcell.tex.

davidmjones commented 2 years ago

@pkra I think the hhline2 test file works correctly (except as noted in the LaTeX file) now too.

pkra commented 2 years ago

Awesome update (and rolling out! :rocket:).

tabular

table 7,8 : B-line is missing an effect for [3\jot] (I think padding-bottom for the cells?) Fixed.

I see that you solved the problem of TRs not allowing padding by moving that to the TDs. That's great (and generally is best as we discussed -- and the borders could also move down if you want TRs to be clean).

Something trivial I realized later: you could of course still put a class on the TR and then have tr.pb > td { padding-bottom: ...} in the stylesheet. Just in case we ever have a hard time

colortbl

row 1, 4, 5: filler cells at end Ah. I was under the misapprehension that I needed to keep the filler cells to make horizontal rules work. I removed them.

Right. On the TR, the horizontal borders will be as long as the longest TR. For a partial border, put them on the relevant TDs.

row 2: last cell is green (PDF: gray) because it gets a class derived from the table-level rowcolor, overriding the class on the parent row (derived from row-level rowcolor) blech. later. maybe.

Quick fix should we ever need it: in the stylesheet change .bc { background-color: #bfbfbf; } to .bc > td { background-color: #bfbfbf;} -- the selector.bc > td has higher specificity than .bc1 and thus "wins".

(Though selector specificity can be gnarly and we should be careful to check if this matches how colortbl would resolve clashing colors).

row 7: the red cell with 2 padding-left does not match PDF (not sure why the PDF cell looks this way) Not sure what you're referring to.

The 2 with red-background:

PDF has some left padding (compiled by me so maybe something's wrong on my system)> image

HTML does not

image

pkra commented 2 years ago

@pkra I think the hhline2 test file works correctly (except as noted in the LaTeX file) now too.

If I understand the note in the TeX file correctly, a multicolumn won't come out flushed left but instead follow the column specifier says.

If that's right, then I don't understand. Table 2

On the one hand & \multicolumn{1}{p{4em}|}{C2} & \multicolumn{1}{p{4em}|}{C3}

On the other, the HTML renders

image

davidmjones commented 2 years ago

If I understand the note in the TeX file correctly, a multicolumn won't come out flushed left but instead follow the column specifier says.

The problem is with multirow, not multicolumn. See the "C6, R1-3" cell in that same table.

davidmjones commented 2 years ago

I see that you solved the problem of TRs not allowing padding by moving that to the TDs. That's great (and generally is best as we discussed -- and the borders could also move down if you want TRs to be clean).

But wouldn't we then have the problem that if a particular row has missing cells, the rule won't extend all the way across the full row width?

davidmjones commented 2 years ago

The 2 with red-background:

PDF has some left padding (compiled by me so maybe something's wrong on my system)

That appears to be because \cellcolor does not ignore space after it. This would be...difficult...to reproduce.

davidmjones commented 2 years ago

row 2: last cell is green (PDF: gray) because it gets a class derived from the table-level rowcolor, overriding the class on the parent row (derived from row-level rowcolor)

blech. later. maybe.

I think I found an approach that preserves the correct precedence for color specifiers without screwing anything up.

pkra commented 2 years ago

The problem is with multirow, not multicolumn. See the "C6, R1-3" cell in that same table.

Duh. Sorry. Thanks for clarifying.

But wouldn't we then have the problem that if a particular row has missing cells, the rule won't extend all the way across the full row width?

Yes, of course. Sorry about that.

pkra commented 2 years ago

When running locally, I get some stray color markup in the output, e.g., \rowcolor{gray!20} leaves gray!20 in the cell content.

(I also get <p>color push rgb 0 0 0</p> at the top of the document and there are other things that don't work in a my installation.)

pkra commented 2 years ago

When running locally, I get some stray color markup in the output, e.g., \rowcolor{gray!20} leaves gray!20 in the cell content.

Oh, it's actually worse -- the rowcolor is actually lost. (I'm on the main branch btw -- I think we can delete the atomic-css one?)

pkra commented 2 years ago

Finally, I've lost a table border

image

pkra commented 2 years ago

Finally, I've lost a table border

Ah, apparently, this is now matching TeX. Nice.

pkra commented 2 years ago

When running locally, I get some stray color markup in the output, e.g., \rowcolor{gray!20} leaves gray!20 in the cell content.

Oh, it's actually worse -- the rowcolor is actually lost. (I'm on the main branch btw -- I think we can delete the atomic-css one?)

Adding \usepackage[table]{xcolor} seems to have solved this for me.

pkra commented 2 years ago

This has been rolled out completely now. I don't think additional docs are needed.

Hooray!