Fix \not vertical alignment (#1497)

* Fix \not vertical alignment

Fix #1491 by changing from `position: absolute` to `position: relative`.

* Switch to \rlap implementation of \not

* Separate \not the macro from \not the symbol via \@not

* Fix test
This commit is contained in:
Erik Demaine
2018-07-23 13:01:02 -04:00
committed by ylemkimon
parent 237986a7ca
commit cbd3afd738
4 changed files with 12 additions and 11 deletions

View File

@@ -183,15 +183,6 @@ export const buildExpression = function(
}
}
// Process \\not commands within the group.
for (let i = 0; i < groups.length; i++) {
const group = groups[i];
if (group instanceof domTree.symbolNode && group.value === "\u0338") {
// Results in a solidus being overlaid over the following group/atom.
group.style.position = "absolute";
}
}
return groups;
};

View File

@@ -357,6 +357,12 @@ defineMacro("\\llap", "\\mathllap{\\textrm{#1}}");
defineMacro("\\rlap", "\\mathrlap{\\textrm{#1}}");
defineMacro("\\clap", "\\mathclap{\\textrm{#1}}");
// \not is defined by base/fontmath.ltx via
// \DeclareMathSymbol{\not}{\mathrel}{symbols}{"36}
// It's thus treated like a \mathrel, but defined by a symbol that has zero
// width but extends to the right. We use \rlap to get that spacing.
defineMacro("\\not", '\\mathrel{\\mathrlap\\@not}');
// Negated symbols from base/fontmath.ltx:
// \def\neq{\not=} \let\ne=\neq
// \DeclareRobustCommand

View File

@@ -563,7 +563,7 @@ defineSymbol(math, main, rel, "\u2265", "\\geq", true);
defineSymbol(math, main, rel, "\u2190", "\\gets");
defineSymbol(math, main, rel, ">", "\\gt");
defineSymbol(math, main, rel, "\u2208", "\\in", true);
defineSymbol(math, main, rel, "\u0338", "\\not");
defineSymbol(math, main, rel, "\u0338", "\\@not");
defineSymbol(math, main, rel, "\u2282", "\\subset", true);
defineSymbol(math, main, rel, "\u2283", "\\supset", true);
defineSymbol(math, main, rel, "\u2286", "\\subseteq", true);

View File

@@ -93,7 +93,11 @@ describe("A rel parser", function() {
if (group.type === "htmlmathml") {
group = group.value.html[0];
}
expect(group.type).toEqual("rel");
if (group.type === "mclass") {
expect(group.value.mclass).toEqual("mrel");
} else {
expect(group.type).toEqual("rel");
}
}
});
});