latex update

This commit is contained in:
wangjinlei
2026-02-26 13:54:30 +08:00
parent e109a84eff
commit 6b900f5f90

View File

@@ -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 = '/^<wmath[^>]*?\s+data-latex="([^"]*)"[^>]*?>.*?<\/wmath>$/';
/* $pattern = '/^<wmath[^>]*?\s+data-latex="([^"]*)"[^>]*?>.*?<\/wmath>$/';*/
// if(preg_match($pattern, $content) === 1){
// $pattern1 = '/<wmath[^>]*?\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 = '/^<wmath[^>]*?\s+data-latex="([^"]*)"[^>]*?\s+data-wrap="block"[^>]*?>.*?<\/wmath>$/';
if(preg_match($pattern, $content) === 1){
$pattern1 = '/<wmath[^>]*?\s+data-latex="([^"]*)">/';
$pattern1 = '/<wmath[^>]*?\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 = "</{$nextTag}>";
$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('/(?:<blue>)?\[(\d+(?:[-,]\d+)*)\](?:<\/blue>)?/', $tagWrappedContent, $matches)) {
// 去除匹配中的 <blue> 和 </blue>
@@ -2419,7 +2431,7 @@ class Production extends Base
* @return int|false 闭合标签的起始位置
*/
private function getLastTabIndex($content, $tag) {
$tagOpen = "<{$tag}>";
$tagOpen = "<{$tag}";
$tagClose = "</{$tag}>";
$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];
}