【问题标题】:iPython Notebook and Mathjax labeled equationsiPython Notebook 和 Mathjax 标记的方程
【发布时间】:2019-04-24 11:05:18
【问题描述】:

当我在 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}

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

我正在做参考,因为在一天结束时我想将我所做的一切转换为乳胶+PDF。在 PDF 输出中,我确实收到了编号和引用良好的方程式,这正是我想要的。但如果在 iPython Notebook 中也能有渲染的方程,那就太好了。

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

【问题讨论】:

    标签: ipython-notebook mathjax


    【解决方案1】:

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

    为了拥有 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] );
        ...
    

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

    【讨论】:

    • 感谢您的回答。我会尝试并报告回来。 :)
    • 所以,我检查了@tbekolay 的答案,一切都是正确的。我可以得到一次渲染的编号方程。 Here 提到了如何动态修改数学(我认为)。但是,我在编码和相关的东西方面并不是那么好。所以,我会尝试并报告。
    • 似乎要正确更新编号方程需要在 IPython 的内部进行一些工作。也许最好的做法是在IPython's issue tracker 上提出问题。
    • 通过在mathjaxutils.js文件中声明var process_math后添加:MathJax.Hub.Queue( ["resetEquationNumbers",MathJax.InputJax.TeX], ["Typeset",MathJax.Hub] );,解决了重新渲染的问题。正如命令所暗示的那样,不同的降价单元格将具有从(1)开始的编号方程。对于我的需要,这是一个部分且足够好的结果。转换为乳胶时,一切看起来都很好。 :)
    • 在我的 Jupyter 版本中,要编辑的 javascript 文件是最小化版本:/notebook/static/notebook/js/main.min.js
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-09
    相关资源
    最近更新 更多