Есть ли полный пример написания математического выражения в симпли к документу Microsoft Word? - PullRequest
0 голосов
/ 02 апреля 2020

это может быть глупый вопрос. Но я в отчаянии. Я учитель математики, и я пытаюсь создавать тесты по математике. Я попытался Python для этого, и я сделал некоторые вещи. Тем не менее, я не профессиональный программист, поэтому я заблудился с MathMl, prettyprint () и прочее.

Есть ли кто-нибудь, кто может дать мне полный пример, который я могу выполнить? Он может содержать только одно маленькое глупое уравнение, которое не имеет значения. Я просто хочу посмотреть, как я могу получить это в документе Word. После этого я могу использовать это в качестве основы. Я работаю над Ма c.

Я надеюсь, что кто-нибудь может мне помочь. Заранее спасибо!

С уважением, Йохан

Ответы [ 2 ]

0 голосов
/ 04 апреля 2020

Это работает для меня:

from sympy import *
from docx import Document
from lxml import etree

# create expression
x, y = symbols('x y')
expr1 = (x+y)**2

# create MathML structure
expr1xml = mathml(expr1, printer = 'presentation')
tree = etree.fromstring('<math xmlns="http://www.w3.org/1998/Math/MathML">'+expr1xml+'</math>')

# convert to MS Office structure
xslt = etree.parse('C:/MML2OMML.XSL')
transform = etree.XSLT(xslt)
new_dom = transform(tree)

# write to docx
document = Document()
p = document.add_paragraph()
p._element.append(new_dom.getroot())
document.save("simpleEq.docx")
0 голосов
/ 02 апреля 2020

Как насчет следующего. capture захватывает все, что напечатано. В этом случае я использую pprint, чтобы напечатать выражение, которое я хочу записать в файл. Есть множество опций, которые вы можете использовать с pprint (включая перенос, который вы можете установить в False). Качество вывода будет зависеть от используемых вами шрифтов. Я вообще этого не делаю, поэтому у меня нет намеков на это.

from pprint import pprint
from sympy.utilities.iterables import capture
from sympy.abc import x
from sympy import Integral
with open('out.doc','w',encoding='utf-8') as f:
    f.write(capture(lambda:pprint(Integral(x**2, (x, 1, 3)))))

Когда я дважды щелкаю (в Windows) на файле out.do c, Появляется слово с интегралом }

...