News

MathJax v3.2.0 now available

The MathJax team is pleased to announce version 3.2.0 of MathJax, released earlier today. This version includes a number of new features, along with several bug fixes. The new features include a lazy-typesetting extension, better handling of adaptive CSS in the CommonHTML output, several new TeX extensions, a port of the MML3 extension from v2, and the addition of the Hindi language to the speech generation. These are described more fully below.

There are several several potentially breaking changes in this release. See the second section below for more details.

Finally, a number of bug fixes are also included in this release, as described in the last section below.



New Features in this Release

Lazy Typesetting

Although MathJax version 3 is already an order of magnitude faster than version 2, with version 3.2 we offer a new extension that is designed to make pages with large numbers of equations perform even better. It implements a “lazy typesetting” approach that only typesets an expression when it comes into view, which means that expressions will not be typeset when they are not visible. Your readers will not have to wait for the entire document to typeset, which can speed up their initial view of the page. Furthermore, any expressions that are never seen will not be typeset. This also helps with the situation where you may link to a particular location in your page (via a URL with a hash); in version 2, typesetting the material above that point can cause the browser to change the scroll position, and so the user may not end up at the proper location in the page. With the lazy extension, the material above that point is not typeset until the user scrolls upwards, and so there is no position change.

Lazy typesetting works best with SVG output, but changes (discussed below) with the way the CommonHTML output handles its stylesheet updates make the CHTML output nearly as fast. With TeX input, the lazy extension makes sure that previous expressions are processed by TeX (though not output to the page) so that any macro definitions or automatic equation numbers are in place when the visible expressions are processed. Currently, documents that contain \ref or \eqref links may not yet work properly, since target equations may not have been typeset, and so the link location may not be marked in the document. In particular, forward references are unlikely to work, and backward references will work only if the target expression has already been typeset. We hope to improve this situation in a future release.

See the lazy extension documentation for information on how to configure MathJax to use this new feature.

CSS Updates

MathJax’s CHTML output handles the characters that appear in the math on the page by storing information about their bounding boxes and text content in a CSS stylesheet. When additional math is typeset, this stylesheet may need to be updated, and in previous versions, MathJax would replace the entire stylesheet with a new one. This can cause visual flashing, and can be expensive as the browser must re-evaluate all the rules and apply them again. In version 3.2, the CHTML output now adds rules to the stylesheet individually, so the older rules are not replaced, and only the new rules must be evaluated and applied. This makes updates must faster, and is of particular benefit to the lazy-typesetting extension described above, as the page can be updated many times as equations scroll into view. This change makes the CHTML output work almost as smoothly as SVG output with the lazy extension.

New TeX Packages

Version 3.2 includes nine new TeX extension packages:

  • cases — provides environments for individually numbered cases.
  • centernot — implements a centered \not command (and a non-standard \centerOver that places one symbol centered on top of another).
  • colortbl — provides macros for coloring cells of an array or alignment.
  • empheq — an environment for placing material to the left or right of an alignment that has individual equation numbers.
  • gensymb — provides macros for some specific units.
  • mathtools — offers a range of macros and environments for advanced mathematical typesetting.
  • setoptions — provides the ability to change some TeX input jax options from within an expression (e.g., to change the tag side).
  • textcomp — provides a range of macros for specifying various text characters.
  • upgreek — provides macros for upright Greek characters.

These are all included in the components that end in -full (and include the TeX input jax), and you can load individual ones as you would other tex packages. Note, however, that none of these are autoloaded, though you can configure the autoload extension to do so, if you wish. See the autoload documentation for details.

In addition to these new packages, some of the older packages have been updated:

  • The ams package now includes flalign, xalign, and xxalign environments. In addition, the multline extension has been made more compatible with actual LaTeX. In the past, multline was set to be 85% of the container width, but now it is set to 100%, but with a 1em indent on both sides; when there is a tag, the indent on the tag side is increased by the width of the tag, as is the case in LaTeX. The width was stored in the multlineWidth configuration option in the tex configuration block. That has now been moved to the ams block in the tex configuration, and there is a new multlineIndent value. These are set to 100% and 1em respectively. To obtain the old behavior, set them to 85% and 0. Currently, if multlineWidth is found in the main tex option block, it will be moved to the ams block, but that backward-compatibility code will be removed in a future release.

  • The physics package now implements all macros, even those that are not officially documented, but are nevertheless available in LaTeX. In addition, it now implements the italicdiff and arrowdel options.

  • The following macros have been added to the indicated package:

    • \overunderset (ams) — a combination of \overset and \underset.
    • \stackbin (ams) — similar to \stackrel but produces a symbol with the spacing of a binary operator.
    • \nonscript (base) — apply the following spacing only when in display and text styles.
    • \boxed (base) — puts a frame around an expression.
    • \framebox (base) — puts a frame around a text argument.
    • \ip, \Bqty, \qsince, \Residue (physics) — originally missing from the physics package.

