From fdaec6d5a9c4b5f206a6110855c7b634de4f480d Mon Sep 17 00:00:00 2001 From: Danila Fedorin Date: Tue, 21 Jul 2020 15:34:46 -0700 Subject: [PATCH] Make small adjustments to backend math post. --- content/blog/backend_math_rendering.md | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/content/blog/backend_math_rendering.md b/content/blog/backend_math_rendering.md index 5185e5e..efe28b4 100644 --- a/content/blog/backend_math_rendering.md +++ b/content/blog/backend_math_rendering.md @@ -89,7 +89,7 @@ to `node2nix`: ] ``` -The Ruby script I wrote for this (more on that soon) required the `nokigiri` gem, which +The Ruby script I wrote for this (more on that soon) required the `nokogiri` gem, which I used for traversing the HTML generated for my site. Hugo was obviously required to generate the HTML. @@ -109,7 +109,7 @@ some Bash scripts. The math on this page was rendered at the time it was generat This is a great point, and KaTeX is indeed usable for server-side rendering. But I've seen few people who do actually use it. Unfortunately, as I pointed out in my previous post on the subject, -few tools that actually take your HTML page and replace LaTeX with rendered math. +few tools actually take your HTML page and replace LaTeX with rendered math. Here's what I wrote about this last time: > [In MathJax,] The bigger issue, though, was that the `page2html` @@ -183,7 +183,7 @@ some captions, alt texts, and similar elements should also be left alone. However, I don't have those on my website (yet), and I won't worry about them now. Either way, because of the code tags, we can't just search-and-replace over the entire page; we need to be context -aware. This is where `nokigiri` comes in. We parse the HTML, and iterate +aware. This is where `nokogiri` comes in. We parse the HTML, and iterate over all of the 'text' nodes, calling `perform_katex_sub` on all of those that _aren't_ inside code tags. @@ -222,7 +222,7 @@ All in all: //*[not(self::code)]/text() ``` -Finally, we use this XPath from `nokigiri`: +Finally, we use this XPath from `nokogiri`: ```Ruby {linenos=table} files = ARGV[0..-1] @@ -278,7 +278,7 @@ take a few dozen seconds to run on my relatively small site. The better approach would be to use a NodeJS script, rather than a Ruby one, to perform the conversion. KaTeX also provides an API, so such a NodeJS script can find the files, parse the HTML, and perform the substitutions. -I did quite like using `nokigiri` here, though, and I hope that an equivalently +I did quite like using `nokogiri` here, though, and I hope that an equivalently pleasant solution exists in JavaScript. Re-rendering the whole website is also pretty wasteful. I rarely change the @@ -287,6 +287,15 @@ to re-run the script, and therefore re-render every page. This makes sense for me, since I use Nix, and my builds are pretty much always performed from scratch. On the other hand, for others, this may not be the best solution. +### Alternatives +The same person who sent me the original email above also pointed out +[this `pandoc` filter for KaTeX](https://github.com/Zaharid/pandoc_static_katex). +I do not use Pandoc, but from what I can see, this fitler relies on +Pandoc's `Math` AST nodes, and applies KaTeX to each of those. This +should work, but wasn't applicable in my case, since Hugo's shrotcodes +don't mix well with Pandoc. However, it certainly seems like a workable +solution. + ### Conclusion With the removal of MathJax from my site, it is now completely JavaScript free, and contains virtually the same HTML that it did beforehand. This, I hope,