MathJax+Markdown写数学公式

March 23, 2013

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..$