如何在 WPF 或 WinForms 中呈现公式
Posted
技术标签:
【中文标题】如何在 WPF 或 WinForms 中呈现公式【英文标题】:How to render a formula in WPF or WinForms 【发布时间】:2012-02-12 12:39:08 【问题描述】:2018 年更新 TL;DR;用于 WPF 的 LaTEX https://github.com/ForNeVeR/wpf-math
原始问题 我需要一种在 Windows 窗体或 WPF 中绘制数学公式的方法。一些“FormulaTextBox”控件正是我所需要的。
我问的不是 LaTEX 的完整实现,但至少是 RichTextBox 之外的东西,包括分割线、平方根等。
【问题讨论】:
这个article 看起来有帮助 乍一看很有趣。谢谢!我明天会审查它并在这里发布。 【参考方案1】:这是一个选项列表,从几个在线网页中提取,以及 SO 上的 fewsimilarquestions
WPF-Math,一个用于渲染数学相关 TeX 标记的 WPF 库。 gNumerator 是一个 WinForms 控件,它呈现 MathML。它是原生 C#,但似乎很旧。 Math Expressions,用于显示和编辑数学方程式的商业 WinForms 控件。 注意:不是免费的 C# WPF 控件有一个unofficial port of JMathTex Windows 版本的 LaTex 编辑器Lyx 使用一个名为MikTex 的本机库,您可以查看一下。我在某处看到提到tex4ht
包将数学方程式渲染为图像
MimeTex/MathTex,正如你已经提到的
您也可以使用WebBrowser
控件,并在本地包含one of many javascript libraries 用于渲染LaTex。
您可以将工作抵押到 Microsoft Word 上(Example - 要求用户安装 MS Word!)
【讨论】:
+1 你可能应该得到这个赏金......在我发布答案之前我没有看到你的 WebBrowser 控制点。 WPF-Math 现在处于活动状态。我已经 fork 到 GitHub,联系了原作者,得到了他的祝福。见github.com/ForNeVeR/wpf-math【参考方案2】:也许您可以使用Wolfram Alpha API 来检索图像。
【讨论】:
感谢您的回复。但它不是仅限网络吗?如何嵌入东西作为stadalone winforms 控件?能否请您提供一些简短的提示或代码? 有点赌博,但您可以使用 WebRequest 从您的 winforms 应用程序调用 API,并将响应解析为 XML 以获得正确的节点。然后只需将 PictureBox 的来源设置为 url。 这就是使用“独立”一词的原因。 “使用 WebRequest”对于独立应用程序来说负担太大了。在极少数情况下,它是可以接受的,我同意。但这绝对不是 winforms 或 WPF 的通用答案。 +1 - 即使它是一个独立的应用程序,上线并使用 Wolfram Alpha 的 API 的模式也是一个好主意。 “一种上网和使用 Wolfram 的模式” - 一个很好的笑话,是的))告诉你的客户)))【参考方案3】:如果您想要 RichTextBox 之外的功能来呈现饼图、分区和 sqr 根等,您可以使用 WebBrowserControl(s) 作为文本框。然后要呈现公式,您可以利用此网页中显示的技术,将其保存到您的桌面并打开 html 文件:
http://www.wjagray.co.uk/maths/ASCIIMathTutorial.html
显然,您将需要特殊的语法(或特殊的计算器按钮)来输入公式,我猜测通过查看驱动该网页的 customisations.js 文件,您也可以创建自己的运算符和函数列表。
【讨论】:
【参考方案4】:如果 .NET 特定解决方案都不适合您,我会这样做:
这有点老套,但它会起作用,而且您的用户不会知道其中的区别。下载Mathjax 库。当您的用户输入方程式时,您可以将方程式转换为 LaTex 或 MathML。然后,您将使用 LaTex 或 MathML 并生成一个引用 Mathjax 的 HTML 文件,并在您的小 WebBrowser 窗口中显示该文件(对 WinForms 和 WPF 都有效)。这应该不需要互联网连接。
就像我说的,你的用户不会更聪明。
【讨论】:
以上是关于如何在 WPF 或 WinForms 中呈现公式的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法在 wpf WebBrowser 控件之上呈现 WPF 控件?
实体框架 + SQL Server Compact + WPF/WinForms = 缓慢的 UI?
如何在 Jetbrains Rider 中开发 GUI 设计器,例如在 Visual Studio 中用于 WinForms、WPF 等? [复制]