jhelvy / renderthis

An R package for building xaringan slides into multiple outputs, including html, pdf, png, gif, pptx, and mp4.
https://jhelvy.github.io/renderthis
Other
174 stars 12 forks source link

renderthis::to_pdf() throw error for HTML slides using mathjax #75

Open kevinrue opened 6 months ago

kevinrue commented 6 months ago

Hello.

Thanks a lot for this package which I've been using happily for several years.

For some months now, I've been having an issue with some (but not all) symbols in LaTeX equations.

Initially, it seemed to be a quarto issue.

For instance, the following:

## The normal distribution

### Notation

$${\mathcal{N}}(\mu ,\sigma^{2})$$

was producing

image

Which led me to the fix here

format: 
  revealjs:
    html-math-method: mathjax
image

But now, that the LaTeX equation displays correctly in the HTML presentation, renderthis::to_pdf() throw the following error and fails to produce the PDF.

> renderthis::to_pdf("index.cluster.html")
Warning: A runtime exception has occured while executing JavaScript
  Runtime exception message:
    TypeError: Cannot read properties of undefined (reading 'Config')
    at http://127.0.0.1:5310/index.cluster_files/libs/revealjs/plugin/math/math.js:1:28635
    at HTMLScriptElement.i (http://127.0.0.1:5310/index.cluster_files/libs/revealjs/plugin/math/math.js:1:28502)

Note that weirdly enough, if I click the 'Print' button in the RStudio 'Presentation' tab, and manually (not programmatically) print it from there, the PDF contains the equation formatted properly.

image

Any suggestion?

jhelvy commented 6 months ago

I can't replicate the issue. I made this simple foo.qmd slide deck:

---
title: "Bug"
format: revealjs
---

## The normal distribution

### Notation

$${\mathcal{N}}(\mu ,\sigma^{2})$$

Then I rendered it to pdf with renderthis::to_pdf("foo.html"), and I got a pdf with everything looking correct.

If I use the specific mathjax setting you used, like this:

format: 
  revealjs:
    html-math-method: mathjax

Then yes I get the error. But I didn't need to use it to get the latex math to render properly.

kevinrue commented 6 months ago

Before I even get to renderthis, I clearly need to update something because this is what I get when rendering your example:

image

Not sure if it's quarto, RStudio, or a package that I need to update. I'll do the rounds!

jhelvy commented 6 months ago

Silly question, but have you tried opening the rendered html page in a browser? I've had issues in the past where the RStudio viewer doesn't render the same as an actual browser like Chrome.

kevinrue commented 6 months ago

Not a silly question at all :) Indeed I noticed that web browser (I mostly use Chrome) display the equations properly (as in this case) even when the RStudio viewer doesn't.

Although, hold that thought... I think I'm getting closer to the issue:

Scenario 1

image

image

Scenario 2

image

So basically, RStudio is doing something when serving the HTML on localhost that isn't present in the HTML file itself and thus can't be exported into the PDF by renderthis.

Who do I poke now with these new details? :)

jhelvy commented 6 months ago

renderthis should be using chrome by default. If you open the html file in chrome and try to print from chrome, it should look correct. If it does, then there's something going on in RStudio. I'd also try just re-installing everything to see if there's a version issue somewhere.

gadenbuie commented 6 months ago

These days, there are more than a few web features that are common practice that require a running web server to use. One of those is loading scripts and resources from external hosts. That's why the Render button fires up a local web server for the preview. Opening the file directly, on the other hand, causes these features break when you open the file with file:///path/to/your/slides.html.

One way around this is to use the Render button to launch the preview server and then use the URL for the preview in to_pdf():

renderthis::to_pdf("http://localhost:7756/index.html", "my-slides.pdf")
kevinrue commented 6 months ago

if you open the html file in chrome and try to print from chrome, it should look correct

If I open the 'localhost' HTML that looks ok, then yes, the PDF looks OK too. That's essentially what I've done when I described

Note that weirdly enough, if I click the 'Print' button in the RStudio 'Presentation' tab, and manually (not programmatically) print it from there, the PDF contains the equation formatted properly.

However, like I said the HTML file itself, opened in a web browser without serving it from RStudio has the issue, and thus a PDF made from that one has the issue too.

which basically leads to @gadenbuie 's related workaround

renderthis::to_pdf("http://localhost:7756/index.html", "my-slides.pdf")

The actual issue isn't really 'fixed' but I entirely agree with

These days, there are more than a few web features that are common practice that require a running web server to use.

I've got other fires to put out so I think I'll leave it at that until I've got more time to investigate further and/or chase up RStudio/Posit people who might have an opinion on the possibility of making self-contained HTML files in this scenario.

Cheers both!