瀏覽代碼

数学公式富文本

11wqe1 1 月之前
父節點
當前提交
b7f3547404

+ 36 - 5
src/components/easy2/studyStudent.vue

@@ -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;

+ 36 - 5
src/components/easy3/studyStudent.vue

@@ -21545,11 +21545,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;

+ 35 - 5
src/components/studyStudent.vue

@@ -21497,11 +21497,41 @@ 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;

+ 36 - 5
src/components/studySutdentClass/studyStudent.vue

@@ -25520,11 +25520,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;