import React, { useMemo } from 'react'; import { DocumentBlock } from '../../../types/block'; import katex from 'katex'; import { Calculator } from 'lucide-react'; interface MathBlockViewProps { block: DocumentBlock; } export const MathBlockView: React.FC = ({ block }) => { const renderedHtml = useMemo(() => { try { const cleanContent = block.content.trim().replace(/^\\?\$+/, '').replace(/\$+$/, ''); return katex.renderToString(cleanContent, { displayMode: true, throwOnError: false, }); } catch (err: any) { return `LaTeX 解析错误: ${err.message}`; } }, [block.content]); const caption = block.properties?.caption || '关键计算判据与物理算法模型'; // 提取公式右侧序号简写,例如 "式 (3-1)" 提取为 "(3-1)" const formulaTag = block.numbering ? block.numbering.replace(/^式\s*/, '') : ''; return (
{/* 国际工程/学术规范:公式右侧常驻对齐编号 */} {formulaTag && (
{formulaTag}
)}
{/* 题注与完整编号 */}
{block.numbering ? `${block.numbering} ` : ''} {caption}
); };