From 758bdba31ef895a249b0bcff5d0cc6f2605e8bfb Mon Sep 17 00:00:00 2001 From: Martin von Gagern Date: Tue, 30 Jun 2015 09:41:03 +0200 Subject: [PATCH] Implement cases environment MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit See issue #278. Although the official definition makes use of @{…} notation, we use custom spacing instead, since that seems easier for now. --- src/buildHTML.js | 28 +++++++++----- src/environments.js | 39 ++++++++++++++++++-- src/utils.js | 8 ++++ test/katex-spec.js | 12 +++++- test/screenshotter/images/Cases-firefox.png | Bin 0 -> 35861 bytes test/screenshotter/ss_data.json | 1 + 6 files changed, 74 insertions(+), 14 deletions(-) create mode 100644 test/screenshotter/images/Cases-firefox.png diff --git a/src/buildHTML.js b/src/buildHTML.js index d34ac6a..759c319 100644 --- a/src/buildHTML.js +++ b/src/buildHTML.js @@ -511,7 +511,9 @@ var groupTypes = { // Vertical spacing var baselineskip = 12 * pt; // see size10.clo - var arraystretch = 1; // factor, see lttab.dtx + // Default \arraystretch from lttab.dtx + // TODO(gagern): may get redefined once we have user-defined macros + var arraystretch = utils.deflt(group.value.arraystretch, 1); var arrayskip = arraystretch * baselineskip; var arstrutHeight = 0.7 * arrayskip; // \strutbox in ltfsstrc.dtx and var arstrutDepth = 0.3 * arrayskip; // \@arstrutbox in lttab.dtx @@ -565,14 +567,19 @@ var groupTypes = { body[r] = outrow; } var offset = totalHeight / 2 + fontMetrics.metrics.axisHeight; - var colalign = group.value.colalign || []; + var coldescriptions = group.value.cols || []; var cols = []; var colsep; for (c = 0; c < nc; ++c) { + var coldescr = coldescriptions[c] || {}; + var sepwidth; if (c > 0 || group.value.hskipBeforeAndAfter) { - colsep = makeSpan(["arraycolsep"], []); - colsep.style.width = arraycolsep + "em"; - cols.push(colsep); + sepwidth = utils.deflt(coldescr.pregap, arraycolsep); + if (sepwidth !== 0) { + colsep = makeSpan(["arraycolsep"], []); + colsep.style.width = sepwidth + "em"; + cols.push(colsep); + } } var col = []; for (r = 0; r < nr; ++r) { @@ -588,13 +595,16 @@ var groupTypes = { } col = buildCommon.makeVList(col, "individualShift", null, options); col = makeSpan( - ["col-align-" + (colalign[c] || "c")], + ["col-align-" + (coldescr.align || "c")], [col]); cols.push(col); if (c < nc - 1 || group.value.hskipBeforeAndAfter) { - colsep = makeSpan(["arraycolsep"], []); - colsep.style.width = arraycolsep + "em"; - cols.push(colsep); + sepwidth = utils.deflt(coldescr.postgap, arraycolsep); + if (sepwidth !== 0) { + colsep = makeSpan(["arraycolsep"], []); + colsep.style.width = sepwidth + "em"; + cols.push(colsep); + } } } body = makeSpan(["mtable"], cols); diff --git a/src/environments.js b/src/environments.js index 9da6a22..ba007d8 100644 --- a/src/environments.js +++ b/src/environments.js @@ -1,3 +1,4 @@ +var fontMetrics = require("./fontMetrics"); var parseData = require("./parseData"); var ParseError = require("./ParseError"); @@ -66,10 +67,12 @@ var environmentDefinitions = [ var parser = this; // Currently only supports alignment, no separators like | yet. colalign = colalign.value.map ? colalign.value : [colalign]; - colalign = colalign.map(function(node) { + var cols = colalign.map(function(node) { var ca = node.value; if ("lcr".indexOf(ca) !== -1) { - return ca; + return { + align: ca + }; } throw new ParseError( "Unknown column alignment: " + node.value, @@ -77,7 +80,7 @@ var environmentDefinitions = [ }); var res = { type: "array", - colalign: colalign, + cols: cols, hskipBeforeAndAfter: true // \@preamble in lttab.dtx }; res = parseArray(parser, pos, mode, res); @@ -111,8 +114,36 @@ var environmentDefinitions = [ } return res; } - } + }, + // A cases environment (in amsmath.sty) is almost equivalent to + // \def\arraystretch{1.2}% + // \left\{\begin{array}{@{}l@{\quad}l@{}} … \end{array}\right. + { + names: ["cases"], + handler: function(pos, mode, envName) { + var res = { + type: "array", + arraystretch: 1.2, + cols: [{ + align: "l", + pregap: 0, + postgap: fontMetrics.metrics.quad + }, { + align: "l", + pregap: 0, + postgap: 0 + }] + }; + res = parseArray(this, pos, mode, res); + res.result = new ParseNode("leftright", { + body: [res.result], + left: "\\{", + right: "." + }, mode); + return res; + } + } ]; module.exports = (function() { diff --git a/src/utils.js b/src/utils.js index 9b9bf71..078bef1 100644 --- a/src/utils.js +++ b/src/utils.js @@ -31,6 +31,13 @@ var contains = function(list, elem) { return indexOf(list, elem) !== -1; }; +/** + * Provide a default value if a setting is undefined + */ +var deflt = function(setting, defaultIfUndefined) { + return setting === undefined ? defaultIfUndefined : setting; +}; + // hyphenate and escape adapted from Facebook's React under Apache 2 license var uppercase = /([A-Z])/g; @@ -89,6 +96,7 @@ function clearNode(node) { module.exports = { contains: contains, + deflt: deflt, escape: escape, hyphenate: hyphenate, indexOf: indexOf, diff --git a/test/katex-spec.js b/test/katex-spec.js index abfc2a6..36b4f91 100644 --- a/test/katex-spec.js +++ b/test/katex-spec.js @@ -1310,7 +1310,17 @@ describe("An array environment", function() { it("should accept a single alignment character", function() { var parse = getParsed("\\begin{array}r1\\\\20\\end{array}"); expect(parse[0].type).toBe("array"); - expect(parse[0].value.colalign).toEqual(["r"]); + expect(parse[0].value.cols).toEqual([{align:"r"}]); + }); + +}); + +describe("A cases environment", function() { + + it("should parse its input", function() { + expect("f(a,b)=\\begin{cases}a+1&\\text{if }b\\text{ is odd}\\\\" + + "a&\\text{if }b=0\\\\a-1&\\text{otherwise}\\end{cases}") + .toParse(); }); }); diff --git a/test/screenshotter/images/Cases-firefox.png b/test/screenshotter/images/Cases-firefox.png new file mode 100644 index 0000000000000000000000000000000000000000..2718f37ba5bff9b40f6103c6f1e971a74943603a GIT binary patch literal 35861 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 l|6(Jo!2f5EpmUzD