我找到了一种解决方法,但它并不漂亮。
为了拥有 MathJax 数字方程,您必须添加一个配置标志(来自MathJax docs)。 IPython 中的配置标志在IPython/html/static/notebook/js/mathjaxutils.js 中设置(至少从 IPython 1.1 开始)。似乎应该有一个配置选项来挂钩,但我找不到。相反,我手动编辑了这个:
>>> locate mathjaxutils.js
/home/me/.virtualenvs/nengo/lib/python2.7/site-packages/IPython/html/static/notebook/js/mathjaxutils.js
>>> emacs -nw `locate mathjaxutils.js`
在该文件中,修改 MathJax.Hub.Config 调用以包含 TeX: { equationNumbers: { autoNumber: "AMS" } },。它应该看起来像:
// MathJax loaded
MathJax.Hub.Config({
TeX: { equationNumbers: { autoNumber: "AMS" } }, # Add this line
tex2jax: {
inlineMath: [ ['$','$'], ["\\(","\\)"] ],
displayMath: [ ['$$','$$'], ["\\[","\\]"] ],
processEscapes: true,
processEnvironments: true
},
displayAlign: 'left', // Change this to 'center' to center equations.
"HTML-CSS": {
styles: {'.MathJax_Display': {"margin": 0}}
}
});
清除缓存并重新加载笔记本,您应该有正确引用的编号方程式。
如果您在此处停止,则重新运行带有标签方程的单元格将导致该方程停止渲染,因为标签已经存在。正如 cmets 中所述,也有一种解决方法。
在与上述相同的文件mathjaxutils.js 中,编辑process_math 函数以配置集线器的队列:hub.Queue( ["resetEquationNumbers",MathJax.InputJax.TeX], ["Typeset",hub] );。它应该看起来像:
var process_math = function (i, j, pre_process, math, blocks) {
var hub = MathJax.Hub;
hub.Queue( ["resetEquationNumbers",MathJax.InputJax.TeX], ["Typeset",hub] );
...
这允许重新渲染带有标记方程的单元格;但是,方程编号将是每个单元格的本地编号,这意味着您不能跨单元格引用方程。