You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在基于浏览器的ESM模块中引入并使用MathJax?

在ESM+esbuild+npm环境中正确引入并使用MathJax

问题原因

你之前直接调用MathJax.tex2svg时出现报错,是因为MathJax的ES5模块采用异步初始化机制,导入模块后方法并未立即可用,需要等待其启动完成才能调用相关API。

正确实现方式

方式一:使用预配置的tex-svg模块

直接导入预配置好的TeX转SVG模块,等待MathJax启动完成后调用方法:

import { MathJax } from 'mathjax/es5/tex-svg';

// 等待MathJax完成初始化
MathJax.startup.promise.then(() => {
  const mathText = String.raw`x^2 + y^2 = z^2`;
  const svgElement = MathJax.tex2svg(mathText);
  // 将生成的SVG添加到DOM中使用
  document.body.appendChild(svgElement);
});

方式二:手动配置MathJax(更灵活)

如果需要自定义配置(比如行内公式格式、SVG字体缓存等),可以手动导入核心模块并配置:

import { MathJax } from 'mathjax/es5/core';
import 'mathjax/es5/input/tex';
import 'mathjax/es5/output/svg';
import { browserAdaptor } from 'mathjax/es5/adaptors/browserAdaptor';
import { RegisterHTMLHandler } from 'mathjax/es5/handlers/html';

// 注册浏览器适配器
const adaptor = browserAdaptor();
RegisterHTMLHandler(adaptor);

// 自定义MathJax配置
MathJax.config({
  tex: {
    inlineMath: [['$', '$'], ['\\(', '\\)']], // 行内公式标识
    displayMath: [['$$', '$$'], ['\\[', '\\]']] // 块级公式标识
  },
  svg: {
    fontCache: 'global' // 启用全局字体缓存
  }
});

// 启动MathJax并等待完成
MathJax.startup.promise.then(() => {
  const svgElement = MathJax.tex2svg(String.raw`\sum_{n=1}^\infty \frac{1}{n^2} = \frac{\pi^2}{6}`);
  document.body.appendChild(svgElement);
});

注意事项

  • esbuild打包时无需额外配置,只要正确导入MathJax模块即可,它会自动处理依赖树。
  • 必须在调用tex2svg前等待MathJax.startup.promise完成,否则会出现方法未定义的错误。

内容的提问来源于stack exchange,提问作者naivedeveloper

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 22:47:24