Using LaTeX with Hakyll

Since Hakyll is tightly integrated with Pandoc, it's easy to use LaTeX with Hakyll by enabling Pandoc's LaTeX compile features. Most explanations I found online, like this one, seem to be quite outdated though and they don't work verbatim.

The basic idea still is to set up a custom pandoc compiler using the

pandocCompilerWith :: ReaderOptions -> WriterOptions -> Compiler (Item String)

function, but the internals used in the `WriterOptions` have changed. Specifically, enabling several extensions at once is no longer passed around as a `Set Extension`. Instead, there is a new data type `Extensions` introduced to handle several Extensions at once.

The following code seems to work for me:

pandocMathCompiler =
    let mathExtensions    = extensionsFromList [Ext_tex_math_dollars, Ext_tex_math_double_backslash, Ext_latex_macros]
        defaultExtensions = writerExtensions defaultHakyllWriterOptions
        newExtensions     = defaultExtensions <> mathExtensions
        writerOptions     = defaultHakyllWriterOptions {
                              writerExtensions = newExtensions,
                              writerHTMLMathMethod = MathJax ""
                            }
    in pandocCompilerWith defaultHakyllReaderOptions writerOptions

It's essentially doing the same thing, we just store the necessary math extensions inside the `Extensions` data type by using the `extensionsFromList` function and we append `defaultExtensions` with `mathExtensions` using the `<>` function (this is essentially `mappend`) instead of using `foldr`.

You of course still have to add the

<script type="text/javascript"
        src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>

line in the template generating the HTML <head> element.

Then everything works as expected:

\[ X(k) \xrightarrow{\sim} \operatorname{H}^1(\operatorname{Gal}(k), \pi^{\operatorname{\acute{e}t}}_{1}(\overline{X})) \]