Offline Math: Converting LaTeX to SVG with MathJax

(sigwait.org)

42 points | by henry_flower 10 hours ago ago

10 comments

  • sathomasga 9 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 5 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 8 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 7 hours ago

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

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

      • qrios 5 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 7 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 5 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 8 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 6 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 9 hours ago

      Also preserves more semantic information!