import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QWidget, QTextEdit
from PyQt5.QtWebEngineWidgets import QWebEngineView
from PyQt5.QtCore import QUrl
import re
class MathJaxEditor(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("MathJax Editor")
self.setGeometry(100, 100, 800, 600)
layout = QVBoxLayout()
self.text_edit = QTextEdit()
self.text_edit.setPlainText(
"输入 LaTeX 公式,例如:\n\n"
"行内公式:$E = mc^2$\n\n"
"块级公式:\n"
"\\[\n"
"x = \\frac{-b \\pm \\sqrt{b^2 - 4ac}}{2a}\n"
"\\]"
)
self.web_view = QWebEngineView()
layout.addWidget(self.text_edit)
layout.addWidget(self.web_view)
container = QWidget()
container.setLayout(layout)
self.setCentralWidget(container)
self.text_edit.textChanged.connect(self.update_preview)
self.update_preview()
def update_preview(self):
latex_content = self.text_edit.toPlainText()
# 更精确的替换逻辑,只替换成对的\(和\)
latex_content = re.sub(r'\\\((.*?)\\\)', r'$\1