mathjax/MathJax
GitHub: mathjax/MathJax
MathJax 是一个跨浏览器的 JavaScript 显示引擎,用于在网页中高质量渲染 LaTeX、MathML 和 AsciiMath 数学公式,并支持无障碍访问。
Stars: 10879 | Forks: 1195
# MathJax
## 在所有浏览器中呈现优美的数学公式
**注意:** MathJax 的代码开发在 [MathJax-src](https://github.com/mathjax/MathJax-src) 仓库中进行。该仓库包含打包后的 MathJax 版本,以及 MathJax 的主要 bug 追踪系统。








MathJax 是一个开源的 JavaScript 显示引擎,用于 LaTeX、MathML
和 AsciiMath 表示法,它可以在所有现代浏览器中运行,
内置对屏幕阅读器等辅助技术的支持,
包括自动语音生成和表达式浏览器,
可以在比完整表达式更精细的层面上探索排版后的数学公式。它不需要
用户进行任何设置(无需下载插件或安装软件),因此
页面作者可以编写包含数学公式的网络文档,并
确信用户能够自然、轻松地查看它。
只需在网页中包含 MathJax 和一些数学公式,剩下的
交给 MathJax 处理即可。
MathJax 的部分主要功能包括:
- 在 HTML 页面中高质量显示 LaTeX、MathML 和 AsciiMath 表示法
- 在大多数浏览器中都受支持,读者无需插件、额外字体或
特殊设置
- 对作者来说简单易用,对发布者来说灵活,对开发者来说可扩展
- 支持数学无障碍访问、剪切和粘贴互操作性以及
其他高级功能
- 强大的 API,可与其他 Web 应用程序集成
有关 MathJax 的更多详细信息,请参阅 ,
有关 MathJax 文档,请参阅 。
## MathJax 组件
MathJax 使用称为*组件*的文件,其中包含
您可以包含在网页中或
通过 NodeJS 在服务器上访问的各种 MathJax 模块。一些组件将运行具有一种或多种输入格式和
特定输出格式的 MathJax 所需的所有部分组合在一起,而其他组件则是可以
在需要时按需加载的部分,或者通过指定您希望以自定义方式组合的各个部分的配置来加载。有关使用
说明,请参阅 [MathJax 文档](https://docs.mathjax.org)。
组件为 MathJax 的模块提供了方便的打包方式,但是您
也可以形成自己的自定义组件,或者
在服务器上的 node 应用程序中直接使用
MathJax 的模块。这里有一些 [Web 示例](https://github.com/mathjax/MathJax-demos-web)
展示了如何在网页中使用 MathJax 以及如何构建您自己的
组件,还有 [node
示例](https://github.com/mathjax/MathJax-demos-node) 说明了
如何在 node 应用程序中使用组件或直接调用 MathJax 模块。
## 此仓库包含什么内容
此仓库仅包含 MathJax 的组件文件,不包含
MathJax 的源代码(源代码在单独的 [MathJax
源代码仓库](https://github.com/mathjax/MathJax-src/) 中提供)。这些
组件文件是提供 MathJax 给
Web 的 CDN 所服务的文件。在版本 2 中,Web 上使用的文件也是 MathJax 的源
文件,但在版本 3 及更高版本中,源文件不再
位于 CDN 上,因为它们不是在浏览器中运行的内容。
组件是 ES6 格式的 CommonJS 模块。
## 安装与使用
### 在 Web 上通过 CDN 使用 MathJax 组件
如果您正在从 CDN 将 MathJax 加载到网页中,则无需
安装任何东西。只需使用 `script` 标签从
CDN 加载 MathJax 即可。例如,
```
```
有关更多信息,请参阅 [MathJax
文档](https://docs.mathjax.org/en/latest/index.html#browser-components)
以及 [MathJax Web 演示](https://github.com/mathjax/MathJax-demos-web) 和 [MathJax
Node 演示](https://github.com/mathjax/MathJax-demos-node)。
### 在您自己的服务器上托管 MathJax 组件
如果您想从自己的服务器托管 MathJax,您可以
通过使用 `npm` 安装 `mathjax` 包并将其内容
移动到服务器上的适当位置来实现:
```
npm install mathjax@4
mv node_modules/mathjax /mathjax
```
或者,您可以通过 GitHub 获取这些文件:
```
git clone https://github.com/mathjax/MathJax.git mathjax
mv mathjax /mathjax
```
然后(在任何一种情况下),您都可以使用如下所示的 script 标签:
```
```
其中 `` 替换为您在上面移动 MathJax 文件所在位置的
URL。
有关详细信息,请参阅
[文档](https://docs.mathjax.org/en/latest/web/hosting.html)。
### 在 node 应用程序中使用 MathJax 组件
要在 node 应用程序中使用 MathJax 组件,请安装 `mathjax`
包:
```
npm install mathjax@4
```
然后在您的应用程序中导入 `mathjax` 并对其进行初始化:
```
import MathJax from 'mathjax';
await MathJax.init({ ... });
```
其中 `{ ... }` 是您要使用的 MathJax 配置。例如,
```
import MathJax from 'mathjax';
await MathJax.init({
loader: {load: ['input/tex', 'output/svg']}
});
const svg = await MathJax.tex2svgPromise('\\frac{1}{x^2-1}', {display: true});
console.log(MathJax.startup.adaptor.serializeXML(svg));
```
或者,在 ES5 node 应用程序中,您可以使用
```
const MathJax = require('mathjax');
MathJax.init({ ... }).then(() => { ... });
```
其中第一个 `{ ... }` 是 MathJax 配置,第二个
`{ ... }` 是在加载 MathJax 后要运行的代码。例如。
```
const MathJax = require('mathjax');
MathJax.init({
loader: {load: ['input/tex', 'output/svg']}
}).then(() => {
const svg = MathJax.tex2svg('\\frac{1}{x^2-1}', {display: true});
console.log(MathJax.startup.adaptor.serializeXML(svg));
}).catch((err) => console.log(err.message));
```
**注意:** 上面两个示例中的技术仅适用于基于 node 的
应用程序,不适用于浏览器应用程序。此方法设置了一个
替代的 DOM 实现,这在
浏览器中是不需要的,并且在其他方面
它依赖于 node 和本地文件系统。即使您
使用 webpack 或使用其他打包工具,此设置也无法在浏览器中正常工作。
有关更多详细信息,请参阅
[文档](https://docs.mathjax.org/en/latest/index.html#server-nodejs)
和 [MathJax Node
仓库](https://github.com/mathjax/MathJax-demos-node)。
## 减小组件目录的大小
由于 MathJax 包含了*所有*组件文件,如果
您只计划使用一种配置,您可以通过移除未使用的组件来减小 MathJax 目录的大小。例如,
如果您正在使用 `tex-chtml.js` 组件,那么您可以
移除 `tex-mml-chtml.js`、`tex-svg.js`、`tex-mml-svg.js` 以及以
`-nofont.js` 结尾的文件,这将节省相当大的空间。
实际上,您应该能够移除除
`tex-chtml.js` 以及 `input/tex/extensions`、`adaptors`、`a11y`
和 `sre` 目录之外的所有内容。如果您仅在 Web 上使用结果,
您也可以移除 `adaptors`。如果您使用 MathML 输入
而不是 TeX(例如,使用 `mml-chtml.js` 而不是 `tex-chtml.js`),
那么您也可以移除 `input/tex/extensions`。
如果您在 node 应用程序中使用默认的 `mathjax-newcm` 字体以外的其他字体,那么您还需要安装该字体。
例如,
```
npm install @mathjax/mathjax-stix2-font@4
```
在本地安装 `mathjax-stix2` 字体。在 Web 上,MathJax 将在 `cdn.jsdelivr.net` CDN
服务上查找字体及其动态范围,因此如果您想使用来自您自己服务器的字体,您将
需要配置该字体的路径。例如:
```
MathJax = {
loader: {
paths: {
'mathjax-stix2': '/mathjax-stix2-font'
}
}
};
```
将 `mathjax-stix2` 字体的位置设置为服务器上的一个 URL。
## 组件文件与 Pull Requests
此仓库的内容是自动生成的,因此您
不应提交修改此仓库的 pull requests。如果
您希望向 MathJax 提交修改,您应该在 [MathJax source
仓库](https://github.com/mathjax/MathJax-src) 中提交 pull
request。
## MathJax 社区
MathJax 的主网站是 ,其中包含
公告和其他重要信息。用于提问
和获取帮助的 [MathJax 用户
论坛](http://groups.google.com/group/mathjax-users) 托管在 Google 上,而 [MathJax
bug 追踪系统](https://github.com/mathjax/MathJax/issues) 托管在
GitHub 上。
在报告 bug 之前,请检查它是否之前已经被
报告过。此外,请使用 bug 追踪系统(而不是帮助
论坛)来报告 bug,并使用用户论坛(而不是
bug 追踪系统)来询问有关如何使用 MathJax 的问题。
## MathJax 资源
* [MathJax 文档](https://docs.mathjax.org)
* [MathJax 组件](https://github.com/mathjax/MathJax)
* [MathJax 源代码](https://github.com/mathjax/MathJax-src)
* [MathJax Web 示例](https://github.com/mathjax/MathJax-demos-web)
* [MathJax Node 示例](https://github.com/mathjax/MathJax-demos-node)
* [MathJax Bug 追踪系统](https://github.com/mathjax/MathJax/issues)
* [MathJax 用户组](http://groups.google.com/group/mathjax-users)
标签:CMS安全, JavaScript, LaTeX, MITM代理, 数学渲染, 数据可视化, 无障碍访问, 自定义脚本