gpt4 book ai didi

python - 从 sympy/svgmath 生成 SVG 时出错

转载 作者:行者123 更新时间:2023-11-30 23:54:14 24 4
gpt4 key购买 nike

我正在尝试使用 sympy 和 svgmath 将代数渲染为 SVG。我的根目录中有文件“svgmath.xml”。不幸的是我得到:“ImportError:没有名为 libxml2 的模块”。我不确定解决这个问题的最佳方法。我非常感谢任何帮助/建议。我的代码是:

from xml import sax
from xml.sax.saxutils import XMLGenerator

from svgmath.tools.saxtools import XMLGenerator, ContentFilter
from svgmath.mathhandler import MathHandler, MathNS
from svgmath.tools.saxtools import XMLGenerator

from sympy.printing.mathml import mathml
from sympy.abc import x

from sympy.utilities.mathml import c2p

# Open all files
output = open("test.svg", "w")
config = open("svgmath.xml", "r")

# Create the converter as a content handler.
saxoutput = XMLGenerator(output, 'utf-8')
handler = MathHandler(saxoutput, config)

# Parse input file with a namespace-aware SAX parser
parser = sax.make_parser()
parser.setFeature(sax.handler.feature_namespaces, 1)
parser.setContentHandler(handler)
parser.parse(c2p(mathml(3*x), simple=False))

堆栈跟踪现在是:

Traceback (most recent call last):
File "D:\Geddes\my python\SVGmath\test1.py", line 29, in <module>
parser.parse(c2p(mathml(3*x), simple=True))
File "C:\Python27\lib\xml\sax\expatreader.py", line 102, in parse
source = saxutils.prepare_input_source(source)
File "C:\Python27\lib\xml\sax\saxutils.py", line 298, in prepare_input_source
f = urllib.urlopen(source.getSystemId())
File "C:\Python27\lib\urllib.py", line 84, in urlopen
return opener.open(url)
File "C:\Python27\lib\urllib.py", line 202, in open
return self.open_unknown(fullurl, data)
File "C:\Python27\lib\urllib.py", line 214, in open_unknown
raise IOError, ('url error', 'unknown url type', type)
IOError: [Errno url error] unknown url type: '?xml%20version=%221.0%22?%3e%0a%3cmath%20xmlns=%22http'
<小时/>

我修改后的代码:

from xml import sax
from xml.sax.saxutils import XMLGenerator

from svgmath.tools.saxtools import XMLGenerator, ContentFilter
from svgmath.mathhandler import MathHandler, MathNS
from svgmath.tools.saxtools import XMLGenerator

from sympy.printing.mathml import mathml
from sympy.abc import x

from sympy.utilities.mathml import c2p

import libxml2

import StringIO

# Open all files
output = open("test.svg", "w")
config = open("svgmath.xml", "r")

# Create the converter as a content handler.
saxoutput = XMLGenerator(output, 'utf-8')
handler = MathHandler(saxoutput, config)

# Parse input file with a namespace-aware SAX parser
parser = sax.make_parser()
parser.setFeature(sax.handler.feature_namespaces, 1)
parser.setContentHandler(handler)
parser.parse(StringIO.StringIO(mathml(3*x)))

这无法生成有效的 SVG 文件并给出:

[WARNING] line 1, column 0: Root element in MathML document must be 'math'
[WARNING] line 1, column 7: MathML element 'times' is unsupported
[WARNING] line 1, column 15: MathML element 'cn' is unsupported
[WARNING] line 1, column 25: MathML element 'ci' is unsupported
[WARNING] line 1, column 0: MathML element 'apply' is unsupported

最佳答案

安装libxml2 库。例如,在 ubuntu 上,这是 python-libxml2 包。我也尝试过 sympy -> mathml -> svg 路线一次,我还必须安装该包(iirc 它需要 c2p(),它应用 XSLT 将内容转换为表示 MathML)。

关于python - 从 sympy/svgmath 生成 SVG 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5251419/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com