Pelican MathJax Issue

Posted on Tue 17 July 2018 in github

I updated pelican recently because I had upgraded to python 3.x. When I tried to execute pelican content command, it threw an error saying no valid contents were found. After some searching, I found out that I hadn't re-installed markdown (the earlier version was completely undetectable).

After installing markdown by pip install markdown, I re-ran the earlier command but this time I got this warning -

$ pelican content
Traceback (most recent call last):
  File "C:\Users\CHANDAN\Techblog\pelican-plugins\render_math\math.py", line 272, in mathjax_for_markdown
    pelicanobj.settings['MD_EXTENSIONS'].append(PelicanMathJaxExtension(config))
KeyError: 'MD_EXTENSIONS'

Error - the pelican mathjax markdown extension failed to configure. MathJax is non-functional.

Apparantly, my MathJax plugin wasn't working properly. I searched for this error on Google which led me to this Github issue #815. On further reading, I found out this issue was merged with an earlier one #787. On this link, I found a commit made to math.py file. Here's the change at line 271.

Instead of this -

    try:
        pelicanobj.settings['MD_EXTENSIONS'].append(PelicanMathJaxExtension(config))
    except:
        sys.excepthook(*sys.exc_info())
        sys.stderr.write("\nError - the pelican mathjax markdown extension failed to configure. MathJax is non-functional.\n")
        sys.stderr.flush()

Write this -

    try:
        if isinstance(pelicanobj.settings.get('MD_EXTENSIONS'), list): # pelican 3.6.3 and earlier
            pelicanobj.settings['MD_EXTENSIONS'].append(PelicanMathJaxExtension(config))
        else:
            pelicanobj.settings['MARKDOWN'].setdefault('extensions', []).append(PelicanMathJaxExtension(config))
    except:
        sys.excepthook(*sys.exc_info())
        sys.stderr.write("\nError - the pelican mathjax markdown extension failed to configure. MathJax is non-functional.\n")
        sys.stderr.flush()

And it worked like a charm. Now you know what to do when you encounter this error. See you in next post :)