import remarkMath from "remark-math" import rehypeKatex from "rehype-katex" import rehypeMathjax from "rehype-mathjax/svg" import { QuartzTransformerPlugin } from "../types" interface Options { renderEngine: "katex" | "mathjax" customMacros: MacroType } interface MacroType { [key: string]: string } export const Latex: QuartzTransformerPlugin> = (opts) => { const engine = opts?.renderEngine ?? "katex" const macros = opts?.customMacros ?? {} return { name: "Latex", markdownPlugins() { return [remarkMath] }, htmlPlugins() { if (engine === "katex") { return [[rehypeKatex, { output: "html", macros }]] } else { return [[rehypeMathjax, { macros }]] } }, externalResources() { if (engine === "katex") { return { css: [ // base css "https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.16.9/katex.min.css", ], js: [ { // fix copy behaviour: https://github.com/KaTeX/KaTeX/blob/main/contrib/copy-tex/README.md src: "https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.16.9/contrib/copy-tex.min.js", loadTime: "afterDOMReady", contentType: "external", }, ], } } else { return {} } }, } }