mathjax v2.0的新功能

mathjax版本2.0包含许多新的和改进的特性,包括在internet explorer中更快的速度、一个新的ascimath输入处理器、一个新的 SVG 输出处理器、对附加 Latex 命令的支持以及许多错误修复,仅举几个更改。

HTML-CSS输出的主要速度改进,特别是在IE中

重新设计了HTML-CSS输出处理,以避免在Internet Explorer 8和9中造成速度问题的主要原因是页面回流。对于具有20到50个排版表达式的测试页,我们看到ie8的输出处理时间减少了80%,ie9的输出处理时间减少了50%,而大多数其他浏览器的输出处理时间比相应的v1.1a时间减少了15%到25%。由于在IE中,v1.1a中的处理时间是非线性增长的,因此在使用v2.0时,您应该会看到使用更多公式的页面节省了更多的时间。强制IE7仿真模式不再是必要的(实际上也不再是推荐的)。

减少了定型过程中的闪烁

在过去,每个表达式一排版就显示出来,这在mathjax处理页面时会导致大量的视觉闪烁。在v2.0中,输出是分块处理的,以便分组显示排版表达式。这减少了视觉干扰,也加快了处理速度。块中的方程数可以通过 EqnChunk 配置的html-css或svg块中的参数。见 configuration options for HTML-CSSconfiguration options for SVG 页面了解详细信息。

如果页面url包含散列引用(指向页面中特定位置的链接),mathjax v2.0将在页面完成类型设置后跳转到该位置。(由于页面的大小可能由于数学类型设置而更改,因此该位置可能不再在屏幕上可见,因此mathjax在完成初始排版时移动到该位置。)可以使用 positionToHash 配置的主部分中的参数。见 core configuration options 详细信息请参见第页。

tex公式的自动公式编号

tex input jax现在可以配置为添加等式号(尽管默认设置不是对等式进行编号,这样现有页面就不会改变它们的外观)。这是通过 equationNumbers 剖面图 TeX 配置的块(请参见 equation numbering 有关详细信息,请参见第节)。您可以要求编号遵循环境的AMS样式编号,也可以要求对每个显示的方程式进行编号。现在有了 \label\ref\eqref 使链接到文档中的特定公式更容易的命令。

长显示方程的自动断线

mathjax现在实现了mathml3规范,用于在其html-css输出中自动断开显示的表达式。这在默认情况下是禁用的,但可以通过 linebreaks 剖面图 HTML-CSSSVG 配置的块(请参见 automatic line breaking 有关详细信息,请参见第节)。请注意,自动换行仅适用于显示的公式,而不适用于内联公式,除非它们本身比一行长。该算法利用嵌套深度、算子类型、空间大小等因素来确定断点,但不知道数学意义,不能选择最优断点。我们将继续研究该算法,因为我们从实际使用中获得信息。

新的ascimath输入jax和svg输出jax

mathjax当前处理 TeX and LaTeX format, or MathML notation; version 2.0 augments that to include AsciiMath notation (see the ASCIIMathML home page 有关此格式的详细信息)。这是一种比tex更容易让学生使用的符号,已经被用户社区要求。见 AsciiMath support 详细信息请参见第页。

除了v1.1中提供的html-css和本机mathml输出之外,mathjax v2.0还包括 SVG -基于输出的jax。这应该比html-css输出更可靠,因为它避免了html-css输出所遇到的一些css、web字体和打印问题,而且它目前没有依赖于浏览器的代码。svg模式甚至可以在一些电子书阅读器中使用(比如apple ibooks和calibre)。见 output formats 有关详细信息的文档。

新的组合配置文件

包含ascimath和svg处理器的预定义配置文件现在可用于mathjax v2.0。其中包括 AM_HTMLorMMLTeX-AMS-MML_SVGTeX-MML-AM_HTMLorMML . 见 common configurations 详细信息。

mathjax上下文菜单现在在移动设备上可用

