katex 0.12.0 → 0.13.3

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.
Files changed (167) hide show
  1. package/CHANGELOG.md +112 -0
  2. package/LICENSE +1 -1
  3. package/README.md +8 -7
  4. package/contrib/auto-render/auto-render.js +12 -19
  5. package/contrib/auto-render/index.html +9 -3
  6. package/contrib/auto-render/splitAtDelimiters.js +44 -61
  7. package/contrib/auto-render/test/auto-render-spec.js +88 -52
  8. package/contrib/copy-tex/README.md +5 -9
  9. package/contrib/copy-tex/copy-tex.css +0 -3
  10. package/contrib/mathtex-script-type/README.md +5 -5
  11. package/contrib/mhchem/README.md +4 -2
  12. package/contrib/render-a11y-string/render-a11y-string.js +31 -2
  13. package/contrib/render-a11y-string/test/render-a11y-string-spec.js +23 -0
  14. package/dist/README.md +8 -7
  15. package/dist/contrib/auto-render.js +148 -171
  16. package/dist/contrib/auto-render.min.js +1 -1
  17. package/dist/contrib/auto-render.mjs +91 -95
  18. package/dist/contrib/copy-tex.css +3 -3
  19. package/dist/contrib/copy-tex.js +11 -108
  20. package/dist/contrib/copy-tex.min.css +1 -1
  21. package/dist/contrib/copy-tex.min.js +1 -1
  22. package/dist/contrib/copy-tex.mjs +21 -20
  23. package/dist/contrib/mathtex-script-type.js +66 -91
  24. package/dist/contrib/mathtex-script-type.min.js +1 -1
  25. package/dist/contrib/mathtex-script-type.mjs +3 -3
  26. package/dist/contrib/mhchem.js +70 -95
  27. package/dist/contrib/mhchem.min.js +1 -1
  28. package/dist/contrib/mhchem.mjs +2 -2
  29. package/dist/contrib/render-a11y-string.js +97 -92
  30. package/dist/contrib/render-a11y-string.min.js +1 -1
  31. package/dist/contrib/render-a11y-string.mjs +86 -45
  32. package/dist/fonts/KaTeX_AMS-Regular.ttf +0 -0
  33. package/dist/fonts/KaTeX_AMS-Regular.woff +0 -0
  34. package/dist/fonts/KaTeX_AMS-Regular.woff2 +0 -0
  35. package/dist/fonts/KaTeX_Caligraphic-Bold.ttf +0 -0
  36. package/dist/fonts/KaTeX_Caligraphic-Bold.woff +0 -0
  37. package/dist/fonts/KaTeX_Caligraphic-Bold.woff2 +0 -0
  38. package/dist/fonts/KaTeX_Caligraphic-Regular.ttf +0 -0
  39. package/dist/fonts/KaTeX_Caligraphic-Regular.woff +0 -0
  40. package/dist/fonts/KaTeX_Caligraphic-Regular.woff2 +0 -0
  41. package/dist/fonts/KaTeX_Fraktur-Bold.ttf +0 -0
  42. package/dist/fonts/KaTeX_Fraktur-Bold.woff +0 -0
  43. package/dist/fonts/KaTeX_Fraktur-Bold.woff2 +0 -0
  44. package/dist/fonts/KaTeX_Fraktur-Regular.ttf +0 -0
  45. package/dist/fonts/KaTeX_Fraktur-Regular.woff +0 -0
  46. package/dist/fonts/KaTeX_Fraktur-Regular.woff2 +0 -0
  47. package/dist/fonts/KaTeX_Main-Bold.ttf +0 -0
  48. package/dist/fonts/KaTeX_Main-Bold.woff +0 -0
  49. package/dist/fonts/KaTeX_Main-Bold.woff2 +0 -0
  50. package/dist/fonts/KaTeX_Main-BoldItalic.ttf +0 -0
  51. package/dist/fonts/KaTeX_Main-BoldItalic.woff +0 -0
  52. package/dist/fonts/KaTeX_Main-BoldItalic.woff2 +0 -0
  53. package/dist/fonts/KaTeX_Main-Italic.ttf +0 -0
  54. package/dist/fonts/KaTeX_Main-Italic.woff +0 -0
  55. package/dist/fonts/KaTeX_Main-Italic.woff2 +0 -0
  56. package/dist/fonts/KaTeX_Main-Regular.ttf +0 -0
  57. package/dist/fonts/KaTeX_Main-Regular.woff +0 -0
  58. package/dist/fonts/KaTeX_Main-Regular.woff2 +0 -0
  59. package/dist/fonts/KaTeX_Math-BoldItalic.ttf +0 -0
  60. package/dist/fonts/KaTeX_Math-BoldItalic.woff +0 -0
  61. package/dist/fonts/KaTeX_Math-BoldItalic.woff2 +0 -0
  62. package/dist/fonts/KaTeX_Math-Italic.ttf +0 -0
  63. package/dist/fonts/KaTeX_Math-Italic.woff +0 -0
  64. package/dist/fonts/KaTeX_Math-Italic.woff2 +0 -0
  65. package/dist/fonts/KaTeX_SansSerif-Bold.ttf +0 -0
  66. package/dist/fonts/KaTeX_SansSerif-Bold.woff +0 -0
  67. package/dist/fonts/KaTeX_SansSerif-Bold.woff2 +0 -0
  68. package/dist/fonts/KaTeX_SansSerif-Italic.ttf +0 -0
  69. package/dist/fonts/KaTeX_SansSerif-Italic.woff +0 -0
  70. package/dist/fonts/KaTeX_SansSerif-Italic.woff2 +0 -0
  71. package/dist/fonts/KaTeX_SansSerif-Regular.ttf +0 -0
  72. package/dist/fonts/KaTeX_SansSerif-Regular.woff +0 -0
  73. package/dist/fonts/KaTeX_SansSerif-Regular.woff2 +0 -0
  74. package/dist/fonts/KaTeX_Script-Regular.ttf +0 -0
  75. package/dist/fonts/KaTeX_Script-Regular.woff +0 -0
  76. package/dist/fonts/KaTeX_Script-Regular.woff2 +0 -0
  77. package/dist/fonts/KaTeX_Size1-Regular.ttf +0 -0
  78. package/dist/fonts/KaTeX_Size1-Regular.woff +0 -0
  79. package/dist/fonts/KaTeX_Size1-Regular.woff2 +0 -0
  80. package/dist/fonts/KaTeX_Size2-Regular.ttf +0 -0
  81. package/dist/fonts/KaTeX_Size2-Regular.woff +0 -0
  82. package/dist/fonts/KaTeX_Size2-Regular.woff2 +0 -0
  83. package/dist/fonts/KaTeX_Size3-Regular.ttf +0 -0
  84. package/dist/fonts/KaTeX_Size3-Regular.woff +0 -0
  85. package/dist/fonts/KaTeX_Size3-Regular.woff2 +0 -0
  86. package/dist/fonts/KaTeX_Size4-Regular.ttf +0 -0
  87. package/dist/fonts/KaTeX_Size4-Regular.woff +0 -0
  88. package/dist/fonts/KaTeX_Size4-Regular.woff2 +0 -0
  89. package/dist/fonts/KaTeX_Typewriter-Regular.ttf +0 -0
  90. package/dist/fonts/KaTeX_Typewriter-Regular.woff +0 -0
  91. package/dist/fonts/KaTeX_Typewriter-Regular.woff2 +0 -0
  92. package/dist/katex.css +66 -10
  93. package/dist/katex.js +2714 -1950
  94. package/dist/katex.min.css +1 -1
  95. package/dist/katex.min.js +1 -1
  96. package/dist/katex.mjs +3162 -2372
  97. package/katex.js +4 -3
  98. package/package.json +69 -59
  99. package/src/Lexer.js +4 -2
  100. package/src/MacroExpander.js +117 -37
  101. package/src/Options.js +2 -2
  102. package/src/ParseError.js +1 -1
  103. package/src/Parser.js +100 -159
  104. package/src/Settings.js +2 -2
  105. package/src/Style.js +4 -4
  106. package/src/Token.js +1 -1
  107. package/src/buildCommon.js +12 -5
  108. package/src/buildHTML.js +11 -0
  109. package/src/buildMathML.js +6 -0
  110. package/src/defineEnvironment.js +0 -3
  111. package/src/defineFunction.js +15 -22
  112. package/src/delimiter.js +61 -57
  113. package/src/domTree.js +1 -1
  114. package/src/environments/array.js +223 -35
  115. package/src/environments/cd.js +312 -0
  116. package/src/fontMetrics.js +1 -1
  117. package/src/fontMetricsData.js +2076 -0
  118. package/src/fonts/.gitignore +9 -0
  119. package/src/fonts/Makefile +139 -0
  120. package/src/fonts/default.cfg +20 -0
  121. package/src/fonts/generate_fonts.py +61 -0
  122. package/src/fonts/lib/Extra.otf +0 -0
  123. package/src/fonts/lib/Space.ttx +234 -0
  124. package/src/fonts/makeBlacker +49 -0
  125. package/src/fonts/makeFF +2003 -0
  126. package/src/fonts/xbbold.mf +182 -0
  127. package/src/fonts.less +64 -0
  128. package/src/functions/accent.js +3 -2
  129. package/src/functions/arrow.js +8 -2
  130. package/src/functions/color.js +4 -4
  131. package/src/functions/cr.js +7 -25
  132. package/src/functions/def.js +50 -24
  133. package/src/functions/delimsizing.js +8 -0
  134. package/src/functions/enclose.js +80 -12
  135. package/src/functions/environment.js +1 -1
  136. package/src/functions/font.js +3 -4
  137. package/src/functions/genfrac.js +36 -11
  138. package/src/functions/hbox.js +39 -0
  139. package/src/functions/kern.js +1 -0
  140. package/src/functions/mathchoice.js +1 -0
  141. package/src/functions/mclass.js +2 -1
  142. package/src/functions/op.js +3 -7
  143. package/src/functions/operatorname.js +1 -1
  144. package/src/functions/raisebox.js +0 -1
  145. package/src/functions/styling.js +1 -0
  146. package/src/functions/supsub.js +1 -3
  147. package/src/functions/symbolsOrd.js +0 -2
  148. package/src/functions/text.js +2 -3
  149. package/src/functions/vcenter.js +44 -0
  150. package/src/functions.js +3 -0
  151. package/src/katex.less +69 -16
  152. package/src/macros.js +42 -6
  153. package/src/mathMLTree.js +16 -1
  154. package/src/metrics/.gitignore +1 -0
  155. package/src/metrics/README.md +23 -0
  156. package/src/metrics/extract_tfms.py +114 -0
  157. package/src/metrics/extract_ttfs.py +119 -0
  158. package/src/metrics/format_json.py +28 -0
  159. package/src/metrics/mapping.pl +1224 -0
  160. package/src/metrics/parse_tfm.py +211 -0
  161. package/src/parseNode.js +29 -1
  162. package/src/parseTree.js +6 -0
  163. package/src/stretchy.js +12 -5
  164. package/src/svgGeometry.js +33 -4
  165. package/src/symbols.js +5 -3
  166. package/src/types.js +3 -2
  167. package/src/unicodeScripts.js +5 -0
