Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
kevinrue opened this issue May 9, 2024 · 7 comments
Open

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

kevinrue opened this issue May 9, 2024 · 7 comments

Comments

@kevinrue
Copy link

kevinrue commented May 9, 2024

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
Copy link
Owner

jhelvy commented May 9, 2024

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
Copy link
Author

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
Copy link
Owner

jhelvy commented May 10, 2024

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
Copy link
Author

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

  • I click 'render' in RStudio.
  • The view doesn't show the 'N' properly in the equation.
  • In the 'Presentation' tab, I click the icon to 'Present in an external browser'
  • It opens http://localhost:7756/#/the-normal-distribution (emphasis on 'localhost') and the 'N' is displayed properly as you just pointed out

image

  • However, renderthis::to_pdf("foo.html") still produces a PDF that has a missing symbol square instead of the 'N'.
image

Scenario 2

  • After clicked 'Render' and produced the HTML file, I click on it in the 'Files' tab of RStudio
  • It opens file:///Users/kevin/git/kevinrue/OBDS_slides/foo.html#/title-slide (emphasis on the file path, no localhost here), which actually doesn't display the 'N' either (so no chance for the PDF to display it properly).

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
Copy link
Owner

jhelvy commented May 10, 2024

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
Copy link
Collaborator

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
Copy link
Author

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!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants