如何为 iPython 笔记本配置 mathjax?

How do I configure mathjax for iPython notebooks?

我正在尝试找到一种方法让 mathjax 不在我的 iPython 笔记本中使用 STIX 字体进行数学计算。相反,我宁愿让它使用 'TeX' 字体。根据 Mathjax 的文档,我应该使用:

MathJax.Hub.Config({
  "HTML-CSS": {
    preferredFont: "TeX"
  }
});

话虽这么说,但我不确定该把它放在哪里。我已经尝试将这段代码放入属于我自己的 ipython 配置文件的 custom.js 文件中,但它不起作用。理想情况下,我想对 mathjax 进行 ipython 配置文件特定调整。

看一下在笔记本中的某个位置导入的一些 numericalmooc lessons such as this one where the MathJax configuration is included through a css file

确保配置正确的一个简单测试是将 preferredFont: "TeX" 更改为 scale: 200。然后保存并重新加载笔记本。数学应该明显比以前大得多。因此,假设这有效,这意味着您的 config.js 正在做它需要做的事情。

现在,更重要的是,尝试添加另一行以使您的配置看起来像

MathJax.Hub.Config({
  "HTML-CSS": {
    availableFonts: ["TeX"],
    preferredFont: "TeX",
  }
});

保存后不要忘记完全刷新笔记本页面。这会覆盖(我猜是)default value of that availableFonts variable,如果 mathjax 找不到 TeX,它将允许 STIX。我不确定为什么它似乎忽略了首选字体,但这似乎更像是一个 mathjax 问题而不是 ipython 问题。

所以现在,如果它仍然不是 TeX 字体(mathjax 似乎称之为 MathJax_Math-Italic.otf 或类似字体),我猜 mathjax 就是找不到那个字体,并且可能已经倒下了回到别的事情上。如果是这样,则说明您的 mathjax 安装有问题。

我最近遇到了确切的问题。我真的不喜欢默认的 STIX-Web 字体来呈现等式。经过一段时间的试验,我找到了一种在 Jupyter Notebook 中更改 MathJax 字体的方法。我的 Jupyter Notebook 版本是 4.3.1,它是随 Anaconda 一起提供的。我认为其他版本的解决方案应该类似。

我试图在 /notebook/static/custom/custom.js~/.jupyter/custom/custom.js 中编辑 custom.js。不起作用。我也尝试编辑 mathjaxutils.js。它什么都不做。最后我看到了这个 post https://github.com/jupyter/help/issues/109。我意识到 Jupyter 使用 main.min.js 来读取 MathJax 配置。所以这是解决方案:

  • Github 下载 MathJax(https://github.com/mathjax/MathJax)。
  • 解压缩MathJax文件并进入文件夹
    • 复制jax/output/HTML-CSS/fonts/TeX到目录../notebook/static/components/MathJax/jax/output/HTML-CSS/fonts/
    • fonts/HTML-CSS/TeX复制到../notebook/static/components/MathJax/fonts/HTML-CSS/
  • 打开 ../notebook/static/notebook/js/main.min.js,搜索 availableFonts。应该在14894行左右,改成

    ...
    availableFonts: ["STIX-Web","TeX"],
    imageFont: null;
    preferredFont: "TeX",
    webFont: "TeX"
    ...
    
  • 刷新笔记本。

我已经将@Stefan Shi 的 调整得更简单一些,至少如果您安装了命令行 svn

  • 将以下内容放入名为 install_tex_fonts 的脚本文件中(Windows-land 中的 install_tex_fonts.bat):

    svn export https://github.com/mathjax/MathJax/trunk/fonts/HTML-CSS/TeX/woff fonts/HTML-CSS/TeX/woff
    svn export https://github.com/mathjax/MathJax/trunk/jax/output/HTML-CSS/fonts/TeX jax/output/HTML-CSS/fonts/TeX
    
  • 将脚本文件移动到 {PYTHON}/Lib/site-packages/notebook/static/components/MathJax 其中 {PYTHON} 是您安装的根目录 Python

  • 在此目录中打开一个shell(命令提示符)
  • 运行 通过输入 install_tex_fonts 脚本(或在 *nix 系统上输入 ./install_tex_fonts;我想你也必须 chmod a+x 它)
  • 在您的 ~/.jupyter/custom/custom.js 文件中添加以下部分($([IPython.events]).on('app_initialized.NotebookApp') 行应该已经存在):

    $([IPython.events]).on('app_initialized.NotebookApp', function(){
    
      MathJax.Hub.Config({
        "HTML-CSS": {
            availableFonts: ["TeX"],
            preferredFont: "TeX",
            webFont: "TeX"
        }
       });
    

Jupyter 附带了自己的(较小)版本的 MathJax。这就是它无法找到(现代计算机)'TeX' 字体的原因——只有 STIX 字体。

要解决此问题,我可以执行以下操作:

  1. 下载 MathJax 2.7 并复制 jax 目录。
  2. 用复制的目录替换 Jupyter 的 jax 目录:
  • 对于默认环境:~/anaconda3/lib/python3.7/site-packages/notebook/static/components/MathJax/jax
  • 对于不同的环境:~/anaconda3/envs/<ENVIRONMENT>/lib/python3.7/site-packages/notebook/static/components/MathJax/jax
  1. 重新启动Jupyter,右键单击一段数学并将'Math Renderer'切换为SVG。

(如果你的版本不是 3.7,请调整路径中的 python 版本;如果你使用的是 miniconda,则路径应为 ~/opt/miniconda3/lib/...