fix(katex): Allow Chinese characters adjacent to math delimiters

This commit is contained in:
tth37 2025-05-06 18:38:42 +08:00
parent ed210517c2
commit de182ddec2

View File

@ -10,6 +10,9 @@ const DELIMITER_LIST = [
{ left: '\\begin{equation}', right: '\\end{equation}', display: true }
];
// Defines characters that are allowed to immediately precede or follow a math delimiter.
const ALLOWED_SURROUNDING_CHARS = '\\s?。,!-\\/:-@\\[-`{-~\\p{Script=Han}';
// const DELIMITER_LIST = [
// { left: '$$', right: '$$', display: false },
// { left: '$', right: '$', display: false },
@ -44,10 +47,13 @@ function generateRegexRules(delimiters) {
// Math formulas can end in special characters
const inlineRule = new RegExp(
`^(${inlinePatterns.join('|')})(?=[\\s?。,!-\/:-@[-\`{-~]|$)`,
`^(${inlinePatterns.join('|')})(?=[${ALLOWED_SURROUNDING_CHARS}]|$)`,
'u'
);
const blockRule = new RegExp(
`^(${blockPatterns.join('|')})(?=[${ALLOWED_SURROUNDING_CHARS}]|$)`,
'u'
);
const blockRule = new RegExp(`^(${blockPatterns.join('|')})(?=[\\s?。,!-\/:-@[-\`{-~]|$)`, 'u');
return { inlineRule, blockRule };
}
@ -91,7 +97,9 @@ function katexStart(src, displayMode: boolean) {
// Check if the delimiter is preceded by a special character.
// If it does, then it's potentially a math formula.
const f = index === 0 || indexSrc.charAt(index - 1).match(/[\s?。,!-\/:-@[-`{-~]/);
const f =
index === 0 ||
indexSrc.charAt(index - 1).match(new RegExp(`[${ALLOWED_SURROUNDING_CHARS}]`, 'u'));
if (f) {
const possibleKatex = indexSrc.substring(index);