Bladeren bron

fix: 继续修复公式问题

大侠咬超人 1 week geleden
bovenliggende
commit
386068e572
2 gewijzigde bestanden met toevoegingen van 5 en 5 verwijderingen
  1. 3 3
      app/Services/ExamPdfExportService.php
  2. 2 2
      scripts/katex-render.mjs

+ 3 - 3
app/Services/ExamPdfExportService.php

@@ -1258,9 +1258,6 @@ class ExamPdfExportService
      */
     private function inlineExternalResources(string $html): string
     {
-        // 【换行处理】将字面的 \n 转换为 <br> 标签(在 KaTeX 渲染前处理)
-        $html = str_replace(['\\n\\n', '\\n'], ['<br><br>', '<br>'], $html);
-
         // 【调试】记录HTML内容信息
         Log::warning('ExamPdfExportService: inlineExternalResources', [
             'html_length' => strlen($html),
@@ -1364,6 +1361,9 @@ class ExamPdfExportService
                 Log::warning('ExamPdfExportService: KatexRenderer 未初始化,跳过预渲染');
             }
 
+            // 【换行处理】将字面的 \n 转换为 <br> 标签(在 KaTeX 渲染后处理,避免破坏公式)
+            $html = str_replace(['\\n\\n', '\\n'], ['<br><br>', '<br>'], $html);
+
         } catch (\Exception $e) {
             Log::warning('ExamPdfExportService: 内联资源处理失败,保留原始HTML', [
                 'error' => $e->getMessage()

+ 2 - 2
scripts/katex-render.mjs

@@ -137,8 +137,8 @@ function processDelimiter(html, left, right, displayMode) {
                 return match;
             }
 
-            // 不再跳过任何内容 - 既然用 $...$ 包裹了,就应该渲染
-            // 在数学教育场景下,$123$ 应该显示为数学字体的数字
+            // 【修复】处理公式内的换行符:将 \n 替换成空格,避免破坏公式
+            cleanLatex = cleanLatex.replace(/\\n/g, ' ').replace(/\n/g, ' ');
 
             // 渲染 KaTeX
             const rendered = katex.renderToString(cleanLatex, {