mathjax v2.0提供了在基于webkit(safari)和gecko(firefox)引擎的移动设备中访问其上下文菜单的权限。对于mobilefox,通过点击并按住mathjax呈现的任何表达式(这是mobilefox触发上下文菜单的标准方法)可以访问菜单。在Mobile Safari中,使用双击并按住(可能需要放大一点才能完成此操作)。这是为移动设备提供更好接口的第一步。

改进了对屏幕阅读器的支持

mathjax v2.0解决了屏幕阅读器的使用及其与mathplayer的交互问题。特别是,还有一些额外的菜单项允许用户更好地控制mathjax界面的某些方面,这些方面干扰了某些屏幕阅读器正确识别数学的能力。与mathplayer有关的几个稳定性问题也得到了解决。在安装了mathplayer的internet explorer中,现在有了一个新的上下文菜单项,允许您指定mathjax处理哪些事件以及mathplayer应处理哪些事件。这使您可以更好地控制mathplayer与某些屏幕阅读器的交互。

许多新的tex添加和增强

  • 新的 mhchem 化学扩展(添加 \ce\cf\cee 宏指令)

  • 新的 cancel 扩展(添加 \cancel\bcancel\xcancel\cancelto 宏指令)

  • 新的 extpfeil 扩展(添加更多弹性箭头)

  • 新的 color 扩展(品牌 \color 作为开关工作,如 Latex )。添加 \definecolor ,其他颜色模型, Latex 命名颜色, \colorbox\fcolorbox 等。

  • 新的 begingroup 允许宏定义本地化的扩展。添加 \begingroup\endgroup 用于隔离宏声明,并定义 \let\renewenvironment\global\gdef .

  • 新的 enclose 允许Tex访问的扩展 <menclose> 元素。添加 \enclose{{type}}[attributes]{{math}} 宏。

  • 新的 action 允许Tex访问的扩展 <maction> 元素。添加 \mathtip{{math}}{{tip}}\texttip{{math}}{{tip}}\toggle{{math1}}{{math2}}...\endtoggle 宏。

  • 新的 \mmToken{{type}}[attributes]{{text}} 用于生产的宏 <mo><mi><mtext> ,以及其他直接标记mathml元素。

  • 新的 \bbox[color;attributes]{{math}} 宏添加背景色、填充、边框等。

  • 新的 \middle 宏,用于在 \left\right .

  • 新的 \label\ref\eqref 用于编号公式的宏。

  • 更好地实施 \not 因此,它在可能的情况下生成适当的mathml。

  • 更好地实施 \dots 那选择 \ldots\cdots 取决于上下文。

  • 更好地实施 \cases 自动使用 \text 在每行的第二个条目上。

  • 更安全地实施 \require 只允许从扩展目录加载。

  • 允许 \newcommand 提供默认参数。

  • 允许 \\ 获取指定行之间额外空间的可选参数。

  • 允许 \\ 用于任何地方(强制换行),而不仅仅是在数组中。

  • 允许对阵列、对齐和收集的环境使用可选的对齐参数。

TeX support 有关这些扩展和宏的详细信息,请参见第页。

字体增强

  • 解决OS X Lion Stix字体问题。

  • 支持Stix-1.1字体(检测您拥有的版本,并使用适合该版本的数据)。

  • 新的woff版本的web字体(更小,下载速度更快)。

  • HTML-CSS输出中更多弹性字符的数据。

  • 在HTML-CSS输出中添加对Unicode平面1到10(不仅仅是数学字母块)的支持。

  • 增加了web字体的超时(因为它太频繁地切换到图像字体,特别是移动设备)。

  • 只有在第一个web字体加载失败时才切换到图像字体(如果我们可以访问其中一个字体,则假设我们可以访问所有字体)。

  • 允许 <mtext> 元素来使用页面字体而不是mathjax字体(可选)。这是由 mtextFontInerhit HTML-CSS和SVG输出JAX的配置参数。

  • 对不在mathjax字体中的字符使用的字体提供更好的控制。

  • 当本地url使用cdn中的mathjax时,允许firefox使用基于web的字体(在过去,当不需要时,它会强制使用图像字体)。

