SymPy 是否可以渲染 LaTeX 以在 GUI 中使用?
我希望使用 PyQt 生成一个应用程序来显示用户输入的方程。我曾考虑过 matplotlib,但这似乎有点矫枉过正,因为我只会用它来渲染乳胶。
无论如何,我需要使用 SymPy,所以我希望有一种方法可以使用它来进行渲染,最好生成一个 SVG 文件供 PyQt 使用。
我希望这是有道理的 - 非常感谢您的任何帮助/建议。
最好的祝愿, 格德斯
I am hoping to use PyQt to produce an application that will display an equation entered by the user. I had considered matplotlib, but this seems like overkill as I would only be using it to render the latex.
I need to use SymPy anyway, so I was hoping there would be a way to use it to do the rendering also, preferably producing an SVG file for PyQt to use.
I hope this makes sense - many thanks in advance for any help/advice.
Best wishes,
Geddes
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您可以使用 SymPy 输出 MathML,然后使用 SVGMath 将其转换为 SVG。
You could output MathML using SymPy and then use SVGMath to convert it to SVG.
您可以采用 Qt 库中的 Markdown 编辑器示例,并在 KaTeX 中链接到您的 HTML 模板。它将渲染数学,非常快!然后,您可以截取 QWebView 小部件的屏幕截图,将其转换为 SVG 或 PNG。
我仍然没有弄清楚如何让 KaTeX 渲染到 SVG 文件。也许您可以获取渲染的 HTML,它已经格式化了。我不知道。请在此处发表评论或在下面的 GitHub 链接的问题论坛中获取更多帮助。
https://github.com/enjoysmath/Marked-KaTeX-example-cpp
它甚至可以让您编辑 Markdown / KaTeX 内容!他们所做的是使用名为 QWebChannel 的东西。我不知道它是如何工作的或者为什么需要它,但如果你想在网络浏览器和你的 Qt 应用程序之间进行通信,这就是做事的方式。
您需要使用 Qt 维护工具安装 QWebEngineWidgets / Qt Positioning / 任何与 Web 相关的库。
这个例子肯定可以转换为PyQt5,但我还没有尝试过。转换不会太难,因为 JavaScript 文件 qwebchannel.js 保持完全相同。
You can take the markdown editor example in the Qt library and link in KaTeX to your HTML template. It will render math, really fast! You can then take a screencap of your QWebView widget, converting it to SVG or PNG.
I still haven't figured out how to get KaTeX to render to an SVG file. Perhaps you can just grab the rendered HTML and it's already formatted. IDK. Comment here or in the below GitHub link's issues forum for additional help.
https://github.com/enjoysmath/Marked-KaTeX-example-cpp
It even let's you edit the Markdown / KaTeX content! What they did was use something called QWebChannel. IDK how it works or why it's needed, but it's the way to do things if you're wanting to communicate between a web browser and your Qt app.
You need to have QWebEngineWidgets / Qt Positioning / Any web-related libraries installed using your Qt Maintenance tool.
This example is definitely convertible to PyQt5, but I haven't tried it yet. It wouldn't be too hard to convert, because the JavaScript file qwebchannel.js stays exactly the same.
如果您只需要使用 python 进行简单渲染,可以使用 sympy 配置文件(ipython qtconsole --profile=sympy)尝试使用带有 qtconsole 的 ipython 0.11。它确实实现了 matplotlib,但考虑到数学表达式可以直接在 qtconsole 上呈现,我认为它非常干净。需要安装pyzmq模块。
If you just need simple rendering using python, how about trying ipython 0.11 with qtconsole using sympy profile(ipython qtconsole --profile=sympy). It did implement matplotlib, but I consider it quite clean considering mathematical expressions can be rendered directly on the qtconsole. Need to install pyzmq module.