Mako Math Helper
<<everything-else>>
Introduction
This is an extension of the math_helper.tmpl
mako template that comes with nikola. The original version checks for the has_math: True
entry in the post meta-data and then loads either Kate or MathJax based on what's in the conf.py
file. My extension adds support for pseudocode.js.
Everything Else
This is a dump for stuff until I finish this literate-code re-write.
### Note: at present, MathJax and KaTeX do not respect the USE_CDN configuration option
<%def name="math_scripts()">
%if use_katex:
<script src="https://cdn.jsdelivr.net/npm/katex@0.10.2/dist/katex.min.js" integrity="sha384-9Nhn55MVVN0/4OFx7EE5kpFBPsEMZxKTCnA+4fqDmg12eCTqGi6+BB2LjY8brQxJ" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/katex@0.10.2/dist/contrib/auto-render.min.js" integrity="sha384-kWPLUVMOks5AQFrykwIup5lo0m3iMkkHrD0uJ4H5cjeGihAutqP0yW0J6dpFiVkI" crossorigin="anonymous"></script>
% if katex_auto_render:
<script>
renderMathInElement(document.body,
{
${katex_auto_render}
}
);
</script>
% else:
<script>
renderMathInElement(document.body,
{
delimiters: [
{left: "$$", right: "$$", display: true},
{left: "\\[", right: "\\]", display: true},
{left: "\\begin{equation*}", right: "\\end{equation*}", display: true},
{left: "\\(", right: "\\)", display: false}
]
}
);
</script>
% endif # katex_auto_render
%else:
### Note: given the size of MathJax; nikola will retrieve MathJax from a CDN regardless of use_cdn configuration
#### the default config has been updated with stuff that pseudocode.js needs
<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-AMS-MML_HTMLorMML" integrity="sha384-3lJUsx1TJHt7BA4udB5KPnDrlkO8T6J6v/op7ui0BbCjvZ9WqV4Xm6DTP6kQ/iBH" crossorigin="anonymous"></script>
% if mathjax_config:
${mathjax_config}
% else:
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
tex2jax: {
inlineMath: [['$','$'], ['\\(','\\)']],
displayMath: [['$$','$$'], ['\\[','\\]']],
processEscapes: true,
processEnvironments: true,
},
displayAlign: 'center',
"HTML-CSS": {
styles: {'.MathJax_Display': {"margin": 0}}
}
});
</script>
% endif # mathjax_config
%endif # use_katex
</%def> # end of math_scripts
<%def name="pseudocode()">
<script src="https://cdn.jsdelivr.net/npm/pseudocode@latest/build/pseudocode.min.js"></script>
</%def>
<%def name="code_styles()">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/pseudocode@latest/build/pseudocode.min.css">
</%def>
<%def name="math_styles()">
% if use_katex:
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.10.2/dist/katex.min.css" integrity="sha384-yFRtMMDnQtDRO8rLpMIKrtPCD5jdktao2TV19YiZYWMDkUR5GQZR/NOVTdquEx1j" crossorigin="anonymous">
% endif
</%def>
# This first section is used when an individual post is loaded,
# not for the front page where you have multiple posts loaded.
<%def name="math_scripts_ifpost(post)">
% if post.meta("has_pseudocode"):
${math_scripts()}
${pseudocode()}
% elif post.has_math:
${math_scripts()}
% endif
</%def> # math_scripts_ifpost
<%def name="math_styles_ifpost(post)">
% if post.has_math:
${math_styles()}
% elif post.meta("has_pseudocode"):
${math_styles()}
${code_styles()}
%endif
</%def> # math_styles_ifpost
# The next section is for the main posts page with multiple posts
# displayed.
# Since the pseudocode blocks are supersets of the math blocks, you
# need to give them priority over the mathblocks when setting up the
# conditonal or they won't be used.
<%def name="math_scripts_ifposts(posts)">
% if any(post.meta("has_pseudocode") for post in posts):
${math_scripts()}
${pseudocode()}
% elif any(post.has_math for post in posts):
${math_scripts()}
% endif
</%def> # math_scripts_ifposts
<%def name="math_styles_ifposts(posts)">
% if any(post.meta("has_pseudocode") for post in posts):
${math_styles()}
${code_styles()}
% elif any(post.has_math for post in posts):
${math_styles()}
% endif
</%def> # math_styles_ifposts