@mathcrowd/mmarked 2.0.3 → 3.0.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/README.zh.md CHANGED
@@ -1,109 +1,346 @@
1
1
  # mmarked
2
2
 
3
- [![npm version](https://badge.fury.io/js/%40mathcrowd%2Fmmarked.svg)](https://badge.fury.io/js/%40mathcrowd%2Fmmarked)
4
- [![License: Custom](https://img.shields.io/badge/License-Custom-yellow.svg)](https://creativecommons.org/licenses/by-nc/4.0)
3
+ [![npm version](https://badge.fury.io/js/%40mathcrowd%2Fmmarked.svg)](https://www.npmjs.com/package/@mathcrowd/mmarked)
4
+ [![npm downloads](https://img.shields.io/npm/dt/@mathcrowd/mmarked.svg)](https://www.npmjs.com/package/@mathcrowd/mmarked)
5
+ [![License: CC BY-NC 4.0](https://img.shields.io/badge/License-CC%20BY--NC%204.0-yellow.svg)](https://creativecommons.org/licenses/by-nc/4.0)
5
6
 
6
7
  ![icon.png](./icon.png)
7
8
 
8
- [English](./README.md)
9
+ [English](./README.md) | [在线演示](https://mathedu4all.github.io/mmarked/) | [VSCode 扩展](https://marketplace.visualstudio.com/items?itemName=MCLab.mmarked) | [Logseq 插件](https://github.com/mathedu4all/mmarked-logseq-extension)
9
10
 
10
- 这是一个功能强大的 TypeScript 库,用于渲染带有 LaTeX 支持的自定义 Markdown 语法,专为教育领域中的数学可视化而设计
11
+ ## 📖 概述
11
12
 
12
- ## 🌟 功能特性
13
+ **mmarked** 改变你的 Markdown 体验 —— 一个专为教育和数学内容设计的强大 TypeScript 库。支持实时渲染复杂 LaTeX 公式、定理块和自定义教育语法。
13
14
 
14
- - ✅ **完整的 CommonMark 语法支持:** 与 CommonMark 标准完全兼容
15
- - 🔢 **脚注块:** 支持自动编号的脚注,并带有易于引用的链接
16
- - 📘 **定理样式块:** 支持以标题、自动编号和引用链接的形式呈现数学定理、引理和例子
17
- - 🖼️ **图像缩放功能:** 使用简单的语法可自定义渲染图像和视频
18
- - 🔍 **隐藏/显示解决方案块:** 带有切换按钮的解决方案块,轻松控制可见性
19
- - 🧮 **TeX 转 SVG:** 将 TeX 方程式转换为矢量图形,实现高质量渲染
20
- - 🔗 **与现有系统轻松集成:** 支持服务器端和浏览器端实现
15
+ **完美适用于:**
21
16
 
22
- ## 🚀 快速入门
17
+ - 📚 **教育工作者** 制作数学课程材料
18
+ - 🎓 **学生** 撰写技术笔记和作业
19
+ - 📝 **研究人员** 编写学术论文
20
+ - 💻 **开发者** 构建教育平台
21
+ - 💡 **任何人** 在 Markdown 中使用数学符号
23
22
 
24
- ### 编辑器集成
23
+ ## ✨ 功能特性
25
24
 
26
- VSCode 中使用 mmarked: https://marketplace.visualstudio.com/items?itemName=MCLab.mmarked
27
- 在 Logseq 中使用 mmarked: https://github.com/mathedu4all/mmarked-logseq-extension
25
+ ### 核心能力
28
26
 
29
- ### 服务器端集成
27
+ - ✅ **完整 CommonMark 支持** - 与标准 Markdown 语法完全兼容
28
+ - 🔗 **轻松集成** - 在 Node.js 和浏览器环境中无缝运行
29
+ - 📦 **轻量核心** - 最少依赖,可扩展架构
30
+ - ⚡ **高性能** - 优化的渲染管道,输出快速
30
31
 
31
- #### 安装
32
+ ### 数学内容
33
+
34
+ - 🧮 **高级 LaTeX 渲染** - 由 MathJax 驱动,呈现专业品质的公式
35
+ - 📐 **TeX 转 SVG** - 高质量 SVG 格式的方程输出
36
+ - 🔢 **自动编号脚注** - 易用的引用系统,自动编号
37
+
38
+ ### 教育功能
39
+
40
+ - 📘 **定理样式块** - 专用语法支持定理、引理、定义和例子
41
+ - 自动编号支持
42
+ - 使用 `[~id]` 语法进行交叉引用
43
+ - 可自定义标题
44
+ - 🔍 **可折叠解答块** - 通过切换功能隐藏/显示答案和证明
45
+ - 🎯 **语法高亮** - highlight.js 增强的代码块
46
+
47
+ ### 媒体与自定义
48
+
49
+ - 🖼️ **增强图片** - 使用简单的 `=宽x高` 语法灵活调整尺寸
50
+ - 📹 **视频支持** - 视频元素支持相同的尺寸选项
51
+ - 🎨 **可扩展** - 基于 marked.js 构建,易于自定义
52
+
53
+ ## 🚀 快速开始
54
+
55
+ ### 安装
32
56
 
33
57
  ```bash
34
58
  npm install @mathcrowd/mmarked mathjax-full highlight.js
35
59
  ```
36
60
 
37
- #### 基本用法
61
+ ### 基本用法
62
+
63
+ ```typescript
64
+ import { renderMarkdown } from '@mathcrowd/mmarked'
65
+
66
+ // 渲染带 LaTeX 支持的 Markdown
67
+ const result = renderMarkdown(`
68
+ # 勾股定理
69
+
70
+ \`\`\`[theorem,pythagoras,勾股定理]
71
+ 对于直角三角形,设两直角边为 $a$、$b$,斜边为 $c$:
72
+ $$a^2 + b^2 = c^2$$
73
+ \`\`\`
74
+
75
+ 这个基本定理(见 [~pythagoras])描述了直角三角形边长的关系。
76
+ `)
77
+
78
+ console.log(result.parsed) // HTML 输出
79
+ console.log(result.time) // 渲染耗时(毫秒)
80
+ ```
81
+
82
+ ### 许可证配置(仅 Node.js)
83
+
84
+ **重要提示:** 许可证验证**仅适用于 Node.js 服务端使用**。浏览器环境不需要配置许可证。
85
+
86
+ 在 Node.js 应用中商业使用时,必须配置有效的许可证:
38
87
 
39
88
  ```typescript
40
- import { tex2svg, renderMarkdown } from '@mathcrowd/mmarked'
89
+ import { configureLicense, renderMarkdown } from '@mathcrowd/mmarked'
90
+
91
+ // 配置你的许可证(在应用启动时执行一次)
92
+ configureLicense({
93
+ apiKey: 'MMARKED-XXXX-XXXX-XXXX-XXXX'
94
+ })
41
95
 
42
- // 将 TeX 转换为 SVG
43
- const svg = tex2svg('$x^2$')
96
+ // 现在可以使用库了
97
+ const result = renderMarkdown('# Hello World')
98
+ ```
44
99
 
45
- // Markdown 渲染为 HTML
46
- const html = renderMarkdown('### 标题').parsed
100
+ **在 Node.js 中未配置许可证:**
101
+ ```typescript
102
+ import { renderMarkdown } from '@mathcrowd/mmarked'
103
+
104
+ // 可以正常工作,但会在控制台显示警告
105
+ const result = renderMarkdown('# Hello')
106
+ // 控制台输出:
107
+ // ⚠️ 未配置 Node.js 服务端有效许可证。
108
+ // 商业使用请通过 configureLicense() 配置许可证。
109
+ // 联系 charles@mathcrowd.cn 获取商业许可。
110
+ // 浏览器使用无需许可证。
47
111
  ```
48
112
 
49
- ### 浏览器端集成
113
+ **系统要求:**
114
+ - **Node.js 18+** 用于远程许可证验证(使用 fetch API)
115
+
116
+ **获取许可证:**
117
+ - 📧 邮箱:**charles@mathcrowd.cn**
118
+ - 🌐 访问:[lab.mathcrowd.cn](https://lab.mathcrowd.cn)
119
+
120
+ ### 浏览器端使用
50
121
 
51
122
  ```html
52
123
  <!DOCTYPE html>
53
124
  <html>
54
125
  <head>
55
126
  <meta charset="utf-8">
56
- <title>在浏览器中使用 Marked</title>
127
+ <title>mmarked 演示</title>
57
128
  </head>
58
129
  <body>
59
130
  <div id="content"></div>
60
- <script src="dist/browser.umd.js"></script>
61
- <script>
62
- const { tex2svg, renderMarkdown } = marked;
63
- document.getElementById('content').innerHTML =
64
- tex2svg(renderMarkdown('# 在浏览器中使用 Marked \n\n $x^2+y^2=1$ \n\n由 **mmarked** 渲染').parsed);
65
- console.log(renderMarkdown('# 在浏览器中使用 Marked\n\n由 **mmarked** 渲染').lexed);
131
+ <script type="module">
132
+ import { renderMarkdown } from 'https://cdn.jsdelivr.net/npm/@mathcrowd/mmarked/dist/index.mjs'
133
+
134
+ const markdown = `
135
+ # 爱因斯坦质能方程
136
+
137
+ 著名的方程 $E = mc^2$ 描述了能量与质量的关系。
138
+
139
+ **其中:**
140
+ - $E$ 是能量
141
+ - $m$ 是质量
142
+ - $c$ 是光速
143
+ `
144
+
145
+ document.getElementById('content').innerHTML = renderMarkdown(markdown).parsed
66
146
  </script>
67
147
  </body>
68
148
  </html>
69
149
  ```
70
150
 
71
- ## 📚 API 参考
151
+ ## 📚 扩展语法指南
152
+
153
+ ### 自动编号的定理块
154
+
155
+ ```markdown
156
+ \`\`\`[theorem,fermat,费马大定理]
157
+ 对于任意大于 2 的整数 $n$,不存在正整数 $a$、$b$、$c$
158
+ 使得 $a^n + b^n = c^n$。
159
+ \`\`\`
160
+
161
+ \`\`\`[lemma,helper,辅助引理]
162
+ 这个引理支持 [~fermat] 的证明。
163
+ \`\`\`
164
+ ```
165
+
166
+ **支持的块类型:** `theorem`(定理)、`lemma`(引理)、`corollary`(推论)、`axiom`(公理)、`definition`(定义)、`example`(例)
167
+
168
+ **自定义块:** 使用任何关键字创建自定义定理样式块,独立编号。
169
+
170
+ **隐藏编号:** 在关键字后添加 `*`(如 `theorem*`)可隐藏编号,但保持序列。
171
+
172
+ ### 交互式解答块
173
+
174
+ ```markdown
175
+ **问题:** 解方程 $x^2 - 5x + 6 = 0$
176
+
177
+ ~~~[solution]
178
+ **解答:**
179
+
180
+ 因式分解方程:
181
+ $$(x-2)(x-3) = 0$$
182
+
183
+ 因此,解为:
184
+ - $x = 2$
185
+ - $x = 3$
186
+ ~~~
187
+
188
+ ~~~[proof]
189
+ **验证:** 代入 $x=2$:$(2)^2 - 5(2) + 6 = 4 - 10 + 6 = 0$ ✓
190
+ ~~~
191
+ ```
192
+
193
+ ### 增强的图片和视频
194
+
195
+ ```markdown
196
+ ![Logo](https://example.com/logo.svg "公司 Logo =300x100")
197
+
198
+ ![截图](./images/demo.png "演示截图 =800x600")
199
+ ```
200
+
201
+ ### 自动编号脚注
202
+
203
+ ```markdown
204
+ 黎曼猜想[^riemann]是最重要的未解决问题之一。
205
+
206
+ 另一个著名猜想是孪生素数猜想[^twin]。
207
+
208
+ [^riemann]: 由伯恩哈德·黎曼于 1859 年提出。
209
+ [^twin]: 指出存在无穷多对孪生素数。
210
+ ```
211
+
212
+ ## 🔧 API 参考
213
+
214
+ ### 许可证管理(仅 Node.js)
215
+
216
+ #### `configureLicense(config: LicenseConfig)`
217
+
218
+ 为 Node.js 环境中的商业使用配置许可证。必须在使用渲染函数之前调用。
219
+
220
+ **参数:**
221
+ ```typescript
222
+ interface LicenseConfig {
223
+ apiKey: string // 你的许可证密钥(格式:MMARKED-XXXX-XXXX-XXXX-XXXX)
224
+ }
225
+ ```
226
+
227
+ **示例:**
228
+ ```typescript
229
+ // 最简配置(推荐)
230
+ configureLicense({
231
+ apiKey: 'MMARKED-XXXX-XXXX-XXXX-XXXX'
232
+ })
233
+ ```
234
+
235
+ ### 核心函数
236
+
237
+ #### `renderMarkdown(markdown: string)`
238
+
239
+ 将 Markdown 渲染为 HTML,支持所有功能。
240
+
241
+ **许可证:** Node.js 商业使用需要有效许可证。浏览器免费使用。
242
+
243
+ **返回值:**
244
+ ```typescript
245
+ {
246
+ parsed: string, // HTML 输出
247
+ lexed: Token[], // Marked.js 令牌
248
+ time: number // 渲染时间(毫秒)
249
+ }
250
+ ```
251
+
252
+ **示例:**
253
+ ```typescript
254
+ const { parsed, time } = renderMarkdown('# 你好 $x^2$')
255
+ console.log(`渲染耗时 ${time}ms`)
256
+ ```
72
257
 
73
- | 函数 | 描述 |
74
- |----------|-------------|
75
- | `tex2svg(tex: string): string` | 将 TeX 转换为 HTML 格式的 SVG |
76
- | `renderMarkdown(markdown: string): {parsed: string, lexed: Token[], time: number}` | 将 Markdown 渲染为 HTML |
77
- | `renderMarkdownCompact(markdown: string): {parsed: string, lexed: Token[], time: number}` | 将 Markdown 渲染为 HTML,不包含 `<p>` 标签 |
258
+ #### `renderMarkdownCompact(markdown: string)`
78
259
 
79
- ⚠️ **重要提示:** 始终使用 [DOMPurify](https://github.com/cure53/DOMPurify) 清洁输出的 HTML,以防止 XSS 攻击
260
+ 渲染 Markdown 但不包裹 `<p>` 标签,适合行内内容。
80
261
 
81
- ## 📖 文档
262
+ **许可证:** Node.js 商业使用需要有效许可证。浏览器免费使用。
82
263
 
83
- 详细的中文文档请访问我们的 [产品页面](https://lab.mathcrowd.cn/mmarked)
264
+ **返回值:** 与 `renderMarkdown()` 相同的结构
84
265
 
85
- ## 🎮 演示
266
+ **使用场景:** 渲染单行内容,不需要块级元素。
86
267
 
87
- 您可以在这里尝试我们的交互式演示: [https://mathedu4all.github.io/mmarked/demo/](https://mathedu4all.github.io/mmarked/demo/)
268
+ ```typescript
269
+ const { parsed } = renderMarkdownCompact('**粗体** 和 $x^2$ 行内')
270
+ // 输出: <strong>粗体</strong> 和 <svg>...</svg> 行内
271
+ ```
88
272
 
89
- ## 👥 关于 Mathcrowd
273
+ #### `tex2svg(html: string): string`
90
274
 
91
- Mathcrowd 是一家由经验丰富的独立开发者和数学教育工作者创办的创新型初创公司我们的目标是通过尖端技术革新中国的数学教育,为数学爱好者和自主学习者创造一个富有吸引力的在线社区,提供丰富、互动和可视化的学习内容
275
+ HTML 中的 LaTeX 表达式转换为 SVG。
92
276
 
93
- 🌐 MCLab 官方网站: [https://lab.mathcrowd.cn](https://lab.mathcrowd.cn)
94
- 🌐 我们的在线数学社区: [https://www.mathcrowd.cn](https://www.mathcrowd.cn)
95
- 💬 加入我们的 Discord: [https://discord.gg/6VMUVA5Yq2](https://discord.gg/6VMUVA5Yq2)
277
+ **参数:**
278
+ - `html`: 包含 LaTeX 表达式的 HTML 字符串(`$...$` 表示行内,`$$...$$` 表示块)
279
+
280
+ **返回值:** LaTeX 转换为 SVG 图形后的 HTML
281
+
282
+ **示例:**
283
+ ```typescript
284
+ const html = '<p>爱因斯坦:$E=mc^2$</p>'
285
+ const withSvg = tex2svg(html)
286
+ ```
287
+
288
+ ### ⚠️ 安全警告
289
+
290
+ **始终使用 [DOMPurify](https://github.com/cure53/DOMPurify) 清理 HTML 输出**,然后再插入到 DOM 中:
291
+
292
+ ```typescript
293
+ import DOMPurify from 'dompurify'
294
+ import { renderMarkdown } from '@mathcrowd/mmarked'
295
+
296
+ // 安全渲染用户输入
297
+ const userMarkdown = getUserInput()
298
+ const { parsed } = renderMarkdown(userMarkdown)
299
+ const safeHtml = DOMPurify.sanitize(parsed)
300
+
301
+ document.getElementById('content').innerHTML = safeHtml
302
+ ```
303
+
304
+ ## 🔌 编辑器集成
305
+
306
+ 通过官方集成增强编辑体验:
307
+
308
+ - **[VSCode 扩展](https://marketplace.visualstudio.com/items?itemName=MCLab.mmarked)** - 实时预览,支持主题
309
+ - **[Logseq 插件](https://github.com/mathedu4all/mmarked-logseq-extension)** - 无缝集成笔记应用
310
+
311
+ ## 📖 文档与资源
312
+
313
+ - 🏠 **[产品主页](https://lab.mathcrowd.cn/products/mmarked)** - 官方产品页面
314
+ - 📘 **[完整文档](https://lab.mathcrowd.cn/docs/mmarked)** - 完整语法指南
315
+ - 🎮 **[在线演示](https://mathedu4all.github.io/mmarked/)** - 在浏览器中实时体验,内置快速参考
316
+
317
+ ## 🏗️ 技术栈
318
+
319
+ - **[marked.js](https://marked.js.org/)** - 快速 Markdown 解析器
320
+ - **[MathJax](https://www.mathjax.org/)** - 精美数学渲染
321
+ - **[highlight.js](https://highlightjs.org/)** - 语法高亮
322
+
323
+ ## 🏢 关于橘子数学
324
+
325
+ **橘子数学(Mathcrowd)** 致力于通过创新技术革新中国的数学教育。我们由经验丰富的开发者和数学教育工作者创立,正在构建工具和社区,让数学学习更易获取、更有吸引力。
326
+
327
+ - 🌐 **Mathcrowd Labs:** [lab.mathcrowd.cn](https://lab.mathcrowd.cn)
328
+ - 💬 **加入 Discord:** [discord.gg/6VMUVA5Yq2](https://discord.gg/6VMUVA5Yq2)
96
329
 
97
330
  ## 📄 许可证
98
331
 
99
- 请参见 [LICENSE](./LICENSE.md)
332
+ 采用 [CC BY-NC 4.0](./LICENSE.md) 许可 - 非商业用途免费。
333
+
334
+ 商业许可请联系:**charles@mathcrowd.cn**
335
+
336
+ ## 💬 支持
100
337
 
101
- 如需商业用途,请联系 charles@mathcrowd.cn 获取许可证详情
338
+ - 🐛 **错误报告:** [GitHub Issues](https://github.com/mathedu4all/mmarked/issues)
102
339
 
103
- ## 🤝 贡献
340
+ ---
104
341
 
105
- 我们欢迎各种形式的贡献!请查看我们的[贡献指南](CONTRIBUTING.md)了解更多详情
342
+ <div align="center">
106
343
 
107
- ## 📞 支持
344
+ [橘子数学](https://mathcrowd.cn) 团队用 ❤️ 打造
108
345
 
109
- 如有任何问题或问题,请在我们的 GitHub 仓库[提交 issue](https://github.com/mathedu4all/mathcrowd-marked-lib/issues)
346
+ </div>