mirror of
https://github.com/Smaug123/KaTeX
synced 2025-10-06 11:48:41 +00:00
Improve MathML for characters in Unicode private use area (#1908)
* Add macros for private area characters * Add \nsupseteqq and \nsubseteqq
This commit is contained in:
@@ -812,6 +812,23 @@ defineMacro("\\notni", "\\html@mathml{\\not\\ni}{\\mathrel{\\char`\u220C}}");
|
|||||||
defineMacro("\\limsup", "\\DOTSB\\mathop{\\operatorname{lim\\,sup}}\\limits");
|
defineMacro("\\limsup", "\\DOTSB\\mathop{\\operatorname{lim\\,sup}}\\limits");
|
||||||
defineMacro("\\liminf", "\\DOTSB\\mathop{\\operatorname{lim\\,inf}}\\limits");
|
defineMacro("\\liminf", "\\DOTSB\\mathop{\\operatorname{lim\\,inf}}\\limits");
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
// MathML alternates for KaTeX glyphs in the Unicode private area
|
||||||
|
defineMacro("\\gvertneqq", "\\html@mathml{\\@gvertneqq}{\u2269}");
|
||||||
|
defineMacro("\\lvertneqq", "\\html@mathml{\\@lvertneqq}{\u2268}");
|
||||||
|
defineMacro("\\ngeqq", "\\html@mathml{\\@ngeqq}{\u2271}");
|
||||||
|
defineMacro("\\ngeqslant", "\\html@mathml{\\@ngeqslant}{\u2271}");
|
||||||
|
defineMacro("\\nleqq", "\\html@mathml{\\@nleqq}{\u2270}");
|
||||||
|
defineMacro("\\nleqslant", "\\html@mathml{\\@nleqslant}{\u2270}");
|
||||||
|
defineMacro("\\nshortmid", "\\html@mathml{\\@nshortmid}{∤}");
|
||||||
|
defineMacro("\\nshortparallel", "\\html@mathml{\\@nshortparallel}{∦}");
|
||||||
|
defineMacro("\\nsubseteqq", "\\html@mathml{\\@nsubseteqq}{\u2288}");
|
||||||
|
defineMacro("\\nsupseteqq", "\\html@mathml{\\@nsupseteqq}{\u2289}");
|
||||||
|
defineMacro("\\varsubsetneq", "\\html@mathml{\\@varsubsetneq}{⊊}");
|
||||||
|
defineMacro("\\varsubsetneqq", "\\html@mathml{\\@varsubsetneqq}{⫋}");
|
||||||
|
defineMacro("\\varsupsetneq", "\\html@mathml{\\@varsupsetneq}{⊋}");
|
||||||
|
defineMacro("\\varsupsetneqq", "\\html@mathml{\\@varsupsetneqq}{⫌}");
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
// semantic
|
// semantic
|
||||||
|
|
||||||
|
@@ -202,11 +202,12 @@ defineSymbol(math, main, rel, "\u21cc", "\\rightleftharpoons", true);
|
|||||||
|
|
||||||
// AMS Negated Binary Relations
|
// AMS Negated Binary Relations
|
||||||
defineSymbol(math, ams, rel, "\u226e", "\\nless", true);
|
defineSymbol(math, ams, rel, "\u226e", "\\nless", true);
|
||||||
defineSymbol(math, ams, rel, "\ue010", "\\nleqslant");
|
// Symbol names preceeded by "@" each have a corresponding macro.
|
||||||
defineSymbol(math, ams, rel, "\ue011", "\\nleqq");
|
defineSymbol(math, ams, rel, "\ue010", "\\@nleqslant");
|
||||||
|
defineSymbol(math, ams, rel, "\ue011", "\\@nleqq");
|
||||||
defineSymbol(math, ams, rel, "\u2a87", "\\lneq", true);
|
defineSymbol(math, ams, rel, "\u2a87", "\\lneq", true);
|
||||||
defineSymbol(math, ams, rel, "\u2268", "\\lneqq", true);
|
defineSymbol(math, ams, rel, "\u2268", "\\lneqq", true);
|
||||||
defineSymbol(math, ams, rel, "\ue00c", "\\lvertneqq");
|
defineSymbol(math, ams, rel, "\ue00c", "\\@lvertneqq");
|
||||||
defineSymbol(math, ams, rel, "\u22e6", "\\lnsim", true);
|
defineSymbol(math, ams, rel, "\u22e6", "\\lnsim", true);
|
||||||
defineSymbol(math, ams, rel, "\u2a89", "\\lnapprox", true);
|
defineSymbol(math, ams, rel, "\u2a89", "\\lnapprox", true);
|
||||||
defineSymbol(math, ams, rel, "\u2280", "\\nprec", true);
|
defineSymbol(math, ams, rel, "\u2280", "\\nprec", true);
|
||||||
@@ -215,22 +216,22 @@ defineSymbol(math, ams, rel, "\u22e0", "\\npreceq", true);
|
|||||||
defineSymbol(math, ams, rel, "\u22e8", "\\precnsim", true);
|
defineSymbol(math, ams, rel, "\u22e8", "\\precnsim", true);
|
||||||
defineSymbol(math, ams, rel, "\u2ab9", "\\precnapprox", true);
|
defineSymbol(math, ams, rel, "\u2ab9", "\\precnapprox", true);
|
||||||
defineSymbol(math, ams, rel, "\u2241", "\\nsim", true);
|
defineSymbol(math, ams, rel, "\u2241", "\\nsim", true);
|
||||||
defineSymbol(math, ams, rel, "\ue006", "\\nshortmid");
|
defineSymbol(math, ams, rel, "\ue006", "\\@nshortmid");
|
||||||
defineSymbol(math, ams, rel, "\u2224", "\\nmid", true);
|
defineSymbol(math, ams, rel, "\u2224", "\\nmid", true);
|
||||||
defineSymbol(math, ams, rel, "\u22ac", "\\nvdash", true);
|
defineSymbol(math, ams, rel, "\u22ac", "\\nvdash", true);
|
||||||
defineSymbol(math, ams, rel, "\u22ad", "\\nvDash", true);
|
defineSymbol(math, ams, rel, "\u22ad", "\\nvDash", true);
|
||||||
defineSymbol(math, ams, rel, "\u22ea", "\\ntriangleleft");
|
defineSymbol(math, ams, rel, "\u22ea", "\\ntriangleleft");
|
||||||
defineSymbol(math, ams, rel, "\u22ec", "\\ntrianglelefteq", true);
|
defineSymbol(math, ams, rel, "\u22ec", "\\ntrianglelefteq", true);
|
||||||
defineSymbol(math, ams, rel, "\u228a", "\\subsetneq", true);
|
defineSymbol(math, ams, rel, "\u228a", "\\subsetneq", true);
|
||||||
defineSymbol(math, ams, rel, "\ue01a", "\\varsubsetneq");
|
defineSymbol(math, ams, rel, "\ue01a", "\\@varsubsetneq");
|
||||||
defineSymbol(math, ams, rel, "\u2acb", "\\subsetneqq", true);
|
defineSymbol(math, ams, rel, "\u2acb", "\\subsetneqq", true);
|
||||||
defineSymbol(math, ams, rel, "\ue017", "\\varsubsetneqq");
|
defineSymbol(math, ams, rel, "\ue017", "\\@varsubsetneqq");
|
||||||
defineSymbol(math, ams, rel, "\u226f", "\\ngtr", true);
|
defineSymbol(math, ams, rel, "\u226f", "\\ngtr", true);
|
||||||
defineSymbol(math, ams, rel, "\ue00f", "\\ngeqslant");
|
defineSymbol(math, ams, rel, "\ue00f", "\\@ngeqslant");
|
||||||
defineSymbol(math, ams, rel, "\ue00e", "\\ngeqq");
|
defineSymbol(math, ams, rel, "\ue00e", "\\@ngeqq");
|
||||||
defineSymbol(math, ams, rel, "\u2a88", "\\gneq", true);
|
defineSymbol(math, ams, rel, "\u2a88", "\\gneq", true);
|
||||||
defineSymbol(math, ams, rel, "\u2269", "\\gneqq", true);
|
defineSymbol(math, ams, rel, "\u2269", "\\gneqq", true);
|
||||||
defineSymbol(math, ams, rel, "\ue00d", "\\gvertneqq");
|
defineSymbol(math, ams, rel, "\ue00d", "\\@gvertneqq");
|
||||||
defineSymbol(math, ams, rel, "\u22e7", "\\gnsim", true);
|
defineSymbol(math, ams, rel, "\u22e7", "\\gnsim", true);
|
||||||
defineSymbol(math, ams, rel, "\u2a8a", "\\gnapprox", true);
|
defineSymbol(math, ams, rel, "\u2a8a", "\\gnapprox", true);
|
||||||
defineSymbol(math, ams, rel, "\u2281", "\\nsucc", true);
|
defineSymbol(math, ams, rel, "\u2281", "\\nsucc", true);
|
||||||
@@ -240,20 +241,20 @@ defineSymbol(math, ams, rel, "\u22e9", "\\succnsim", true);
|
|||||||
defineSymbol(math, ams, rel, "\u2aba", "\\succnapprox", true);
|
defineSymbol(math, ams, rel, "\u2aba", "\\succnapprox", true);
|
||||||
// unicode-math maps \u2246 to \simneqq. We'll use the AMS synonym.
|
// unicode-math maps \u2246 to \simneqq. We'll use the AMS synonym.
|
||||||
defineSymbol(math, ams, rel, "\u2246", "\\ncong", true);
|
defineSymbol(math, ams, rel, "\u2246", "\\ncong", true);
|
||||||
defineSymbol(math, ams, rel, "\ue007", "\\nshortparallel");
|
defineSymbol(math, ams, rel, "\ue007", "\\@nshortparallel");
|
||||||
defineSymbol(math, ams, rel, "\u2226", "\\nparallel", true);
|
defineSymbol(math, ams, rel, "\u2226", "\\nparallel", true);
|
||||||
defineSymbol(math, ams, rel, "\u22af", "\\nVDash", true);
|
defineSymbol(math, ams, rel, "\u22af", "\\nVDash", true);
|
||||||
defineSymbol(math, ams, rel, "\u22eb", "\\ntriangleright");
|
defineSymbol(math, ams, rel, "\u22eb", "\\ntriangleright");
|
||||||
defineSymbol(math, ams, rel, "\u22ed", "\\ntrianglerighteq", true);
|
defineSymbol(math, ams, rel, "\u22ed", "\\ntrianglerighteq", true);
|
||||||
defineSymbol(math, ams, rel, "\ue018", "\\nsupseteqq");
|
defineSymbol(math, ams, rel, "\ue018", "\\@nsupseteqq");
|
||||||
defineSymbol(math, ams, rel, "\u228b", "\\supsetneq", true);
|
defineSymbol(math, ams, rel, "\u228b", "\\supsetneq", true);
|
||||||
defineSymbol(math, ams, rel, "\ue01b", "\\varsupsetneq");
|
defineSymbol(math, ams, rel, "\ue01b", "\\@varsupsetneq");
|
||||||
defineSymbol(math, ams, rel, "\u2acc", "\\supsetneqq", true);
|
defineSymbol(math, ams, rel, "\u2acc", "\\supsetneqq", true);
|
||||||
defineSymbol(math, ams, rel, "\ue019", "\\varsupsetneqq");
|
defineSymbol(math, ams, rel, "\ue019", "\\@varsupsetneqq");
|
||||||
defineSymbol(math, ams, rel, "\u22ae", "\\nVdash", true);
|
defineSymbol(math, ams, rel, "\u22ae", "\\nVdash", true);
|
||||||
defineSymbol(math, ams, rel, "\u2ab5", "\\precneqq", true);
|
defineSymbol(math, ams, rel, "\u2ab5", "\\precneqq", true);
|
||||||
defineSymbol(math, ams, rel, "\u2ab6", "\\succneqq", true);
|
defineSymbol(math, ams, rel, "\u2ab6", "\\succneqq", true);
|
||||||
defineSymbol(math, ams, rel, "\ue016", "\\nsubseteqq");
|
defineSymbol(math, ams, rel, "\ue016", "\\@nsubseteqq");
|
||||||
defineSymbol(math, ams, bin, "\u22b4", "\\unlhd");
|
defineSymbol(math, ams, bin, "\u22b4", "\\unlhd");
|
||||||
defineSymbol(math, ams, bin, "\u22b5", "\\unrhd");
|
defineSymbol(math, ams, bin, "\u22b5", "\\unrhd");
|
||||||
|
|
||||||
|
@@ -2998,6 +2998,12 @@ describe("A macro expander", function() {
|
|||||||
expect('\\char"g').not.toParse();
|
expect('\\char"g').not.toParse();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("should build Unicode private area characters", function() {
|
||||||
|
expect`\gvertneqq\lvertneqq\ngeqq\ngeqslant\nleqq`.toBuild();
|
||||||
|
expect`\nleqslant\nshortmid\nshortparallel\varsubsetneq`.toBuild();
|
||||||
|
expect`\varsubsetneqq\varsupsetneq\varsupsetneqq`.toBuild();
|
||||||
|
});
|
||||||
|
|
||||||
// TODO(edemaine): This doesn't work yet. Parses like `\text text`,
|
// TODO(edemaine): This doesn't work yet. Parses like `\text text`,
|
||||||
// which doesn't treat all four letters as an argument.
|
// which doesn't treat all four letters as an argument.
|
||||||
//it("\\TextOrMath should work in a macro passed to \\text", function() {
|
//it("\\TextOrMath should work in a macro passed to \\text", function() {
|
||||||
|
Reference in New Issue
Block a user