加载程序选项

这个 loader 组件负责加载请求的mathjax组件。它使用 loader 在mathjax配置对象中阻止。这个 loader 块还可以包含各个组件的配置选项的子块,如下所述 组件配置 .


配置块

在下面的例子中, Loader 代表 MathJax.loader 对象,为了简洁。

MathJax = {
  loader: {
    load: [],                                    // array of components to load
    ready: Loader.defaultReady.bind(Loader),     // function to call when everything is loaded
    failed: function (error) {                   // function to call if a component fails to load
      console.log(`MathJax(${error.package || '?'}): ${error.message}`);
    },
    paths: {mathjax: Loader.getRoot()},          // the path prefixes for use in specifying components
    source: {},                                  // the URLs for components, when defaults aren't right
    dependencies: {},                            // arrays of dependencies for each component
    provides: {},                                // components provided by each component
    require: null,                               // function to use for loading components
    pathFlters: []                               // functions to use to process package names
  }
};

选项说明

load: []

此数组列出要加载的组件。如果使用组合组件文件,则可能不需要请求任何其他组件。如果您使用 启动 组件,则需要列出要加载的所有组件。

ready: MathJax.loader.defaultReady.bind(MathJax.loader)

这是在成功加载所有组件时调用的函数。默认情况下,它只是调用 启动 组件的 ready() 功能,如果有的话。你可以用自己的函数覆盖它,可以调用 MathJax.loader.defaultReady() 做了你需要做的任何事情之后。也见 组件配置 有关如何绑定到要加载的单个组件的部分。

failed: (error) => console.log(`MathJax(${error.package || '?'}): ${error.message}`)}

如果一个或多个组件未能正确加载,则调用此函数。默认情况是将消息打印到控制台日志中,但是可以重写它以捕获mathjax组件中的加载错误。也见 组件配置 下面一节介绍如何捕获单个组件错误。

paths: {mathjax: Loader.getRoot()}

此对象将路径前缀链接到它们的实际位置。默认情况下, mathjax prefix is predefined to be the location from which the MathJax file is being loaded. You can use [mathjax]/... 若要标识组件,则此前缀会自动为任何尚未具有前缀的组件添加前缀。例如, input/tex 将成为 [mathjax]/input/jax 自动地。

当TeX 要求 加载了扩展名,另一个 tex 创建路径是为了能够加载各种tex扩展。

您可以定义自己的前缀,例如,

MathJax = {
  loader: {
    paths: {custom: 'https://my.site.com/mathjax'},
    load: ['[custom]/myComponent']
  }
};

它定义了 custom 可用于访问自定义扩展名的前缀。url甚至可以指向不同的服务器,而不是加载主mathjax代码的服务器,因此您可以托管自己的自定义扩展,并且仍然对主mathjax代码使用cdn。

您可以根据需要定义任意多个不同的路径。注意,路径可以引用其他路径,因此您可以

MathJax = {
  loader: {
    paths: {
      custom: 'https://my.site.com/mathjax',
      extensions: '[custom]/extensions'
    },
    load: ['[extensions]/myExtension']
  }
};

定义 extensions 前缀 custom 前缀。

source: {}

此对象允许您覆盖组件的默认位置,并在逐个组件的基础上提供特定位置。例如:

MathJax = {
  loader: {
    source: {
      'special/extension': 'https://my.site.com/mathjax/special/extension.js'
    },
    load: ['special/extension']
  }
};

给出获取 special/extension 组件。

dependencies: {}

此对象将组件名称映射到必须在给定名称之前加载的组件名称数组。这个 启动 组件使用mathjax组件之间的依赖关系预先填充此对象,但是如果您使自定义组件依赖于其他组件,则可以添加自己的依赖关系。例如,如果您创建了一个依赖于另一个tex组件的自定义tex扩展,则需要指示该依赖关系,以便如果您的扩展是通过 \require 例如,加载程序将首先自动加载依赖项。

MathJax = {
  loader: {
    source: {
      '[tex]/myExtension: 'https://my.site.com/mathjax/tex/myExtension.js'},
    },
    dependencies: {
      '[tex]/myExtension': ['input/tex-base', '[tex]/newcommand', '[tex]/enclose']
    }
  }
};

这会导致 新命令随函附上 在加载扩展之前要加载的组件,并且将从给定的url加载扩展,即使您可能从cdn获取mathjax。

provides: {}

