托管您自己的mathjax副本

如果可以,我们建议您使用cdn服务,但您也可以在自己的服务器上或本地硬盘上安装mathjax。如果你是 creating a custom build 例如,如果您希望离线使用mathjax。

获取mathjax代码

为了托管您自己的mathjax版本,必须首先获得mathjax代码的副本。有几种方法可以做到,最简单的是 npm (节点包管理器),或 git 从其github开发库中获取mathjax。

通过npm获取mathjax

要在项目中包含mathjax,请使用以下命令

npm install mathjax@3

这将在中安装mathjax node_modules/mathjax 当前目录的子目录。它将包括 node_modules/mathjax/es5 目录。(请注意,使用 mathjax@3 ,因为我们仍在制作v2版本,因此最新的mathjax npm包可能不是v3版本。这个 latest 版本打开 npmjs.com 似乎是按时间顺序而不是按版本号。)

如果你也需要访问源代码。然后使用

npm install mathjax-full@3

将mathjax安装在 node_modules/mathjax-full 子目录,中组件的源文件 node_modules/mathjax-full/components/src ,中mathjax的typescript源文件 node_modules/mathjax-full/ts ,以及 node_modules/mathjax-full/js .

通过git获取mathjax

要从github组件存储库获取mathjax的副本,请使用以下命令

git clone https://github.com/mathjax/MathJax.git mathjax

这将在 mathjax/es5 目录。

如果还需要访问源代码,请使用

git clone https://github.com/mathjax/MathJax-src.git mathjax

它将在 mathjax 当前目录的子目录。您需要编译typescript源文件并手工构建组件文件,因为它们不是存储库本身的一部分。为此,请执行以下操作:

cd mathjax
npm install
npm run compile
npm run make-components
cd ..

这将从 mathjax/tsmathjax/js 目录,然后将从 mathjax/components/src 进入 mathjax/es5 目录。

使文件可用

使用上述方法之一获取mathjax文件后,需要在web服务器上提供适当的文件。注意,服务器上不需要mathjax发行版中的大多数文件。例如, mathjax/ts 目录是mathjax的typescript源代码,它被编译成 mathjax/js 目录。但即使这些文件也不是你想要的服务器上的文件。这些javascript文件进一步处理到存储在 mathjax/es5 使用中的数据的文件 mathjax/components/src 目录。

它是 mathjax/es5 要在服务器上提供的目录,因为这些文件是由提供mathjax的cdn提供的。您应该将它们移动到服务器上方便的位置。这可能是一个名为 mathjax 例如。

链接到您的mathjax副本

您可以通过将mathjax

<script src="path-to-MathJax/tex-chtml.js" id="MathJax-script" async></script>

在你的文档中 <head> 块。在这里, tex-chtml.js 是您正在加载的组合组件,这只是一个示例;您需要选择要使用的组件。请参阅 配置和加载mathjax 了解更多详细信息。

这个 path-to-MathJax 应该替换为主mathjax目录的url,因此如果您已经将 mathjax/es5 服务器网站顶层的目录,并将其命名为 mathjax 你可以使用

<script src="/mathjax/tex-chtml.js" id="MathJax-script" async></script>

在页面中加载mathjax。例如,您的页面可能看起来像

<html>
    <head>
        ...
        <script src="/mathjax/tex-chtml.js" id="MathJax-script" async></script>
    </head>
    <body>
        ...
    </body>
</html>

共享服务器上的字体

通常,您希望将mathjax安装在与使用mathjax的网页相同的服务器上。但是,有时这可能不切实际,或者您希望在其他站点使用mathjax安装。例如,位于 www.math.yourcollege.edu 可能想在大学范围内安装 www.yourcollege.edu 而不是在部门机器上安装单独的副本。mathjax当然可以从另一个服务器加载,但有一个重要的注意事项——跨域脚本的同源安全策略。

一些浏览器(例如,Firefox)对同源策略的解释比大多数其他浏览器更严格,并且它影响字体如何加载 @font-face css指令。mathjax的commonhtml输出模式使用此指令,当用户没有在自己的计算机上本地安装基于web的数学字体时,将它们加载到页面中。然而,这些浏览器的安全策略只允许当字体来自与网页本身相同的服务器时才允许这样做,因此,如果您从不同的服务器加载mathjax(及其web字体),它们将无法访问这些web字体。在这种情况下,mathjax的commonhtml输出模式将不会显示正确的字体。

但是,如果您管理安装mathjax的服务器,并且该服务器运行apache web软件,则有一个解决方案。在远程服务器的mathjax文件夹中,创建一个名为 .htaccess 包含以下行:

<FilesMatch "\.(ttf|otf|eot|woff)$">
<IfModule mod_headers.c>
Header set Access-Control-Allow-Origin "*"
</IfModule>
</FilesMatch>

并确保权限允许服务器读取此文件。(文件名以句点开头,这导致它在基于unix的操作系统上是一个“不可见”的文件。有些系统,特别是那些具有图形用户界面的系统,可能不允许您创建此类文件,因此您可能需要使用命令行界面来完成此操作。)

此文件应使其他站点的页面能够从该服务器加载mathjax,从而使firefox(以及应用于字体的具有类似同源策略的其他浏览器)能够下载基于web的字体。如果要限制可以访问Web字体的网站,请更改 Access-Control-Allow-Origin 行到如下内容:

Header set Access-Control-Allow-Origin "http://www.math.yourcollege.edu"

所以只有几页 www.math.yourcollege.edu 将能够从该网站下载字体。有关详细信息,请参阅“打开字体库”中有关Web字体链接的讨论。

Firefox和本地字体

如上所述,firefox的同源安全策略会影响其加载基于web的字体的能力。这不仅意味着要跨域加载mathjax,还意味着要从硬盘本地使用mathjax。Firefox对本地文件的同源策略的解释是,页面的“同一域”是该页面存在的目录或其任何子目录。这使得mathjax可以从加载web页面的director的子目录中加载。

Firefox从68版开始并一直向前(参见 their documentation )现在没有相同的起源 file:// url(从 file:// URL是唯一的)。

这意味着在firefox中使用mathjax和mathjax的本地副本的选项是有限的。最简单的选择是使用svg输出渲染器而不是commonhtml输出,因为这不需要加载字体,所以避免了相同的源代码问题。或者,您可以将mathjax-tex字体安装为系统字体,这样firefox就不必尝试将它们加载为web字体。

这对mathjax来说是一个不幸的限制(尽管我们理解他们的推理),但这是firefox的安全模型强加的一个限制,mathjax无法规避。目前,这对其他浏览器来说并不是问题,尽管不能保证将来不会出现。