MathJax 3.2版的新特性

版本3.2包括许多新功能,以及对版本3.1的几个问题的错误修复。新功能如下所述。

另请参阅 release notes 获取3.2版中已修复的错误列表。


懒惰排版

虽然MathJax版本3已经比版本2快了一个数量级,但是在版本3.2中,我们提供了一个新的扩展,旨在使包含大量公式的页面执行得更好。它实现了一种“懒惰排版”方法,只在表达式进入视图时排版,这意味着当表达式不可见时不会排版。您的读者不必等待整个文档排版,这可以加快他们对页面的初始查看速度。此外,任何从未见过的表达式都不会排版。这也有助于您链接到页面中的特定位置(通过带有散列的URL);在版本2中,排版该位置上方的材料可能会导致浏览器更改滚动位置,因此用户可能无法到达页面中的正确位置。使用lazy扩展时,直到用户向上滚动时才会排版该点上方的材料,因此不会更改位置。

惰性排版最适合SVG输出,但是随着CommonHTML输出处理其样式表更新的方式的改变(下面讨论),CHTML输出几乎同样快。对于TeX输入,Lazy扩展确保之前的表达式由TeX处理(尽管不会输出到页面),以便在处理可见表达式时任何宏定义或自动公式编号都已就绪。目前,包含以下内容的文档 \ref\eqref 链接可能尚未正常工作,因为目标方程式可能尚未排版,因此可能没有在文档中标记链接位置。具体地说,前向引用不太可能起作用,而后向引用只有在目标表达式已经排版的情况下才会起作用。我们希望在未来的版本中改善这种情况。

请参阅 懒惰排版 文档,了解有关如何配置MathJax以使用此新功能的信息。


CSS更新

MathJax的CHTML输出通过将有关边界框和文本内容的信息存储在CSS样式表中,来处理页面上出现在数学中的字符。当排版额外的数学时,这个样式表可能需要更新,在以前的版本中,MathJax会用一个新的样式表替换整个样式表。这可能会导致视觉闪烁,并且可能代价高昂,因为浏览器必须重新评估所有规则并再次应用它们。在3.2版中,CHTML输出现在将规则单独添加到样式表中,因此不会替换旧规则,只需计算和应用新规则。这使得更新必须更快,这对上面描述的懒惰排版扩展特别有好处,因为随着公式滚动到视图中,页面可以多次更新。这一更改使CHTML输出几乎与使用LAZY扩展的SVG输出一样流畅。


新的特克斯包装

版本3.2包括九个新的TeX扩展包:

  • 案例 -为单独编号的案例提供环境。

  • 中心注释 -实现居中 not 命令(和非标准的 centerOver 这将一个符号放在另一个符号的中心位置)。

  • 可着色bl -提供用于给数组或对齐的单元格着色的宏。

  • 菲涅克 -用于将材质放置到具有单个公式编号的路线的左侧或右侧的环境。

  • Gensymb -为某些特定单位提供宏。

  • 数学工具 -为高级数学排版提供一系列宏和环境。

  • 设置选项 -提供从表达式中更改某些Tex Input Jax选项的功能(例如,更改标记端)。

  • 文本组件 -提供一系列用于指定各种文本字符的宏。

  • 厄普格里克 -为直立的希腊字符提供宏。

这些都包含在以 -full (并包括Tex input Jax),您可以像加载其他TeX包一样加载单独的Tex包。但是请注意,这些都不是自动加载的,尽管您可以将 autoload 如果您愿意,可以将其延期。请参阅 自动装填 有关详细信息,请参阅文档。

除了这些新软件包外,还更新了一些较旧的软件包:

  • 这个 ams 套餐现在包括 flalignxalign ,以及 xxalign 环境。此外, multline 扩展已经使其与实际的 Latex 更兼容。在过去, multline 设置为容器宽度的85%,但现在设置为100%,但两侧缩进为1em;当有标记时,标记一侧的缩进增加标记的宽度,就像LaTeX中的情况一样。宽度存储在 multlineWidth 中的配置选项 tex 配置挡路。现在已将其移动到 ams 世界上的挡路 tex 配置,并且有一个新的 multlineIndent 价值。这些设置为 100%1em 分别为。要获取旧行为,请将它们设置为 85%0 。目前,如果 multlineWidth 在主要的 tex 选项挡路,它将被移到 ams 挡路,但该向后兼容代码将在将来的版本中删除。

  • 这个 physics 包现在实现了所有宏,即使那些没有正式文档,但仍然可以在LaTeX中使用的宏也是如此。此外,它现在还实现了 italicdiffarrowdel 选项。

  • 以下宏已添加到指定的程序包中:
    • \overunderset (AMS)-组合 \overset\underset

    • \stackbin (AMS)-类似于 \stackrel 但是产生具有二元运算符间距的符号。

    • \nonscript (基本)-仅在显示和文本样式中应用以下间距。

    • \boxed (基本)-在表达式周围放置框架。

    • \framebox (基本)-在文本参数周围放置框架。

    • \ip\Bqty\qsince\Residue (物理学)-最初从物理学包中丢失。


