我如何(可以)在Jupyter笔记本下使用custom.js文件?

Mik*_*ike 21 ipython ipython-notebook jupyter jupyter-notebook

在IPython笔记本(例如v3.1)中,我可以添加一个~/.ipython/profile_default/static/custom/custom.js文件来执行一些自定义JavaScript.例如,我可以这样做:

require(['base/js/namespace', 'base/js/events'], function(IPython, events) {
    console.log("A");
    events.on('app_initialized.NotebookApp', function() {
        console.log("B");
    });
    console.log("C");
});
Run Code Online (Sandbox Code Playgroud)

然后,在JS控制台中,我会看到A,接着是B,然后是C.

现在,从版本4.0开始,他们将它分解为Jupyter笔记本.加载相同的文件(尽管事实是它在下面~/.ipython,而不是在下面~/.jupyter),并且代码被执行.但是,我不再看到这B条线.我猜应用程序没有初始化.我仍然看到它在源代码中被触发,但是后来会发生,还是只是不起作用?

我如何让事情再次发挥作用?我不需要再等了app_initialized吗?在某处记录了这些吗?

编辑

这个页面似乎表明,现在的方法是创建一个自定义扩展并将所有操作放在该load_ipython_extension函数中.是对的吗?如果是这样,mathjax怎么样?和CodeMirror选项?

Mat*_*tW. 12

使用custom.js仍然适用于我,但它似乎移动了一点点.

目前(版本4.2.3)以及即将5.0发布的文档中,它位于~/.jupyter/custom/custom.js.请参阅http://jupyter-notebook.readthedocs.io/en/latest/examples/Notebook/JavaScript%20Notebook%20Extensions.html#custom.js上的文档.

您可以custom.js通过在笔记本中执行此代码段来显示路径和内容:

from jupyter_core.paths import jupyter_config_dir
jupyter_dir = jupyter_config_dir()
import os.path
custom_js_path = os.path.join(jupyter_dir, 'custom', 'custom.js')
print("searching for custom.js in ", custom_js_path)
#  my custom js
if os.path.isfile(custom_js_path):
    with open(custom_js_path) as f:
        print(f.read())
else:
    print("You don't have a custom.js file")
Run Code Online (Sandbox Code Playgroud)


MHH*_*MHH 6

我如何让事情再次发挥作用?我不需要等待app_initialized了吗?

我对推荐的方法没有深入的了解,但是使用Jupyter/IPython 4.0,等待"notebook_loaded.Notebook"而不是"app_initialized.NotebookApp".即使用这一行:

    events.on("notebook_loaded.Notebook", function () {
Run Code Online (Sandbox Code Playgroud)

  • >在某处记录了这些吗? - 我不知道答案,但也许我们可以让@minrk在这里发表评论. (3认同)

psy*_*dia 5

这个问题出现在Github问题跟踪器上 - jupyter 4.0的问题 - 以及最近更新的链接,这些更新似乎简化了扩展的加载:代码更新:

"通过手动编辑notebook.json.默认情况下它位于〜/ .jupyter/nbconfig/notebook.json:"

{
    "load_extensions": {
      "notify": true,
      "theme_toggle": true
  }
}
Run Code Online (Sandbox Code Playgroud)

添加类似的东西"code_folding/main": true似乎也有效.

所以我的理解是,这将取代custom.js用于加载扩展的用途?