latex update

This commit is contained in:
wangjinlei
2026-02-26 14:00:42 +08:00
8 changed files with 567 additions and 283 deletions

View File

@@ -18,7 +18,7 @@ use think\log;
class Production extends Base
{
private $supportedTags = ['sup', 'sub', 'blue', 'b', 'i', 't', 'r', 'wmath','myfigure','mytable'];
private $supportedTags = ['sup', 'sub', 'blue', 'b', 'i', 't', 'r', 'wmath','myfigure','mytable',"myh3"];
// 颜色映射自定义标签颜色对应LaTeX的HTML十六进制颜色
private $colorMap = [
'blue' => '0082AA',
@@ -2033,7 +2033,6 @@ class Production extends Base
}
public function creatLatex(){
die("stop service");
$data = $this->request->post();
$rule = new Validate([
"article_id"=>"require"
@@ -2249,8 +2248,8 @@ class Production extends Base
return jsonError($rule->getError());
}
$info = $this->article_main_obj->where("am_id",$data['id'])->find();
if(isset($data["content"])){
$content = $data['content'];
if(isset($data["code"])){
$content = $data['code'];
}else{
$content = $info['content'];
}
@@ -2271,21 +2270,9 @@ class Production extends Base
return '';
}
//单行处理公式内容
/* $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>$/';
$pattern = '/^<wmath[^>]*?\s+data-latex="([^"]*)"[^>]*?>.*?<\/wmath>$/';
if(preg_match($pattern, $content) === 1){
$pattern1 = '/<wmath[^>]*?\s+data-latex="([^"]*)"[^>]*?\s+data-wrap="block"[^>]*?>/';
$pattern1 = '/<wmath[^>]*?\s+data-latex="([^"]*)">/';
if (preg_match($pattern1, $content, $matches)) {
$latexContent = $matches[1];
// 将 $$ 转换为 $因为equation环境不需要$$
@@ -2343,9 +2330,10 @@ 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));
@@ -2353,7 +2341,6 @@ class Production extends Base
// 找到标签的最后闭合位置(处理嵌套)
$endTag = $this->getLastTabIndex($content, $nextTag);
if ($endTag === false) {
// 无闭合标签,保留原内容(异常情况处理)
$latex .= $this->escapeLatexSpecialChars(substr($content, $beginTag));
@@ -2368,6 +2355,7 @@ class Production extends Base
$endTag - $beginTag + strlen($tagClose)
);
//这里处理引用
if ($check_refer&&preg_match('/(?:<blue>)?\[(\d+(?:[-,]\d+)*)\](?:<\/blue>)?/', $tagWrappedContent, $matches)) {
// 去除匹配中的 <blue> 和 </blue>
@@ -2431,7 +2419,7 @@ class Production extends Base
* @return int|false 闭合标签的起始位置
*/
private function getLastTabIndex($content, $tag) {
$tagOpen = "<{$tag}";
$tagOpen = "<{$tag}>";
$tagClose = "</{$tag}>";
$beginTag = strpos($content, $tagOpen);
@@ -2447,7 +2435,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;
@@ -2460,7 +2448,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 {
@@ -2613,7 +2601,7 @@ class Production extends Base
* @return string 标签名或'no'
*/
private function determineNextTag($content) {
$tagPattern = '/<(' . implode('|', $this->supportedTags) . ')\b[^>]*>/i';
$tagPattern = '/<(' . implode('|', $this->supportedTags) . ')>/i';
if (preg_match($tagPattern, $content, $matches)) {
return $matches[1];
}