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 追踪系统。 ![GitHub 发布版本](https://img.shields.io/github/v/release/mathjax/MathJax-src.svg?sort=semver) ![GitHub 发布版本 (v3)](https://img.shields.io/github/package-json/v/mathjax/MathJax/legacy-v3.svg?label=release-v3) ![GitHub 发布版本 (v2)](https://img.shields.io/github/package-json/v/mathjax/MathJax/legacy-v2.svg?label=release-v2) ![NPM 版本](https://img.shields.io/npm/v/mathjax.svg?style=flat) ![jsdelivr 排名](https://flat.badgen.net/jsdelivr/rank/npm/mathjax?color=green) ![jsDelivr 访问量](https://img.shields.io/jsdelivr/npm/hm/mathjax) ![npm 每月下载量 (完整版)](https://img.shields.io/npm/dm/mathjax?label=npm) ![npm 总下载量](https://img.shields.io/npm/dt/mathjax.svg?style=flat&label=npm%20total) 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代理, 数学渲染, 数据可视化, 无障碍访问, 自定义脚本