diff --git a/packages/editor/src/extensions/math/plugin/math-node-view.ts b/packages/editor/src/extensions/math/plugin/math-node-view.ts index 8704299e7..c04ba0abb 100644 --- a/packages/editor/src/extensions/math/plugin/math-node-view.ts +++ b/packages/editor/src/extensions/math/plugin/math-node-view.ts @@ -276,6 +276,8 @@ export class MathView implements NodeView, ICursorPosObserver { while (this._mathRenderElt.firstChild) { this._mathRenderElt.firstChild.remove(); } + this._mathRenderElt.classList.remove("parse-error"); + this.dom.setAttribute("title", ""); // do not render empty math return; } else { diff --git a/packages/editor/src/extensions/math/plugin/renderers/katex.ts b/packages/editor/src/extensions/math/plugin/renderers/katex.ts index 1a9b2aa75..47241f98f 100644 --- a/packages/editor/src/extensions/math/plugin/renderers/katex.ts +++ b/packages/editor/src/extensions/math/plugin/renderers/katex.ts @@ -32,20 +32,32 @@ async function loadKatex() { export const KatexRenderer: MathRenderer = { inline: (text, element) => { loadKatex().then((katex) => { - katex.render(text, element, { - displayMode: false, - globalGroup: true, - throwOnError: false - }); + try { + katex.render(text, element, { + displayMode: false, + globalGroup: true, + throwOnError: false + }); + } catch (err) { + console.error(err); + element.classList.add("parse-error"); + element.setAttribute("title", err instanceof Error ? err.message : String(err)); + } }); }, block: (text, element) => { loadKatex().then((katex) => { - katex.render(text, element, { - displayMode: true, - globalGroup: true, - throwOnError: false - }); + try { + katex.render(text, element, { + displayMode: true, + globalGroup: true, + throwOnError: false + }); + } catch (err) { + console.error(err); + element.classList.add("parse-error"); + element.setAttribute("title", err instanceof Error ? err.message : String(err)); + } }); } };