MathML Extensions

The MML3 extension from version 2 has been ported to version 3 and is available to be included when you load the MathML input jax. This extension implements the MathML3 elementary math tags (like <mstack> and <mlongdiv>) using an XSLT transform to convert these tags into other presentation MathML tags that MathJax has implemented. This does a reasonable job for some constructs, and a poorer job for others, but it does make it possible to process elementary math within MathJax v3. This is an experimental extension as a stop-gap measure until these tags are fully implemented within core MathJax.

See the mml3 extension documentation for information on how to configure MathJax to use this new feature.

Explorer Update

The Speech-Rule Engine (SRE) that underlies MathJax’s assistive technology support has been updated to the most recent version (3.3.3). This includes support for the Hindi language, so that the expression explorer can generate speech in Hindi (as well as its other languages: English, French, German, Italian, Spanish, together with Braille support in Nemeth).

See the SRE release notes for details.

This release also ports the remaining missing features for the explorer to v3. This includes summarising expressions and navigation of tabular expressions, like matrices or equation systems. See the explorer keyboard commands for details.

Other New Features

In addition to the major features listed above, there are some minor new features as well:

  • Packages can now be specified for the textmacros extension to the TeX input jax. This allows you to configure additional macros that can be processed within text mode. See the textmacros documentation for details.

  • Processing of raw Unicode characters in TeX input has been improved. In the past, nearly all non-ASCII characters would be placed within an <mo> element, which is not always the best tag to use. In version 3.2, processing of raw Unicode characters is more nuanced, so that letters are placed in <mi> elements and other symbols in <mo>. For example, a literal Greek alpha (U+03B1) will produce <mi>&#x03B1;</mi> (which is what is generated by \alpha) rather than <mo>&#x03B1;</mo> as in earlier versions. This should provide better results, though perhaps still not perfect in all cases.

  • In the past, errors in the MathJax configuration options (such as an unknown option) would produce a fatal error and MathJax would not run. In version 3.2, such errors now produce non-fatal warnings instead, and MathJax will continue to process the remaining options (and then typeset the page). This means that changes to the options (like those described in the breaking changes below) will not cause your pages to fail outright (though the old options will have no effect). You can configure MathJax to make such errors fatal again, if you wish, and you can provide a function that will be called when there is an option error so that you can more easily trap such errors and handle them yourself. See the startup options for more details.

  • The component loader uses a set of filters to convert a component specification (like [tex]/physics) to the full URL for loading the extension. In the past, it was difficult to hook into that filtering mechanism, but in version 3.2, you can now configure additional filters for the loader. See the loader documentation for more details.

Breaking Changes in this Release

Some of the changes made to the options to accommodate the updated speech-rule engine are potentially breaking changes, in that the previous options (enrichSpeech, a11y.locale, a11y.speechRules) are no longer valid options. Version 3.1.4 includes code to transfer the old options to their new locations, but that code has been removed in version 3.2. As errors in options are no longer fatal (unless you configure them to be), this change will no longer cause MathJax to fail, but will cause warning messages in the browser console, so look there for such error reports.

Similarly, the code that automatically renames the older TeX package names to their current all-lower-case versions (e.g., configMacros to configmacros and colorV2 to colorv2) has been removed from version 3.2. If you are using old package names, you will need to update your configuration. This applies to \require{} macros that refer to the older names as well as their names in the loader section, the tex.packages array, and the tex.autoload block.

Version 3.2 removes the matchFontHeight option for the SVG output jax, since it only applies to the CommonHTML output, but was previously allowed in the svg configuration block, while doing nothing.

