Skip to content

快速开始

5 分钟上手 Scientific Expression Engine。

安装

bash
npm install @sciexpr/core @sciexpr/renderer katex
npm install @sciexpr/vue
npm install @sciexpr/ai @sciexpr/markdown markdown-it
npm install @sciexpr/chemistry @sciexpr/math @sciexpr/physics @sciexpr/presets

渲染第一个公式

typescript
import { ParserRegistry } from '@sciexpr/parser'
import { KatexRenderer } from '@sciexpr/renderer'

const ast = new ParserRegistry().parse('\\frac{1}{2}')
const html = new KatexRenderer().render(ast).value

解析化学式

typescript
const ast = new ParserRegistry().parse('H2SO4', { hint: 'auto' })
// → type: 'molecule'

Vue 组件

vue
<script setup>
import { Formula, Toolbar } from '@sciexpr/vue'
</script>
<template>
  <Formula source="\frac{1}{2}" />
  <Toolbar @insert="(latex) => console.log(latex)" />
</template>

Markdown 集成

typescript
import MarkdownIt from 'markdown-it'
import { formulaPlugin } from '@sciexpr/markdown'

const md = new MarkdownIt().use(formulaPlugin)
md.render('E = $mc^2$')

AI 集成

typescript
import { AIPipeline } from '@sciexpr/ai'

class MyProvider implements IAICompletionProvider {
  async complete(ctx) { /* 调用你的 AI */ }
}

const pipeline = new AIPipeline({
  completionProvider: new MyProvider(),
})

化学工具

typescript
import { ELEMENT_MAP, FormulaValidator, ReactionBalancer } from '@sciexpr/chemistry'

// 查询铁元素
ELEMENT_MAP.get('fe')  // { symbol:'Fe', nameCN:'铁', atomicNumber:26, ... }

// 验证化学式
new FormulaValidator().validateText('H2SO4')  // { valid: true }

// 检查反应平衡
new ReactionBalancer().checkConservation(
  ['2NaOH', 'H2SO4'], ['Na2SO4', '2H2O']
)  // { balanced: true }

数学工具

typescript
import { searchSymbols, MatrixUtils } from '@sciexpr/math'

// 搜索符号
searchSymbols('alpha')  // [{ latex:'\\alpha', unicode:'α', ... }]

// 矩阵乘法
new MatrixUtils().multiply([[1,2],[3,4]], [[5,6],[7,8]])
// → [[19,22],[43,50]]

// 生成 LaTeX 矩阵
new MatrixUtils().toLaTeX([['a','b'],['c','d']])
// → '\begin{pmatrix}\na & b \\\\\nc & d\n\\end{pmatrix}'

物理工具

typescript
import {
  FUNDAMENTAL_CONSTANTS, getConstant, searchConstants,
  SI_BASE_UNITS, convert,
  VectorOperations, VectorCalculus,
  BraKetUtils,
} from '@sciexpr/physics'

// 查询物理常量 —— CODATA 2018
getConstant('c')
// → { symbol:'c', name:'真空中光速', value:299792458, unit:'m·s⁻¹', ... }

// 按分类搜索常量
searchConstants('Planck')
// → [{ symbol:'h', name:'普朗克常数', ... }, { symbol:'hbar', name:'约化普朗克常数', ... }]

// 单位换算
convert(1, 'eV', 'J')      // → 1.602176634e-19
convert(0, '℃', 'K')       // → 273.15

// 向量运算
const vec = new VectorOperations()
vec.dot([1,2,3], [4,5,6])   // → 32
vec.cross([1,0,0], [0,1,0]) // → [0, 0, 1]
vec.norm([3,4,0])           // → 5

// 矢量微积分 LaTeX 生成
const vc = new VectorCalculus()
vc.gradient('f')                 // → '\\nabla f'
vc.divergence('\\mathbf{F}')     // → '\\nabla \\cdot \\mathbf{F}'
vc.curl('\\mathbf{F}')           // → '\\nabla \\times \\mathbf{F}'

// Bra-Ket 量子力学记号
const bk = new BraKetUtils()
bk.ket('\\psi')                  // → '\\ket{\\psi}'
bk.bra('\\phi')                  // → '\\bra{\\phi}'
bk.braket('\\psi', '\\phi')      // → '\\braket{\\psi|\\phi}'
bk.commutator('x', 'p')          // → '[\\hat{x}, \\ \\hat{p}]'

基于 MIT 协议发布