From 6b900f5f90c37075164836a12b0bc893dd806c3e Mon Sep 17 00:00:00 2001 From: wangjinlei <751475802@qq.com> Date: Thu, 26 Feb 2026 13:54:30 +0800 Subject: [PATCH] latex update --- application/api/controller/Production.php | 36 +++++++++++++++-------- 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/application/api/controller/Production.php b/application/api/controller/Production.php index 31b131d..874d191 100644 --- a/application/api/controller/Production.php +++ b/application/api/controller/Production.php @@ -18,7 +18,7 @@ use think\log; class Production extends Base { - private $supportedTags = ['sup', 'sub', 'blue', 'b', 'i', 't', 'r', 'wmath']; + private $supportedTags = ['sup', 'sub', 'blue', 'b', 'i', 't', 'r', 'wmath','myfigure','mytable']; // 颜色映射(自定义标签颜色对应LaTeX的HTML十六进制颜色) private $colorMap = [ 'blue' => '0082AA', @@ -2033,6 +2033,7 @@ class Production extends Base } public function creatLatex(){ + die("stop service"); $data = $this->request->post(); $rule = new Validate([ "article_id"=>"require" @@ -2248,8 +2249,8 @@ class Production extends Base return jsonError($rule->getError()); } $info = $this->article_main_obj->where("am_id",$data['id'])->find(); - if(isset($data["code"])){ - $content = $data['code']; + if(isset($data["content"])){ + $content = $data['content']; }else{ $content = $info['content']; } @@ -2270,9 +2271,21 @@ class Production extends Base return ''; } //单行处理公式内容 - $pattern = '/^]*?\s+data-latex="([^"]*)"[^>]*?>.*?<\/wmath>$/'; +/* $pattern = '/^]*?\s+data-latex="([^"]*)"[^>]*?>.*?<\/wmath>$/';*/ +// if(preg_match($pattern, $content) === 1){ +// $pattern1 = '/]*?\s+data-latex="([^"]*)">/'; +// if (preg_match($pattern1, $content, $matches)) { +// $latexContent = $matches[1]; +// // 将 $$ 转换为 $,因为equation环境不需要$$ +// $latexContent = str_replace('$$', '', $latexContent); +// +// return "\\begin{equation}\n\t{$latexContent}\n\\end{equation}"; +// } +// return $content; +// } + $pattern = '/^]*?\s+data-latex="([^"]*)"[^>]*?\s+data-wrap="block"[^>]*?>.*?<\/wmath>$/'; if(preg_match($pattern, $content) === 1){ - $pattern1 = '/]*?\s+data-latex="([^"]*)">/'; + $pattern1 = '/]*?\s+data-latex="([^"]*)"[^>]*?\s+data-wrap="block"[^>]*?>/'; if (preg_match($pattern1, $content, $matches)) { $latexContent = $matches[1]; // 将 $$ 转换为 $,因为equation环境不需要$$ @@ -2330,10 +2343,9 @@ class Production extends Base $latex .= $this->escapeLatexSpecialChars($content); $content = ''; }else { - $tagOpen = "<{$nextTag}>"; + $tagOpen = "<{$nextTag}"; $tagClose = ""; $beginTag = strpos($content, $tagOpen); - // 标签前的文本 if ($beginTag > 0) { $latex .= $this->escapeLatexSpecialChars(substr($content, 0, $beginTag)); @@ -2341,6 +2353,7 @@ class Production extends Base // 找到标签的最后闭合位置(处理嵌套) $endTag = $this->getLastTabIndex($content, $nextTag); + if ($endTag === false) { // 无闭合标签,保留原内容(异常情况处理) $latex .= $this->escapeLatexSpecialChars(substr($content, $beginTag)); @@ -2355,7 +2368,6 @@ class Production extends Base $endTag - $beginTag + strlen($tagClose) ); - //这里处理引用 if ($check_refer&&preg_match('/(?:)?\[(\d+(?:[-,]\d+)*)\](?:<\/blue>)?/', $tagWrappedContent, $matches)) { // 去除匹配中的 @@ -2419,7 +2431,7 @@ class Production extends Base * @return int|false 闭合标签的起始位置 */ private function getLastTabIndex($content, $tag) { - $tagOpen = "<{$tag}>"; + $tagOpen = "<{$tag}"; $tagClose = ""; $beginTag = strpos($content, $tagOpen); @@ -2435,7 +2447,7 @@ class Production extends Base // 统计当前标签内的开放标签数量 $caNowStr = substr($content, $beginTag, $endTagCa - $beginTag + strlen($tagClose)); - $caCount = preg_match_all("/<{$tag}>/", $caNowStr, $matches); + $caCount = preg_match_all("/<{$tag}/", $caNowStr, $matches); if ($caCount === 1) { return $endTagCa; @@ -2448,7 +2460,7 @@ class Production extends Base break; } $substring = substr($content, $beginTag, $numIndex - $beginTag + strlen($tagClose)); - $ccaCount = preg_match_all("/<{$tag}>/", $substring, $matches); + $ccaCount = preg_match_all("/<{$tag}/", $substring, $matches); if ($ccaCount !== $caCount) { $caCount = $ccaCount; } else { @@ -2601,7 +2613,7 @@ class Production extends Base * @return string 标签名或'no' */ private function determineNextTag($content) { - $tagPattern = '/<(' . implode('|', $this->supportedTags) . ')>/i'; + $tagPattern = '/<(' . implode('|', $this->supportedTags) . ')\b[^>]*>/i'; if (preg_match($tagPattern, $content, $matches)) { return $matches[1]; }