【发布时间】:2011-01-07 20:14:16
【问题描述】:
在 Cocoa 应用程序中实现数学公式渲染的最佳方法是什么?
MacOS X 中包含一个名为 Grapher 的实用程序,它完全按照我的需要 (/Applications/Utilities/Grapher.app)。
【问题讨论】:
标签: objective-c cocoa macos
在 Cocoa 应用程序中实现数学公式渲染的最佳方法是什么?
MacOS X 中包含一个名为 Grapher 的实用程序,它完全按照我的需要 (/Applications/Utilities/Grapher.app)。
【问题讨论】:
标签: objective-c cocoa macos
如果您只需要排版方程式而不是构建交互式方程式编辑器,您可能想看看使用troff。它有一个相当简单的方程式语法,输出 postscript,并且是 OS X 的一部分。使用它的最简单方法还需要 ghostscript。
作为一个例子(基于手册页):
创建文件文件fib.tr:
.EQ
x sub i = x sub {i-1} + x sub {i-2}
.EN
使用eqn 和groff 转换为附言:
$ eqn fib.tr | groff -P-b16 > fib.ps
用ghostscript计算并提取边界框:
$ gs -dNOPAUSE -sDEVICE=bbox -- fib.ps 2> fib.bbox
在ps文件中添加边界框信息,生成eps文件:
$ cat fib.ps | sed -e '/%%Orientation/rfib.bbox' > fib.eps
使用包含在大多数 TeX 发行版中的 perl 脚本将 eps 文件转换为 pdf(可在 http://tug.org/epstopdf/ 获得)
$ epstopdf fib.eps
现在您有一个 pdf 图像,其中仅包含具有最小填充的渲染方程。
或者,如果您的用户安装了 TeX(或者您想解决将 a minimal TeX distribution 与您的应用程序捆绑在一起的麻烦),那么 LaTeXiT 提供了一项服务来排版方程并将它们作为 PDF 图像返回。您可以使用NSPerformService 调用它。
【讨论】:
troff,不过听起来很有希望。我试试看。
epstopdf 的原因——它生成的 PDF 看起来不错,而如果让 Preview.app 生成 PDF,它会给你一个空白页。
正如我在my answer 到this similar question 中描述的那样,我在my iPhone application 中构建了一个系统来执行此操作(它也适用于Mac,但我还没有完成该版本的应用程序)。
我使用 Core Animation 层来表示方程的层次结构,并为各种操作类型使用 Quartz 绘制的元素。这让我以相对轻量级的方式对排版进行动画处理,即使在第一代 iPhone 硬件上也很流畅。
与评估任意方程一样,将布局拆分为分层层可以使布局计算变得非常简单和灵活。然而,我仍然花了几个月的时间才把一切都做好。
如果您想使用现有的解决方案,您可以查看 Matt Gallagher 的优秀开源项目Magic Number Machine,at least one developer 已将其用作具有方程式排版功能的商业 Mac 计算器的基础。
【讨论】: