@sciexpr/math 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs ADDED
@@ -0,0 +1,305 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/index.ts
21
+ var index_exports = {};
22
+ __export(index_exports, {
23
+ ALL_SYMBOLS: () => ALL_SYMBOLS,
24
+ ARROWS: () => ARROWS,
25
+ GREEK_LOWERCASE: () => GREEK_LOWERCASE,
26
+ GREEK_UPPERCASE: () => GREEK_UPPERCASE,
27
+ MISC_SYMBOLS: () => MISC_SYMBOLS,
28
+ MatrixUtils: () => MatrixUtils,
29
+ OPERATORS: () => OPERATORS,
30
+ RELATIONS: () => RELATIONS,
31
+ getSymbolsByCategory: () => getSymbolsByCategory,
32
+ identityMatrix: () => identityMatrix,
33
+ latexMatrixTemplate: () => latexMatrixTemplate,
34
+ searchSymbols: () => searchSymbols,
35
+ zeroMatrix: () => zeroMatrix
36
+ });
37
+ module.exports = __toCommonJS(index_exports);
38
+
39
+ // src/symbols.ts
40
+ var GREEK_LOWERCASE = [
41
+ { latex: "\\alpha", unicode: "\u03B1", name: "alpha", category: "greek-lower", description: "Alpha" },
42
+ { latex: "\\beta", unicode: "\u03B2", name: "beta", category: "greek-lower", description: "Beta" },
43
+ { latex: "\\gamma", unicode: "\u03B3", name: "gamma", category: "greek-lower", description: "Gamma" },
44
+ { latex: "\\delta", unicode: "\u03B4", name: "delta", category: "greek-lower", description: "Delta" },
45
+ { latex: "\\epsilon", unicode: "\u03B5", name: "epsilon", category: "greek-lower", description: "Epsilon" },
46
+ { latex: "\\zeta", unicode: "\u03B6", name: "zeta", category: "greek-lower", description: "Zeta" },
47
+ { latex: "\\eta", unicode: "\u03B7", name: "eta", category: "greek-lower", description: "Eta" },
48
+ { latex: "\\theta", unicode: "\u03B8", name: "theta", category: "greek-lower", description: "Theta" },
49
+ { latex: "\\iota", unicode: "\u03B9", name: "iota", category: "greek-lower", description: "Iota" },
50
+ { latex: "\\kappa", unicode: "\u03BA", name: "kappa", category: "greek-lower", description: "Kappa" },
51
+ { latex: "\\lambda", unicode: "\u03BB", name: "lambda", category: "greek-lower", description: "Lambda" },
52
+ { latex: "\\mu", unicode: "\u03BC", name: "mu", category: "greek-lower", description: "Mu" },
53
+ { latex: "\\nu", unicode: "\u03BD", name: "nu", category: "greek-lower", description: "Nu" },
54
+ { latex: "\\xi", unicode: "\u03BE", name: "xi", category: "greek-lower", description: "Xi" },
55
+ { latex: "\\pi", unicode: "\u03C0", name: "pi", category: "greek-lower", description: "Pi" },
56
+ { latex: "\\rho", unicode: "\u03C1", name: "rho", category: "greek-lower", description: "Rho" },
57
+ { latex: "\\sigma", unicode: "\u03C3", name: "sigma", category: "greek-lower", description: "Sigma" },
58
+ { latex: "\\tau", unicode: "\u03C4", name: "tau", category: "greek-lower", description: "Tau" },
59
+ { latex: "\\phi", unicode: "\u03C6", name: "phi", category: "greek-lower", description: "Phi" },
60
+ { latex: "\\chi", unicode: "\u03C7", name: "chi", category: "greek-lower", description: "Chi" },
61
+ { latex: "\\psi", unicode: "\u03C8", name: "psi", category: "greek-lower", description: "Psi" },
62
+ { latex: "\\omega", unicode: "\u03C9", name: "omega", category: "greek-lower", description: "Omega" }
63
+ ];
64
+ var GREEK_UPPERCASE = [
65
+ { latex: "\\Gamma", unicode: "\u0393", name: "Gamma", category: "greek-upper" },
66
+ { latex: "\\Delta", unicode: "\u0394", name: "Delta", category: "greek-upper" },
67
+ { latex: "\\Theta", unicode: "\u0398", name: "Theta", category: "greek-upper" },
68
+ { latex: "\\Lambda", unicode: "\u039B", name: "Lambda", category: "greek-upper" },
69
+ { latex: "\\Xi", unicode: "\u039E", name: "Xi", category: "greek-upper" },
70
+ { latex: "\\Pi", unicode: "\u03A0", name: "Pi", category: "greek-upper" },
71
+ { latex: "\\Sigma", unicode: "\u03A3", name: "Sigma", category: "greek-upper" },
72
+ { latex: "\\Upsilon", unicode: "\u03A5", name: "Upsilon", category: "greek-upper" },
73
+ { latex: "\\Phi", unicode: "\u03A6", name: "Phi", category: "greek-upper" },
74
+ { latex: "\\Psi", unicode: "\u03A8", name: "Psi", category: "greek-upper" },
75
+ { latex: "\\Omega", unicode: "\u03A9", name: "Omega", category: "greek-upper" }
76
+ ];
77
+ var OPERATORS = [
78
+ { latex: "+", unicode: "+", name: "plus", category: "operator" },
79
+ { latex: "-", unicode: "\u2212", name: "minus", category: "operator" },
80
+ { latex: "\\times", unicode: "\xD7", name: "times", category: "operator" },
81
+ { latex: "\\div", unicode: "\xF7", name: "divide", category: "operator" },
82
+ { latex: "\\cdot", unicode: "\xB7", name: "dot product", category: "operator" },
83
+ { latex: "\\pm", unicode: "\xB1", name: "plus-minus", category: "operator" },
84
+ { latex: "\\mp", unicode: "\u2213", name: "minus-plus", category: "operator" }
85
+ ];
86
+ var RELATIONS = [
87
+ { latex: "<", unicode: "<", name: "less than", category: "relation" },
88
+ { latex: ">", unicode: ">", name: "greater than", category: "relation" },
89
+ { latex: "\\leq", unicode: "\u2264", name: "leq", category: "relation" },
90
+ { latex: "\\geq", unicode: "\u2265", name: "geq", category: "relation" },
91
+ { latex: "\\neq", unicode: "\u2260", name: "neq", category: "relation" },
92
+ { latex: "\\approx", unicode: "\u2248", name: "approx", category: "relation" },
93
+ { latex: "\\equiv", unicode: "\u2261", name: "equiv", category: "relation" },
94
+ { latex: "\\sim", unicode: "\u223C", name: "sim", category: "relation" },
95
+ { latex: "\\propto", unicode: "\u221D", name: "propto", category: "relation" },
96
+ { latex: "\\ll", unicode: "\u226A", name: "much less", category: "relation" },
97
+ { latex: "\\gg", unicode: "\u226B", name: "much greater", category: "relation" },
98
+ { latex: "\\subset", unicode: "\u2282", name: "subset", category: "relation" },
99
+ { latex: "\\supset", unicode: "\u2283", name: "supset", category: "relation" },
100
+ { latex: "\\subseteq", unicode: "\u2286", name: "subseteq", category: "relation" },
101
+ { latex: "\\supseteq", unicode: "\u2287", name: "supseteq", category: "relation" },
102
+ { latex: "\\in", unicode: "\u2208", name: "element of", category: "relation" },
103
+ { latex: "\\notin", unicode: "\u2209", name: "not in", category: "relation" },
104
+ { latex: "\\perp", unicode: "\u22A5", name: "perpendicular", category: "relation" },
105
+ { latex: "\\parallel", unicode: "\u2225", name: "parallel", category: "relation" }
106
+ ];
107
+ var ARROWS = [
108
+ { latex: "\\to", unicode: "\u2192", name: "to", category: "arrow" },
109
+ { latex: "\\rightarrow", unicode: "\u2192", name: "right arrow", category: "arrow" },
110
+ { latex: "\\leftarrow", unicode: "\u2190", name: "left arrow", category: "arrow" },
111
+ { latex: "\\Rightarrow", unicode: "\u21D2", name: "Rightarrow", category: "arrow" },
112
+ { latex: "\\Leftarrow", unicode: "\u21D0", name: "Leftarrow", category: "arrow" },
113
+ { latex: "\\Leftrightarrow", unicode: "\u21D4", name: "Leftrightarrow", category: "arrow" },
114
+ { latex: "\\mapsto", unicode: "\u21A6", name: "mapsto", category: "arrow" },
115
+ { latex: "\\uparrow", unicode: "\u2191", name: "up arrow", category: "arrow" },
116
+ { latex: "\\downarrow", unicode: "\u2193", name: "down arrow", category: "arrow" },
117
+ { latex: "\\longrightarrow", unicode: "\u27F6", name: "long right arrow", category: "arrow" },
118
+ { latex: "\\longleftarrow", unicode: "\u27F5", name: "long left arrow", category: "arrow" }
119
+ ];
120
+ var MISC_SYMBOLS = [
121
+ { latex: "\\infty", unicode: "\u221E", name: "infinity", category: "misc" },
122
+ { latex: "\\partial", unicode: "\u2202", name: "partial", category: "misc" },
123
+ { latex: "\\nabla", unicode: "\u2207", name: "nabla", category: "misc" },
124
+ { latex: "\\forall", unicode: "\u2200", name: "for all", category: "misc" },
125
+ { latex: "\\exists", unicode: "\u2203", name: "exists", category: "misc" },
126
+ { latex: "\\neg", unicode: "\xAC", name: "not", category: "misc" },
127
+ { latex: "\\emptyset", unicode: "\u2205", name: "empty set", category: "misc" },
128
+ { latex: "\\angle", unicode: "\u2220", name: "angle", category: "misc" },
129
+ { latex: "\\triangle", unicode: "\u25B3", name: "triangle", category: "misc" },
130
+ { latex: "\\square", unicode: "\u25A1", name: "square", category: "misc" },
131
+ { latex: "\\circ", unicode: "\u2218", name: "composition", category: "misc" },
132
+ { latex: "\\hbar", unicode: "\u210F", name: "Planck constant", category: "misc" },
133
+ { latex: "\\ell", unicode: "\u2113", name: "ell", category: "misc" },
134
+ { latex: "\\wp", unicode: "\u2118", name: "Weierstrass p", category: "misc" },
135
+ { latex: "\\Re", unicode: "\u211C", name: "real part", category: "misc" },
136
+ { latex: "\\Im", unicode: "\u2111", name: "imaginary part", category: "misc" },
137
+ { latex: "\\aleph", unicode: "\u2135", name: "aleph", category: "misc" }
138
+ ];
139
+ var ALL_SYMBOLS = [
140
+ ...GREEK_LOWERCASE,
141
+ ...GREEK_UPPERCASE,
142
+ ...OPERATORS,
143
+ ...RELATIONS,
144
+ ...ARROWS,
145
+ ...MISC_SYMBOLS
146
+ ];
147
+ function searchSymbols(query) {
148
+ const q = query.toLowerCase();
149
+ return ALL_SYMBOLS.filter(
150
+ (s) => s.name.toLowerCase().includes(q) || s.latex.toLowerCase().includes(q) || s.description?.toLowerCase().includes(q)
151
+ );
152
+ }
153
+ function getSymbolsByCategory(category) {
154
+ return ALL_SYMBOLS.filter((s) => s.category === category);
155
+ }
156
+
157
+ // src/matrix.ts
158
+ var MatrixUtils = class {
159
+ /**
160
+ * 验证矩阵维度是否一致
161
+ */
162
+ validateDimensions(matrix) {
163
+ if (matrix.length === 0) return true;
164
+ const cols = matrix[0].length;
165
+ return matrix.every((row) => row.length === cols);
166
+ }
167
+ /**
168
+ * 获取矩阵维度 [rows, cols]
169
+ */
170
+ getDimensions(matrix) {
171
+ if (matrix.length === 0) return [0, 0];
172
+ return [matrix.length, matrix[0].length];
173
+ }
174
+ /**
175
+ * 判断是否为方阵
176
+ */
177
+ isSquare(matrix) {
178
+ if (matrix.length === 0) return true;
179
+ return matrix.length === matrix[0].length;
180
+ }
181
+ /**
182
+ * 矩阵转置
183
+ */
184
+ transpose(matrix) {
185
+ if (matrix.length === 0) return [];
186
+ const rows = matrix.length;
187
+ const cols = matrix[0].length;
188
+ const result = [];
189
+ for (let c = 0; c < cols; c++) {
190
+ const row = [];
191
+ for (let r = 0; r < rows; r++) {
192
+ row.push(matrix[r][c]);
193
+ }
194
+ result.push(row);
195
+ }
196
+ return result;
197
+ }
198
+ /**
199
+ * 格式化矩阵为 LaTeX
200
+ * @param matrix 矩阵数据(字符串数组)
201
+ * @param matrixType 矩阵类型 (matrix/pmatrix/bmatrix/vmatrix)
202
+ * @param columnAlign 列对齐 (l/c/r)
203
+ */
204
+ toLaTeX(matrix, options) {
205
+ const type = options?.matrixType ?? "pmatrix";
206
+ const align = options?.columnAlign ? `{${options.columnAlign.join("")}}` : "";
207
+ const rows = matrix.map((row) => row.join(" & ")).join(" \\\\\n");
208
+ return `\\begin{${type}}${align}
209
+ ${rows}
210
+ \\end{${type}}`;
211
+ }
212
+ /**
213
+ * 生成行列式 LaTeX
214
+ */
215
+ toDeterminantLaTeX(matrix) {
216
+ return this.toLaTeX(matrix, { matrixType: "vmatrix" });
217
+ }
218
+ /**
219
+ * 数字矩阵加法 (2D 数值)
220
+ */
221
+ add(a, b) {
222
+ if (!this.validateDimensions(a) || !this.validateDimensions(b)) return null;
223
+ const [ra, ca] = this.getDimensions(a);
224
+ const [rb, cb] = this.getDimensions(b);
225
+ if (ra !== rb || ca !== cb) return null;
226
+ return a.map((row, r) => row.map((val, c) => val + b[r][c]));
227
+ }
228
+ /**
229
+ * 数字矩阵乘法
230
+ */
231
+ multiply(a, b) {
232
+ const [ra, ca] = this.getDimensions(a);
233
+ const [rb, cb] = this.getDimensions(b);
234
+ if (ca !== rb) return null;
235
+ const result = [];
236
+ for (let r = 0; r < ra; r++) {
237
+ const row = [];
238
+ for (let c = 0; c < cb; c++) {
239
+ let sum = 0;
240
+ for (let k = 0; k < ca; k++) {
241
+ sum += a[r][k] * b[k][c];
242
+ }
243
+ row.push(sum);
244
+ }
245
+ result.push(row);
246
+ }
247
+ return result;
248
+ }
249
+ /**
250
+ * 标量乘法
251
+ */
252
+ scalarMultiply(a, scalar) {
253
+ return a.map((row) => row.map((val) => val * scalar));
254
+ }
255
+ /**
256
+ * 计算 2×2 行列式
257
+ */
258
+ determinant2x2(matrix) {
259
+ if (matrix.length !== 2 || matrix[0].length !== 2) return null;
260
+ return matrix[0][0] * matrix[1][1] - matrix[0][1] * matrix[1][0];
261
+ }
262
+ /**
263
+ * 计算 3×3 行列式 (Sarrus 规则)
264
+ */
265
+ determinant3x3(matrix) {
266
+ if (matrix.length !== 3 || matrix[0].length !== 3) return null;
267
+ const r0 = matrix[0], r1 = matrix[1], r2 = matrix[2];
268
+ const [a, b, c] = r0;
269
+ const [d, e, f] = r1;
270
+ const [g, h, i] = r2;
271
+ return a * (e * i - f * h) - b * (d * i - f * g) + c * (d * h - e * g);
272
+ }
273
+ };
274
+ function zeroMatrix(rows, cols) {
275
+ return Array.from({ length: rows }, () => Array(cols).fill(0));
276
+ }
277
+ function identityMatrix(n) {
278
+ return Array.from(
279
+ { length: n },
280
+ (_, r) => Array.from({ length: n }, (_2, c) => r === c ? 1 : 0)
281
+ );
282
+ }
283
+ function latexMatrixTemplate(rows, cols) {
284
+ const row = Array(cols).fill("").join(" & ");
285
+ const body = Array(rows).fill(row).join(" \\\\\n");
286
+ return `\\begin{pmatrix}
287
+ ${body}
288
+ \\end{pmatrix}`;
289
+ }
290
+ // Annotate the CommonJS export names for ESM import in node:
291
+ 0 && (module.exports = {
292
+ ALL_SYMBOLS,
293
+ ARROWS,
294
+ GREEK_LOWERCASE,
295
+ GREEK_UPPERCASE,
296
+ MISC_SYMBOLS,
297
+ MatrixUtils,
298
+ OPERATORS,
299
+ RELATIONS,
300
+ getSymbolsByCategory,
301
+ identityMatrix,
302
+ latexMatrixTemplate,
303
+ searchSymbols,
304
+ zeroMatrix
305
+ });
@@ -0,0 +1,92 @@
1
+ /** 符号条目 */
2
+ interface SymbolEntry {
3
+ /** LaTeX 命令 */
4
+ latex: string;
5
+ /** Unicode 字符 */
6
+ unicode: string;
7
+ /** 名称 */
8
+ name: string;
9
+ /** 分类 */
10
+ category: string;
11
+ /** 描述 */
12
+ description?: string;
13
+ }
14
+ declare const GREEK_LOWERCASE: SymbolEntry[];
15
+ declare const GREEK_UPPERCASE: SymbolEntry[];
16
+ declare const OPERATORS: SymbolEntry[];
17
+ declare const RELATIONS: SymbolEntry[];
18
+ declare const ARROWS: SymbolEntry[];
19
+ declare const MISC_SYMBOLS: SymbolEntry[];
20
+ /** 所有符号的合集 */
21
+ declare const ALL_SYMBOLS: SymbolEntry[];
22
+ /** 按名称搜索符号 */
23
+ declare function searchSymbols(query: string): SymbolEntry[];
24
+ /** 按分类获取符号 */
25
+ declare function getSymbolsByCategory(category: string): SymbolEntry[];
26
+
27
+ /**
28
+ * 矩阵工具
29
+ */
30
+ declare class MatrixUtils {
31
+ /**
32
+ * 验证矩阵维度是否一致
33
+ */
34
+ validateDimensions<T>(matrix: T[][]): boolean;
35
+ /**
36
+ * 获取矩阵维度 [rows, cols]
37
+ */
38
+ getDimensions<T>(matrix: T[][]): [number, number];
39
+ /**
40
+ * 判断是否为方阵
41
+ */
42
+ isSquare<T>(matrix: T[][]): boolean;
43
+ /**
44
+ * 矩阵转置
45
+ */
46
+ transpose<T>(matrix: T[][]): T[][];
47
+ /**
48
+ * 格式化矩阵为 LaTeX
49
+ * @param matrix 矩阵数据(字符串数组)
50
+ * @param matrixType 矩阵类型 (matrix/pmatrix/bmatrix/vmatrix)
51
+ * @param columnAlign 列对齐 (l/c/r)
52
+ */
53
+ toLaTeX(matrix: string[][], options?: {
54
+ matrixType?: 'matrix' | 'pmatrix' | 'bmatrix' | 'vmatrix' | 'Bmatrix' | 'Vmatrix';
55
+ columnAlign?: ('l' | 'c' | 'r')[];
56
+ }): string;
57
+ /**
58
+ * 生成行列式 LaTeX
59
+ */
60
+ toDeterminantLaTeX(matrix: string[][]): string;
61
+ /**
62
+ * 数字矩阵加法 (2D 数值)
63
+ */
64
+ add(a: number[][], b: number[][]): number[][] | null;
65
+ /**
66
+ * 数字矩阵乘法
67
+ */
68
+ multiply(a: number[][], b: number[][]): number[][] | null;
69
+ /**
70
+ * 标量乘法
71
+ */
72
+ scalarMultiply(a: number[][], scalar: number): number[][];
73
+ /**
74
+ * 计算 2×2 行列式
75
+ */
76
+ determinant2x2(matrix: number[][]): number | null;
77
+ /**
78
+ * 计算 3×3 行列式 (Sarrus 规则)
79
+ */
80
+ determinant3x3(matrix: number[][]): number | null;
81
+ }
82
+ /**
83
+ * 矩阵生成工具
84
+ */
85
+ /** 创建零矩阵 */
86
+ declare function zeroMatrix(rows: number, cols: number): number[][];
87
+ /** 创建 n×n 单位矩阵 */
88
+ declare function identityMatrix(n: number): number[][];
89
+ /** 创建 LaTeX 矩阵模板字符串 */
90
+ declare function latexMatrixTemplate(rows: number, cols: number): string;
91
+
92
+ export { ALL_SYMBOLS, ARROWS, GREEK_LOWERCASE, GREEK_UPPERCASE, MISC_SYMBOLS, MatrixUtils, OPERATORS, RELATIONS, type SymbolEntry, getSymbolsByCategory, identityMatrix, latexMatrixTemplate, searchSymbols, zeroMatrix };
@@ -0,0 +1,92 @@
1
+ /** 符号条目 */
2
+ interface SymbolEntry {
3
+ /** LaTeX 命令 */
4
+ latex: string;
5
+ /** Unicode 字符 */
6
+ unicode: string;
7
+ /** 名称 */
8
+ name: string;
9
+ /** 分类 */
10
+ category: string;
11
+ /** 描述 */
12
+ description?: string;
13
+ }
14
+ declare const GREEK_LOWERCASE: SymbolEntry[];
15
+ declare const GREEK_UPPERCASE: SymbolEntry[];
16
+ declare const OPERATORS: SymbolEntry[];
17
+ declare const RELATIONS: SymbolEntry[];
18
+ declare const ARROWS: SymbolEntry[];
19
+ declare const MISC_SYMBOLS: SymbolEntry[];
20
+ /** 所有符号的合集 */
21
+ declare const ALL_SYMBOLS: SymbolEntry[];
22
+ /** 按名称搜索符号 */
23
+ declare function searchSymbols(query: string): SymbolEntry[];
24
+ /** 按分类获取符号 */
25
+ declare function getSymbolsByCategory(category: string): SymbolEntry[];
26
+
27
+ /**
28
+ * 矩阵工具
29
+ */
30
+ declare class MatrixUtils {
31
+ /**
32
+ * 验证矩阵维度是否一致
33
+ */
34
+ validateDimensions<T>(matrix: T[][]): boolean;
35
+ /**
36
+ * 获取矩阵维度 [rows, cols]
37
+ */
38
+ getDimensions<T>(matrix: T[][]): [number, number];
39
+ /**
40
+ * 判断是否为方阵
41
+ */
42
+ isSquare<T>(matrix: T[][]): boolean;
43
+ /**
44
+ * 矩阵转置
45
+ */
46
+ transpose<T>(matrix: T[][]): T[][];
47
+ /**
48
+ * 格式化矩阵为 LaTeX
49
+ * @param matrix 矩阵数据(字符串数组)
50
+ * @param matrixType 矩阵类型 (matrix/pmatrix/bmatrix/vmatrix)
51
+ * @param columnAlign 列对齐 (l/c/r)
52
+ */
53
+ toLaTeX(matrix: string[][], options?: {
54
+ matrixType?: 'matrix' | 'pmatrix' | 'bmatrix' | 'vmatrix' | 'Bmatrix' | 'Vmatrix';
55
+ columnAlign?: ('l' | 'c' | 'r')[];
56
+ }): string;
57
+ /**
58
+ * 生成行列式 LaTeX
59
+ */
60
+ toDeterminantLaTeX(matrix: string[][]): string;
61
+ /**
62
+ * 数字矩阵加法 (2D 数值)
63
+ */
64
+ add(a: number[][], b: number[][]): number[][] | null;
65
+ /**
66
+ * 数字矩阵乘法
67
+ */
68
+ multiply(a: number[][], b: number[][]): number[][] | null;
69
+ /**
70
+ * 标量乘法
71
+ */
72
+ scalarMultiply(a: number[][], scalar: number): number[][];
73
+ /**
74
+ * 计算 2×2 行列式
75
+ */
76
+ determinant2x2(matrix: number[][]): number | null;
77
+ /**
78
+ * 计算 3×3 行列式 (Sarrus 规则)
79
+ */
80
+ determinant3x3(matrix: number[][]): number | null;
81
+ }
82
+ /**
83
+ * 矩阵生成工具
84
+ */
85
+ /** 创建零矩阵 */
86
+ declare function zeroMatrix(rows: number, cols: number): number[][];
87
+ /** 创建 n×n 单位矩阵 */
88
+ declare function identityMatrix(n: number): number[][];
89
+ /** 创建 LaTeX 矩阵模板字符串 */
90
+ declare function latexMatrixTemplate(rows: number, cols: number): string;
91
+
92
+ export { ALL_SYMBOLS, ARROWS, GREEK_LOWERCASE, GREEK_UPPERCASE, MISC_SYMBOLS, MatrixUtils, OPERATORS, RELATIONS, type SymbolEntry, getSymbolsByCategory, identityMatrix, latexMatrixTemplate, searchSymbols, zeroMatrix };
package/dist/index.js ADDED
@@ -0,0 +1,266 @@
1
+ // src/symbols.ts
2
+ var GREEK_LOWERCASE = [
3
+ { latex: "\\alpha", unicode: "\u03B1", name: "alpha", category: "greek-lower", description: "Alpha" },
4
+ { latex: "\\beta", unicode: "\u03B2", name: "beta", category: "greek-lower", description: "Beta" },
5
+ { latex: "\\gamma", unicode: "\u03B3", name: "gamma", category: "greek-lower", description: "Gamma" },
6
+ { latex: "\\delta", unicode: "\u03B4", name: "delta", category: "greek-lower", description: "Delta" },
7
+ { latex: "\\epsilon", unicode: "\u03B5", name: "epsilon", category: "greek-lower", description: "Epsilon" },
8
+ { latex: "\\zeta", unicode: "\u03B6", name: "zeta", category: "greek-lower", description: "Zeta" },
9
+ { latex: "\\eta", unicode: "\u03B7", name: "eta", category: "greek-lower", description: "Eta" },
10
+ { latex: "\\theta", unicode: "\u03B8", name: "theta", category: "greek-lower", description: "Theta" },
11
+ { latex: "\\iota", unicode: "\u03B9", name: "iota", category: "greek-lower", description: "Iota" },
12
+ { latex: "\\kappa", unicode: "\u03BA", name: "kappa", category: "greek-lower", description: "Kappa" },
13
+ { latex: "\\lambda", unicode: "\u03BB", name: "lambda", category: "greek-lower", description: "Lambda" },
14
+ { latex: "\\mu", unicode: "\u03BC", name: "mu", category: "greek-lower", description: "Mu" },
15
+ { latex: "\\nu", unicode: "\u03BD", name: "nu", category: "greek-lower", description: "Nu" },
16
+ { latex: "\\xi", unicode: "\u03BE", name: "xi", category: "greek-lower", description: "Xi" },
17
+ { latex: "\\pi", unicode: "\u03C0", name: "pi", category: "greek-lower", description: "Pi" },
18
+ { latex: "\\rho", unicode: "\u03C1", name: "rho", category: "greek-lower", description: "Rho" },
19
+ { latex: "\\sigma", unicode: "\u03C3", name: "sigma", category: "greek-lower", description: "Sigma" },
20
+ { latex: "\\tau", unicode: "\u03C4", name: "tau", category: "greek-lower", description: "Tau" },
21
+ { latex: "\\phi", unicode: "\u03C6", name: "phi", category: "greek-lower", description: "Phi" },
22
+ { latex: "\\chi", unicode: "\u03C7", name: "chi", category: "greek-lower", description: "Chi" },
23
+ { latex: "\\psi", unicode: "\u03C8", name: "psi", category: "greek-lower", description: "Psi" },
24
+ { latex: "\\omega", unicode: "\u03C9", name: "omega", category: "greek-lower", description: "Omega" }
25
+ ];
26
+ var GREEK_UPPERCASE = [
27
+ { latex: "\\Gamma", unicode: "\u0393", name: "Gamma", category: "greek-upper" },
28
+ { latex: "\\Delta", unicode: "\u0394", name: "Delta", category: "greek-upper" },
29
+ { latex: "\\Theta", unicode: "\u0398", name: "Theta", category: "greek-upper" },
30
+ { latex: "\\Lambda", unicode: "\u039B", name: "Lambda", category: "greek-upper" },
31
+ { latex: "\\Xi", unicode: "\u039E", name: "Xi", category: "greek-upper" },
32
+ { latex: "\\Pi", unicode: "\u03A0", name: "Pi", category: "greek-upper" },
33
+ { latex: "\\Sigma", unicode: "\u03A3", name: "Sigma", category: "greek-upper" },
34
+ { latex: "\\Upsilon", unicode: "\u03A5", name: "Upsilon", category: "greek-upper" },
35
+ { latex: "\\Phi", unicode: "\u03A6", name: "Phi", category: "greek-upper" },
36
+ { latex: "\\Psi", unicode: "\u03A8", name: "Psi", category: "greek-upper" },
37
+ { latex: "\\Omega", unicode: "\u03A9", name: "Omega", category: "greek-upper" }
38
+ ];
39
+ var OPERATORS = [
40
+ { latex: "+", unicode: "+", name: "plus", category: "operator" },
41
+ { latex: "-", unicode: "\u2212", name: "minus", category: "operator" },
42
+ { latex: "\\times", unicode: "\xD7", name: "times", category: "operator" },
43
+ { latex: "\\div", unicode: "\xF7", name: "divide", category: "operator" },
44
+ { latex: "\\cdot", unicode: "\xB7", name: "dot product", category: "operator" },
45
+ { latex: "\\pm", unicode: "\xB1", name: "plus-minus", category: "operator" },
46
+ { latex: "\\mp", unicode: "\u2213", name: "minus-plus", category: "operator" }
47
+ ];
48
+ var RELATIONS = [
49
+ { latex: "<", unicode: "<", name: "less than", category: "relation" },
50
+ { latex: ">", unicode: ">", name: "greater than", category: "relation" },
51
+ { latex: "\\leq", unicode: "\u2264", name: "leq", category: "relation" },
52
+ { latex: "\\geq", unicode: "\u2265", name: "geq", category: "relation" },
53
+ { latex: "\\neq", unicode: "\u2260", name: "neq", category: "relation" },
54
+ { latex: "\\approx", unicode: "\u2248", name: "approx", category: "relation" },
55
+ { latex: "\\equiv", unicode: "\u2261", name: "equiv", category: "relation" },
56
+ { latex: "\\sim", unicode: "\u223C", name: "sim", category: "relation" },
57
+ { latex: "\\propto", unicode: "\u221D", name: "propto", category: "relation" },
58
+ { latex: "\\ll", unicode: "\u226A", name: "much less", category: "relation" },
59
+ { latex: "\\gg", unicode: "\u226B", name: "much greater", category: "relation" },
60
+ { latex: "\\subset", unicode: "\u2282", name: "subset", category: "relation" },
61
+ { latex: "\\supset", unicode: "\u2283", name: "supset", category: "relation" },
62
+ { latex: "\\subseteq", unicode: "\u2286", name: "subseteq", category: "relation" },
63
+ { latex: "\\supseteq", unicode: "\u2287", name: "supseteq", category: "relation" },
64
+ { latex: "\\in", unicode: "\u2208", name: "element of", category: "relation" },
65
+ { latex: "\\notin", unicode: "\u2209", name: "not in", category: "relation" },
66
+ { latex: "\\perp", unicode: "\u22A5", name: "perpendicular", category: "relation" },
67
+ { latex: "\\parallel", unicode: "\u2225", name: "parallel", category: "relation" }
68
+ ];
69
+ var ARROWS = [
70
+ { latex: "\\to", unicode: "\u2192", name: "to", category: "arrow" },
71
+ { latex: "\\rightarrow", unicode: "\u2192", name: "right arrow", category: "arrow" },
72
+ { latex: "\\leftarrow", unicode: "\u2190", name: "left arrow", category: "arrow" },
73
+ { latex: "\\Rightarrow", unicode: "\u21D2", name: "Rightarrow", category: "arrow" },
74
+ { latex: "\\Leftarrow", unicode: "\u21D0", name: "Leftarrow", category: "arrow" },
75
+ { latex: "\\Leftrightarrow", unicode: "\u21D4", name: "Leftrightarrow", category: "arrow" },
76
+ { latex: "\\mapsto", unicode: "\u21A6", name: "mapsto", category: "arrow" },
77
+ { latex: "\\uparrow", unicode: "\u2191", name: "up arrow", category: "arrow" },
78
+ { latex: "\\downarrow", unicode: "\u2193", name: "down arrow", category: "arrow" },
79
+ { latex: "\\longrightarrow", unicode: "\u27F6", name: "long right arrow", category: "arrow" },
80
+ { latex: "\\longleftarrow", unicode: "\u27F5", name: "long left arrow", category: "arrow" }
81
+ ];
82
+ var MISC_SYMBOLS = [
83
+ { latex: "\\infty", unicode: "\u221E", name: "infinity", category: "misc" },
84
+ { latex: "\\partial", unicode: "\u2202", name: "partial", category: "misc" },
85
+ { latex: "\\nabla", unicode: "\u2207", name: "nabla", category: "misc" },
86
+ { latex: "\\forall", unicode: "\u2200", name: "for all", category: "misc" },
87
+ { latex: "\\exists", unicode: "\u2203", name: "exists", category: "misc" },
88
+ { latex: "\\neg", unicode: "\xAC", name: "not", category: "misc" },
89
+ { latex: "\\emptyset", unicode: "\u2205", name: "empty set", category: "misc" },
90
+ { latex: "\\angle", unicode: "\u2220", name: "angle", category: "misc" },
91
+ { latex: "\\triangle", unicode: "\u25B3", name: "triangle", category: "misc" },
92
+ { latex: "\\square", unicode: "\u25A1", name: "square", category: "misc" },
93
+ { latex: "\\circ", unicode: "\u2218", name: "composition", category: "misc" },
94
+ { latex: "\\hbar", unicode: "\u210F", name: "Planck constant", category: "misc" },
95
+ { latex: "\\ell", unicode: "\u2113", name: "ell", category: "misc" },
96
+ { latex: "\\wp", unicode: "\u2118", name: "Weierstrass p", category: "misc" },
97
+ { latex: "\\Re", unicode: "\u211C", name: "real part", category: "misc" },
98
+ { latex: "\\Im", unicode: "\u2111", name: "imaginary part", category: "misc" },
99
+ { latex: "\\aleph", unicode: "\u2135", name: "aleph", category: "misc" }
100
+ ];
101
+ var ALL_SYMBOLS = [
102
+ ...GREEK_LOWERCASE,
103
+ ...GREEK_UPPERCASE,
104
+ ...OPERATORS,
105
+ ...RELATIONS,
106
+ ...ARROWS,
107
+ ...MISC_SYMBOLS
108
+ ];
109
+ function searchSymbols(query) {
110
+ const q = query.toLowerCase();
111
+ return ALL_SYMBOLS.filter(
112
+ (s) => s.name.toLowerCase().includes(q) || s.latex.toLowerCase().includes(q) || s.description?.toLowerCase().includes(q)
113
+ );
114
+ }
115
+ function getSymbolsByCategory(category) {
116
+ return ALL_SYMBOLS.filter((s) => s.category === category);
117
+ }
118
+
119
+ // src/matrix.ts
120
+ var MatrixUtils = class {
121
+ /**
122
+ * 验证矩阵维度是否一致
123
+ */
124
+ validateDimensions(matrix) {
125
+ if (matrix.length === 0) return true;
126
+ const cols = matrix[0].length;
127
+ return matrix.every((row) => row.length === cols);
128
+ }
129
+ /**
130
+ * 获取矩阵维度 [rows, cols]
131
+ */
132
+ getDimensions(matrix) {
133
+ if (matrix.length === 0) return [0, 0];
134
+ return [matrix.length, matrix[0].length];
135
+ }
136
+ /**
137
+ * 判断是否为方阵
138
+ */
139
+ isSquare(matrix) {
140
+ if (matrix.length === 0) return true;
141
+ return matrix.length === matrix[0].length;
142
+ }
143
+ /**
144
+ * 矩阵转置
145
+ */
146
+ transpose(matrix) {
147
+ if (matrix.length === 0) return [];
148
+ const rows = matrix.length;
149
+ const cols = matrix[0].length;
150
+ const result = [];
151
+ for (let c = 0; c < cols; c++) {
152
+ const row = [];
153
+ for (let r = 0; r < rows; r++) {
154
+ row.push(matrix[r][c]);
155
+ }
156
+ result.push(row);
157
+ }
158
+ return result;
159
+ }
160
+ /**
161
+ * 格式化矩阵为 LaTeX
162
+ * @param matrix 矩阵数据(字符串数组)
163
+ * @param matrixType 矩阵类型 (matrix/pmatrix/bmatrix/vmatrix)
164
+ * @param columnAlign 列对齐 (l/c/r)
165
+ */
166
+ toLaTeX(matrix, options) {
167
+ const type = options?.matrixType ?? "pmatrix";
168
+ const align = options?.columnAlign ? `{${options.columnAlign.join("")}}` : "";
169
+ const rows = matrix.map((row) => row.join(" & ")).join(" \\\\\n");
170
+ return `\\begin{${type}}${align}
171
+ ${rows}
172
+ \\end{${type}}`;
173
+ }
174
+ /**
175
+ * 生成行列式 LaTeX
176
+ */
177
+ toDeterminantLaTeX(matrix) {
178
+ return this.toLaTeX(matrix, { matrixType: "vmatrix" });
179
+ }
180
+ /**
181
+ * 数字矩阵加法 (2D 数值)
182
+ */
183
+ add(a, b) {
184
+ if (!this.validateDimensions(a) || !this.validateDimensions(b)) return null;
185
+ const [ra, ca] = this.getDimensions(a);
186
+ const [rb, cb] = this.getDimensions(b);
187
+ if (ra !== rb || ca !== cb) return null;
188
+ return a.map((row, r) => row.map((val, c) => val + b[r][c]));
189
+ }
190
+ /**
191
+ * 数字矩阵乘法
192
+ */
193
+ multiply(a, b) {
194
+ const [ra, ca] = this.getDimensions(a);
195
+ const [rb, cb] = this.getDimensions(b);
196
+ if (ca !== rb) return null;
197
+ const result = [];
198
+ for (let r = 0; r < ra; r++) {
199
+ const row = [];
200
+ for (let c = 0; c < cb; c++) {
201
+ let sum = 0;
202
+ for (let k = 0; k < ca; k++) {
203
+ sum += a[r][k] * b[k][c];
204
+ }
205
+ row.push(sum);
206
+ }
207
+ result.push(row);
208
+ }
209
+ return result;
210
+ }
211
+ /**
212
+ * 标量乘法
213
+ */
214
+ scalarMultiply(a, scalar) {
215
+ return a.map((row) => row.map((val) => val * scalar));
216
+ }
217
+ /**
218
+ * 计算 2×2 行列式
219
+ */
220
+ determinant2x2(matrix) {
221
+ if (matrix.length !== 2 || matrix[0].length !== 2) return null;
222
+ return matrix[0][0] * matrix[1][1] - matrix[0][1] * matrix[1][0];
223
+ }
224
+ /**
225
+ * 计算 3×3 行列式 (Sarrus 规则)
226
+ */
227
+ determinant3x3(matrix) {
228
+ if (matrix.length !== 3 || matrix[0].length !== 3) return null;
229
+ const r0 = matrix[0], r1 = matrix[1], r2 = matrix[2];
230
+ const [a, b, c] = r0;
231
+ const [d, e, f] = r1;
232
+ const [g, h, i] = r2;
233
+ return a * (e * i - f * h) - b * (d * i - f * g) + c * (d * h - e * g);
234
+ }
235
+ };
236
+ function zeroMatrix(rows, cols) {
237
+ return Array.from({ length: rows }, () => Array(cols).fill(0));
238
+ }
239
+ function identityMatrix(n) {
240
+ return Array.from(
241
+ { length: n },
242
+ (_, r) => Array.from({ length: n }, (_2, c) => r === c ? 1 : 0)
243
+ );
244
+ }
245
+ function latexMatrixTemplate(rows, cols) {
246
+ const row = Array(cols).fill("").join(" & ");
247
+ const body = Array(rows).fill(row).join(" \\\\\n");
248
+ return `\\begin{pmatrix}
249
+ ${body}
250
+ \\end{pmatrix}`;
251
+ }
252
+ export {
253
+ ALL_SYMBOLS,
254
+ ARROWS,
255
+ GREEK_LOWERCASE,
256
+ GREEK_UPPERCASE,
257
+ MISC_SYMBOLS,
258
+ MatrixUtils,
259
+ OPERATORS,
260
+ RELATIONS,
261
+ getSymbolsByCategory,
262
+ identityMatrix,
263
+ latexMatrixTemplate,
264
+ searchSymbols,
265
+ zeroMatrix
266
+ };
package/package.json ADDED
@@ -0,0 +1,52 @@
1
+ {
2
+ "name": "@sciexpr/math",
3
+ "version": "0.1.0",
4
+ "description": "Scientific Expression Engine - Math utilities (symbol library, matrix tools)",
5
+ "type": "module",
6
+ "main": "./dist/index.cjs",
7
+ "module": "./dist/index.mjs",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/index.mjs",
13
+ "require": "./dist/index.cjs"
14
+ }
15
+ },
16
+ "sideEffects": false,
17
+ "files": ["dist"],
18
+ "scripts": {
19
+ "build": "tsup src/index.ts --format cjs,esm --dts --clean",
20
+ "dev": "tsup src/index.ts --format cjs,esm --dts --watch",
21
+ "lint": "tsc --noEmit",
22
+ "clean": "rimraf dist",
23
+ "test": "vitest run"
24
+ },
25
+ "keywords": ["scientific", "expression", "math", "matrix", "symbols"],
26
+ "license": "MIT",
27
+ "author": {
28
+ "name": "haoguodong09-svg",
29
+ "email": "haoguodong09@gmail.com"
30
+ },
31
+ "homepage": "https://github.com/haoguodong09-svg/scientific-expression-engine#readme",
32
+ "bugs": {
33
+ "url": "https://github.com/haoguodong09-svg/scientific-expression-engine/issues"
34
+ },
35
+ "repository": {
36
+ "type": "git",
37
+ "url": "https://github.com/haoguodong09-svg/scientific-expression-engine",
38
+ "directory": "packages/math"
39
+ },
40
+ "publishConfig": {
41
+ "access": "public"
42
+ },
43
+ "dependencies": {
44
+ "@sciexpr/core": "workspace:*"
45
+ },
46
+ "devDependencies": {
47
+ "tsup": "^8.0.0",
48
+ "typescript": "^5.5.0",
49
+ "vitest": "^2.0.0",
50
+ "rimraf": "^5.0.0"
51
+ }
52
+ }