From aa1722c8b670a4a48928720794700e479bb858b8 Mon Sep 17 00:00:00 2001 From: Eddie Kohler Date: Fri, 30 Jun 2017 11:49:00 -0400 Subject: [PATCH] Vertically center single-character \mathop. (#745) * Vertically center single-character \mathop. Fix #726. * Add screenshotter test --- src/buildHTML.js | 39 +++++++++++-------- test/screenshotter/images/MathOp-chrome.png | Bin 0 -> 11176 bytes test/screenshotter/images/MathOp-firefox.png | Bin 0 -> 10793 bytes test/screenshotter/ss_data.yaml | 1 + 4 files changed, 24 insertions(+), 16 deletions(-) create mode 100644 test/screenshotter/images/MathOp-chrome.png create mode 100644 test/screenshotter/images/MathOp-firefox.png diff --git a/src/buildHTML.js b/src/buildHTML.js index 9d492dac..07691260 100644 --- a/src/buildHTML.js +++ b/src/buildHTML.js @@ -793,30 +793,21 @@ groupTypes.op = function(group, options) { } let base; - let baseShift = 0; - let slant = 0; if (group.value.symbol) { // If this is a symbol, create the symbol. const fontName = large ? "Size2-Regular" : "Size1-Regular"; base = buildCommon.makeSymbol( group.value.body, fontName, "math", options, ["mop", "op-symbol", large ? "large-op" : "small-op"]); - - // Shift the symbol so its center lies on the axis (rule 13). It - // appears that our fonts have the centers of the symbols already - // almost on the axis, so these numbers are very small. Note we - // don't actually apply this here, but instead it is used either in - // the vlist creation or separately when there are no limits. - baseShift = (base.height - base.depth) / 2 - - style.metrics.axisHeight * options.sizeMultiplier; - - // The slant of the symbol is just its italic correction. - slant = base.italic; } else if (group.value.value) { // If this is a list, compose that list. const inner = buildExpression(group.value.value, options, true); - - base = makeSpan(["mop"], inner, options); + if (inner.length === 1 && inner[0] instanceof domTree.symbolNode) { + base = inner[0]; + base.classes[0] = "mop"; // replace old mclass + } else { + base = makeSpan(["mop"], inner, options); + } } else { // Otherwise, this is a text operator. Build the text from the // operator's name. @@ -829,6 +820,21 @@ groupTypes.op = function(group, options) { base = makeSpan(["mop"], output, options); } + // If content of op is a single symbol, shift it vertically. + let baseShift = 0; + let slant = 0; + if (base instanceof domTree.symbolNode) { + // Shift the symbol so its center lies on the axis (rule 13). It + // appears that our fonts have the centers of the symbols already + // almost on the axis, so these numbers are very small. Note we + // don't actually apply this here, but instead it is used either in + // the vlist creation or separately when there are no limits. + baseShift = (base.height - base.depth) / 2 - style.metrics.axisHeight; + + // The slant of the symbol is just its italic correction. + slant = base.italic; + } + if (hasLimits) { // IE 8 clips \int if it is in a display: inline-block. We wrap it // in a new span so it is an inline, and works. @@ -919,7 +925,8 @@ groupTypes.op = function(group, options) { return makeSpan(["mop", "op-limits"], [finalGroup], options); } else { - if (group.value.symbol) { + if (baseShift) { + base.style.position = "relative"; base.style.top = baseShift + "em"; } diff --git a/test/screenshotter/images/MathOp-chrome.png b/test/screenshotter/images/MathOp-chrome.png new file mode 100644 index 0000000000000000000000000000000000000000..95a6267b2ccd188ec8266ce9d2a1d2b6e8a74fa2 GIT binary patch literal 11176 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 literal 0 HcmV?d00001 diff --git a/test/screenshotter/images/MathOp-firefox.png b/test/screenshotter/images/MathOp-firefox.png new file mode 100644 index 0000000000000000000000000000000000000000..179764e71946821591948040af262edc40586f69 GIT binary patch literal 10793 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 literal 0 HcmV?d00001 diff --git a/test/screenshotter/ss_data.yaml b/test/screenshotter/ss_data.yaml index 58cbc574..e62555dd 100644 --- a/test/screenshotter/ss_data.yaml +++ b/test/screenshotter/ss_data.yaml @@ -127,6 +127,7 @@ MathBf: \mathbf{Ax2k\breve{a}\omega\Omega\imath+\KaTeX} MathCal: \mathcal{Ax2k\breve{a}\omega\Omega\imath+\KaTeX} MathFrak: \mathfrak{Ax2k\breve{a}\omega\Omega\imath+\KaTeX} MathIt: \mathit{Ax2k\breve{a}\omega\Omega\imath+\KaTeX} +MathOp: a\mathop+b\mathop:c\mathop{\delta}e\mathop{\textrm{and}}f\mathrel{\mathop{:}}=g\sin h MathRm: \mathrm{Ax2k\breve{a}\omega\Omega\imath+\KaTeX} MathSf: \mathsf{Ax2k\breve{a}\omega\Omega\imath+\KaTeX} MathScr: \mathscr{Ax2k\breve{a}\omega\Omega\imath+\KaTeX}