Published
Edited
Apr 24, 2020
1 fork
Importers
2 stars
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
$r = String.raw
Insert cell
MarkdownIt = require('markdown-it/dist/markdown-it.js')
Insert cell
MarkdownItMathJax = require('markdown-it-mathjax').catch(() => window.markdownitMathjax)
Insert cell
mdit = MarkdownIt('commonmark', {
highlight: (str, lang) => {
if (lang && hljs.getLanguage(lang)) {
return hljs.highlight(lang, str, true).value
}
}
})
.use(MarkdownItMathJax())
.use(KatexRenderer())
Insert cell
KatexRenderer = function() {
function inlineRenderer(tokens, idx) {
return '<span class="katex">' + tex`${tokens[idx].content}`.innerHTML + '</span>'
}
function blockRenderer(tokens, idx) {
return '<span class="katex-display">' + tex.block`${tokens[idx].content}`.innerHTML + '</span>'
}
return function(md) {
md.renderer.rules.inline_math = inlineRenderer
md.renderer.rules.display_math = blockRenderer
}
}
Insert cell
mditRendererFactory = mditInstance => template(
text => {
const root = DOM.element('div')
root.innerHTML = mditInstance.render(text.replace(/\\([`$])/g, '$1'))
return root
},
() => DOM.element('div'), true)
Insert cell
hljs = require('@observablehq/highlight.js@2.0.0/highlight.min.js')
Insert cell
hljs.listLanguages()
Insert cell
md = mditRendererFactory(mdit)
Insert cell

Purpose-built for displays of data

Observable is your go-to platform for exploring data and creating expressive data visualizations. Use reactive JavaScript notebooks for prototyping and a collaborative canvas for visual data exploration and dashboard creation.
Learn more