Remix.run Logo
sureglymop 3 days ago

I wish there was a native version of this. Every SSG seems to have the problem of having to depend on node in order to prerender html for math with katex.

koito17 3 days ago | parent | next [-]

I've been using katex-rs, a Rust rewrite, to implement LaTeX rendering for a Rust web app. It was easy enough to hook into pulldown_cmark, so that $ and $$ and render a decent subset of LaTeX. Since pulldown_cmark is a proper Markdown parser, you listen for Event::InlineMath and Event::DisplayMath then call KaTeX directly. No regex or HTML escaping necessary. In my web app, this is all encapsulated into a single function that I can call within Tera templates. It's as SSR as it gets; no Node.js or client-side JavaScript necessary.

The costliest asset is a minified stylesheet served through a CDN. (I do this out of laziness, and because the web app as-is needs nothing more than the standard Rust toolchain).

https://github.com/katex-rs/katex-rs

nicoburns 3 days ago | parent [-]

Do you have a reference on how to hook it into pulldown_cmark? I'd love to add math support into to my markdown rendering app but I haven't had time to investigate this myself yet.

koito17 3 days ago | parent [-]

https://gist.github.com/akar1ngo/7d4ea6e9dfc369526beb75092cb...

sureglymop 3 days ago | parent [-]

Thank you for your account and reply! Awesome stuff :)

MillironX 3 days ago | parent | prev | next [-]

Hugo includes native KaTeX: https://gohugo.io/functions/transform/tomath/

The docs recommend setting up KaTeX CSS (which requires either a CDN link or Node), but by changing output to 'mathml,' you can have the browser render equations with zero dependencies.

sureglymop 3 days ago | parent [-]

That's news to me! The last time I used Hugo it didn't support that yet and I had to serve the js bundle to run in the browser.

generichuman 3 days ago | parent | prev | next [-]

If your use case is generating html, MathML is supported in all modern browsers: https://developer.mozilla.org/en-US/docs/Web/MathML#browser_...

rustybolt 3 days ago | parent | prev | next [-]

I use it in my static site generator in Python via https://github.com/rubenvannieuwpoort/PyKaTeX.

Disclaimer: I am the author of PyKaTeX.

notpushkin 3 days ago | parent | prev [-]

Port it? Or maybe bundle a tiny interpreter instead of Node.