接口改进

  • mathjax上下文菜单已经重新组织,以便更容易获得源代码视图,并在ie中控制mathplayer的参数。

  • mathjax上下文菜单在移动设备中可用(请参阅上面的描述)。

  • 如果将渲染器切换到不适合浏览器的渲染器,则会发出警告消息。

  • mathjax现在开始处理 DOMContentLoaded 事件而不是页面 onload 事件(这允许数学更快地出现)。

  • 本机mathml输出现在被缩放以更好地匹配周围的字体(就像html-css输出一样)。

  • 更好的css样式,用于firefox中的nativemml输出,以便处理 \cal 以及其他字体。

  • mathml输出现在(可选)包括类名,以帮助标记由tex输入jax生成的特殊情况。(这使“显示源”菜单项中的mathml可以更好地再现原始tex输出。)

  • mathjax现在在初始排版之后加载菜单和缩放代码(如果它们还没有加载的话),这样当用户需要这些功能时,它们将立即可用,但不要延迟数学的初始排版。

  • 对于 tex2jax 预处理器 processClass 现在可以用来覆盖 skipTags 强制通常被跳过的标记处理其内容。

  • 这个 noErrorsnoUndefined 现在可以通过配置选项禁用扩展(因为它们包含在许多组合的配置文件中)。见 noErrorsnoUndefined 部分 TeX support 有关详细信息,请参见第页。

  • 有一种新的 MathJax.Hub.setRenderer() 可用于切换当前渲染器的函数。见 MathJax Hub API 有关详细信息的文档。

  • 如果加载了重新定义该宏的扩展,则不再覆盖用户定义的宏。

  • 提高了web字体检测的可靠性。

