From 2f37dc91044df88804281b6edd4ea125a328e0de Mon Sep 17 00:00:00 2001 From: Ron Kok Date: Tue, 28 Jul 2020 08:02:08 -0700 Subject: [PATCH] feat: support {align}, {align*}, {alignat}, and {alignat*} (#2341) * Support {align}, {align*}, {alignat}, and {alignat*} * Specify display mode for screenshots * Add bogus screenshots * Some screenshotter progress * Update screenshots --- docs/support_table.md | 6 ++-- docs/supported.md | 4 ++- src/environments/array.js | 37 +++++++++++++++----- test/katex-spec.js | 19 +++++----- test/screenshotter/images/Align-chrome.png | Bin 0 -> 12652 bytes test/screenshotter/images/Align-firefox.png | Bin 0 -> 12044 bytes test/screenshotter/ss_data.yaml | 3 ++ 7 files changed, 48 insertions(+), 21 deletions(-) create mode 100644 test/screenshotter/images/Align-chrome.png create mode 100644 test/screenshotter/images/Align-firefox.png diff --git a/docs/support_table.md b/docs/support_table.md index fc020dbf..534f9f4f 100644 --- a/docs/support_table.md +++ b/docs/support_table.md @@ -73,9 +73,11 @@ table td { |\alef|$\alef$|| |\alefsym|$\alefsym$|| |\aleph|$\aleph$|| -|{align}|Not supported|see `{aligned}`| +|{align}|$$\begin{align}a&=b+c\\d+e&=f\end{align}$$|`\begin{align}`
   `a&=b+c \\`
   `d+e&=f`
`\end{align}`| +|{align\*}|$$\begin{align*}a&=b+c\\d+e&=f\end{align*}$$|`\begin{align*}`
   `a&=b+c \\`
   `d+e&=f`
`\end{align*}`| |{aligned}|$\begin{aligned}a&=b+c\\d+e&=f\end{aligned}$|`\begin{aligned}`
   `a&=b+c \\`
   `d+e&=f`
`\end{aligned}`| -|{alignat}|Not supported|see `{alignedat}`| +|{alignat}|$$\begin{alignat}{2}10&x+&3&y=2\\3&x+&13&y=4\end{alignat}$$|`\begin{alignat}{2}`
   `10&x+ &3&y = 2 \\`
   ` 3&x+&13&y = 4`
`\end{alignat}`| +|{alignat\*}|$$\begin{alignat*}{2}10&x+&3&y=2\\3&x+&13&y=4\end{alignat*}$$|`\begin{alignat*}{2}`
   `10&x+ &3&y = 2 \\`
   ` 3&x+&13&y = 4`
`\end{alignat*}`| |{alignedat}|$\begin{alignedat}{2}10&x+&3&y=2\\3&x+&13&y=4\end{alignedat}$|`\begin{alignedat}{2}`
   `10&x+ &3&y = 2 \\`
   ` 3&x+&13&y = 4`
`\end{alignedat}`| |\allowbreak||| |\Alpha|$\Alpha$|| diff --git a/docs/supported.md b/docs/supported.md index a014f868..75c7d8d4 100644 --- a/docs/supported.md +++ b/docs/supported.md @@ -83,7 +83,9 @@ $( \big( \Big( \bigg( \Bigg($ `( \big( \Big( \bigg( \Bigg(` |$\begin{pmatrix} a & b \\ c & d \end{pmatrix}$ |`\begin{pmatrix}`
   `a & b \\`
   `c & d`
`\end{pmatrix}` |$\begin{bmatrix} a & b \\ c & d \end{bmatrix}$ | `\begin{bmatrix}`
   `a & b \\`
   `c & d`
`\end{bmatrix}` |$\begin{vmatrix} a & b \\ c & d \end{vmatrix}$ |`\begin{vmatrix}`
   `a & b \\`
   `c & d`
`\end{vmatrix}` |$\begin{Vmatrix} a & b \\ c & d \end{Vmatrix}$ |`\begin{Vmatrix}`
   `a & b \\`
   `c & d`
`\end{Vmatrix}` |$\begin{Bmatrix} a & b \\ c & d \end{Bmatrix}$ |`\begin{Bmatrix}`
   `a & b \\`
   `c & d`
`\end{Bmatrix}`|$\def\arraystretch{1.5}\begin{array}{c:c:c} a & b & c \\ \hline d & e & f \\ \hdashline g & h & i \end{array}$|`\def\arraystretch{1.5}`
   `\begin{array}{c:c:c}`
   `a & b & c \\ \hline`
   `d & e & f \\`
   `\hdashline`
   `g & h & i`
`\end{array}` -|$\begin{aligned} a&=b+c \\ d+e&=f \end{aligned}$ |`\begin{aligned}`
   `a&=b+c \\`
   `d+e&=f`
`\end{aligned}`|$\begin{alignedat}{2}10&x+&3&y=2\\3&x+&13&y=4\end{alignedat}$ |`\begin{alignedat}{2}`
   `10&x+ &3&y = 2 \\`
   ` 3&x+&13&y = 4`
`\end{alignedat}` +|$$\begin{align} a&=b+c \\ d+e&=f \end{align}$$ |`\begin{align}`
   `a&=b+c \\`
   `d+e&=f`
`\end{align}`|$$\begin{alignat}{2}10&x+&3&y=2\\3&x+&13&y=4\end{alignat}$$ | +|$$\begin{align*} a&=b+c \\ d+e&=f \end{align*}$$ |`\begin{align*}`
   `a&=b+c \\`
   `d+e&=f`
`\end{align*}`|$\begin{aligned} a&=b+c \\ d+e&=f \end{aligned}$ |`\begin{aligned}`
   `a&=b+c \\`
   `d+e&=f`
`\end{aligned}`| +`\begin{alignedat}{2}`
   `10&x+ &3&y = 2 \\`
   ` 3&x+&13&y = 4`
`\end{alignedat}`|$\begin{alignedat}{2}10&x+&3&y=2\\3&x+&13&y=4\end{alignedat}$ |`\begin{alignedat}{2}`
   `10&x+ &3&y = 2 \\`
   ` 3&x+&13&y = 4`
`\end{alignedat}` |$$\begin{gather} a=b \\ e=b+c \end{gather}$$ |`\begin{gather}`
   `a=b \\ `
   `e=b+c`
`\end{gather}`|$\begin{gathered} a=b \\ e=b+c \end{gathered}$ |`\begin{gathered}`
   `a=b \\ `
   `e=b+c`
`\end{gathered}`| |$x = \begin{cases} a &\text{if } b \\ c &\text{if } d \end{cases}$ |`x = \begin{cases}`
   `a &\text{if } b \\`
   `c &\text{if } d`
`\end{cases}`|$\begin{rcases} a &\text{if } b \\ c &\text{if } d \end{rcases}⇒…$ |`\begin{rcases}`
   `a &\text{if } b \\`
   `c &\text{if } d`
`\end{rcases}⇒…`| |$\begin{smallmatrix} a & b \\ c & d \end{smallmatrix}$ | `\begin{smallmatrix}`
   `a & b \\`
   `c & d`
`\end{smallmatrix}` ||| diff --git a/src/environments/array.js b/src/environments/array.js index bc5ecc88..8a29a9aa 100644 --- a/src/environments/array.js +++ b/src/environments/array.js @@ -577,10 +577,30 @@ const mathmlBuilder: MathMLBuilder<"array"> = function(group, options) { return table; }; -// Convenience function for aligned and alignedat environments. +// Convenience function for align, align*, aligned, alignat, alignat*, alignedat. const alignedHandler = function(context, args) { + if (context.envName.indexOf("ed") === -1) { + // Check if this environment call is allowed. + const settings = context.parser.settings; + if (!settings.displayMode) { + throw new ParseError(`{${context.envName}} cannot be used inline.`); + } else if (settings.strict && !settings.topEnv) { + settings.reportNonstrict("textEnv", + `{${context.envName}} called from math mode.`); + } + } const cols = []; - const res = parseArray(context.parser, {cols, addJot: true}, "display"); + const separationType = context.envName.indexOf("at") > -1 ? "alignat" : "align"; + const res = parseArray(context.parser, + { + cols, + addJot: true, + addEqnNum: context.envName === "align" || context.envName === "alignat", + colSeparationType: separationType, + leqno: context.parser.settings.leqno, + }, + "display" + ); // Determining number of columns. // 1. If the first argument is given, we use it as a number of columns, @@ -848,13 +868,15 @@ defineEnvironment({ mathmlBuilder, }); -// An aligned environment is like the align* environment -// except it operates within math mode. +// In the align environment, one uses ampersands, &, to specify number of +// columns in each row, and to locate spacing between each column. +// align gets automatic numbering. align* and aligned do not. +// The alignedat environment can be used in math mode. // Note that we assume \nomallineskiplimit to be zero, // so that \strut@ is the same as \strut. defineEnvironment({ type: "array", - names: ["aligned"], + names: ["align", "align*", "aligned"], props: { numArgs: 0, }, @@ -903,10 +925,7 @@ defineEnvironment({ // each columns. defineEnvironment({ type: "array", - names: ["alignedat"], - // One for numbered and for unnumbered; - // but, KaTeX doesn't supports math numbering yet, - // they make no difference for now. + names: ["alignat", "alignat*", "alignedat"], props: { numArgs: 1, }, diff --git a/test/katex-spec.js b/test/katex-spec.js index 0aa9e288..f61709f3 100644 --- a/test/katex-spec.js +++ b/test/katex-spec.js @@ -2726,25 +2726,26 @@ describe("An aligned environment", function() { }); }); -describe("A gather environment", function() { +describe("AMS environments", function() { const nonStrictDisplay = new Settings({displayMode: true, strict: false}); it("should fail outside display mode", () => { expect`\begin{gather}a+b\\c+d\end{gather}`.not.toParse(nonstrictSettings); - }); - - it("should fail outside display mode", () => { expect`\begin{gather*}a+b\\c+d\end{gather*}`.not.toParse(nonstrictSettings); + expect`\begin{align}a&=b+c\\d+e&=f\end{align}`.not.toParse(nonstrictSettings); + expect`\begin{align*}a&=b+c\\d+e&=f\end{align*}`.not.toParse(nonstrictSettings); + expect`\begin{alignat}{2}10&x+ &3&y = 2\\3&x+&13&y = 4\end{alignat}`.not.toParse(nonstrictSettings); + expect`\begin{alignat*}{2}10&x+ &3&y = 2\\3&x+&13&y = 4\end{alignat*}`.not.toParse(nonstrictSettings); }); - it("should build if in display mode", () => { + it("should build if in non-strict display mode", () => { expect`\begin{gather}a+b\\c+d\end{gather}`.toBuild(nonStrictDisplay); - }); - - it("should build if in display mode", () => { expect`\begin{gather*}a+b\\c+d\end{gather*}`.toBuild(nonStrictDisplay); + expect`\begin{align}a&=b+c\\d+e&=f\end{align}`.toBuild(nonStrictDisplay); + expect`\begin{align*}a&=b+c\\d+e&=f\end{align*}`.toBuild(nonStrictDisplay); + expect`\begin{alignat}{2}10&x+ &3&y = 2\\3&x+&13&y = 4\end{alignat}`.toBuild(nonStrictDisplay); + expect`\begin{alignat*}{2}10&x+ &3&y = 2\\3&x+&13&y = 4\end{alignat*}`.toBuild(nonStrictDisplay); }); - }); describe("operatorname support", function() { diff --git a/test/screenshotter/images/Align-chrome.png b/test/screenshotter/images/Align-chrome.png new file mode 100644 index 0000000000000000000000000000000000000000..6b60aa2edfdaf87cb14645d298c2d301d463ff28 GIT binary patch literal 12652 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 literal 0 HcmV?d00001 diff --git a/test/screenshotter/images/Align-firefox.png b/test/screenshotter/images/Align-firefox.png new file mode 100644 index 0000000000000000000000000000000000000000..94bcb33326a3f0044c18d831ee2548f9d082e322 GIT binary patch literal 12044 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 literal 0 HcmV?d00001 diff --git a/test/screenshotter/ss_data.yaml b/test/screenshotter/ss_data.yaml index 858add02..9a6ad89f 100644 --- a/test/screenshotter/ss_data.yaml +++ b/test/screenshotter/ss_data.yaml @@ -22,6 +22,9 @@ AccentsText: | \text{\'A} & \text{\.A} & \text{\`A} & \text{\"A} & \text{\H{A}} & \text{\r{A}} \\ \text{\.I İ} & \text{\H e e̋} & \text{\i ı} \end{array} +Align: + tex: \begin{align}a &= 1 & b &= 2 \\ 3a &= 3 & 17b &= 34\end{align} + display: 1 Aligned: | \begin{aligned} a &= 1 & b &= 2 \\