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字体(可选)。这是由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
强制通常被跳过的标记处理其内容。这个 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>
元素)。