使用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
相关产品推荐
相关产品推荐

