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-CSS 和 configuration 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-CSS 或 SVG 配置的块(请参见 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_HTMLorMML , TeX-AMS-MML_SVG 和 TeX-MML-AM_HTMLorMML . 见 common configurations 详细信息。
改进了对屏幕阅读器的支持
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字体(可选)。这是由mtextFontInerhitHTML-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强制通常被跳过的标记处理其内容。这个 noErrors 和 noUndefined 现在可以通过配置选项禁用扩展(因为它们包含在许多组合的配置文件中)。见 noErrors 和 noUndefined 部分 TeX support 有关详细信息,请参见第页。
有一种新的
MathJax.Hub.setRenderer()可用于切换当前渲染器的函数。见 MathJax Hub API 有关详细信息的文档。如果加载了重新定义该宏的扩展,则不再覆盖用户定义的宏。
提高了web字体检测的可靠性。
以前版本的重要更改
Firefox的默认呈现程序已从 NativeMML 到 HTML-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事件已发生,如果已发生,则不会尝试等待DOMContentLoaded或onload事件,然后再执行其初始的排版传递。这意味着不再需要打电话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.添加
⁡之后\mathop{{}}以及其他作为函数的宏(例如,\sin)这个
MathJax_Preview样式已从HTML-CSS/jax.js到MathJax.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具有fontstyle或fontweight(根据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-CSS 和 SVG 输出。
固定的 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,所以即使它们是配置,它们也不属于那里)。确保被盗用的大型操作是
OP不ORD以获得正确的间距。补充
MathJax.HTML.getScript()获取脚本的内容(这是必需的,因为它在不同浏览器中的工作方式不同)。移动代码,防止将数字视为 TeX 输入jax(防止对
\text{{}},\hbox{{}},\href{{}}等)。制作 mml2jax 更好地使用ie名称空间(ie9似乎不再列出
xmlns上的条目<html>元素)。