Fix: Fixed an issue where math formulas could not be displayed correctly #4405 (#4506)

### What problem does this PR solve?

[remarkjs/react-markdown/issues/785](https://github.com/remarkjs/react-markdown/issues/785)
Fix: Fixed an issue where math formulas could not be displayed correctly
#4405

### Type of change

- [x] Bug Fix (non-breaking change which fixes an issue)
This commit is contained in:
balibabu 2025-01-16 15:13:40 +08:00 committed by GitHub
parent 39be08c83d
commit 37235315e1
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 20 additions and 2 deletions

View File

@ -8,6 +8,7 @@ import remarkMath from 'remark-math';
import 'katex/dist/katex.min.css'; // `rehype-katex` does not import the CSS for you
import { preprocessLaTeX } from '@/utils/chat';
import styles from './index.less';
const HightLightMarkdown = ({
@ -43,7 +44,7 @@ const HightLightMarkdown = ({
} as any
}
>
{children}
{children ? preprocessLaTeX(children) : children}
</Markdown>
);
};

View File

@ -20,7 +20,9 @@ import { useTranslation } from 'react-i18next';
import 'katex/dist/katex.min.css'; // `rehype-katex` does not import the CSS for you
import { preprocessLaTeX } from '@/utils/chat';
import { replaceTextByOldReg } from '../utils';
import styles from './index.less';
const reg = /(~{2}\d+={2})/g;
@ -48,7 +50,7 @@ const MarkdownContent = ({
text = t('chat.searching');
}
const nextText = replaceTextByOldReg(text);
return loading ? nextText?.concat('~~2$$') : nextText;
return loading ? nextText?.concat('~~2$$') : preprocessLaTeX(nextText);
}, [content, loading, t]);
useEffect(() => {

View File

@ -34,3 +34,18 @@ export const buildMessageUuidWithRole = (
) => {
return `${message.role}_${message.id}`;
};
// Preprocess LaTeX equations to be rendered by KaTeX
// ref: https://github.com/remarkjs/react-markdown/issues/785
export const preprocessLaTeX = (content: string) => {
const blockProcessedContent = content.replace(
/\\\[([\s\S]*?)\\\]/g,
(_, equation) => `$$${equation}$$`,
);
const inlineProcessedContent = blockProcessedContent.replace(
/\\\(([\s\S]*?)\\\)/g,
(_, equation) => `$${equation}$`,
);
return inlineProcessedContent;
};