You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python将Word中LaTeX公式复制到PowerPoint的问题

Word公式导入PowerPoint异常问题及相关咨询

问题现象

用Python尝试将Word文档中的公式导入PowerPoint时,幻灯片显示的公式与原公式完全不符:

  • 原公式:原公式截图
  • 错误输出公式:错误输出公式截图

同时将同一公式输出到新Word文档时,结果同样错误。

疑问点

  • 猜测问题源于公式读取方式,是否有其他可行解决方法?
  • 如果Python现有方案不可行,有没有其他可实现该功能的库或语言?
  • 能否通过python-pptx给包含公式的文本框添加动画?或者有其他工具可以实现?

现有代码

导入PowerPoint的代码

import re

import latex2mathml.converter
from pptx import Presentation
from docx import Document
from docx.shared import Inches
import docxlatex as latex
from lxml import etree


def latex_to_word(latex_input):
    mathml = latex2mathml.converter.convert(latex_input, display="block")

    tree = etree.fromstring(mathml)
    xslt = etree.parse(
        'MML2OMML.XSL'
    )
    transform = etree.XSLT(xslt)
    new_dom = transform(tree)

    wrapper = etree.fromstring(
        '''<a14:m xmlns:a14="http://schemas.microsoft.com/office/drawing/2010/main">
            <m:oMath xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math">
            </m:oMath>
        </a14:m>''')
    wrapper.getchildren()[0].append(new_dom.getroot())
    return wrapper


def getLatexEquations(text):
    return re.findall(r'\$([^$].*?)\$', text)

latexDoc = latex.Document('demo.docx')
prs = Presentation()

title_slide_layout = prs.slide_layouts[6] # blank slide
slide = prs.slides.add_slide(title_slide_layout)
left = width = height = Inches(1)

equations = getLatexEquations(latexDoc.get_text())

for equation in equations:
    txBoxNum = equations.index(equation) + 1.5
    txBox = slide.shapes.add_textbox(left, Inches(1 * txBoxNum), width, height)
    tf = txBox.text_frame
    txBoxP = tf.add_paragraph()
    txBoxP._element.append(latex_to_word(equation, for_ppt=True))
    tf

prs.save('test.pptx')

输出到Word的测试代码

import latex2mathml.converter
from docx import Document
import docxlatex as latex
from lxml import etree

def latex_to_word(latex_input):
    mathml = latex2mathml.converter.convert(latex_input)

    tree = etree.fromstring(mathml)
    xslt = etree.parse(
        'MML2OMML.XSL'
    )
    transform = etree.XSLT(xslt)
    new_dom = transform(tree)

    return new_dom.getroot()

document = Document()
latexDoc = latex.Document('demo.docx').get_text()


p = document.add_paragraph()
p._element.append(latex_to_word(latexDoc))

document.save('test2.docx')

内容的提问来源于stack exchange,提问作者Arya Kurdo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 16:37:46