I previously asked a question about how to export a HTML table in R and have control over line borders.
I’m used to LaTeX where when you create a table, the formatting of the table is largely determined by the text and markup that appears at that point. This works well for Sweave, because your R code chunk can output LaTeX table markup at that point. I also understand that there are tools like xtable that can produce HTML markup for a table.
However, control over HTML tables seems to rely on style sheets, which are meant to appear in the header of the document and not in the location where the R code chunk is placed. Of course, I could just put content in the style sheet, but in scientific applications often there can be some quite specific table formatting that varies in some respects from table to table.
Thus, my question:
- In general, how do you format an HTML table with literate programming like R Markdown or even from raw HTML if formatting of the output requires output to be created in a separate place in the document (i.e., CSS for the table in the header) to where the R code chunk is placed (i.e.,the table itself in the body)?
I can think of three ways without messing with your toolchain, all of them are kind of hacky.
Just output the
<style>right in the body. This isn’t technically valid, but it will work fine in any major browser.Emit JavaScript that creates a
<style>block at runtime and appends it to the head (here’s one way). This will look a little gross in the HTML source and in the R code, but it will work and it will validate.Use a scoped style block. This would be exactly what you are looking for, except that the scope attribute is new to HTML5 and not yet implemented in any major browser. However, if you base your styles on uniquely generated IDs (i.e. your rules are written such that even if they apply to the whole document they won’t mess anything up), I imagine the browsers will just ignore the “scoped” attribute and everything will work properly–then this becomes effectively a version of option 1 that happens to validate!
(I would go with #3, personally.)
If you haven’t already, it’d be worth starting a thread at the RStudio support forum about this; even though it’s not strictly an RStudio issue, we’re obviously doing a lot of work on the end-to-end scenario of publishing reports in R Markdown and would love to find out more about your specific examples. Tables are clearly going to be a big part of what people do with this reports and we know this is a weak spot right now, one that we do want to address in future versions.