Kaynağa Gözat

fix: 知识点公式解析 bug 跟踪。

yemeishu 1 hafta önce
ebeveyn
işleme
6e04851dad
1 değiştirilmiş dosya ile 11 ekleme ve 1 silme
  1. 11 1
      app/Services/MathFormulaProcessor.php

+ 11 - 1
app/Services/MathFormulaProcessor.php

@@ -89,9 +89,19 @@ class MathFormulaProcessor
         // 保留 \\+大写字母 的情况(换行符后跟文本,如 \\CD 应保持为 \\CD)
         // 保留 \\+数字 或 \\+空白 的情况(矩阵换行符)
         $fixEscapedCommands = function ($tex) {
+            // 保护 cases 环境中的换行符 \\,避免被误判为 LaTeX 命令
+            $placeholder = '__KATEX_CASES_BR__';
+            $tex = preg_replace_callback('/\\\\begin\{cases\}([\s\S]*?)\\\\end\{cases\}/', function ($m) use ($placeholder) {
+                $content = str_replace('\\\\', $placeholder, $m[1]);
+                return '\\begin{cases}' . $content . '\\end{cases}';
+            }, $tex);
+
             // \\sqrt -> \sqrt, \\frac -> \frac, 但 \\CD 或 \\2 保持不变
             // 【修复】只匹配小写字母,因为 LaTeX 命令都是小写
-            return preg_replace('/\\\\\\\\([a-z])/', '\\\\$1', $tex);
+            $tex = preg_replace('/\\\\\\\\([a-z])/', '\\\\$1', $tex);
+
+            // 还原 cases 换行
+            return str_replace($placeholder, '\\\\', $tex);
         };
 
         // 1. 处理 $$...$$ 块级公式