基于PyQt5和MathJax的LaTeX公式编辑器

基于PyQt5和MathJax的LaTeX公式编辑器

技术教程gslnedu2025-04-10 21:57:146A+A-
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
, latex_content) # 确保公式被正确的定界符包裹 if not any(delim in latex_content for delim in ['
, '$', '\\[', '\\(']): latex_content = f"${latex_content}$" # 在HTML输出时处理换行 latex_content = latex_content.replace('。', '。
') html = f""" <script> MathJax = {{ tex: {{ inlineMath: [['
, '
], ['\\(', '\\)']], displayMath: [['$', '$'], ['\\\\[', '\\\\]']], processEscapes: true }}, startup: {{ ready: () => {{ MathJax.startup.defaultReady(); MathJax.typesetPromise(); }} }} }}; </script> <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/3.2.2/es5/tex-mml-chtml.js"></script>
{latex_content}
""" self.web_view.setHtml('', QUrl('about:blank')) self.web_view.setHtml(html, QUrl.fromLocalFile('')) if __name__ == "__main__": app = QApplication(sys.argv) window = MathJaxEditor() window.show() sys.exit(app.exec_())


这是一个基于PyQt5和MathJax的LaTeX公式编辑器,具有以下特点和功能:

1. 基本功能 :

- 提供文本编辑区域用于输入LaTeX公式

- 实时预览渲染后的数学公式

- 支持行内公式(使用$...$)和块级公式(使用[...])

2. 自动处理功能 :

- 自动将(...)格式转换为$...$格式

- 自动为未加定界符的公式添加$...$

- 在句号后自动添加HTML换行标签

3. 技术实现 :

- 使用PyQt5创建GUI界面

- 通过QWebEngineView嵌入浏览器引擎

- 调用MathJax 3.2.2进行公式渲染

- 使用正则表达式处理特殊格式

4. 使用说明 :

- 直接输入LaTeX公式即可实时预览

- 行内公式使用$...$或(...)

- 块级公式使用[...]或$...$

- 普通文本中的句号会自动换行显示

5. 注意事项 :

- 需要安装PyQt5和PyQtWebEngine

- 需要网络连接加载MathJax库

- 中文文本需使用UTF-8编码

这个编辑器特别适合需要频繁编写数学公式的用户,可以实时看到公式渲染效果,提高工作效率。

4月3日版本更正确

点击这里复制本文地址 以上内容由朽木教程网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
html换行
qrcode

朽木教程网 © All Rights Reserved.  蜀ICP备2024111239号-8