iosMath

Build Status Version License Platform

iosMath 是一个用于在 iOS 和 MacOS 应用程序中显示精美渲染的数学公式的库。它使用 LaTeX 排版公式,并在类似于 UILabel 的类中显示。它使用与 LaTeX 相同的排版规则,因此公式的渲染效果与 LaTeX 完全相同。

它类似于网页上的 MathJaxKaTeX,但适用于原生 iOS 或 MacOS 应用程序,无需使用 UIWebView 和 Javascript。更重要的是,它比使用 UIWebView 快得多。

示例

以下是一些可以使用此库渲染的公式的屏幕截图

Quadratic Formula

Calculus

AM-GM

Ramanujan Identity

EXAMPLES.md 文件包含更多示例。

要求

iosMath 适用于 iOS 6+ 或 MacOS 10.8+,并且需要 ARC 才能构建。它依赖于以下 Apple 框架:

此外,对于 iOS,它需要:

此外,对于 MacOS,它需要:

安装

Cocoapods

iosMath 可以通过 CocoaPods 获得。要安装它:

  1. 在您的 Podfile 中添加一个 iosMath 的条目:pod 'iosMath'
  2. 运行 pod install 安装 pod。

静态库

您也可以将 iosMath 作为静态库添加到您的项目或工作区中。

  1. 下载 最新代码版本 或将该存储库添加为 git 子模块到您的 git 跟踪的项目中。
  2. 在 Xcode 中打开您的项目,然后将 iosMath.xcodeproj 拖放到您的项目或工作区(使用“Product Navigator view”)。
  3. 选择您的目标并转到 Build phases 选项卡。在 Link Binary With Libraries 部分中,选择添加按钮。在工作表中找到并添加 libIosMath.a。您可能还需要将 iosMath 添加到 Target Dependencies 列表中。
  4. MathFontBundle 添加到 Copy Bundle Resources 列表中。
  5. 在使用它的任何地方包含 IosMath,使用 #import <IosMath/IosMath.h>

用法

该库提供了一个类 MTMathUILabel,它是一个支持渲染数学公式的 UIView。要显示一个公式,只需创建一个 MTMathUILabel,如下所示:

#import "MTMathUILabel.h"

MTMathUILabel* label = [[MTMathUILabel alloc] init];
label.latex = @"x = \\frac{-b \\pm \\sqrt{b^2-4ac}}{2a}";

MTMathUILabel 添加为 UIView 的子视图,将渲染上面显示的二次方程示例。

包含的功能

以下是该库当前支持的公式类型列表:

示例

此项目中包含一个示例应用程序,展示了如何使用该应用程序以及可以渲染的不同方程。要运行示例应用程序,请克隆该存储库,并首先运行 pod install。然后在 iOS 上运行 iosMathExample 应用程序。对于 MacOS,运行 MacOSMath 应用程序。

高级配置

MTMathUILabel 支持一些高级配置选项:

数学模式

您可以更改 MTMathUILabel 的模式,使其在显示模式(相当于 LaTeX 中的 $$\[)和文本模式(相当于 LaTeX 中的 $\()之间切换。 默认样式是显示模式。要切换到文本模式,只需:

label.labelMode = kMTMathUILabelModeText;
文本对齐

方程的默认对齐方式是左对齐。 可以将其更改为居中或右对齐,如下所示:

label.textAlignment = kMTTextAlignmentCenter;
字体大小

默认字体大小为 20pt。您可以按如下方式更改它:

label.fontSize = 30;
字体

默认字体是 *Latin Modern Math*。 可以将其更改为:

label.font = [[MTFontManager fontManager] termesFontWithSize:20];

此项目捆绑了 3 种字体,但您可以使用任何 OTF 数学字体。

颜色

渲染方程的默认颜色为黑色。您可以将其更改为任何其他颜色,如下所示:

label.textColor = [UIColor redColor];

也可以为方程的不同部分设置不同的颜色。只需访问 displayList 字段,并在您想要更改颜色的底层显示上设置 textColor

自定义命令

您可以定义自己的尚未预定义的命令。这类似于 LaTeX 中的宏。要定义您自己的命令,请使用:

[MTMathAtomFactory addLatexSymbol:@"lcm"
                            value:[MTMathAtomFactory operatorWithName:@"lcm" limits:NO]];

这将创建一个 \lcm 命令,该命令可以在 LaTeX 中使用。

内容边距

MTMathUILabel 具有 contentInsets,可用于更精细地控制方程相对于视图的位置。

如果需要设置,可以这样做:

label.contentInsets = UIEdgeInsetsMake(0, 10, 0, 20);
错误处理

如果给 MTMathUILabel 的 LaTeX 文本无效,或者它包含当前不支持的命令,则将显示一条错误消息而不是标签。

此错误可以通过编程方式检索为 label.error。如果您不想显示任何内容,请设置:

label.displayErrorInline = NO;

未来增强

请注意,这不是 LaTeX 数学模式的完整实现。 缺少一些重要的部分,这些部分将在以后的更新中包含。这包括:

相关项目

对于寻找超出仅仅渲染数学内容的人,有两个相关的项目:

许可

iosMath 在 MIT 许可下可用。 有关更多信息,请参见 LICENSE 文件。

字体

此发行版包含以下字体。 这些字体的许可如下: