diff --git a/src/functions/genfrac.js b/src/functions/genfrac.js index 32decb0b..3ce6d66d 100644 --- a/src/functions/genfrac.js +++ b/src/functions/genfrac.js @@ -15,6 +15,7 @@ defineFunction({ "\\cfrac", "\\dfrac", "\\frac", "\\tfrac", "\\dbinom", "\\binom", "\\tbinom", "\\\\atopfrac", // can’t be entered directly + "\\\\bracefrac", "\\\\brackfrac", // ditto ], props: { numArgs: 2, @@ -45,6 +46,16 @@ defineFunction({ leftDelim = "("; rightDelim = ")"; break; + case "\\\\bracefrac": + hasBarLine = false; + leftDelim = "\\{"; + rightDelim = "\\}"; + break; + case "\\\\brackfrac": + hasBarLine = false; + leftDelim = "["; + rightDelim = "]"; + break; default: throw new Error("Unrecognized genfrac command"); } @@ -272,7 +283,7 @@ defineFunction({ // immediately by one of the variants above. defineFunction({ type: "infix", - names: ["\\over", "\\choose", "\\atop"], + names: ["\\over", "\\choose", "\\atop", "\\brace", "\\brack"], props: { numArgs: 0, infix: true, @@ -289,6 +300,12 @@ defineFunction({ case "\\atop": replaceWith = "\\\\atopfrac"; break; + case "\\brace": + replaceWith = "\\\\bracefrac"; + break; + case "\\brack": + replaceWith = "\\\\brackfrac"; + break; default: throw new Error("Unrecognized infix genfrac command"); } diff --git a/test/katex-spec.js b/test/katex-spec.js index 475b1141..bedea36c 100644 --- a/test/katex-spec.js +++ b/test/katex-spec.js @@ -477,13 +477,17 @@ describe("A frac parser", function() { }); }); -describe("An over parser", function() { +describe("An over/brace/brack parser", function() { const simpleOver = "1 \\over x"; const complexOver = "1+2i \\over 3+4i"; + const braceFrac = "a+b \\brace c+d"; + const brackFrac = "a+b \\brack c+d"; it("should not fail", function() { expect(simpleOver).toParse(); expect(complexOver).toParse(); + expect(braceFrac).toParse(); + expect(brackFrac).toParse(); }); it("should produce a frac", function() { @@ -500,6 +504,22 @@ describe("An over parser", function() { expect(parse.type).toEqual("genfrac"); expect(parse.value.numer).toBeDefined(); expect(parse.value.denom).toBeDefined(); + + const parseBraceFrac = getParsed(braceFrac)[0]; + + expect(parseBraceFrac.type).toEqual("genfrac"); + expect(parseBraceFrac.value.numer).toBeDefined(); + expect(parseBraceFrac.value.denom).toBeDefined(); + expect(parseBraceFrac.value.leftDelim).toBeDefined(); + expect(parseBraceFrac.value.rightDelim).toBeDefined(); + + const parseBrackFrac = getParsed(brackFrac)[0]; + + expect(parseBrackFrac.type).toEqual("genfrac"); + expect(parseBrackFrac.value.numer).toBeDefined(); + expect(parseBrackFrac.value.denom).toBeDefined(); + expect(parseBrackFrac.value.leftDelim).toBeDefined(); + expect(parseBrackFrac.value.rightDelim).toBeDefined(); }); it("should create a numerator from the atoms before \\over", function() { @@ -567,6 +587,16 @@ describe("An over parser", function() { }); }); +describe("A infix builder", function() { + it("should not fail", function() { + expect("a \\over b").toBuild(); + expect("a \\atop b").toBuild(); + expect("a \\choose b").toBuild(); + expect("a \\brace b").toBuild(); + expect("a \\brack b").toBuild(); + }); +}); + describe("A sizing parser", function() { const sizeExpression = "\\Huge{x}\\small{x}"; diff --git a/test/screenshotter/images/FractionTest-chrome.png b/test/screenshotter/images/FractionTest-chrome.png index 90e283e8..4c7a5e28 100644 Binary files a/test/screenshotter/images/FractionTest-chrome.png and b/test/screenshotter/images/FractionTest-chrome.png differ diff --git a/test/screenshotter/images/FractionTest-firefox.png b/test/screenshotter/images/FractionTest-firefox.png index d86d04f6..9f4c0c22 100644 Binary files a/test/screenshotter/images/FractionTest-firefox.png and b/test/screenshotter/images/FractionTest-firefox.png differ diff --git a/test/screenshotter/ss_data.yaml b/test/screenshotter/ss_data.yaml index 2f7af95e..3e6ce889 100644 --- a/test/screenshotter/ss_data.yaml +++ b/test/screenshotter/ss_data.yaml @@ -113,7 +113,11 @@ ExtensibleArrows: | \xrightleftharpoons[ab]{ABC} + \xhookrightarrow[ab]{ABC} \\ \xtwoheadrightarrow{ABC} + \frac{\xrightarrow[ab]{ABC}}{\xrightarrow[ab]{ABC}} + \left\lvert\xrightarrow[ab]{ABC}\right\rvert \end{array} -FractionTest: \dfrac{a}{b}\frac{a}{b}\tfrac{a}{b}\;-\dfrac12\;1\tfrac12\;{1 \atop 2}\; \cfrac{1}{1+\cfrac{1}{x}} +FractionTest: | + \begin{array}{l} + \dfrac{a}{b}\frac{a}{b}\tfrac{a}{b}\;-\dfrac12\;1\tfrac12\;{1 \atop 2}\; \cfrac{1}{1+\cfrac{1}{x}} \\[2.5em] + {a \brace b} \; {a \brack b} + \end{array} Functions: \sin\cos\tan\ln\log Gathered: | \begin{gathered}