iPython Notebook和Mathjax标记的方程式

问题描述 投票:11回答:1

当我在iPython笔记本中以降价模式编写以下内容时:

\begin{equation}
\begin{split}
\dot u &= \pm u^2 +\delta u^3\\
\dot v &= v\\
\dot w &= -w,
\end{split}\label{eq:nf1}
\end{equation}

Equation \eqref{eq:nf1} bla bla bla ...

它不呈现。似乎问题是

\label{eq:nf1}

因为如果我把它拿出来,就会呈现出来。

我正在做参考,因为在一天结束时我想将我所做的全部转换为latex + PDF。在PDF输出中,我确实收到了编号和引用良好的公式,这就是我想要的。但是在iPython Notebook中也有渲染的等式会很好。

这有解决方法吗?这是,我可以在iPython Notebook中渲染带标签的方程式吗?

ipython-notebook mathjax
1个回答
8
投票

我找到了一个解决方法,但它并不漂亮。

为了得到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}}
    }
});

清除缓存并重新加载笔记本,您应该有正确引用的编号方程式。

如果你在这里停止,那么重新运行带有标记方程的单元格将导致该等式停止渲染,因为标签已经存在。正如评论中所指出的,这也是一种解决方法。

在与上面相同的文件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] );
    ...

这允许重新渲染带有标记方程的单元格;然而,方程编号将是每个单元的局部编号,这意味着您不能跨单元格引用方程。

© www.soinside.com 2019 - 2024. All rights reserved.