-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathindex.html
More file actions
428 lines (425 loc) · 146 KB
/
Copy pathindex.html
File metadata and controls
428 lines (425 loc) · 146 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
<!doctype html>
<html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-default docs-version-current docs-doc-page docs-doc-id-compute-engine/math-json" data-has-hydrated="false">
<head>
<meta charset="UTF-8">
<meta name="generator" content="Docusaurus v3.10.2">
<title data-rh="true">MathJSON Format · MathLive</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://mathlive.io/img/social-card.jpg"><meta data-rh="true" name="twitter:image" content="https://mathlive.io/img/social-card.jpg"><meta data-rh="true" property="og:url" content="https://mathlive.io/math-json/"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="MathJSON Format · MathLive"><meta data-rh="true" name="description" content="MathJSON is a lightweight data interchange format for mathematical notation"><meta data-rh="true" property="og:description" content="MathJSON is a lightweight data interchange format for mathematical notation"><link data-rh="true" rel="icon" href="/img/logo.webp"><link data-rh="true" rel="canonical" href="https://mathlive.io/math-json/"><link data-rh="true" rel="alternate" href="https://mathlive.io/math-json/" hreflang="en"><link data-rh="true" rel="alternate" href="https://mathlive.io/math-json/" hreflang="x-default"><link data-rh="true" rel="preconnect" href="https://Q23Y5RN3UQ-dsn.algolia.net" crossorigin="anonymous"><link data-rh="true" rel="alternate" type="text/markdown" href="/math-json.md"><script data-rh="true" type="application/ld+json">{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"MathJSON Format","item":"https://mathlive.io/math-json/"}]}</script><link rel="search" type="application/opensearchdescription+xml" title="MathLive" href="/opensearch.xml">
<link rel="stylesheet" src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.11/codemirror.min.css">
<script>!function(){var e,t;window.moduleMap||(window.moduleMap={}),window.moduleMap={...window.moduleMap,mathlive:"https://esm.run/mathlive","compute-engine":"https://esm.run/@cortex-js/compute-engine","@cortex-js/compute-engine":"https://esm.run/@cortex-js/compute-engine"},(e=["https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.16/codemirror.min.js","https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.16/mode/javascript/javascript.min.js","https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.16/mode/xml/xml.min.js","https://unpkg.com/@cortex-js/compute-engine","https://cdn.jsdelivr.net/npm/mathlive","https://cdn.jsdelivr.net/npm/@ui-js/code-playground@1.13.2/dist/code-playground.min.js@module"]).forEach((o,n)=>{const m=o.endsWith("@module"),c="script"+function(e,t=0){let o=3735928559^t,n=1103547991^t;for(let t=0;t<e.length;t++){const m=e.charCodeAt(t);o=Math.imul(o^m,2654435761),n=Math.imul(n^m,1597334677)}return o=Math.imul(o^o>>>16,2246822507),o^=Math.imul(n^n>>>13,3266489909),n=Math.imul(n^n>>>16,2246822507),n^=Math.imul(o^o>>>13,3266489909),4294967296*(2097151&n)+(o>>>0)}(o=o.replace("@module","")).toString(36);if(document.getElementById(c))return;const d=document.createElement("script");m&&(d.type="module"),d.id=c,d.src=o,d.async=!1,t&&n===e.length-1&&(d.onload=t),document.head.appendChild(d)})}()</script>
<link rel="preconnect" href="https://rsms.me/">
<link rel="stylesheet" href="https://rsms.me/inter/inter.css" media="print" onload="this.media='all'">
<link rel="preload" as="font" type="font/woff2" href="/fonts/berkeley-mono/BerkeleyMono-Regular.woff2" crossorigin="anonymous">
<link rel="preload" as="font" type="font/woff2" href="/fonts/berkeley-mono/BerkeleyMono-Bold.woff2" crossorigin="anonymous">
<link rel="preload" as="font" type="font/woff2" href="https://cdn.jsdelivr.net/npm/mathlive/fonts/KaTeX_Main-Regular.woff2" crossorigin="anonymous">
<link rel="preload" as="font" type="font/woff2" href="https://cdn.jsdelivr.net/npm/mathlive/fonts/KaTeX_Math-Italic.woff2" crossorigin="anonymous">
<link rel="preload" as="font" type="font/woff2" href="https://cdn.jsdelivr.net/npm/mathlive/fonts/KaTeX_AMS-Regular.woff2" crossorigin="anonymous">
<link rel="preload" as="font" type="font/woff2" href="https://cdn.jsdelivr.net/npm/mathlive/fonts/KaTeX_Size1-Regular.woff2" crossorigin="anonymous">
<link rel="preload" as="image" href="/img/hand-slugs.jpg" fetchpriority="high">
<link rel="preload" as="image" href="/img/hand-gears.jpg" fetchpriority="high">
<link rel="preload" as="image" href="/img/hand-cube2.jpg" fetchpriority="high"><link rel="stylesheet" href="/assets/css/styles.a0d89006.css">
<script src="/assets/js/runtime~main.a471b80e.js" defer="defer"></script>
<script src="/assets/js/main.1cdcd424.js" defer="defer"></script>
</head>
<body>
<svg style="display: none;"><defs>
<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
</defs></svg>
<script>document.documentElement.setAttribute("data-theme",window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"),document.documentElement.setAttribute("data-theme-choice","system"),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><link rel="preload" as="image" href="/img/logo.webp"><div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><div class="shared-header"><nav aria-label="Main" class="theme-layout-navbar navbar navbar--fixed-top"><div class="navbar__inner"><div class="theme-layout-navbar-left navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/logo.webp" alt="MathLive Logo" class="themedComponent_mlkZ themedComponent--light_NVdE" height="42" width="42"><img src="/img/logo.webp" alt="MathLive Logo" class="themedComponent_mlkZ themedComponent--dark_xIcU" height="42" width="42"></div><b class="navbar__title text--truncate">MathLive</b></a><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/mathfield/">Mathfield</a><a class="navbar__item navbar__link" href="/compute-engine/">Compute Engine</a><a href="https://epsil.dev" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">Epsil<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></div><div class="theme-layout-navbar-right navbar__items navbar__items--right"><a href="https://github.com/cortex-js" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link" icon="github">GitHub<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a><div class="navbarSearchContainer_Bca1"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search (Meta+k)" aria-keyshortcuts="Meta+k"><span class="DocSearch-Button-Container"><svg width="20" height="20" class="DocSearch-Search-Icon" viewBox="0 0 24 24" aria-hidden="true"><circle cx="11" cy="11" r="8" stroke="currentColor" fill="none" stroke-width="1.4"></circle><path d="m21 21-4.3-4.3" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"></span></button></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav></div><div id="__docusaurus_skipToContent_fallback" class="theme-layout-main main-wrapper mainWrapper_z2l0"><div class="docsWrapper_hBAB"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docRoot_UBD9"><aside class="theme-doc-sidebar-container docSidebarContainer_YfHR"><div class="sidebarViewport_aRkj"><div class="sidebar_njMd"><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="categoryLink_byQd menu__link menu__link--sublist menu__link--sublist-caret" role="button" aria-expanded="false" href="/mathfield/"><span class="categoryLinkLabel_W154">Mathfield</span></a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="categoryLink_byQd menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" role="button" aria-expanded="true" href="/compute-engine/"><span class="categoryLinkLabel_W154">Compute Engine</span></a></div><ul class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item compass-icon"><a class="menu__link" tabindex="0" href="/compute-engine/"><span class="linkLabel_WmDU">Introduction</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item flask-icon"><a class="menu__link" tabindex="0" href="/compute-engine/demo/"><span class="linkLabel_WmDU">Demo</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2"><hr></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item changelog-icon"><a class="menu__link" tabindex="0" href="/compute-engine/changelog/"><span class="linkLabel_WmDU">Changelog</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2"><hr></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item guide-icon"><a class="menu__link" tabindex="0" href="/compute-engine/guides/expressions/"><span class="linkLabel_WmDU">Expressions</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item guide-icon"><a class="menu__link" tabindex="0" href="/compute-engine/guides/evaluate/"><span class="linkLabel_WmDU">Evaluation of Expressions</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item guide-icon"><a class="menu__link" tabindex="0" href="/compute-engine/guides/symbolic-computing/"><span class="linkLabel_WmDU">Symbolic Computing</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item guide-icon"><a class="menu__link" tabindex="0" href="/compute-engine/guides/numeric-evaluation/"><span class="linkLabel_WmDU">Numeric Evaluation</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item guide-icon"><a class="menu__link" tabindex="0" href="/compute-engine/guides/canonical-form/"><span class="linkLabel_WmDU">Canonical Form</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item guide-icon"><a class="menu__link" tabindex="0" href="/compute-engine/guides/symbols/"><span class="linkLabel_WmDU">Symbols</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item guide-icon"><a class="menu__link" tabindex="0" href="/compute-engine/guides/augmenting/"><span class="linkLabel_WmDU">Custom Functions and Symbols</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item guide-icon"><a class="menu__link" tabindex="0" href="/compute-engine/guides/latex-syntax/"><span class="linkLabel_WmDU">LaTeX Syntax</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item guide-icon"><a class="menu__link" tabindex="0" href="/compute-engine/guides/types/"><span class="linkLabel_WmDU">Types</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item guide-icon"><a class="menu__link" tabindex="0" href="/compute-engine/guides/units/"><span class="linkLabel_WmDU">Units and Quantities</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item guide-icon"><a class="menu__link" tabindex="0" href="/compute-engine/guides/simplify/"><span class="linkLabel_WmDU">Simplify</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item guide-icon"><a class="menu__link" tabindex="0" href="/compute-engine/guides/compiling/"><span class="linkLabel_WmDU">Compiling Expressions</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item guide-icon"><a class="menu__link" tabindex="0" href="/compute-engine/guides/python-target/"><span class="linkLabel_WmDU">Python/NumPy Target</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item guide-icon"><a class="menu__link" tabindex="0" href="/compute-engine/guides/assumptions/"><span class="linkLabel_WmDU">Assumptions</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item guide-icon"><a class="menu__link" tabindex="0" href="/compute-engine/guides/patterns-and-rules/"><span class="linkLabel_WmDU">Patterns and Rules</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item guide-icon"><a class="menu__link" tabindex="0" href="/compute-engine/guides/identities/"><span class="linkLabel_WmDU">Extended Rules — The Identities Library</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item guide-icon"><a class="menu__link" tabindex="0" href="/compute-engine/guides/logic/"><span class="linkLabel_WmDU">Logic and First-Order Logic</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item guide-icon"><a class="menu__link" tabindex="0" href="/compute-engine/guides/linear-algebra/"><span class="linkLabel_WmDU">Linear Algebra</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2"><hr></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item sdk-icon"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/math-json/"><span class="linkLabel_WmDU">MathJSON Format</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item sdk-icon"><a class="menu__link" tabindex="0" href="/compute-engine/api/"><span class="linkLabel_WmDU">API Reference</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2"><hr></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item compass-icon"><a class="menu__link" tabindex="0" href="/compute-engine/standard-library/"><span class="linkLabel_WmDU">MathJSON Standard Library</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item reference-icon"><a class="menu__link" tabindex="0" href="/compute-engine/reference/arithmetic/"><span class="linkLabel_WmDU">Arithmetic</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item reference-icon"><a class="menu__link" tabindex="0" href="/compute-engine/reference/calculus/"><span class="linkLabel_WmDU">Calculus</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item reference-icon"><a class="menu__link" tabindex="0" href="/compute-engine/reference/collections/"><span class="linkLabel_WmDU">Collections</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item reference-icon"><a class="menu__link" tabindex="0" href="/compute-engine/reference/colors/"><span class="linkLabel_WmDU">Colors</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item reference-icon"><a class="menu__link" tabindex="0" href="/compute-engine/reference/complex/"><span class="linkLabel_WmDU">Complex</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item reference-icon"><a class="menu__link" tabindex="0" href="/compute-engine/reference/control-structures/"><span class="linkLabel_WmDU">Control Structures</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item reference-icon"><a class="menu__link" tabindex="0" href="/compute-engine/reference/core/"><span class="linkLabel_WmDU">Core</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item reference-icon"><a class="menu__link" tabindex="0" href="/compute-engine/reference/functions/"><span class="linkLabel_WmDU">Functions</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item reference-icon"><a class="menu__link" tabindex="0" href="/compute-engine/reference/linear-algebra/"><span class="linkLabel_WmDU">Linear Algebra</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item reference-icon"><a class="menu__link" tabindex="0" href="/compute-engine/reference/logic/"><span class="linkLabel_WmDU">Logic</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item reference-icon"><a class="menu__link" tabindex="0" href="/compute-engine/reference/sets/"><span class="linkLabel_WmDU">Sets</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item reference-icon"><a class="menu__link" tabindex="0" href="/compute-engine/reference/special-functions/"><span class="linkLabel_WmDU">Special Functions</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item reference-icon"><a class="menu__link" tabindex="0" href="/compute-engine/reference/statistics/"><span class="linkLabel_WmDU">Statistics</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item reference-icon"><a class="menu__link" tabindex="0" href="/compute-engine/reference/combinatorics/"><span class="linkLabel_WmDU">Combinatorics</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item reference-icon"><a class="menu__link" tabindex="0" href="/compute-engine/reference/number-theory/"><span class="linkLabel_WmDU">Number Theory</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item reference-icon"><a class="menu__link" tabindex="0" href="/compute-engine/reference/strings/"><span class="linkLabel_WmDU">Strings and Text</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item reference-icon"><a class="menu__link" tabindex="0" href="/compute-engine/reference/trigonometry/"><span class="linkLabel_WmDU">Trigonometry</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item reference-icon"><a class="menu__link" tabindex="0" href="/compute-engine/reference/units/"><span class="linkLabel_WmDU">Units and Quantities</span></a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="categoryLink_byQd menu__link"><span class="categoryLinkLabel_W154">Tutorials</span></a></div><ul class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item tutorial-icon"><a class="menu__link" tabindex="0" href="/tutorials/simple-quiz/"><span class="linkLabel_WmDU">Simple Quiz</span></a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="categoryLink_byQd menu__link menu__link--sublist menu__link--sublist-caret" role="button" aria-expanded="false" href="/about/"><span class="categoryLinkLabel_W154">Additional Resources</span></a></div></li></ul></nav><button type="button" title="Collapse sidebar" aria-label="Collapse sidebar" class="button button--secondary button--outline collapseSidebarButton_PEFL"><svg width="20" height="20" aria-hidden="true" class="collapseSidebarButtonIcon_kv0_"><g fill="#7a7a7a"><path d="M9.992 10.023c0 .2-.062.399-.172.547l-4.996 7.492a.982.982 0 01-.828.454H1c-.55 0-1-.453-1-1 0-.2.059-.403.168-.551l4.629-6.942L.168 3.078A.939.939 0 010 2.528c0-.548.45-.997 1-.997h2.996c.352 0 .649.18.828.45L9.82 9.472c.11.148.172.347.172.55zm0 0"></path><path d="M19.98 10.023c0 .2-.058.399-.168.547l-4.996 7.492a.987.987 0 01-.828.454h-3c-.547 0-.996-.453-.996-1 0-.2.059-.403.168-.551l4.625-6.942-4.625-6.945a.939.939 0 01-.168-.55 1 1 0 01.996-.997h3c.348 0 .649.18.828.45l4.996 7.492c.11.148.168.347.168.55zm0 0"></path></g></svg></button></div></div></aside><main class="docMainContainer_TBSr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_YNFT"><path d="M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z" fill="currentColor"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">Compute Engine</span></li><li class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link">MathJSON Format</span></li></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><div class="heroText_Kqfb"><header><h1>MathJSON</h1></header></div><div class="heroContainer_TJ2O" style="--container-height:800px;--hero-image:url(/img/hand-cube2.jpg)"><div class="heroImage_PmN2"></div></div>
<div class="intro_b9yo"><p>A lightweight data interchange format for mathematical notation.</p></div>
<div class="symbols-table"><table><thead><tr><th style="text-align:left">Math</th><th style="text-align:left">MathJSON</th></tr></thead><tbody><tr><td style="text-align:left"><code class="language-math math-inline">\displaystyle\frac{n}{1+n}</code></td><td style="text-align:left"><code>["Divide", "n", ["Add", 1, "n"]]</code></td></tr><tr><td style="text-align:left"><code class="language-math math-inline">\sin^{-1}^\prime(x)</code></td><td style="text-align:left"><code>["Apply", ["Derivative", ["InverseFunction", "Sin"]], "x"]</code></td></tr></tbody></table></div>
<p>MathJSON is built on the <a href="https://www.json.org/" target="_blank" rel="noopener noreferrer" class="">JSON format</a>. Its focus is on
interoperability between software programs to facilitate the exchange of
mathematical data and the building of scientific software through the
integration of software components communicating with a common format.</p>
<p>It is human-readable, while being easy for machines to generate and parse. It is
simple enough that it can be generated, consumed and manipulated using any
programming languages.</p>
<p>MathJSON can be transformed from (parsing) and to (serialization) other formats.</p>
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>Demo</div><div class="admonitionContent_BuS1"><p>Type an expression in the mathfield below to see its MathJSON representation.</p><math-field style="width:100%;border-radius:8px;padding:8px;margin-bottom:1em">e^{i\pi}+1=0</math-field><div class="console_pCP6"><span class="sep_A8lW">{}</span></div></div></div>
<p>The <strong>Compute Engine</strong> library provides an implementation in
JavaScript/TypeScript of utilities that parse LaTeX to MathJSON, serialize
MathJSON to LaTeX, and provide a collection of functions for symbolic
manipulation and numeric evaluations of MathJSON expressions.</p>
<div class="readMore_KWn8"><a href="/compute-engine/demo/"><p>Try a demo of the <strong>Compute Engine</strong><svg class="icon_qj0s chevronRightBold_bbMj"><use xlink:href="/icons.svg#chevron-right-bold"></use></svg></p></a></div>
<div class="readMore_KWn8"><a href="/compute-engine/guides/latex-syntax/"><p>Read more about the <strong>Compute Engine</strong> LaTeX syntax parsing and
serializing<svg class="icon_qj0s chevronRightBold_bbMj"><use xlink:href="/icons.svg#chevron-right-bold"></use></svg></p></a></div>
<p>Mathematical notation is used in a broad array of fields, from elementary school
arithmetic, engineering, applied mathematics to physics and more. New notations
are invented regularly and MathJSON endeavors to be flexible and extensible to
account for those notations.</p>
<p>The Compute Engine includes a standard library of functions and symbols which
can be extended with custom libraries.</p>
<div class="readMore_KWn8"><a href="/compute-engine/standard-library/"><p>Read more about the <strong>MathJSON Standard Library</strong><svg class="icon_qj0s chevronRightBold_bbMj"><use xlink:href="/icons.svg#chevron-right-bold"></use></svg></p></a></div>
<p>MathJSON is not intended to be suitable as a visual representation of arbitrary
mathematical notations, and as such is not a replacement for LaTeX or MathML.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="structure-of-a-mathjson-expression">Structure of a MathJSON Expression<a href="#structure-of-a-mathjson-expression" class="hash-link" aria-label="Direct link to Structure of a MathJSON Expression" title="Direct link to Structure of a MathJSON Expression" translate="no"></a></h2>
<p>A MathJSON expression is a combination of <strong>numbers</strong>, <strong>symbols</strong>, <strong>strings</strong>,
<strong>functions</strong>.</p>
<p><strong>Number</strong></p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_qGQc thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_p187"><div class="token-line" style="color:var(--console-color)"><span class="token number" style="color:var(--base-09)">3.14</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token number" style="color:var(--base-09)">314e-2</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token punctuation" style="color:var(--base-06)">{</span><span class="token property" style="color:var(--base-0c)">"num"</span><span class="token operator" style="color:var(--base-06)">:</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"3.14159265358979323846264338327950288419716939937510"</span><span class="token punctuation" style="color:var(--base-06)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token punctuation" style="color:var(--base-06)">{</span><span class="token property" style="color:var(--base-0c)">"num"</span><span class="token operator" style="color:var(--base-06)">:</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"-Infinity"</span><span class="token punctuation" style="color:var(--base-06)">}</span><br></div></code></pre></div></div>
<p><strong>Symbol</strong></p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_qGQc thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_p187"><div class="token-line" style="color:var(--console-color)"><span class="token string" style="color:var(--base-0b)">"x"</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token string" style="color:var(--base-0b)">"Pi"</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token string" style="color:var(--base-0b)">"`🍎`"</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token punctuation" style="color:var(--base-06)">{</span><span class="token property" style="color:var(--base-0c)">"sym"</span><span class="token operator" style="color:var(--base-06)">:</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"半径"</span><span class="token punctuation" style="color:var(--base-06)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token punctuation" style="color:var(--base-06)">{</span><span class="token property" style="color:var(--base-0c)">"sym"</span><span class="token operator" style="color:var(--base-06)">:</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"Pi"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token property" style="color:var(--base-0c)">"wikidata"</span><span class="token operator" style="color:var(--base-06)">:</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"Q167"</span><span class="token punctuation" style="color:var(--base-06)">}</span><br></div></code></pre></div></div>
<p><strong>String</strong></p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_qGQc thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_p187"><div class="token-line" style="color:var(--console-color)"><span class="token string" style="color:var(--base-0b)">"'Diameter of a circle'"</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token punctuation" style="color:var(--base-06)">{</span><span class="token property" style="color:var(--base-0c)">"str"</span><span class="token operator" style="color:var(--base-06)">:</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"Srinivasa Ramanujan"</span><span class="token punctuation" style="color:var(--base-06)">}</span><br></div></code></pre></div></div>
<p><strong>Function</strong></p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_qGQc thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_p187"><div class="token-line" style="color:var(--console-color)"><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Add"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--base-09)">1</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"x"</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token punctuation" style="color:var(--base-06)">{</span><span class="token property" style="color:var(--base-0c)">"fn"</span><span class="token operator" style="color:var(--base-06)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Add"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">{</span><span class="token property" style="color:var(--base-0c)">"num"</span><span class="token operator" style="color:var(--base-06)">:</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"1"</span><span class="token punctuation" style="color:var(--base-06)">}</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">{</span><span class="token property" style="color:var(--base-0c)">"sym"</span><span class="token operator" style="color:var(--base-06)">:</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"x"</span><span class="token punctuation" style="color:var(--base-06)">}</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">}</span><br></div></code></pre></div></div>
<p><strong>Numbers</strong>, <strong>symbols</strong>, <strong>strings</strong> and <strong>functions</strong> are expressed either as
object literals with a <code>"num"</code> <code>"str"</code> <code>"sym"</code> or <code>"fn"</code> key, respectively, or
using a shorthand notation as a JSON number, string or array.</p>
<p>The shorthand notation is more concise and easier to read, but it cannot include
metadata properties.</p>
<div class="theme-admonition theme-admonition-note admonition_xJq3 alert alert--secondary"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>S-expressions</div><div class="admonitionContent_BuS1"><p>MathJSON shares similarities with <strong>S-expressions</strong> (symbolic expressions) used
in languages like <strong>Lisp</strong> and <strong>Scheme</strong>. Both represent data and code using
nested lists, where the first element typically indicates the operator or
function and the following elements are its arguments. For example, the
MathJSON expression <code>["Add", 1, "x"]</code> is analogous to the Lisp expression
<code>(+ 1 x)</code>. This structure provides a natural and extensible way to represent
mathematical expressions as data.</p></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="numbers">Numbers<a href="#numbers" class="hash-link" aria-label="Direct link to Numbers" title="Direct link to Numbers" translate="no"></a></h2>
<p>A MathJSON <strong>number</strong> is either:</p>
<ul>
<li class="">an object literal with a <code>"num"</code> key</li>
<li class="">a JSON number</li>
<li class="">a JSON string literal. Using a string is useful to represent numbers with a
higher precision or greater range than JSON numbers.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="numbers-as-object-literals">Numbers as Object Literals<a href="#numbers-as-object-literals" class="hash-link" aria-label="Direct link to Numbers as Object Literals" title="Direct link to Numbers as Object Literals" translate="no"></a></h3>
<p><strong>Numbers</strong> may be represented as an object literal with a <code>"num"</code> key. The
value of the key is a <strong>string</strong> representation of the number.</p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_qGQc thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_p187"><div class="token-line" style="color:var(--console-color)"><span class="token punctuation" style="color:var(--base-06)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"> </span><span class="token property" style="color:var(--base-0c)">"num"</span><span class="token operator" style="color:var(--base-06)">:</span><span class="token plain"> <string></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token punctuation" style="color:var(--base-06)">}</span><br></div></code></pre></div></div>
<p>The string representing a number follows the
<a href="https://tools.ietf.org/html/rfc7159#section-6" target="_blank" rel="noopener noreferrer" class="">JSON syntax for number</a>, with
the following differences:</p>
<ul>
<li class="">The range or precision of MathJSON numbers may be greater than the range and
precision supported by <a href="https://en.wikipedia.org/wiki/IEEE_754" target="_blank" rel="noopener noreferrer" class="">IEEE 754</a>
64-bit float.</li>
</ul>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_qGQc thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_p187"><div class="token-line" style="color:var(--console-color)"><span class="token punctuation" style="color:var(--base-06)">{</span><span class="token plain"> </span><span class="token property" style="color:var(--base-0c)">"num"</span><span class="token operator" style="color:var(--base-06)">:</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"1.1238976755823478721365872345683247563245876e-4567"</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">}</span><br></div></code></pre></div></div>
<ul>
<li class="">The string values <code>"NaN"</code> <code>"+Infinity"</code> and <code>"-Infinity"</code> are used to
represent respectively an undefined result as per
<a href="https://en.wikipedia.org/wiki/IEEE_754" target="_blank" rel="noopener noreferrer" class="">IEEE 754</a>, <code class="language-math math-inline">+\infty</code>, and
<code class="language-math math-inline">-\infty</code>.</li>
</ul>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_qGQc thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_p187"><div class="token-line" style="color:var(--console-color)"><span class="token punctuation" style="color:var(--base-06)">{</span><span class="token plain"> </span><span class="token property" style="color:var(--base-0c)">"num"</span><span class="token operator" style="color:var(--base-06)">:</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"+Infinity"</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">}</span><br></div></code></pre></div></div>
<ul>
<li class="">If the string includes the pattern <code>/\([0-9]+\)/</code>, that is a series of one or
more digits enclosed in parentheses, that pattern is interpreted as
repeating digits.</li>
</ul>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_qGQc thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_p187"><div class="token-line" style="color:var(--console-color)"><span class="token punctuation" style="color:var(--base-06)">{</span><span class="token plain"> </span><span class="token property" style="color:var(--base-0c)">"num"</span><span class="token operator" style="color:var(--base-06)">:</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"1.(3)"</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token punctuation" style="color:var(--base-06)">{</span><span class="token plain"> </span><span class="token property" style="color:var(--base-0c)">"num"</span><span class="token operator" style="color:var(--base-06)">:</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"0.(142857)"</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token punctuation" style="color:var(--base-06)">{</span><span class="token plain"> </span><span class="token property" style="color:var(--base-0c)">"num"</span><span class="token operator" style="color:var(--base-06)">:</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"0.(142857)e7"</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">}</span><br></div></code></pre></div></div>
<p>A repeating-decimal number boxes to the exact <code>["Rational", …]</code> it represents
(for example <code>{ "num": "0.(3)" }</code> boxes to <code>["Rational", 1, 3]</code>), rather than
a truncated decimal float.</p>
<ul>
<li class="">The following characters in a string representing a number are ignored:</li>
</ul>
<div class="symbols-table first-column-header" style="--first-col-width:9ch"><table><thead><tr><th style="text-align:left"></th><th style="text-align:left"></th></tr></thead><tbody><tr><td style="text-align:left"><strong>U+0009</strong></td><td style="text-align:left"><strong>TAB</strong></td></tr><tr><td style="text-align:left"><strong>U+000A</strong></td><td style="text-align:left"><strong>LINE FEED</strong></td></tr><tr><td style="text-align:left"><strong>U+000B</strong></td><td style="text-align:left"><strong>VERTICAL TAB</strong></td></tr><tr><td style="text-align:left"><strong>U+000C</strong></td><td style="text-align:left"><strong>FORM FEED</strong></td></tr><tr><td style="text-align:left"><strong>U+000D</strong></td><td style="text-align:left"><strong>CARRIAGE RETURN</strong></td></tr><tr><td style="text-align:left"><strong>U+0020</strong></td><td style="text-align:left"><strong>SPACE</strong></td></tr><tr><td style="text-align:left"><strong>U+00A0</strong></td><td style="text-align:left"><strong>UNBREAKABLE SPACE</strong></td></tr></tbody></table></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="numbers-as-number-literals">Numbers as Number Literals<a href="#numbers-as-number-literals" class="hash-link" aria-label="Direct link to Numbers as Number Literals" title="Direct link to Numbers as Number Literals" translate="no"></a></h3>
<p>When a <strong>number</strong> is compatible with the JSON representation of numbers and
has no metadata, a JSON number literal may be used.</p>
<p>Specifically:</p>
<ul>
<li class="">the number fits in a 64-bit binary floating point, as per <strong>IEEE 754-2008</strong>, with a
53-bit significand (about 15 digits of precision) and 11-bit exponent.
If negative, its range is from <code class="language-math math-inline">-1.797693134862315 \cdot 10^{+308}</code> to <code class="language-math math-inline">-2.225073858507201\cdot 10^{-308}</code>
and if positive from <code class="language-math math-inline">2.225073858507201\cdot 10^{-308}</code> to <code class="language-math math-inline">1.797693134862315\cdot 10^{+308}</code></li>
<li class="">the number is finite: it is not <code>+Infinity</code> <code>-Infinity</code> or <code>NaN</code>.</li>
</ul>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_qGQc thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_p187"><div class="token-line" style="color:var(--console-color)"><span class="token number" style="color:var(--base-09)">0</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token number" style="color:var(--base-09)">-234.534e-46</span><br></div></code></pre></div></div>
<p>The numeric values below may not be represented as JSON number literals:</p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_qGQc thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_p187"><div class="token-line" style="color:var(--console-color)"><span class="token comment" style="color:var(--base-05)">// Exponent out of bounds</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token punctuation" style="color:var(--base-06)">{</span><span class="token plain"> </span><span class="token property" style="color:var(--base-0c)">"num"</span><span class="token operator" style="color:var(--base-06)">:</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"5.78e400"</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token comment" style="color:var(--base-05)">// Too many digits</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token punctuation" style="color:var(--base-06)">{</span><span class="token plain"> </span><span class="token property" style="color:var(--base-0c)">"num"</span><span class="token operator" style="color:var(--base-06)">:</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"3.14159265358979323846264338327950288419716"</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token comment" style="color:var(--base-05)">// Non-finite numeric value</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token punctuation" style="color:var(--base-06)">{</span><span class="token plain"> </span><span class="token property" style="color:var(--base-0c)">"num"</span><span class="token operator" style="color:var(--base-06)">:</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"-Infinity"</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">}</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="numbers-as-string-literals">Numbers as String Literals<a href="#numbers-as-string-literals" class="hash-link" aria-label="Direct link to Numbers as String Literals" title="Direct link to Numbers as String Literals" translate="no"></a></h3>
<p>An alternate representation of a <strong>number</strong> with no extra metadata is as a
string matching the Regex pattern <code>/^[+-]?(0|[1-9][0-9]*)(\.[0-9]+)?(\([0-9]+\))?([eE][+-]?[0-9]+)?$/</code>.</p>
<p>This allows for a shorthand representation of numbers with a higher precision or
greater range than JSON numbers.</p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_qGQc thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_p187"><div class="token-line" style="color:var(--console-color)"><span class="token string" style="color:var(--base-0b)">"3.14159265358979323846264338327950288419716"</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token string" style="color:var(--base-0b)">"-1.7976931348623157e+308"</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token string" style="color:var(--base-0b)">"5.7(317)e-2"</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="strings">Strings<a href="#strings" class="hash-link" aria-label="Direct link to Strings" title="Direct link to Strings" translate="no"></a></h2>
<p>A MathJSON <strong>string</strong> is either:</p>
<ul>
<li class="">an object literal with a <code>"str"</code> key</li>
<li class="">a <a href="https://tools.ietf.org/html/rfc7159#section-7" target="_blank" rel="noopener noreferrer" class="">JSON string</a> that starts and
ends with <strong>U+0027 <code>'</code> APOSTROPHE</strong>.</li>
<li class="">a JSON string that is not a symbol shorthand or a number shorthand.</li>
</ul>
<p>That is:</p>
<ul>
<li class=""><code>"Hello World"</code> is a string (it includes a space character which is not allowed in symbols)</li>
<li class=""><code>"HelloWorld"</code> is a symbol (it does not include a space character)</li>
<li class=""><code>"3.14"</code> is a number (it is a valid JSON number)</li>
<li class=""><code>"'3.14'"</code> is a string (it is wrapped with single quotes)</li>
<li class=""><code>"🍎"</code> is a string</li>
<li class=""><code>"`🍎`"</code> is a symbol shorthand (it is wrapped with backticks)</li>
</ul>
<p>MathJSON strings must be <a href="https://tc39.es/proposal-well-formed-stringify/" target="_blank" rel="noopener noreferrer" class="">well formed JSON strings</a>, which means they must escape surrogate codepoints <code>U+D800</code> to <code>U+DFFF</code>, control characters <code>U+0000</code> to <code>U+001F</code>, and the characters <strong>U+0022 <code>'</code> QUOTATION MARK</strong> and <strong>U+005C <code>\</code> REVERSE SOLIDUS</strong> (backslash).</p>
<div class="symbols-table first-column-header" style="--first-col-width:9ch"><table><thead><tr><th style="text-align:left">Codepoint</th><th style="text-align:left">Name</th><th style="text-align:left">Escape Sequence</th></tr></thead><tbody><tr><td style="text-align:left"><strong>U+0000</strong> to <strong>U+001F</strong></td><td style="text-align:left"></td><td style="text-align:left"><code>\u0000</code> to <code>\u001f</code></td></tr><tr><td style="text-align:left"><strong>U+0008</strong></td><td style="text-align:left"><strong>BACKSPACE</strong></td><td style="text-align:left"><code>\b</code> or <code>\u0008</code></td></tr><tr><td style="text-align:left"><strong>U+0009</strong></td><td style="text-align:left"><strong>TAB</strong></td><td style="text-align:left"><code>\t</code> or <code>\u0009</code></td></tr><tr><td style="text-align:left"><strong>U+000A</strong></td><td style="text-align:left"><strong>LINE FEED</strong></td><td style="text-align:left"><code>\n</code> or <code>\u000a</code></td></tr><tr><td style="text-align:left"><strong>U+000C</strong></td><td style="text-align:left"><strong>FORM FEED</strong></td><td style="text-align:left"><code>\f</code> or <code>\u000c</code></td></tr><tr><td style="text-align:left"><strong>U+000D</strong></td><td style="text-align:left"><strong>CARRIAGE RETURN</strong></td><td style="text-align:left"><code>\r</code> or <code>\u000d</code></td></tr><tr><td style="text-align:left"><strong>U+0022</strong></td><td style="text-align:left"><strong>QUOTATION MARK</strong></td><td style="text-align:left"><code>\"</code> or <code>\u0022</code></td></tr><tr><td style="text-align:left"><strong>U+005C</strong></td><td style="text-align:left"><strong>REVERSE SOLIDUS</strong> (backslash)</td><td style="text-align:left"><code>\\</code> or <code>\u005c</code></td></tr><tr><td style="text-align:left"><strong>U+D800</strong> to <strong>U+DFFF</strong></td><td style="text-align:left"><strong>SURROGATE CODEPOINTS</strong></td><td style="text-align:left"><code>\uD800</code> to <code>\uDFFF</code></td></tr></tbody></table></div>
<p>Any character may be escaped using the <code>\u</code> escape sequence, which is a
Unicode escape sequence of the form <code>\uXXXX</code> where <code>XXXX</code> is a four-digit hexadecimal codepoint. The hexadecimal letters <code>A</code> though <code>F</code> can be upper or lower case.</p>
<p>To escape a character that is not in the Basic Multilingual Plane (BMP),
the character is represented as a 12-character sequence, encoding the UTF-16
surrogate pair.</p>
<p>For example, the character <strong>U+1F34E 🍎 RED APPLE</strong> is represented as the sequence <code>\uD83C\uDF4E</code>.</p>
<p>The encoding of the string follows the encoding of the JSON payload: UTF-8,
UTF-16LE, UTF-16BE, etc...</p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_qGQc thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_p187"><div class="token-line" style="color:var(--console-color)"><span class="token string" style="color:var(--base-0b)">"'Alan Turing'"</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="functions">Functions<a href="#functions" class="hash-link" aria-label="Direct link to Functions" title="Direct link to Functions" translate="no"></a></h2>
<p>A MathJSON function expression is either:</p>
<ul>
<li class="">an object literal with a <code>"fn"</code> key.</li>
<li class="">a JSON array</li>
</ul>
<p>Function expressions in the context of MathJSON may be used to represent
mathematical functions but are more generally used to represent the application
of a function to some arguments.</p>
<p>The function expression <code>["Add", 2, 3]</code> applies the function named <code>Add</code> to the
arguments <code>2</code> and <code>3</code>.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="functions-as-object-literal">Functions as Object Literal<a href="#functions-as-object-literal" class="hash-link" aria-label="Direct link to Functions as Object Literal" title="Direct link to Functions as Object Literal" translate="no"></a></h3>
<p>The default representation of <strong>function expressions</strong> is an object literal with
a <code>"fn"</code> key. The value of the <code>fn</code> key is an array representing the function
operator (its name) and its arguments (its operands).</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_qGQc thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_p187"><div class="token-line" style="color:var(--console-color)"><span class="token punctuation" style="color:var(--base-06)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"> </span><span class="token string-property property" style="color:var(--base-0c)">"fn"</span><span class="token operator" style="color:var(--base-06)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token plain">Operator</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token operator" style="color:var(--base-06)">...</span><span class="token plain">Operands</span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token punctuation" style="color:var(--base-06)">}</span><br></div></code></pre></div></div>
<p>For example:</p>
<ul>
<li class=""><code class="language-math math-inline">2+x</code>: <code>{ "fn": ["Add", 2, "x"] }</code></li>
<li class=""><code class="language-math math-inline">\sin(2x+\pi)</code>: <code>{ "fn": ["Sin", ["Add", ["Multiply", 2, "x"], "Pi"]] }</code></li>
<li class=""><code class="language-math math-inline">x^2-3x+5</code>: <code>{ "fn": ["Add", ["Power", "x", 2], ["Multiply", -3, "x"], 5] }</code></li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="functions-as-json-arrays">Functions as JSON Arrays<a href="#functions-as-json-arrays" class="hash-link" aria-label="Direct link to Functions as JSON Arrays" title="Direct link to Functions as JSON Arrays" translate="no"></a></h3>
<p>If a <strong>function expression</strong> has no extra metadata it may be represented as a JSON array.</p>
<p>For example these two expressions are equivalent:</p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_qGQc thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_p187"><div class="token-line" style="color:var(--console-color)"><span class="token punctuation" style="color:var(--base-06)">{</span><span class="token plain"> </span><span class="token property" style="color:var(--base-0c)">"fn"</span><span class="token operator" style="color:var(--base-06)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Cos"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Add"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"x"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--base-09)">1</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Cos"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Add"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"x"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--base-09)">1</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">]</span><br></div></code></pre></div></div>
<div class="theme-admonition theme-admonition-note admonition_xJq3 alert alert--secondary"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>note</div><div class="admonitionContent_BuS1"><p>An array representing a function must have at least one element, the operator of the
function. Therefore <code>[]</code> is not a valid expression.</p></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="function-operator">Function Operator<a href="#function-operator" class="hash-link" aria-label="Direct link to Function Operator" title="Direct link to Function Operator" translate="no"></a></h3>
<p>The <strong>operator</strong> of the function expression is the first element in the array.
Its presence is required. It indicates the <strong>name of the function</strong>: this is
what the function is about.</p>
<p>The operator is a symbol following the conventions for function names (see
below).</p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_qGQc thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_p187"><div class="token-line" style="color:var(--console-color)"><span class="token comment" style="color:var(--base-05)">// Apply the function "Sin" to the argument "x"</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Sin"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"x"</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token comment" style="color:var(--base-05)">// Apply "Cos" to a function expression</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Cos"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Divide"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"Pi"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--base-09)">2</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">]</span><br></div></code></pre></div></div>
<p>Following the operator are zero or more <strong>arguments</strong> (or <strong>operands</strong>),
which are expressions.</p>
<div class="theme-admonition theme-admonition-warning admonition_xJq3 alert alert--warning"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 16 16"><path fill-rule="evenodd" d="M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"></path></svg></span>CAUTION</div><div class="admonitionContent_BuS1"><p>The arguments of a function are expressions. To represent an
argument which is a list, use a <code>["List"]</code> expression, do not use a JSON array.</p></div></div>
<p>The expression corresponding to <code class="language-math math-inline">\sin^{-1}(x)</code> is:</p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_qGQc thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_p187"><div class="token-line" style="color:var(--console-color)"><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Apply"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"InverseFunction"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"Sin"</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"x"</span><span class="token punctuation" style="color:var(--base-06)">]</span><br></div></code></pre></div></div>
<p>The operator of this expression is <code>"Apply"</code> and its argument are the expressions
<code>["InverseFunction", "Sin"]</code> and <code>"x"</code>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="symbols">Symbols<a href="#symbols" class="hash-link" aria-label="Direct link to Symbols" title="Direct link to Symbols" translate="no"></a></h2>
<p>A MathJSON <strong>symbol</strong> is either:</p>
<ul>
<li class="">an object literal with a <code>"sym"</code> key</li>
<li class="">a JSON string</li>
</ul>
<p>Symbols are JSON strings that represent the names of symbols, variables,
constants, wildcards and functions.</p>
<p>For a JSON string literal to be interpreted as a symbol, it must either
begin and start with a <code>`</code> (<code>U+0060</code> GRAVE ACCENT) or be a
string matching the Regex pattern <code>/^[a-zA-Z_][a-zA-Z0-9_]*$/</code>.</p>
<p>Before they are used, JSON escape sequences (such as <code>\u</code> sequences, <code>\\</code>, etc.)
are decoded.</p>
<p>The symbols are then normalized to the
<a href="https://unicode.org/reports/tr15/" target="_blank" rel="noopener noreferrer" class="">Unicode Normalization Form C (NFC)</a>. They
are stored internally and compared using the Unicode NFC.</p>
<p>For example, these four object literals represent the same symbol:</p>
<ul>
<li class=""><code>{ "sym": "Å" }</code></li>
<li class=""><code>{ "sym": "A\u030a" }</code> <strong>U+0041 <code>A</code> LATIN CAPITAL LETTER</strong> + <strong>U+030A <code> ̊</code> COMBINING RING
ABOVE</strong></li>
<li class=""><code>{ "sym": "\u00c5" }</code> <strong>U+00C5 <code>Å</code> LATIN CAPITAL LETTER A WITH RING ABOVE</strong></li>
<li class=""><code>{ "sym": "\u0041\u030a" }</code> <strong>U+0041 <code>A</code> LATIN CAPITAL LETTER A</strong> + <strong>U+030A <code> ̊</code> COMBINING RING
ABOVE</strong></li>
</ul>
<p>Symbols conform to a profile of
<a href="https://unicode.org/reports/tr31/" target="_blank" rel="noopener noreferrer" class="">UAX31-R1-1</a> with the following
modifications:</p>
<ul>
<li class="">The character <strong>U+005F <code>_</code> LOW LINE</strong> is added to the <code>Start</code> character set</li>
<li class="">The characters should belong to a
<a href="https://www.unicode.org/reports/tr31/#Table_Recommended_Scripts" target="_blank" rel="noopener noreferrer" class="">recommended script</a></li>
<li class="">A symbol can be a sequence of one or more emojis. Characters that have
both the Emoji and XIDC property are only considered emojis when they are
preceded with emoji modifiers. The definition below is based on
<a href="https://unicode.org/reports/tr51/#EBNF_and_Regex" target="_blank" rel="noopener noreferrer" class="">Unicode TR51</a> but modified
to exclude invalid symbols.</li>
</ul>
<p>Symbols match either the <code>NON_EMOJI_SYMBOL</code> or the <code>EMOJI_SYMBOL</code>
regex patterns below:</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_qGQc thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_p187"><div class="token-line" style="color:var(--console-color)"><span class="token keyword" style="color:var(--base-0e)">const</span><span class="token plain"> </span><span class="token constant" style="color:var(--base-09)">NON_EMOJI_SYMBOL</span><span class="token plain"> </span><span class="token operator" style="color:var(--base-06)">=</span><span class="token plain"> </span><span class="token regex regex-delimiter" style="color:var(--base-0b)">/</span><span class="token regex regex-source language-regex anchor function" style="color:var(--base-0a)">^</span><span class="token regex regex-source language-regex char-class char-class-punctuation punctuation" style="color:var(--base-06)">[</span><span class="token regex regex-source language-regex char-class char-set class-name" style="color:var(--base-0a)">\p{XIDS}</span><span class="token regex regex-source language-regex char-class" style="color:var(--base-0b)">_</span><span class="token regex regex-source language-regex char-class char-class-punctuation punctuation" style="color:var(--base-06)">]</span><span class="token regex regex-source language-regex char-set class-name" style="color:var(--base-0a)">\p{XIDC}</span><span class="token regex regex-source language-regex quantifier number" style="color:var(--base-09)">*</span><span class="token regex regex-source language-regex anchor function" style="color:var(--base-0a)">$</span><span class="token regex regex-delimiter" style="color:var(--base-0b)">/</span><span class="token regex regex-flags" style="color:var(--base-0b)">u</span><span class="token punctuation" style="color:var(--base-06)">;</span><br></div></code></pre></div></div>
<p>(from <a href="https://unicode.org/reports/tr51/#EBNF_and_Regex" target="_blank" rel="noopener noreferrer" class="">Unicode TR51</a>)</p>
<p>or</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_qGQc thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_p187"><div class="token-line" style="color:var(--console-color)"><span class="token keyword" style="color:var(--base-0e)">const</span><span class="token plain"> </span><span class="token constant" style="color:var(--base-09)">VS16</span><span class="token plain"> </span><span class="token operator" style="color:var(--base-06)">=</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"\\u{FE0F}"</span><span class="token punctuation" style="color:var(--base-06)">;</span><span class="token plain"> </span><span class="token comment" style="color:var(--base-05)">// Variation Selector-16, forces emoji presentation</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token keyword" style="color:var(--base-0e)">const</span><span class="token plain"> </span><span class="token constant" style="color:var(--base-09)">KEYCAP</span><span class="token plain"> </span><span class="token operator" style="color:var(--base-06)">=</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"\\u{20E3}"</span><span class="token punctuation" style="color:var(--base-06)">;</span><span class="token plain"> </span><span class="token comment" style="color:var(--base-05)">// Combining Enclosing Keycap</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token keyword" style="color:var(--base-0e)">const</span><span class="token plain"> </span><span class="token constant" style="color:var(--base-09)">ZWJ</span><span class="token plain"> </span><span class="token operator" style="color:var(--base-06)">=</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"\\u{200D}"</span><span class="token punctuation" style="color:var(--base-06)">;</span><span class="token plain"> </span><span class="token comment" style="color:var(--base-05)">// Zero Width Joiner</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token keyword" style="color:var(--base-0e)">const</span><span class="token plain"> </span><span class="token constant" style="color:var(--base-09)">FLAG_SEQUENCE</span><span class="token plain"> </span><span class="token operator" style="color:var(--base-06)">=</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"\\p{RI}\\p{RI}"</span><span class="token punctuation" style="color:var(--base-06)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token keyword" style="color:var(--base-0e)">const</span><span class="token plain"> </span><span class="token constant" style="color:var(--base-09)">TAG_MOD</span><span class="token plain"> </span><span class="token operator" style="color:var(--base-06)">=</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:var(--base-0b)">`</span><span class="token template-string string" style="color:var(--base-0b)">(?:[\\u{E0020}-\\u{E007E}]+\\u{E007F})</span><span class="token template-string template-punctuation string" style="color:var(--base-0b)">`</span><span class="token punctuation" style="color:var(--base-06)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token keyword" style="color:var(--base-0e)">const</span><span class="token plain"> </span><span class="token constant" style="color:var(--base-09)">EMOJI_MOD</span><span class="token plain"> </span><span class="token operator" style="color:var(--base-06)">=</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:var(--base-0b)">`</span><span class="token template-string string" style="color:var(--base-0b)">(?:\\p{EMod}|</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:var(--base-06)">${</span><span class="token template-string interpolation constant" style="color:var(--base-09)">VS16</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:var(--base-06)">}</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:var(--base-06)">${</span><span class="token template-string interpolation constant" style="color:var(--base-09)">KEYCAP</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:var(--base-06)">}</span><span class="token template-string string" style="color:var(--base-0b)">?|</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:var(--base-06)">${</span><span class="token template-string interpolation constant" style="color:var(--base-09)">TAG_MOD</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:var(--base-06)">}</span><span class="token template-string string" style="color:var(--base-0b)">)</span><span class="token template-string template-punctuation string" style="color:var(--base-0b)">`</span><span class="token punctuation" style="color:var(--base-06)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token keyword" style="color:var(--base-0e)">const</span><span class="token plain"> </span><span class="token constant" style="color:var(--base-09)">EMOJI_NOT_SYMBOL</span><span class="token plain"> </span><span class="token operator" style="color:var(--base-06)">=</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:var(--base-0b)">`</span><span class="token template-string string" style="color:var(--base-0b)">(?:(?=\\P{XIDC})\\p{Emoji})</span><span class="token template-string template-punctuation string" style="color:var(--base-0b)">`</span><span class="token punctuation" style="color:var(--base-06)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token keyword" style="color:var(--base-0e)">const</span><span class="token plain"> </span><span class="token constant" style="color:var(--base-09)">ZWJ_ELEMENT</span><span class="token plain"> </span><span class="token operator" style="color:var(--base-06)">=</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:var(--base-0b)">`</span><span class="token template-string string" style="color:var(--base-0b)">(?:</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:var(--base-06)">${</span><span class="token template-string interpolation constant" style="color:var(--base-09)">EMOJI_NOT_SYMBOL</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:var(--base-06)">}</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:var(--base-06)">${</span><span class="token template-string interpolation constant" style="color:var(--base-09)">EMOJI_MOD</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:var(--base-06)">}</span><span class="token template-string string" style="color:var(--base-0b)">*|\\p{Emoji}</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:var(--base-06)">${</span><span class="token template-string interpolation constant" style="color:var(--base-09)">EMOJI_MOD</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:var(--base-06)">}</span><span class="token template-string string" style="color:var(--base-0b)">+|</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:var(--base-06)">${</span><span class="token template-string interpolation constant" style="color:var(--base-09)">FLAG_SEQUENCE</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:var(--base-06)">}</span><span class="token template-string string" style="color:var(--base-0b)">)</span><span class="token template-string template-punctuation string" style="color:var(--base-0b)">`</span><span class="token punctuation" style="color:var(--base-06)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token keyword" style="color:var(--base-0e)">const</span><span class="token plain"> </span><span class="token constant" style="color:var(--base-09)">POSSIBLE_EMOJI</span><span class="token plain"> </span><span class="token operator" style="color:var(--base-06)">=</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:var(--base-0b)">`</span><span class="token template-string string" style="color:var(--base-0b)">(?:</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:var(--base-06)">${</span><span class="token template-string interpolation constant" style="color:var(--base-09)">ZWJ_ELEMENT</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:var(--base-06)">}</span><span class="token template-string string" style="color:var(--base-0b)">)(</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:var(--base-06)">${</span><span class="token template-string interpolation constant" style="color:var(--base-09)">ZWJ</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:var(--base-06)">}</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:var(--base-06)">${</span><span class="token template-string interpolation constant" style="color:var(--base-09)">ZWJ_ELEMENT</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:var(--base-06)">}</span><span class="token template-string string" style="color:var(--base-0b)">)*</span><span class="token template-string template-punctuation string" style="color:var(--base-0b)">`</span><span class="token punctuation" style="color:var(--base-06)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token keyword" style="color:var(--base-0e)">const</span><span class="token plain"> </span><span class="token constant" style="color:var(--base-09)">EMOJI_SYMBOL</span><span class="token plain"> </span><span class="token operator" style="color:var(--base-06)">=</span><span class="token plain"> </span><span class="token keyword" style="color:var(--base-0e)">new</span><span class="token plain"> </span><span class="token class-name" style="color:var(--base-0a)">RegExp</span><span class="token punctuation" style="color:var(--base-06)">(</span><span class="token template-string template-punctuation string" style="color:var(--base-0b)">`</span><span class="token template-string string" style="color:var(--base-0b)">^(?:</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:var(--base-06)">${</span><span class="token template-string interpolation constant" style="color:var(--base-09)">POSSIBLE_EMOJI</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:var(--base-06)">}</span><span class="token template-string string" style="color:var(--base-0b)">)+$</span><span class="token template-string template-punctuation string" style="color:var(--base-0b)">`</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"u"</span><span class="token punctuation" style="color:var(--base-06)">)</span><span class="token punctuation" style="color:var(--base-06)">;</span><br></div></code></pre></div></div>
<p>In summary, when using Latin characters, symbols can start with a letter or
an underscore, followed by zero or more letters, digits and underscores.</p>
<p>Carefully consider when to use non-latin characters. Use non-latin characters
for whole words, for example: <code>"半径"</code> (radius), <code>"מְהִירוּת"</code> (speed), <code>"直徑"</code>
(diameter) or <code>"सतह"</code> (surface).</p>
<p>Avoid mixing Unicode characters from different scripts in the same symbols.</p>
<p>Do not include bidi markers such as <strong>U+200E <code>LTR</code></strong>* or <strong>U+200F <code>RTL</code></strong> in
symbols. LTR and RTL marks should be added as needed by the client
displaying the symbol. They should be ignored when parsing symbols.</p>
<p>Avoid visual ambiguity issues that might arise with some Unicode characters. For
example:</p>
<ul>
<li class="">prefer using <code>"gamma"</code> rather than <strong>U+0194 <code>ɣ</code> LATIN SMALL LETTER GAMMA</strong>
or <strong>U+03B3 <code>γ</code> GREEK SMALL LETTER GAMMA</strong></li>
<li class="">prefer using <code>"Sum"</code> rather than <strong>U+2211 <code>∑</code> N-ARY SUMMATION</strong>, which can
be visually confused with <strong>U+03A3 <code>Σ</code> GREEK CAPITAL LETTER SIGMA</strong>.</li>
</ul>
<hr>
<p>The following naming convention for wildcards, variables, constants and function
names are recommendations.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="wildcards-naming-convention">Wildcards Naming Convention<a href="#wildcards-naming-convention" class="hash-link" aria-label="Direct link to Wildcards Naming Convention" title="Direct link to Wildcards Naming Convention" translate="no"></a></h3>
<p>Symbols that begin with <strong>U+005F <code>_</code> LOW LINE</strong> (underscore) should be used to
denote wildcards and other placeholders.</p>
<p>For example, they may be used to denote the positional parameter in a function
expression. They may also denote placeholders and captured expression in
patterns.</p>
<div class="symbols-table first-column-header" style="--first-col-width:7ch"><table><thead><tr><th style="text-align:left">Wildcard</th><th style="text-align:left"></th></tr></thead><tbody><tr><td style="text-align:left"><code>"_"</code></td><td style="text-align:left">Wildcard for a single expression or for the first positional argument</td></tr><tr><td style="text-align:left"><code>"_1"</code></td><td style="text-align:left">Wildcard for a positional argument</td></tr><tr><td style="text-align:left"><code>"_ _"</code></td><td style="text-align:left">Wildcard for a sequence of 1 or more expression</td></tr><tr><td style="text-align:left"><code>"___"</code></td><td style="text-align:left">Wildcard for a sequence of 0 or more expression</td></tr><tr><td style="text-align:left"><code>"_a"</code></td><td style="text-align:left">Capturing an expression as a wildcard named <code>a</code></td></tr></tbody></table></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="variables-naming-convention">Variables Naming Convention<a href="#variables-naming-convention" class="hash-link" aria-label="Direct link to Variables Naming Convention" title="Direct link to Variables Naming Convention" translate="no"></a></h3>
<ul>
<li class="">
<p>If a variable is made of several words, use camelCase. For example
<code>"newDeterminant"</code></p>
</li>
<li class="">
<p>Prefer clarity over brevity and avoid obscure abbreviations.</p>
<p>Use <code>"newDeterminant"</code> rather than <code>"newDet"</code> or <code>"nDet"</code></p>
</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="constants-naming-convention">Constants Naming Convention<a href="#constants-naming-convention" class="hash-link" aria-label="Direct link to Constants Naming Convention" title="Direct link to Constants Naming Convention" translate="no"></a></h3>
<ul>
<li class="">
<p>If using latin characters, the first character of a constant should be an
uppercase letter <code>A</code>-<code>Z</code></p>
</li>
<li class="">
<p>If the name of a constant is made up of several words, use PascalCase. For example
<code>"SpeedOfLight"</code></p>
</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="function-names-naming-convention">Function Names Naming Convention<a href="#function-names-naming-convention" class="hash-link" aria-label="Direct link to Function Names Naming Convention" title="Direct link to Function Names Naming Convention" translate="no"></a></h3>
<ul>
<li class="">
<p>The name of the functions in the MathJSON Standard Library starts with an
uppercase letter <code>A</code>-<code>Z</code>. For example <code>"Sin"</code>, <code>"Reduce"</code>.</p>
</li>
<li class="">
<p>The name of your own functions can start with a lowercase or uppercase letter.</p>
</li>
<li class="">
<p>If the name of a function is made up of several words, use PascalCase or camelCase. For example
<code>"InverseFunction"</code> or <code>"inverseFunction"</code>.</p>
</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="latex-rendering-conventions">LaTeX Rendering Conventions<a href="#latex-rendering-conventions" class="hash-link" aria-label="Direct link to LaTeX Rendering Conventions" title="Direct link to LaTeX Rendering Conventions" translate="no"></a></h3>
<p>The following recommendations may be followed by clients displaying MathJSON
symbols with LaTeX, or parsing LaTeX to MathJSON symbols.</p>
<p>These recommendations do not affect computation or manipulation of expressions
following these conventions.</p>
<ul>
<li class="">A symbol may be composed of a main body, some modifiers, some style
variants, some subscripts and superscripts. For example:<!-- -->
<ul>
<li class=""><code>"alpha_0__prime"</code> <code class="language-math math-inline">\alpha_0^\prime </code></li>
<li class=""><code>"x_vec"</code> <code class="language-math math-inline">\vec{x}</code></li>
<li class=""><code>"Re_fraktur"</code> <code class="language-math math-inline">\mathfrak{Re} </code>.</li>
</ul>
</li>
<li class="">Subscripts are indicated by an underscore <code>_</code> and superscripts by a
double-underscore <code>__</code>. There may be more than one superscript or subscript,
but they get concatenated. For example <code>"a_b__c_q__p"</code> -> <code>a_{b, q}^{c, p}</code>
$ a_{b, q}^{c, p} $.</li>
<li class="">Modifiers after a superscript or subscript apply to the closest preceding
superscript or subscript. For example <code>"a_b_prime"</code> -> <code>a_{b^{\prime}}</code></li>
</ul>
<p>Modifiers include:</p>
<div class="symbols-table first-column-header" style="--first-col-width:14ch"><table><thead><tr><th style="text-align:left">Modifier</th><th style="text-align:left">LaTeX</th><th></th></tr></thead><tbody><tr><td style="text-align:left"><code>_deg</code></td><td style="text-align:left"><code>\degree</code></td><td>$ x\degree $</td></tr><tr><td style="text-align:left"><code>_prime</code></td><td style="text-align:left"><code>{}^\prime</code></td><td>$ x^{\prime} $</td></tr><tr><td style="text-align:left"><code>_dprime</code></td><td style="text-align:left"><code>{}^\doubleprime</code></td><td>$ x^{\doubleprime} $</td></tr><tr><td style="text-align:left"><code>_ring</code></td><td style="text-align:left"><code>\mathring{}</code></td><td>$ \mathring{x} $</td></tr><tr><td style="text-align:left"><code>_hat</code></td><td style="text-align:left"><code>\hat{}</code></td><td>$ \hat{x} $</td></tr><tr><td style="text-align:left"><code>_tilde</code></td><td style="text-align:left"><code>\tilde{}</code></td><td>$ \tilde{x} $</td></tr><tr><td style="text-align:left"><code>_vec</code></td><td style="text-align:left"><code>\vec{}</code></td><td>$ \vec{x} $</td></tr><tr><td style="text-align:left"><code>_bar</code></td><td style="text-align:left"><code>\overline{}</code></td><td>$ \overline{x} $</td></tr><tr><td style="text-align:left"><code>_underbar</code></td><td style="text-align:left"><code>\underline{}</code></td><td>$ \underline{x} $</td></tr><tr><td style="text-align:left"><code>_dot</code></td><td style="text-align:left"><code>\dot{}</code></td><td>$ \dot{x} $</td></tr><tr><td style="text-align:left"><code>_ddot</code></td><td style="text-align:left"><code>\ddot{}</code></td><td>$ \ddot{x} $</td></tr><tr><td style="text-align:left"><code>_tdot</code></td><td style="text-align:left"><code>\dddot{}</code></td><td>$ \dddot{x} $</td></tr><tr><td style="text-align:left"><code>_qdot</code></td><td style="text-align:left"><code>\ddddot{}</code></td><td>$ \ddddot{x} $</td></tr><tr><td style="text-align:left"><code>_operator</code></td><td style="text-align:left"><code>\operatorname{}</code></td><td>$ \operatorname{x} $</td></tr><tr><td style="text-align:left"><code>_upright</code></td><td style="text-align:left"><code>\mathrm{}</code></td><td>$ \mathrm{x} $</td></tr><tr><td style="text-align:left"><code>_italic</code></td><td style="text-align:left"><code>\mathit{}</code></td><td>$ \mathit{x} $</td></tr><tr><td style="text-align:left"><code>_bold</code></td><td style="text-align:left"><code>\mathbf{}</code></td><td>$ \mathbf{x} $</td></tr><tr><td style="text-align:left"><code>_doublestruck</code></td><td style="text-align:left"><code>\mathbb{}</code></td><td>$ \mathbb{x} $</td></tr><tr><td style="text-align:left"><code>_fraktur</code></td><td style="text-align:left"><code>\mathfrak{}</code></td><td>$ \mathfrak{x} $</td></tr><tr><td style="text-align:left"><code>_script</code></td><td style="text-align:left"><code>\mathscr{}</code></td><td>$ \mathscr{x} $</td></tr></tbody></table></div>
<ul>
<li class="">The following common names, when they appear as the body or in a
subscript/superscript of a symbol, may be replaced with a corresponding
LaTeX command:</li>
</ul>
<div class="symbols-table first-column-header" style="--first-col-width:15ch"><table><thead><tr><th style="text-align:left">Common Names</th><th style="text-align:left">LaTeX</th><th></th></tr></thead><tbody><tr><td style="text-align:left"><code>alpha</code></td><td style="text-align:left"><code>\alpha</code></td><td>$ \alpha $</td></tr><tr><td style="text-align:left"><code>beta</code></td><td style="text-align:left"><code>\beta</code></td><td>$ \beta $</td></tr><tr><td style="text-align:left"><code>gamma</code></td><td style="text-align:left"><code>\gamma</code></td><td>$ \gamma $</td></tr><tr><td style="text-align:left"><code>delta</code></td><td style="text-align:left"><code>\delta</code></td><td>$ \delta $</td></tr><tr><td style="text-align:left"><code>epsilon</code></td><td style="text-align:left"><code>\epsilon</code></td><td>$ \epsilon $</td></tr><tr><td style="text-align:left"><code>epsilonSymbol</code></td><td style="text-align:left"><code>\varepsilon</code></td><td>$ \varepsilon $</td></tr><tr><td style="text-align:left"><code>zeta</code></td><td style="text-align:left"><code>\zeta</code></td><td>$ \zeta $</td></tr><tr><td style="text-align:left"><code>eta</code></td><td style="text-align:left"><code>\eta</code></td><td>$ \eta $</td></tr><tr><td style="text-align:left"><code>theta</code></td><td style="text-align:left"><code>\theta</code></td><td>$ \theta $</td></tr><tr><td style="text-align:left"><code>thetaSymbol</code></td><td style="text-align:left"><code>\vartheta</code></td><td>$ \vartheta $</td></tr><tr><td style="text-align:left"><code>iota</code></td><td style="text-align:left"><code>\iota</code></td><td>$ \iota $</td></tr><tr><td style="text-align:left"><code>kappa</code></td><td style="text-align:left"><code>\kappa</code></td><td>$ \kappa $</td></tr><tr><td style="text-align:left"><code>kappaSymbol</code></td><td style="text-align:left"><code>\varkappa</code></td><td>$ \varkappa $</td></tr><tr><td style="text-align:left"><code>mu</code></td><td style="text-align:left"><code>\mu</code></td><td>$ \mu $</td></tr><tr><td style="text-align:left"><code>nu</code></td><td style="text-align:left"><code>\nu</code></td><td>$ \nu $</td></tr><tr><td style="text-align:left"><code>xi</code></td><td style="text-align:left"><code>\xi</code></td><td>$ \xi $</td></tr><tr><td style="text-align:left"><code>omicron</code></td><td style="text-align:left"><code>\omicron</code></td><td>$ \omicron $</td></tr><tr><td style="text-align:left"><code>piSymbol</code></td><td style="text-align:left"><code>\varpi</code></td><td>$ \varpi $</td></tr><tr><td style="text-align:left"><code>rho</code></td><td style="text-align:left"><code>\rho</code></td><td>$ \rho $</td></tr><tr><td style="text-align:left"><code>rhoSymbol</code></td><td style="text-align:left"><code>\varrho</code></td><td>$ \varrho $</td></tr><tr><td style="text-align:left"><code>sigma</code></td><td style="text-align:left"><code>\sigma</code></td><td>$ \sigma $</td></tr><tr><td style="text-align:left"><code>finalSigma</code></td><td style="text-align:left"><code>\varsigma</code></td><td>$ \varsigma $</td></tr><tr><td style="text-align:left"><code>tau</code></td><td style="text-align:left"><code>\tau</code></td><td>$ \tau $</td></tr><tr><td style="text-align:left"><code>phi</code></td><td style="text-align:left"><code>\phi</code></td><td>$ \phi $</td></tr><tr><td style="text-align:left"><code>phiLetter</code></td><td style="text-align:left"><code>\varphi</code></td><td>$ \varphi $</td></tr><tr><td style="text-align:left"><code>upsilon</code></td><td style="text-align:left"><code>\upsilon</code></td><td>$ \upsilon $</td></tr><tr><td style="text-align:left"><code>chi</code></td><td style="text-align:left"><code>\chi</code></td><td>$ \chi $</td></tr><tr><td style="text-align:left"><code>psi</code></td><td style="text-align:left"><code>\psi</code></td><td>$ \psi $</td></tr><tr><td style="text-align:left"><code>omega</code></td><td style="text-align:left"><code>\omega</code></td><td>$ \omega $</td></tr><tr><td style="text-align:left"><code>Alpha</code></td><td style="text-align:left"><code>\Alpha</code></td><td>$ \Alpha $</td></tr><tr><td style="text-align:left"><code>Beta</code></td><td style="text-align:left"><code>\Beta</code></td><td>$ \Beta $</td></tr><tr><td style="text-align:left"><code>Gamma</code></td><td style="text-align:left"><code>\Gamma</code></td><td>$ \Gamma $</td></tr><tr><td style="text-align:left"><code>Delta</code></td><td style="text-align:left"><code>\Delta</code></td><td>$ \Delta $</td></tr><tr><td style="text-align:left"><code>Epsilon</code></td><td style="text-align:left"><code>\Epsilon</code></td><td>$ \Epsilon $</td></tr><tr><td style="text-align:left"><code>Zeta</code></td><td style="text-align:left"><code>\Zeta</code></td><td>$ \Zeta $</td></tr><tr><td style="text-align:left"><code>Eta</code></td><td style="text-align:left"><code>\Eta</code></td><td>$ \Eta $</td></tr><tr><td style="text-align:left"><code>Theta</code></td><td style="text-align:left"><code>\Theta</code></td><td>$ \Theta $</td></tr><tr><td style="text-align:left"><code>Iota</code></td><td style="text-align:left"><code>\Iota</code></td><td>$ \Iota $</td></tr><tr><td style="text-align:left"><code>Kappa</code></td><td style="text-align:left"><code>\Kappa</code></td><td>$ \Kappa $</td></tr><tr><td style="text-align:left"><code>Lambda</code></td><td style="text-align:left"><code>\Lambda</code></td><td>$ \Lambda $</td></tr><tr><td style="text-align:left"><code>Mu</code></td><td style="text-align:left"><code>\Mu</code></td><td>$ \Mu $</td></tr><tr><td style="text-align:left"><code>Nu</code></td><td style="text-align:left"><code>\Nu</code></td><td>$ \Nu $</td></tr><tr><td style="text-align:left"><code>Xi</code></td><td style="text-align:left"><code>\Xi</code></td><td>$ \Xi $</td></tr><tr><td style="text-align:left"><code>Omicron</code></td><td style="text-align:left"><code>\Omicron</code></td><td>$ \Omicron $</td></tr><tr><td style="text-align:left"><code>Pi</code></td><td style="text-align:left"><code>\Pi</code></td><td>$ \Pi $</td></tr><tr><td style="text-align:left"><code>Rho</code></td><td style="text-align:left"><code>\Rho</code></td><td>$ \Rho $</td></tr><tr><td style="text-align:left"><code>Sigma</code></td><td style="text-align:left"><code>\Sigma</code></td><td>$ \Sigma $</td></tr><tr><td style="text-align:left"><code>Tau</code></td><td style="text-align:left"><code>\Tau</code></td><td>$ \Tau $</td></tr><tr><td style="text-align:left"><code>Phi</code></td><td style="text-align:left"><code>\Phi</code></td><td>$ \Phi $</td></tr><tr><td style="text-align:left"><code>Upsilon</code></td><td style="text-align:left"><code>\Upsilon</code></td><td>$ \Upsilon $</td></tr><tr><td style="text-align:left"><code>Chi</code></td><td style="text-align:left"><code>\Chi</code></td><td>$ \Chi $</td></tr><tr><td style="text-align:left"><code>Psi</code></td><td style="text-align:left"><code>\Psi</code></td><td>$ \Psi $</td></tr><tr><td style="text-align:left"><code>Omega</code></td><td style="text-align:left"><code>\Omega</code></td><td>$ \Omega $</td></tr><tr><td style="text-align:left"><code>digamma</code></td><td style="text-align:left"><code>\digamma</code></td><td>$ \digamma $</td></tr><tr><td style="text-align:left"><code>aleph</code></td><td style="text-align:left"><code>\aleph</code></td><td>$ \aleph $</td></tr><tr><td style="text-align:left"><code>lambda</code></td><td style="text-align:left"><code>\lambda</code></td><td>$ \lambda $</td></tr><tr><td style="text-align:left"><code>bet</code></td><td style="text-align:left"><code>\beth</code></td><td>$ \beth $</td></tr><tr><td style="text-align:left"><code>gimel</code></td><td style="text-align:left"><code>\gimel</code></td><td>$ \gimel $</td></tr><tr><td style="text-align:left"><code>dalet</code></td><td style="text-align:left"><code>\dalet</code></td><td>$ \dalet $</td></tr><tr><td style="text-align:left"><code>ell</code></td><td style="text-align:left"><code>\ell</code></td><td>$ \ell $</td></tr><tr><td style="text-align:left"><code>turnedCapitalF</code></td><td style="text-align:left"><code>\Finv</code></td><td>$ \Finv $</td></tr><tr><td style="text-align:left"><code>turnedCapitalG</code></td><td style="text-align:left"><code>\Game</code></td><td>$ \Game $</td></tr><tr><td style="text-align:left"><code>weierstrass</code></td><td style="text-align:left"><code>\wp</code></td><td>$ \wp $</td></tr><tr><td style="text-align:left"><code>eth</code></td><td style="text-align:left"><code>\eth</code></td><td>$ \eth $</td></tr><tr><td style="text-align:left"><code>invertedOhm</code></td><td style="text-align:left"><code>\mho</code></td><td>$ \mho $</td></tr><tr><td style="text-align:left"><code>hBar</code></td><td style="text-align:left"><code>\hbar</code></td><td>$ \hbar $</td></tr><tr><td style="text-align:left"><code>hSlash</code></td><td style="text-align:left"><code>\hslash</code></td><td>$ \hslash $</td></tr><tr><td style="text-align:left"><code>blacksquare</code></td><td style="text-align:left"><code>\blacksquare</code></td><td>$ \blacksquare $</td></tr><tr><td style="text-align:left"><code>bottom</code></td><td style="text-align:left"><code>\bot</code></td><td>$ \bot $</td></tr><tr><td style="text-align:left"><code>bullet</code></td><td style="text-align:left"><code>\bullet</code></td><td>$ \bullet $</td></tr><tr><td style="text-align:left"><code>circle</code></td><td style="text-align:left"><code>\circ</code></td><td>$ \circ $</td></tr><tr><td style="text-align:left"><code>diamond</code></td><td style="text-align:left"><code>\diamond</code></td><td>$ \diamond $</td></tr><tr><td style="text-align:left"><code>times</code></td><td style="text-align:left"><code>\times</code></td><td>$ \times $</td></tr><tr><td style="text-align:left"><code>top</code></td><td style="text-align:left"><code>\top</code></td><td>$ \top $</td></tr><tr><td style="text-align:left"><code>square</code></td><td style="text-align:left"><code>\square</code></td><td>$ \square $</td></tr><tr><td style="text-align:left"><code>star</code></td><td style="text-align:left"><code>\star</code></td><td>$ \star $</td></tr></tbody></table></div>
<ul>
<li class="">The following names, when used as a subscript or superscript, may be replaced
with a corresponding LaTeX command:</li>
</ul>
<div class="symbols-table first-column-header"><table><thead><tr><th style="text-align:left">Subscript/Supscript</th><th style="text-align:left">LaTeX</th><th></th></tr></thead><tbody><tr><td style="text-align:left"><code>plus</code></td><td style="text-align:left"><code>{}_{+}</code> / <code>{}^{+}</code></td><td>$ x_{+} x^+$</td></tr><tr><td style="text-align:left"><code>minus</code></td><td style="text-align:left"><code>{}_{-}</code> /<code>{}^{-}</code></td><td>$ x_{-} x^-$</td></tr><tr><td style="text-align:left"><code>pm</code></td><td style="text-align:left"><code>{}_\pm</code> /<code>{}^\pm</code></td><td>$ x_{\pm} x^\pm $</td></tr><tr><td style="text-align:left"><code>ast</code></td><td style="text-align:left"><code>{}_\ast</code> /<code>{}^\ast</code></td><td>$ {x}_\ast x^\ast $</td></tr><tr><td style="text-align:left"><code>dag</code></td><td style="text-align:left"><code>{}_\dag</code> /<code>{}^\dag</code></td><td>$ {x}_\dag x^\dag $</td></tr><tr><td style="text-align:left"><code>ddag</code></td><td style="text-align:left"><code>{}_\ddag</code> <code>{}^\ddag</code></td><td>$ {x}_\ddag x^\ddag $</td></tr><tr><td style="text-align:left"><code>hash</code></td><td style="text-align:left"><code>{}_\#</code> <code>{}^\#</code></td><td>$ {x}_# x^#$</td></tr></tbody></table></div>
<ul>
<li class="">
<p>Multi-letter symbols may be rendered with a <code>\mathit{}</code>, <code>\mathrm{}</code> or
<code>\operatorname{}</code> command.</p>
</li>
<li class="">
<p>Symbol fragments ending in digits may be rendered with a corresponding
subscript.</p>
</li>
</ul>
<div class="symbols-table first-column-header" style="--first-col-width:18ch"><table><thead><tr><th style="text-align:left">Symbol</th><th style="text-align:left">LaTeX</th><th></th></tr></thead><tbody><tr><td style="text-align:left"><code>time</code></td><td style="text-align:left"><code>\mathrm{time}</code></td><td>$ \mathrm{time} $</td></tr><tr><td style="text-align:left"><code>speed_italic</code></td><td style="text-align:left"><code>\mathit{speed}</code></td><td>$ \mathit{speed} $</td></tr><tr><td style="text-align:left"><code>P_blackboard__plus</code></td><td style="text-align:left"><code>\mathbb{P}^{+}</code></td><td><code class="language-math math-inline">\mathbb{P}^+</code></td></tr><tr><td style="text-align:left"><code>alpha</code></td><td style="text-align:left"><code>\alpha</code></td><td>$ \alpha $</td></tr><tr><td style="text-align:left"><code>mu0</code></td><td style="text-align:left"><code>\mu_{0}</code></td><td>$ \mu_0 $</td></tr><tr><td style="text-align:left"><code>m56</code></td><td style="text-align:left"><code>m_{56}</code></td><td>$ m_{56} $</td></tr><tr><td style="text-align:left"><code>c_max</code></td><td style="text-align:left"><code>\mathrm{c_{max}}</code></td><td>$ \mathrm{c_{max}} $</td></tr></tbody></table></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="dictionaries">Dictionaries<a href="#dictionaries" class="hash-link" aria-label="Direct link to Dictionaries" title="Direct link to Dictionaries" translate="no"></a></h2>
<p><strong>Dictionaries</strong> are collections of key-value pairs. They are represented as a
<code>["Dictionary", ["Tuple", key, value], ...]</code> expression.</p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_qGQc thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_p187"><div class="token-line" style="color:var(--console-color)"><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Dictionary"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Tuple"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">{</span><span class="token plain">str</span><span class="token operator" style="color:var(--base-06)">:</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"x"</span><span class="token punctuation" style="color:var(--base-06)">}</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--base-09)">120</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Tuple"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">{</span><span class="token plain">str</span><span class="token operator" style="color:var(--base-06)">:</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"y"</span><span class="token punctuation" style="color:var(--base-06)">}</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--base-09)">36</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token punctuation" style="color:var(--base-06)">]</span><br></div></code></pre></div></div>
<p>The keys of a dictionary are Unicode strings. They are compared using the
<a href="https://unicode.org/reports/tr15/" target="_blank" rel="noopener noreferrer" class="">Unicode Normalization Form C (NFC)</a>.
Keys must be unique within a dictionary.</p>
<p>The value of the key-value tuples can be any valid MathJSON expression, including
numbers, strings and functions.</p>
<p>For example, the following dictionary contains an expression and a list as values:</p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_qGQc thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_p187"><div class="token-line" style="color:var(--console-color)"><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Dictionary"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Tuple"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">{</span><span class="token plain">str</span><span class="token operator" style="color:var(--base-06)">:</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"expression"</span><span class="token punctuation" style="color:var(--base-06)">}</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">{</span><span class="token plain">fn</span><span class="token operator" style="color:var(--base-06)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Add"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"x"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--base-09)">1</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">}</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Tuple"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">{</span><span class="token plain">str</span><span class="token operator" style="color:var(--base-06)">:</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"list"</span><span class="token punctuation" style="color:var(--base-06)">}</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token number" style="color:var(--base-09)">1</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--base-09)">2</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--base-09)">3</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token punctuation" style="color:var(--base-06)">]</span><br></div></code></pre></div></div>
<p>As a shorthand, dictionaries can be represented as a JSON object literal with a
<code>"dict"</code> property. The keys are strings and the values are interpreted as
follow:</p>
<table><thead><tr><th style="text-align:left">Value Type</th><th style="text-align:left">MathJSON Representation</th></tr></thead><tbody><tr><td style="text-align:left">boolean</td><td style="text-align:left"><code>{symbol: "True"}</code> or <code>{symbol: "False"}</code></td></tr><tr><td style="text-align:left">string</td><td style="text-align:left"><code>{str: "value"}</code></td></tr><tr><td style="text-align:left">array</td><td style="text-align:left"><code>["List", ...]</code></td></tr><tr><td style="text-align:left"><code>{sym: }</code></td><td style="text-align:left"><code>{sym: "name"}</code></td></tr><tr><td style="text-align:left"><code>{fn: }</code></td><td style="text-align:left"><code>{fn: "name", args: [...]}</code></td></tr></tbody></table>
<p>The values are <em>not</em> interpreted as a MathJSON expression, but as a JSON value,
which is then transformed into a MathJSON expression.</p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_qGQc thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_p187"><div class="token-line" style="color:var(--console-color)"><span class="token punctuation" style="color:var(--base-06)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"> </span><span class="token property" style="color:var(--base-0c)">"dict"</span><span class="token operator" style="color:var(--base-06)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"> </span><span class="token property" style="color:var(--base-0c)">"title"</span><span class="token operator" style="color:var(--base-06)">:</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"My Dictionary"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"> </span><span class="token property" style="color:var(--base-0c)">"enabled"</span><span class="token operator" style="color:var(--base-06)">:</span><span class="token plain"> </span><span class="token boolean" style="color:var(--base-09)">true</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"> </span><span class="token property" style="color:var(--base-0c)">"list"</span><span class="token operator" style="color:var(--base-06)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token number" style="color:var(--base-09)">1</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--base-09)">2</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--base-09)">3</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token plain"> </span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token punctuation" style="color:var(--base-06)">}</span><br></div></code></pre></div></div>
<p>which is interpreted as:</p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_qGQc thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_p187"><div class="token-line" style="color:var(--console-color)"><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Dictionary"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Tuple"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">{</span><span class="token plain">sym</span><span class="token operator" style="color:var(--base-06)">:</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"title"</span><span class="token punctuation" style="color:var(--base-06)">}</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">{</span><span class="token plain">str</span><span class="token operator" style="color:var(--base-06)">:</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"My Dictionary"</span><span class="token punctuation" style="color:var(--base-06)">}</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Tuple"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">{</span><span class="token plain">sym</span><span class="token operator" style="color:var(--base-06)">:</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"enabled"</span><span class="token punctuation" style="color:var(--base-06)">}</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">{</span><span class="token plain">sym</span><span class="token operator" style="color:var(--base-06)">:</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"True"</span><span class="token punctuation" style="color:var(--base-06)">}</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"Tuple"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">{</span><span class="token plain">sym</span><span class="token operator" style="color:var(--base-06)">:</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"list"</span><span class="token punctuation" style="color:var(--base-06)">}</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--base-06)">[</span><span class="token string" style="color:var(--base-0b)">"List"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--base-09)">1</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--base-09)">2</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--base-09)">3</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token punctuation" style="color:var(--base-06)">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token punctuation" style="color:var(--base-06)">]</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="metadata">Metadata<a href="#metadata" class="hash-link" aria-label="Direct link to Metadata" title="Direct link to Metadata" translate="no"></a></h2>
<p>MathJSON object literals may be annotated with supplemental information.</p>
<p>A <strong>number</strong> represented as a JSON number literal, a <strong>symbol</strong> or <strong>string</strong>
represented as a JSON string literal, or a <strong>function</strong> represented as a JSON
array must be transformed into the equivalent object literal to be annotated.</p>
<p>The following metadata keys are recommended:</p>
<div class="symbols-table first-column-header" style="--first-col-width:14ch"><table><thead><tr><th style="text-align:left">Key</th><th style="text-align:left">Note</th></tr></thead><tbody><tr><td style="text-align:left"><code>wikidata</code></td><td style="text-align:left">A short string indicating an entry in a wikibase.<br>This information can be used to disambiguate the meaning of a symbol. Unless otherwise specified, the entry in this key refers to an entry in the <code>wikidata.org</code> wikibase</td></tr><tr><td style="text-align:left"><code>comment</code></td><td style="text-align:left">A human readable plain string to annotate an expression, since JSON does not allow comments in its encoding</td></tr><tr><td style="text-align:left"><code>documentation</code></td><td style="text-align:left">A Markdown-encoded string providing documentation about this expression.</td></tr><tr><td style="text-align:left"><code>latex</code></td><td style="text-align:left">A visual representation in LaTeX of the expression. <br> This can be useful to preserve non-semantic details, for example parentheses in an expression or styling attributes</td></tr><tr><td style="text-align:left"><code>sourceUrl</code></td><td style="text-align:left">A URL to the source of this expression</td></tr><tr><td style="text-align:left"><code>sourceContent</code></td><td style="text-align:left">The source from which this expression was generated.<br> It could be a LaTeX expression, or some other source language.</td></tr><tr><td style="text-align:left"><code>sourceOffsets</code></td><td style="text-align:left">A pair of character offsets in <code>sourceContent</code> or <code>sourceUrl</code> from which this expression was produced</td></tr><tr><td style="text-align:left"><code>hash</code></td><td style="text-align:left">A string representing a digest of this expression.</td></tr></tbody></table></div>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:var(--console-color);--prism-background-color:var(--console-background)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_qGQc thin-scrollbar" style="color:var(--console-color);background-color:var(--console-background)"><code class="codeBlockLines_p187"><div class="token-line" style="color:var(--console-color)"><span class="token punctuation" style="color:var(--base-06)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"> </span><span class="token property" style="color:var(--base-0c)">"sym"</span><span class="token operator" style="color:var(--base-06)">:</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"Pi"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"> </span><span class="token property" style="color:var(--base-0c)">"comment"</span><span class="token operator" style="color:var(--base-06)">:</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"The ratio of the circumference of a circle to its diameter"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"> </span><span class="token property" style="color:var(--base-0c)">"wikidata"</span><span class="token operator" style="color:var(--base-06)">:</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"Q167"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"> </span><span class="token property" style="color:var(--base-0c)">"latex"</span><span class="token operator" style="color:var(--base-06)">:</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"\\pi"</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token punctuation" style="color:var(--base-06)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token punctuation" style="color:var(--base-06)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"> </span><span class="token property" style="color:var(--base-0c)">"sym"</span><span class="token operator" style="color:var(--base-06)">:</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"Pi"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"> </span><span class="token property" style="color:var(--base-0c)">"comment"</span><span class="token operator" style="color:var(--base-06)">:</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"The greek letter ∏"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"> </span><span class="token property" style="color:var(--base-0c)">"wikidata"</span><span class="token operator" style="color:var(--base-06)">:</span><span class="token plain"> </span><span class="token string" style="color:var(--base-0b)">"Q168"</span><span class="token punctuation" style="color:var(--base-06)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--console-color)"><span class="token plain"></span><span class="token punctuation" style="color:var(--base-06)">}</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="mathjson-standard-library">MathJSON Standard Library<a href="#mathjson-standard-library" class="hash-link" aria-label="Direct link to MathJSON Standard Library" title="Direct link to MathJSON Standard Library" translate="no"></a></h2>
<p>This document defines the structure of MathJSON expression. The MathJSON
Standard Library defines a recommended <strong>vocabulary</strong> to use in MathJSON
expressions.</p>
<p>Before considering inventing your own vocabulary, check if the MathJSON Standard
Library already provides relevant definitions.</p>
<p>The MathJSON Standard Library includes definitions for:</p>
<div class="symbols-table" style="--first-col-width:21ch"><table><thead><tr><th style="text-align:left">Topic</th><th style="text-align:left"></th></tr></thead><tbody><tr><td style="text-align:left"><a class="" href="/compute-engine/reference/arithmetic/">Arithmetic</a></td><td style="text-align:left"><code>Add</code> <code>Multiply</code> <code>Power</code> <code>Exp</code> <code>Log</code> <code>ExponentialE</code> <code>ImaginaryUnit</code>...</td></tr><tr><td style="text-align:left"><a class="" href="/compute-engine/reference/calculus/">Calculus</a></td><td style="text-align:left"><code>D</code> <code>Derivative</code> <code>Integrate</code>...</td></tr><tr><td style="text-align:left"><a class="" href="/compute-engine/reference/collections/">Collections</a></td><td style="text-align:left"><code>List</code> <code>Reverse</code> <code>Filter</code>...</td></tr><tr><td style="text-align:left"><a class="" href="/compute-engine/reference/complex/">Complex</a></td><td style="text-align:left"><code>Real</code> <code>Conjugate</code> <code>ComplexRoots</code>...</td></tr><tr><td style="text-align:left"><a class="" href="/compute-engine/reference/control-structures/">Control Structures</a></td><td style="text-align:left"><code>If</code> <code>Block</code> <code>Loop</code> ...</td></tr><tr><td style="text-align:left"><a class="" href="/compute-engine/reference/core/">Core</a></td><td style="text-align:left"><code>Declare</code> <code>Assign</code> <code>Error</code> <code>LatexString</code>...</td></tr><tr><td style="text-align:left"><a class="" href="/compute-engine/reference/functions/">Functions</a></td><td style="text-align:left"><code>Function</code> <code>Apply</code> <code>Return</code> ...</td></tr><tr><td style="text-align:left"><a class="" href="/compute-engine/reference/logic/">Logic</a></td><td style="text-align:left"><code>And</code> <code>Or</code> <code>Not</code> <code>True</code> <code>False</code> <code>ForAll</code> ...</td></tr><tr><td style="text-align:left"><a class="" href="/compute-engine/reference/sets/">Sets</a></td><td style="text-align:left"><code>Union</code> <code>Intersection</code> <code>EmptySet</code> <code>RealNumbers</code> <code>Integers</code> ...</td></tr><tr><td style="text-align:left"><a class="" href="/compute-engine/reference/special-functions/">Special Functions</a></td><td style="text-align:left"><code>Gamma</code> <code>Factorial</code>...</td></tr><tr><td style="text-align:left"><a class="" href="/compute-engine/reference/statistics/">Statistics</a></td><td style="text-align:left"><code>StandardDeviation</code> <code>Mean</code> <code>Erf</code>...</td></tr><tr><td style="text-align:left"><a class="" href="/compute-engine/reference/strings/">Strings and Text</a></td><td style="text-align:left"><code>Text</code> <code>Annotated</code>...</td></tr><tr><td style="text-align:left"><a class="" href="/compute-engine/reference/trigonometry/">Trigonometry</a></td><td style="text-align:left"><code>Pi</code> <code>Cos</code> <code>Sin</code> <code>Tan</code>...</td></tr></tbody></table></div>
<p>When defining a new function, avoid using a name already defined in the Standard
Library.</p>
<div class="readMore_KWn8"><a href="/compute-engine/guides/augmenting/"><p>Read more about <strong>Adding New Definitions</strong><svg class="icon_qj0s chevronRightBold_bbMj"><use xlink:href="/icons.svg#chevron-right-bold"></use></svg></p></a></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="implementations">Implementations<a href="#implementations" class="hash-link" aria-label="Direct link to Implementations" title="Direct link to Implementations" translate="no"></a></h2>
<p>In addition to the JavaScript implementation available here, implementations
of MathJSON for other languages are available from the projects below.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="julia">Julia<a href="#julia" class="hash-link" aria-label="Direct link to Julia" title="Direct link to Julia" translate="no"></a></h3>
<ul>
<li class=""><a href="https://github.com/s-celles/MathJSON.jl" target="_blank" rel="noopener noreferrer" class="">https://github.com/s-celles/MathJSON.jl</a>.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="python">Python<a href="#python" class="hash-link" aria-label="Direct link to Python" title="Direct link to Python" translate="no"></a></h3>
<ul>
<li class=""><a href="https://pypi.org/project/mathjson-solver/" target="_blank" rel="noopener noreferrer" class="">https://pypi.org/project/mathjson-solver/</a></li>
</ul></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="theme-doc-footer-edit-meta-row row"><div class="col"></div><div class="col lastUpdated_VsjB"></div></div></footer></article><nav class="docusaurus-mt-lg pagination-nav" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="/compute-engine/guides/linear-algebra/"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Linear Algebra</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/compute-engine/api/"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">API Reference</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#structure-of-a-mathjson-expression" class="table-of-contents__link toc-highlight">Structure of a MathJSON Expression</a></li><li><a href="#numbers" class="table-of-contents__link toc-highlight">Numbers</a><ul><li><a href="#numbers-as-object-literals" class="table-of-contents__link toc-highlight">Numbers as Object Literals</a></li><li><a href="#numbers-as-number-literals" class="table-of-contents__link toc-highlight">Numbers as Number Literals</a></li><li><a href="#numbers-as-string-literals" class="table-of-contents__link toc-highlight">Numbers as String Literals</a></li></ul></li><li><a href="#strings" class="table-of-contents__link toc-highlight">Strings</a></li><li><a href="#functions" class="table-of-contents__link toc-highlight">Functions</a><ul><li><a href="#functions-as-object-literal" class="table-of-contents__link toc-highlight">Functions as Object Literal</a></li><li><a href="#functions-as-json-arrays" class="table-of-contents__link toc-highlight">Functions as JSON Arrays</a></li><li><a href="#function-operator" class="table-of-contents__link toc-highlight">Function Operator</a></li></ul></li><li><a href="#symbols" class="table-of-contents__link toc-highlight">Symbols</a><ul><li><a href="#wildcards-naming-convention" class="table-of-contents__link toc-highlight">Wildcards Naming Convention</a></li><li><a href="#variables-naming-convention" class="table-of-contents__link toc-highlight">Variables Naming Convention</a></li><li><a href="#constants-naming-convention" class="table-of-contents__link toc-highlight">Constants Naming Convention</a></li><li><a href="#function-names-naming-convention" class="table-of-contents__link toc-highlight">Function Names Naming Convention</a></li><li><a href="#latex-rendering-conventions" class="table-of-contents__link toc-highlight">LaTeX Rendering Conventions</a></li></ul></li><li><a href="#dictionaries" class="table-of-contents__link toc-highlight">Dictionaries</a></li><li><a href="#metadata" class="table-of-contents__link toc-highlight">Metadata</a></li><li><a href="#mathjson-standard-library" class="table-of-contents__link toc-highlight">MathJSON Standard Library</a></li><li><a href="#implementations" class="table-of-contents__link toc-highlight">Implementations</a><ul><li><a href="#julia" class="table-of-contents__link toc-highlight">Julia</a></li><li><a href="#python" class="table-of-contents__link toc-highlight">Python</a></li></ul></li></ul></div></div></div></div></main></div></div></div><div class="shared-footer"><footer class="theme-layout-footer footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="theme-layout-footer-column col footer__col"><div class="footer__title">SDKs</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/mathfield/">Mathfield</a></li><li class="footer__item"><a class="footer__link-item" href="/compute-engine/">Compute Engine</a></li><li class="footer__item"><a class="footer__link-item" href="/math-json/">MathJSON</a></li><li class="footer__item"><a href="https://epsil.dev" target="_blank" rel="noopener noreferrer" class="footer__link-item">Epsil<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li></ul></div><div class="theme-layout-footer-column col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://github.com/cortex-js" target="_blank" rel="noopener noreferrer" class="footer__link-item">
<svg class="icon-one-rem"><use role="none" xlink:href="/icons.svg#github"></use></svg>
GitHub
<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg>
</a></li><li class="footer__item"><a href="https://discord.gg/yhmvVeJ4Hd" target="_blank" rel="noopener noreferrer" class="footer__link-item">
<svg class="icon-one-rem"><use role="none" xlink:href="/icons.svg#discord"></use></svg>
Discord
<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg>
</a></li><li class="footer__item"><a href="https://chatgpt.com/g/g-8YgEfR7ig-mathlive-gpt" target="_blank" rel="noopener noreferrer" class="footer__link-item">
<svg class="icon-one-rem"><use role="none" xlink:href="/icons.svg#openai"></use></svg>
MathLive GPT
<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg>
</a></li></ul></div><div class="theme-layout-footer-column col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/about/">About Us</a></li></ul></div></div></div></footer></div></div>
</body>
</html>