当前位置: 首页 > 知识库问答 >
问题:

javascript - 为何无法在本地使用MathJax.js?

景英杰
2024-10-07

为了使网页可以显示latex,我引用了cdn中的MathJax.js:

   <!DOCTYPE html>
   <html>
   <head>
     <meta charset="utf-8">
     <meta name="viewport" content="width=device-width">
   <script type="text/javascript" async
     src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.7/MathJax.js?config=TeX-MML-AM_CHTML">
   </script>
   <script type="text/x-mathjax-config">
   MathJax.Hub.Config({
     tex2jax: {inlineMath: [['$','$'], ['\\(','\\)']]},
   });
   </script>
   </head>
   <body>
   First of all, we can "relax" the $\forall$-Introduction rule : $A \to B \vdash A \to \forall x B$, provided that $x$ is not *free* in $A$.
   </body>
   </html>

显示效果很好。
image.png

现在,我下载https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.7/MathJax.js?到本地后,MathJax.js可以在127.0.0.1/wp/MathJax.js打开(本机上有个apache服务器)。我将html页面修改

   <!DOCTYPE html>
   <html>
   <head>
     <meta charset="utf-8">
     <meta name="viewport" content="width=device-width">
   <script type="text/javascript" async
     src="127.0.0.1/wp/MathJax.js?config=TeX-MML-AM_CHTML">
   </script>
   <script type="text/x-mathjax-config">
   MathJax.Hub.Config({
     tex2jax: {inlineMath: [['$','$'], ['\\(','\\)']]},
   });
   </script>
   </head>
   <body>
   First of all, we can "relax" the $\forall$-Introduction rule : $A \to B \vdash A \to \forall x B$, provided that $x$ is not *free* in $A$.
   </body>
   </html>

用浏览器查看127.0.0.1/wp/test.html,出现这样的错误

image.png

请问,如何解决这个问题?

共有2个答案

越高峻
2024-10-07

这是因为 CDN 中的 MathJax 引用了其他文件而你没有下载到本地,例如:

// MathJax.js
import xxx from './extension/MathZoom.js'
// 其他代码

CDN 中有 extension/MathZoom.js 而你仅下载了 MathJax.js 导致出现 404 错误。

如果你想解决这个问题,需要将 CDN 中的全部文件下载下来,然而这并不是一个好主意。如果你想在本地部署 MathJax,可以参考 MathJax 的官方文档:托管自己的 Mathjax 副本(英文)。

公羊宗清
2024-10-07

你遇到的问题很可能是由于在本地引用 MathJax.js 时,URL 格式不正确或者相对路径解析问题导致的。在你的 HTML 文件中,你尝试使用 src="127.0.0.1/wp/MathJax.js?config=TeX-MML-AM_CHTML",但这种方式可能不会如你所期望地工作,因为 URL 缺少了协议部分(通常是 http://https://),并且参数 ?config=TeX-MML-AM_CHTML 直接附加在文件名之后,这可能会导致浏览器无法正确解析该 URL。

解决方案

  1. 确保 URL 格式正确
    你应该在 URL 中包含协议部分,并且确保文件路径正确。如果你的 MathJax.js 文件位于本地服务器(如 Apache)的 /wp/ 目录下,你应该使用类似 http://127.0.0.1/wp/MathJax.js 的 URL,并且单独配置 MathJax。
  2. 分开配置 MathJax
    由于直接在 URL 中添加查询参数(如 ?config=TeX-MML-AM_CHTML)可能不被支持或解析不正确,你应该在 <script> 标签中仅指定 MathJax 的基本路径,然后在 <script type="text/x-mathjax-config"> 标签中配置 MathJax。

修改后的 HTML

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <!-- 指定 MathJax 的基本 URL -->
  <script type="text/javascript" async src="http://127.0.0.1/wp/MathJax.js"></script>
  <script type="text/x-mathjax-config">
    MathJax.Hub.Config({
      // 配置 MathJax
      tex2jax: {
        inlineMath: [['$','$'], ['\\(','\\)']],
        processEscapes: true  // 可选,允许转义字符(如 \$)被识别为 LaTeX
      },
      // 指定加载的配置文件
      config: ["TeX-MML-AM_CHTML.js"],
      // 或者使用下面的方式直接加载配置(取决于 MathJax 版本)
      // jax: ["input/TeX", "output/CommonHTML"]
    });
  </script>
</head>
<body>
  First of all, we can "relax" the $\forall$-Introduction rule : $A \to B \vdash A \to \forall x B$, provided that $x$ is not *free* in $A$.
</body>
</html>

注意:

  • 我添加了 processEscapes: true,这是一个可选的配置,它允许你在文本中使用转义字符(如 \$)来避免被解释为 LaTeX。
  • 确保你的 Apache 服务器配置正确,并且 MathJax.js 文件确实位于 /wp/ 目录下。
  • 如果你使用的是较新版本的 MathJax(如 3.x),配置方式会有所不同,你可能需要查阅 MathJax 的官方文档来获取正确的配置方法。
 类似资料:
  • 问题是使用reduce()对数组数组进行操作,并返回一个没有子数组的同构数组。例如-[1,2,[3,[4,5]]]将返回[1,2,3,4,5]。 下面是工作的代码,考虑到子数组本身不是另一个数组的数组- 请注意,我更改了arr数组,因为代码不适用于第一个arr数组,即[1,2,a,b,C]。对于arr[1,2,3,4,C],返回的对象是[1,2,3,4,9,10] 它将我的函数oneArray解释

  • 我有一个问题,也许有人可以帮助我。我正在尝试构建一个简单的java aws lambda并使用无服务器框架部署它。 我试图建立一个简单的lambda使用: 当我尝试使用调用远程函数时 它起作用了。 但是,当我尝试在本地调用它时,出现以下错误: 编辑:要在本地运行它,我使用: 我在谷歌上搜索了一下,什么也没找到。我不理解这个错误。看起来像是关于maven的?

  • 我正在尝试使用TypeScript项目导入 React 上的字体文件,但它无法将其识别为字体文件,而是将其视为模块 文件夹结构: 在我的index.tsx文件中,我导入了我需要的字体,并导出了字体常量: 我使用url-loader(我也尝试使用file-loader)。这是我的webpack.config.ts 这是我得到的错误: 此问题的原因可能是什么?

  • 目前参与的项目中会写一些 RPC 接口供其他服务调用,但是我发现这些接口也可以以 sdk 的方式提供给其他服务调用,但是为什么不用 sdk 的方式提供呢?

  • 我正在尝试修改一个插件(Pikaday)并添加我自己的一点点功能。 这个插件是使用原型系统构建的,我在其中添加了我的函数。 我很难理解的是如何实际触发这个方法。单击指定的元素不起作用。 如果有人感兴趣,这里有完整的代码(减去我的加法)。

  • 我正在尝试使用Microsoft Azure Storage Explorer在本地创建Blob容器。如图所示,我不断出现错误。我正在使用(模拟器-默认端口)(键)-