Jupyter notebook 关于在jupyter笔记本中加载katex的bokeh问题

Jupyter notebook 关于在jupyter笔记本中加载katex的bokeh问题,jupyter-notebook,latex,bokeh,katex,bokehjs,Jupyter Notebook,Latex,Bokeh,Katex,Bokehjs,我试图复制LabelSet的jupyter笔记本中提到的bokeh乳胶示例。我可以看到katex.min.js正在从web控制台加载。但是,当LatexLabel呈现时,它表示未定义katex。 Katex JS文档说,一旦JS加载,它应该在全球范围内可用 import * as p from "core/properties" import {LabelSet, LabelSetView} from "models/annotations/label_set" declare const ka

我试图复制LabelSet的jupyter笔记本中提到的bokeh乳胶示例。我可以看到katex.min.js正在从web控制台加载。但是,当LatexLabel呈现时,它表示未定义katex。 Katex JS文档说,一旦JS加载,它应该在全球范围内可用

import * as p from "core/properties"
import {LabelSet, LabelSetView} from "models/annotations/label_set"
declare const katex: any

export class LatexLabelSetView extends LabelSetView {
  model: LatexLabelSet

  render(): void {
    const draw = this._v_css_text.bind(this)
    const {ctx} = this.plot_view.canvas_view
    const [sx, sy] = this._map_data()

    for (let i = 0, end = this._text.length; i < end; i++) {
      try {
        draw(ctx, i, this._text[i], sx[i] + this._x_offset[i], sy[i] - this._y_offset[i], this._angle[i])
        katex.render(this._text[i], this.el, {displayMode: true})
      }
      catch(e) {
        console.log( 'Error: ' + e);
      }
    }
  }
}
还尝试将脚本元素添加到文档根目录中。不过运气不好

export class LatexLabelSet extends LabelSet {
  properties: LatexLabelSet.Props

  constructor(attrs?: Partial<LatexLabelSet.Attrs>) {
    super(attrs)
  }

  static init_LatexLabelSet() {
    let jsNode = document.createElement('script')
    jsNode.id = 'bokeh-katex-js'
    jsNode.src = "https://cdn.jsdelivr.net/npm/katex@0.11.1/dist/katex.min.js"
    let cssNode = document.createElement('link')
    cssNode.id = 'bokeh-katex-css'
    cssNode.rel= 'stylesheet'
    cssNode.href = "https://cdn.jsdelivr.net/npm/katex@0.11.1/dist/katex.min.css"
    document.getElementsByClassName('bk-root')[0].appendChild(cssNode)
    document.getElementsByClassName('bk-root')[0].appendChild(jsNode)
    this.prototype.default_view = LatexLabelSetView
  }
}
导出类LatexLabelSet扩展标签集{
属性:LatexLabelSet.Props
构造函数(属性?:部分){
超级(ATTR)
}
静态init_LatexLabelSet(){
让jsNode=document.createElement('script')
jsNode.id='bokeh katex js'
jsNode.src=”https://cdn.jsdelivr.net/npm/katex@0.11.1/dist/katex.min.js“
让cssNode=document.createElement('link')
cssNode.id='bokeh katex css'
cssNode.rel='stylesheet'
cssNode.href=”https://cdn.jsdelivr.net/npm/katex@0.11.1/dist/katex.min.css“
document.getElementsByClassName('bk-root')[0]。appendChild(cssNode)
document.getElementsByClassName('bk-root')[0]。appendChild(jsNode)
this.prototype.default_view=LatexLabelSetView
}
}
任何指导都会有帮助。

如中所述,这在笔记本中是不可能实现的

上面说

请注意,在Jupyter笔记本中,不可能使用组件并在同一笔记本单元中显示

事实上,如果使用下面的代码,它会打开一个包含绘图和公式的新选项卡,但是如果调用
output\u notebook()
,则不会显示文本,浏览器控制台会抛出
未捕获的引用错误:未定义katex

p=图(title=“乳胶演示”)
p、 行([0,0,1,1,0],[0,1,1,0,0])
latex=LatexLabel(text=r“e^{i\pi}+1=0”,
x=0.4,y=0.55,
渲染模式为css,文本为字体大小为16pt,
背景_填充_α=0)
p、 添加_布局(latex)
表演(p)
在新选项卡中工作:

不在笔记本内工作:

如中所述,这在笔记本电脑中是不可能实现的

上面说

请注意,在Jupyter笔记本中,不可能使用组件并在同一笔记本单元中显示

事实上,如果使用下面的代码,它会打开一个包含绘图和公式的新选项卡,但是如果调用
output\u notebook()
,则不会显示文本,浏览器控制台会抛出
未捕获的引用错误:未定义katex

p=图(title=“乳胶演示”)
p、 行([0,0,1,1,0],[0,1,1,0,0])
latex=LatexLabel(text=r“e^{i\pi}+1=0”,
x=0.4,y=0.55,
渲染模式为css,文本为字体大小为16pt,
背景_填充_α=0)
p、 添加_布局(latex)
表演(p)
在新选项卡中工作:

不在笔记本内工作:

可能会备份一些,它在笔记本之外工作吗?而且,每次在所有问题中都包含相关的版本信息非常非常重要。我在Python3.7上使用Bokeh
1.0.2
和katex js
0.11
。我还没试过外面的书。我将尝试将其保存到文件中。在定义此自定义模型后,您是否正在调用
output\u notebook
?实际上,正是
output\u notebook
调用使任何自定义模型定义在JS端可用,因此它绝对必须位于自定义模型定义之后。是的。在准备好Figure对象(以及自定义模型)之后,我正在调用
output\u notebook
。我还尝试将脚本元素添加到文档根目录中。但一切都没有改变。更新了问题的细节,可能会备份一些,它在笔记本之外工作吗?而且,每次在所有问题中都包含相关的版本信息非常非常重要。我在Python3.7上使用Bokeh
1.0.2
和katex js
0.11
。我还没试过外面的书。我将尝试将其保存到文件中。在定义此自定义模型后,您是否正在调用
output\u notebook
?实际上,正是
output\u notebook
调用使任何自定义模型定义在JS端可用,因此它绝对必须位于自定义模型定义之后。是的。在准备好Figure对象(以及自定义模型)之后,我正在调用
output\u notebook
。我还尝试将脚本元素添加到文档根目录中。但一切都没有改变。用那个细节更新了问题