Step 1. 设置pandoc
首先要设置pandoc,让它正确处理公式。
pandocOptions :: WriterOptions
pandocOptions = defaultHakyllWriterOptions
{ writerHTMLMathMethod = MathJax ""
}
MathJax ""
表示用MathJax显示公式,空字符串表示MathJax.js的URL,这里不用设置(设置了也没用,所以才有后面的步骤)。这个设置主要是为了让pandoc正确工作。
用 pandocCompilerWith
使用上面的设置。
match "posts/*" $ do
route $ setExtension "html"
compile $ pandocCompilerWith defaultHakyllReaderOptions pandocOptions
Step 2. 加载MathJax
可以在模板里直接写个script标签来加载MathJax,但不是每个页面都有公式,这样就会有不必要的加载。所以我们可以加个metadata来决定是否加载。
mathJaxContext :: Context String
mathJaxContext = field "mathjax" $ \item -> do
metadata <- getMetadata (itemIdentifier item)
case M.lookup "mathjax" metadata of
Nothing -> return ""
Just _ -> return "<script type=\"text/javascript\"\
\src=\"http://cdn.mathjax.org/mathjax/latest/\
\MathJax.js?config=TeX-AMS-MML_HTMLorMML\">\
\</script>"
把这个Context加到原来的Context里,然后在模板里加入 $mathjax$
。如果metadata里有 mathjax
这个键,就把模板里的 $mathjax$
换成script标签。
Step 3. Write your math formula
这要在metadata部分加个mathjax: xxx就可以了,xxx是什么都没关系,因为我们只想要mathjax这个键。
---
title: 一堆数学公式
mathjax: on
---
$pi = 3.1415926..$