浏览代码

fix(pdf): normalize trailing punctuation when blanks are replaced inside math spans

yemeishu 3 周之前
父节点
当前提交
80d87acba3
共有 1 个文件被更改,包括 9 次插入1 次删除
  1. 9 1
      app/Support/BlankPlaceholderRenderer.php

+ 9 - 1
app/Support/BlankPlaceholderRenderer.php

@@ -48,7 +48,12 @@ class BlankPlaceholderRenderer
                 $lastIndex = count($parts) - 1;
                 foreach ($parts as $index => $part) {
                     if ($part !== '') {
-                        $rebuilt .= htmlspecialchars('$'.$part.'$', ENT_QUOTES | ENT_HTML5, 'UTF-8');
+                        // 纯标点不再包进数学环境,避免生成 "$.$" 这类尾部格式。
+                        if (preg_match('/^[\..。]$/u', $part)) {
+                            $rebuilt .= $part;
+                        } else {
+                            $rebuilt .= htmlspecialchars('$'.$part.'$', ENT_QUOTES | ENT_HTML5, 'UTF-8');
+                        }
                     }
                     if ($index < $lastIndex) {
                         $rebuilt .= $blankSpan;
@@ -116,6 +121,9 @@ class BlankPlaceholderRenderer
             return $content;
         }
 
+        // 先处理数学片段尾点(如 "$.$" / "$.$")。
+        $content = preg_replace('/\$\s*[\..]\s*\$(?=\s*(?:<\/[^>]+>\s*)*$)/u', '。', $content);
+
         return preg_replace('/[\..](?=\s*(?:<\/[^>]+>\s*)*$)/u', '。', $content);
     }
 }