# 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` 与版权署名,以便单文件被引用或复制时署名随之保留。