fix:the formual display error after report editing (#627)

This commit is contained in:
Willem Jiang
2025-10-17 15:34:43 +08:00
committed by GitHub
parent c6348e70c6
commit 497a2a39cf
2 changed files with 46 additions and 0 deletions

View File

@@ -21,6 +21,23 @@ export function normalizeMathForEditor(markdown: string): string {
.replace(/\\\\\(([^)]*)\\\\\)/g, (_match, content) => `$${content}$`) // \\(...\\) → $...$
.replace(/\\\(([^)]*)\\\)/g, (_match, content) => `$${content}$`); // \(...\) → $...$
// Replace double backslashes with single in math contexts
// For inline math: $...$
normalized = normalized.replace(
/\$([^\$]+?)\$/g,
(match, mathContent) => {
return `$${mathContent.replace(/\\\\/g, '\\')}$`;
}
);
// For display math: $$...$$
normalized = normalized.replace(
/\$\$([\s\S]+?)\$\$/g,
(match, mathContent) => {
return `$$${mathContent.replace(/\\\\/g, '\\')}$$`;
}
);
return normalized;
}
@@ -41,6 +58,23 @@ export function normalizeMathForDisplay(markdown: string): string {
.replace(/\\\\\(([^)]*)\\\\\)/g, (_match, content) => `$$${content}$$`) // \\(...\\) → $$...$$
.replace(/\\\(([^)]*)\\\)/g, (_match, content) => `$$${content}$$`); // \(...\) → $$...$$
// Replace double backslashes with single in math contexts
// For inline math: $...$
normalized = normalized.replace(
/\$([^\$]+?)\$/g,
(match, mathContent) => {
return `$${mathContent.replace(/\\\\/g, '\\')}$`;
}
);
// For display math: $$...$$
normalized = normalized.replace(
/\$\$([\s\S]+?)\$\$/g,
(match, mathContent) => {
return `$$${mathContent.replace(/\\\\/g, '\\')}$$`;
}
);
return normalized;
}

View File

@@ -10,6 +10,18 @@ describe("markdown math normalization for editor", () => {
assert.strictEqual(output, "Here is a formula $$E=mc^2$$ in the text.");
});
it("converts LaTeX display delimiters to $ with \\ for editor", () => {
const input = "Here is a formula \\(F = k\\frac{q_1q_2}{r^2}\\) in the text.";
const output = normalizeMathForEditor(input);
assert.strictEqual(output, "Here is a formula $F = k\\frac{q_1q_2}{r^2}$ in the text.");
});
it("converts LaTeX display delimiters to $ with \\\\ for editor", () => {
const input = "Here is a formula \\(F = k\\\\frac{q_1q_2}{r^2}\\) in the text.";
const output = normalizeMathForEditor(input);
assert.strictEqual(output, "Here is a formula $F = k\\frac{q_1q_2}{r^2}$ in the text.");
});
it("converts escaped LaTeX display delimiters to $$ for editor", () => {
const input = "Formula \\\\[x^2 + y^2 = z^2\\\\] here.";
const output = normalizeMathForEditor(input);