import remarkMath from "remark-math" import rehypeKatex from "rehype-katex" import rehypeMathjax from "rehype-mathjax/svg.js" import { QuartzTransformerPlugin } from "../types" interface Options { renderEngine: "katex" | "mathjax" } export const Latex: QuartzTransformerPlugin = (opts?: Options) => { const engine = opts?.renderEngine ?? "katex" return { name: "Latex", markdownPlugins() { return [remarkMath] }, htmlPlugins() { return [engine === "katex" ? [rehypeKatex, { output: "html" }] : [rehypeMathjax]] }, externalResources() { return engine === "katex" ? { css: [ // base css "https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/katex.min.css", ], js: [ { // fix copy behaviour: https://github.com/KaTeX/KaTeX/blob/main/contrib/copy-tex/README.md src: "https://cdn.jsdelivr.net/npm/katex@0.16.7/dist/contrib/copy-tex.min.js", loadTime: "afterDOMReady", contentType: "external", }, ], } : {} }, } }