每次运行单元格时,Jupyter笔记本方程式编号都会增加

时间:2017-09-20 07:14:52

标签: javascript python jupyter-notebook mathjax

我按照this question的答案,并使用以下内容在Jupyter笔记本中获取等式数字:

%%javascript
MathJax.Hub.Config({
  TeX: { equationNumbers: { autoNumber: "AMS" } }
});

但是,每次我使用其中的等式更新降价单元格时,数字会增加1或继续从笔记本中已有的最大数字开始。

例如,如果单元格被编辑两次,则第一个等式可能被编号为(3),并且它是笔记本中唯一的等式,或者如果笔记本中有4个等式,则可能编号为(5)细胞编辑一次。如果我关闭笔记本并再次打开它,所有数字都是正确的。

有没有办法阻止这种情况发生或修复它而不关闭和打开笔记本?

1 个答案:

答案 0 :(得分:2)

如果你添加

MathJax.Hub.Register.StartupHook("TeX AMSmath Ready", function () {
  var AMS = MathJax.Extension['TeX/AMSmath'];
  MathJax.InputJax.TeX.postfilterHooks.Add(function (data) {
    var jax = data.script.MathJax;
    jax.startNumber = AMS.startNumber;
    jax.eqLabels = AMS.eqlabels;
    jax.eqIDs = AMS.eqIDs;
  });
  MathJax.InputJax.TeX.prefilterHooks.Add(function (data) {
    var jax = data.script.MathJax;
    if (jax.startNumber != undefined) {
      AMS.startNumber = jax.startNumber;
      Object.keys(jax.eqLabels).forEach(function (x) {delete AMS.labels[x]});
      Object.keys(jax.eqIDs).forEach(function (x) {delete AMS.IDs[x]});
    }
  }, 1);
});

到您的%%javascript部分,它会设置一些前置和后置过滤器,用于保存有关方程式编号,标签和等式ID的信息,这些信息在处理时是等式的一部分,如果重新处理后,它将重置方程编号以从给定方程的编号开始,并从使用中的方法的记录中清除标签和ID,以便它应使用现有的方程编号重新排版(而不是关于重复\label个宏,而不是更改用于链接到等式的标记ID。

我认为应该做你想要的。