渲染数学公式

时间:2011-01-07 20:14:16

标签: objective-c cocoa macos

在Cocoa应用程序中实现数学公式渲染的最佳方法是什么?

MacOS X附带了一个名为 Grapher 的实用程序应用程序,它完全按我需要的方式执行(/Applications/Utilities/Grapher.app)。

2 个答案:

答案 0 :(得分:6)

如果您只需要排版公式而不是构建交互式公式编辑器,您可能需要查看使用troff。它有一个相当简单的方程式语法,输出postscript,并且是OS X的一部分。使用它的最简单方法也需要ghostscript。

作为示例(基于手册页):

创建文件fib.tr

.EQ
x sub i = x sub {i-1} + x sub {i-2}
.EN

使用eqngroff转换为postscript:

$ 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调用它。

答案 1 :(得分:4)

正如我在my answerthis similar question中所描述的那样,我在my iPhone application中构建了一个系统(这也适用于Mac,但我还没有完成该版本的应用程序)。

我使用Core Animation图层来表示等式的层次结构,并使用Quartz绘制的元素来表示各种操作类型。这让我能够以相对轻量级的方式为排版设置动画,即使是第一代iPhone硬件也能顺利进行排版。

与任意方程的评估一样,将布局拆分为层次结构层使得布局计算非常简单和灵活。然而,我仍然花了几个月的时间来完成所有事情。

如果您想使用现有的解决方案,您可以查看Matt Gallagher的优秀开源项目Magic Number Machineat least one developer已将其用作商业Mac计算器的基础,并使用方程式排版。