Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

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.


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


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.



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


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.


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.


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


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

Disclaimer: I am the author of PyKaTeX.


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




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: