我该如何在WPF标签或面板中显示数学表达式?

4
我正在编写一个显示大量数学内容的软件。由于在windows表单中设置下标或希腊字母已经很困难了,因此我考虑转换到WPF。
目前我正在寻找在我的图形用户界面中呈现数学表达式、公式或符号的最佳方法。它们必须显示在标签中或绘制图形/图片中。不是实时渲染,而是美观的固定符号。
最好的方法是什么?我认为MathML应该得到很好的支持,但我找不到太多相关信息。我很乐意听取一些建议。
这里是我可以获取符号的地方(或者我更喜欢的方式):
- LaTeX代码(首选!代码已经存在,软件和文档中的外观相同将是非常好的) - MathML代码(LaTeX代码在Word 2007或更高版本中-> Word方程式-> 复制为纯MathML到剪贴板) - SVG(在Inkscape中渲染LaTeX并导出到XAML) - xmcd文件(Mathcad XML文档。不知道如何操作,但至少它是XML格式) - html文件(由LaTeX->html或Mathcad->html编写)
我个人不会考虑以下选项,但也许有好的解决方案:
- 图像(png图标、pdf、dvi、eps、svg直接导入) - 符号(如从字符映射中复制粘贴。不喜欢字体,也找不到我需要的所有内容,并且公式语法的交换将无法实现)
我认为使用LaTeX、MathML或html会很好,因为它们也可以用于文档。我还可以考虑将计算结果导出到*.tex文件中,或者完全使用LaTeX(如tikz、pgfplots)内部生成图形。

3
快速搜索得到这个,希望能有所帮助。https://dev59.com/N2ox5IYBdhLWcg3w6oZf - Joe Stanton
需求是否超出标准的XML样式Unicode字符,例如您可以使用“∞”显示无限符号? - Chris W.
1
@JoeStanton 谢谢提供链接。我也找到了那个。但里面的所有内容都“过时”、“不活跃”、“非官方”的,或者对我的目的来说太耗时间。我希望能够获得更新的想法,因为XAML在最近变得越来越流行。我从这个链接中得到了一些想法,但希望能够找到更实用的东西。 - LaRiFaRi
@ChrisW。是的,我需要类似于\beta ^ prime _ \ infty之类的标签。想要使用OT字体。我想知道为什么SVG和MathML(作为XML)似乎很难包含在XAML中(它是XML)。这些标签和公式应该可缩放以适应文本、图形和文档。 - LaRiFaRi
XML只是一种结构格式,XML内容的语义完全取决于场景;没有理由相信你可以像期望在XHTML文档中嵌入XSLT并且“正常工作”一样地混合和匹配SVG和XAML。如果您有带有所需符号和图形的字体,则应该能够使用RichTextBox在WPF中显示。 - Peter Duniho
4个回答

2
考虑使用开源的WPF-Math库(免责声明:我是它目前的维护者)。
它可以帮助您在WPF窗口中显示LaTeX表达式。它还使用矢量图形而不是位图,因此公式在现代显示器上缩放效果很好。

这个支持 MathML 吗? - VivekDev
1
@VivekDev 不,它不行。如果您能提供自己的MathML解析器,则可以将其转换为WPFMath数据结构并重用常见的渲染基础设施。如果您想要帮助或提出功能建议,请随时在GitHub上与我们联系。 - ForNeVeR
好的,谢谢。我会先看一下WPFMath,然后再决定。 - VivekDev
请注意,版本0.6及以下支持非常有用的.NET Framework 4.0。 - Mihai

0
据我所见,最好的渲染效果(在纸上)是通过从矢量文件进行后期转换实现的。我更喜欢使用GDI+(System.Drawing)或WPF(System.Media)来呈现公式。如果我们可以合作解决WPF方案,请告诉我。

0

我建议使用纯XAML方法,使用数据模板。没有必要使用另一个矢量格式或渲染引擎。 您可以为表达式树中的每个表达式使用数据模板。使用视图框,您可以实现拉伸,因此最上面的表达式将比内部表达式大。您的数据模板将从表达式树生成可视树。我的意思是,在内容呈现器内部有内容呈现器。

巨大的优势是表达式可视化可以响应和交互,就像MS Word或Excel中的数学表达式一样。

如果您不熟悉WPF数据模板,我可以帮助您实现,因为这并不是微不足道的。


然而,实现这个任务肯定是非常耗时的。 - Liero

0

我使用了https://github.com/std8590/xmcd2cs将大部分Mathcad xmcd文件转换成C#。

然后我在代码中使用公式,并使输入变量在用户界面可用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接