# easyformula
**Repository Path**: cogbound/easyformula
## Basic Information
- **Project Name**: easyformula
- **Description**: easyformula的目标是简化公式输入流程,人们使用自然语言及规范化表达方式即可输入公式。
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-10-10
- **Last Updated**: 2026-10-17
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# easyformula
用**中文**描述数学公式,自动转换为 **LaTeX**。
写公式时不必记忆 `\frac`、`\sum_{i=1}^{n}`、`\int_{a}^{b}` 这些命令,直接用中文说清楚,比如:
| 输入 | 输出 |
| ------------------- | --------- |
| `分数【1,2】` | ½ |
| `求和【i,1,n,x【下标i】】` | ∑ᵢ₌₁ⁿ xᵢ |
| `积分【0,1,幂【x,2】,dx】` | ∫₀¹ x² dx |
| `任意 属于【x,A】` | ∀ x ∈ A |
## 特点
- **确定性解析**:基于规则匹配,离线、快速、确定,不依赖大模型
- **零特殊字符**:所有写法都在标准键盘上,无需切换输入法符号面板
- **可朗读**:写法与中文表述习惯接近
- **可嵌套**:任何运算都能作用于任意表达式,如 `均值【求和【i,1,n,x【下标i】】】`
- **以 LaTeX 为标准**:输出即 LaTeX math 模式,可直接粘贴到论文、文档、网页
## 快速开始
- **网页版**:[www.cogbound.cn/easyformula.html](https://www.cogbound.cn/easyformula.html),浏览器打开即用,无需安装
- **获取源码**:`git clone https://gitee.com/cogbound/easyformula.git`
- **组件调用**:JavaScript / Python 组件的引入方式见文末[组件使用](#组件使用)。
## 核心概念
easyformula 只有三类构造,理解它们就能读懂全部语法:
| 类型 | 含义 | 写法 | 示例 |
| ------ | --------------------- | ----------- | ------------- |
| **标注** | 符号**自身**的组成部分(上标、下标) | `符号【标注】` | `x【下标i】` → xᵢ |
| **运算** | 对表达式做**变换**(幂、均值、积分…) | `运算名【参数】` | `幂【x,2】` → x² |
| **量词** | 纯**标记**前缀,只做翻译 | `任意` / `存在` | `任意 x` → ∀ x |
> 标注与运算语义严格区分:上标、下标属于符号本身;而幂、均值、估计、波浪、向量、撇号等一切"对表达式生效"的变换,都写成函数式 `运算名【参数】`,与求和、积分的调用形式一致。
>
> **运算符标记统一使用中文中括号 `【】`**(中文输入法下按 `[` `]` 键直接输出)。英文中括号 `[]` 不做任何特殊转换,作为普通符号原样输出,用于数组索引等场景(如 `a[0]`、`A[i][j]`)。两种括号语义完全不同,不可混用。
>
> **参数个数必须落在该运算符支持的范围内**(汉字运算符与 `【】` 的关系如同函数名与它后面的括号),超出范围会报错而不是静默忽略:如 `最大值` 支持 1~2 个参数,`最大值【x,1,无穷,f(x)】` 提示"需要 1~2 个参数,实际 4 个";`分数` 固定 2 个,`分数【a】` 提示"需要 2 个参数,实际 1 个"。汉字运算符必须配 `【】`,写成 `分数(1)` 属语法错误(圆括号仅用于普通函数如 `f(x)`)。参数校验只针对 `【】` 算子形式;圆括号是公式中的函数调用形式,参数原样并排输出(`max(x,f,g)` → `max(x,f,g)`),不套用算子契约。分号只是
参数的分隔方式,仅矩阵族与 `分段` 支持。
>
> **数字与字母不拆分**:字母与数字连写是一个整体词,原样交给 LaTeX 渲染(`2ab` → `2ab`、`x1` → `x1`、`面积1` → `面积1`),引擎不替 LaTeX 推断乘法结构。函数名与参数之间需要空格或括号作边界(`sin A`、`sin(A)` 翻译为 `\sin A`;`3sinx` 整体是一个词,原样输出)。
***
## 使用示例
**嵌套运算**——运算可以任意嵌套:
```
分数【求和【i,1,n,x【下标i】】, n】 → (∑ᵢ₌₁ⁿ xᵢ) / n
极限【n,无穷,幂【(1+分数【1,n】),n】】 → lim_{n→∞} (1 + 1/n)ⁿ
积分【0,无穷,幂【e,-x】,dx】 → ∫₀^∞ e⁻ˣ dx
均值【求和【i,1,n,x【下标i】】】 → (∑ᵢ₌₁ⁿ xᵢ) 的上划线
```
**并列与分隔**——一个公式里多个表达式可以直接并排写,或用 `,` / `;` 分隔:
```
x y → x y
x, y → x, y
任意 x 存在 y, 属于【x,A】 → ∀ x ∃ y, x ∈ A
存在 属于【x,A】 p → ∃ x ∈ A p
```
**复杂标注**——用花括号包裹多 token 标注内容:
```
幂【x【下标{i+1}】,2】 → 下标为 i+1 的 x 的平方
```
***
## 语法速查
### 1. 基础运算
| 写法 | 含义 | 示例输入 → 输出 |
| ------------------------ | -------- | --------------------------- |
| `a + b` | 加 | `a + b` → a + b |
| `a - b` | 减 | `a - b` → a − b |
| `a * b` | 乘 | `a * b` → a × b |
| `a / b` | 分式 | `a / b` → a/b |
| `a 点乘 b` / `内积【a,b】` | 点乘 / 内积 | `a 点乘 b` → a · b |
| `a 星乘 b` | 星乘 | `a 星乘 b` → a ∗ b |
| `a 正负 b` / `a 负正 b` | 正负 / 负正 | `a 正负 b` → a ± b |
| `a 与 b` / `a 或 b` | 逻辑与 / 或 | `a 与 b` → a ∧ b |
| `a & b` / `a && b` | 逻辑与(计算机写法) | `a & b` → a ∧ b |
| `a ^ b` | 异或 | `a ^ b` → a ⊕ b |
| `a ~^ b` / `a ^~ b` | 同或 | `a ~^ b` → a ⊙ b |
| `~a` / `!a` | 逻辑非 | `!a` → ¬a |
| `( … )` | 分组 | `(a + b) * c` → (a + b) × c |
| `f(x)` | 函数式 | `f(x)` → f(x) |
| `f @ g` / `f ∘ g` | 复合 | `f @ g` → f ∘ g |
| `a ++ b` / `a ⊕ b` / `a 直和 b` | 直和 | `a ++ b` → a ⊕ b |
| `a ** b` / `a ⊗ b` / `a 直积 b` | 直积 | `a ** b` → a ⊗ b |
| `f(*)` | 占位符 | `f(*)` → f(∗) |
| `a \| b` | 竖线(兼作逻辑或) | `P(A\|B)` → P(A ∣ B) |
| `表达式\|【下标a,上标b】` | 定值竖线 | `F(x)\|【下标0,上标1】` → F(x)⎜₀¹ |
| `a[0]` / `A[i][j]` | 数组索引 | `a[0]` → a[0](原样输出) |
> **两种中括号**:中文 `【】` 是运算符标记(标注、函数参数),英文 `[]` 是普通符号、原样输出(数组索引 `a[0]`、矩阵下标 `A[i][j]`)。`【】` 内首词必须是标注关键词或已定义的运算符名,否则报错(如 `a【0】` 非法,数组索引用 `a[0]`)。
>
> 乘法必须显式写 `*`,因此 `f(x)`(函数式)与 `f * (x)`(相乘)不产生歧义。
>
> 复合、直和、直积与乘法同层级:符号 `∘` `⊕` `⊗` 可直接粘贴输入,键盘输入用 ASCII 别名 `@`、`++`、`**`;直和、直积也可用中缀关键词写法 `a 直和 b`、`a 直积 b`(宽松间距)。
>
> `(*)` 是参数占位符,用于泛函分析等场景表示函数变量:`f(*)` 输出 f(∗)。
>
> 竖线有两种用途:`a | b` 是二元关系(如条件概率 `P(A|B)`、整除);`表达式|【下标a,上标b】` 是定值竖线,表示表达式在下标到上标之间取值(如定积分结果 `积分【0,1,f(x),dx】 = F(x)|【下标0,上标1】`),上下限的写法与上下标标注一致。
>
> **计算机逻辑运算符号**:`&` / `&&` 是逻辑与(∧),`^` 是异或(⊕),`~^` / `^~` 是同或(⊙),`~a` / `!a` 是逻辑非(¬a),均为标准紧间距。注意 **`^` 在此表示异或、不是幂**(幂请用 `幂【x,2】`,如 `x^2` 会输出 x ⊕ 2)。逻辑运算符优先级低于算术运算(`a + b & c` → (a + b) ∧ c)。`a | b` 既作竖线(条件概率 `P(A|B)`、整除),也兼作计算机风格的逻辑或,两者输出同为竖线 `\mid`;需要输出 ∨ 时请用中缀关键词 `a 或 b`。
>
> **输出面只保留 LaTeX 数学模式的能力**:计算机写法(`&`、`^`、`!`、`~`、`|`)只是键盘友好的**输入别名**,一律输出对应的数学符号(∧、⊕、¬、⊕、竖线),不做字符保真——写 `a & b` 得到的是 a ∧ b,不会保留 `&` 字符;同一符号的所有写法(`a & b`、`a 与 b`)渲染结果完全一致。代码片段、程序源码请放在编辑器的代码块里,本工具只负责公式。
>
> **前缀与中缀 `~` 按位置区分**:前缀 `~a` / `!a` 是逻辑非(¬a);中缀 `a ~ b` 仍是相似(∼)。`!=` 是不等于(≠),不与前缀 `!` 冲突。
### 2. 比较与箭头
| 写法 | 含义 | 输出 |
| ------------------------------- | ----------- | ----- |
| `=` | 等于 | = |
| `<` / `>` | 小于 / 大于 | < / > |
| `<` `=` / `>` `=` | 小于等于 / 大于等于 | ≤ / ≥ |
| `<` `>` 或 `!` `=` | 不等于 | ≠ |
| `~` / `相似【a,b】` / `a 相似 b` | 相似 | ∼ |
| `~` `~` / `约等于【a,b】` / `a 约等于 b` | 约等于 | ≈ |
| `~` `=` / `全等【a,b】` / `a 全等 b` | 全等 | ≅ |
| `=` `=` / `恒等【a,b】` / `a 恒等 b` | 恒等 | ≡ |
| `a 正比 b` | 正比 | ∝ |
| `a 垂直 b` / `a 平行 b` | 垂直 / 平行 | ⊥ / ∥ |
| `<` `<` `=` `>` `>` / `⇔` | 充要条件 | ⇔ |
| `=` `>` `>` / `⇒` / `推出` | 充分条件 | ⇒ |
| `<` `<` `=` / `⇐` | 必要条件 | ⇐ |
| `-` `>` `>` / `右箭头` / `趋于` / `→` | 右箭头(趋于) | → |
| `<` `<` `-` / `左箭头` / `←` | 左箭头 | ← |
| `<` `<` `-` `>` `>` / `双向箭头` / `↔` | 双向箭头 | ↔ |
| `映射` / `↦` | 映射 | ↦ |
> 多字符运算符优先匹配:`>` `=` 连写不会被拆成 `>` 与 `=`,`<` `<` `=` `>` `>`(五字符)不会被拆成 `<` `<` `=` 与 `>` `>`。比较运算符均为字符连写,表格中分开展示仅为避免编辑器字体连字造成的误读。
>
> 同一符号的多种写法均列出:箭头类关键词(推出、趋于、右箭头等)与符号写法输出标准紧间距、渲染完全一致;关系类关键词(相似、约等于、恒等、属于、子集等)中缀写法经裸并列输出为普通相邻代码(如 `A 交集 B` → `A \cap B`),间距与数学意义由 LaTeX 渲染决定。
>
> **键盘连写**(箭头尖在指向侧,统一双尖括号风格):`<<-` → ←、`->>` → →、`<<->>` → ↔、`<<=` → ⇐(必要条件)、`=>>` → ⇒(充分条件)、`<<=>>` → ⇔(充要条件)。不能直接用 `<-`(那是「小于负号」,如 `x<-1` → `x < -1`)或 `<=`(那是小于等于 ≤)。
### 3. 上下标标注
上标、下标是符号自身的组成部分,写在方括号里:
| 写法 | 输出 | 说明 |
| ---------------------- | ----------- | ----------------------------------- |
| `x【下标i】` | xᵢ | 单个字符直接写 |
| `x【上标*】` | x\* | 单个字符直接写 |
| `A【上标{-1}】` | A⁻¹ | 逆矩阵,多字符用花括号(若多字符构成可识别标识符,可被当做单字符对待) |
| `x【下标i,上标*】` | xᵢ\* | 同时上下标 |
| `(a+b)【上标2】` | (a + b)² | 分组后加标注 |
| `x【下标{i+1}】` | x\_{i+1} | 多字符用花括号 |
| `(1,2,3)【上标T】` | (1, 2, 3)ᵀ | 向量字面量后加标注,这里的括号既是分组符号又是向量符号 |
| `矩阵【1,2;3,4】【上标{-1}】` | 矩阵的逆 | 函数式字面量后加标注,函数式字面量自身不需要使用括号包围 |
| `矩阵【1,2;3,4】【上标T,下标1】` | 转置矩阵并加下标 | 同时挂上标与下标(一个中括号内用逗号分隔) |
| `(1,2,3)【下标1,上标T】` | (1, 2, 3)₁ᵀ | 同上,顺序不限 |
| `f【上标1,下标i】(x【下标j】)` | fᵢ¹(xⱼ) | 带标注的函数名后接括号即函数调用 |
> **统一规则**:标注内容为**单个字符**时直接写(如 `下标i`);**多于一个字符**时必须用花括号包围(如 `下标{i+1}`、`上标{-1}`)。
>
> 标注可直接跟在变量、分组 `(…)`、函数式字面量(`矩阵【…】`)之后,引擎自动把结果作为一个整体再挂标注,无需再用括号包裹(如 `矩阵【1,2;3,4】【上标{-1}】`,而不是 `(矩阵【1,2;3,4】)【上标{-1}】`)。
>
> 函数调用有两种挂法,含义不同:标注写在**函数名之后、参数括号之前**(`f【上标1,下标i】(x)`)时贴在函数名 f 上;写在**整个调用之后**(`f(x)【上标T】`)时作用于整个调用结果。
>
> 上标与下标**同时**使用时,写在同一个中文中括号内、用逗号分隔(如 `【上标T,下标1】`、`【下标i,上标*】`),顺序不限;不要写成两个 `【上标T】【下标1】`。
### 4. 常用运算(函数式)
| 写法 | 含义 | 输出 |
| ------------------- | ---------- | ---------- |
| `分数【a,b】` | 分式 | a/b |
| `大分数【a,b】` | 显示分式 | 大号 a/b |
| `连分数【a,b】` | 连分式 | 连分数 |
| `开方【x】` | 平方根 | √x |
| `开方【x,n】` | n 次根 | ⁿ√x |
| `绝对值【x】` | 绝对值 | \|x\| |
| `范数【x】` / `范数【x,2】` | 范数(可指定类型) | ‖x‖ / ‖x‖₂ |
| `幂【x,2】` | 幂 | x² |
| `撇号【f】` / `撇号【f,2】` | 撇号导数 | f′ / f″ |
| `阶乘【x】` | 阶乘 | x! |
| `均值【x】` | 均值(上划线) | \bar{x} |
| `估计【x】` | 估计(帽子) | \hat{x} |
| `波浪【x】` | 波浪号 | \tilde{x} |
| `向量【x】` | 向量箭头 | \vec{x} |
| `点【x】` / `双点【x】` | 一阶 / 二阶导点号 | ẋ / ẍ |
| `检查【x】` / `短音【x】` | 检查号 / 短音符 | ˇ / ˘ |
| `锐音【x】` / `钝音【x】` | 锐音 / 钝音 | ´ / \` |
| `向下取整【x】` / `向上取整【x】` | 下取整 / 上取整 | ⌊x⌋ / ⌈x⌉ |
| `尖括号【a,b】` | 尖括号 | ⟨a, b⟩ |
| `组合【n,k】` | 组合数 C(n,k) | C(n,k) |
| `排列【n,k】` | 排列数 A(n,k) | A(n,k) |
| `取模【a,n】` | 取模 | a mod n |
| `同余【a,b,m】` | 同余 | a ≡ b (mod m) |
| `分段【x², x>=0; -x, x<0】` | 分段函数 | 左花括号多行(cases) |
| `文本【中文】` | 公式内文本 | 文字 |
> 均值、估计、波浪、向量这类上部符号的输出列展示的是实际 LaTeX 命令(Markdown 表格无法渲染公式,对应的 Unicode 组合字符在部分字体下会错位)。
>
> **范数**可带两个参数:第一个是被取范数的向量/矩阵(可以是 `向量【x】`、`矩阵【...】` 等函数式,也可以是任意向量/矩阵运算表达式),第二个是范数类型(`1`、`2`、`F`…),显示为右侧双竖线的下标。
> 例如 `范数【向量【x】,2】` → ‖x‖₂(x 带向量箭头),`范数【矩阵【1,2;3,4】,F】` → ‖A‖_F。
**标注与运算叠加**——标注先贴在符号上,运算再作用于整体:
| 输入 | 输出 |
| -------------- | ---------------------- |
| `幂【x【下标i】,2】` | xᵢ²(下位与上位不冲突,合并) |
| `幂【x【上标*】,2】` | (x\*)²(同占上位,运算在外、标注在内) |
| `幂【撇号【f,2】,2】` | (f″)² |
### 5. 大型运算符
| 写法 | 含义 | 输出 |
| --------------------- | --------- | ----------------- |
| `求和【i,1,n,表达式】` | 求和 | ∑ᵢ₌₁ⁿ |
| `求积【i,1,n,表达式】` | 求积 | ∏ᵢ₌₁ⁿ |
| `余积【i,1,n,表达式】` | 余积 | ∐ |
| `积分【a,b,被积式,dx】` | 定积分 | ∫ₐᵇ |
| `积分【被积式,dx】` | 不定积分 | ∫ |
| `二重积分【…】` / `三重积分【…】` | 二、三重积分 | ∬ / ∭ |
| `曲线积分【…】` / `曲面积分【…】` | 曲线 / 曲面积分 | ∮ / ∯ |
| `极限【变量,趋近,表达式】` | 极限 | lim |
| `上极限【…】` / `下极限【…】` | 上 / 下极限 | lim sup / lim inf |
| `最大值【…】` / `最小值【…】` | 最大 / 最小 | max / min |
| `上确界【…】` / `下确界【…】` | 上 / 下确界 | sup / inf |
| `参数最大值【x,表达式】` / `参数最小值【x,表达式】` | 使表达式取最大 / 最小的参数 | arg max / arg min |
| `对数【底数,真数】` | 对数 | logₐ x |
| `ln(x)` / `lg(x)` | 自然 / 常用对数 | ln / lg |
> **英文别名**:`max` `min` `sup` `inf` `argmax` `argmin` 可直接作为函数式名使用,与中文写法等价(如 `argmax【x, f(x)】` 与 `参数最大值【x, f(x)】` 输出相同)。
>
> **两种括号形式**:中文中括号是带下标算子形式(2 参数 = 下标 + 表达式,1 参数无下标);圆括号是函数调用形式,所有参数并排,如 `max(a,b)` → `\max\left( a, b \right)`。圆括号形式不做数学纠错,写法是否有意义由用户判断。
>
> **分段函数**:分号分行(与矩阵一致),每行第一个参数是表达式,其后为条件,条件可省略表示"其他情况":`分段【幂【x,2】, x>=0; -x, x<0】`。
### 6. 函数与微积分
**函数名**(写成 `名(x)` 即为直立字体):`sin` `cos` `tan` `cot` `sec` `csc`、`arcsin` `arccos` `arctan`、`sinh` `cosh` `tanh`、`exp` `ln` `lg` `log`、`det` `dim` `gcd` `ker` `arg`、`max` `min` `sup` `inf`。
> **函数应用可省略括号**:以上函数名后直接跟操作数即为函数应用(单空格作用于单个基本单元):`sin A` → sin A、`a / sin A` → a/sin A、`ln 2` → ln 2,不会被当成变量连乘;带括号则作用于整个括号内容:`sin(x)`、`sin(A+B)`。省略括号时注意运算优先级,`sin(A+B)` 需要括号。
> 未注册的多字母函数名自动直立为算子名:`softmax(x)`、`Var(X)`、`Cov(X,Y)`、`Re(z)`、`Im(z)` 等直接输出 `\operatorname{...}`,无需注册即可使用;单字母保持斜体(如 `f(x)`)。
| 写法 | 含义 | 输出 |
| -------------- | ------ | ----------- |
| `导数【f(x),x】` | 一阶导数 | d/dx f(x) |
| `导数【f(x),x,n】` | n 阶导数 | dⁿ/dxⁿ f(x) |
| `偏导【f,x】` | 一阶偏导 | ∂f/∂x |
| `偏导【f,x,n】` | n 阶偏导 | ∂ⁿf/∂xⁿ |
| `梯度【f】` | 梯度 | ∇f |
| `散度【F】` | 散度 | ∇·F |
| `旋度【F】` | 旋度 | ∇×F |
| `拉普拉斯【f】` | 拉普拉斯算子 | Δf |
### 7. 集合
| 写法 | 含义 | 输出 |
| ------------------------------------------ | -------- | ----------- |
| `集合【元素,条件】` | 集合描述法 | {x \| 条件} |
| `集合【a,b,c】` / `集合括号【x】` | 集合列举 / 单元素加花括号 | {a, b, c} / {x} |
| `交集【A,B】` / `A 交集 B` | 交集 | A ∩ B |
| `并集【A,B】` / `A 并集 B` | 并集 | A ∪ B |
| `差集【A,B】` / `A 差集 B` | 差集 | A ∖ B |
| `对称差【A,B】` | 对称差 | A △ B |
| `笛卡尔积【A,B】` | 笛卡尔积 | A × B |
| `属于【x,A】` / `x 属于 A` | 属于 | x ∈ A |
| `不属于【x,A】` / `x 不属于 A` | 不属于 | x ∉ A |
| `子集【A,B】` / `A 包含于 B` / `A 子集 B` | 子集 | A ⊆ B |
| `真子集【A,B】` | 真子集 | A ⊊ B |
| `超集【A,B】` / `A 包含 B` / `A 超集 B` | 超集 | A ⊇ B |
| `真超集【A,B】` | 真超集 | A ⊋ B |
| `非子集【A,B】` | 非子集 | A ⊈ B |
| `非超集【A,B】` | 非超集 | A ⊉ B |
| `实数集` / `整数集` / `自然数集` / `有理数集` / `复数集` | 常用数集 | ℝ ℤ ℕ ℚ ℂ |
| `空集` | 空集 | ∅ |
> 集合运算与关系的中缀关键词写法(如 `A 交集 B`、`x 属于 A`)与函数式写法输出一致的数学代码(`A \cap B`),间距交由 LaTeX 渲染决定。函数式写法(`交集【A,B】`)可避免中文中缀需要判断优先级、产生阅读歧义的问题。
>
> **中缀关键词与函数式运算名同名**:`A 交集 B` 对应 `交集【A,B】`,中缀不使用单字缩写(`A 交 B` 已废弃,会按普通标识符原样输出)。
### 8. 矩阵与括号
| 写法 | 定界符 |
| ------------------- | -------- |
| `矩阵【1,2;3,4】` | \【 】(默认) |
| `圆矩阵【1,2;3,4】` | ( ) |
| `方矩阵【1,2;3,4】` | \【 】 |
| `花矩阵【1,2;3,4】` | { } |
| `行列式【1,2;3,4】` | \| \| |
| `范数【矩阵【1,2;3,4】,2】` | ‖ ‖₂ |
> 行内元素用 `,` 分隔,行与行之间用 `;` 分隔。矩阵默认使用中括号定界。
### 9. 符号与常量
| 类别 | 写法 | 输出 |
| ------ | --------------------------------- | ----------- |
| 常量 | `圆周率` / `pi` | π |
|
| `自然常数` / `e` | e |
|
| `无穷` / `负无穷` / `正无穷` | ∞ / −∞ / +∞ |
|
| `偏` | ∂ |
|
| `nabla` | ∇ |
|
| `角度` / `度` | ∠ / ° |
| 希腊字母 | `alpha` `beta` `gamma` `delta` `epsilon` `varepsilon` `zeta` `eta` `theta` `vartheta` | α β γ δ ϵ ε ζ η θ ϑ |
|
| `iota` `kappa` `lambda` `mu` `nu` `xi` `rho` `varrho` `sigma` `varsigma` | ι κ λ μ ν ξ ρ ϱ σ ς |
|
| `tau` `upsilon` `phi` `varphi` `chi` `psi` `omega` | τ υ ϕ φ χ ψ ω |
| 大写希腊 | `Gamma` `Delta` `Theta` `Lambda` `Xi` `Pi` `Sigma` `Phi` `Psi` `Omega` | Γ Δ Θ Λ Ξ Π Σ Φ Ψ Ω |
| 省略号 | `省略号` / `中省略号` | … / ⋯ |
|
| `竖省略号` / `对角省略号` | ⋮ / ⋱ |
### 10. 量词
| 写法 | 含义 | 输出 |
| ---- | ---- | -- |
| `任意` | 全称量词 | ∀ |
| `存在` | 存在量词 | ∃ |
> 量词是**纯标记**:仅翻译为对应的 LaTeX 命令,与后面的表达式完全独立,不绑定变量、不参与任何运算逻辑。
### 11. 排版控制
| 写法 | 输出 | 说明 |
| -------- | --------- | ------- |
| `文本【中文】` | `\text{}` | 公式中插入中文 |
***
## 组件使用
引擎为单文件、零依赖。JavaScript 引擎已发布为 npm 包 [`@cogbound/easyformula`](https://www.npmjs.com/package/@cogbound/easyformula),浏览器与 Node 环境均可直接引用,无需克隆仓库;仓库公开后,Gitee 直链可匿名下载源码文件。
> **注意**:Gitee raw 直链以 `Content-Type: text/plain` 返回并携带 `nosniff` 响应头,浏览器会以 ORB(Opaque Response Blocking)拦截,**不能直接作为 `
```
- 建议在 URL 中锁定具体版本号(如 `@0.2.2`),升级时显式修改,避免版本浮动导致输出行为变化
- 国内网络可改用 jsDelivr 国内镜像:`https://fastly.jsdelivr.net/npm/@cogbound/easyformula@0.2.2/js/easyformula.js`
- Gitee raw 直链不能用于 `
```
```javascript
const E = require('./js/easyformula.js');
```
### Python
**① 引用源码目录**(无需安装):
```python
import sys
sys.path.insert(0, 'python') # 指向仓库内的 python/ 目录
import easyformula as ef
ef.to_latex("积分【0, 1, 幂【x,2】, dx】")
# → '\\int_{0}^{1} x^{2} \\, dx'
ef.parse("分数【1,2】") # 返回 AST
```
**② 直接从仓库安装**(仓库公开后可用):
```bash
pip install "git+https://gitee.com/cogbound/easyformula.git"
```
### 测试
测试数据按功能分类存放于 `tests/data/`,双引擎共用同一套数据,保证行为一致:
```bash
python3 tests/run_tests.py # 验证 Python 引擎
node tests/run_tests.js # 验证 JavaScript 引擎
```
***
## 目录
| 文件 / 目录 | 说明 |
| ------------------------------------------------------------- | ------------------------------------------- |
| [`js/easyformula.js`](js/easyformula.js) | JavaScript 编译内核 |
| [`python/easyformula/`](python/easyformula/) | Python 编译内核(lexer / parser / renderer / ast_nodes) |
| [`tests/`](tests/) | 测试数据(`data/*.json` 按功能分类)与双引擎验证脚本 |
***
## 许可证
本项目采用 [MIT 许可证](LICENSE):允许自由使用、修改、分发,**包括商业用途**,但**必须保留开发者署名**(软件的所有副本或重要部分均须附带版权声明与许可声明)。
中文参考译文见 [LICENSE.zh-CN](LICENSE.zh-CN)——译文仅为便于理解,不具法律效力,如与英文原文有歧义,以 [LICENSE](LICENSE) 为准。
各源码文件头部均带有 `SPDX-License-Identifier: MIT` 与版权署名,以便单文件被引用或复制时署名随之保留。