Version 3.2 removes of the toArray() method from the LinkedList class (and its subclasses), so any custom code that uses that should switch to using Array.from(...) around the list instead.

Finally, the Box.ts and CssStyles.ts (and their associated .js files) have been moved from the output directories to the util directory. Compatibility files were placed in the original locations so that older code would continue to work, but these have been removed in v3.2, so you should modify any custom code that loads these files to obtain them from the util directory instead.

Bugs Addressed in this Release

Output Bug Fixes

  • Work around long-standing WebKit bug with CHTML characters. (2435)
  • Fix error where a second use of \| delim causes the wrong size to be used. (700)
  • Fixed problem with vertical centering of tables (697)
  • Reset cramped style for explicit style changes, and in tables (697)
  • Force setting of width of text with an explicit font (work around Safari bug) (699)
  • Add support for shifting combining-character accents into place (695)

Input Bug Fixes

  • Fix \overset and similar macros to now convert over-under to sub-sup in text mode. (2709)
  • Fixed problem with converting under-over to sub-sup when one script is missing. (2691)
  • Trim delimiter for \big and friends (2688, 2689)
  • Wrap results of \mathbf and similar macros so they are treated as a unit(2688, 2689)
  • Fix several bugs in the physics package (2449)
  • Remove heuristic for U+2061 forcing previous item to be TeX class OP (719)

Miscellaneous

  • Update node-main for webpack 5 (696)
  • Fix problem with detecting whether the ex-height can be computed, and work around jsdom problems (691)
  • Clear the stylesheet when used in a new MathDocument. (2678)
  • Only return a DOCTYPE if there is one (692)
  • Go back to mhchemparser package, now that it is es5 (714).

Availability of version 3.2.0

Although version 3.2.0 was released earlier today, it may take a day or two for the new version to propagate to the various CDN network computers, so you may not see v3.2.0 immediately if you are loading mathjax using a generic mathjax@3 URL. You should be able to obtain it immediately if you use the full version mathjax@3.2.0.

You may also have a cached version in your browser, so may need to either clear the browser cache, or relaunch your browser (or both) in order to get the latest version (the cached version should expire in about a week, depending on the CDN being used).

Note that it is possible for some files to be updated before others, so it may be the case that users of websites that load extensions (either explicitly or by autoloading TeX packages) may get mixed versions for until the CDN versions stabilize, which should be within a day. If you are loading one of the combined components (e.g., tex-chml.js), this is less likely to be an issue, and if you are loading a component ending in -full it is even less likely to occur.

Version 3.2.0 is available immediately from npm and GitHub for use in node applications.

Previous News