@@ -11,7 +11,7 @@ included in the page, in addition to KaTeX.
11
11
  Load the extension by adding the following line to your HTML file.
12
12
 
13
13
  ```html
14
- <script defer src="https://cdn.jsdelivr.net/npm/katex@0.12.0/dist/contrib/mathtex-script-type.min.js" integrity="sha384-LJ2FmexL77rmGm6SIpxq7y+XA6bkLzGZEgCywzKOZG/ws4va9fUVu2neMjvc3zdv" crossorigin="anonymous"></script>
14
+ <script defer src="https://cdn.jsdelivr.net/npm/katex@0.13.3/dist/contrib/mathtex-script-type.min.js" integrity="sha384-lfASb0Jhxn21qr4pih+Mx6uK2+JEKTtnpMnsCo+PTmb3n/iSUhox6v7eGkBfi47O" crossorigin="anonymous"></script>
15
15
  ```
16
16
  You can download the script and use it locally, or from a local KaTeX installation instead.
17
17
 
@@ -23,9 +23,9 @@ Then, in the body, we use a `math/tex` script to typeset the equation `x+\sqrt{1
23
23
  <!DOCTYPE html>
24
24
  <html>
25
25
  <head>
26
- <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.12.0/dist/katex.min.css" integrity="sha384-AfEj0r4/OFrOo5t7NnNe46zW/tFgW6x/bCJG8FqQCEo3+Aro6EYUG4+cU+KJWu/X" crossorigin="anonymous">
27
- <script src="https://cdn.jsdelivr.net/npm/katex@0.12.0/dist/katex.min.js" integrity="sha384-g7c+Jr9ZivxKLnZTDUhnkOnsh30B4H0rpLUpJ4jAIKs4fnJI+sEnkvrMWph2EDg4" crossorigin="anonymous"></script>
28
- <script defer src="https://cdn.jsdelivr.net/npm/katex@0.12.0/dist/contrib/mathtex-script-type.min.js" integrity="sha384-LJ2FmexL77rmGm6SIpxq7y+XA6bkLzGZEgCywzKOZG/ws4va9fUVu2neMjvc3zdv" crossorigin="anonymous"></script>
26
+ <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.13.3/dist/katex.min.css" integrity="sha384-ThssJ7YtjywV52Gj4JE/1SQEDoMEckXyhkFVwaf4nDSm5OBlXeedVYjuuUd0Yua+" crossorigin="anonymous">
27
+ <script src="https://cdn.jsdelivr.net/npm/katex@0.13.3/dist/katex.min.js" integrity="sha384-Bi8OWqMXO1ta+a4EPkZv7bYGIes7C3krGSZoTGNTAnAn5eYQc7IIXrJ/7ck1drAi" crossorigin="anonymous"></script>
28
+ <script defer src="https://cdn.jsdelivr.net/npm/katex@0.13.3/dist/contrib/mathtex-script-type.min.js" integrity="sha384-lfASb0Jhxn21qr4pih+Mx6uK2+JEKTtnpMnsCo+PTmb3n/iSUhox6v7eGkBfi47O" crossorigin="anonymous"></script>
29
29
  </head>
30
30
  <body>
31
31
  <script type="math/tex">x+\sqrt{1-x^2}</script>
@@ -35,4 +35,4 @@ Then, in the body, we use a `math/tex` script to typeset the equation `x+\sqrt{1
35
35
 
36
36
  ECMAScript module is also available:
37
37
  ```html
38
- <script type="module" src="https://cdn.jsdelivr.net/npm/katex@0.12.0/dist/contrib/mathtex-script-type.mjs" integrity="sha384-qc7HqE4GHbr2H9R+C8mTSdJmkkZ9E1bkIRyRrxMsoj3dcbGjILzoXJGcBGGns1bk" crossorigin="anonymous"></script>
38
+ <script type="module" src="https://cdn.jsdelivr.net/npm/katex@0.13.3/dist/contrib/mathtex-script-type.mjs" integrity="sha384-4EJvC5tvqq9XJxXvdD4JutBokuFw/dCe2AB4gZ9sRpwFFXECpL3qT43tmE0PkpVg" crossorigin="anonymous"></script>
@@ -4,12 +4,14 @@ This extension adds to KaTeX the `\ce` and `\pu` functions from the [mhchem](htt
4
4
 
5
5
  ### Usage
6
6
 
7
- This extension isn't part of core KaTeX, so the script should be separately included. Write the following line into the HTML page's `<head>`. Place it *after* the line that calls `katex.js`.
7
+ This extension isn't part of core KaTeX, so the script should be separately included. Write the following line into the HTML page's `<head>`. Place it *after* the line that calls `katex.js`, and if you make use of the [auto-render](https://katex.org/docs/autorender.html) extension, place it *before* the line that calls `auto-render.js`.
8
8
 
9
9
  ```html
10
- <script src="https://cdn.jsdelivr.net/npm/katex@0.12.0/dist/contrib/mhchem.min.js" integrity="sha384-5gCAXJ0ZgozlShOzzT0OWArn7yCPGWVIvgo+BAd8NUKbCmulrJiQuCVR9cHlPHeG"></script>
10
+ <script defer src="https://cdn.jsdelivr.net/npm/katex@0.13.3/dist/contrib/mhchem.min.js" integrity="sha384-LIgAiYlGSAdpNC9+YDjDPF6JeS/RRIumtNo0CmyQERZ/+g0h9MbuYQwf/5pQ4Y4M" crossorigin="anonymous"></script>
11
11
  ```
12
12
 
13
+ If you remove the `defer` attribute from this tag, then you must also remove the `defer` attribute from the `<script src="https://../katex.min.js">` tag.
14
+
13
15
  ### Syntax
14
16
 
15
17
  See the [mhchem Manual](https://mhchem.github.io/MathJax-mhchem/) for a full explanation of the input syntax, with working examples. The manual also includes a demonstration box.
@@ -188,7 +188,8 @@ const buildString = (
188
188
  a11yStrings.length > 0 &&
189
189
  // TODO(kevinb): check that the last item in a11yStrings is a string
190
190
  // I think we might be able to drop the nested arrays, which would make
191
- // this easier to type - $FlowFixMe
191
+ // this easier to type
192
+ // $FlowFixMe
192
193
  /^\d+$/.test(a11yStrings[a11yStrings.length - 1])
193
194
  ) {
194
195
  a11yStrings[a11yStrings.length - 1] += ret;
@@ -326,6 +327,11 @@ const handleObject = (
326
327
  break;
327
328
  }
328
329
 
330
+ case "hbox": {
331
+ buildA11yStrings(tree.body, a11yStrings, atomType);
332
+ break;
333
+ }
334
+
329
335
  case "kern": {
330
336
  // No op: we don't attempt to present kerning information
331
337
  // to the screen reader.
@@ -533,11 +539,23 @@ const handleObject = (
533
539
  regionStrings.push("end strikeout");
534
540
  });
535
541
  break;
542
+ } else if (/phase/.test(tree.label)) {
543
+ buildRegion(a11yStrings, function(regionStrings) {
544
+ regionStrings.push("start phase angle");
545
+ buildA11yStrings(tree.body, regionStrings, atomType);
546
+ regionStrings.push("end phase angle");
547
+ });
548
+ break;
536
549
  }
537
550
  throw new Error(
538
551
  `KaTeX-a11y: enclose node with ${tree.label} not supported yet`);
539
552
  }
540
553
 
554
+ case "vcenter": {
555
+ buildA11yStrings(tree.body, a11yStrings, atomType);
556
+ break;
557
+ }
558
+
541
559
  case "vphantom": {
542
560
  throw new Error("KaTeX-a11y: vphantom not implemented yet");
543
561
  }
@@ -629,6 +647,14 @@ const handleObject = (
629
647
  throw new Error("KaTeX-a11y: xArrow not implemented yet");
630
648
  }
631
649
 
650
+ case "cdlabel": {
651
+ throw new Error("KaTeX-a11y: cdlabel not implemented yet");
652
+ }
653
+
654
+ case "cdlabelparent": {
655
+ throw new Error("KaTeX-a11y: cdlabelparent not implemented yet");
656
+ }
657
+
632
658
  case "mclass": {
633
659
  // \neq and \ne are macros so we let "htmlmathml" render the mathmal
634
660
  // side of things and extract the text from that.
@@ -702,7 +728,10 @@ const flatten = function(array) {
702
728
  return result;
703
729
  };
704
730
 
705
- const renderA11yString = function(text: string, settings?: SettingsOptions) {
731
+ const renderA11yString = function(
732
+ text: string,
733
+ settings?: SettingsOptions,
734
+ ): string {
706
735
 
707
736
  const tree = katex.__parse(text, settings);
708
737
  const a11yStrings = buildA11yStrings(tree, [], "normal");
@@ -151,6 +151,15 @@ describe("renderA11yString", () => {
151
151
  });
152
152
  });
153
153
 
154
+ describe("phase", () => {
155
+ test("\\phase", () => {
156
+ const result = renderA11yString("\\phase{a}");
157
+ expect(result).toMatchInlineSnapshot(
158
+ `"start phase angle, a, end phase angle"`,
159
+ );
160
+ });
161
+ });
162
+
154
163
  describe("exponents", () => {
155
164
  test("simple exponent", () => {
156
165
  const result = renderA11yString("e^x");
@@ -263,6 +272,13 @@ describe("renderA11yString", () => {
263
272
  });
264
273
  });
265
274
 
275
+ describe("hbox", () => {
276
+ test("\\hbox", () => {
277
+ const result = renderA11yString("x+\\hbox{y}");
278
+ expect(result).toMatchInlineSnapshot(`"x, plus, y"`);
279
+ });
280
+ });
281
+
266
282
  describe("inner", () => {
267
283
  test("\\ldots", () => {
268
284
  const result = renderA11yString("\\ldots");
@@ -515,6 +531,13 @@ describe("renderA11yString", () => {
515
531
  });
516
532
  });
517
533
 
534
+ describe("vcenter", () => {
535
+ test("\\vcenter", () => {
536
+ const result = renderA11yString("x+\\vcenter{y}");
537
+ expect(result).toMatchInlineSnapshot(`"x, plus, y"`);
538
+ });
539
+ });
540
+
518
541
  describe("verb", () => {
519
542
  test("\\verb", () => {
520
543
  const result = renderA11yString("\\verb|hello|");
package/dist/README.md CHANGED
@@ -1,11 +1,12 @@
1
1
  # [<img src="https://katex.org/img/katex-logo-black.svg" width="130" alt="KaTeX">](https://katex.org/)
2
2
  [![npm](https://img.shields.io/npm/v/katex.svg)](https://www.npmjs.com/package/katex)
3
- [![CircleCI](https://circleci.com/gh/KaTeX/KaTeX.svg?style=shield)](https://circleci.com/gh/KaTeX/KaTeX)
3
+ [![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)
4
+ [![CI](https://github.com/KaTeX/KaTeX/workflows/CI/badge.svg?branch=master&event=push)](https://github.com/KaTeX/KaTeX/actions?query=workflow%3ACI)
4
5
  [![codecov](https://codecov.io/gh/KaTeX/KaTeX/branch/master/graph/badge.svg)](https://codecov.io/gh/KaTeX/KaTeX)
5
- [![Join the chat at https://gitter.im/KaTeX/KaTeX](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/KaTeX/KaTeX?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
6
- [![Dependabot Status](https://api.dependabot.com/badges/status?host=github&repo=KaTeX/KaTeX)](https://dependabot.com)
6
+ [![Discussions](https://img.shields.io/badge/Discussions-join-brightgreen)](https://github.com/KaTeX/KaTeX/discussions)
7
7
  [![jsDelivr](https://data.jsdelivr.com/v1/package/npm/katex/badge?style=rounded)](https://www.jsdelivr.com/package/npm/katex)
8
- ![](https://img.badgesize.io/KaTeX/KaTeX/v0.12.0/dist/katex.min.js?compression=gzip)
8
+ ![katex.min.js size](https://img.badgesize.io/https://unpkg.com/katex/dist/katex.min.js?compression=gzip)
9
+ [![Gitpod ready-to-code](https://img.shields.io/badge/Gitpod-ready--to--code-blue?logo=gitpod)](https://gitpod.io/#https://github.com/KaTeX/KaTeX)
9
10
 
10
11
  KaTeX is a fast, easy-to-use JavaScript library for TeX math rendering on the web.
11
12
 
@@ -29,13 +30,13 @@ Try out KaTeX [on the demo page](https://katex.org/#demo)!
29
30
  <!-- KaTeX requires the use of the HTML5 doctype. Without it, KaTeX may not render properly -->
30
31
  <html>
31
32
  <head>
32
- <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.12.0/dist/katex.min.css" integrity="sha384-AfEj0r4/OFrOo5t7NnNe46zW/tFgW6x/bCJG8FqQCEo3+Aro6EYUG4+cU+KJWu/X" crossorigin="anonymous">
33
+ <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.13.3/dist/katex.min.css" integrity="sha384-ThssJ7YtjywV52Gj4JE/1SQEDoMEckXyhkFVwaf4nDSm5OBlXeedVYjuuUd0Yua+" crossorigin="anonymous">
33
34
 
34
35
  <!-- The loading of KaTeX is deferred to speed up page rendering -->
35
- <script defer src="https://cdn.jsdelivr.net/npm/katex@0.12.0/dist/katex.min.js" integrity="sha384-g7c+Jr9ZivxKLnZTDUhnkOnsh30B4H0rpLUpJ4jAIKs4fnJI+sEnkvrMWph2EDg4" crossorigin="anonymous"></script>
36
+ <script defer src="https://cdn.jsdelivr.net/npm/katex@0.13.3/dist/katex.min.js" integrity="sha384-Bi8OWqMXO1ta+a4EPkZv7bYGIes7C3krGSZoTGNTAnAn5eYQc7IIXrJ/7ck1drAi" crossorigin="anonymous"></script>
36
37
 
37
38
  <!-- To automatically render math in text elements, include the auto-render extension: -->
38
- <script defer src="https://cdn.jsdelivr.net/npm/katex@0.12.0/dist/contrib/auto-render.min.js" integrity="sha384-mll67QQFJfxn0IYznZYonOWZ644AWYC+Pt2cHqMaRhXVrursRwvLnLaebdGIlYNa" crossorigin="anonymous"
39
+ <script defer src="https://cdn.jsdelivr.net/npm/katex@0.13.3/dist/contrib/auto-render.min.js" integrity="sha384-vZTG03m+2yp6N6BNi5iM4rW4oIwk5DfcNdFfxkk9ZWpDriOkXX8voJBFrAO7MpVl" crossorigin="anonymous"
39
40
  onload="renderMathInElement(document.body);"></script>
40
41
  </head>
41
42
  ...
@@ -7,111 +7,88 @@
7
7
  exports["renderMathInElement"] = factory(require("katex"));
8
8
  else
9
9
  root["renderMathInElement"] = factory(root["katex"]);
10
- })((typeof self !== 'undefined' ? self : this), function(__WEBPACK_EXTERNAL_MODULE__0__) {
11
- return /******/ (function(modules) { // webpackBootstrap
10
+ })((typeof self !== 'undefined' ? self : this), function(__WEBPACK_EXTERNAL_MODULE__974__) {
11
+ return /******/ (function() { // webpackBootstrap
12
+ /******/ "use strict";
13
+ /******/ var __webpack_modules__ = ({
14
+
15
+ /***/ 974:
16
+ /***/ (function(module) {
17
+
18
+ module.exports = __WEBPACK_EXTERNAL_MODULE__974__;
19
+
20
+ /***/ })
21
+
22
+ /******/ });
23
+ /************************************************************************/
12
24
  /******/ // The module cache
13
- /******/ var installedModules = {};
14
- /******/
25
+ /******/ var __webpack_module_cache__ = {};
26
+ /******/
15
27
  /******/ // The require function
16
28
  /******/ function __webpack_require__(moduleId) {
17
- /******/
18
29
  /******/ // Check if module is in cache
19
- /******/ if(installedModules[moduleId]) {
20
- /******/ return installedModules[moduleId].exports;
30
+ /******/ var cachedModule = __webpack_module_cache__[moduleId];
31
+ /******/ if (cachedModule !== undefined) {
32
+ /******/ return cachedModule.exports;
21
33
  /******/ }
22
34
  /******/ // Create a new module (and put it into the cache)
23
- /******/ var module = installedModules[moduleId] = {
24
- /******/ i: moduleId,
25
- /******/ l: false,
35
+ /******/ var module = __webpack_module_cache__[moduleId] = {
36
+ /******/ // no module.id needed
37
+ /******/ // no module.loaded needed
26
38
  /******/ exports: {}
27
39
  /******/ };
28
- /******/
40
+ /******/
29
41
  /******/ // Execute the module function
30
- /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
31
- /******/
32
- /******/ // Flag the module as loaded
33
- /******/ module.l = true;
34
- /******/
42
+ /******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
43
+ /******/
35
44
  /******/ // Return the exports of the module
36
45
  /******/ return module.exports;
37
46
  /******/ }
38
- /******/
39
- /******/
40
- /******/ // expose the modules object (__webpack_modules__)
41
- /******/ __webpack_require__.m = modules;
42
- /******/
43
- /******/ // expose the module cache
44
- /******/ __webpack_require__.c = installedModules;
45
- /******/
46
- /******/ // define getter function for harmony exports
47
- /******/ __webpack_require__.d = function(exports, name, getter) {
48
- /******/ if(!__webpack_require__.o(exports, name)) {
49
- /******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
50
- /******/ }
51
- /******/ };
52
- /******/
53
- /******/ // define __esModule on exports
54
- /******/ __webpack_require__.r = function(exports) {
55
- /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
56
- /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
57
- /******/ }
58
- /******/ Object.defineProperty(exports, '__esModule', { value: true });
59
- /******/ };
60
- /******/
61
- /******/ // create a fake namespace object
62
- /******/ // mode & 1: value is a module id, require it
63
- /******/ // mode & 2: merge all properties of value into the ns
64
- /******/ // mode & 4: return value when already ns object
65
- /******/ // mode & 8|1: behave like require
66
- /******/ __webpack_require__.t = function(value, mode) {
67
- /******/ if(mode & 1) value = __webpack_require__(value);
68
- /******/ if(mode & 8) return value;
69
- /******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
70
- /******/ var ns = Object.create(null);
71
- /******/ __webpack_require__.r(ns);
72
- /******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
73
- /******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
74
- /******/ return ns;
75
- /******/ };
76
- /******/
77
- /******/ // getDefaultExport function for compatibility with non-harmony modules
78
- /******/ __webpack_require__.n = function(module) {
79
- /******/ var getter = module && module.__esModule ?
80
- /******/ function getDefault() { return module['default']; } :
81
- /******/ function getModuleExports() { return module; };
82
- /******/ __webpack_require__.d(getter, 'a', getter);
83
- /******/ return getter;
84
- /******/ };
85
- /******/
86
- /******/ // Object.prototype.hasOwnProperty.call
87
- /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
88
- /******/
89
- /******/ // __webpack_public_path__
90
- /******/ __webpack_require__.p = "";
91
- /******/
92
- /******/
93
- /******/ // Load entry module and return exports
94
- /******/ return __webpack_require__(__webpack_require__.s = 1);
95
- /******/ })
47
+ /******/
96
48
  /************************************************************************/
97
- /******/ ([
98
- /* 0 */
99
- /***/ (function(module, exports) {
100
-
101
- module.exports = __WEBPACK_EXTERNAL_MODULE__0__;
102
-
103
- /***/ }),
104
- /* 1 */
105
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
49
+ /******/ /* webpack/runtime/compat get default export */
50
+ /******/ !function() {
51
+ /******/ // getDefaultExport function for compatibility with non-harmony modules
52
+ /******/ __webpack_require__.n = function(module) {
53
+ /******/ var getter = module && module.__esModule ?
54
+ /******/ function() { return module['default']; } :
55
+ /******/ function() { return module; };
56
+ /******/ __webpack_require__.d(getter, { a: getter });
57
+ /******/ return getter;
58
+ /******/ };
59
+ /******/ }();
60
+ /******/
61
+ /******/ /* webpack/runtime/define property getters */
62
+ /******/ !function() {
63
+ /******/ // define getter functions for harmony exports
64
+ /******/ __webpack_require__.d = function(exports, definition) {
65
+ /******/ for(var key in definition) {
66
+ /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
67
+ /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
68
+ /******/ }
69
+ /******/ }
70
+ /******/ };
71
+ /******/ }();
72
+ /******/
73
+ /******/ /* webpack/runtime/hasOwnProperty shorthand */
74
+ /******/ !function() {
75
+ /******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }
76
+ /******/ }();
77
+ /******/
78
+ /************************************************************************/
79
+ var __webpack_exports__ = {};
80
+ // This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.
81
+ !function() {
106
82
 
107
- "use strict";
108
- __webpack_require__.r(__webpack_exports__);
83
+ // EXPORTS
84
+ __webpack_require__.d(__webpack_exports__, {
85
+ "default": function() { return /* binding */ auto_render; }
86
+ });
109
87
 
110
88
  // EXTERNAL MODULE: external "katex"
111
- var external_katex_ = __webpack_require__(0);
89
+ var external_katex_ = __webpack_require__(974);
112
90
  var external_katex_default = /*#__PURE__*/__webpack_require__.n(external_katex_);
113
-
114
- // CONCATENATED MODULE: ./contrib/auto-render/splitAtDelimiters.js
91
+ ;// CONCATENATED MODULE: ./contrib/auto-render/splitAtDelimiters.js
115
92
  /* eslint no-constant-condition:0 */
116
93
  var findEndOfMath = function findEndOfMath(delimiter, text, startIndex) {
117
94
  // Adapted from
@@ -139,96 +116,76 @@ var findEndOfMath = function findEndOfMath(delimiter, text, startIndex) {
139
116
  return -1;
140
117
  };
141
118
 
142
- var splitAtDelimiters = function splitAtDelimiters(startData, leftDelim, rightDelim, display) {
143
- var finalData = [];
144
-
145
- for (var i = 0; i < startData.length; i++) {
146
- if (startData[i].type === "text") {
147
- var text = startData[i].data;
148
- var lookingForLeft = true;
149
- var currIndex = 0;
150
- var nextIndex = void 0;
151
- nextIndex = text.indexOf(leftDelim);
152
-
153
- if (nextIndex !== -1) {
154
- currIndex = nextIndex;
155
- finalData.push({
156
- type: "text",
157
- data: text.slice(0, currIndex)
158
- });
159
- lookingForLeft = false;
160
- }
119
+ var escapeRegex = function escapeRegex(string) {
120
+ return string.replace(/[-/\\^$*+?.()|[\]{}]/g, "\\$&");
121
+ };
161
122
 
162
- while (true) {
163
- if (lookingForLeft) {
164
- nextIndex = text.indexOf(leftDelim, currIndex);
165
-
166
- if (nextIndex === -1) {
167
- break;
168
- }
169
-
170
- finalData.push({
171
- type: "text",
172
- data: text.slice(currIndex, nextIndex)
173
- });
174
- currIndex = nextIndex;
175
- } else {
176
- nextIndex = findEndOfMath(rightDelim, text, currIndex + leftDelim.length);
177
-
178
- if (nextIndex === -1) {
179
- break;
180
- }
181
-
182
- finalData.push({
183
- type: "math",
184
- data: text.slice(currIndex + leftDelim.length, nextIndex),
185
- rawData: text.slice(currIndex, nextIndex + rightDelim.length),
186
- display: display
187
- });
188
- currIndex = nextIndex + rightDelim.length;
189
- }
123
+ var amsRegex = /^\\begin{/;
190
124
 
191
- lookingForLeft = !lookingForLeft;
192
- }
125
+ var splitAtDelimiters = function splitAtDelimiters(text, delimiters) {
126
+ var index;
127
+ var data = [];
128
+ var regexLeft = new RegExp("(" + delimiters.map(function (x) {
129
+ return escapeRegex(x.left);
130
+ }).join("|") + ")");
193
131
 
194
- finalData.push({
195
- type: "text",
196
- data: text.slice(currIndex)
197
- });
198
- } else {
199
- finalData.push(startData[i]);
132
+ while (true) {
133
+ index = text.search(regexLeft);
134
+
135
+ if (index === -1) {
136
+ break;
200
137
  }
201
- }
202
138
 
203
- return finalData;
204
- };
139
+ if (index > 0) {
140
+ data.push({
141
+ type: "text",
142
+ data: text.slice(0, index)
143
+ });
144
+ text = text.slice(index); // now text starts with delimiter
145
+ } // ... so this always succeeds:
205
146
 
206
- /* harmony default export */ var auto_render_splitAtDelimiters = (splitAtDelimiters);
207
- // CONCATENATED MODULE: ./contrib/auto-render/auto-render.js
208
- /* eslint no-console:0 */
209
147
 
148
+ var i = delimiters.findIndex(function (delim) {
149
+ return text.startsWith(delim.left);
150
+ });
151
+ index = findEndOfMath(delimiters[i].right, text, delimiters[i].left.length);
210
152
 
153
+ if (index === -1) {
154
+ break;
155
+ }
211
156
 
212
- var auto_render_splitWithDelimiters = function splitWithDelimiters(text, delimiters) {
213
- var data = [{
214
- type: "text",
215
- data: text
216
- }];
157
+ var rawData = text.slice(0, index + delimiters[i].right.length);
158
+ var math = amsRegex.test(rawData) ? rawData : text.slice(delimiters[i].left.length, index);
159
+ data.push({
160
+ type: "math",
161
+ data: math,
162
+ rawData: rawData,
163
+ display: delimiters[i].display
164
+ });
165
+ text = text.slice(index + delimiters[i].right.length);
166
+ }
217
167
 
218
- for (var i = 0; i < delimiters.length; i++) {
219
- var delimiter = delimiters[i];
220
- data = auto_render_splitAtDelimiters(data, delimiter.left, delimiter.right, delimiter.display || false);
168
+ if (text !== "") {
169
+ data.push({
170
+ type: "text",
171
+ data: text
172
+ });
221
173
  }
222
174
 
223
175
  return data;
224
176
  };
177
+
178
+ /* harmony default export */ var auto_render_splitAtDelimiters = (splitAtDelimiters);
179
+ ;// CONCATENATED MODULE: ./contrib/auto-render/auto-render.js
180
+ /* eslint no-console:0 */
181
+
182
+
225
183
  /* Note: optionsCopy is mutated by this method. If it is ever exposed in the
226
184
  * API, we should copy it before mutating.
227
185
  */
228
186
 
229
-
230
- var auto_render_renderMathInText = function renderMathInText(text, optionsCopy) {
231
- var data = auto_render_splitWithDelimiters(text, optionsCopy.delimiters);
187
+ var renderMathInText = function renderMathInText(text, optionsCopy) {
188
+ var data = auto_render_splitAtDelimiters(text, optionsCopy.delimiters);
232
189
 
233
190
  if (data.length === 1 && data[0].type === 'text') {
234
191
  // There is no formula in the text.
@@ -254,9 +211,9 @@ var auto_render_renderMathInText = function renderMathInText(text, optionsCopy)
254
211
  math = optionsCopy.preProcess(math);
255
212
  }
256
213
 
257
- external_katex_default.a.render(math, span, optionsCopy);
214
+ external_katex_default().render(math, span, optionsCopy);
258
215
  } catch (e) {
259
- if (!(e instanceof external_katex_default.a.ParseError)) {
216
+ if (!(e instanceof (external_katex_default()).ParseError)) {
260
217
  throw e;
261
218
  }
262
219
 
@@ -278,7 +235,7 @@ var renderElem = function renderElem(elem, optionsCopy) {
278
235
 
279
236
  if (childNode.nodeType === 3) {
280
237
  // Text node
281
- var frag = auto_render_renderMathInText(childNode.textContent, optionsCopy);
238
+ var frag = renderMathInText(childNode.textContent, optionsCopy);
282
239
 
283
240
  if (frag) {
284
241
  i += frag.childNodes.length - 1;
@@ -325,11 +282,29 @@ var renderMathInElement = function renderMathInElement(elem, options) {
325
282
  display: false
326
283
  }, // LaTeX uses $…$, but it ruins the display of normal `$` in text:
327
284
  // {left: "$", right: "$", display: false},
328
- // \[…\] must come last in this array. Otherwise, renderMathInElement
329
- // will search for \[ before it searches for $$ or \(
330
- // That makes it susceptible to finding a \\[0.3em] row delimiter and
331
- // treating it as if it were the start of a KaTeX math zone.
285
+ // $ must come after $$
286
+ // Render AMS environments even if outside $$…$$ delimiters.
332
287
  {
288
+ left: "\\begin{equation}",
289
+ right: "\\end{equation}",
290
+ display: true
291
+ }, {
292
+ left: "\\begin{align}",
293
+ right: "\\end{align}",
294
+ display: true
295
+ }, {
296
+ left: "\\begin{alignat}",
297
+ right: "\\end{alignat}",
298
+ display: true
299
+ }, {
300
+ left: "\\begin{gather}",
301
+ right: "\\end{gather}",
302
+ display: true
303
+ }, {
304
+ left: "\\begin{CD}",
305
+ right: "\\end{CD}",
306
+ display: true
307
+ }, {
333
308
  left: "\\[",
334
309
  right: "\\]",
335
310
  display: true
@@ -343,8 +318,10 @@ var renderMathInElement = function renderMathInElement(elem, options) {
343
318
  renderElem(elem, optionsCopy);
344
319
  };
345
320
 
346
- /* harmony default export */ var auto_render = __webpack_exports__["default"] = (renderMathInElement);
347
-
348
- /***/ })
349
- /******/ ])["default"];
321
+ /* harmony default export */ var auto_render = (renderMathInElement);
322
+ }();
323
+ __webpack_exports__ = __webpack_exports__.default;
324
+ /******/ return __webpack_exports__;
325
+ /******/ })()
326
+ ;
350
327
  });
@@ -1 +1 @@
1
- !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("katex")):"function"==typeof define&&define.amd?define(["katex"],t):"object"==typeof exports?exports.renderMathInElement=t(require("katex")):e.renderMathInElement=t(e.katex)}("undefined"!=typeof self?self:this,function(e){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=1)}([function(t,r){t.exports=e},function(e,t,r){"use strict";r.r(t);var n=r(0),o=r.n(n),a=function(e,t,r){for(var n=r,o=0,a=e.length;n<t.length;){var i=t[n];if(o<=0&&t.slice(n,n+a)===e)return n;"\\"===i?n++:"{"===i?o++:"}"===i&&o--,n++}return-1},i=function(e,t,r,n){for(var o=[],i=0;i<e.length;i++)if("text"===e[i].type){var l=e[i].data,d=!0,s=0,f=void 0;for(-1!==(f=l.indexOf(t))&&(s=f,o.push({type:"text",data:l.slice(0,s)}),d=!1);;){if(d){if(-1===(f=l.indexOf(t,s)))break;o.push({type:"text",data:l.slice(s,f)}),s=f}else{if(-1===(f=a(r,l,s+t.length)))break;o.push({type:"math",data:l.slice(s+t.length,f),rawData:l.slice(s,f+r.length),display:n}),s=f+r.length}d=!d}o.push({type:"text",data:l.slice(s)})}else o.push(e[i]);return o},l=function(e,t){var r=function(e,t){for(var r=[{type:"text",data:e}],n=0;n<t.length;n++){var o=t[n];r=i(r,o.left,o.right,o.display||!1)}return r}(e,t.delimiters);if(1===r.length&&"text"===r[0].type)return null;for(var n=document.createDocumentFragment(),a=0;a<r.length;a++)if("text"===r[a].type)n.appendChild(document.createTextNode(r[a].data));else{var l=document.createElement("span"),d=r[a].data;t.displayMode=r[a].display;try{t.preProcess&&(d=t.preProcess(d)),o.a.render(d,l,t)}catch(e){if(!(e instanceof o.a.ParseError))throw e;t.errorCallback("KaTeX auto-render: Failed to parse `"+r[a].data+"` with ",e),n.appendChild(document.createTextNode(r[a].rawData));continue}n.appendChild(l)}return n};t.default=function(e,t){if(!e)throw new Error("No element provided to render");var r={};for(var n in t)t.hasOwnProperty(n)&&(r[n]=t[n]);r.delimiters=r.delimiters||[{left:"$$",right:"$$",display:!0},{left:"\\(",right:"\\)",display:!1},{left:"\\[",right:"\\]",display:!0}],r.ignoredTags=r.ignoredTags||["script","noscript","style","textarea","pre","code","option"],r.ignoredClasses=r.ignoredClasses||[],r.errorCallback=r.errorCallback||console.error,r.macros=r.macros||{},function e(t,r){for(var n=0;n<t.childNodes.length;n++){var o=t.childNodes[n];if(3===o.nodeType){var a=l(o.textContent,r);a&&(n+=a.childNodes.length-1,t.replaceChild(a,o))}else 1===o.nodeType&&function(){var t=" "+o.className+" ";-1===r.ignoredTags.indexOf(o.nodeName.toLowerCase())&&r.ignoredClasses.every(function(e){return-1===t.indexOf(" "+e+" ")})&&e(o,r)}()}}(e,r)}}]).default});
1
+ !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("katex")):"function"==typeof define&&define.amd?define(["katex"],t):"object"==typeof exports?exports.renderMathInElement=t(require("katex")):e.renderMathInElement=t(e.katex)}("undefined"!=typeof self?self:this,(function(e){return function(){"use strict";var t={974:function(t){t.exports=e}},r={};function n(e){var a=r[e];if(void 0!==a)return a.exports;var i=r[e]={exports:{}};return t[e](i,i.exports,n),i.exports}n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,{a:t}),t},n.d=function(e,t){for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)};var a={};return function(){n.d(a,{default:function(){return s}});var e=n(974),t=n.n(e),r=function(e,t,r){for(var n=r,a=0,i=e.length;n<t.length;){var o=t[n];if(a<=0&&t.slice(n,n+i)===e)return n;"\\"===o?n++:"{"===o?a++:"}"===o&&a--,n++}return-1},i=/^\\begin{/,o=function(e,t){for(var n,a=[],o=new RegExp("("+t.map((function(e){return e.left.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&")})).join("|")+")");-1!==(n=e.search(o));){n>0&&(a.push({type:"text",data:e.slice(0,n)}),e=e.slice(n));var l=t.findIndex((function(t){return e.startsWith(t.left)}));if(-1===(n=r(t[l].right,e,t[l].left.length)))break;var d=e.slice(0,n+t[l].right.length),s=i.test(d)?d:e.slice(t[l].left.length,n);a.push({type:"math",data:s,rawData:d,display:t[l].display}),e=e.slice(n+t[l].right.length)}return""!==e&&a.push({type:"text",data:e}),a},l=function(e,r){var n=o(e,r.delimiters);if(1===n.length&&"text"===n[0].type)return null;for(var a=document.createDocumentFragment(),i=0;i<n.length;i++)if("text"===n[i].type)a.appendChild(document.createTextNode(n[i].data));else{var l=document.createElement("span"),d=n[i].data;r.displayMode=n[i].display;try{r.preProcess&&(d=r.preProcess(d)),t().render(d,l,r)}catch(e){if(!(e instanceof t().ParseError))throw e;r.errorCallback("KaTeX auto-render: Failed to parse `"+n[i].data+"` with ",e),a.appendChild(document.createTextNode(n[i].rawData));continue}a.appendChild(l)}return a},d=function e(t,r){for(var n=0;n<t.childNodes.length;n++){var a=t.childNodes[n];if(3===a.nodeType){var i=l(a.textContent,r);i&&(n+=i.childNodes.length-1,t.replaceChild(i,a))}else 1===a.nodeType&&function(){var t=" "+a.className+" ";-1===r.ignoredTags.indexOf(a.nodeName.toLowerCase())&&r.ignoredClasses.every((function(e){return-1===t.indexOf(" "+e+" ")}))&&e(a,r)}()}},s=function(e,t){if(!e)throw new Error("No element provided to render");var r={};for(var n in t)t.hasOwnProperty(n)&&(r[n]=t[n]);r.delimiters=r.delimiters||[{left:"$$",right:"$$",display:!0},{left:"\\(",right:"\\)",display:!1},{left:"\\begin{equation}",right:"\\end{equation}",display:!0},{left:"\\begin{align}",right:"\\end{align}",display:!0},{left:"\\begin{alignat}",right:"\\end{alignat}",display:!0},{left:"\\begin{gather}",right:"\\end{gather}",display:!0},{left:"\\begin{CD}",right:"\\end{CD}",display:!0},{left:"\\[",right:"\\]",display:!0}],r.ignoredTags=r.ignoredTags||["script","noscript","style","textarea","pre","code","option"],r.ignoredClasses=r.ignoredClasses||[],r.errorCallback=r.errorCallback||console.error,r.macros=r.macros||{},d(e,r)}}(),a=a.default}()}));