Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
9176d63
Merge branch 'v4.1.2-update' into develop
dpvc May 15, 2026
969ada9
Fix problem with \limits and \nolimits when used after a script. (mat…
dpvc Jun 9, 2026
a65456c
Merge pull request #1497 from mathjax/issue3569
dpvc Jun 11, 2026
e72921f
Add symmetric="true" to \middle results. (mathjax/MathJax#3560)
dpvc May 16, 2026
e33f654
Load font files synchronously, when possible. (#1458)
dpvc May 16, 2026
139fe60
Don't rerender the output during menu initialization.
dpvc Jun 9, 2026
7e7fa55
Make sure the parsers array is cleared for tex and text parsers. (#1…
dpvc Jun 11, 2026
e69ef94
Fix `\bbox` problem with padding values that are decimals. (mathjax/…
dpvc Jun 11, 2026
68caffc
Make sure multi-byte UTF8 characters are handled properly in data-lat…
dpvc Jun 13, 2026
a88c6e7
Set box-sizing in dialogs to avoid CSS bleed through that affects clo…
dpvc Jun 13, 2026
ecfb01b
Fix label ids for expressions with forward refs. (mathjax/MathJax#3562)
dpvc Jun 14, 2026
f8a3f94
Update tests
dpvc Jun 14, 2026
5dc3abe
Ignore braces in array preamble. (mathjax/MathJax#3565)
dpvc Jun 14, 2026
6ee75da
Work around issue with Safari 26 not processing math inside otherwise…
dpvc Jun 18, 2026
3142fe4
Update handling of braces to be more like LaTeX
dpvc Jun 18, 2026
bd9140e
Remove else clauses after return, as requested in review
dpvc Jun 18, 2026
db00d9b
Merge pull request #1499 from mathjax/issue3560
dpvc Jun 18, 2026
1c82395
Merge pull request #1501 from mathjax/fix/menu-init
dpvc Jun 18, 2026
4b007b3
Merge pull request #1502 from mathjax/issue1474
dpvc Jun 18, 2026
c9acda9
Merge pull request #1503 from mathjax/issue3568
dpvc Jun 18, 2026
13c0ad4
Merge pull request #1505 from mathjax/issue3575
dpvc Jun 18, 2026
ab879a2
Merge pull request #1506 from mathjax/fix/dialog-box-sizing
dpvc Jun 18, 2026
e72e718
Merge pull request #1507 from mathjax/issue3562
dpvc Jun 18, 2026
4284d5b
Merge pull request #1511 from mathjax/issue3579
dpvc Jun 18, 2026
40eb098
Get order of repeated >{} or <{} directives correct and add tests
dpvc Jun 19, 2026
ad4abdd
Improve removal of outer braces and add a new test
dpvc Jun 19, 2026
acf1570
SRE version bump.
zorkow Jun 22, 2026
d03365d
Merge pull request #1500 from mathjax/issue1458
dpvc Jun 25, 2026
907df71
Merge pull request #1508 from mathjax/issue3565
dpvc Jun 25, 2026
067563a
Allow label ids to pass ui/safe filters. (mathjax/MathJax#3580)
dpvc Jun 26, 2026
1b25f17
Handle inline line breaking with nested embellished operators. (math…
dpvc Jun 26, 2026
84ac9c8
Don't add file:// to windows path in CommonJS files. (mathjax/MathJax…
dpvc Jul 2, 2026
f9e5717
Merge pull request #1514 from mathjax/issue3580
dpvc Jul 2, 2026
167ff11
Merge pull request #1515 from mathjax/issue3581
dpvc Jul 2, 2026
f88d6cc
Merge pull request #1519 from mathjax/issue3585
dpvc Jul 2, 2026
ead0ba5
Update SRE to v5-rc.4
zorkow Jul 2, 2026
bcea516
Merge pull request #1513 from mathjax/update/sre
dpvc Jul 2, 2026
583f625
update docs workflow actions
zorkow Jul 3, 2026
177bad6
update test workflow actions
zorkow Jul 3, 2026
8500e00
update code coverage action to v6
zorkow Jul 3, 2026
bef76e2
Update TexParser for prettier
dpvc Jul 3, 2026
ad5259e
Merge remote-tracking branch 'origin/develop' into develop
dpvc Jul 3, 2026
05c4055
Update to v4.1.3
dpvc Jul 3, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions .github/workflows/docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,9 @@ jobs:
name: Generate Code Docs
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v5

- uses: pnpm/action-setup@v4
- uses: pnpm/action-setup@v5
name: Install pnpm
with:
version: 10
Expand All @@ -44,11 +44,11 @@ jobs:
run: pnpm typedoc

- name: Upload artifact
uses: actions/upload-pages-artifact@v3
uses: actions/upload-pages-artifact@v5
with:
# Upload docs folder
path: './docs'

- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4
uses: actions/deploy-pages@v5
8 changes: 4 additions & 4 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,16 +14,16 @@ jobs:
name: Compile and test MathJax
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v5

- uses: pnpm/action-setup@v4
- uses: pnpm/action-setup@v5
name: Install pnpm
with:
version: 10
run_install: false

- name: Install Node.js
uses: actions/setup-node@v4
uses: actions/setup-node@v5
with:
node-version: 24
cache: 'pnpm'
Expand All @@ -49,7 +49,7 @@ jobs:
run: pnpm -s test:gh

- name: Upload coverage reports to Codecov
uses: codecov/codecov-action@v5
uses: codecov/codecov-action@v6
with:
token: ${{ secrets.CODECOV_TOKEN }}
slug: mathjax/MathJax-src
6 changes: 3 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@mathjax/src",
"version": "4.1.2",
"version": "4.1.3",
"description": "Beautiful and accessible math in all browsers. MathJax is an open-source JavaScript display engine for LaTeX, MathML, and AsciiMath notation that works in all browsers and in server-side node applications. This package includes the source code as well as the packaged components.",
"keywords": [
"MathJax",
Expand Down Expand Up @@ -168,9 +168,9 @@
]
},
"dependencies": {
"@mathjax/mathjax-newcm-font": "4.1.2",
"@mathjax/mathjax-newcm-font": "4.1.3",
"mhchemparser": "^4.2.1",
"mj-context-menu": "^1.0.0",
"speech-rule-engine": "5.0.0-rc.1"
"speech-rule-engine": "5.0.0-rc.4"
}
}
31 changes: 16 additions & 15 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions pnpm-workspace.yaml
Original file line number Diff line number Diff line change
@@ -1,2 +1,4 @@
packages:
- 'testsuite'
minimumReleaseAgeExclude:
- speech-rule-engine@5.0.0-rc.3
2 changes: 1 addition & 1 deletion testsuite/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
},
"dependencies": {
"@jest/globals": "^29.7.0",
"@mathjax/mathjax-bbm-font-extension": "^4.1.2",
"@mathjax/mathjax-bbm-font-extension": "^4.1.3",
"@types/jest": "^29.5.14",
"jest": "^29.7.0",
"ts-jest": "^29.4.6",
Expand Down
30 changes: 30 additions & 0 deletions testsuite/tests/input/tex/Base.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4002,6 +4002,36 @@ describe('Complete Array', () => {
expect(tex2mml('\\begin{array}{> {x} c} X \\end{array}')).toMatchSnapshot();
});

it('column {cc}', () => {
expect(tex2mml('\\begin{array}{{cc}} X Y \\end{array}')).toMatchSnapshot();
});

it('column {c}', () => {
expect(tex2mml('\\begin{array}{c{c}} X Y \\end{array}')).toMatchSnapshot();
});

it('column {{c}}', () => {
expect(tex2mml('\\begin{array}{{{c}}} X \\end{array}')).toMatchSnapshot();
});

it('column {r}c{l}', () => {
expect(tex2mml('\\begin{array}{{r}c{l}} X & Y & Z \\end{array}')).toMatchSnapshot();
});

it('column newline', () => {
expect(tex2mml('\\begin{array}{c\nc} X & Y\\end{array}')).toMatchSnapshot();
});

it('column > > c < <', () => {
expect(tex2mml('\\begin{array}{>{a}>{b}c<{x}<{y}} X \\end{array}')).toMatchSnapshot();
});

it('column brace errors', () => {
expectTexError(tex2mml('\\begin{array}{c{xx}} X Y \\end{array}')).toBe('Illegal pream-token (xx)');
expectTexError(tex2mml('\\begin{array}{c{{c}}} X Y \\end{array}')).toBe('Illegal pream-token ({c})');
expectTexError(tex2mml('\\begin{array}{c{c{c}}} X Y \\end{array}')).toBe('Illegal pream-token (c{c})');
});

it('BadPreamToken', () => {
expectTexError('\\begin{array}a').toBe('Illegal pream-token (a)');
});
Expand Down
102 changes: 96 additions & 6 deletions testsuite/tests/input/tex/__snapshots__/Base.test.ts.snap
Original file line number Diff line number Diff line change
Expand Up @@ -1820,6 +1820,22 @@ exports[`Complete Array column ! | @ 1`] = `
</math>"
`;

exports[`Complete Array column > > c < < 1`] = `
"<math xmlns="http://www.w3.org/1998/Math/MathML" data-latex="\\begin{array}{&gt;{a}&gt;{b}c&lt;{x}&lt;{y}} X \\end{array}" display="block">
<mtable columnspacing="1em" rowspacing="4pt" data-frame-styles="" framespacing=".5em .125em" data-latex="baXyx\\end{array}">
<mtr>
<mtd>
<mi data-latex="b">b</mi>
<mi data-latex="a">a</mi>
<mi data-latex="X">X</mi>
<mi data-latex="y">y</mi>
<mi data-latex="x">x</mi>
</mtd>
</mtr>
</mtable>
</math>"
`;

exports[`Complete Array column > space 1`] = `
"<math xmlns="http://www.w3.org/1998/Math/MathML" data-latex="\\begin{array}{&gt; {x} c} X \\end{array}" display="block">
<mtable columnspacing="1em" rowspacing="4pt" data-frame-styles="" framespacing=".5em .125em" data-latex="xX\\end{array}">
Expand Down Expand Up @@ -1872,6 +1888,62 @@ exports[`Complete Array column @ p m 1`] = `
</math>"
`;

exports[`Complete Array column {{c}} 1`] = `
"<math xmlns="http://www.w3.org/1998/Math/MathML" data-latex="\\begin{array}{{{c}}} X \\end{array}" display="block">
<mtable columnspacing="1em" rowspacing="4pt" data-frame-styles="" framespacing=".5em .125em" data-latex="\\begin{array}{{{c}}} X \\end{array}">
<mtr data-latex="{{{c}}}">
<mtd>
<mi data-latex="X">X</mi>
</mtd>
</mtr>
</mtable>
</math>"
`;

exports[`Complete Array column {c} 1`] = `
"<math xmlns="http://www.w3.org/1998/Math/MathML" data-latex="\\begin{array}{c{c}} X Y \\end{array}" display="block">
<mtable columnspacing="1em" rowspacing="4pt" columnalign="center center" data-frame-styles="" framespacing=".5em .125em" data-latex="\\begin{array}{c{c}} X Y \\end{array}">
<mtr data-latex="{c{c}}">
<mtd>
<mi data-latex="X">X</mi>
<mi data-latex="Y">Y</mi>
</mtd>
</mtr>
</mtable>
</math>"
`;

exports[`Complete Array column {cc} 1`] = `
"<math xmlns="http://www.w3.org/1998/Math/MathML" data-latex="\\begin{array}{{cc}} X Y \\end{array}" display="block">
<mtable columnspacing="1em" rowspacing="4pt" columnalign="center center" data-frame-styles="" framespacing=".5em .125em" data-latex="\\begin{array}{{cc}} X Y \\end{array}">
<mtr data-latex="{{cc}}">
<mtd>
<mi data-latex="X">X</mi>
<mi data-latex="Y">Y</mi>
</mtd>
</mtr>
</mtable>
</math>"
`;

exports[`Complete Array column {r}c{l} 1`] = `
"<math xmlns="http://www.w3.org/1998/Math/MathML" data-latex="\\begin{array}{{r}c{l}} X &amp; Y &amp; Z \\end{array}" display="block">
<mtable columnspacing="1em" rowspacing="4pt" columnalign="right center left" data-frame-styles="" framespacing=".5em .125em" data-latex="\\begin{array}{{r}c{l}} X &amp; Y &amp; Z \\end{array}">
<mtr data-latex="{{r}c{l}}">
<mtd>
<mi data-latex="X">X</mi>
</mtd>
<mtd>
<mi data-latex="Y">Y</mi>
</mtd>
<mtd>
<mi data-latex="Z">Z</mi>
</mtd>
</mtr>
</mtable>
</math>"
`;

exports[`Complete Array column b 1`] = `
"<math xmlns="http://www.w3.org/1998/Math/MathML" data-latex="\\begin{array}{b{1cm}b{1cm}b{1cm}}a &amp; b &amp;c\\\\ d &amp; e &amp; f\\end{array}" display="block">
<mtable columnspacing="1em" rowspacing="4pt" columnalign="left left left" columnwidth="1cm 1cm 1cm" data-frame-styles="" framespacing=".5em .125em" data-latex="\\text{f}\\end{array}">
Expand Down Expand Up @@ -2179,6 +2251,24 @@ exports[`Complete Array column m 1`] = `
</math>"
`;

exports[`Complete Array column newline 1`] = `
"<math xmlns="http://www.w3.org/1998/Math/MathML" data-latex="\\begin{array}{c
c} X &amp; Y\\end{array}" display="block">
<mtable columnspacing="1em" rowspacing="4pt" columnalign="center center" data-frame-styles="" framespacing=".5em .125em" data-latex="\\begin{array}{c
c} X &amp; Y\\end{array}">
<mtr data-latex="{c
c}">
<mtd>
<mi data-latex="X">X</mi>
</mtd>
<mtd>
<mi data-latex="Y">Y</mi>
</mtd>
</mtr>
</mtable>
</math>"
`;

exports[`Complete Array column p 1`] = `
"<math xmlns="http://www.w3.org/1998/Math/MathML" data-latex="\\begin{array}{p{1cm}p{1cm}p{1cm}}a &amp; b &amp;c\\\\ d &amp; e &amp; f\\end{array}" display="block">
<mtable columnspacing="1em" rowspacing="4pt" columnalign="left left left" columnwidth="1cm 1cm 1cm" data-frame-styles="" framespacing=".5em .125em" data-latex="\\text{f}\\end{array}">
Expand Down Expand Up @@ -3552,7 +3642,7 @@ exports[`Fenced Fenced Arrows 3 1`] = `
<mi data-latex="b">b</mi>
</mfrac>
<mrow data-mjx-texclass="CLOSE"></mrow>
<mo data-latex="\\middle\\downarrow ">&#x2193;</mo>
<mo symmetric="true" data-latex="\\middle\\downarrow ">&#x2193;</mo>
<mrow data-mjx-texclass="OPEN" data-latex="\\middle\\downarrow"></mrow>
<mi data-latex="c">c</mi>
<mo data-mjx-texclass="CLOSE" fence="true" symmetric="true" data-latex="\\right\\uparrow">&#x2191;</mo>
Expand Down Expand Up @@ -3660,7 +3750,7 @@ exports[`Fenced Middle 1`] = `
<mo data-mjx-texclass="OPEN" data-latex="\\left(">(</mo>
<mi data-latex="a">a</mi>
<mrow data-mjx-texclass="CLOSE"></mrow>
<mo stretchy="true" data-latex="\\middle|">|</mo>
<mo stretchy="true" symmetric="true" data-latex="\\middle|">|</mo>
<mrow data-mjx-texclass="OPEN" data-latex="\\middle|"></mrow>
<mi data-latex="b">b</mi>
<mo data-mjx-texclass="CLOSE" data-latex="\\right)">)</mo>
Expand Down Expand Up @@ -7931,7 +8021,7 @@ exports[`Spacing Nonscript scriptlevel 1`] = `
<mo data-mjx-texclass="OPEN" fence="true" stretchy="true" symmetric="true" data-latex="\\left."></mo>
<mi data-latex="a">a</mi>
<mrow data-mjx-texclass="CLOSE"></mrow>
<mo stretchy="true" data-latex="\\middle|">|</mo>
<mo stretchy="true" symmetric="true" data-latex="\\middle|">|</mo>
<mrow data-mjx-texclass="OPEN" data-latex="\\middle|"></mrow>
<mi data-latex="b">b</mi>
<mo data-mjx-texclass="CLOSE" fence="true" stretchy="true" symmetric="true" data-latex="\\right."></mo>
Expand All @@ -7948,7 +8038,7 @@ exports[`Spacing Nonscript toplevel 1`] = `
<mi data-latex="a">a</mi>
<mspace width="0.278em"></mspace>
<mrow data-mjx-texclass="CLOSE"></mrow>
<mo stretchy="true" data-latex="\\middle|">|</mo>
<mo stretchy="true" symmetric="true" data-latex="\\middle|">|</mo>
<mrow data-mjx-texclass="OPEN" data-latex="\\middle|"></mrow>
<mspace width="0.278em"></mspace>
<mi data-latex="b">b</mi>
Expand Down Expand Up @@ -9156,7 +9246,7 @@ exports[`User Defined Macros Middle Color 1`] = `
<mi data-latex="A">A</mi>
<mstyle mathcolor="red"></mstyle>
<mrow data-mjx-texclass="CLOSE"></mrow>
<mo stretchy="true" mathcolor="red" data-latex="\\middle|">|</mo>
<mo stretchy="true" symmetric="true" mathcolor="red" data-latex="\\middle|">|</mo>
<mrow data-mjx-texclass="OPEN" data-latex="\\middle|"></mrow>
<mi data-latex="B">B</mi>
<mo data-mjx-texclass="CLOSE" data-latex="\\right)">)</mo>
Expand All @@ -9170,7 +9260,7 @@ exports[`User Defined Macros Right Color 1`] = `
<mo data-mjx-texclass="OPEN" data-latex="\\left(">(</mo>
<mi data-latex="A">A</mi>
<mrow data-mjx-texclass="CLOSE"></mrow>
<mo stretchy="true" data-latex="\\middle|">|</mo>
<mo stretchy="true" symmetric="true" data-latex="\\middle|">|</mo>
<mrow data-mjx-texclass="OPEN" data-latex="\\middle|"></mrow>
<mi data-latex="B">B</mi>
<mstyle mathcolor="red"></mstyle>
Expand Down
Loading