MathJax v3.1.3 now available
Taylor and Francis continues as MathJax Sponsor
MAA continues as MathJax Sponsor
Elsevier continues as MathJax Sponsor
EBSCO continues as MathJax supporter
MathJax v3.1.2 now available
MathJax v3.1.0 now available
MathJax v2.7.9 now available
Springer Nature continues as MathJax supporter
The London Mathematical Society continues as MathJax supporter
MathJax v3.0.5 now available
MathJax v2.7.8 now available
Taylor & Francis continues as MathJax Supporter
MathJax v2.7.6 now available
MathJax v3 beta.4 released
MathJax v3 beta.3 released
MathJax v3 beta.2 released
MathJax v2.7.5 now available
MathJax v3 beta released
The American Statistical Association becomes a MathJax Supporter
MathJax v2.7.4 now available
MathJax v2.7.3 now available
MathWorks continues as MathJax Supporter
Oxford University Press continues as MathJax Supporter
EBSCO Information Services continues as a MathJax Supporter
The London Mathematical Society continues as MathJax supporter
IOP Publishing continues as MathJax Supporter
RedLink becomes a MathJax Supporter
Elsevier continues as MathJax Sponsor
AIP Publishing continues as MathJax Supporter
OSA Publishing continues as MathJax Supporter
The Mathematical Association of America continues as MathJax Supporter
PLOS continues as MathJax Supporter
MathJax v2.7.2 now available
IBM continues as MathJax Supporter
MathJax v2.7.2 beta now available
Cambridge University Press continues as MathJax Supporter
Springer Nature continues as a MathJax Supporter
American Physical Society continues as MathJax Supporter
Stack Overflow continues as MathJax Partner
Pearson continues as MathJax Supporter
The London Mathematical Society continues as MathJax supporter
IEEE continues as MathJax Partner
MathJax CDN shutting down on April 30, 2017.
Alternatives available.
Taylor & Francis continues as MathJax Supporter
MathJax-node v1.0 released
Atypon continues as a MathJax Supporter
Wiley continues as MathJax Supporter
MathJax awarded grant from Simons Foundation for 'Universally enhancing math on the web'
EBSCO Information Services continues as a MathJax Supporter
2016 in review
IOP Publishing continues as MathJax Supporter
MathWorks continues as MathJax Supporter
Project Euclid continues as MathJax Supporter
The Mathematical Association of America continues as MathJax Supporter
MathJax v2.7 now available
Cambridge University Press continues as MathJax Supporter
Elsevier continues as MathJax Sponsor
IBM becomes a MathJax Supporter
MathJax v2.7 beta now available
MathJax wins PAM Division Award 2016
Springer Nature continues as a MathJax Supporter
AIP Publishing continues as MathJax Supporter
OSA Publishing continues as MathJax Supporter
American Physical Society continues as MathJax Supporter
Pearson becomes a MathJax Supporter
IEEE continues as MathJax Partner
MathJax Accessibility Extensions v1.0 now available
Stack Overflow continues as MathJax Partner
Oxford University Press continues as MathJax Supporter
Atypon continues as a MathJax Supporter
Wiley continues as MathJax Supporter
PLOS continues as MathJax Supporter
Taylor & Francis continues as MathJax Supporter
EBSCO Information Services becomes a MathJax Supporter
HighWire continues as MathJax Supporter
MathJax v2.6 now available
IOP Publishing continues as MathJax Supporter
The MathWorks continues as MathJax Supporter
Responsive Equations
MathJax whitepaper "Towards MathJax v3.0" released
The London Mathematical Society continues as MathJax supporter
Project Euclid continues as MathJax Supporter
The Mathematical Association of America continues as MathJax Supporter
MathJax v2.6 beta now available
AIP Publishing continues as MathJax Supporter
Springer Science+Business Media continues as a MathJax Supporter
Elsevier continues as MathJax Sponsor
American Physical Society continues as MathJax Supporter
Cambridge University Press continues as MathJax Supporter
OSA Publishing continues as MathJax Supporter
Stack Exchange continues as MathJax Partner
MathJax Community Update #8
IEEE continues as MathJax Partner
Oxford University Press continues as MathJax Supporter
Making math on Wikipedia more awesome | an interview with Moritz Schubotz
Atypon continues as a MathJax Supporter
Taylor & Francis continues as MathJax Supporter
MathJax announces PLOS is latest to join its sponsorship program
Wiley becomes a MathJax Supporter
MathJax v2.5 now available
IOP Publishing continues as MathJax Supporter
MathJax v2.5 beta now available
Thank you for your support in 2014!
A quick stroll around our code repositories
HighWire continues as MathJax Supporter
Project Euclid continues as a MathJax Supporter
The London Mathematical Society continues as MathJax supporter
The MathWorks continues as MathJax Supporter
MathJax Community Update #7
The Mathematical Association of America continues as MathJax Supporter
Springer Science+Business Media continues as a MathJax Supporter
AIP Publishing continues as MathJax Supporter
Static site generation for researchers | an interview with Wonseok Shin
Changes to the MathJax CDN
American Physical Society continues as MathJax Supporter
Cambridge University Press continues as MathJax Supporter
The Optical Society of America continues as MathJax Supporter
MathJax v2.4 now available
Elsevier continues as MathJax Partner
MathJax Community Update #6
MathJax v2.4 beta now available
Stack Exchange continues as MathJax Partner
IEEE continues as MathJax Partner
Christian Perfect joins the MathJax team
Google+ Hangout on Air on open math textbooks
Taylor & Francis supports MathJax as a MathJax Supporter
Oxford University Press continues as MathJax Supporter
Social media for students and educators | an interview with Demonstranda
MathJax community update #5
Google+ Hangout on Air Q&A with Davide Cervone, Peter Jipsen, and David Lippman
Atypon continues as a MathJax Supporter
IOP Publishing continues as a MathJax Supporter
The London Mathematical Society continues as MathJax supporter
MathJax community update #4
HighWire supports MathJax as a MathJax Supporter
Project Euclid continues as a MathJax Supporter
MathJax v2.3 now available
MathJax community update #3
Getting a response from STEM audiences | an interview with LetsFeedback
MathJax v2.3 beta now available
Markdown authoring as webapp | an interview with StackEdit
MathWorks supports MathJax as a MathJax Supporter
Springer Science+Business Media continues as a MathJax Supporter
MathJax community update
The Mathematical Association of America continues as MathJax Supporter
MathJax community update
AIP Publishing continues as MathJax Partner
Introducing COMM / Interview at Fidus Writer
Cengage Learning and MathJax Improve User Experience through Delivery of Mathematical Equations in Digital Solutions
The Optical Society of America continues as MathJax Supporter
Cambridge University Press becomes a MathJax Supporter
Stack Exchange continues as MathJax Partner
American Physical Society continues as MathJax Supporter
MathJax v2.2 now available
Elsevier becomes a MathJax Partner
MathJax v2.2 beta now available
IEEE becomes a MathJax Partner
Elsevier Announces MathJax Now Available on ScienceDirect
Oxford University Press supports MathJax
AMS becomes managing partner of the MathJax Consortium
Frédéric Wang joins MathJax as core developer
Atypon becomes a MathJax Supporter
Getting ready for the Joint Math Meetings 2013
The London Mathematical Society continues as MathJax supporter
IOP Publishing continues as MathJax Supporter
MathJax community meetup at the Joint Mathematics Meetings 2013
Project Euclid continues as MathJax Supporter
MathJax v2.1 now available
MathJax v2.1-beta now available on the CDN
The Mathematical Association of America becomes a MathJax Supporter
BISG endorses epub3 as preferred standard
American Physical Society continues as MathJax Supporter
The Optical Society of America continues as MathJax Supporter
Stack Exchange continues as MathJax Partner
Springer Science+Business Media becomes a MathJax Supporter
Website maintenance on June 11, 2012
Upcoming changes to the CDN
Readium adds MathML support via MathJax
Why cdn.mathjax.org was unavailable for 4 hours on March 13
MathJax 2.0 and the default rendering in Firefox
MathJax version 2.0 now available
MathJax v2.0-beta now available on CDN
MathJax Staff for 2012
MathJax Meet-up at JMM in Boston
A sad day
AIP Publishing Partners with MathJax
MathJax is looking for a Business Development Manager
Support from IEEE boosts MathJax
Scheduled CDN Maintenance September 11-12
Article about MathJax in E-learning websites released
Mathematics E-learning Community Benefits from MathJax
IOP Publishing becomes a MathJax Supporter
Project Euclid Renews Sponsorship of MathJax
Video tutorial “Using MathJax in Blackboard” released
The MathJax project is now accepting donations
MathJax CDN Service very successful
MathJax v1.1a Now Available
American Physical Society continues as MathJax Supporter
Video tutorial “How to use MathJax with Tumblr” released
WebAssign becomes a MathJax Supporter
The Optical Society becomes a MathJax Supporter
Stack Exchange becomes MathJax Partner
MathJax Launches CDN Service with 1.1 Release
MathJax starts Discussion Group on LinkedIn
MathJax: Time to Step Up
Leading journals illustrate MathJax's flexible use in scholarly communication
MathJax version 1.1 Beta Ready for Testing
Project Euclid Enables MathJax for 20 Journals
Update for Firefox 3.6.13
MathJax Developer Resources Have Moved
Russian Mathematics Portal Moves to MathJax
MathSciNet Now Uses MathJax
Business Development Manager Sought
MathML in HTML5: Problems with IE9
Accessible Pages with MathJax
GitHub Chooses MathJax For Math Support
MathJax 1.0 is Now Available
Developers: Source Control Changes Coming Thursday July 29
Job: MathJax API Designer/Developer Wanted
MathJax Beta 2 Adds MathML Support
MathJax Gets A Facebook Page (And Twitter)
Project Euclid Joins MathJax as a Supporter
MathML Development Roadmap
Presentations preview MathML support, ideas on copy and paste
Elsevier Adds Support To MathJax
MathJax Beta Released
American Physical Society Becomes a MathJax Supporter
MathJax at the Joint Mathematics Meetings
Preview Page Goes Live!
MathSciNet with MathJax
American Scientist Spotlights MathJax