| | |
| | | |
| | | Normally for both `remark` and `rehype`, you can find existing plugins that you can use to . If you'd like to create your own `remark` or `rehype` plugin, checkout the [guide to creating a plugin](https://unifiedjs.com/learn/guide/create-a-plugin/) using `unified` (the underlying AST parser and transformer library). |
| | | |
| | | A good example of a transformer plugin that borrows from the `remark` and `rehype` ecosystems is the [[Latex]] plugin: |
| | | A good example of a transformer plugin that borrows from the `remark` and `rehype` ecosystems is the [[plugins/Latex|Latex]] plugin: |
| | | |
| | | ```ts title="quartz/plugins/transformers/latex.ts" |
| | | import remarkMath from "remark-math" |
| | | import rehypeKatex from "rehype-katex" |
| | | import rehypeMathjax from "rehype-mathjax/svg.js" |
| | | import rehypeMathjax from "rehype-mathjax/svg" |
| | | import { QuartzTransformerPlugin } from "../types" |
| | | |
| | | interface Options { |
| | |
| | | externalResources() { |
| | | if (engine === "katex") { |
| | | return { |
| | | css: ["https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/katex.min.css"], |
| | | css: [ |
| | | // base css |
| | | "https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.16.9/katex.min.css", |
| | | ], |
| | | js: [ |
| | | { |
| | | src: "https://cdn.jsdelivr.net/npm/katex@0.16.7/dist/contrib/copy-tex.min.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", |
| | | }, |
| | |
| | | ...defaultContentPageLayout, |
| | | pageBody: Content(), |
| | | } |
| | | const { head, header, beforeBody, pageBody, left, right, footer } = layout |
| | | const { head, header, beforeBody, pageBody, afterBody, left, right, footer } = layout |
| | | return { |
| | | name: "ContentPage", |
| | | getQuartzComponents() { |
| | | return [head, ...header, ...beforeBody, pageBody, ...left, ...right, footer] |
| | | return [head, ...header, ...beforeBody, pageBody, ...afterBody, ...left, ...right, footer] |
| | | }, |
| | | async emit(ctx, content, resources, emit): Promise<FilePath[]> { |
| | | const cfg = ctx.cfg.configuration |
| | |
| | | allFiles, |
| | | } |
| | | |
| | | const content = renderPage(slug, componentData, opts, externalResources) |
| | | const content = renderPage(cfg, slug, componentData, opts, externalResources) |
| | | const fp = await emit({ |
| | | content, |
| | | slug: file.data.slug!, |