Mark delimiters with the proper class (mopen or mclose).
This fixes some atom spacing issues. Update the BinCancellation screenshotter test.
This commit is contained in:
parent
1a99e7a2e9
commit
dc79b91dbf
|
@ -235,12 +235,11 @@ var isCharacterBox = function(group) {
|
||||||
baseElem.type === "punct";
|
baseElem.type === "punct";
|
||||||
};
|
};
|
||||||
|
|
||||||
var makeNullDelimiter = function(options) {
|
var makeNullDelimiter = function(options, classes) {
|
||||||
return makeSpan([
|
return makeSpan(classes.concat([
|
||||||
"sizing", "reset-" + options.size, "size5",
|
"sizing", "reset-" + options.size, "size5",
|
||||||
options.style.reset(), Style.TEXT.cls(),
|
options.style.reset(), Style.TEXT.cls(),
|
||||||
"nulldelimiter",
|
"nulldelimiter"]));
|
||||||
]);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -562,18 +561,18 @@ groupTypes.genfrac = function(group, options) {
|
||||||
var leftDelim;
|
var leftDelim;
|
||||||
var rightDelim;
|
var rightDelim;
|
||||||
if (group.value.leftDelim == null) {
|
if (group.value.leftDelim == null) {
|
||||||
leftDelim = makeNullDelimiter(options);
|
leftDelim = makeNullDelimiter(options, ["mopen"]);
|
||||||
} else {
|
} else {
|
||||||
leftDelim = delimiter.customSizedDelim(
|
leftDelim = delimiter.customSizedDelim(
|
||||||
group.value.leftDelim, delimSize, true,
|
group.value.leftDelim, delimSize, true,
|
||||||
options.withStyle(style), group.mode);
|
options.withStyle(style), group.mode, ["mopen"]);
|
||||||
}
|
}
|
||||||
if (group.value.rightDelim == null) {
|
if (group.value.rightDelim == null) {
|
||||||
rightDelim = makeNullDelimiter(options);
|
rightDelim = makeNullDelimiter(options, ["mclose"]);
|
||||||
} else {
|
} else {
|
||||||
rightDelim = delimiter.customSizedDelim(
|
rightDelim = delimiter.customSizedDelim(
|
||||||
group.value.rightDelim, delimSize, true,
|
group.value.rightDelim, delimSize, true,
|
||||||
options.withStyle(style), group.mode);
|
options.withStyle(style), group.mode, ["mclose"]);
|
||||||
}
|
}
|
||||||
|
|
||||||
return makeSpan(
|
return makeSpan(
|
||||||
|
@ -1205,11 +1204,9 @@ groupTypes.delimsizing = function(group, options) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Use delimiter.sizedDelim to generate the delimiter.
|
// Use delimiter.sizedDelim to generate the delimiter.
|
||||||
return makeSpan(
|
return delimiter.sizedDelim(
|
||||||
[groupToType[group.value.delimType]],
|
delim, group.value.size, options, group.mode,
|
||||||
[delimiter.sizedDelim(
|
[groupToType[group.value.delimType]]);
|
||||||
delim, group.value.size, options, group.mode)],
|
|
||||||
options);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
groupTypes.leftright = function(group, options) {
|
groupTypes.leftright = function(group, options) {
|
||||||
|
@ -1236,13 +1233,13 @@ groupTypes.leftright = function(group, options) {
|
||||||
var leftDelim;
|
var leftDelim;
|
||||||
if (group.value.left === ".") {
|
if (group.value.left === ".") {
|
||||||
// Empty delimiters in \left and \right make null delimiter spaces.
|
// Empty delimiters in \left and \right make null delimiter spaces.
|
||||||
leftDelim = makeNullDelimiter(options);
|
leftDelim = makeNullDelimiter(options, ["mopen"]);
|
||||||
} else {
|
} else {
|
||||||
// Otherwise, use leftRightDelim to generate the correct sized
|
// Otherwise, use leftRightDelim to generate the correct sized
|
||||||
// delimiter.
|
// delimiter.
|
||||||
leftDelim = delimiter.leftRightDelim(
|
leftDelim = delimiter.leftRightDelim(
|
||||||
group.value.left, innerHeight, innerDepth, options,
|
group.value.left, innerHeight, innerDepth, options,
|
||||||
group.mode);
|
group.mode, ["mopen"]);
|
||||||
}
|
}
|
||||||
// Add it to the beginning of the expression
|
// Add it to the beginning of the expression
|
||||||
inner.unshift(leftDelim);
|
inner.unshift(leftDelim);
|
||||||
|
@ -1250,11 +1247,11 @@ groupTypes.leftright = function(group, options) {
|
||||||
var rightDelim;
|
var rightDelim;
|
||||||
// Same for the right delimiter
|
// Same for the right delimiter
|
||||||
if (group.value.right === ".") {
|
if (group.value.right === ".") {
|
||||||
rightDelim = makeNullDelimiter(options);
|
rightDelim = makeNullDelimiter(options, ["mclose"]);
|
||||||
} else {
|
} else {
|
||||||
rightDelim = delimiter.leftRightDelim(
|
rightDelim = delimiter.leftRightDelim(
|
||||||
group.value.right, innerHeight, innerDepth, options,
|
group.value.right, innerHeight, innerDepth, options,
|
||||||
group.mode);
|
group.mode, ["mclose"]);
|
||||||
}
|
}
|
||||||
// Add it to the end of the expression.
|
// Add it to the end of the expression.
|
||||||
inner.push(rightDelim);
|
inner.push(rightDelim);
|
||||||
|
|
|
@ -56,9 +56,11 @@ var mathrmSize = function(value, size, mode, options) {
|
||||||
* Puts a delimiter span in a given style, and adds appropriate height, depth,
|
* Puts a delimiter span in a given style, and adds appropriate height, depth,
|
||||||
* and maxFontSizes.
|
* and maxFontSizes.
|
||||||
*/
|
*/
|
||||||
var styleWrap = function(delim, toStyle, options) {
|
var styleWrap = function(delim, toStyle, options, classes) {
|
||||||
|
classes = classes || [];
|
||||||
var span = makeSpan(
|
var span = makeSpan(
|
||||||
["style-wrap", options.style.reset(), toStyle.cls()], [delim], options);
|
classes.concat(["style-wrap", options.style.reset(), toStyle.cls()]),
|
||||||
|
[delim], options);
|
||||||
|
|
||||||
var multiplier = toStyle.sizeMultiplier / options.style.sizeMultiplier;
|
var multiplier = toStyle.sizeMultiplier / options.style.sizeMultiplier;
|
||||||
|
|
||||||
|
@ -74,10 +76,10 @@ var styleWrap = function(delim, toStyle, options) {
|
||||||
* font, but is restyled to either be in textstyle, scriptstyle, or
|
* font, but is restyled to either be in textstyle, scriptstyle, or
|
||||||
* scriptscriptstyle.
|
* scriptscriptstyle.
|
||||||
*/
|
*/
|
||||||
var makeSmallDelim = function(delim, style, center, options, mode) {
|
var makeSmallDelim = function(delim, style, center, options, mode, classes) {
|
||||||
var text = buildCommon.makeSymbol(delim, "Main-Regular", mode, options);
|
var text = buildCommon.makeSymbol(delim, "Main-Regular", mode, options);
|
||||||
|
|
||||||
var span = styleWrap(text, style, options);
|
var span = styleWrap(text, style, options, classes);
|
||||||
|
|
||||||
if (center) {
|
if (center) {
|
||||||
var shift =
|
var shift =
|
||||||
|
@ -96,13 +98,12 @@ var makeSmallDelim = function(delim, style, center, options, mode) {
|
||||||
* Makes a large delimiter. This is a delimiter that comes in the Size1, Size2,
|
* Makes a large delimiter. This is a delimiter that comes in the Size1, Size2,
|
||||||
* Size3, or Size4 fonts. It is always rendered in textstyle.
|
* Size3, or Size4 fonts. It is always rendered in textstyle.
|
||||||
*/
|
*/
|
||||||
var makeLargeDelim = function(delim, size, center, options, mode) {
|
var makeLargeDelim = function(delim, size, center, options, mode, classes) {
|
||||||
var inner = mathrmSize(delim, size, mode, options);
|
var inner = mathrmSize(delim, size, mode, options);
|
||||||
|
|
||||||
var span = styleWrap(
|
var span = styleWrap(
|
||||||
makeSpan(["delimsizing", "size" + size],
|
makeSpan(["delimsizing", "size" + size], [inner], options),
|
||||||
[inner], options),
|
Style.TEXT, options, classes);
|
||||||
Style.TEXT, options);
|
|
||||||
|
|
||||||
if (center) {
|
if (center) {
|
||||||
var shift = (1 - options.style.sizeMultiplier) *
|
var shift = (1 - options.style.sizeMultiplier) *
|
||||||
|
@ -142,7 +143,8 @@ var makeInner = function(symbol, font, mode) {
|
||||||
* Make a stacked delimiter out of a given delimiter, with the total height at
|
* Make a stacked delimiter out of a given delimiter, with the total height at
|
||||||
* least `heightTotal`. This routine is mentioned on page 442 of the TeXbook.
|
* least `heightTotal`. This routine is mentioned on page 442 of the TeXbook.
|
||||||
*/
|
*/
|
||||||
var makeStackedDelim = function(delim, heightTotal, center, options, mode) {
|
var makeStackedDelim = function(delim, heightTotal, center, options, mode,
|
||||||
|
classes) {
|
||||||
// There are four parts, the top, an optional middle, a repeated part, and a
|
// There are four parts, the top, an optional middle, a repeated part, and a
|
||||||
// bottom.
|
// bottom.
|
||||||
var top;
|
var top;
|
||||||
|
@ -320,7 +322,7 @@ var makeStackedDelim = function(delim, heightTotal, center, options, mode) {
|
||||||
|
|
||||||
return styleWrap(
|
return styleWrap(
|
||||||
makeSpan(["delimsizing", "mult"], [inner], options),
|
makeSpan(["delimsizing", "mult"], [inner], options),
|
||||||
Style.TEXT, options);
|
Style.TEXT, options, classes);
|
||||||
};
|
};
|
||||||
|
|
||||||
// There are three kinds of delimiters, delimiters that stack when they become
|
// There are three kinds of delimiters, delimiters that stack when they become
|
||||||
|
@ -354,7 +356,7 @@ var sizeToMaxHeight = [0, 1.2, 1.8, 2.4, 3.0];
|
||||||
/**
|
/**
|
||||||
* Used to create a delimiter of a specific size, where `size` is 1, 2, 3, or 4.
|
* Used to create a delimiter of a specific size, where `size` is 1, 2, 3, or 4.
|
||||||
*/
|
*/
|
||||||
var makeSizedDelim = function(delim, size, options, mode) {
|
var makeSizedDelim = function(delim, size, options, mode, classes) {
|
||||||
// < and > turn into \langle and \rangle in delimiters
|
// < and > turn into \langle and \rangle in delimiters
|
||||||
if (delim === "<" || delim === "\\lt") {
|
if (delim === "<" || delim === "\\lt") {
|
||||||
delim = "\\langle";
|
delim = "\\langle";
|
||||||
|
@ -365,10 +367,10 @@ var makeSizedDelim = function(delim, size, options, mode) {
|
||||||
// Sized delimiters are never centered.
|
// Sized delimiters are never centered.
|
||||||
if (utils.contains(stackLargeDelimiters, delim) ||
|
if (utils.contains(stackLargeDelimiters, delim) ||
|
||||||
utils.contains(stackNeverDelimiters, delim)) {
|
utils.contains(stackNeverDelimiters, delim)) {
|
||||||
return makeLargeDelim(delim, size, false, options, mode);
|
return makeLargeDelim(delim, size, false, options, mode, classes);
|
||||||
} else if (utils.contains(stackAlwaysDelimiters, delim)) {
|
} else if (utils.contains(stackAlwaysDelimiters, delim)) {
|
||||||
return makeStackedDelim(
|
return makeStackedDelim(
|
||||||
delim, sizeToMaxHeight[size], false, options, mode);
|
delim, sizeToMaxHeight[size], false, options, mode, classes);
|
||||||
} else {
|
} else {
|
||||||
throw new ParseError("Illegal delimiter: '" + delim + "'");
|
throw new ParseError("Illegal delimiter: '" + delim + "'");
|
||||||
}
|
}
|
||||||
|
@ -471,7 +473,8 @@ var traverseSequence = function(delim, height, sequence, options) {
|
||||||
* Make a delimiter of a given height+depth, with optional centering. Here, we
|
* Make a delimiter of a given height+depth, with optional centering. Here, we
|
||||||
* traverse the sequences, and create a delimiter that the sequence tells us to.
|
* traverse the sequences, and create a delimiter that the sequence tells us to.
|
||||||
*/
|
*/
|
||||||
var makeCustomSizedDelim = function(delim, height, center, options, mode) {
|
var makeCustomSizedDelim = function(delim, height, center, options, mode,
|
||||||
|
classes) {
|
||||||
if (delim === "<" || delim === "\\lt") {
|
if (delim === "<" || delim === "\\lt") {
|
||||||
delim = "\\langle";
|
delim = "\\langle";
|
||||||
} else if (delim === ">" || delim === "\\gt") {
|
} else if (delim === ">" || delim === "\\gt") {
|
||||||
|
@ -494,11 +497,13 @@ var makeCustomSizedDelim = function(delim, height, center, options, mode) {
|
||||||
// Depending on the sequence element we decided on, call the appropriate
|
// Depending on the sequence element we decided on, call the appropriate
|
||||||
// function.
|
// function.
|
||||||
if (delimType.type === "small") {
|
if (delimType.type === "small") {
|
||||||
return makeSmallDelim(delim, delimType.style, center, options, mode);
|
return makeSmallDelim(delim, delimType.style, center, options, mode,
|
||||||
|
classes);
|
||||||
} else if (delimType.type === "large") {
|
} else if (delimType.type === "large") {
|
||||||
return makeLargeDelim(delim, delimType.size, center, options, mode);
|
return makeLargeDelim(delim, delimType.size, center, options, mode,
|
||||||
|
classes);
|
||||||
} else if (delimType.type === "stack") {
|
} else if (delimType.type === "stack") {
|
||||||
return makeStackedDelim(delim, height, center, options, mode);
|
return makeStackedDelim(delim, height, center, options, mode, classes);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -506,7 +511,8 @@ var makeCustomSizedDelim = function(delim, height, center, options, mode) {
|
||||||
* Make a delimiter for use with `\left` and `\right`, given a height and depth
|
* Make a delimiter for use with `\left` and `\right`, given a height and depth
|
||||||
* of an expression that the delimiters surround.
|
* of an expression that the delimiters surround.
|
||||||
*/
|
*/
|
||||||
var makeLeftRightDelim = function(delim, height, depth, options, mode) {
|
var makeLeftRightDelim = function(delim, height, depth, options, mode,
|
||||||
|
classes) {
|
||||||
// We always center \left/\right delimiters, so the axis is always shifted
|
// We always center \left/\right delimiters, so the axis is always shifted
|
||||||
var axisHeight =
|
var axisHeight =
|
||||||
options.style.metrics.axisHeight * options.style.sizeMultiplier;
|
options.style.metrics.axisHeight * options.style.sizeMultiplier;
|
||||||
|
@ -533,7 +539,8 @@ var makeLeftRightDelim = function(delim, height, depth, options, mode) {
|
||||||
|
|
||||||
// Finally, we defer to `makeCustomSizedDelim` with our calculated total
|
// Finally, we defer to `makeCustomSizedDelim` with our calculated total
|
||||||
// height
|
// height
|
||||||
return makeCustomSizedDelim(delim, totalHeight, true, options, mode);
|
return makeCustomSizedDelim(delim, totalHeight, true, options, mode,
|
||||||
|
classes);
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 7.3 KiB After Width: | Height: | Size: 9.9 KiB |
Binary file not shown.
Before Width: | Height: | Size: 6.8 KiB After Width: | Height: | Size: 8.9 KiB |
|
@ -28,8 +28,8 @@ Baseline: a+b-c\cdot d/e
|
||||||
BasicTest: a
|
BasicTest: a
|
||||||
BinCancellation: |
|
BinCancellation: |
|
||||||
\begin{array}{ccc}
|
\begin{array}{ccc}
|
||||||
+1 & 1+ & 1+1 \\
|
+1 & 1+ & 1+1 & (,) \\
|
||||||
1++1 & 3\times) & 1+,
|
1++1 & 3\times) & 1+, & \left(,\right)
|
||||||
\end{array}
|
\end{array}
|
||||||
BinomTest: \dbinom{a}{b}\tbinom{a}{b}^{\binom{a}{b}+17}
|
BinomTest: \dbinom{a}{b}\tbinom{a}{b}^{\binom{a}{b}+17}
|
||||||
BoldSpacing: \mathbf{A}^2+\mathbf{B}_3*\mathscr{C}'
|
BoldSpacing: \mathbf{A}^2+\mathbf{B}_3*\mathscr{C}'
|
||||||
|
|
Loading…
Reference in New Issue
Block a user