iosMath
iosMath
是一个用于在 iOS 和 MacOS 应用程序中显示美观渲染的数学公式的库。它使用类似 UILabel
的类来排版使用 LaTeX 编写的公式。它使用与 LaTeX 相同的排版规则,因此公式将按照 LaTeX 的渲染方式呈现。
它与网页上的 MathJax 或 KaTeX 类似,但适用于本机 iOS 或 MacOS 应用程序,无需使用 UIWebView
和 JavaScript。更重要的是,它的速度比使用 UIWebView
快得多。
示例
以下是一些可以使用此库渲染的公式的截图。
EXAMPLES.md 文件包含了更多示例。
要求
iosMath
支持iOS 6+或 MacOS 10.8+,并需要 ARC 构建支持。它依赖于以下 Apple 框架:
- Foundation.framework
- CoreGraphics.framework
- QuartzCore.framework
- CoreText.framework
此外,对于 iOS 需要
- UIKit.framework
此外,对于 MacOS 需要
- AppKit.framework
安装
Cocoapods
iosMath 可通过 CocoaPods 获取。要安装它
- 在 Podfile 中添加 iosMath:
pod 'iosMath'
。 - 执行
pod install
命令进行安装。
静态库
您还可以将 iosMath 添加到您的项目或工作区作为一个静态库。
- 下载最新的代码版本 (见此处),或将存储库作为 git 子模块添加到您的 Git 跟踪项目。
- 在 Xcode 中打开您的项目,然后将
iosMath.xcodeproj
拖放到您的项目或工作区(使用“产品导航器视图”)。 - 选择您的目标并转到“构建阶段”选项卡。在“链接二进制与库”部分选择添加按钮。在表格中查找并添加
libIosMath.a
。您可能还需要将iosMath
添加到“目标依赖项”列表。 - 将
MathFontBundle
添加到“复制捆绑资源”列表。 - 使用
#import <IosMath/IosMath.h>
将 IosMath 包括在任何需要其的页面。
使用方法
该库提供了一个 MTMathUILabel
类,这是一个支持渲染数学公式的 UIView
。要显示一个方程,只需创建一个 MTMathUILabel
,例如以下所示:
#import "MTMathUILabel.h"
MTMathUILabel* label = [[MTMathUILabel alloc] init];
label.latex = @"x = \\frac{-b \\pm \\sqrt{b^2-4ac}}{2a}";
将 MTMathUILabel
添加为您的 UIView
的子视图,即可渲染上述示例中的二次公式。
包含的功能
以下是该库目前支持的支持的公式类型列表:
- 简单代数方程
- 分数和连分数
- 指数和下标
- 三角函数公式
- 平方根和n次根
- 微积分符号 - 极限、导数、积分
- 大运算符(例如乘积、求和等)
- 大括号(使用\left和\right)
- 希腊字母
- 组合数学(\binom, \choose等)
- 几何符号(例如角、全等等)
- 比例、比率、百分比
- 数学间距
- 上划线和下划线
- 数学重音符号
- 矩阵
- 方程对齐
- 更改粗体、罗马、花体和其他字体样式(\bf, \text, 等)
- 最常用的数学符号
- 颜色
示例
本项目包含一个示例应用程序,展示如何使用该应用程序以及您可以渲染的不同方程。要运行示例应用程序,首先将代码库克隆到本地,并运行pod install
。然后在iOS上运行iosMathExample
应用程序。在MacOS上运行MacOSMath
应用程序。
高级配置
MTMathUILabel
支持一些高级配置选项
数学模式
您可以在显示模式(相当于LaTeX中的$$或\[)和文本模式(相当于LaTeX中的$或\()之间切换MTMathUILabel
的模式。默认样式是显示模式。要切换到文本模式
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数学模式的完整实现。有一些重要的部分尚未包含,将会在未来更新中包括。这包括
- 支持显式的大括号(bigl, bigr等)
- 增加缺失的plain TeX命令
相关项目
对于只想实现数学渲染之外的人来说,有两个相关项目
- MathEditor:iOS上数学公式的WYSIWYG编辑器。
- MathSolver:解数学公式的库。
许可证
iosMath采用MIT许可证。有关更多信息,请参阅LICENSE文件。
字体
本发行版包含以下字体。这些字体的许可证如下