JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 249
  • Score
    100M100P100Q94208F
  • License MIT

rehype plugin to transform .math-inline, .math-display with KaTeX to Svelte markup

Package Exports

  • rehype-katex-svelte
  • rehype-katex-svelte/dist/index.js

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (rehype-katex-svelte) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

rehype-katex-svelte

rehype plugin to transform .math-inline and .math-display elements with KaTeX into Svelte-friendly markup nodes.

This plugin is functionally equivalent to rehype-katex but is specifically intended to be used with mdsvex (markdown format for Svelte).

The key issue it addresses is that LaTeX curly braces (e.g. {x}) conflict with Svelte's template syntax; as such, using rehype-katex to serialize a LaTeX expression such as \frac{x}{y} would result in "x is not defined" and "y is not defined" errors. This plugin fixes those errors by rendering KaTeX content via {@html "..."} instead of plain HTML nodes (which is what rehype-katex does), preventing curly-brace content from getting treated as Svelte template expressions.

Usage

To use rehype-katex-svelte with mdsvex, you need to import rehype-katex-svelte and remark-math and add both to mdsvex's config:

Note: mdsvex uses an old remark version so you need remark-math@3.0.0

npm install -D remark-math@3.0.0
import rehypeKatexSvelte from "rehype-katex-svelte";
import remarkMath from 'remark-math'

mdsvex({
  remarkPlugins: [
    remarkMath,
  ],
  rehypePlugins: [
    rehypeKatexSvelte,
    /* other rehype plugins... */
  ],
  /* other mdsvex config options... */
});

Options passed to the rehype-katex-svelte plugin are relayed directly to KaTeX:

mdsvex({
  rehypePlugins: [
    [
      rehypeKatexSvelte,
      {
        macros: {
          "\\CC": "\\mathbb{C}",
          "\\vec": "\\mathbf",
        },
      },
    ],
    /* etc. */
  ],
  /* etc. */
});

Then you start writing maths in your .svx files

<!-- blog-post.svx -->
<!-- inline -->
$f(x) = x^2$
<!-- block -->
$$
f(x) = x^2
$$

You might also want to add katex.css somewhere to style the maths properly

<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.12.0/dist/katex.min.css" integrity="sha384-AfEj0r4/OFrOo5t7NnNe46zW/tFgW6x/bCJG8FqQCEo3+Aro6EYUG4+cU+KJWu/X" crossorigin="anonymous">

This plugin is not really intended to be used directly with the rehype API, but nothing stops you from doing so if that's what gets you going:

rehype().use(rehypeKatexSvelte[, katexOptions])

Caveats

  • I didn't bother implementing some of rehype-katex's other features, e.g. options.throwOnError, because I didn't personally find a need for it.

  • My code might not be following rehype "best practices"—this is literally my first attempt at a rehype plugin. If you'd like to help me improve my code, by all means go ahead! (Please open a PR.)

Security

I haven't given any thought to sanitizing inputs & protecting against XSS, so beware! Make sure you only use rehype-katex-svelte on inputs you trust, i.e. your own source code.

If you care about improving the security of this plugin, please open a PR, and I'd be happy to merge it!

Contributing

Feel free to open an issue, make a PR, email me, whatever. Code of conduct: don't be a jerk.

License

GPLv3 @ Kye Shi