react-native-latex-text
→ 前往 Github 仓库
react-native-latex-text
English | 中文
一个轻量、高性能的 React Native 组件,支持文字与 Latex 公式混排,自定义公式分隔符,使用 \n 换行,自动计算公式行高,基于 MathJax SVG 在 react-native-svg 中渲染,内置缓存,无原生依赖(可直接在 Expo Go 中运行)。
How It Works?
MathJaxRenderer 组件会在根节点创建一个隐藏的 1*1 的 WebView 组件,用于加载 MathJax 库和渲染公式,并通过 postMessage 将 svg-xml 字符串返回给 React Native,并使 react-native-svg 组件实现高性能渲染。
因此,这种渲染方式不依赖任何原生组件,可以直接在 Expo Go 中运行。
MathText 组件通过正则表达式将文本中的公式部分提取出来,分别渲染并计算行高,最后将普通文本与渲染后的公式拼接起来。
使用方法
初始化:
在项目的根节点(比如最外层的 _layout.tsx)中引入 MathJaxRenderer 组件,并用其 ref 初始化全局 MathRenderer:
|
|
渲染公式:
在项目的任意位置,直接使用 MathText 组件渲染带公式的文本:
|
|
特性
- 🚀 高性能:内置公式缓存机制,避免重复渲染
- 🎨 自定义样式:支持公式颜色、大小、行高自定义,使用 \n 随时换行
- ✨ 混合渲染:公式与普通文本无缝混合显示
- 🎯 灵活配置:支持自定义公式分隔符、缓存大小等
安装
前提依赖
确保你的项目已安装以下依赖:
|
|
安装主包
|
|
额外配置(Android/iOS)
- iOS:执行
pod install
|
|
- Android:无需额外配置
快速开始
基础用法
API 文档
1. MathJaxRenderer(核心渲染器)
必须在应用根组件中引入,负责公式的底层渲染(隐藏式组件)。
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
initialCache |
string[] |
[] |
初始化时预渲染的公式列表(提升首次渲染速度) |
initialCacheColor |
string |
black |
预渲染公式的默认颜色 |
maxCacheSize |
number |
100 |
公式缓存最大数量(超出自动清除最早缓存) |
onRenderComplete |
(result: RenderResult, latex: string, color: string) => void |
- | 公式渲染完成回调 |
onRenderError |
(error: string, latex: string, color: string) => void |
- | 公式渲染失败回调 |
onReady |
() => void |
- | 渲染器初始化完成回调 |
暴露的方法(通过 ref 调用)
| 方法 | 参数 | 说明 |
|---|---|---|
render |
(latex: string, onComplete, options?) |
手动渲染单个公式 |
clearCache |
(latex?: string, color?: string) |
清除缓存(不传参清除所有,传 latex 清除该公式所有颜色,传 latex+color 清除指定缓存) |
getCacheSize |
- | 获取当前缓存数量 |
isReady |
- | 判断渲染器是否就绪 |
2. MathText(文本+公式渲染组件)
用于显示混合了普通文本和数学公式的内容。
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
content |
string |
- | 包含公式的文本内容(必填) |
viewStyle |
ViewStyle |
- | 容器样式 |
lineStyle |
ViewStyle |
- | 行样式(单行居中常用) |
textColor |
string |
#000000 |
普通文本颜色 |
fontSize |
number |
16 |
普通文本字体大小 |
baseMathSize |
number |
10 |
公式渲染大小放大倍率 |
lineHeight |
number |
1.5 |
全局行高(文本+公式) |
delimiters |
{ inline: {left, right}[], display: {left, right}[] } |
见下方默认值 | 公式分隔符配置 |
默认分隔符
|
|
3. MathRenderer(全局渲染工具类)
提供全局公式渲染方法。
| 静态方法 | 参数 | 说明 |
|---|---|---|
Init |
ref: React.RefObject<MathJaxRendererRef> |
初始化全局渲染器 |
Render |
(latex: string, onComplete, options) |
全局渲染公式 |
ClearCache |
- | 清除所有公式缓存 |
高级用法
1. 自定义公式分隔符
|
|
2. 手动控制缓存
|
|
3. 调试模式
开启调试日志(修改源码中 DEBUG_MATH_RENDERER 为 true):
|
|
注意事项
MathJaxRenderer必须在MathText之前渲染,建议放在应用根组件- 首次渲染可能有轻微延迟(一打开应用可能会看到 [公式加载中] ,为 MathJax 脚本加载时间),建议使用
initialCache预渲染常用公式 - 确保
react-native-webview和react-native-svg版本与 React Native 兼容 - 块级公式会独占一行,行内公式与文本同行显示
许可证
MIT
贡献
欢迎提交 Issue 和 PR。