此对象指示由可能包含多个子组件的组件提供的组件。例如, input/tex 组件加载 新命令 组件(以及其他几个组件),因此 provides 对象表示通过

loader: {
  provides: {
    'input/tex': [
      'input/tex-base',
      '[tex]/ams',
      '[tex]/newcommand',
      '[tex]/noundefined',
      '[tex]/require',
      '[tex]/autoload',
      '[tex]/configmacros'
    ]
  }
}

这个 启动 组件使用mathjax组件之间的依赖项预先填充此对象,但是如果定义了包含其他组件的自定义组件,则可能需要声明它提供的组件,以便如果其他组件将其中一个组件作为依赖项,则该依赖项将不再加载(因为您的代码已经包含它)。

例如,如果您的自定义组件 [tex]/myExtension 取决于 新命令随函附上 组件,然后

MathJax = {
  loader: {
    source: {
      '[tex]/myExtension: 'https://my.site.com/mathjax/tex/myExtension.js'},
    },
    dependencies: {
      '[tex]/myExtension': ['input/tex-base', '[tex]/newcommand', '[tex]/enclose']
    },
    load: ['input/tex', '[tex]/myExtension']
  }
};

will load the `input/tex` component, which provides both
`input/tex-base` and `[tex]/newcommand`, and then load
`[tex]/enclose` before loading your `[tex]/myExtension`.
require: null

这是一个用于加载组件的函数。它应该接受一个字符串,该字符串是要加载的组件的位置,并且应该执行加载该组件所需的任何操作。如果加载是异步的,它应该返回一个在加载组件时解析的承诺,否则它应该不返回任何内容。如果加载组件时出错,则应抛出错误。

如果设置 null ,默认为插入 <script> 标记到加载组件的文档中。

用于 node 应用程序,将此值设置为 require ,它将使用节点的 require 加载组件的命令。例如。

MathJax = {
  loader: {
    require: require
  }
};
pathFilters: []

这是一个函数数组,用于处理组件名称,以生成用于定位组件的实际URL。有一些内置筛选器可以执行诸如转换前缀之类的操作 [tex] 添加到TeX扩展的路径,并添加 .js 名称的末尾,依此类推。如果需要以不同的方式管理URL,您可以提供自己的筛选器。该数组由条目组成,这些条目要么是将数据对象作为参数的函数,要么是由此类函数和表示其在筛选器列表中的优先级的数字组成的数组(列表中较低的数字位于较早位置)。传递给这些函数的数据对象是

{
  name: string,            // the current name for the package (this becomes the url in the end)
  original: string,        // the original package name (should not be modified)
  addExtension: boolean,   // true if .js should be added to this name at some stage in the filter list
}

过滤可以改变 name 值将其移动到更接近用于加载给定包的最终URL。这个 original 属性应为包的原始名称,并且不应修改。

该函数应返回 true 如果 name 应由列表中的其他筛选器进一步处理,并且 false 要结束处理,请使用 name 现在表示组件的最终URL。

有三个默认筛选器:一个替换 name ,它的值在 source 列表(如果有的话);通过添加 [mathjax]/ 如果已经没有前缀或协议,则添加 .js 如果没有扩展名,则使用前缀的值替换前缀。 paths 列表。它们的优先级分别为0、10和20,您可以在自己的函数中使用优先级(包括负值)将它们插入到此列表中的任何位置。


组件配置

除了上面列出的选项外,还可以在 loader 通过使用具有组件名称的子块和下面列出的任何选项来阻止。例如,

MathJax = {
  loader: {
    load: ['input/tex'],
    'input/tex': {
      ready: (name) => console.log(name + ' ready'),
      failed: (error) => console.log(error.package + ' failed')
    }
  }
};

它建立了 ready()failed()input/tex 组件加载成功或加载失败。

ready: undefined

这是一个函数,它的参数是要加载的组件的名称,并且在组件及其所有依赖项完全加载时调用。

failed: undefined

这个函数的参数是 PackageError 对象(它是 Error 加上一个额外的字段 pacakge ,正在加载的组件的名称)。当组件无法加载时调用它(这可能是因为它的一个依赖项无法加载)。

checkReady: undefined

这是一个不带参数的函数,在加载组件时但在 ready() 函数被调用。它可用于在加载组件之后、但在通知其他组件准备就绪之前进行后处理。例如,它可以用于加载其他组件;例如, output/chtml 组件可以使用其配置确定要加载的字体,然后加载该字体。如果此函数返回Promise对象,则 ready() 在承诺解析之前不会调用函数。