MathML扩展

版本2的MML3扩展已经移植到版本3,并且可以在加载MathML input Jax时包括在内。此扩展实现了MathML3基本数学标记(如 <mstack><mlongdiv> )使用XSLT转换将这些标记转换为MathJax已经实现的其他表示MathML标记。这对于某些构造来说是合理的,而对于另一些构造则是较差的,但是它确实使得在MathJaxv3中处理初等数学成为可能。这是一个试验性扩展,作为权宜之计,直到这些标记在核心MathJax中完全实现。

请参阅 实验性mml3延伸 文档,了解有关如何配置MathJax以使用此新功能的信息。


资源管理器更新

MathJax辅助技术支持的语音规则引擎(SRE)已经更新到最新版本(3.3.3)。这包括对印地语的支持,以便表达式浏览器可以生成印地语语音(以及其他语言:英语、法语、德语、意大利语、西班牙语,以及Nemeth中的盲文支持)。

请参阅 SRE release notes 有关详细信息,请参阅。

此版本还将资源管理器缺少的其余功能移植到v3。这包括汇总表达式和导航表格表达式,如矩阵或方程式系统。请参阅 keyboard command 有关详细信息,请参阅文档。


其他新功能

除了上面列出的主要功能外,还有一些次要的新功能:

  • 现在可以为 textmacros Tex输入JAX的扩展。这允许您配置可以在文本模式下处理的其他宏。请参阅 文本宏 有关详细信息,请参阅文档。

  • 改进了对TeX输入中原始Unicode字符的处理。在过去,几乎所有非ASCII字符都会放在 <mo> 元素,该元素并不总是最适合使用的标记。在3.2版中,原始Unicode字符的处理更加细致入微,因此字母放在 <mi> 中的元素和其他符号 <mo> 。例如,文字希腊字母(U+03B1)将生成 <mi>&#x03B1;</mi> (这是由 \alpha )而不是 <mo>&#x03B1;</mo> 与早期版本一样。这应该会提供更好的结果,尽管可能并不是在所有情况下都是完美的。

  • 在过去,MathJax配置选项中的错误(如未知选项)会产生致命错误,MathJax不会运行。在3.2版中,此类错误现在会生成非致命警告,MathJax将继续处理其余选项(然后排版页面)。这意味着对选项的更改(如下面的中断更改部分中描述的更改)不会导致页面完全失败(尽管旧的选项不会产生任何影响)。如果愿意,您可以将MathJax配置为使此类错误再次致命,并且可以提供一个将在出现选项错误时调用的函数,以便您可以更轻松地捕获此类错误并自己处理它们。请参阅 启动选项 了解更多详细信息。

  • 组件加载器使用一组过滤器来转换组件规范(如 [tex]/physics )设置为加载扩展的完整URL。在过去,很难连接到该过滤机制,但在3.2版中,您现在可以为加载程序配置附加过滤器。请参阅 加载程序选项 文档以了解更多详细信息。


此版本中的突破性更改

为适应更新的语音规则引擎而对选项所做的某些更改可能会破坏更改,因为前面的选项 (enrichSpeecha11y.localea11y.speechRules )不再是有效选项。版本3.1.4包括将旧选项转移到新位置的代码,但在版本3.2中删除了该代码。由于选项中的错误不再是致命的(除非您将其配置为致命),因此此更改不会再导致MathJax失败,而是会在浏览器控制台中导致警告消息,因此请在那里查找此类错误报告。

类似地,自动将较旧的TeX包名称重命名为其当前全小写版本的代码(例如, configMacrosconfigmacroscolorV2colorv2 )已从3.2版中删除。如果您使用的是旧的软件包名称,则需要更新您的配置。这适用于 \require{{}} 中引用较旧名称及其名称的宏。 loader 部分中, tex.packages 数组,而 tex.autoload 挡路。

版本3.2删除了 matchFontHeight 选项,因为它只适用于CommonHTML输出,但以前在 svg 配置挡路,而不做任何事情。

版本3.2删除了 toArray() 方法从 LinkedList 类(及其子类),因此使用的任何自定义代码都应该切换为使用 Array.from(...) 而不是在名单上转来转去。

最后, Box.tsCssStyles.ts (及其关联的 .js 文件)已从 output 目录添加到 util 目录。兼容性文件放置在原始位置,以便旧代码可以继续工作,但在3.2版中已删除这些文件,因此您应该修改加载这些文件的任何自定义代码,以便从 util 目录,而不是。