/** * @description 工具函数 * @author wangfupeng */ import { nanoid } from 'nanoid' /** * 获取随机数字符串 * @param prefix 前缀 * @returns 随机数字符串 */ export function genRandomStr(prefix: string = 'r'): string { return `${prefix}-${nanoid()}` } // export function replaceSymbols(str: string) { // return str.replace(//g, '>') // } function fixMatrixForKaTeX(latex: string) { return ( latex // 把 \left[ ... \right] 包裹的 matrix 转成 bmatrix .replace( /\\left\[\s*\\begin\{matrix\}([\s\S]*?)\\end\{matrix\}\s*\\right\]/g, '\\begin{bmatrix}$1\\end{bmatrix}' ) // 替换 \Omega 为 \text{Ω} // .replace(/\\Omega/g, '\\text{Ω}') // 替换 \frac 为 \tfrac(矩阵里更紧凑) // .replace(/\\frac/g, '\\tfrac') // 在数字和单位之间加小空格 .replace(/(\d)\s*\\text\{([^}]+)\}/g, '$1\\\\,\\\\text{$2}') ) } /** * 过滤开头 * */ export function cleanMathDelimiters(latex: string) { if (!latex) return latex latex = latex.trim() // 1️⃣ 处理 $$...$$ if (/^\$\$([\s\S]*)\$\$$/.test(latex)) { latex = latex.replace(/^\$\$([\s\S]*)\$\$$/, '$1') } // 2️⃣ 处理 $...$ else if (/^\$([\s\S]*)\$/.test(latex)) { latex = latex.replace(/^\$([\s\S]*)\$$/, '$1') } // 3️⃣ 处理 \(...\) else if (/^\\\(([\s\S]*)\\\)$/.test(latex)) { latex = latex.replace(/^\\\(([\s\S]*)\\\)$/, '$1') } // 4️⃣ 处理 \[...\] else if (/^\\\[([\s\S]*)\\\]$/.test(latex)) { latex = latex.replace(/^\\\[([\s\S]*)\\\]$/, '$1') } return latex.trim() } export function fixKatexFormula(latex: string) { if (!latex) return latex // 替换 align 为 aligned latex = latex.replace(/\\begin\{align\}/g, '\\begin{aligned}') latex = latex.replace(/\\end\{align\}/g, '\\end{aligned}') // 可选:替换 \frac 为 \tfrac,更适合行内公式 latex = latex.replace(/\\frac\{(\d+)\}\{(\d+)\}/g, '\\tfrac{$1}{$2}') // 可选:如果用 \left\{ 配合 align,需要加 \right. latex = latex.replace(/\\left\\\{/g, '\\left\\{') latex = latex.replace(/\\right\./g, '\\right.') return latex } export function composeFnDeal(latex: string) { console.warn('composeFnDeal 被调用了') console.log('原始 latex:', latex) latex = cleanMathDelimiters(latex) console.log('去掉公式包裹符号后:', latex) latex = fixKatexFormula(latex) console.log('fixKatexFormula 处理后:', latex) latex = fixMatrixForKaTeX(latex) console.log('fixMatrixForKaTeX 处理后:', latex) return latex }