katex 0.10.1 → 0.10.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +51 -0
- package/README.md +4 -4
- package/cli.js +0 -0
- package/contrib/copy-tex/README.md +3 -3
- package/contrib/mathtex-script-type/README.md +5 -5
- package/contrib/mhchem/README.md +1 -1
- package/dist/README.md +4 -4
- package/dist/fonts/KaTeX_AMS-Regular.ttf +0 -0
- package/dist/fonts/KaTeX_AMS-Regular.woff +0 -0
- package/dist/fonts/KaTeX_AMS-Regular.woff2 +0 -0
- package/dist/fonts/KaTeX_Caligraphic-Bold.ttf +0 -0
- package/dist/fonts/KaTeX_Caligraphic-Bold.woff +0 -0
- package/dist/fonts/KaTeX_Caligraphic-Bold.woff2 +0 -0
- package/dist/fonts/KaTeX_Caligraphic-Regular.ttf +0 -0
- package/dist/fonts/KaTeX_Caligraphic-Regular.woff +0 -0
- package/dist/fonts/KaTeX_Caligraphic-Regular.woff2 +0 -0
- package/dist/fonts/KaTeX_Fraktur-Bold.ttf +0 -0
- package/dist/fonts/KaTeX_Fraktur-Bold.woff +0 -0
- package/dist/fonts/KaTeX_Fraktur-Bold.woff2 +0 -0
- package/dist/fonts/KaTeX_Fraktur-Regular.ttf +0 -0
- package/dist/fonts/KaTeX_Fraktur-Regular.woff +0 -0
- package/dist/fonts/KaTeX_Fraktur-Regular.woff2 +0 -0
- package/dist/fonts/KaTeX_Main-Bold.ttf +0 -0
- package/dist/fonts/KaTeX_Main-Bold.woff +0 -0
- package/dist/fonts/KaTeX_Main-Bold.woff2 +0 -0
- package/dist/fonts/KaTeX_Main-BoldItalic.ttf +0 -0
- package/dist/fonts/KaTeX_Main-BoldItalic.woff +0 -0
- package/dist/fonts/KaTeX_Main-BoldItalic.woff2 +0 -0
- package/dist/fonts/KaTeX_Main-Italic.ttf +0 -0
- package/dist/fonts/KaTeX_Main-Italic.woff +0 -0
- package/dist/fonts/KaTeX_Main-Italic.woff2 +0 -0
- package/dist/fonts/KaTeX_Main-Regular.ttf +0 -0
- package/dist/fonts/KaTeX_Main-Regular.woff +0 -0
- package/dist/fonts/KaTeX_Main-Regular.woff2 +0 -0
- package/dist/fonts/KaTeX_Math-BoldItalic.ttf +0 -0
- package/dist/fonts/KaTeX_Math-BoldItalic.woff +0 -0
- package/dist/fonts/KaTeX_Math-BoldItalic.woff2 +0 -0
- package/dist/fonts/KaTeX_Math-Italic.ttf +0 -0
- package/dist/fonts/KaTeX_Math-Italic.woff +0 -0
- package/dist/fonts/KaTeX_Math-Italic.woff2 +0 -0
- package/dist/fonts/KaTeX_SansSerif-Bold.ttf +0 -0
- package/dist/fonts/KaTeX_SansSerif-Bold.woff +0 -0
- package/dist/fonts/KaTeX_SansSerif-Bold.woff2 +0 -0
- package/dist/fonts/KaTeX_SansSerif-Italic.ttf +0 -0
- package/dist/fonts/KaTeX_SansSerif-Italic.woff +0 -0
- package/dist/fonts/KaTeX_SansSerif-Italic.woff2 +0 -0
- package/dist/fonts/KaTeX_SansSerif-Regular.ttf +0 -0
- package/dist/fonts/KaTeX_SansSerif-Regular.woff +0 -0
- package/dist/fonts/KaTeX_SansSerif-Regular.woff2 +0 -0
- package/dist/fonts/KaTeX_Script-Regular.ttf +0 -0
- package/dist/fonts/KaTeX_Script-Regular.woff +0 -0
- package/dist/fonts/KaTeX_Script-Regular.woff2 +0 -0
- package/dist/fonts/KaTeX_Size1-Regular.ttf +0 -0
- package/dist/fonts/KaTeX_Size1-Regular.woff +0 -0
- package/dist/fonts/KaTeX_Size1-Regular.woff2 +0 -0
- package/dist/fonts/KaTeX_Size2-Regular.ttf +0 -0
- package/dist/fonts/KaTeX_Size2-Regular.woff +0 -0
- package/dist/fonts/KaTeX_Size2-Regular.woff2 +0 -0
- package/dist/fonts/KaTeX_Size3-Regular.ttf +0 -0
- package/dist/fonts/KaTeX_Size3-Regular.woff +0 -0
- package/dist/fonts/KaTeX_Size3-Regular.woff2 +0 -0
- package/dist/fonts/KaTeX_Size4-Regular.ttf +0 -0
- package/dist/fonts/KaTeX_Size4-Regular.woff +0 -0
- package/dist/fonts/KaTeX_Size4-Regular.woff2 +0 -0
- package/dist/fonts/KaTeX_Typewriter-Regular.ttf +0 -0
- package/dist/fonts/KaTeX_Typewriter-Regular.woff +0 -0
- package/dist/fonts/KaTeX_Typewriter-Regular.woff2 +0 -0
- package/dist/katex.css +10 -0
- package/dist/katex.js +541 -249
- package/dist/katex.min.css +1 -1
- package/dist/katex.min.js +1 -1
- package/dist/katex.mjs +418 -198
- package/package.json +1 -1
- package/src/Options.js +11 -75
- package/src/buildMathML.js +13 -3
- package/src/domTree.js +63 -0
- package/src/environments/array.js +118 -2
- package/src/fontMetrics.js +3 -2
- package/src/functions/arrow.js +15 -5
- package/src/functions/color.js +2 -37
- package/src/functions/delimsizing.js +12 -2
- package/src/functions/enclose.js +15 -3
- package/src/functions/genfrac.js +31 -12
- package/src/functions/includegraphics.js +146 -0
- package/src/functions/mclass.js +1 -0
- package/src/functions/op.js +18 -10
- package/src/functions/phantom.js +5 -2
- package/src/functions/rule.js +20 -9
- package/src/functions/supsub.js +6 -2
- package/src/functions/symbolsOp.js +4 -0
- package/src/functions/tag.js +20 -4
- package/src/functions/text.js +4 -2
- package/src/functions.js +2 -0
- package/src/katex.less +15 -0
- package/src/macros.js +144 -27
- package/src/mathMLTree.js +1 -1
- package/src/parseNode.js +20 -1
- package/src/stretchy.js +3 -1
- package/src/symbols.js +15 -15
package/dist/katex.js
CHANGED
|
@@ -1115,6 +1115,70 @@ function () {
|
|
|
1115
1115
|
|
|
1116
1116
|
return Anchor;
|
|
1117
1117
|
}();
|
|
1118
|
+
/**
|
|
1119
|
+
* This node represents an image embed (<img>) element.
|
|
1120
|
+
*/
|
|
1121
|
+
|
|
1122
|
+
var domTree_Img =
|
|
1123
|
+
/*#__PURE__*/
|
|
1124
|
+
function () {
|
|
1125
|
+
function Img(src, alt, style) {
|
|
1126
|
+
this.src = void 0;
|
|
1127
|
+
this.alt = void 0;
|
|
1128
|
+
this.classes = void 0;
|
|
1129
|
+
this.height = void 0;
|
|
1130
|
+
this.depth = void 0;
|
|
1131
|
+
this.maxFontSize = void 0;
|
|
1132
|
+
this.style = void 0;
|
|
1133
|
+
this.alt = alt;
|
|
1134
|
+
this.src = src;
|
|
1135
|
+
this.classes = ["mord"];
|
|
1136
|
+
this.style = style;
|
|
1137
|
+
}
|
|
1138
|
+
|
|
1139
|
+
var _proto3 = Img.prototype;
|
|
1140
|
+
|
|
1141
|
+
_proto3.hasClass = function hasClass(className) {
|
|
1142
|
+
return utils.contains(this.classes, className);
|
|
1143
|
+
};
|
|
1144
|
+
|
|
1145
|
+
_proto3.toNode = function toNode() {
|
|
1146
|
+
var node = document.createElement("img");
|
|
1147
|
+
node.src = this.src;
|
|
1148
|
+
node.alt = this.alt;
|
|
1149
|
+
node.className = "mord"; // Apply inline styles
|
|
1150
|
+
|
|
1151
|
+
for (var style in this.style) {
|
|
1152
|
+
if (this.style.hasOwnProperty(style)) {
|
|
1153
|
+
// $FlowFixMe
|
|
1154
|
+
node.style[style] = this.style[style];
|
|
1155
|
+
}
|
|
1156
|
+
}
|
|
1157
|
+
|
|
1158
|
+
return node;
|
|
1159
|
+
};
|
|
1160
|
+
|
|
1161
|
+
_proto3.toMarkup = function toMarkup() {
|
|
1162
|
+
var markup = "<img src='" + this.src + " 'alt='" + this.alt + "' "; // Add the styles, after hyphenation
|
|
1163
|
+
|
|
1164
|
+
var styles = "";
|
|
1165
|
+
|
|
1166
|
+
for (var style in this.style) {
|
|
1167
|
+
if (this.style.hasOwnProperty(style)) {
|
|
1168
|
+
styles += utils.hyphenate(style) + ":" + this.style[style] + ";";
|
|
1169
|
+
}
|
|
1170
|
+
}
|
|
1171
|
+
|
|
1172
|
+
if (styles) {
|
|
1173
|
+
markup += " style=\"" + utils.escape(styles) + "\"";
|
|
1174
|
+
}
|
|
1175
|
+
|
|
1176
|
+
markup += "'/>";
|
|
1177
|
+
return markup;
|
|
1178
|
+
};
|
|
1179
|
+
|
|
1180
|
+
return Img;
|
|
1181
|
+
}();
|
|
1118
1182
|
var iCombinations = {
|
|
1119
1183
|
'î': "\u0131\u0302",
|
|
1120
1184
|
'ï': "\u0131\u0308",
|
|
@@ -1169,9 +1233,9 @@ function () {
|
|
|
1169
1233
|
}
|
|
1170
1234
|
}
|
|
1171
1235
|
|
|
1172
|
-
var
|
|
1236
|
+
var _proto4 = SymbolNode.prototype;
|
|
1173
1237
|
|
|
1174
|
-
|
|
1238
|
+
_proto4.hasClass = function hasClass(className) {
|
|
1175
1239
|
return utils.contains(this.classes, className);
|
|
1176
1240
|
}
|
|
1177
1241
|
/**
|
|
@@ -1180,7 +1244,7 @@ function () {
|
|
|
1180
1244
|
*/
|
|
1181
1245
|
;
|
|
1182
1246
|
|
|
1183
|
-
|
|
1247
|
+
_proto4.toNode = function toNode() {
|
|
1184
1248
|
var node = document.createTextNode(this.text);
|
|
1185
1249
|
var span = null;
|
|
1186
1250
|
|
|
@@ -1214,7 +1278,7 @@ function () {
|
|
|
1214
1278
|
*/
|
|
1215
1279
|
;
|
|
1216
1280
|
|
|
1217
|
-
|
|
1281
|
+
_proto4.toMarkup = function toMarkup() {
|
|
1218
1282
|
// TODO(alpert): More duplication than I'd like from
|
|
1219
1283
|
// span.prototype.toMarkup and symbolNode.prototype.toNode...
|
|
1220
1284
|
var needsSpan = false;
|
|
@@ -1272,9 +1336,9 @@ function () {
|
|
|
1272
1336
|
this.attributes = attributes || {};
|
|
1273
1337
|
}
|
|
1274
1338
|
|
|
1275
|
-
var
|
|
1339
|
+
var _proto5 = SvgNode.prototype;
|
|
1276
1340
|
|
|
1277
|
-
|
|
1341
|
+
_proto5.toNode = function toNode() {
|
|
1278
1342
|
var svgNS = "http://www.w3.org/2000/svg";
|
|
1279
1343
|
var node = document.createElementNS(svgNS, "svg"); // Apply attributes
|
|
1280
1344
|
|
|
@@ -1291,7 +1355,7 @@ function () {
|
|
|
1291
1355
|
return node;
|
|
1292
1356
|
};
|
|
1293
1357
|
|
|
1294
|
-
|
|
1358
|
+
_proto5.toMarkup = function toMarkup() {
|
|
1295
1359
|
var markup = "<svg"; // Apply attributes
|
|
1296
1360
|
|
|
1297
1361
|
for (var attr in this.attributes) {
|
|
@@ -1322,9 +1386,9 @@ function () {
|
|
|
1322
1386
|
this.alternate = alternate; // Used only for tall \sqrt
|
|
1323
1387
|
}
|
|
1324
1388
|
|
|
1325
|
-
var
|
|
1389
|
+
var _proto6 = PathNode.prototype;
|
|
1326
1390
|
|
|
1327
|
-
|
|
1391
|
+
_proto6.toNode = function toNode() {
|
|
1328
1392
|
var svgNS = "http://www.w3.org/2000/svg";
|
|
1329
1393
|
var node = document.createElementNS(svgNS, "path");
|
|
1330
1394
|
|
|
@@ -1337,7 +1401,7 @@ function () {
|
|
|
1337
1401
|
return node;
|
|
1338
1402
|
};
|
|
1339
1403
|
|
|
1340
|
-
|
|
1404
|
+
_proto6.toMarkup = function toMarkup() {
|
|
1341
1405
|
if (this.alternate) {
|
|
1342
1406
|
return "<path d='" + this.alternate + "'/>";
|
|
1343
1407
|
} else {
|
|
@@ -1355,9 +1419,9 @@ function () {
|
|
|
1355
1419
|
this.attributes = attributes || {};
|
|
1356
1420
|
}
|
|
1357
1421
|
|
|
1358
|
-
var
|
|
1422
|
+
var _proto7 = LineNode.prototype;
|
|
1359
1423
|
|
|
1360
|
-
|
|
1424
|
+
_proto7.toNode = function toNode() {
|
|
1361
1425
|
var svgNS = "http://www.w3.org/2000/svg";
|
|
1362
1426
|
var node = document.createElementNS(svgNS, "line"); // Apply attributes
|
|
1363
1427
|
|
|
@@ -1370,7 +1434,7 @@ function () {
|
|
|
1370
1434
|
return node;
|
|
1371
1435
|
};
|
|
1372
1436
|
|
|
1373
|
-
|
|
1437
|
+
_proto7.toMarkup = function toMarkup() {
|
|
1374
1438
|
var markup = "<line";
|
|
1375
1439
|
|
|
1376
1440
|
for (var attr in this.attributes) {
|
|
@@ -3743,13 +3807,13 @@ function getCharacterMetrics(character, font, mode) {
|
|
|
3743
3807
|
}
|
|
3744
3808
|
|
|
3745
3809
|
var ch = character.charCodeAt(0);
|
|
3810
|
+
var metrics = fontMetricsData[font][ch];
|
|
3746
3811
|
|
|
3747
|
-
if (character[0] in extraCharacterMap) {
|
|
3812
|
+
if (!metrics && character[0] in extraCharacterMap) {
|
|
3748
3813
|
ch = extraCharacterMap[character[0]].charCodeAt(0);
|
|
3814
|
+
metrics = fontMetricsData[font][ch];
|
|
3749
3815
|
}
|
|
3750
3816
|
|
|
3751
|
-
var metrics = fontMetricsData[font][ch];
|
|
3752
|
-
|
|
3753
3817
|
if (!metrics && mode === 'text') {
|
|
3754
3818
|
// We don't typically have font metrics for Asian scripts.
|
|
3755
3819
|
// But since we support them in text mode, we need to return
|
|
@@ -3877,7 +3941,7 @@ var op = "op-token";
|
|
|
3877
3941
|
var symbols_open = "open";
|
|
3878
3942
|
var punct = "punct";
|
|
3879
3943
|
var rel = "rel";
|
|
3880
|
-
var
|
|
3944
|
+
var symbols_spacing = "spacing";
|
|
3881
3945
|
var symbols_textord = "textord"; // Now comes the symbol table
|
|
3882
3946
|
// Relation Symbols
|
|
3883
3947
|
|
|
@@ -3982,12 +4046,13 @@ defineSymbol(symbols_math, main, rel, "\u21C1", "\\rightharpoondown", true);
|
|
|
3982
4046
|
defineSymbol(symbols_math, main, rel, "\u2196", "\\nwarrow", true);
|
|
3983
4047
|
defineSymbol(symbols_math, main, rel, "\u21CC", "\\rightleftharpoons", true); // AMS Negated Binary Relations
|
|
3984
4048
|
|
|
3985
|
-
defineSymbol(symbols_math, ams, rel, "\u226E", "\\nless", true);
|
|
3986
|
-
|
|
3987
|
-
defineSymbol(symbols_math, ams, rel, "\
|
|
4049
|
+
defineSymbol(symbols_math, ams, rel, "\u226E", "\\nless", true); // Symbol names preceeded by "@" each have a corresponding macro.
|
|
4050
|
+
|
|
4051
|
+
defineSymbol(symbols_math, ams, rel, "\uE010", "\\@nleqslant");
|
|
4052
|
+
defineSymbol(symbols_math, ams, rel, "\uE011", "\\@nleqq");
|
|
3988
4053
|
defineSymbol(symbols_math, ams, rel, "\u2A87", "\\lneq", true);
|
|
3989
4054
|
defineSymbol(symbols_math, ams, rel, "\u2268", "\\lneqq", true);
|
|
3990
|
-
defineSymbol(symbols_math, ams, rel, "\uE00C", "
|
|
4055
|
+
defineSymbol(symbols_math, ams, rel, "\uE00C", "\\@lvertneqq");
|
|
3991
4056
|
defineSymbol(symbols_math, ams, rel, "\u22E6", "\\lnsim", true);
|
|
3992
4057
|
defineSymbol(symbols_math, ams, rel, "\u2A89", "\\lnapprox", true);
|
|
3993
4058
|
defineSymbol(symbols_math, ams, rel, "\u2280", "\\nprec", true); // unicode-math maps \u22e0 to \npreccurlyeq. We'll use the AMS synonym.
|
|
@@ -3996,22 +4061,22 @@ defineSymbol(symbols_math, ams, rel, "\u22E0", "\\npreceq", true);
|
|
|
3996
4061
|
defineSymbol(symbols_math, ams, rel, "\u22E8", "\\precnsim", true);
|
|
3997
4062
|
defineSymbol(symbols_math, ams, rel, "\u2AB9", "\\precnapprox", true);
|
|
3998
4063
|
defineSymbol(symbols_math, ams, rel, "\u2241", "\\nsim", true);
|
|
3999
|
-
defineSymbol(symbols_math, ams, rel, "\uE006", "
|
|
4064
|
+
defineSymbol(symbols_math, ams, rel, "\uE006", "\\@nshortmid");
|
|
4000
4065
|
defineSymbol(symbols_math, ams, rel, "\u2224", "\\nmid", true);
|
|
4001
4066
|
defineSymbol(symbols_math, ams, rel, "\u22AC", "\\nvdash", true);
|
|
4002
4067
|
defineSymbol(symbols_math, ams, rel, "\u22AD", "\\nvDash", true);
|
|
4003
4068
|
defineSymbol(symbols_math, ams, rel, "\u22EA", "\\ntriangleleft");
|
|
4004
4069
|
defineSymbol(symbols_math, ams, rel, "\u22EC", "\\ntrianglelefteq", true);
|
|
4005
4070
|
defineSymbol(symbols_math, ams, rel, "\u228A", "\\subsetneq", true);
|
|
4006
|
-
defineSymbol(symbols_math, ams, rel, "\uE01A", "
|
|
4071
|
+
defineSymbol(symbols_math, ams, rel, "\uE01A", "\\@varsubsetneq");
|
|
4007
4072
|
defineSymbol(symbols_math, ams, rel, "\u2ACB", "\\subsetneqq", true);
|
|
4008
|
-
defineSymbol(symbols_math, ams, rel, "\uE017", "
|
|
4073
|
+
defineSymbol(symbols_math, ams, rel, "\uE017", "\\@varsubsetneqq");
|
|
4009
4074
|
defineSymbol(symbols_math, ams, rel, "\u226F", "\\ngtr", true);
|
|
4010
|
-
defineSymbol(symbols_math, ams, rel, "\uE00F", "
|
|
4011
|
-
defineSymbol(symbols_math, ams, rel, "\uE00E", "
|
|
4075
|
+
defineSymbol(symbols_math, ams, rel, "\uE00F", "\\@ngeqslant");
|
|
4076
|
+
defineSymbol(symbols_math, ams, rel, "\uE00E", "\\@ngeqq");
|
|
4012
4077
|
defineSymbol(symbols_math, ams, rel, "\u2A88", "\\gneq", true);
|
|
4013
4078
|
defineSymbol(symbols_math, ams, rel, "\u2269", "\\gneqq", true);
|
|
4014
|
-
defineSymbol(symbols_math, ams, rel, "\uE00D", "
|
|
4079
|
+
defineSymbol(symbols_math, ams, rel, "\uE00D", "\\@gvertneqq");
|
|
4015
4080
|
defineSymbol(symbols_math, ams, rel, "\u22E7", "\\gnsim", true);
|
|
4016
4081
|
defineSymbol(symbols_math, ams, rel, "\u2A8A", "\\gnapprox", true);
|
|
4017
4082
|
defineSymbol(symbols_math, ams, rel, "\u2281", "\\nsucc", true); // unicode-math maps \u22e1 to \nsucccurlyeq. We'll use the AMS synonym.
|
|
@@ -4021,20 +4086,20 @@ defineSymbol(symbols_math, ams, rel, "\u22E9", "\\succnsim", true);
|
|
|
4021
4086
|
defineSymbol(symbols_math, ams, rel, "\u2ABA", "\\succnapprox", true); // unicode-math maps \u2246 to \simneqq. We'll use the AMS synonym.
|
|
4022
4087
|
|
|
4023
4088
|
defineSymbol(symbols_math, ams, rel, "\u2246", "\\ncong", true);
|
|
4024
|
-
defineSymbol(symbols_math, ams, rel, "\uE007", "
|
|
4089
|
+
defineSymbol(symbols_math, ams, rel, "\uE007", "\\@nshortparallel");
|
|
4025
4090
|
defineSymbol(symbols_math, ams, rel, "\u2226", "\\nparallel", true);
|
|
4026
4091
|
defineSymbol(symbols_math, ams, rel, "\u22AF", "\\nVDash", true);
|
|
4027
4092
|
defineSymbol(symbols_math, ams, rel, "\u22EB", "\\ntriangleright");
|
|
4028
4093
|
defineSymbol(symbols_math, ams, rel, "\u22ED", "\\ntrianglerighteq", true);
|
|
4029
|
-
defineSymbol(symbols_math, ams, rel, "\uE018", "
|
|
4094
|
+
defineSymbol(symbols_math, ams, rel, "\uE018", "\\@nsupseteqq");
|
|
4030
4095
|
defineSymbol(symbols_math, ams, rel, "\u228B", "\\supsetneq", true);
|
|
4031
|
-
defineSymbol(symbols_math, ams, rel, "\uE01B", "
|
|
4096
|
+
defineSymbol(symbols_math, ams, rel, "\uE01B", "\\@varsupsetneq");
|
|
4032
4097
|
defineSymbol(symbols_math, ams, rel, "\u2ACC", "\\supsetneqq", true);
|
|
4033
|
-
defineSymbol(symbols_math, ams, rel, "\uE019", "
|
|
4098
|
+
defineSymbol(symbols_math, ams, rel, "\uE019", "\\@varsupsetneqq");
|
|
4034
4099
|
defineSymbol(symbols_math, ams, rel, "\u22AE", "\\nVdash", true);
|
|
4035
4100
|
defineSymbol(symbols_math, ams, rel, "\u2AB5", "\\precneqq", true);
|
|
4036
4101
|
defineSymbol(symbols_math, ams, rel, "\u2AB6", "\\succneqq", true);
|
|
4037
|
-
defineSymbol(symbols_math, ams, rel, "\uE016", "
|
|
4102
|
+
defineSymbol(symbols_math, ams, rel, "\uE016", "\\@nsubseteqq");
|
|
4038
4103
|
defineSymbol(symbols_math, ams, bin, "\u22B4", "\\unlhd");
|
|
4039
4104
|
defineSymbol(symbols_math, ams, bin, "\u22B5", "\\unrhd"); // AMS Negated Arrows
|
|
4040
4105
|
|
|
@@ -4057,7 +4122,6 @@ defineSymbol(symbols_math, ams, symbols_textord, "\u2204", "\\nexists");
|
|
|
4057
4122
|
defineSymbol(symbols_math, ams, symbols_textord, "\u2127", "\\mho");
|
|
4058
4123
|
defineSymbol(symbols_math, ams, symbols_textord, "\u2132", "\\Finv", true);
|
|
4059
4124
|
defineSymbol(symbols_math, ams, symbols_textord, "\u2141", "\\Game", true);
|
|
4060
|
-
defineSymbol(symbols_math, ams, symbols_textord, "k", "\\Bbbk");
|
|
4061
4125
|
defineSymbol(symbols_math, ams, symbols_textord, "\u2035", "\\backprime");
|
|
4062
4126
|
defineSymbol(symbols_math, ams, symbols_textord, "\u25B2", "\\blacktriangle");
|
|
4063
4127
|
defineSymbol(symbols_math, ams, symbols_textord, "\u25BC", "\\blacktriangledown");
|
|
@@ -4356,17 +4420,17 @@ defineSymbol(symbols_math, main, rel, "\u2192", "\\rightarrow", true);
|
|
|
4356
4420
|
defineSymbol(symbols_math, main, rel, "\u2192", "\\to");
|
|
4357
4421
|
defineSymbol(symbols_math, ams, rel, "\u2271", "\\ngeq", true);
|
|
4358
4422
|
defineSymbol(symbols_math, ams, rel, "\u2270", "\\nleq", true);
|
|
4359
|
-
defineSymbol(symbols_math, main,
|
|
4360
|
-
defineSymbol(symbols_math, main,
|
|
4361
|
-
defineSymbol(symbols_math, main,
|
|
4362
|
-
|
|
4363
|
-
defineSymbol(symbols_math, main,
|
|
4364
|
-
defineSymbol(symbols_text, main,
|
|
4365
|
-
defineSymbol(symbols_text, main,
|
|
4366
|
-
defineSymbol(symbols_text, main,
|
|
4367
|
-
defineSymbol(symbols_text, main,
|
|
4368
|
-
defineSymbol(symbols_math, main,
|
|
4369
|
-
defineSymbol(symbols_math, main,
|
|
4423
|
+
defineSymbol(symbols_math, main, symbols_spacing, "\xA0", "\\ ");
|
|
4424
|
+
defineSymbol(symbols_math, main, symbols_spacing, "\xA0", "~");
|
|
4425
|
+
defineSymbol(symbols_math, main, symbols_spacing, "\xA0", "\\space"); // Ref: LaTeX Source 2e: \DeclareRobustCommand{\nobreakspace}{%
|
|
4426
|
+
|
|
4427
|
+
defineSymbol(symbols_math, main, symbols_spacing, "\xA0", "\\nobreakspace");
|
|
4428
|
+
defineSymbol(symbols_text, main, symbols_spacing, "\xA0", "\\ ");
|
|
4429
|
+
defineSymbol(symbols_text, main, symbols_spacing, "\xA0", "~");
|
|
4430
|
+
defineSymbol(symbols_text, main, symbols_spacing, "\xA0", "\\space");
|
|
4431
|
+
defineSymbol(symbols_text, main, symbols_spacing, "\xA0", "\\nobreakspace");
|
|
4432
|
+
defineSymbol(symbols_math, main, symbols_spacing, null, "\\nobreak");
|
|
4433
|
+
defineSymbol(symbols_math, main, symbols_spacing, null, "\\allowbreak");
|
|
4370
4434
|
defineSymbol(symbols_math, main, punct, ",", ",");
|
|
4371
4435
|
defineSymbol(symbols_math, main, punct, ";", ";");
|
|
4372
4436
|
defineSymbol(symbols_math, ams, bin, "\u22BC", "\\barwedge", true);
|
|
@@ -4531,9 +4595,9 @@ defineSymbol(symbols_text, main, mathord, "\xA3", "\\pounds");
|
|
|
4531
4595
|
defineSymbol(symbols_text, main, mathord, "\xA3", "\\textsterling", true);
|
|
4532
4596
|
defineSymbol(symbols_math, ams, symbols_textord, "\u2720", "\\maltese");
|
|
4533
4597
|
defineSymbol(symbols_text, ams, symbols_textord, "\u2720", "\\maltese");
|
|
4534
|
-
defineSymbol(symbols_text, main,
|
|
4535
|
-
defineSymbol(symbols_text, main,
|
|
4536
|
-
defineSymbol(symbols_text, main,
|
|
4598
|
+
defineSymbol(symbols_text, main, symbols_spacing, "\xA0", "\\ ");
|
|
4599
|
+
defineSymbol(symbols_text, main, symbols_spacing, "\xA0", " ");
|
|
4600
|
+
defineSymbol(symbols_text, main, symbols_spacing, "\xA0", "~"); // There are lots of symbols which are the same, so we add them in afterwards.
|
|
4537
4601
|
// All of these are textords in math mode
|
|
4538
4602
|
|
|
4539
4603
|
var mathTextSymbols = "0123456789/@.\"";
|
|
@@ -4588,53 +4652,53 @@ defineSymbol(symbols_text, main, mathord, "h", "\u210E"); // The next loop loads
|
|
|
4588
4652
|
|
|
4589
4653
|
var symbols_wideChar = "";
|
|
4590
4654
|
|
|
4591
|
-
for (var
|
|
4592
|
-
var _ch3 = letters.charAt(
|
|
4655
|
+
for (var symbols_i3 = 0; symbols_i3 < letters.length; symbols_i3++) {
|
|
4656
|
+
var _ch3 = letters.charAt(symbols_i3); // The hex numbers in the next line are a surrogate pair.
|
|
4593
4657
|
// 0xD835 is the high surrogate for all letters in the range we support.
|
|
4594
4658
|
// 0xDC00 is the low surrogate for bold A.
|
|
4595
4659
|
|
|
4596
4660
|
|
|
4597
|
-
symbols_wideChar = String.fromCharCode(0xD835, 0xDC00 +
|
|
4661
|
+
symbols_wideChar = String.fromCharCode(0xD835, 0xDC00 + symbols_i3); // A-Z a-z bold
|
|
4598
4662
|
|
|
4599
4663
|
defineSymbol(symbols_math, main, mathord, _ch3, symbols_wideChar);
|
|
4600
4664
|
defineSymbol(symbols_text, main, symbols_textord, _ch3, symbols_wideChar);
|
|
4601
|
-
symbols_wideChar = String.fromCharCode(0xD835, 0xDC34 +
|
|
4665
|
+
symbols_wideChar = String.fromCharCode(0xD835, 0xDC34 + symbols_i3); // A-Z a-z italic
|
|
4602
4666
|
|
|
4603
4667
|
defineSymbol(symbols_math, main, mathord, _ch3, symbols_wideChar);
|
|
4604
4668
|
defineSymbol(symbols_text, main, symbols_textord, _ch3, symbols_wideChar);
|
|
4605
|
-
symbols_wideChar = String.fromCharCode(0xD835, 0xDC68 +
|
|
4669
|
+
symbols_wideChar = String.fromCharCode(0xD835, 0xDC68 + symbols_i3); // A-Z a-z bold italic
|
|
4606
4670
|
|
|
4607
4671
|
defineSymbol(symbols_math, main, mathord, _ch3, symbols_wideChar);
|
|
4608
4672
|
defineSymbol(symbols_text, main, symbols_textord, _ch3, symbols_wideChar);
|
|
4609
|
-
symbols_wideChar = String.fromCharCode(0xD835, 0xDD04 +
|
|
4673
|
+
symbols_wideChar = String.fromCharCode(0xD835, 0xDD04 + symbols_i3); // A-Z a-z Fractur
|
|
4610
4674
|
|
|
4611
4675
|
defineSymbol(symbols_math, main, mathord, _ch3, symbols_wideChar);
|
|
4612
4676
|
defineSymbol(symbols_text, main, symbols_textord, _ch3, symbols_wideChar);
|
|
4613
|
-
symbols_wideChar = String.fromCharCode(0xD835, 0xDDA0 +
|
|
4677
|
+
symbols_wideChar = String.fromCharCode(0xD835, 0xDDA0 + symbols_i3); // A-Z a-z sans-serif
|
|
4614
4678
|
|
|
4615
4679
|
defineSymbol(symbols_math, main, mathord, _ch3, symbols_wideChar);
|
|
4616
4680
|
defineSymbol(symbols_text, main, symbols_textord, _ch3, symbols_wideChar);
|
|
4617
|
-
symbols_wideChar = String.fromCharCode(0xD835, 0xDDD4 +
|
|
4681
|
+
symbols_wideChar = String.fromCharCode(0xD835, 0xDDD4 + symbols_i3); // A-Z a-z sans bold
|
|
4618
4682
|
|
|
4619
4683
|
defineSymbol(symbols_math, main, mathord, _ch3, symbols_wideChar);
|
|
4620
4684
|
defineSymbol(symbols_text, main, symbols_textord, _ch3, symbols_wideChar);
|
|
4621
|
-
symbols_wideChar = String.fromCharCode(0xD835, 0xDE08 +
|
|
4685
|
+
symbols_wideChar = String.fromCharCode(0xD835, 0xDE08 + symbols_i3); // A-Z a-z sans italic
|
|
4622
4686
|
|
|
4623
4687
|
defineSymbol(symbols_math, main, mathord, _ch3, symbols_wideChar);
|
|
4624
4688
|
defineSymbol(symbols_text, main, symbols_textord, _ch3, symbols_wideChar);
|
|
4625
|
-
symbols_wideChar = String.fromCharCode(0xD835, 0xDE70 +
|
|
4689
|
+
symbols_wideChar = String.fromCharCode(0xD835, 0xDE70 + symbols_i3); // A-Z a-z monospace
|
|
4626
4690
|
|
|
4627
4691
|
defineSymbol(symbols_math, main, mathord, _ch3, symbols_wideChar);
|
|
4628
4692
|
defineSymbol(symbols_text, main, symbols_textord, _ch3, symbols_wideChar);
|
|
4629
4693
|
|
|
4630
|
-
if (
|
|
4694
|
+
if (symbols_i3 < 26) {
|
|
4631
4695
|
// KaTeX fonts have only capital letters for blackboard bold and script.
|
|
4632
4696
|
// See exception for k below.
|
|
4633
|
-
symbols_wideChar = String.fromCharCode(0xD835, 0xDD38 +
|
|
4697
|
+
symbols_wideChar = String.fromCharCode(0xD835, 0xDD38 + symbols_i3); // A-Z double struck
|
|
4634
4698
|
|
|
4635
4699
|
defineSymbol(symbols_math, main, mathord, _ch3, symbols_wideChar);
|
|
4636
4700
|
defineSymbol(symbols_text, main, symbols_textord, _ch3, symbols_wideChar);
|
|
4637
|
-
symbols_wideChar = String.fromCharCode(0xD835, 0xDC9C +
|
|
4701
|
+
symbols_wideChar = String.fromCharCode(0xD835, 0xDC9C + symbols_i3); // A-Z script
|
|
4638
4702
|
|
|
4639
4703
|
defineSymbol(symbols_math, main, mathord, _ch3, symbols_wideChar);
|
|
4640
4704
|
defineSymbol(symbols_text, main, symbols_textord, _ch3, symbols_wideChar);
|
|
@@ -4648,22 +4712,22 @@ symbols_wideChar = String.fromCharCode(0xD835, 0xDD5C); // k double struck
|
|
|
4648
4712
|
defineSymbol(symbols_math, main, mathord, "k", symbols_wideChar);
|
|
4649
4713
|
defineSymbol(symbols_text, main, symbols_textord, "k", symbols_wideChar); // Next, some wide character numerals
|
|
4650
4714
|
|
|
4651
|
-
for (var
|
|
4652
|
-
var _ch4 =
|
|
4715
|
+
for (var symbols_i4 = 0; symbols_i4 < 10; symbols_i4++) {
|
|
4716
|
+
var _ch4 = symbols_i4.toString();
|
|
4653
4717
|
|
|
4654
|
-
symbols_wideChar = String.fromCharCode(0xD835, 0xDFCE +
|
|
4718
|
+
symbols_wideChar = String.fromCharCode(0xD835, 0xDFCE + symbols_i4); // 0-9 bold
|
|
4655
4719
|
|
|
4656
4720
|
defineSymbol(symbols_math, main, mathord, _ch4, symbols_wideChar);
|
|
4657
4721
|
defineSymbol(symbols_text, main, symbols_textord, _ch4, symbols_wideChar);
|
|
4658
|
-
symbols_wideChar = String.fromCharCode(0xD835, 0xDFE2 +
|
|
4722
|
+
symbols_wideChar = String.fromCharCode(0xD835, 0xDFE2 + symbols_i4); // 0-9 sans serif
|
|
4659
4723
|
|
|
4660
4724
|
defineSymbol(symbols_math, main, mathord, _ch4, symbols_wideChar);
|
|
4661
4725
|
defineSymbol(symbols_text, main, symbols_textord, _ch4, symbols_wideChar);
|
|
4662
|
-
symbols_wideChar = String.fromCharCode(0xD835, 0xDFEC +
|
|
4726
|
+
symbols_wideChar = String.fromCharCode(0xD835, 0xDFEC + symbols_i4); // 0-9 bold sans
|
|
4663
4727
|
|
|
4664
4728
|
defineSymbol(symbols_math, main, mathord, _ch4, symbols_wideChar);
|
|
4665
4729
|
defineSymbol(symbols_text, main, symbols_textord, _ch4, symbols_wideChar);
|
|
4666
|
-
symbols_wideChar = String.fromCharCode(0xD835, 0xDFF6 +
|
|
4730
|
+
symbols_wideChar = String.fromCharCode(0xD835, 0xDFF6 + symbols_i4); // 0-9 monospace
|
|
4667
4731
|
|
|
4668
4732
|
defineSymbol(symbols_math, main, mathord, _ch4, symbols_wideChar);
|
|
4669
4733
|
defineSymbol(symbols_text, main, symbols_textord, _ch4, symbols_wideChar);
|
|
@@ -4799,7 +4863,8 @@ var sizeMultipliers = [// fontMetrics.js:getGlobalMetrics also uses size indexes
|
|
|
4799
4863
|
|
|
4800
4864
|
var sizeAtStyle = function sizeAtStyle(size, style) {
|
|
4801
4865
|
return style.size < 2 ? size : sizeStyleMap[size - 1][style.size - 1];
|
|
4802
|
-
};
|
|
4866
|
+
}; // In these types, "" (empty string) means "no change".
|
|
4867
|
+
|
|
4803
4868
|
|
|
4804
4869
|
/**
|
|
4805
4870
|
* This is the main options class. It contains the current style, size, color,
|
|
@@ -5071,20 +5136,13 @@ function () {
|
|
|
5071
5136
|
return this._fontMetrics;
|
|
5072
5137
|
}
|
|
5073
5138
|
/**
|
|
5074
|
-
*
|
|
5075
|
-
* TODO(emily): Remove this when we have real macros
|
|
5139
|
+
* Gets the CSS color of the current options object
|
|
5076
5140
|
*/
|
|
5077
5141
|
;
|
|
5078
5142
|
|
|
5079
|
-
/**
|
|
5080
|
-
* Gets the CSS color of the current options object, accounting for the
|
|
5081
|
-
* `colorMap`.
|
|
5082
|
-
*/
|
|
5083
5143
|
_proto.getColor = function getColor() {
|
|
5084
5144
|
if (this.phantom) {
|
|
5085
5145
|
return "transparent";
|
|
5086
|
-
} else if (this.color != null && Options.colorMap.hasOwnProperty(this.color)) {
|
|
5087
|
-
return Options.colorMap[this.color];
|
|
5088
5146
|
} else {
|
|
5089
5147
|
return this.color;
|
|
5090
5148
|
}
|
|
@@ -5094,64 +5152,6 @@ function () {
|
|
|
5094
5152
|
}();
|
|
5095
5153
|
|
|
5096
5154
|
Options_Options.BASESIZE = 6;
|
|
5097
|
-
Options_Options.colorMap = {
|
|
5098
|
-
"katex-blue": "#6495ed",
|
|
5099
|
-
"katex-orange": "#ffa500",
|
|
5100
|
-
"katex-pink": "#ff00af",
|
|
5101
|
-
"katex-red": "#df0030",
|
|
5102
|
-
"katex-green": "#28ae7b",
|
|
5103
|
-
"katex-gray": "gray",
|
|
5104
|
-
"katex-purple": "#9d38bd",
|
|
5105
|
-
"katex-blueA": "#ccfaff",
|
|
5106
|
-
"katex-blueB": "#80f6ff",
|
|
5107
|
-
"katex-blueC": "#63d9ea",
|
|
5108
|
-
"katex-blueD": "#11accd",
|
|
5109
|
-
"katex-blueE": "#0c7f99",
|
|
5110
|
-
"katex-tealA": "#94fff5",
|
|
5111
|
-
"katex-tealB": "#26edd5",
|
|
5112
|
-
"katex-tealC": "#01d1c1",
|
|
5113
|
-
"katex-tealD": "#01a995",
|
|
5114
|
-
"katex-tealE": "#208170",
|
|
5115
|
-
"katex-greenA": "#b6ffb0",
|
|
5116
|
-
"katex-greenB": "#8af281",
|
|
5117
|
-
"katex-greenC": "#74cf70",
|
|
5118
|
-
"katex-greenD": "#1fab54",
|
|
5119
|
-
"katex-greenE": "#0d923f",
|
|
5120
|
-
"katex-goldA": "#ffd0a9",
|
|
5121
|
-
"katex-goldB": "#ffbb71",
|
|
5122
|
-
"katex-goldC": "#ff9c39",
|
|
5123
|
-
"katex-goldD": "#e07d10",
|
|
5124
|
-
"katex-goldE": "#a75a05",
|
|
5125
|
-
"katex-redA": "#fca9a9",
|
|
5126
|
-
"katex-redB": "#ff8482",
|
|
5127
|
-
"katex-redC": "#f9685d",
|
|
5128
|
-
"katex-redD": "#e84d39",
|
|
5129
|
-
"katex-redE": "#bc2612",
|
|
5130
|
-
"katex-maroonA": "#ffbde0",
|
|
5131
|
-
"katex-maroonB": "#ff92c6",
|
|
5132
|
-
"katex-maroonC": "#ed5fa6",
|
|
5133
|
-
"katex-maroonD": "#ca337c",
|
|
5134
|
-
"katex-maroonE": "#9e034e",
|
|
5135
|
-
"katex-purpleA": "#ddd7ff",
|
|
5136
|
-
"katex-purpleB": "#c6b9fc",
|
|
5137
|
-
"katex-purpleC": "#aa87ff",
|
|
5138
|
-
"katex-purpleD": "#7854ab",
|
|
5139
|
-
"katex-purpleE": "#543b78",
|
|
5140
|
-
"katex-mintA": "#f5f9e8",
|
|
5141
|
-
"katex-mintB": "#edf2df",
|
|
5142
|
-
"katex-mintC": "#e0e5cc",
|
|
5143
|
-
"katex-grayA": "#f6f7f7",
|
|
5144
|
-
"katex-grayB": "#f0f1f2",
|
|
5145
|
-
"katex-grayC": "#e3e5e6",
|
|
5146
|
-
"katex-grayD": "#d6d8da",
|
|
5147
|
-
"katex-grayE": "#babec2",
|
|
5148
|
-
"katex-grayF": "#888d93",
|
|
5149
|
-
"katex-grayG": "#626569",
|
|
5150
|
-
"katex-grayH": "#3b3e40",
|
|
5151
|
-
"katex-grayI": "#21242c",
|
|
5152
|
-
"katex-kaBlue": "#314453",
|
|
5153
|
-
"katex-kaGreen": "#71B307"
|
|
5154
|
-
};
|
|
5155
5155
|
/* harmony default export */ var src_Options = (Options_Options);
|
|
5156
5156
|
// CONCATENATED MODULE: ./src/units.js
|
|
5157
5157
|
/**
|
|
@@ -7003,13 +7003,24 @@ var buildMathML_buildExpression = function buildExpression(expression, options)
|
|
|
7003
7003
|
|
|
7004
7004
|
continue;
|
|
7005
7005
|
}
|
|
7006
|
+
} else if (lastGroup.type === 'mi' && lastGroup.children.length === 1) {
|
|
7007
|
+
var lastChild = lastGroup.children[0];
|
|
7008
|
+
|
|
7009
|
+
if (lastChild instanceof mathMLTree_TextNode && lastChild.text === "\u0338" && (group.type === 'mo' || group.type === 'mi' || group.type === 'mn')) {
|
|
7010
|
+
var _child = group.children[0];
|
|
7011
|
+
|
|
7012
|
+
if (_child instanceof mathMLTree_TextNode && _child.text.length > 0) {
|
|
7013
|
+
// Overlay with combining character long solidus
|
|
7014
|
+
_child.text = _child.text.slice(0, 1) + "\u0338" + _child.text.slice(1);
|
|
7015
|
+
groups.pop();
|
|
7016
|
+
}
|
|
7017
|
+
}
|
|
7006
7018
|
}
|
|
7007
7019
|
}
|
|
7008
7020
|
|
|
7009
7021
|
groups.push(group);
|
|
7010
7022
|
lastGroup = group;
|
|
7011
|
-
}
|
|
7012
|
-
|
|
7023
|
+
}
|
|
7013
7024
|
|
|
7014
7025
|
return groups;
|
|
7015
7026
|
};
|
|
@@ -7140,8 +7151,10 @@ var stretchyCodePoint = {
|
|
|
7140
7151
|
overrightarrow: "\u2192",
|
|
7141
7152
|
underrightarrow: "\u2192",
|
|
7142
7153
|
xrightarrow: "\u2192",
|
|
7143
|
-
underbrace: "\
|
|
7154
|
+
underbrace: "\u23DF",
|
|
7144
7155
|
overbrace: "\u23DE",
|
|
7156
|
+
overgroup: "\u23E0",
|
|
7157
|
+
undergroup: "\u23E1",
|
|
7145
7158
|
overleftrightarrow: "\u2194",
|
|
7146
7159
|
underleftrightarrow: "\u2194",
|
|
7147
7160
|
xleftrightarrow: "\u2194",
|
|
@@ -7747,7 +7760,16 @@ defineFunction({
|
|
|
7747
7760
|
|
|
7748
7761
|
|
|
7749
7762
|
|
|
7750
|
-
|
|
7763
|
+
|
|
7764
|
+
// Helper function
|
|
7765
|
+
var arrow_paddedNode = function paddedNode(group) {
|
|
7766
|
+
var node = new mathMLTree.MathNode("mpadded", group ? [group] : []);
|
|
7767
|
+
node.setAttribute("width", "+0.6em");
|
|
7768
|
+
node.setAttribute("lspace", "0.3em");
|
|
7769
|
+
return node;
|
|
7770
|
+
}; // Stretchy arrows with an optional argument
|
|
7771
|
+
|
|
7772
|
+
|
|
7751
7773
|
defineFunction({
|
|
7752
7774
|
type: "xArrow",
|
|
7753
7775
|
names: ["\\xleftarrow", "\\xrightarrow", "\\xLeftarrow", "\\xRightarrow", "\\xleftrightarrow", "\\xLeftrightarrow", "\\xhookleftarrow", "\\xhookrightarrow", "\\xmapsto", "\\xrightharpoondown", "\\xrightharpoonup", "\\xleftharpoondown", "\\xleftharpoonup", "\\xrightleftharpoons", "\\xleftrightharpoons", "\\xlongequal", "\\xtwoheadrightarrow", "\\xtwoheadleftarrow", "\\xtofrom", // The next 3 functions are here to support the mhchem extension.
|
|
@@ -7842,22 +7864,25 @@ defineFunction({
|
|
|
7842
7864
|
mathmlBuilder: function mathmlBuilder(group, options) {
|
|
7843
7865
|
var arrowNode = stretchy.mathMLnode(group.label);
|
|
7844
7866
|
var node;
|
|
7845
|
-
var lowerNode;
|
|
7846
7867
|
|
|
7847
7868
|
if (group.body) {
|
|
7848
|
-
var upperNode = buildMathML_buildGroup(group.body, options);
|
|
7869
|
+
var upperNode = arrow_paddedNode(buildMathML_buildGroup(group.body, options));
|
|
7849
7870
|
|
|
7850
7871
|
if (group.below) {
|
|
7851
|
-
lowerNode = buildMathML_buildGroup(group.below, options);
|
|
7872
|
+
var lowerNode = arrow_paddedNode(buildMathML_buildGroup(group.below, options));
|
|
7852
7873
|
node = new mathMLTree.MathNode("munderover", [arrowNode, lowerNode, upperNode]);
|
|
7853
7874
|
} else {
|
|
7854
7875
|
node = new mathMLTree.MathNode("mover", [arrowNode, upperNode]);
|
|
7855
7876
|
}
|
|
7856
7877
|
} else if (group.below) {
|
|
7857
|
-
|
|
7858
|
-
|
|
7878
|
+
var _lowerNode = arrow_paddedNode(buildMathML_buildGroup(group.below, options));
|
|
7879
|
+
|
|
7880
|
+
node = new mathMLTree.MathNode("munder", [arrowNode, _lowerNode]);
|
|
7859
7881
|
} else {
|
|
7860
|
-
|
|
7882
|
+
// This should never happen.
|
|
7883
|
+
// Parser.js throws an error if there is no argument.
|
|
7884
|
+
node = arrow_paddedNode();
|
|
7885
|
+
node = new mathMLTree.MathNode("mover", [arrowNode, node]);
|
|
7861
7886
|
}
|
|
7862
7887
|
|
|
7863
7888
|
return node;
|
|
@@ -7919,7 +7944,7 @@ var color_htmlBuilder = function htmlBuilder(group, options) {
|
|
|
7919
7944
|
};
|
|
7920
7945
|
|
|
7921
7946
|
var color_mathmlBuilder = function mathmlBuilder(group, options) {
|
|
7922
|
-
var inner = buildMathML_buildExpression(group.body, options);
|
|
7947
|
+
var inner = buildMathML_buildExpression(group.body, options.withColor(group.color));
|
|
7923
7948
|
var node = new mathMLTree.MathNode("mstyle", inner);
|
|
7924
7949
|
node.setAttribute("mathcolor", group.color);
|
|
7925
7950
|
return node;
|
|
@@ -7947,29 +7972,6 @@ defineFunction({
|
|
|
7947
7972
|
},
|
|
7948
7973
|
htmlBuilder: color_htmlBuilder,
|
|
7949
7974
|
mathmlBuilder: color_mathmlBuilder
|
|
7950
|
-
}); // TODO(kevinb): define these using macros
|
|
7951
|
-
|
|
7952
|
-
defineFunction({
|
|
7953
|
-
type: "color",
|
|
7954
|
-
names: ["\\blue", "\\orange", "\\pink", "\\red", "\\green", "\\gray", "\\purple", "\\blueA", "\\blueB", "\\blueC", "\\blueD", "\\blueE", "\\tealA", "\\tealB", "\\tealC", "\\tealD", "\\tealE", "\\greenA", "\\greenB", "\\greenC", "\\greenD", "\\greenE", "\\goldA", "\\goldB", "\\goldC", "\\goldD", "\\goldE", "\\redA", "\\redB", "\\redC", "\\redD", "\\redE", "\\maroonA", "\\maroonB", "\\maroonC", "\\maroonD", "\\maroonE", "\\purpleA", "\\purpleB", "\\purpleC", "\\purpleD", "\\purpleE", "\\mintA", "\\mintB", "\\mintC", "\\grayA", "\\grayB", "\\grayC", "\\grayD", "\\grayE", "\\grayF", "\\grayG", "\\grayH", "\\grayI", "\\kaBlue", "\\kaGreen"],
|
|
7955
|
-
props: {
|
|
7956
|
-
numArgs: 1,
|
|
7957
|
-
allowedInText: true,
|
|
7958
|
-
greediness: 3
|
|
7959
|
-
},
|
|
7960
|
-
handler: function handler(_ref2, args) {
|
|
7961
|
-
var parser = _ref2.parser,
|
|
7962
|
-
funcName = _ref2.funcName;
|
|
7963
|
-
var body = args[0];
|
|
7964
|
-
return {
|
|
7965
|
-
type: "color",
|
|
7966
|
-
mode: parser.mode,
|
|
7967
|
-
color: "katex-" + funcName.slice(1),
|
|
7968
|
-
body: defineFunction_ordargument(body)
|
|
7969
|
-
};
|
|
7970
|
-
},
|
|
7971
|
-
htmlBuilder: color_htmlBuilder,
|
|
7972
|
-
mathmlBuilder: color_mathmlBuilder
|
|
7973
7975
|
});
|
|
7974
7976
|
defineFunction({
|
|
7975
7977
|
type: "color",
|
|
@@ -7980,9 +7982,9 @@ defineFunction({
|
|
|
7980
7982
|
greediness: 3,
|
|
7981
7983
|
argTypes: ["color"]
|
|
7982
7984
|
},
|
|
7983
|
-
handler: function handler(
|
|
7984
|
-
var parser =
|
|
7985
|
-
breakOnTokenText =
|
|
7985
|
+
handler: function handler(_ref2, args) {
|
|
7986
|
+
var parser = _ref2.parser,
|
|
7987
|
+
breakOnTokenText = _ref2.breakOnTokenText;
|
|
7986
7988
|
var color = assertNodeType(args[0], "color-token").color; // If we see a styling function, parse out the implicit body
|
|
7987
7989
|
|
|
7988
7990
|
var body = parser.parseExpression(true, breakOnTokenText);
|
|
@@ -9030,8 +9032,17 @@ defineFunction({
|
|
|
9030
9032
|
return middleDelim;
|
|
9031
9033
|
},
|
|
9032
9034
|
mathmlBuilder: function mathmlBuilder(group, options) {
|
|
9033
|
-
|
|
9034
|
-
|
|
9035
|
+
// A Firefox \middle will strech a character vertically only if it
|
|
9036
|
+
// is in the fence part of the operator dictionary at:
|
|
9037
|
+
// https://www.w3.org/TR/MathML3/appendixc.html.
|
|
9038
|
+
// So we need to avoid U+2223 and use plain "|" instead.
|
|
9039
|
+
var textNode = group.delim === "\\vert" || group.delim === "|" ? buildMathML_makeText("|", "text") : buildMathML_makeText(group.delim, group.mode);
|
|
9040
|
+
var middleNode = new mathMLTree.MathNode("mo", [textNode]);
|
|
9041
|
+
middleNode.setAttribute("fence", "true"); // MathML gives 5/18em spacing to each <mo> element.
|
|
9042
|
+
// \middle should get delimiter spacing instead.
|
|
9043
|
+
|
|
9044
|
+
middleNode.setAttribute("lspace", "0.05em");
|
|
9045
|
+
middleNode.setAttribute("rspace", "0.05em");
|
|
9035
9046
|
return middleNode;
|
|
9036
9047
|
}
|
|
9037
9048
|
});
|
|
@@ -9146,7 +9157,7 @@ var enclose_htmlBuilder = function htmlBuilder(group, options) {
|
|
|
9146
9157
|
};
|
|
9147
9158
|
|
|
9148
9159
|
var enclose_mathmlBuilder = function mathmlBuilder(group, options) {
|
|
9149
|
-
var node = new mathMLTree.MathNode("menclose", [buildMathML_buildGroup(group.body, options)]);
|
|
9160
|
+
var node = new mathMLTree.MathNode(group.label.indexOf("colorbox") > -1 ? "mpadded" : "menclose", [buildMathML_buildGroup(group.body, options)]);
|
|
9150
9161
|
|
|
9151
9162
|
switch (group.label) {
|
|
9152
9163
|
case "\\cancel":
|
|
@@ -9166,8 +9177,20 @@ var enclose_mathmlBuilder = function mathmlBuilder(group, options) {
|
|
|
9166
9177
|
break;
|
|
9167
9178
|
|
|
9168
9179
|
case "\\fcolorbox":
|
|
9169
|
-
|
|
9170
|
-
|
|
9180
|
+
case "\\colorbox":
|
|
9181
|
+
// <menclose> doesn't have a good notation option. So use <mpadded>
|
|
9182
|
+
// instead. Set some attributes that come included with <menclose>.
|
|
9183
|
+
node.setAttribute("width", "+6pt");
|
|
9184
|
+
node.setAttribute("height", "+6pt");
|
|
9185
|
+
node.setAttribute("lspace", "3pt"); // LaTeX source2e: \fboxsep = 3pt
|
|
9186
|
+
|
|
9187
|
+
node.setAttribute("voffset", "3pt");
|
|
9188
|
+
|
|
9189
|
+
if (group.label === "\\fcolorbox") {
|
|
9190
|
+
var thk = options.fontMetrics().defaultRuleThickness;
|
|
9191
|
+
node.setAttribute("style", "border: " + thk + "em solid " + String(group.borderColor));
|
|
9192
|
+
}
|
|
9193
|
+
|
|
9171
9194
|
break;
|
|
9172
9195
|
|
|
9173
9196
|
case "\\xcancel":
|
|
@@ -9355,7 +9378,8 @@ function parseArray(parser, _ref, style) {
|
|
|
9355
9378
|
var hskipBeforeAndAfter = _ref.hskipBeforeAndAfter,
|
|
9356
9379
|
addJot = _ref.addJot,
|
|
9357
9380
|
cols = _ref.cols,
|
|
9358
|
-
arraystretch = _ref.arraystretch
|
|
9381
|
+
arraystretch = _ref.arraystretch,
|
|
9382
|
+
colSeparationType = _ref.colSeparationType;
|
|
9359
9383
|
// Parse body of array with \\ temporarily mapped to \cr
|
|
9360
9384
|
parser.gullet.beginGroup();
|
|
9361
9385
|
parser.gullet.macros.set("\\\\", "\\cr"); // Get current arraystretch if it's not set by the environment
|
|
@@ -9440,7 +9464,8 @@ function parseArray(parser, _ref, style) {
|
|
|
9440
9464
|
cols: cols,
|
|
9441
9465
|
rowGaps: rowGaps,
|
|
9442
9466
|
hskipBeforeAndAfter: hskipBeforeAndAfter,
|
|
9443
|
-
hLinesBeforeRow: hLinesBeforeRow
|
|
9467
|
+
hLinesBeforeRow: hLinesBeforeRow,
|
|
9468
|
+
colSeparationType: colSeparationType
|
|
9444
9469
|
};
|
|
9445
9470
|
} // Decides on a style for cells in an array according to whether the given
|
|
9446
9471
|
// environment name starts with the letter 'd'.
|
|
@@ -9690,12 +9715,118 @@ var array_htmlBuilder = function htmlBuilder(group, options) {
|
|
|
9690
9715
|
return buildCommon.makeSpan(["mord"], [body], options);
|
|
9691
9716
|
};
|
|
9692
9717
|
|
|
9718
|
+
var alignMap = {
|
|
9719
|
+
c: "center ",
|
|
9720
|
+
l: "left ",
|
|
9721
|
+
r: "right "
|
|
9722
|
+
};
|
|
9723
|
+
|
|
9693
9724
|
var array_mathmlBuilder = function mathmlBuilder(group, options) {
|
|
9694
|
-
|
|
9725
|
+
var table = new mathMLTree.MathNode("mtable", group.body.map(function (row) {
|
|
9695
9726
|
return new mathMLTree.MathNode("mtr", row.map(function (cell) {
|
|
9696
9727
|
return new mathMLTree.MathNode("mtd", [buildMathML_buildGroup(cell, options)]);
|
|
9697
9728
|
}));
|
|
9698
|
-
}));
|
|
9729
|
+
})); // Set column alignment, row spacing, column spacing, and
|
|
9730
|
+
// array lines by setting attributes on the table element.
|
|
9731
|
+
// Set the row spacing. In MathML, we specify a gap distance.
|
|
9732
|
+
// We do not use rowGap[] because MathML automatically increases
|
|
9733
|
+
// cell height with the height/depth of the element content.
|
|
9734
|
+
// LaTeX \arraystretch multiplies the row baseline-to-baseline distance.
|
|
9735
|
+
// We simulate this by adding (arraystretch - 1)em to the gap. This
|
|
9736
|
+
// does a reasonable job of adjusting arrays containing 1 em tall content.
|
|
9737
|
+
// The 0.16 and 0.09 values are found emprically. They produce an array
|
|
9738
|
+
// similar to LaTeX and in which content does not interfere with \hines.
|
|
9739
|
+
|
|
9740
|
+
var gap = 0.16 + group.arraystretch - 1 + (group.addJot ? 0.09 : 0);
|
|
9741
|
+
table.setAttribute("rowspacing", gap + "em"); // MathML table lines go only between cells.
|
|
9742
|
+
// To place a line on an edge we'll use <menclose>, if necessary.
|
|
9743
|
+
|
|
9744
|
+
var menclose = "";
|
|
9745
|
+
var align = "";
|
|
9746
|
+
|
|
9747
|
+
if (group.cols) {
|
|
9748
|
+
// Find column alignment, column spacing, and vertical lines.
|
|
9749
|
+
var cols = group.cols;
|
|
9750
|
+
var columnLines = "";
|
|
9751
|
+
var prevTypeWasAlign = false;
|
|
9752
|
+
var iStart = 0;
|
|
9753
|
+
var iEnd = cols.length;
|
|
9754
|
+
|
|
9755
|
+
if (cols[0].type === "separator") {
|
|
9756
|
+
menclose += "top ";
|
|
9757
|
+
iStart = 1;
|
|
9758
|
+
}
|
|
9759
|
+
|
|
9760
|
+
if (cols[cols.length - 1].type === "separator") {
|
|
9761
|
+
menclose += "bottom ";
|
|
9762
|
+
iEnd -= 1;
|
|
9763
|
+
}
|
|
9764
|
+
|
|
9765
|
+
for (var i = iStart; i < iEnd; i++) {
|
|
9766
|
+
if (cols[i].type === "align") {
|
|
9767
|
+
align += alignMap[cols[i].align];
|
|
9768
|
+
|
|
9769
|
+
if (prevTypeWasAlign) {
|
|
9770
|
+
columnLines += "none ";
|
|
9771
|
+
}
|
|
9772
|
+
|
|
9773
|
+
prevTypeWasAlign = true;
|
|
9774
|
+
} else if (cols[i].type === "separator") {
|
|
9775
|
+
// MathML accepts only single lines between cells.
|
|
9776
|
+
// So we read only the first of consecutive separators.
|
|
9777
|
+
if (prevTypeWasAlign) {
|
|
9778
|
+
columnLines += cols[i].separator === "|" ? "solid " : "dashed ";
|
|
9779
|
+
prevTypeWasAlign = false;
|
|
9780
|
+
}
|
|
9781
|
+
}
|
|
9782
|
+
}
|
|
9783
|
+
|
|
9784
|
+
table.setAttribute("columnalign", align.trim());
|
|
9785
|
+
|
|
9786
|
+
if (/[sd]/.test(columnLines)) {
|
|
9787
|
+
table.setAttribute("columnlines", columnLines.trim());
|
|
9788
|
+
}
|
|
9789
|
+
} // Set column spacing.
|
|
9790
|
+
|
|
9791
|
+
|
|
9792
|
+
if (group.colSeparationType === "align") {
|
|
9793
|
+
var _cols = group.cols || [];
|
|
9794
|
+
|
|
9795
|
+
var spacing = "";
|
|
9796
|
+
|
|
9797
|
+
for (var _i = 1; _i < _cols.length; _i++) {
|
|
9798
|
+
spacing += _i % 2 ? "0em " : "1em ";
|
|
9799
|
+
}
|
|
9800
|
+
|
|
9801
|
+
table.setAttribute("columnspacing", spacing.trim());
|
|
9802
|
+
} else if (group.colSeparationType === "alignat") {
|
|
9803
|
+
table.setAttribute("columnspacing", "0em");
|
|
9804
|
+
} else {
|
|
9805
|
+
table.setAttribute("columnspacing", "1em");
|
|
9806
|
+
} // Address \hline and \hdashline
|
|
9807
|
+
|
|
9808
|
+
|
|
9809
|
+
var rowLines = "";
|
|
9810
|
+
var hlines = group.hLinesBeforeRow;
|
|
9811
|
+
menclose += hlines[0].length > 0 ? "left " : "";
|
|
9812
|
+
menclose += hlines[hlines.length - 1].length > 0 ? "right " : "";
|
|
9813
|
+
|
|
9814
|
+
for (var _i2 = 1; _i2 < hlines.length - 1; _i2++) {
|
|
9815
|
+
rowLines += hlines[_i2].length === 0 ? "none " // MathML accepts only a single line between rows. Read one element.
|
|
9816
|
+
: hlines[_i2][0] ? "dashed " : "solid ";
|
|
9817
|
+
}
|
|
9818
|
+
|
|
9819
|
+
if (/[sd]/.test(rowLines)) {
|
|
9820
|
+
table.setAttribute("rowlines", rowLines.trim());
|
|
9821
|
+
}
|
|
9822
|
+
|
|
9823
|
+
if (menclose === "") {
|
|
9824
|
+
return table;
|
|
9825
|
+
} else {
|
|
9826
|
+
var wrapper = new mathMLTree.MathNode("menclose", [table]);
|
|
9827
|
+
wrapper.setAttribute("notation", menclose.trim());
|
|
9828
|
+
return wrapper;
|
|
9829
|
+
}
|
|
9699
9830
|
}; // Convenience function for aligned and alignedat environments.
|
|
9700
9831
|
|
|
9701
9832
|
|
|
@@ -9737,9 +9868,9 @@ var array_alignedHandler = function alignedHandler(context, args) {
|
|
|
9737
9868
|
|
|
9738
9869
|
var isAligned = !numCols;
|
|
9739
9870
|
res.body.forEach(function (row) {
|
|
9740
|
-
for (var
|
|
9871
|
+
for (var _i3 = 1; _i3 < row.length; _i3 += 2) {
|
|
9741
9872
|
// Modify ordgroup node within styling node
|
|
9742
|
-
var styling = assertNodeType(row[
|
|
9873
|
+
var styling = assertNodeType(row[_i3], "styling");
|
|
9743
9874
|
|
|
9744
9875
|
var _ordgroup = assertNodeType(styling.body[0], "ordgroup");
|
|
9745
9876
|
|
|
@@ -9761,18 +9892,18 @@ var array_alignedHandler = function alignedHandler(context, args) {
|
|
|
9761
9892
|
// In aligned mode, we add one \qquad between columns;
|
|
9762
9893
|
// otherwise we add nothing.
|
|
9763
9894
|
|
|
9764
|
-
for (var
|
|
9895
|
+
for (var _i4 = 0; _i4 < numCols; ++_i4) {
|
|
9765
9896
|
var align = "r";
|
|
9766
9897
|
var pregap = 0;
|
|
9767
9898
|
|
|
9768
|
-
if (
|
|
9899
|
+
if (_i4 % 2 === 1) {
|
|
9769
9900
|
align = "l";
|
|
9770
|
-
} else if (
|
|
9901
|
+
} else if (_i4 > 0 && isAligned) {
|
|
9771
9902
|
// "aligned" mode.
|
|
9772
9903
|
pregap = 1; // add one \quad
|
|
9773
9904
|
}
|
|
9774
9905
|
|
|
9775
|
-
cols[
|
|
9906
|
+
cols[_i4] = {
|
|
9776
9907
|
type: "align",
|
|
9777
9908
|
align: align,
|
|
9778
9909
|
pregap: pregap,
|
|
@@ -9780,6 +9911,7 @@ var array_alignedHandler = function alignedHandler(context, args) {
|
|
|
9780
9911
|
};
|
|
9781
9912
|
}
|
|
9782
9913
|
|
|
9914
|
+
res.colSeparationType = isAligned ? "align" : "alignat";
|
|
9783
9915
|
return res;
|
|
9784
9916
|
}; // Arrays are part of LaTeX, defined in lttab.dtx so its documentation
|
|
9785
9917
|
// is part of the source2e.pdf file of LaTeX2e source documentation.
|
|
@@ -10147,6 +10279,7 @@ defineFunction({
|
|
|
10147
10279
|
mode: baseArg.mode,
|
|
10148
10280
|
limits: true,
|
|
10149
10281
|
alwaysHandleSupSub: true,
|
|
10282
|
+
parentIsSupSub: false,
|
|
10150
10283
|
symbol: false,
|
|
10151
10284
|
suppressBaseShift: funcName !== "\\stackrel",
|
|
10152
10285
|
body: defineFunction_ordargument(baseArg)
|
|
@@ -10289,23 +10422,30 @@ defineFunction({
|
|
|
10289
10422
|
|
|
10290
10423
|
|
|
10291
10424
|
|
|
10292
|
-
var
|
|
10293
|
-
// Fractions are handled in the TeXbook on pages 444-445, rules 15(a-e).
|
|
10425
|
+
var genfrac_adjustStyle = function adjustStyle(size, originalStyle) {
|
|
10294
10426
|
// Figure out what style this fraction should be in based on the
|
|
10295
10427
|
// function used
|
|
10296
|
-
var style =
|
|
10428
|
+
var style = originalStyle;
|
|
10297
10429
|
|
|
10298
|
-
if (
|
|
10299
|
-
style
|
|
10300
|
-
|
|
10430
|
+
if (size === "display") {
|
|
10431
|
+
// Get display style as a default.
|
|
10432
|
+
// If incoming style is sub/sup, use style.text() to get correct size.
|
|
10433
|
+
style = style.id >= src_Style.SCRIPT.id ? style.text() : src_Style.DISPLAY;
|
|
10434
|
+
} else if (size === "text" && style.size === src_Style.DISPLAY.size) {
|
|
10301
10435
|
// We're in a \tfrac but incoming style is displaystyle, so:
|
|
10302
10436
|
style = src_Style.TEXT;
|
|
10303
|
-
} else if (
|
|
10437
|
+
} else if (size === "script") {
|
|
10304
10438
|
style = src_Style.SCRIPT;
|
|
10305
|
-
} else if (
|
|
10439
|
+
} else if (size === "scriptscript") {
|
|
10306
10440
|
style = src_Style.SCRIPTSCRIPT;
|
|
10307
10441
|
}
|
|
10308
10442
|
|
|
10443
|
+
return style;
|
|
10444
|
+
};
|
|
10445
|
+
|
|
10446
|
+
var genfrac_htmlBuilder = function htmlBuilder(group, options) {
|
|
10447
|
+
// Fractions are handled in the TeXbook on pages 444-445, rules 15(a-e).
|
|
10448
|
+
var style = genfrac_adjustStyle(group.size, options.style);
|
|
10309
10449
|
var nstyle = style.fracNum();
|
|
10310
10450
|
var dstyle = style.fracDen();
|
|
10311
10451
|
var newOptions;
|
|
@@ -10348,7 +10488,7 @@ var genfrac_htmlBuilder = function htmlBuilder(group, options) {
|
|
|
10348
10488
|
var clearance;
|
|
10349
10489
|
var denomShift;
|
|
10350
10490
|
|
|
10351
|
-
if (style.size === src_Style.DISPLAY.size) {
|
|
10491
|
+
if (style.size === src_Style.DISPLAY.size || group.size === "display") {
|
|
10352
10492
|
numShift = options.fontMetrics().num1;
|
|
10353
10493
|
|
|
10354
10494
|
if (ruleWidth > 0) {
|
|
@@ -10468,11 +10608,20 @@ var genfrac_mathmlBuilder = function mathmlBuilder(group, options) {
|
|
|
10468
10608
|
node.setAttribute("linethickness", ruleWidth + "em");
|
|
10469
10609
|
}
|
|
10470
10610
|
|
|
10611
|
+
var style = genfrac_adjustStyle(group.size, options.style);
|
|
10612
|
+
|
|
10613
|
+
if (style.size !== options.style.size) {
|
|
10614
|
+
node = new mathMLTree.MathNode("mstyle", [node]);
|
|
10615
|
+
var isDisplay = style.size === src_Style.DISPLAY.size ? "true" : "false";
|
|
10616
|
+
node.setAttribute("displaystyle", isDisplay);
|
|
10617
|
+
node.setAttribute("scriptlevel", "0");
|
|
10618
|
+
}
|
|
10619
|
+
|
|
10471
10620
|
if (group.leftDelim != null || group.rightDelim != null) {
|
|
10472
10621
|
var withDelims = [];
|
|
10473
10622
|
|
|
10474
10623
|
if (group.leftDelim != null) {
|
|
10475
|
-
var leftOp = new mathMLTree.MathNode("mo", [new mathMLTree.TextNode(group.leftDelim)]);
|
|
10624
|
+
var leftOp = new mathMLTree.MathNode("mo", [new mathMLTree.TextNode(group.leftDelim.replace("\\", ""))]);
|
|
10476
10625
|
leftOp.setAttribute("fence", "true");
|
|
10477
10626
|
withDelims.push(leftOp);
|
|
10478
10627
|
}
|
|
@@ -10480,7 +10629,7 @@ var genfrac_mathmlBuilder = function mathmlBuilder(group, options) {
|
|
|
10480
10629
|
withDelims.push(node);
|
|
10481
10630
|
|
|
10482
10631
|
if (group.rightDelim != null) {
|
|
10483
|
-
var rightOp = new mathMLTree.MathNode("mo", [new mathMLTree.TextNode(group.rightDelim)]);
|
|
10632
|
+
var rightOp = new mathMLTree.MathNode("mo", [new mathMLTree.TextNode(group.rightDelim.replace("\\", ""))]);
|
|
10484
10633
|
rightOp.setAttribute("fence", "true");
|
|
10485
10634
|
withDelims.push(rightOp);
|
|
10486
10635
|
}
|
|
@@ -11249,7 +11398,10 @@ defineFunction({
|
|
|
11249
11398
|
|
|
11250
11399
|
|
|
11251
11400
|
|
|
11252
|
-
//
|
|
11401
|
+
// Most operators have a large successor symbol, but these don't.
|
|
11402
|
+
var noSuccessor = ["\\smallint"]; // NOTE: Unlike most `htmlBuilder`s, this one handles not only "op", but also
|
|
11403
|
+
// "supsub" since some of them (like \int) can affect super/subscripting.
|
|
11404
|
+
|
|
11253
11405
|
var op_htmlBuilder = function htmlBuilder(grp, options) {
|
|
11254
11406
|
// Operators are handled in the TeXbook pg. 443-444, rule 13(a).
|
|
11255
11407
|
var supGroup;
|
|
@@ -11270,9 +11422,7 @@ var op_htmlBuilder = function htmlBuilder(grp, options) {
|
|
|
11270
11422
|
group = assertNodeType(grp, "op");
|
|
11271
11423
|
}
|
|
11272
11424
|
|
|
11273
|
-
var style = options.style;
|
|
11274
|
-
|
|
11275
|
-
var noSuccessor = ["\\smallint"];
|
|
11425
|
+
var style = options.style;
|
|
11276
11426
|
var large = false;
|
|
11277
11427
|
|
|
11278
11428
|
if (style.size === src_Style.DISPLAY.size && group.symbol && !utils.contains(noSuccessor, group.name)) {
|
|
@@ -11484,11 +11634,15 @@ var op_htmlBuilder = function htmlBuilder(grp, options) {
|
|
|
11484
11634
|
};
|
|
11485
11635
|
|
|
11486
11636
|
var op_mathmlBuilder = function mathmlBuilder(group, options) {
|
|
11487
|
-
var node;
|
|
11637
|
+
var node;
|
|
11488
11638
|
|
|
11489
11639
|
if (group.symbol) {
|
|
11490
11640
|
// This is a symbol. Just add the symbol.
|
|
11491
11641
|
node = new mathMLTree_MathNode("mo", [buildMathML_makeText(group.name, group.mode)]);
|
|
11642
|
+
|
|
11643
|
+
if (utils.contains(noSuccessor, group.name)) {
|
|
11644
|
+
node.setAttribute("largeop", "false");
|
|
11645
|
+
}
|
|
11492
11646
|
} else if (group.body) {
|
|
11493
11647
|
// This is an operator with children. Add them.
|
|
11494
11648
|
node = new mathMLTree_MathNode("mo", buildMathML_buildExpression(group.body, options));
|
|
@@ -11501,7 +11655,12 @@ var op_mathmlBuilder = function mathmlBuilder(group, options) {
|
|
|
11501
11655
|
// ref: https://www.w3.org/TR/REC-MathML/chap3_2.html#sec3.2.4
|
|
11502
11656
|
|
|
11503
11657
|
var operator = new mathMLTree_MathNode("mo", [buildMathML_makeText("\u2061", "text")]);
|
|
11504
|
-
|
|
11658
|
+
|
|
11659
|
+
if (group.parentIsSupSub) {
|
|
11660
|
+
node = new mathMLTree_MathNode("mo", [node, operator]);
|
|
11661
|
+
} else {
|
|
11662
|
+
node = newDocumentFragment([node, operator]);
|
|
11663
|
+
}
|
|
11505
11664
|
}
|
|
11506
11665
|
|
|
11507
11666
|
return node;
|
|
@@ -11540,6 +11699,7 @@ defineFunction({
|
|
|
11540
11699
|
type: "op",
|
|
11541
11700
|
mode: parser.mode,
|
|
11542
11701
|
limits: true,
|
|
11702
|
+
parentIsSupSub: false,
|
|
11543
11703
|
symbol: true,
|
|
11544
11704
|
name: fName
|
|
11545
11705
|
};
|
|
@@ -11562,6 +11722,7 @@ defineFunction({
|
|
|
11562
11722
|
type: "op",
|
|
11563
11723
|
mode: parser.mode,
|
|
11564
11724
|
limits: false,
|
|
11725
|
+
parentIsSupSub: false,
|
|
11565
11726
|
symbol: false,
|
|
11566
11727
|
body: defineFunction_ordargument(body)
|
|
11567
11728
|
};
|
|
@@ -11594,6 +11755,7 @@ defineFunction({
|
|
|
11594
11755
|
type: "op",
|
|
11595
11756
|
mode: parser.mode,
|
|
11596
11757
|
limits: false,
|
|
11758
|
+
parentIsSupSub: false,
|
|
11597
11759
|
symbol: false,
|
|
11598
11760
|
name: funcName
|
|
11599
11761
|
};
|
|
@@ -11615,6 +11777,7 @@ defineFunction({
|
|
|
11615
11777
|
type: "op",
|
|
11616
11778
|
mode: parser.mode,
|
|
11617
11779
|
limits: true,
|
|
11780
|
+
parentIsSupSub: false,
|
|
11618
11781
|
symbol: false,
|
|
11619
11782
|
name: funcName
|
|
11620
11783
|
};
|
|
@@ -11642,6 +11805,7 @@ defineFunction({
|
|
|
11642
11805
|
type: "op",
|
|
11643
11806
|
mode: parser.mode,
|
|
11644
11807
|
limits: false,
|
|
11808
|
+
parentIsSupSub: false,
|
|
11645
11809
|
symbol: true,
|
|
11646
11810
|
name: fName
|
|
11647
11811
|
};
|
|
@@ -11910,8 +12074,10 @@ defineFunction({
|
|
|
11910
12074
|
},
|
|
11911
12075
|
mathmlBuilder: function mathmlBuilder(group, options) {
|
|
11912
12076
|
var inner = buildMathML_buildExpression(defineFunction_ordargument(group.body), options);
|
|
11913
|
-
var
|
|
12077
|
+
var phantom = new mathMLTree.MathNode("mphantom", inner);
|
|
12078
|
+
var node = new mathMLTree.MathNode("mpadded", [phantom]);
|
|
11914
12079
|
node.setAttribute("height", "0px");
|
|
12080
|
+
node.setAttribute("depth", "0px");
|
|
11915
12081
|
return node;
|
|
11916
12082
|
}
|
|
11917
12083
|
});
|
|
@@ -11938,7 +12104,8 @@ defineFunction({
|
|
|
11938
12104
|
},
|
|
11939
12105
|
mathmlBuilder: function mathmlBuilder(group, options) {
|
|
11940
12106
|
var inner = buildMathML_buildExpression(defineFunction_ordargument(group.body), options);
|
|
11941
|
-
var
|
|
12107
|
+
var phantom = new mathMLTree.MathNode("mphantom", inner);
|
|
12108
|
+
var node = new mathMLTree.MathNode("mpadded", [phantom]);
|
|
11942
12109
|
node.setAttribute("width", "0px");
|
|
11943
12110
|
return node;
|
|
11944
12111
|
}
|
|
@@ -12106,14 +12273,9 @@ defineFunction({
|
|
|
12106
12273
|
// Make an empty span for the rule
|
|
12107
12274
|
var rule = buildCommon.makeSpan(["mord", "rule"], [], options); // Calculate the shift, width, and height of the rule, and account for units
|
|
12108
12275
|
|
|
12109
|
-
var shift = 0;
|
|
12110
|
-
|
|
12111
|
-
if (group.shift) {
|
|
12112
|
-
shift = units_calculateSize(group.shift, options);
|
|
12113
|
-
}
|
|
12114
|
-
|
|
12115
12276
|
var width = units_calculateSize(group.width, options);
|
|
12116
|
-
var height = units_calculateSize(group.height, options);
|
|
12277
|
+
var height = units_calculateSize(group.height, options);
|
|
12278
|
+
var shift = group.shift ? units_calculateSize(group.shift, options) : 0; // Style the rule to the right size
|
|
12117
12279
|
|
|
12118
12280
|
rule.style.borderRightWidth = width + "em";
|
|
12119
12281
|
rule.style.borderTopWidth = height + "em";
|
|
@@ -12129,10 +12291,25 @@ defineFunction({
|
|
|
12129
12291
|
return rule;
|
|
12130
12292
|
},
|
|
12131
12293
|
mathmlBuilder: function mathmlBuilder(group, options) {
|
|
12132
|
-
|
|
12133
|
-
|
|
12134
|
-
var
|
|
12135
|
-
|
|
12294
|
+
var width = units_calculateSize(group.width, options);
|
|
12295
|
+
var height = units_calculateSize(group.height, options);
|
|
12296
|
+
var shift = group.shift ? units_calculateSize(group.shift, options) : 0;
|
|
12297
|
+
var color = options.color && options.getColor() || "black";
|
|
12298
|
+
var rule = new mathMLTree.MathNode("mspace");
|
|
12299
|
+
rule.setAttribute("mathbackground", color);
|
|
12300
|
+
rule.setAttribute("width", width + "em");
|
|
12301
|
+
rule.setAttribute("height", height + "em");
|
|
12302
|
+
var wrapper = new mathMLTree.MathNode("mpadded", [rule]);
|
|
12303
|
+
|
|
12304
|
+
if (shift >= 0) {
|
|
12305
|
+
wrapper.setAttribute("height", "+" + shift + "em");
|
|
12306
|
+
} else {
|
|
12307
|
+
wrapper.setAttribute("height", shift + "em");
|
|
12308
|
+
wrapper.setAttribute("depth", "+" + -shift + "em");
|
|
12309
|
+
}
|
|
12310
|
+
|
|
12311
|
+
wrapper.setAttribute("voffset", shift + "em");
|
|
12312
|
+
return wrapper;
|
|
12136
12313
|
}
|
|
12137
12314
|
});
|
|
12138
12315
|
// CONCATENATED MODULE: ./src/functions/smash.js
|
|
@@ -12635,6 +12812,10 @@ defineFunctionBuilders({
|
|
|
12635
12812
|
}
|
|
12636
12813
|
}
|
|
12637
12814
|
|
|
12815
|
+
if (group.base && group.base.type === "op") {
|
|
12816
|
+
group.base.parentIsSupSub = true;
|
|
12817
|
+
}
|
|
12818
|
+
|
|
12638
12819
|
var children = [buildMathML_buildGroup(group.base, options)];
|
|
12639
12820
|
|
|
12640
12821
|
if (group.sub) {
|
|
@@ -12652,7 +12833,7 @@ defineFunctionBuilders({
|
|
|
12652
12833
|
} else if (!group.sub) {
|
|
12653
12834
|
var base = group.base;
|
|
12654
12835
|
|
|
12655
|
-
if (base && base.type === "op" && base.limits && options.style === src_Style.DISPLAY) {
|
|
12836
|
+
if (base && base.type === "op" && base.limits && (options.style === src_Style.DISPLAY || base.alwaysHandleSupSub)) {
|
|
12656
12837
|
nodeType = "mover";
|
|
12657
12838
|
} else {
|
|
12658
12839
|
nodeType = "msup";
|
|
@@ -12660,7 +12841,7 @@ defineFunctionBuilders({
|
|
|
12660
12841
|
} else if (!group.sup) {
|
|
12661
12842
|
var _base = group.base;
|
|
12662
12843
|
|
|
12663
|
-
if (_base && _base.type === "op" && _base.limits && options.style === src_Style.DISPLAY) {
|
|
12844
|
+
if (_base && _base.type === "op" && _base.limits && (options.style === src_Style.DISPLAY || _base.alwaysHandleSupSub)) {
|
|
12664
12845
|
nodeType = "munder";
|
|
12665
12846
|
} else {
|
|
12666
12847
|
nodeType = "msub";
|
|
@@ -12701,6 +12882,10 @@ defineFunctionBuilders({
|
|
|
12701
12882
|
}
|
|
12702
12883
|
} else if (group.family === "punct") {
|
|
12703
12884
|
node.setAttribute("separator", "true");
|
|
12885
|
+
} else if (group.family === "open" || group.family === "close") {
|
|
12886
|
+
// Delims built here should not stretch vertically.
|
|
12887
|
+
// See delimsizing.js for stretchy delims.
|
|
12888
|
+
node.setAttribute("stretchy", "false");
|
|
12704
12889
|
}
|
|
12705
12890
|
|
|
12706
12891
|
return node;
|
|
@@ -12831,12 +13016,25 @@ defineFunctionBuilders({
|
|
|
12831
13016
|
|
|
12832
13017
|
|
|
12833
13018
|
|
|
13019
|
+
|
|
13020
|
+
var tag_pad = function pad() {
|
|
13021
|
+
var padNode = new mathMLTree.MathNode("mtd", []);
|
|
13022
|
+
padNode.setAttribute("width", "50%");
|
|
13023
|
+
return padNode;
|
|
13024
|
+
};
|
|
13025
|
+
|
|
12834
13026
|
defineFunctionBuilders({
|
|
12835
13027
|
type: "tag",
|
|
12836
13028
|
mathmlBuilder: function mathmlBuilder(group, options) {
|
|
12837
|
-
var table = new mathMLTree.MathNode("mtable", [new mathMLTree.MathNode("
|
|
12838
|
-
table.setAttribute("
|
|
12839
|
-
return table;
|
|
13029
|
+
var table = new mathMLTree.MathNode("mtable", [new mathMLTree.MathNode("mtr", [tag_pad(), new mathMLTree.MathNode("mtd", [buildExpressionRow(group.body, options)]), tag_pad(), new mathMLTree.MathNode("mtd", [buildExpressionRow(group.tag, options)])])]);
|
|
13030
|
+
table.setAttribute("width", "100%");
|
|
13031
|
+
return table; // TODO: Left-aligned tags.
|
|
13032
|
+
// Currently, the group and options passed here do not contain
|
|
13033
|
+
// enough info to set tag alignment. `leqno` is in Settings but it is
|
|
13034
|
+
// not passed to Options. On the HTML side, leqno is
|
|
13035
|
+
// set by a CSS class applied in buildTree.js. That would have worked
|
|
13036
|
+
// in MathML if browsers supported <mlabeledtr>. Since they don't, we
|
|
13037
|
+
// need to rewrite the way this function is called.
|
|
12840
13038
|
}
|
|
12841
13039
|
});
|
|
12842
13040
|
// CONCATENATED MODULE: ./src/functions/text.js
|
|
@@ -12853,10 +13051,12 @@ var textFontFamilies = {
|
|
|
12853
13051
|
"\\textnormal": "textrm"
|
|
12854
13052
|
};
|
|
12855
13053
|
var textFontWeights = {
|
|
12856
|
-
"\\textbf": "textbf"
|
|
13054
|
+
"\\textbf": "textbf",
|
|
13055
|
+
"\\textmd": "textmd"
|
|
12857
13056
|
};
|
|
12858
13057
|
var textFontShapes = {
|
|
12859
|
-
"\\textit": "textit"
|
|
13058
|
+
"\\textit": "textit",
|
|
13059
|
+
"\\textup": "textup"
|
|
12860
13060
|
};
|
|
12861
13061
|
|
|
12862
13062
|
var optionsWithFont = function optionsWithFont(group, options) {
|
|
@@ -12877,8 +13077,8 @@ defineFunction({
|
|
|
12877
13077
|
type: "text",
|
|
12878
13078
|
names: [// Font families
|
|
12879
13079
|
"\\text", "\\textrm", "\\textsf", "\\texttt", "\\textnormal", // Font weights
|
|
12880
|
-
"\\textbf", // Font Shapes
|
|
12881
|
-
"\\textit"],
|
|
13080
|
+
"\\textbf", "\\textmd", // Font Shapes
|
|
13081
|
+
"\\textit", "\\textup"],
|
|
12882
13082
|
props: {
|
|
12883
13083
|
numArgs: 1,
|
|
12884
13084
|
argTypes: ["text"],
|
|
@@ -13036,6 +13236,8 @@ var functions = _functions;
|
|
|
13036
13236
|
|
|
13037
13237
|
|
|
13038
13238
|
|
|
13239
|
+
// Disabled until https://github.com/KaTeX/KaTeX/pull/1794 is merged.
|
|
13240
|
+
// import "./functions/includegraphics";
|
|
13039
13241
|
|
|
13040
13242
|
|
|
13041
13243
|
|
|
@@ -13640,7 +13842,9 @@ defineMacro("\u211B", "\\mathscr{R}");
|
|
|
13640
13842
|
defineMacro("\u212D", "\\mathfrak{C}"); // Fraktur
|
|
13641
13843
|
|
|
13642
13844
|
defineMacro("\u210C", "\\mathfrak{H}");
|
|
13643
|
-
defineMacro("\u2128", "\\mathfrak{Z}"); //
|
|
13845
|
+
defineMacro("\u2128", "\\mathfrak{Z}"); // Define \Bbbk with a macro that works in both HTML and MathML.
|
|
13846
|
+
|
|
13847
|
+
defineMacro("\\Bbbk", "\\Bbb{k}"); // Unicode middle dot
|
|
13644
13848
|
// The KaTeX fonts do not contain U+00B7. Instead, \cdotp displays
|
|
13645
13849
|
// the dot at U+22C5 and gives it punct spacing.
|
|
13646
13850
|
|
|
@@ -13652,8 +13856,9 @@ defineMacro("\\clap", "\\mathclap{\\textrm{#1}}"); // \not is defined by base/fo
|
|
|
13652
13856
|
// \DeclareMathSymbol{\not}{\mathrel}{symbols}{"36}
|
|
13653
13857
|
// It's thus treated like a \mathrel, but defined by a symbol that has zero
|
|
13654
13858
|
// width but extends to the right. We use \rlap to get that spacing.
|
|
13859
|
+
// For MathML we write U+0338 here. buildMathML.js will then do the overlay.
|
|
13655
13860
|
|
|
13656
|
-
defineMacro("\\not", '\\mathrel{\\mathrlap\\@not}'); // Negated symbols from base/fontmath.ltx:
|
|
13861
|
+
defineMacro("\\not", '\\html@mathml{\\mathrel{\\mathrlap\\@not}}{\\char"338}'); // Negated symbols from base/fontmath.ltx:
|
|
13657
13862
|
// \def\neq{\not=} \let\ne=\neq
|
|
13658
13863
|
// \DeclareRobustCommand
|
|
13659
13864
|
// \notin{\mathrel{\m@th\mathpalette\c@ncel\in}}
|
|
@@ -13969,31 +14174,37 @@ defineMacro("\\ordinarycolon", ":"); //\def\vcentcolon{\mathrel{\mathop\ordinary
|
|
|
13969
14174
|
|
|
13970
14175
|
defineMacro("\\vcentcolon", "\\mathrel{\\mathop\\ordinarycolon}"); // \providecommand*\dblcolon{\vcentcolon\mathrel{\mkern-.9mu}\vcentcolon}
|
|
13971
14176
|
|
|
13972
|
-
defineMacro("\\dblcolon", "\\mathrel{\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon}"); // \providecommand*\coloneqq{\vcentcolon\mathrel{\mkern-1.2mu}=}
|
|
14177
|
+
defineMacro("\\dblcolon", "\\html@mathml{" + "\\mathrel{\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon}}" + "{\\mathop{\\char\"2237}}"); // \providecommand*\coloneqq{\vcentcolon\mathrel{\mkern-1.2mu}=}
|
|
14178
|
+
|
|
14179
|
+
defineMacro("\\coloneqq", "\\html@mathml{" + "\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}=}}" + "{\\mathop{\\char\"2254}}"); // ≔
|
|
14180
|
+
// \providecommand*\Coloneqq{\dblcolon\mathrel{\mkern-1.2mu}=}
|
|
14181
|
+
|
|
14182
|
+
defineMacro("\\Coloneqq", "\\html@mathml{" + "\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}=}}" + "{\\mathop{\\char\"2237\\char\"3d}}"); // \providecommand*\coloneq{\vcentcolon\mathrel{\mkern-1.2mu}\mathrel{-}}
|
|
13973
14183
|
|
|
13974
|
-
defineMacro("\\
|
|
14184
|
+
defineMacro("\\coloneq", "\\html@mathml{" + "\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}" + "{\\mathop{\\char\"3a\\char\"2212}}"); // \providecommand*\Coloneq{\dblcolon\mathrel{\mkern-1.2mu}\mathrel{-}}
|
|
13975
14185
|
|
|
13976
|
-
defineMacro("\\
|
|
14186
|
+
defineMacro("\\Coloneq", "\\html@mathml{" + "\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}" + "{\\mathop{\\char\"2237\\char\"2212}}"); // \providecommand*\eqqcolon{=\mathrel{\mkern-1.2mu}\vcentcolon}
|
|
13977
14187
|
|
|
13978
|
-
defineMacro("\\
|
|
14188
|
+
defineMacro("\\eqqcolon", "\\html@mathml{" + "\\mathrel{=\\mathrel{\\mkern-1.2mu}\\vcentcolon}}" + "{\\mathop{\\char\"2255}}"); // ≕
|
|
14189
|
+
// \providecommand*\Eqqcolon{=\mathrel{\mkern-1.2mu}\dblcolon}
|
|
13979
14190
|
|
|
13980
|
-
defineMacro("\\
|
|
14191
|
+
defineMacro("\\Eqqcolon", "\\html@mathml{" + "\\mathrel{=\\mathrel{\\mkern-1.2mu}\\dblcolon}}" + "{\\mathop{\\char\"3d\\char\"2237}}"); // \providecommand*\eqcolon{\mathrel{-}\mathrel{\mkern-1.2mu}\vcentcolon}
|
|
13981
14192
|
|
|
13982
|
-
defineMacro("\\
|
|
14193
|
+
defineMacro("\\eqcolon", "\\html@mathml{" + "\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon}}" + "{\\mathop{\\char\"2239}}"); // \providecommand*\Eqcolon{\mathrel{-}\mathrel{\mkern-1.2mu}\dblcolon}
|
|
13983
14194
|
|
|
13984
|
-
defineMacro("\\
|
|
14195
|
+
defineMacro("\\Eqcolon", "\\html@mathml{" + "\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon}}" + "{\\mathop{\\char\"2212\\char\"2237}}"); // \providecommand*\colonapprox{\vcentcolon\mathrel{\mkern-1.2mu}\approx}
|
|
13985
14196
|
|
|
13986
|
-
defineMacro("\\
|
|
14197
|
+
defineMacro("\\colonapprox", "\\html@mathml{" + "\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx}}" + "{\\mathop{\\char\"3a\\char\"2248}}"); // \providecommand*\Colonapprox{\dblcolon\mathrel{\mkern-1.2mu}\approx}
|
|
13987
14198
|
|
|
13988
|
-
defineMacro("\\
|
|
14199
|
+
defineMacro("\\Colonapprox", "\\html@mathml{" + "\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx}}" + "{\\mathop{\\char\"2237\\char\"2248}}"); // \providecommand*\colonsim{\vcentcolon\mathrel{\mkern-1.2mu}\sim}
|
|
13989
14200
|
|
|
13990
|
-
defineMacro("\\
|
|
14201
|
+
defineMacro("\\colonsim", "\\html@mathml{" + "\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim}}" + "{\\mathop{\\char\"3a\\char\"223c}}"); // \providecommand*\Colonsim{\dblcolon\mathrel{\mkern-1.2mu}\sim}
|
|
13991
14202
|
|
|
13992
|
-
defineMacro("\\
|
|
14203
|
+
defineMacro("\\Colonsim", "\\html@mathml{" + "\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim}}" + "{\\mathop{\\char\"2237\\char\"223c}}"); // Some Unicode characters are implemented with macros to mathtools functions.
|
|
13993
14204
|
|
|
13994
|
-
defineMacro("
|
|
14205
|
+
defineMacro("\u2237", "\\dblcolon"); // ::
|
|
13995
14206
|
|
|
13996
|
-
defineMacro("
|
|
14207
|
+
defineMacro("\u2239", "\\eqcolon"); // -:
|
|
13997
14208
|
|
|
13998
14209
|
defineMacro("\u2254", "\\coloneqq"); // :=
|
|
13999
14210
|
|
|
@@ -14027,13 +14238,37 @@ defineMacro("\\approxcoloncolon", "\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\d
|
|
|
14027
14238
|
defineMacro("\\notni", "\\html@mathml{\\not\\ni}{\\mathrel{\\char`\u220C}}");
|
|
14028
14239
|
defineMacro("\\limsup", "\\DOTSB\\mathop{\\operatorname{lim\\,sup}}\\limits");
|
|
14029
14240
|
defineMacro("\\liminf", "\\DOTSB\\mathop{\\operatorname{lim\\,inf}}\\limits"); //////////////////////////////////////////////////////////////////////
|
|
14030
|
-
//
|
|
14031
|
-
|
|
14032
|
-
|
|
14033
|
-
|
|
14034
|
-
defineMacro("
|
|
14035
|
-
|
|
14036
|
-
defineMacro("
|
|
14241
|
+
// MathML alternates for KaTeX glyphs in the Unicode private area
|
|
14242
|
+
|
|
14243
|
+
defineMacro("\\gvertneqq", "\\html@mathml{\\@gvertneqq}{\u2269}");
|
|
14244
|
+
defineMacro("\\lvertneqq", "\\html@mathml{\\@lvertneqq}{\u2268}");
|
|
14245
|
+
defineMacro("\\ngeqq", "\\html@mathml{\\@ngeqq}{\u2271}");
|
|
14246
|
+
defineMacro("\\ngeqslant", "\\html@mathml{\\@ngeqslant}{\u2271}");
|
|
14247
|
+
defineMacro("\\nleqq", "\\html@mathml{\\@nleqq}{\u2270}");
|
|
14248
|
+
defineMacro("\\nleqslant", "\\html@mathml{\\@nleqslant}{\u2270}");
|
|
14249
|
+
defineMacro("\\nshortmid", "\\html@mathml{\\@nshortmid}{∤}");
|
|
14250
|
+
defineMacro("\\nshortparallel", "\\html@mathml{\\@nshortparallel}{∦}");
|
|
14251
|
+
defineMacro("\\nsubseteqq", "\\html@mathml{\\@nsubseteqq}{\u2288}");
|
|
14252
|
+
defineMacro("\\nsupseteqq", "\\html@mathml{\\@nsupseteqq}{\u2289}");
|
|
14253
|
+
defineMacro("\\varsubsetneq", "\\html@mathml{\\@varsubsetneq}{⊊}");
|
|
14254
|
+
defineMacro("\\varsubsetneqq", "\\html@mathml{\\@varsubsetneqq}{⫋}");
|
|
14255
|
+
defineMacro("\\varsupsetneq", "\\html@mathml{\\@varsupsetneq}{⊋}");
|
|
14256
|
+
defineMacro("\\varsupsetneqq", "\\html@mathml{\\@varsupsetneqq}{⫌}"); //////////////////////////////////////////////////////////////////////
|
|
14257
|
+
// stmaryrd and semantic
|
|
14258
|
+
// The stmaryrd and semantic packages render the next four items by calling a
|
|
14259
|
+
// glyph. Those glyphs do not exist in the KaTeX fonts. Hence the macros.
|
|
14260
|
+
|
|
14261
|
+
defineMacro("\\llbracket", "\\html@mathml{" + "\\mathopen{[\\mkern-3.2mu[}}" + "{\\mathopen{\\char`\u27E6}}");
|
|
14262
|
+
defineMacro("\\rrbracket", "\\html@mathml{" + "\\mathclose{]\\mkern-3.2mu]}}" + "{\\mathclose{\\char`\u27E7}}");
|
|
14263
|
+
defineMacro("\u27E6", "\\llbracket"); // blackboard bold [
|
|
14264
|
+
|
|
14265
|
+
defineMacro("\u27E7", "\\rrbracket"); // blackboard bold ]
|
|
14266
|
+
|
|
14267
|
+
defineMacro("\\lBrace", "\\html@mathml{" + "\\mathopen{\\{\\mkern-3.2mu[}}" + "{\\mathopen{\\char`\u2983}}");
|
|
14268
|
+
defineMacro("\\rBrace", "\\html@mathml{" + "\\mathclose{]\\mkern-3.2mu\\}}}" + "{\\mathclose{\\char`\u2984}}");
|
|
14269
|
+
defineMacro("\u2983", "\\lBrace"); // blackboard bold {
|
|
14270
|
+
|
|
14271
|
+
defineMacro("\u2984", "\\rBrace"); // blackboard bold }
|
|
14037
14272
|
// TODO: Create variable sized versions of the last two items. I believe that
|
|
14038
14273
|
// will require new font glyphs.
|
|
14039
14274
|
//////////////////////////////////////////////////////////////////////
|
|
@@ -14095,7 +14330,7 @@ defineMacro("\\Rarr", "\\Rightarrow");
|
|
|
14095
14330
|
defineMacro("\\real", "\\Re");
|
|
14096
14331
|
defineMacro("\\reals", "\\mathbb{R}");
|
|
14097
14332
|
defineMacro("\\Reals", "\\mathbb{R}");
|
|
14098
|
-
defineMacro("\\Rho", "\\mathrm{
|
|
14333
|
+
defineMacro("\\Rho", "\\mathrm{P}");
|
|
14099
14334
|
defineMacro("\\sdot", "\\cdot");
|
|
14100
14335
|
defineMacro("\\sect", "\\S");
|
|
14101
14336
|
defineMacro("\\spades", "\\spadesuit");
|
|
@@ -14111,7 +14346,64 @@ defineMacro("\\Zeta", "\\mathrm{Z}"); //////////////////////////////////////////
|
|
|
14111
14346
|
// https://ctan.math.illinois.edu/macros/latex/contrib/statmath/statmath.pdf
|
|
14112
14347
|
|
|
14113
14348
|
defineMacro("\\argmin", "\\DOTSB\\mathop{\\operatorname{arg\\,min}}\\limits");
|
|
14114
|
-
defineMacro("\\argmax", "\\DOTSB\\mathop{\\operatorname{arg\\,max}}\\limits");
|
|
14349
|
+
defineMacro("\\argmax", "\\DOTSB\\mathop{\\operatorname{arg\\,max}}\\limits"); // Custom Khan Academy colors, should be moved to an optional package
|
|
14350
|
+
|
|
14351
|
+
defineMacro("\\blue", "\\textcolor{##6495ed}{#1}");
|
|
14352
|
+
defineMacro("\\orange", "\\textcolor{##ffa500}{#1}");
|
|
14353
|
+
defineMacro("\\pink", "\\textcolor{##ff00af}{#1}");
|
|
14354
|
+
defineMacro("\\red", "\\textcolor{##df0030}{#1}");
|
|
14355
|
+
defineMacro("\\green", "\\textcolor{##28ae7b}{#1}");
|
|
14356
|
+
defineMacro("\\gray", "\\textcolor{gray}{##1}");
|
|
14357
|
+
defineMacro("\\purple", "\\textcolor{##9d38bd}{#1}");
|
|
14358
|
+
defineMacro("\\blueA", "\\textcolor{##ccfaff}{#1}");
|
|
14359
|
+
defineMacro("\\blueB", "\\textcolor{##80f6ff}{#1}");
|
|
14360
|
+
defineMacro("\\blueC", "\\textcolor{##63d9ea}{#1}");
|
|
14361
|
+
defineMacro("\\blueD", "\\textcolor{##11accd}{#1}");
|
|
14362
|
+
defineMacro("\\blueE", "\\textcolor{##0c7f99}{#1}");
|
|
14363
|
+
defineMacro("\\tealA", "\\textcolor{##94fff5}{#1}");
|
|
14364
|
+
defineMacro("\\tealB", "\\textcolor{##26edd5}{#1}");
|
|
14365
|
+
defineMacro("\\tealC", "\\textcolor{##01d1c1}{#1}");
|
|
14366
|
+
defineMacro("\\tealD", "\\textcolor{##01a995}{#1}");
|
|
14367
|
+
defineMacro("\\tealE", "\\textcolor{##208170}{#1}");
|
|
14368
|
+
defineMacro("\\greenA", "\\textcolor{##b6ffb0}{#1}");
|
|
14369
|
+
defineMacro("\\greenB", "\\textcolor{##8af281}{#1}");
|
|
14370
|
+
defineMacro("\\greenC", "\\textcolor{##74cf70}{#1}");
|
|
14371
|
+
defineMacro("\\greenD", "\\textcolor{##1fab54}{#1}");
|
|
14372
|
+
defineMacro("\\greenE", "\\textcolor{##0d923f}{#1}");
|
|
14373
|
+
defineMacro("\\goldA", "\\textcolor{##ffd0a9}{#1}");
|
|
14374
|
+
defineMacro("\\goldB", "\\textcolor{##ffbb71}{#1}");
|
|
14375
|
+
defineMacro("\\goldC", "\\textcolor{##ff9c39}{#1}");
|
|
14376
|
+
defineMacro("\\goldD", "\\textcolor{##e07d10}{#1}");
|
|
14377
|
+
defineMacro("\\goldE", "\\textcolor{##a75a05}{#1}");
|
|
14378
|
+
defineMacro("\\redA", "\\textcolor{##fca9a9}{#1}");
|
|
14379
|
+
defineMacro("\\redB", "\\textcolor{##ff8482}{#1}");
|
|
14380
|
+
defineMacro("\\redC", "\\textcolor{##f9685d}{#1}");
|
|
14381
|
+
defineMacro("\\redD", "\\textcolor{##e84d39}{#1}");
|
|
14382
|
+
defineMacro("\\redE", "\\textcolor{##bc2612}{#1}");
|
|
14383
|
+
defineMacro("\\maroonA", "\\textcolor{##ffbde0}{#1}");
|
|
14384
|
+
defineMacro("\\maroonB", "\\textcolor{##ff92c6}{#1}");
|
|
14385
|
+
defineMacro("\\maroonC", "\\textcolor{##ed5fa6}{#1}");
|
|
14386
|
+
defineMacro("\\maroonD", "\\textcolor{##ca337c}{#1}");
|
|
14387
|
+
defineMacro("\\maroonE", "\\textcolor{##9e034e}{#1}");
|
|
14388
|
+
defineMacro("\\purpleA", "\\textcolor{##ddd7ff}{#1}");
|
|
14389
|
+
defineMacro("\\purpleB", "\\textcolor{##c6b9fc}{#1}");
|
|
14390
|
+
defineMacro("\\purpleC", "\\textcolor{##aa87ff}{#1}");
|
|
14391
|
+
defineMacro("\\purpleD", "\\textcolor{##7854ab}{#1}");
|
|
14392
|
+
defineMacro("\\purpleE", "\\textcolor{##543b78}{#1}");
|
|
14393
|
+
defineMacro("\\mintA", "\\textcolor{##f5f9e8}{#1}");
|
|
14394
|
+
defineMacro("\\mintB", "\\textcolor{##edf2df}{#1}");
|
|
14395
|
+
defineMacro("\\mintC", "\\textcolor{##e0e5cc}{#1}");
|
|
14396
|
+
defineMacro("\\grayA", "\\textcolor{##f6f7f7}{#1}");
|
|
14397
|
+
defineMacro("\\grayB", "\\textcolor{##f0f1f2}{#1}");
|
|
14398
|
+
defineMacro("\\grayC", "\\textcolor{##e3e5e6}{#1}");
|
|
14399
|
+
defineMacro("\\grayD", "\\textcolor{##d6d8da}{#1}");
|
|
14400
|
+
defineMacro("\\grayE", "\\textcolor{##babec2}{#1}");
|
|
14401
|
+
defineMacro("\\grayF", "\\textcolor{##888d93}{#1}");
|
|
14402
|
+
defineMacro("\\grayG", "\\textcolor{##626569}{#1}");
|
|
14403
|
+
defineMacro("\\grayH", "\\textcolor{##3b3e40}{#1}");
|
|
14404
|
+
defineMacro("\\grayI", "\\textcolor{##21242c}{#1}");
|
|
14405
|
+
defineMacro("\\kaBlue", "\\textcolor{##314453}{#1}");
|
|
14406
|
+
defineMacro("\\kaGreen", "\\textcolor{##71B307}{#1}");
|
|
14115
14407
|
// CONCATENATED MODULE: ./src/MacroExpander.js
|
|
14116
14408
|
/**
|
|
14117
14409
|
* This file contains the “gullet” where macros are expanded
|
|
@@ -16418,7 +16710,7 @@ var katex_renderToHTMLTree = function renderToHTMLTree(expression, options) {
|
|
|
16418
16710
|
/**
|
|
16419
16711
|
* Current KaTeX version
|
|
16420
16712
|
*/
|
|
16421
|
-
version: "0.10.
|
|
16713
|
+
version: "0.10.2",
|
|
16422
16714
|
|
|
16423
16715
|
/**
|
|
16424
16716
|
* Renders the given LaTeX into an HTML+MathML combination, and adds
|