Offline Math: Converting LaTeX to SVG with MathJax

41 pointsposted 9 hours ago
by henry_flower

10 Comments

sathomasga

8 hours ago

Same use case (math-heavy, no-javascript blog), but I ended up with a _slightly_ different approach: instead of converting to SVG, convert to MathML. Browser support is pretty robust, and the output is much nicer (e.g. preserves fonts).

https://sathomas.me/blog/site/

bobbylarrybobby

4 hours ago

What does it mean that it preserves fonts? Presumably the body font on my website won't also support math typesetting, right? Or at least, not in a way that's as nice looking as the tex default?

bArray

7 hours ago

Same here [1], I chose MathML as it worked out of the box in some browsers at the time. For browsers not supporting MathML I also have this ~80kB (~12kB compressed) library for converting it [2]. I tested your equation:

    \def\d{\mathrm{d}}
    
    \oint_C \vec{B}\circ \d\vec{l} = \mu_0
    \left(
      I_{\text{enc}} +
        \varepsilon_0
        \frac{\d}{\d t}
        \int_S {\vec{E} \circ \hat{n}}\; \d a
    \right)
It could not do the definition, so it ended up being:

    $$\oint_C \vec{B}\circ \mathrm{d}\vec{l} = \mu_0
    \left(
      I_{\text{enc}} +
        \varepsilon_0
        \frac{\mathrm{d}}{\mathrm{d} t}
        \int_S {\vec{E} \circ \hat{n}}\; \mathrm{d} a
    \right)$$
I did previously also load the LaTeX equation font, but I decided it used a lot of resource for little gain in the end.

I was also looking at your recent blog [3], and one thing that I like about mine is that the code you see is what is run to produce the output [4]. I am in the middle of making the code interactive too, so that you can re-compile it within the web page and run different parameters to produce different outputs.

[1] https://coffeespace.org.uk/projects/mathml-render.html

[2] https://github.com/pshihn/math-ml

[3] https://sathomas.me/blog/robuststats/

[4] https://coffeespace.org.uk/projects/wavefront-algorithm.html

icpmoles

6 hours ago

In my experience the MathML support is still mediocre, especially on Chrome.

https://fred-wang.github.io/MathFonts/mozilla_mathml_test/

qrios

4 hours ago

Thnx for sharing!

With Safari (standard and tech preview) the rendering looks strange (at least). The root sign does not have a strait line at the top (for many fonts) and at least the partial derivative is not rendered as italic (for all fonts).

yorwba

6 hours ago

That test page doesn't seem to use any features current Chrome doesn't support. Or do you just mean that the appearance isn't identical to the TeX rendering even if you use a font like Latin Modern?

icpmoles

4 hours ago

It improved a little bit from what I remembered (on Chrome it had problems displaying multi-line brackets), it still has some inaccuracies tho

https://imgur.com/a/83lSuYn

randomtoast

7 hours ago

MathML is part of HTML5 and standardised by ISO/IEC since 2015. It is supported by all major browsers and supports voicing as well as braille output.

This is the way to go.

ttd

4 hours ago

I still haven't found a way to coax MathML into looking the way I want it... Even using the same fonts (like Computer Modern or its descendants) there's still something not quite the same as LaTeX-drawn math. It's a nitpick but noticeable for me.

JadeNB

8 hours ago

Also preserves more semantic information!