|
@@ -26120,11 +26120,42 @@ export default {
|
|
|
renderedFormula() {
|
|
|
return function(val){
|
|
|
try {
|
|
|
- return katex.renderToString(val,{
|
|
|
- throwOnError: false, // 禁止抛出错误(即使语法错误也只警告)
|
|
|
- strict: false, // 允许松散语法(忽略部分非标准输入)
|
|
|
- output: "htmlAndMathml" // 更兼容的输出模式
|
|
|
- });
|
|
|
+ // 判断是否含有HTML标签,<tag ...>...</tag>
|
|
|
+ const hasTag = /<([a-zA-Z][\w\-]*)([^>]*)>([\s\S]*?)<\/\1>/g.test(val);
|
|
|
+ if (!hasTag) {
|
|
|
+ // 纯文本,整体渲染
|
|
|
+ val = val.trim().replace(/[\u200B-\u200D\uFEFF]/g, '');
|
|
|
+
|
|
|
+ try {
|
|
|
+ return katex.renderToString(val.trim(), {
|
|
|
+ throwOnError: false,
|
|
|
+ strict: false,
|
|
|
+ output: "htmlAndMathml"
|
|
|
+ });
|
|
|
+ } catch (e) {
|
|
|
+ return val; // 渲染失败原样输出
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ // 有标签,对每个标签内容渲染
|
|
|
+ return val.replace(
|
|
|
+ /<([a-zA-Z][\w\-]*)([^>]*)>([\s\S]*?)<\/\1>/g,
|
|
|
+ (match, tag, attrs, inner) => {
|
|
|
+ let html;
|
|
|
+ val = val.trim().replace(/[\u200B-\u200D\uFEFF]/g, '');
|
|
|
+
|
|
|
+ try {
|
|
|
+ html = katex.renderToString(inner.trim(), {
|
|
|
+ throwOnError: false,
|
|
|
+ strict: false,
|
|
|
+ output: "htmlAndMathml"
|
|
|
+ });
|
|
|
+ } catch (e) {
|
|
|
+ html = inner;
|
|
|
+ }
|
|
|
+ return `<${tag}${attrs}>${html}</${tag}>`;
|
|
|
+ }
|
|
|
+ );
|
|
|
+ }
|
|
|
} catch (e) {
|
|
|
console.error('KaTeX渲染错误:', e);
|
|
|
return val;
|