From bc5247ddc8b85a20afd41ffa76c253f45685b41d Mon Sep 17 00:00:00 2001 From: passthem Date: Fri, 27 Mar 2026 15:30:38 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BB=99=20KaTeX=20=E5=8A=A0=E4=B8=80=E5=B1=82?= =?UTF-8?q?=E5=8C=85=E8=A3=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/lib/markdown.ts | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/lib/markdown.ts b/src/lib/markdown.ts index cc0da34..22960bb 100644 --- a/src/lib/markdown.ts +++ b/src/lib/markdown.ts @@ -29,6 +29,35 @@ const allowed_langs = [ 'mermaid', ] +/** + * KaTeX 渲染结果修改。 + * + * 让 KaTeX 的公式可复制。 + */ + +function setupKatexCopy(md: MarkdownIt) { + const defaultInline = md.renderer.rules.math_inline! + const defaultBlock = md.renderer.rules.math_block! + + md.renderer.rules.math_inline = (tokens, idx, options, env, self) => { + const content = tokens[idx].content + const rendered = defaultInline(tokens, idx, options, env, self) + + return `${rendered}` + } + + md.renderer.rules.math_block = (tokens, idx, options, env, self) => { + const content = tokens[idx].content + const rendered = defaultBlock(tokens, idx, options, env, self) + return ` +
${rendered} + +
` + } +} + /** * Markdown 渲染函数。 * @@ -59,6 +88,7 @@ export async function renderMarkdown(content: string): Promise { }) md.use(mdKatex) + setupKatexCopy(md) return md.render(content) }