IPython Notebook и Mathjax обозначают уравнения

Когда я пишу следующее в режиме уценки в ноутбуке 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?

Ответ 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}}
    }
});

Очистите кеш и перезагрузите ноутбук, и вы должны иметь нумерованные уравнения, которые правильно ссылаются.

Если вы остановитесь здесь, то повторное прослушивание ячейки с помеченным уравнением приведет к тому, что это уравнение прекратит рендеринг, потому что метка уже существует. Как отмечено в комментариях, есть и обходной путь для этого.

В том же файле, что и выше, 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] );
    ...

Это позволяет перераспределить ячейки с мечеными уравнениями; однако нумерация нулей будет локальной для каждой ячейки, что означает, что вы не можете ссылаться на уравнения по ячейкам.