以前版本的重要更改

  • Firefox的默认呈现程序已从 NativeMMLHTML-CSS (在这两种配置之间进行选择)。唯一默认为 NativeMML 现在安装了mathplayer。您可以使用 MMLorHTML configuration options .

  • NativeMML 现在,当mathplayer出现时,输出将在ie9中被选中(因为ie9与mathjax v1.1a发布在同一天,并且ie9的beta版本出现了问题,所以我们不确定mathplayer是否能与正式版本一起工作,因此默认情况下没有选择nativemml)。

  • IE8和IE9的性能改进现在使得不必使用 <meta> 标记以强制IE7仿真模式。事实上,IE9标准模式下的IE9比IE7标准模式下的IE9运行得更快,IE8标准模式下的IE8与IE7标准模式下的IE8相当。我们现在建议您使用

    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    

    以获得ie中可用的最高仿真模式,这将是mathjax 2.0中最快的一种。

  • 这个 tex2jax 当寻找结束的数学分隔符时,预处理器现在平衡大括号。它允许像

    $y = x^2 \hbox{ when $x > 2$}$
    

    正确解析为单个数学表达式,而不是两个带有不平衡大括号的单独数学表达式。旧的行为可以通过设置 balanceBraces 欺骗 tex2jax 配置的块。(见 tex2jax configuration options 详情。

  • 如果您在服务器上托管自己的mathjax副本,并且该副本正从不同域中的页面使用,那么您将为字体目录设置访问控制参数,以允许firefox正确访问字体文件。由于mathjax 2.0包含woff格式的字体,因此需要包括 woff 在您的字体访问控制声明中。例如,使用:

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

    ``.htaccess` file for the `` mathjax/fonts``目录,如果您使用的是apache web服务器。见 Notes about shared installations 有关详细信息。

  • 这个 \cases 宏现在正确地将第二列置于文本模式而不是数学模式。在过去,需要使用 \text 在第二列中获得正确的结果;执行此操作的页面在v2.0中仍然可以正常工作。需要调整利用第二列中数学模式的页面。

  • 这个 \dots 宏现在产生 \ldots\cdots 取决于上下文(在过去, \dots 总是生产 \ldots

  • 在HTML-CSS和SVG输出的上方和下方添加了一个一个像素的填充,这样段落的连续行上的数学就不会互相碰撞。

  • 有一种新的 MathPlayer 的子菜单 Math Settings mathjax上下文菜单中的菜单,允许用户控制传递给mathplayer的事件。这样可以更好地控制那些使用诸如屏幕阅读器等辅助设备的用户。当菜单事件被传递给mathplayer时,可以通过alt单击一个类型集表达式来获得mathjax菜单(这样用户仍然可以访问mathjax的其他特性)。

  • 为了在安装mathplayer时提高ie的稳定性,mathjax现在添加了mathplayer在首次加载mathjax时所需的名称空间和对象绑定,而不是等待 NativeMML 要加载的输出jax。因为这是在获取配置信息之前,所以无论 NativeMML 请求输出jax。这意味着ie可能会要求用户允许使用mathplayer,并且可能会显示mathplayer启动对话框,即使mathplayer最终不是由mathjax使用的。注意,只有当mathjax作为初始web页面的一部分显式加载时,才能执行此设置;如果稍后通过添加 <script> 动态地标记页面,然后在 NativeMML jax像以前一样加载,如果将事件传递给mathplayer,可能会出现一些稳定性问题。

  • mathjax排版现在开始于 DOMContentLoaded 而不是在页面上 onload 事件,如果可能的话,这意味着mathjax可能比以前更早地开始排版页面。例如,这样可以加快一页的排版速度,其中包含大量图像或边栏内容。

  • mathjax现在试图确定页面是否 onload 事件已发生,如果已发生,则不会尝试等待 DOMContentLoadedonload 事件,然后再执行其初始的排版传递。这意味着不再需要打电话 MathJax.Hub.Startup.onload() 如果动态地将mathjax插入页面(例如,从greasemonkey脚本)。

  • 如果页面url包含散列引用(指向页面中特定位置的链接),mathjax v2.0将在页面完成类型设置后跳转到该位置。由于页面的大小可能由于数学类型设置而改变,因此该位置在屏幕上可能不再可见,因此mathjax在完成初始排版时会移动到该位置。你可以用 positionToHash 配置的主要部分中的参数(请参见 core configuration options

  • 如果mathjax无法加载您在加载的脚本标记中指定的配置文件 MathJax.js 通过 config=filename ,它将不再发出有关缺少配置的警告消息。配置过程在v1.1中发生了变化,这条消息是为了帮助页面维护人员更新他们的配置,但事实证明,对于网络连接速度慢的用户,mathjax可能会超时等待配置文件,并在这种情况下发出警告消息,即使是though页面包含正确的配置。在mathjax v2.0中不应该再出现这种情况。

其他增强功能

  • 在输入jax上为startuphook、messagehook、loadhook、预处理器和pre-and-post过滤器使用按优先级排列的回调列表。

  • 更新了与当前W3C版本对应的运算符词典。

  • 改进了gecko和webkit浏览器的浏览器检测。

  • 为所有输入jax生成前置过滤器和后置过滤器,并将它们生成钩子列表而不是单个钩子。

  • 使用 <mi> 而不是 <mo> 对于 \sin\cos ,以及其他此类功能,用于 \mathop{{\rm...}}\operatorname .

  • 添加 &ApplyFunction; 之后 \mathop{{}} 以及其他作为函数的宏(例如, \sin

  • 这个 MathJax_Preview 样式已从 HTML-CSS/jax.jsMathJax.js ,因为它对所有输出都是通用的。

  • 这个 autobold 扩展现在使用 \boldsymbol 而不是 \bf 从而影响更多的角色。

  • 制作单位 mu 是相对于脚本级别的。

  • 重新组织事件处理代码,使其更模块化,并减少不同输出jax中的冗余。

  • 在中修改css NativeMML Firefox使用Web字体的本地副本(如果可用)的输出。

  • 错误消息现在具有mathjax上下文菜单。

  • 更好地处理一些不在web字体中的字符(如果可能,重新映射到它们存在的位置)。

  • 在某些情况下,更好地选择重音字符。

  • 更好地处理伪脚本(如素数)。

  • 通过 \unicode{{}} ,或者在mathjax已知的字体之外。

  • 提供一个新的扩展以更好地处理 HTML-CSS 当有可能减少可用于显示公式的区域的浮动元素时输出。(请参阅 output formats 详细资料。)

  • 使用文本字体 \it 而不是数学斜体,所以间距更好。

  • 更好地处理斜体校正 HTML-CSS 输出

  • 把手 href 属性更好,特别是在启用时 <math> 元素。

  • 允许 \sqrt\frac{{}}{{}} 不会产生错误。

其他错误修复

  • mathplayer设置已更改以防止崩溃。

  • 移动的重新映射 <mo> 内容到输出jax,这样原始内容就不会更改。

  • 不要合并 mathvariant 具有 fontstylefontweight (根据mathml规范)。

  • 隔离mathml元素上的非标准属性,以便它们不会干扰mathjax的内部工作。

  • 正确处理merrors中的边框和填充宽度 HTML-CSS 输出。

  • 正确处理小写希腊文更好。

  • 正确处理未知字符的权重和样式。

  • 固定间距问题 \cong 使用mathjax web字体。

  • 选择更好的尺码 \widehat\widetilde

  • 修复了在屏幕宽度较小的移动设备中使用时检测em/ex大小的问题。

  • 当尺寸为 mu 's用于tex输入。

  • 更好地处理来自tex的表边框。

  • 修正了一些有关表格宽度、高度和间距的问题。

  • 更好地处理彩色背景 HTML-CSS 输出。

  • 更好地处理边框和填充css样式 HTML-CSS 输出。

  • 修复了多行环境在 TagSide 设置为 right .

  • 在公式排版后强制回流,以便在firefox和webkit浏览器中更正表中的某些呈现问题。

  • 修复了缩放框大小及其内容大小的一些错误。

  • 将带有标记的公式缩放到全宽缩放框中以容纳标记。

  • 修正了在NativeMML模式下缩放框的定位问题。

  • 不允许在缩放的数学上使用鼠标事件。

  • 固定的 MathJax.Hub.getJaxFor()MathJax.Hub.isJax() 为了正确地处理作为输出jax输出一部分的元素(特别是,您可以从输出中的任何dom元素中找到元素jax)。

  • 修复了一些字体异常(数据文件中的问题)。

  • 解决了以下问题: <mspace> 使用背景色并不总是覆盖以前的项目。

  • 修复了有色的问题 <mspace> 在ie/quirks模式下元素太高。

  • 解决了以下问题: <mtable> 具有 equalrows="true" 不会产生相等高度的行。

  • 允许 <mpadded> 当明确给出一个维度(或没有内容)时,精确指定背景色(即,没有1px填充)。

  • 避免Firefox中悬停缩放触发器的闪烁问题。

  • 固定 \unicode 包含空格的字体名错误。

  • 根据mathml规范删除标记元素中的内部多个空格。

  • 解决HTML5移除名称空间的问题,以便 xmlns:xlink 变成 xlink 没有名称空间,这会混淆xml解析器。

  • 固定 MathJax.Message.Set()MathJax.Message.Clear() 以便正确处理0的延迟。

  • 生成更好的mathml \bmod\mod\pmod .

  • 不允许Safari/Windows使用Stix字体,因为它无法访问Plane1(数学字母)中的字符。

  • 固定 \thickapprox 在中使用正确的图示符 HTML-CSS 使用mathjax web字体输出。

  • 使样式属性起作用 <mstyle> 元素。

  • 更好地处理 HTML-CSS 输出。

  • 修正了大小为 \: 空间。

  • 允许分隔符 .\genfrac (不小心被拒绝了)。

  • 更好地处理带星的amsmath控制序列 (\cs{{*}} 不再算作 \cs*

  • 修复了弹性数据中的错误字符数 U+221A .

  • 固定的 <annotation-xml> 使用适当的比例 HTML-CSS 输出。

  • 修复了将字符用作重音时组合字符的问题。

  • 修复了Firefox中的一个问题 \mathchoice 当内容宽度为负时。

  • tex输入jax不再错误组合 <mo> 具有不同变体、样式、类或ID的元素。

  • 修正了 scriptlevel 什么时候? <munderover> 以…为基础 movablelimits="true" 在非显示模式下。

  • 修正了 SimpleSUPER .

  • 修正了自动关闭标志中的错误 <mprescript> 标签。

  • 如果某个jax未能加载(由于编译失败或等待加载超时),请防止无限循环。

  • 修复了在 MathML 输入JAX。

  • 在制定空间和规则时,确保高度高于深度 HTML-CSSSVG 输出。

  • 固定的 HTML-CSS 当工具提示中发生重新启动时,工具提示将正常工作。

  • 修正了彩色背景的大小问题 <mo> 在某些情况下 HTML-CSS 输出。

  • 制作 \ulcorner 等等,使用更合适的unicode位置,并将这些位置重新映射到mathjax web字体中的位置。

一些技术变化

  • 将处理阶段分成两个独立的阶段,分别进行输入处理和输出处理(它们以前是交错的)。这使得为 \ref 宏。

  • 制作 Font Preference 菜单荣誉 imageFont 设置。

  • 将预览筛选器命令的名称更改为 previewFilter 在所有预处理器中。

  • 制作 ^_ 即使W3C字典里没有,也要有弹性。

  • 固定的 HTML-CSS 当多字符标记元素包含从多个字体中提取的字符时出现输出问题。

  • 在字体警告和配置警告中强制消息文本为黑色。

  • 补充 Find()IndexOf() 用于定位菜单项的菜单命令。

  • 添加了用于发布/取消发布和激活菜单项的菜单信号。

  • 为未知字符的排版添加信号。

  • 添加了缩放/取消缩放信号。

  • 为错误情况添加了更多信号。

  • 允许首选项为版本足够晚的Safari选择MathML输出。

  • 改进 About MathJax 盒子。

  • tex2jax 处理空的分隔符数组,如果找不到任何内容,则不扫描页。

  • 延迟 processing 消息可配置并延长它,使浏览器在排版时更具响应性。

  • 使细规则以像素为单位,以尝试改善ie(消失的分割线)中的结果。

  • 将所有输出元素标记为 isMathJax ,所以它可以用来识别哪些元素是数学输出的一部分。

  • 强制MathZoom和MathMenu等待 Begin Styles 在插入样式之前发送消息,因此当它们包含在组合文件中时,作者仍然可以配置它们。

  • 向jax基本对象类添加默认id。

  • 将顶级数学元素标记为具有 texError 当它是一个(使它更容易识别)。

  • Update() 方法要求elementjax确定它是否需要更新(进而要求相关的输入jax)。

  • 制作 Remove() 如果需要,只清除输出(不分离)。

  • 让elementjax存储输入和输出jax id而不是指针(以帮助避免用于清理目的的循环引用)。

  • 将输入/输出jax和预处理器注册表从 Hub.config 集线器本身(用户无法通过 Hub.Config ,所以即使它们是配置,它们也不属于那里)。

  • 确保被盗用的大型操作是 OPORD 以获得正确的间距。

  • 补充 MathJax.HTML.getScript() 获取脚本的内容(这是必需的,因为它在不同浏览器中的工作方式不同)。

  • 移动代码,防止将数字视为 TeX 输入jax(防止对 \text{{}}\hbox{{}}\href{{}} 等)。

  • 制作 mml2jax 更好地使用ie名称空间(ie9似乎不再列出 xmlns 上的条目 <html> 元素)。