A summary of how I added simple mathjax support to Hugo. After this, you can render maths easily by including it between code ticks '$<maths>$', e.g.:

Hi $z = x + y$.

$$a^2 + b^2 = c^2$$

$$\begin{vmatrix}a & b\\ c & d \end{vmatrix}=ad-bc$$

Tools

From this forum post, I found a great article by Yihui “The Best Way to Support LaTeX Math in Markdown with MathJax”. It includes the following JavaScript solution that can be loaded using the script below:

// Not needed and only copied for future reference (in case the website is down)
(function() {
  var i, text, code, codes = document.getElementsByTagName('code');
  for (i = 0; i < codes.length;) {
    code = codes[i];
    if (code.parentNode.tagName !== 'PRE' && code.childElementCount === 0) {
      text = code.textContent;
      if (/^\$[^$]/.test(text) && /[^$]\$$/.test(text)) {
        text = text.replace(/^\$/, '\\(').replace(/\$$/, '\\)');
        code.textContent = text;
      }
      if (/^\\\((.|\s)+\\\)$/.test(text) || /^\\\[(.|\s)+\\\]$/.test(text) ||
          /^\$(.|\s)+\$$/.test(text) ||
          /^\\begin\{([^}]+)\}(.|\s)+\\end\{[^}]+\}$/.test(text)) {
        code.outerHTML = code.innerHTML;  // remove <code></code>
        continue;
      }
    }
    i++;
  }
})();
// Script to be included in your Hugo website
<script src="//yihui.org/js/math-code.js" defer></script>
<!-- Just one possible MathJax CDN below. You may use others. -->
<script defer
  src="//mathjax.rstudio.com/latest/MathJax.js?config=TeX-MML-AM_CHTML">
</script>

Changes to website

First, I created a new file in layouts/partials/mathjax_support.html and copied the script into it:

// file: mathjax_support.html
<script src="//yihui.org/js/math-code.js" defer></script>
<!-- Just one possible MathJax CDN below. You may use others. -->
<script defer
  src="//mathjax.rstudio.com/latest/MathJax.js?config=TeX-MML-AM_CHTML">
</script>

Second, I created a new file in layouts/partials/extend_head.html and copied this code into it (from here: “Render LaTeX math expressions in Hugo with MathJax 3. This lets you choose whether to render mathjax using math: true on individual pages. The extend_head.html file is called whenever the page is built an included between <head></head>.

{{ if .Params.math }}
{{ partial "mathjax_support.html" . }}
{{ end }}

Test typesetting

In markdown, I type this and see the output below

Hi `$z = x + y$`.

`$$a^2 + b^2 = c^2$$`

`$$\begin{vmatrix}a & b\\
c & d
\end{vmatrix}=ad-bc$$`

Output below:

Hi $z = x + y$.

$$a^2 + b^2 = c^2$$

$$\begin{vmatrix}a & b\\ c & d \end{vmatrix}=ad-bc$$

Noob notes for math typesetting

Simple algorithm typesetting

Quick hack for algorithmic package-like typesetting in $\LaTeX$:

> Algorithm parameters: step size  `$\alpha \in (0 , 1] , \epsilon > 0$`   
Initialize  `$Q  ( s, a ), \  \forall s \in S^+ , a \in A ( s ),$` arbitrarily except that `$Q ( terminal , \cdot ) = 0$`    
>
> Loop for each episode:  
`$\quad$`Initialize `$S$`   
`$\quad$`Loop  for  each  step  of  episode:    
`$\qquad$`Choose  `$A$` from `$S$` using some policy derived from `$Q$` (eg `$\epsilon$`-greedy)   
`$\qquad$`Take action `$A$`, observe `$R, S'$`   
`$\qquad Q(S,A) \leftarrow Q(S,A) + \alpha[R+\gamma \max_a(S', a) - Q(S, A)]$`   
`$\qquad S \leftarrow S'$`    
`$\quad$` until `$S$` is terminal

Renders as:

Algorithm parameters: step size $\alpha \in (0 , 1] , \epsilon > 0$
Initialize $Q ( s, a ), \ \forall s \in S^+ , a \in A ( s ),$ arbitrarily except that $Q ( terminal , \cdot ) = 0$

Loop for each episode:
$\quad$Initialize $S$
$\quad$Loop for each step of episode:
$\qquad$Choose $A$ from $S$ using some policy derived from $Q$ (eg $\epsilon$-greedy)
$\qquad$Take action $A$, observe $R, S'$
$\qquad Q(S,A) \leftarrow Q(S,A) + \alpha[R+\gamma \max_a(S', a) - Q(S, A)]$
$\qquad S \leftarrow S'$
$\quad$ until $S$ is terminal