Showing preview only (600K chars total). Download the full file or copy to clipboard to get everything.
Repository: roniemartinez/latex2mathml
Branch: master
Commit: 639f9210a2e5
Files: 357
Total size: 500.4 KB
Directory structure:
gitextract_s7jfff1_/
├── .all-contributorsrc
├── .coderabbit.yaml
├── .github/
│ ├── dependabot.yml
│ └── workflows/
│ ├── pypi.yml
│ ├── python.yml
│ └── testpypi.yml
├── .gitignore
├── .pre-commit-config.yaml
├── LICENSE
├── Makefile
├── README.md
├── example.py
├── latex2mathml/
│ ├── __init__.py
│ ├── commands.py
│ ├── converter.py
│ ├── exceptions.py
│ ├── py.typed
│ ├── symbols_parser.py
│ ├── tokenizer.py
│ ├── unimathsymbols.txt
│ └── walker.py
├── pyproject.toml
└── tests/
├── __init__.py
├── __snapshots__/
│ └── test_converter/
│ ├── test_convert_to_element.html
│ ├── test_convert_to_element_with_parent.html
│ ├── test_converter[307-a].html
│ ├── test_converter[307-b].html
│ ├── test_converter[And].html
│ ├── test_converter[Bbb-group].html
│ ├── test_converter[Bmatrix].html
│ ├── test_converter[LaTeX-with-style].html
│ ├── test_converter[LaTeX].html
│ ├── test_converter[Pr].html
│ ├── test_converter[S].html
│ ├── test_converter[TeX-with-style].html
│ ├── test_converter[TeX].html
│ ├── test_converter[above].html
│ ├── test_converter[abovewithdelims].html
│ ├── test_converter[acute].html
│ ├── test_converter[align-nonumber].html
│ ├── test_converter[align-notag].html
│ ├── test_converter[align0].html
│ ├── test_converter[align1].html
│ ├── test_converter[arctg].html
│ ├── test_converter[argmax].html
│ ├── test_converter[array-with-horizontal-lines].html
│ ├── test_converter[array-with-vertical-bar].html
│ ├── test_converter[atop-and-atopwithdelims].html
│ ├── test_converter[backslash-e].html
│ ├── test_converter[big].html
│ ├── test_converter[bigcirc].html
│ ├── test_converter[bigl-smallmatrix-bigr].html
│ ├── test_converter[binomial-coefficients].html
│ ├── test_converter[binomial].html
│ ├── test_converter[blackboard-bold].html
│ ├── test_converter[bm].html
│ ├── test_converter[bmod].html
│ ├── test_converter[bold].html
│ ├── test_converter[boldsymbol].html
│ ├── test_converter[boxed-box].html
│ ├── test_converter[bra].html
│ ├── test_converter[brace-1].html
│ ├── test_converter[brace].html
│ ├── test_converter[braket].html
│ ├── test_converter[breve].html
│ ├── test_converter[calligraphic-mode].html
│ ├── test_converter[cancel].html
│ ├── test_converter[centerdot].html
│ ├── test_converter[cfrac].html
│ ├── test_converter[check].html
│ ├── test_converter[choose].html
│ ├── test_converter[circledS].html
│ ├── test_converter[class].html
│ ├── test_converter[color].html
│ ├── test_converter[colorbox].html
│ ├── test_converter[command-inside-matrix].html
│ ├── test_converter[comments].html
│ ├── test_converter[complex-matrix].html
│ ├── test_converter[ddot-dddot-ddddot].html
│ ├── test_converter[decimal-numbers].html
│ ├── test_converter[degree-polynomial].html
│ ├── test_converter[degree].html
│ ├── test_converter[determinant].html
│ ├── test_converter[dfrac].html
│ ├── test_converter[diagdown-diagup].html
│ ├── test_converter[dimension-vector-space].html
│ ├── test_converter[displaylines].html
│ ├── test_converter[displaystyle].html
│ ├── test_converter[dots].html
│ ├── test_converter[dotsb].html
│ ├── test_converter[dotsc].html
│ ├── test_converter[dotsi].html
│ ├── test_converter[dotsm].html
│ ├── test_converter[dotso].html
│ ├── test_converter[double-pipe].html
│ ├── test_converter[emph].html
│ ├── test_converter[empty-color-works].html
│ ├── test_converter[empty-subscript].html
│ ├── test_converter[emptyset].html
│ ├── test_converter[eqalign].html
│ ├── test_converter[escaped-characters].html
│ ├── test_converter[exponent-without-base-works].html
│ ├── test_converter[exponential-function].html
│ ├── test_converter[fbox].html
│ ├── test_converter[fcolorbox].html
│ ├── test_converter[footnotesize].html
│ ├── test_converter[fraktur].html
│ ├── test_converter[genfrac-displaystyle].html
│ ├── test_converter[genfrac-scriptscriptstyle].html
│ ├── test_converter[genfrac-scriptstyle].html
│ ├── test_converter[genfrac-textstyle].html
│ ├── test_converter[gggtr].html
│ ├── test_converter[global-fonts].html
│ ├── test_converter[grave].html
│ ├── test_converter[greatest-common-divisor].html
│ ├── test_converter[gt].html
│ ├── test_converter[gvertneqq].html
│ ├── test_converter[hat].html
│ ├── test_converter[hbox-with-backslash-in-text].html
│ ├── test_converter[hbox-with-math-mode].html
│ ├── test_converter[hbox].html
│ ├── test_converter[hfil].html
│ ├── test_converter[hom].html
│ ├── test_converter[hphantom].html
│ ├── test_converter[href].html
│ ├── test_converter[huge].html
│ ├── test_converter[idotsint].html
│ ├── test_converter[inf].html
│ ├── test_converter[injlim].html
│ ├── test_converter[inner-group].html
│ ├── test_converter[intop].html
│ ├── test_converter[issue-103].html
│ ├── test_converter[issue-106].html
│ ├── test_converter[issue-108-1].html
│ ├── test_converter[issue-108-2].html
│ ├── test_converter[issue-108-3].html
│ ├── test_converter[issue-109-1].html
│ ├── test_converter[issue-109-2].html
│ ├── test_converter[issue-112-1].html
│ ├── test_converter[issue-112-2].html
│ ├── test_converter[issue-118].html
│ ├── test_converter[issue-125-1-overset].html
│ ├── test_converter[issue-125-2-overset].html
│ ├── test_converter[issue-125-3-underset].html
│ ├── test_converter[issue-125-4-limits].html
│ ├── test_converter[issue-125-4-mathop].html
│ ├── test_converter[issue-301-a].html
│ ├── test_converter[issue-301-b].html
│ ├── test_converter[issue-301-c].html
│ ├── test_converter[issue-33].html
│ ├── test_converter[issue-42].html
│ ├── test_converter[issue-44].html
│ ├── test_converter[issue-45-gt].html
│ ├── test_converter[issue-45-lt].html
│ ├── test_converter[issue-462-octuple-prime].html
│ ├── test_converter[issue-462-quadruple-prime].html
│ ├── test_converter[issue-462-quintuple-prime].html
│ ├── test_converter[issue-462-triple-prime].html
│ ├── test_converter[issue-498-prod].html
│ ├── test_converter[issue-498-sum].html
│ ├── test_converter[issue-51].html
│ ├── test_converter[issue-52].html
│ ├── test_converter[issue-60-1].html
│ ├── test_converter[issue-60-2].html
│ ├── test_converter[issue-61].html
│ ├── test_converter[issue-63].html
│ ├── test_converter[issue-75-1-row].html
│ ├── test_converter[issue-75-2-rows].html
│ ├── test_converter[issue-76].html
│ ├── test_converter[issue-77].html
│ ├── test_converter[issue-91].html
│ ├── test_converter[issue-98].html
│ ├── test_converter[ker].html
│ ├── test_converter[ket].html
│ ├── test_converter[lVert-double].html
│ ├── test_converter[large].html
│ ├── test_converter[ldotp].html
│ ├── test_converter[left-and-right].html
│ ├── test_converter[leftroot-uproot].html
│ ├── test_converter[lg].html
│ ├── test_converter[liminf].html
│ ├── test_converter[limit-at-plus-infinity].html
│ ├── test_converter[limsup].html
│ ├── test_converter[llap].html
│ ├── test_converter[llless].html
│ ├── test_converter[logarithm-with-base].html
│ ├── test_converter[logarithm].html
│ ├── test_converter[lower].html
│ ├── test_converter[lt].html
│ ├── test_converter[lvert].html
│ ├── test_converter[lvertneqq].html
│ ├── test_converter[math-commands-that-currently-does-nothing].html
│ ├── test_converter[mathbb].html
│ ├── test_converter[mathbf].html
│ ├── test_converter[mathbin].html
│ ├── test_converter[mathcal].html
│ ├── test_converter[mathchoice-block].html
│ ├── test_converter[mathfrak].html
│ ├── test_converter[mathit].html
│ ├── test_converter[mathllap].html
│ ├── test_converter[mathop].html
│ ├── test_converter[mathord].html
│ ├── test_converter[mathrel].html
│ ├── test_converter[mathring].html
│ ├── test_converter[mathrm].html
│ ├── test_converter[mathscr].html
│ ├── test_converter[mathsf].html
│ ├── test_converter[mathsfit].html
│ ├── test_converter[mathstrut].html
│ ├── test_converter[mathtt].html
│ ├── test_converter[matrix-with-alignment].html
│ ├── test_converter[matrix-with-negative-sign].html
│ ├── test_converter[matrix-without-begin-and-end].html
│ ├── test_converter[matrix].html
│ ├── test_converter[mbox].html
│ ├── test_converter[middle].html
│ ├── test_converter[mit].html
│ ├── test_converter[mod].html
│ ├── test_converter[moveleft].html
│ ├── test_converter[moveright].html
│ ├── test_converter[multiple-groups].html
│ ├── test_converter[multiple-identifier].html
│ ├── test_converter[multiple-numbers].html
│ ├── test_converter[newenvironment-multi-node].html
│ ├── test_converter[ngeqq].html
│ ├── test_converter[nolimits].html
│ ├── test_converter[normalsize-scriptsize].html
│ ├── test_converter[not].html
│ ├── test_converter[nshortmid].html
│ ├── test_converter[nshortparallel].html
│ ├── test_converter[nsubseteqq].html
│ ├── test_converter[null-delimiter].html
│ ├── test_converter[numbers-and-identifiers].html
│ ├── test_converter[numbers-and-operators-cdot].html
│ ├── test_converter[numbers-and-operators-div].html
│ ├── test_converter[numbers-and-operators-times].html
│ ├── test_converter[numbers-and-operators].html
│ ├── test_converter[numbers-identifiers-and-operators].html
│ ├── test_converter[oldstyle].html
│ ├── test_converter[omicron].html
│ ├── test_converter[operatorname-star].html
│ ├── test_converter[operatornamewithlimits].html
│ ├── test_converter[over-inside-braces].html
│ ├── test_converter[over].html
│ ├── test_converter[overbrace-a].html
│ ├── test_converter[overbrace-b].html
│ ├── test_converter[overbrace-c].html
│ ├── test_converter[overbracket].html
│ ├── test_converter[overleftarrow].html
│ ├── test_converter[overleftrightarrow].html
│ ├── test_converter[overline].html
│ ├── test_converter[overparen].html
│ ├── test_converter[overrightarrow].html
│ ├── test_converter[phantom].html
│ ├── test_converter[pipe].html
│ ├── test_converter[pmatrix].html
│ ├── test_converter[pmod].html
│ ├── test_converter[pod].html
│ ├── test_converter[prime-no-base].html
│ ├── test_converter[prime].html
│ ├── test_converter[projlim].html
│ ├── test_converter[rVert-double].html
│ ├── test_converter[raise].html
│ ├── test_converter[root].html
│ ├── test_converter[rule].html
│ ├── test_converter[rvert].html
│ ├── test_converter[scr].html
│ ├── test_converter[shortmid].html
│ ├── test_converter[shoveleft].html
│ ├── test_converter[sideset].html
│ ├── test_converter[simple-array].html
│ ├── test_converter[simple-fraction].html
│ ├── test_converter[single-group].html
│ ├── test_converter[single-identifier].html
│ ├── test_converter[single-number].html
│ ├── test_converter[single-operator].html
│ ├── test_converter[skew-with-braces].html
│ ├── test_converter[skew].html
│ ├── test_converter[small-tiny].html
│ ├── test_converter[smallfrown].html
│ ├── test_converter[smallint].html
│ ├── test_converter[smallsmile].html
│ ├── test_converter[smash-bottom].html
│ ├── test_converter[smash-top].html
│ ├── test_converter[smash].html
│ ├── test_converter[space].html
│ ├── test_converter[spaces].html
│ ├── test_converter[split].html
│ ├── test_converter[sqrt-with-multiple-root-nodes].html
│ ├── test_converter[square-root].html
│ ├── test_converter[stackrel].html
│ ├── test_converter[style].html
│ ├── test_converter[styles].html
│ ├── test_converter[subscript-and-superscript].html
│ ├── test_converter[subscript-within-curly-braces].html
│ ├── test_converter[subscript].html
│ ├── test_converter[superscript-and-subscript].html
│ ├── test_converter[superscript-subscript-and-curly-braces].html
│ ├── test_converter[superscript-within-curly-braces].html
│ ├── test_converter[superscript].html
│ ├── test_converter[surd].html
│ ├── test_converter[tag-star].html
│ ├── test_converter[tag].html
│ ├── test_converter[tbinom].html
│ ├── test_converter[textbf].html
│ ├── test_converter[textcolor].html
│ ├── test_converter[textit].html
│ ├── test_converter[textrm].html
│ ├── test_converter[textsf].html
│ ├── test_converter[texttt].html
│ ├── test_converter[tfrac].html
│ ├── test_converter[thickapprox].html
│ ├── test_converter[thicksim].html
│ ├── test_converter[thickspace].html
│ ├── test_converter[tilde-1].html
│ ├── test_converter[tilde-and-space-in-text].html
│ ├── test_converter[tilde].html
│ ├── test_converter[tt].html
│ ├── test_converter[underbrace-a].html
│ ├── test_converter[underbrace-b].html
│ ├── test_converter[underbrace-c].html
│ ├── test_converter[underleftarrow].html
│ ├── test_converter[underleftrightarrow].html
│ ├── test_converter[underline].html
│ ├── test_converter[underparen].html
│ ├── test_converter[underrightarrow].html
│ ├── test_converter[unicode].html
│ ├── test_converter[upper-Vmatrix].html
│ ├── test_converter[varinjlim].html
│ ├── test_converter[varsubsetneqq].html
│ ├── test_converter[varsupsetneq].html
│ ├── test_converter[varsupsetneqq].html
│ ├── test_converter[vcenter].html
│ ├── test_converter[verb].html
│ ├── test_converter[vmatrix].html
│ ├── test_converter[vphantom].html
│ ├── test_converter[widecheck].html
│ ├── test_converter[widehat].html
│ ├── test_converter[widetilde].html
│ ├── test_converter[xLeftarrow-double].html
│ ├── test_converter[xhookleftarrow].html
│ ├── test_converter[xleftarrow-with-argument].html
│ ├── test_converter[xleftarrow].html
│ ├── test_converter[xleftrightarrow].html
│ ├── test_converter[xrightarrow-with-argument].html
│ ├── test_converter[xrightarrow].html
│ ├── test_converter_inline[def-with-args].html
│ ├── test_converter_inline[issue-498-prod].html
│ ├── test_converter_inline[issue-498-sum].html
│ ├── test_converter_inline[issue-75-2-rows].html
│ ├── test_converter_inline[mathchoice-inline].html
│ └── test_converter_inline[newcommand-escaped-hash].html
├── conftest.py
├── test_converter.py
├── test_symbol_parser.py
├── test_tokenizer.py
└── test_walker.py
================================================
FILE CONTENTS
================================================
================================================
FILE: .all-contributorsrc
================================================
{
"files": [
"README.md"
],
"imageSize": 100,
"commit": false,
"contributors": [
{
"login": "roniemartinez",
"name": "Ronie Martinez",
"avatar_url": "https://avatars.githubusercontent.com/u/2573537?v=4",
"profile": "https://ron.sh",
"contributions": [
"maintenance",
"code",
"infra"
]
},
{
"login": "askender",
"name": "askender",
"avatar_url": "https://avatars.githubusercontent.com/u/1472850?v=4",
"profile": "https://anwen.cc/",
"contributions": [
"doc"
]
},
{
"login": "06180339",
"name": "06180339",
"avatar_url": "https://avatars.githubusercontent.com/u/25408501?v=4",
"profile": "https://github.com/06180339",
"contributions": [
"code"
]
},
{
"login": "chaihahaha",
"name": "chaihahaha",
"avatar_url": "https://avatars.githubusercontent.com/u/24356676?v=4",
"profile": "https://github.com/chaihahaha",
"contributions": [
"code"
]
},
{
"login": "huangradio",
"name": "HQY",
"avatar_url": "https://avatars.githubusercontent.com/u/63624395?v=4",
"profile": "https://github.com/huangradio",
"contributions": [
"bug"
]
},
{
"login": "Sun-ZhenXing",
"name": "鸭梨",
"avatar_url": "https://avatars.githubusercontent.com/u/44517244?v=4",
"profile": "https://github.com/Sun-ZhenXing",
"contributions": [
"bug"
]
},
{
"login": "oliverstefanov",
"name": "oliverstefanov",
"avatar_url": "https://avatars.githubusercontent.com/u/33491656?v=4",
"profile": "https://github.com/oliverstefanov",
"contributions": [
"bug"
]
},
{
"login": "ghost",
"name": "Deleted user",
"avatar_url": "https://avatars.githubusercontent.com/u/10137?v=4",
"profile": "https://github.com/ghost",
"contributions": [
"bug"
]
},
{
"login": "cesaryuan",
"name": "Cesaryuan",
"avatar_url": "https://avatars.githubusercontent.com/u/35998162?v=4",
"profile": "https://github.com/cesaryuan",
"contributions": [
"bug"
]
},
{
"login": "tonystank3000",
"name": "TonyStank",
"avatar_url": "https://avatars.githubusercontent.com/u/6315974?v=4",
"profile": "https://github.com/tonystank3000",
"contributions": [
"bug"
]
},
{
"login": "polarwinkel",
"name": "Dirk Winkel",
"avatar_url": "https://avatars.githubusercontent.com/u/1512713?v=4",
"profile": "https://polarwinkel.de",
"contributions": [
"bug"
]
},
{
"login": "sinslu",
"name": "sinslu",
"avatar_url": "https://avatars.githubusercontent.com/u/12248270?v=4",
"profile": "https://github.com/sinslu",
"contributions": [
"bug"
]
},
{
"login": "ubavic",
"name": "Nikola Ubavić",
"avatar_url": "https://avatars.githubusercontent.com/u/53820106?v=4",
"profile": "https://ubavic.rs",
"contributions": [
"bug"
]
},
{
"login": "abhisheksia",
"name": "abhisheksia",
"avatar_url": "https://avatars.githubusercontent.com/u/68808662?v=4",
"profile": "https://github.com/abhisheksia",
"contributions": [
"bug"
]
},
{
"login": "DenisSalem",
"name": "Denis Salem",
"avatar_url": "https://avatars.githubusercontent.com/u/4476506?v=4",
"profile": "http://denissalem.tuxfamily.org",
"contributions": [
"bug",
"code"
]
},
{
"login": "StevenClontz",
"name": "Steven Clontz",
"avatar_url": "https://avatars.githubusercontent.com/u/1559632?v=4",
"profile": "https://clontz.org",
"contributions": [
"bug"
]
},
{
"login": "yuwenjun1",
"name": "空白",
"avatar_url": "https://avatars.githubusercontent.com/u/43265090?v=4",
"profile": "https://github.com/yuwenjun1",
"contributions": [
"bug"
]
},
{
"login": "amuramatsu",
"name": "MURAMATSU Atshshi",
"avatar_url": "https://avatars.githubusercontent.com/u/6500918?v=4",
"profile": "https://github.com/amuramatsu",
"contributions": [
"bug"
]
},
{
"login": "leingang",
"name": "leingang",
"avatar_url": "https://avatars.githubusercontent.com/u/570942?v=4",
"profile": "https://github.com/leingang",
"contributions": [
"bug"
]
},
{
"login": "Nigel-Amers",
"name": "Nigel Amers",
"avatar_url": "https://avatars.githubusercontent.com/u/14248498?v=4",
"profile": "https://github.com/Nigel-Amers",
"contributions": [
"bug"
]
},
{
"login": "retsyo",
"name": "retsyo",
"avatar_url": "https://avatars.githubusercontent.com/u/7960913?v=4",
"profile": "https://github.com/retsyo",
"contributions": [
"bug"
]
},
{
"login": "miakramer",
"name": "Mia Kramer",
"avatar_url": "https://avatars.githubusercontent.com/u/16845265?v=4",
"profile": "https://github.com/miakramer",
"contributions": [
"code",
"doc"
]
},
{
"login": "McSinyx",
"name": "Nguyễn Gia Phong",
"avatar_url": "https://avatars.githubusercontent.com/u/13689192?v=4",
"profile": "http://cnx.gdn",
"contributions": [
"bug",
"code",
"test"
]
},
{
"login": "cdelker",
"name": "Collin Delker",
"avatar_url": "https://avatars.githubusercontent.com/u/44102190?v=4",
"profile": "https://cdelker.github.io",
"contributions": [
"bug"
]
},
{
"login": "jiotv321",
"name": "jiotv321",
"avatar_url": "https://avatars.githubusercontent.com/u/118644533?v=4",
"profile": "https://github.com/jiotv321",
"contributions": [
"bug"
]
},
{
"login": "felixonmars",
"name": "Felix Yan",
"avatar_url": "https://avatars.githubusercontent.com/u/1006477?v=4",
"profile": "https://github.com/felixonmars",
"contributions": [
"code"
]
},
{
"login": "rob-blackbourn",
"name": "Rob Blackbourn",
"avatar_url": "https://avatars.githubusercontent.com/u/2880305?v=4",
"profile": "https://rob-blackbourn.github.io/blog/",
"contributions": [
"code"
]
},
{
"login": "delfanbaum",
"name": "Danny Elfanbaum",
"avatar_url": "https://avatars.githubusercontent.com/u/6827567?v=4",
"profile": "http://bikesbooksandbullshit.com",
"contributions": [
"code",
"test",
"bug"
]
},
{
"login": "cuppajoeman",
"name": "ccn",
"avatar_url": "https://avatars.githubusercontent.com/u/19198104?v=4",
"profile": "http://www.cuppajoeman.com",
"contributions": [
"bug"
]
}
],
"contributorsPerLine": 7,
"projectName": "latex2mathml",
"projectOwner": "roniemartinez",
"repoType": "github",
"repoHost": "https://github.com",
"skipCi": false,
"commitConvention": "angular",
"commitType": "docs"
}
================================================
FILE: .coderabbit.yaml
================================================
reviews:
path_filters:
- "!tests/__snapshots__/**"
================================================
FILE: .github/dependabot.yml
================================================
# To get started with Dependabot version updates, you'll need to specify which
# package ecosystems to update and where the package manifests are located.
# Please see the documentation for all configuration options:
# https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
version: 2
updates:
- package-ecosystem: "uv"
directory: "/"
schedule:
interval: "daily"
commit-message:
prefix: "chore"
include: "scope"
# Version updates for GitHub Actions
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "daily"
commit-message:
prefix: "chore"
include: "scope"
================================================
FILE: .github/workflows/pypi.yml
================================================
# This workflow will publish to PyPI
# For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions
name: Publish to PyPI
on:
release:
types:
- published
jobs:
pypi:
runs-on: ubuntu-latest
permissions:
id-token: write
contents: read
steps:
- uses: actions/checkout@v6.0.2
- name: Install uv
uses: astral-sh/setup-uv@v8.1.0
- name: Build package
run: uv build
- name: Publish package
run: uv publish
================================================
FILE: .github/workflows/python.yml
================================================
# This workflow will install Python dependencies, run tests and lint with a variety of Python versions
# For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions
name: Python
on:
push:
branches:
- master
pull_request:
branches:
- master
workflow_dispatch:
concurrency:
group: ${{ github.ref }}
cancel-in-progress: true
jobs:
test:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ ubuntu-latest, macos-latest, windows-latest ]
python-version: [ '3.10', '3.11', '3.12', '3.13', '3.14' ]
steps:
- uses: actions/checkout@v6.0.2
- name: Install uv
uses: astral-sh/setup-uv@v8.1.0
with:
enable-cache: true
- name: Set up Python ${{ matrix.python-version }}
run: uv python install ${{ matrix.python-version }}
- uses: actions/cache@v5.0.5
with:
path: .mypy_cache
key: ${{ runner.os }}-${{ matrix.python-version }}-mypy-${{ hashFiles('**/uv.lock') }}
restore-keys: |
${{ runner.os }}-${{ matrix.python-version }}-mypy-
- name: Install dependencies
run: uv sync
- name: Lint
run: make lint
- name: Test
run: make test
- name: Code Coverage
uses: codecov/codecov-action@v6.0.0
if: ${{ success() }}
================================================
FILE: .github/workflows/testpypi.yml
================================================
# This workflow will publish to TestPyPI
# For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions
name: Publish to TestPyPI
on:
push:
tags:
- '*'
jobs:
testpypi:
runs-on: ubuntu-latest
permissions:
id-token: write
contents: read
steps:
- uses: actions/checkout@v6.0.2
- name: Install uv
uses: astral-sh/setup-uv@v8.1.0
- name: Build package
run: uv build
- name: Publish package
run: uv publish --publish-url https://test.pypi.org/legacy/
================================================
FILE: .gitignore
================================================
### Python template
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
# C extensions
*.so
# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
*.py,cover
.hypothesis/
.pytest_cache/
cover/
# Translations
*.mo
*.pot
# Django stuff:
*.log
local_settings.py
db.sqlite3
db.sqlite3-journal
# Flask stuff:
instance/
.webassets-cache
# Scrapy stuff:
.scrapy
# Sphinx documentation
docs/_build/
# PyBuilder
.pybuilder/
target/
# Jupyter Notebook
.ipynb_checkpoints
# IPython
profile_default/
ipython_config.py
# pyenv
# For a library or package, you might want to ignore these files since the code is
# intended to run in multiple environments; otherwise, check them in:
# .python-version
# pipenv
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
# However, in case of collaboration, if having platform-specific dependencies or dependencies
# having no cross-platform support, pipenv may install dependencies that don't work, or not
# install all needed dependencies.
#Pipfile.lock
# poetry
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
# This is especially recommended for binary packages to ensure reproducibility, and is more
# commonly ignored for libraries.
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
#poetry.lock
# pdm
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
#pdm.lock
# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
# in version control.
# https://pdm.fming.dev/latest/usage/project/#working-with-version-control
.pdm.toml
.pdm-python
.pdm-build/
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
__pypackages__/
# Celery stuff
celerybeat-schedule
celerybeat.pid
# SageMath parsed files
*.sage.py
# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/
# Spyder project settings
.spyderproject
.spyproject
# Rope project settings
.ropeproject
# mkdocs documentation
/site
# mypy
.mypy_cache/
.dmypy.json
dmypy.json
# Pyre type checker
.pyre/
# pytype static type analyzer
.pytype/
# Cython debug symbols
cython_debug/
# PyCharm
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
# and can be added to the global gitignore or merged into this file. For a more nuclear
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
.idea/
### macOS
.DS_Store
================================================
FILE: .pre-commit-config.yaml
================================================
repos:
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.15.10
hooks:
- id: ruff
args: [--fix]
- id: ruff-format
- repo: https://github.com/pre-commit/mirrors-mypy
rev: v1.20.0
hooks:
- id: mypy
additional_dependencies: [syrupy]
pass_filenames: false
args: [tests, latex2mathml]
================================================
FILE: LICENSE
================================================
MIT License
Copyright (c) 2016 Ronie Martinez
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
================================================
FILE: Makefile
================================================
.PHONY: install
install:
uv sync
.PHONY: format
format:
uv run ruff check --fix .
uv run ruff format .
.PHONY: lint
lint:
uv run ruff check .
uv run ruff format --check .
uv run mypy tests latex2mathml
.PHONY: test
test:
uv run pytest
.PHONY: tag
tag:
VERSION=`uv version --short`; \
git tag -s -a $$VERSION -m "Release $$VERSION"; \
echo "Tagged $$VERSION";
================================================
FILE: README.md
================================================
<table>
<tr>
<td>License</td>
<td><img src='https://img.shields.io/pypi/l/latex2mathml.svg?style=for-the-badge' alt="License"></td>
<td>Version</td>
<td><img src='https://img.shields.io/pypi/v/latex2mathml.svg?logo=pypi&style=for-the-badge' alt="Version"></td>
</tr>
<tr>
<td>Github Actions</td>
<td><img src='https://img.shields.io/github/actions/workflow/status/roniemartinez/latex2mathml/python.yml?branch=master&label=actions&logo=github%20actions&style=for-the-badge' alt="Github Actions"></td>
<td>Coverage</td>
<td><img src='https://img.shields.io/codecov/c/github/roniemartinez/latex2mathml/master?label=codecov&logo=codecov&style=for-the-badge' alt="CodeCov"></td>
</tr>
<tr>
<td>Supported versions</td>
<td><img src='https://img.shields.io/pypi/pyversions/latex2mathml.svg?logo=python&style=for-the-badge' alt="Python Versions"></td>
<td>Wheel</td>
<td><img src='https://img.shields.io/pypi/wheel/latex2mathml.svg?style=for-the-badge' alt="Wheel"></td>
</tr>
<tr>
<td>Status</td>
<td><img src='https://img.shields.io/pypi/status/latex2mathml.svg?style=for-the-badge' alt="Status"></td>
<td>Downloads</td>
<td><img src='https://img.shields.io/pypi/dm/latex2mathml.svg?style=for-the-badge' alt="Downloads"></td>
</tr>
<tr>
<td>All Contributors</td>
<td><a href="#contributors-"><img src='https://img.shields.io/github/all-contributors/roniemartinez/latex2mathml?style=for-the-badge' alt="All Contributors"></a></td>
</tr>
</table>
# latex2mathml
Pure Python library for LaTeX to MathML conversion
## Installation
```bash
pip install latex2mathml
```
## Usage
### Python
```python
import latex2mathml.converter
latex_input = "<your_latex_string>"
mathml_output = latex2mathml.converter.convert(latex_input)
```
### Command-line
```shell
% latex2mathml -h
usage: latex2mathml [-h] [-V] [-b] [-t TEXT | -f FILE | -s]
Pure Python library for LaTeX to MathML conversion
options:
-h, --help show this help message and exit
-V, --version Show version
-b, --block Display block
required arguments:
-t TEXT, --text TEXT Text
-f FILE, --file FILE File
-s, --stdin Stdin
```
## References
### LaTeX
- https://en.wikibooks.org/wiki/LaTeX/Mathematics
- http://artofproblemsolving.com/wiki/index.php?title=Main_Page
- http://milde.users.sourceforge.net/LUCR/Math/
- https://math-linux.com/latex-26/faq/latex-faq/article/latex-derivatives-limits-sums-products-and-integrals
- https://www.tutorialspoint.com/tex_commands
- https://www.giss.nasa.gov/tools/latex/ltx-86.html
- https://ftp.gwdg.de/pub/ctan/info/l2tabu/english/l2tabuen.pdf
### MathML
- http://www.xmlmind.com/tutorials/MathML/
## Author
- [Ronie Martinez](mailto:ronmarti18@gmail.com)
## Contributors ✨
Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):
<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
<!-- prettier-ignore-start -->
<!-- markdownlint-disable -->
<table>
<tbody>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://ron.sh"><img src="https://avatars.githubusercontent.com/u/2573537?v=4?s=100" width="100px;" alt="Ronie Martinez"/><br /><sub><b>Ronie Martinez</b></sub></a><br /><a href="#maintenance-roniemartinez" title="Maintenance">🚧</a> <a href="https://github.com/roniemartinez/latex2mathml/commits?author=roniemartinez" title="Code">💻</a> <a href="#infra-roniemartinez" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://anwen.cc/"><img src="https://avatars.githubusercontent.com/u/1472850?v=4?s=100" width="100px;" alt="askender"/><br /><sub><b>askender</b></sub></a><br /><a href="https://github.com/roniemartinez/latex2mathml/commits?author=askender" title="Documentation">📖</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/06180339"><img src="https://avatars.githubusercontent.com/u/25408501?v=4?s=100" width="100px;" alt="06180339"/><br /><sub><b>06180339</b></sub></a><br /><a href="https://github.com/roniemartinez/latex2mathml/commits?author=06180339" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/chaihahaha"><img src="https://avatars.githubusercontent.com/u/24356676?v=4?s=100" width="100px;" alt="chaihahaha"/><br /><sub><b>chaihahaha</b></sub></a><br /><a href="https://github.com/roniemartinez/latex2mathml/commits?author=chaihahaha" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/huangradio"><img src="https://avatars.githubusercontent.com/u/63624395?v=4?s=100" width="100px;" alt="HQY"/><br /><sub><b>HQY</b></sub></a><br /><a href="https://github.com/roniemartinez/latex2mathml/issues?q=author%3Ahuangradio" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Sun-ZhenXing"><img src="https://avatars.githubusercontent.com/u/44517244?v=4?s=100" width="100px;" alt="鸭梨"/><br /><sub><b>鸭梨</b></sub></a><br /><a href="https://github.com/roniemartinez/latex2mathml/issues?q=author%3ASun-ZhenXing" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/oliverstefanov"><img src="https://avatars.githubusercontent.com/u/33491656?v=4?s=100" width="100px;" alt="oliverstefanov"/><br /><sub><b>oliverstefanov</b></sub></a><br /><a href="https://github.com/roniemartinez/latex2mathml/issues?q=author%3Aoliverstefanov" title="Bug reports">🐛</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ghost"><img src="https://avatars.githubusercontent.com/u/10137?v=4?s=100" width="100px;" alt="Deleted user"/><br /><sub><b>Deleted user</b></sub></a><br /><a href="https://github.com/roniemartinez/latex2mathml/issues?q=author%3Aghost" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/cesaryuan"><img src="https://avatars.githubusercontent.com/u/35998162?v=4?s=100" width="100px;" alt="Cesaryuan"/><br /><sub><b>Cesaryuan</b></sub></a><br /><a href="https://github.com/roniemartinez/latex2mathml/issues?q=author%3Acesaryuan" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/tonystank3000"><img src="https://avatars.githubusercontent.com/u/6315974?v=4?s=100" width="100px;" alt="TonyStank"/><br /><sub><b>TonyStank</b></sub></a><br /><a href="https://github.com/roniemartinez/latex2mathml/issues?q=author%3Atonystank3000" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://polarwinkel.de"><img src="https://avatars.githubusercontent.com/u/1512713?v=4?s=100" width="100px;" alt="Dirk Winkel"/><br /><sub><b>Dirk Winkel</b></sub></a><br /><a href="https://github.com/roniemartinez/latex2mathml/issues?q=author%3Apolarwinkel" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/sinslu"><img src="https://avatars.githubusercontent.com/u/12248270?v=4?s=100" width="100px;" alt="sinslu"/><br /><sub><b>sinslu</b></sub></a><br /><a href="https://github.com/roniemartinez/latex2mathml/issues?q=author%3Asinslu" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://ubavic.rs"><img src="https://avatars.githubusercontent.com/u/53820106?v=4?s=100" width="100px;" alt="Nikola Ubavić"/><br /><sub><b>Nikola Ubavić</b></sub></a><br /><a href="https://github.com/roniemartinez/latex2mathml/issues?q=author%3Aubavic" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/abhisheksia"><img src="https://avatars.githubusercontent.com/u/68808662?v=4?s=100" width="100px;" alt="abhisheksia"/><br /><sub><b>abhisheksia</b></sub></a><br /><a href="https://github.com/roniemartinez/latex2mathml/issues?q=author%3Aabhisheksia" title="Bug reports">🐛</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="http://denissalem.tuxfamily.org"><img src="https://avatars.githubusercontent.com/u/4476506?v=4?s=100" width="100px;" alt="Denis Salem"/><br /><sub><b>Denis Salem</b></sub></a><br /><a href="https://github.com/roniemartinez/latex2mathml/issues?q=author%3ADenisSalem" title="Bug reports">🐛</a> <a href="https://github.com/roniemartinez/latex2mathml/commits?author=DenisSalem" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://clontz.org"><img src="https://avatars.githubusercontent.com/u/1559632?v=4?s=100" width="100px;" alt="Steven Clontz"/><br /><sub><b>Steven Clontz</b></sub></a><br /><a href="https://github.com/roniemartinez/latex2mathml/issues?q=author%3AStevenClontz" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/yuwenjun1"><img src="https://avatars.githubusercontent.com/u/43265090?v=4?s=100" width="100px;" alt="空白"/><br /><sub><b>空白</b></sub></a><br /><a href="https://github.com/roniemartinez/latex2mathml/issues?q=author%3Ayuwenjun1" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/amuramatsu"><img src="https://avatars.githubusercontent.com/u/6500918?v=4?s=100" width="100px;" alt="MURAMATSU Atshshi"/><br /><sub><b>MURAMATSU Atshshi</b></sub></a><br /><a href="https://github.com/roniemartinez/latex2mathml/issues?q=author%3Aamuramatsu" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/leingang"><img src="https://avatars.githubusercontent.com/u/570942?v=4?s=100" width="100px;" alt="leingang"/><br /><sub><b>leingang</b></sub></a><br /><a href="https://github.com/roniemartinez/latex2mathml/issues?q=author%3Aleingang" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Nigel-Amers"><img src="https://avatars.githubusercontent.com/u/14248498?v=4?s=100" width="100px;" alt="Nigel Amers"/><br /><sub><b>Nigel Amers</b></sub></a><br /><a href="https://github.com/roniemartinez/latex2mathml/issues?q=author%3ANigel-Amers" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/retsyo"><img src="https://avatars.githubusercontent.com/u/7960913?v=4?s=100" width="100px;" alt="retsyo"/><br /><sub><b>retsyo</b></sub></a><br /><a href="https://github.com/roniemartinez/latex2mathml/issues?q=author%3Aretsyo" title="Bug reports">🐛</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/miakramer"><img src="https://avatars.githubusercontent.com/u/16845265?v=4?s=100" width="100px;" alt="Mia Kramer"/><br /><sub><b>Mia Kramer</b></sub></a><br /><a href="https://github.com/roniemartinez/latex2mathml/commits?author=miakramer" title="Code">💻</a> <a href="https://github.com/roniemartinez/latex2mathml/commits?author=miakramer" title="Documentation">📖</a></td>
<td align="center" valign="top" width="14.28%"><a href="http://cnx.gdn"><img src="https://avatars.githubusercontent.com/u/13689192?v=4?s=100" width="100px;" alt="Nguyễn Gia Phong"/><br /><sub><b>Nguyễn Gia Phong</b></sub></a><br /><a href="https://github.com/roniemartinez/latex2mathml/issues?q=author%3AMcSinyx" title="Bug reports">🐛</a> <a href="https://github.com/roniemartinez/latex2mathml/commits?author=McSinyx" title="Code">💻</a> <a href="https://github.com/roniemartinez/latex2mathml/commits?author=McSinyx" title="Tests">⚠️</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://cdelker.github.io"><img src="https://avatars.githubusercontent.com/u/44102190?v=4?s=100" width="100px;" alt="Collin Delker"/><br /><sub><b>Collin Delker</b></sub></a><br /><a href="https://github.com/roniemartinez/latex2mathml/issues?q=author%3Acdelker" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/jiotv321"><img src="https://avatars.githubusercontent.com/u/118644533?v=4?s=100" width="100px;" alt="jiotv321"/><br /><sub><b>jiotv321</b></sub></a><br /><a href="https://github.com/roniemartinez/latex2mathml/issues?q=author%3Ajiotv321" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/felixonmars"><img src="https://avatars.githubusercontent.com/u/1006477?v=4?s=100" width="100px;" alt="Felix Yan"/><br /><sub><b>Felix Yan</b></sub></a><br /><a href="https://github.com/roniemartinez/latex2mathml/commits?author=felixonmars" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://rob-blackbourn.github.io/blog/"><img src="https://avatars.githubusercontent.com/u/2880305?v=4?s=100" width="100px;" alt="Rob Blackbourn"/><br /><sub><b>Rob Blackbourn</b></sub></a><br /><a href="https://github.com/roniemartinez/latex2mathml/commits?author=rob-blackbourn" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="http://bikesbooksandbullshit.com"><img src="https://avatars.githubusercontent.com/u/6827567?v=4?s=100" width="100px;" alt="Danny Elfanbaum"/><br /><sub><b>Danny Elfanbaum</b></sub></a><br /><a href="https://github.com/roniemartinez/latex2mathml/commits?author=delfanbaum" title="Code">💻</a> <a href="https://github.com/roniemartinez/latex2mathml/commits?author=delfanbaum" title="Tests">⚠️</a> <a href="https://github.com/roniemartinez/latex2mathml/issues?q=author%3Adelfanbaum" title="Bug reports">🐛</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="http://www.cuppajoeman.com"><img src="https://avatars.githubusercontent.com/u/19198104?v=4?s=100" width="100px;" alt="ccn"/><br /><sub><b>ccn</b></sub></a><br /><a href="https://github.com/roniemartinez/latex2mathml/issues?q=author%3Acuppajoeman" title="Bug reports">🐛</a></td>
</tr>
</tbody>
</table>
<!-- markdownlint-restore -->
<!-- prettier-ignore-end -->
<!-- ALL-CONTRIBUTORS-LIST:END -->
This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!
================================================
FILE: example.py
================================================
from latex2mathml.converter import convert
def convert_to_mathml(latex_input):
mathml_output = convert(latex_input)
print(mathml_output)
if __name__ == "__main__":
convert_to_mathml(r"x = {-b \pm \sqrt{b^2-4ac} \over 2a}")
================================================
FILE: latex2mathml/__init__.py
================================================
from importlib import metadata
__version__ = metadata.version("latex2mathml")
================================================
FILE: latex2mathml/commands.py
================================================
from collections import defaultdict
from typing import Optional
OPENING_BRACE = "{"
CLOSING_BRACE = "}"
BRACES = "{}"
OPENING_BRACKET = "["
CLOSING_BRACKET = "]"
SUBSUP = "_^"
SUBSCRIPT = "_"
SUPERSCRIPT = "^"
APOSTROPHE = "'"
PRIME = r"\prime"
DPRIME = r"\dprime"
TRPRIME = r"\trprime"
QPRIME = r"\qprime"
PRIME_UPGRADE = {
PRIME: DPRIME,
DPRIME: TRPRIME,
TRPRIME: QPRIME,
}
LEFT = r"\left"
MIDDLE = r"\middle"
RIGHT = r"\right"
ABOVE = r"\above"
ABOVEWITHDELIMS = r"\abovewithdelims"
ATOP = r"\atop"
ATOPWITHDELIMS = r"\atopwithdelims"
BINOM = r"\binom"
BRACE = r"\brace"
BRACK = r"\brack"
CFRAC = r"\cfrac"
CHOOSE = r"\choose"
DBINOM = r"\dbinom"
DFRAC = r"\dfrac"
FRAC = r"\frac"
GENFRAC = r"\genfrac"
OVER = r"\over"
TBINOM = r"\tbinom"
TFRAC = r"\tfrac"
ROOT = r"\root"
SQRT = r"\sqrt"
OVERSET = r"\overset"
STACKREL = r"\stackrel"
UNDERSET = r"\underset"
ACUTE = r"\acute"
BAR = r"\bar"
BREVE = r"\breve"
CHECK = r"\check"
DOT = r"\dot"
DDOT = r"\ddot"
DDDOT = r"\dddot"
DDDDOT = r"\ddddot"
GRAVE = r"\grave"
HAT = r"\hat"
MATHRING = r"\mathring"
OVERBRACE = r"\overbrace"
OVERBRACKET = r"\overbracket"
OVERLEFTARROW = r"\overleftarrow"
OVERLEFTRIGHTARROW = r"\overleftrightarrow"
OVERLINE = r"\overline"
OVERPAREN = r"\overparen"
OVERRIGHTARROW = r"\overrightarrow"
TILDE = r"\tilde"
UNDERBAR = r"\underbar"
UNDERBRACE = r"\underbrace"
UNDERBRACKET = r"\underbracket"
UNDERLEFTARROW = r"\underleftarrow"
UNDERLINE = r"\underline"
UNDERPAREN = r"\underparen"
UNDERRIGHTARROW = r"\underrightarrow"
UNDERLEFTRIGHTARROW = r"\underleftrightarrow"
VEC = r"\vec"
WIDECHECK = r"\widecheck"
WIDEHAT = r"\widehat"
WIDETILDE = r"\widetilde"
XLEFTARROW = r"\xleftarrow"
XLEFTHARPOONDOWN = r"\xleftharpoondown"
XLEFTHARPOONUP = r"\xleftharpoonup"
XLEFTRIGHTARROW = r"\xleftrightarrow"
XLEFTRIGHTHARPOONS = r"\xleftrightharpoons"
XLONGEQUAL = r"\xlongequal"
XMAPSTO = r"\xmapsto"
XRIGHTARROW = r"\xrightarrow"
XRIGHTHARPOONDOWN = r"\xrightharpoondown"
XRIGHTHARPOONUP = r"\xrightharpoonup"
XRIGHTLEFTHARPOONS = r"\xrightleftharpoons"
XTOFROM = r"\xtofrom"
XTWOHEADLEFTARROW = r"\xtwoheadleftarrow"
XTWOHEADRIGHTARROW = r"\xtwoheadrightarrow"
XHOOKLEFTARROW = r"\xhookleftarrow"
XHOOKRIGHTARROW = r"\xhookrightarrow"
XLEFTARROWUPPER = r"\xLeftarrow"
XRIGHTARROWUPPER = r"\xRightarrow"
XLEFTRIGHTARROWUPPER = r"\xLeftrightarrow"
EXTENSIBLE_ARROWS: dict[str, str] = {
XLEFTARROW: "←",
XLEFTHARPOONDOWN: "↽",
XLEFTHARPOONUP: "↼",
XLEFTRIGHTARROW: "↔",
XLEFTRIGHTHARPOONS: "⇋",
XLONGEQUAL: "=",
XMAPSTO: "↦",
XRIGHTARROW: "→",
XRIGHTHARPOONDOWN: "⇁",
XRIGHTHARPOONUP: "⇀",
XRIGHTLEFTHARPOONS: "⇌",
XTOFROM: "⇄",
XTWOHEADLEFTARROW: "↞",
XTWOHEADRIGHTARROW: "↠",
XHOOKLEFTARROW: "↩",
XHOOKRIGHTARROW: "↪",
XLEFTARROWUPPER: "⇐",
XRIGHTARROWUPPER: "⇒",
XLEFTRIGHTARROWUPPER: "⇔",
}
EMPH = r"\emph"
HREF = r"\href"
TEXT = r"\text"
TEXTBF = r"\textbf"
TEXTIT = r"\textit"
TEXTMD = r"\textmd"
TEXTNORMAL = r"\textnormal"
TEXTRM = r"\textrm"
TEXTSF = r"\textsf"
TEXTTT = r"\texttt"
TEXTUP = r"\textup"
BEGIN = r"\begin"
END = r"\end"
LIMITS = r"\limits"
NOLIMITS = r"\nolimits"
INTEGRAL = r"\int"
SUMMATION = r"\sum"
PRODUCT = r"\prod"
LIMIT = (r"\lim", r"\sup", r"\inf", r"\max", r"\min")
NEWCOMMAND = r"\newcommand"
NEWENVIRONMENT = r"\newenvironment"
DEF = r"\def"
DECLAREMATHOPERATOR = r"\DeclareMathOperator"
OPERATORNAME = r"\operatorname"
OPERATORNAMESTAR = r"\operatorname*"
OPERATORNAMEWITHLIMITS = r"\operatornamewithlimits"
LBRACE = r"\{"
FUNCTIONS = (
r"\arccos",
r"\arcctg",
r"\arcsin",
r"\arctan",
r"\arctg",
r"\ch",
r"\cos",
r"\cosh",
r"\cosec",
r"\cot",
r"\cotg",
r"\coth",
r"\csc",
r"\ctg",
r"\cth",
r"\deg",
r"\dim",
r"\exp",
r"\hom",
r"\ker",
r"\ln",
r"\lg",
r"\log",
r"\sec",
r"\sh",
r"\sin",
r"\sinh",
r"\tan",
r"\tanh",
r"\tg",
r"\th",
)
ARGMAX = r"\argmax"
ARGMIN = r"\argmin"
DETERMINANT = r"\det"
GCD = r"\gcd"
INTOP = r"\intop"
INJLIM = r"\injlim"
LIMINF = r"\liminf"
LIMSUP = r"\limsup"
PLIM = r"\plim"
PR = r"\Pr"
PROJLIM = r"\projlim"
VARINJLIM = r"\varinjlim"
VARLIMINF = r"\varliminf"
VARLIMSUP = r"\varlimsup"
VARPROJLIM = r"\varprojlim"
MOD = r"\mod"
PMOD = r"\pmod"
POD = r"\pod"
BMOD = r"\bmod"
HDASHLINE = r"\hdashline"
HLINE = r"\hline"
HFIL = r"\hfil"
NONUMBER = r"\nonumber"
NOTAG = r"\notag"
CASES = r"\cases"
EQALIGN = r"\eqalign"
EQALIGNNO = r"\eqalignno"
DISPLAYLINES = r"\displaylines"
SMALLMATRIX = r"\smallmatrix"
SUBSTACK = r"\substack"
SPLIT = r"\split"
ALIGN = r"\align"
ALIGNSTAR = r"\align*"
MATRICES = (
r"\matrix",
r"\matrix*",
r"\pmatrix",
r"\pmatrix*",
r"\bmatrix",
r"\bmatrix*",
r"\Bmatrix",
r"\Bmatrix*",
r"\vmatrix",
r"\vmatrix*",
r"\Vmatrix",
r"\Vmatrix*",
r"\array",
SUBSTACK,
CASES,
DISPLAYLINES,
EQALIGN,
EQALIGNNO,
SMALLMATRIX,
SPLIT,
ALIGN,
ALIGNSTAR,
)
BACKSLASH = "\\"
CARRIAGERETURN = r"\cr"
COLON = r"\:"
COMMA = r"\,"
DOUBLEBACKSLASH = r"\\"
ENSPACE = r"\enspace"
EXCLAMATION = r"\!"
GREATERTHAN = r"\>"
HSKIP = r"\hskip"
HSPACE = r"\hspace"
KERN = r"\kern"
MKERN = r"\mkern"
MSKIP = r"\mskip"
MSPACE = r"\mspace"
NEGTHINSPACE = r"\negthinspace"
NEGMEDSPACE = r"\negmedspace"
NEGTHICKSPACE = r"\negthickspace"
NOBREAKSPACE = r"\nobreakspace"
SPACE = r"\space"
SPACEUPPER = r"\Space"
THICKSPACE = r"\thickspace"
THINSPACE = r"\thinspace"
QQUAD = r"\qquad"
QUAD = r"\quad"
SEMICOLON = r"\;"
BM = r"\bm"
BLACKBOARDBOLD = r"\Bbb"
BOLD = r"\bold"
BOLDSYMBOL = r"\boldsymbol"
MIT = r"\mit"
OLDSTYLE = r"\oldstyle"
PMB = r"\pmb"
SCR = r"\scr"
TT = r"\tt"
MATH = r"\math"
MATHBB = r"\mathbb"
MATHBF = r"\mathbf"
MATHCAL = r"\mathcal"
MATHFRAK = r"\mathfrak"
MATHIT = r"\mathit"
MATHRM = r"\mathrm"
MATHCHOICE = r"\mathchoice"
MATHBIN = r"\mathbin"
MATHCLOSE = r"\mathclose"
MATHINNER = r"\mathinner"
MATHNORMAL = r"\mathnormal"
MATHOP = r"\mathop"
MATHOPEN = r"\mathopen"
MATHORD = r"\mathord"
MATHPUNCT = r"\mathpunct"
MATHREL = r"\mathrel"
MATHSCR = r"\mathscr"
MATHSF = r"\mathsf"
MATHSFIT = r"\mathsfit"
MATHTT = r"\mathtt"
BRA = r"\bra"
BRAKET = r"\braket"
BCANCEL = r"\bcancel"
BOXED = r"\boxed"
CANCEL = r"\cancel"
CLASS = r"\class"
CLAP = r"\clap"
LLAP = r"\llap"
MATHCLAP = r"\mathclap"
MATHLLAP = r"\mathllap"
MATHRLAP = r"\mathrlap"
FBOX = r"\fbox"
HBOX = r"\hbox"
KET = r"\ket"
MBOX = r"\mbox"
RLAP = r"\rlap"
COLOR = r"\color"
COLORBOX = r"\colorbox"
FCOLORBOX = r"\fcolorbox"
TEXTCOLOR = r"\textcolor"
FOOTNOTESIZE = r"\footnotesize"
DISPLAYSTYLE = r"\displaystyle"
TEXTSTYLE = r"\textstyle"
SCRIPTSTYLE = r"\scriptstyle"
SCRIPTSCRIPTSTYLE = r"\scriptscriptstyle"
STYLE = r"\style"
HPHANTOM = r"\hphantom"
MATHSTRUT = r"\mathstrut"
PHANTOM = r"\phantom"
STRUT = r"\strut"
VCENTER = r"\vcenter"
VPHANTOM = r"\vphantom"
MATH_NON_FONT_COMMANDS = (
MATHRING,
MATHBIN,
MATHCHOICE,
MATHCLOSE,
MATHINNER,
MATHOP,
MATHOPEN,
MATHORD,
MATHPUNCT,
MATHREL,
MATHSTRUT,
)
IDOTSINT = r"\idotsint"
LATEX = r"\LaTeX"
TEX = r"\TeX"
LEFTROOT = r"\leftroot"
LOWER = r"\lower"
MOVELEFT = r"\moveleft"
MOVERIGHT = r"\moveright"
RAISE = r"\raise"
RULE = r"\rule"
SHOVELEFT = r"\shoveleft"
SHOVERIGHT = r"\shoveright"
SMASH = r"\smash"
SOUT = r"\sout"
SIDESET = r"\sideset"
SKEW = r"\skew"
TAG = r"\tag"
TAGSTAR = r"\tag*"
UNICODE = r"\unicode"
UPROOT = r"\uproot"
VERB = r"\verb"
XCANCEL = r"\xcancel"
NOT = r"\not"
def font_factory(default: Optional[str], replacement: dict[str, Optional[str]]) -> defaultdict[str, Optional[str]]:
fonts = defaultdict(lambda: default, replacement)
return fonts
LOCAL_FONTS: dict[str, defaultdict[str, Optional[str]]] = {
BLACKBOARDBOLD: font_factory("double-struck", {"fence": None}),
BM: font_factory("bold-italic", {"fence": None}),
BOLD: font_factory("bold", {"fence": None}),
BOLDSYMBOL: font_factory("bold", {"mi": "bold-italic", "mtext": None}),
MATHBB: font_factory("double-struck", {"fence": None}),
MATHBF: font_factory("bold", {"fence": None}),
MATHCAL: font_factory("script", {"fence": None}),
MATHFRAK: font_factory("fraktur", {"fence": None}),
MATHIT: font_factory("italic", {"fence": None}),
MATHRM: font_factory(None, {"mi": "normal"}),
MATHSCR: font_factory("script", {"fence": None}),
MATHSF: font_factory(None, {"mi": "sans-serif"}),
MATHSFIT: font_factory(None, {"mi": "sans-serif-italic"}),
MATHTT: font_factory("monospace", {"fence": None}),
MATHNORMAL: font_factory(None, {"mi": "normal"}),
MIT: font_factory("italic", {"fence": None, "mi": None}),
OLDSTYLE: font_factory("normal", {"fence": None}),
PMB: font_factory("bold", {"fence": None}),
SCR: font_factory("script", {"fence": None}),
TT: font_factory("monospace", {"fence": None}),
}
OLD_STYLE_FONTS: dict[str, defaultdict[str, Optional[str]]] = {
r"\rm": font_factory(None, {"mi": "normal"}),
r"\bf": font_factory(None, {"mi": "bold"}),
r"\it": font_factory(None, {"mi": "italic"}),
r"\sf": font_factory(None, {"mi": "sans-serif"}),
r"\tt": font_factory(None, {"mi": "monospace"}),
}
GLOBAL_FONTS = {
**OLD_STYLE_FONTS,
r"\cal": font_factory("script", {"fence": None}),
r"\frak": font_factory("fraktur", {"fence": None}),
}
COMMANDS_WITH_ONE_PARAMETER = (
ACUTE,
BAR,
BCANCEL,
BLACKBOARDBOLD,
BM,
BOLD,
BRA,
BRAKET,
BOLDSYMBOL,
BOXED,
CANCEL,
BREVE,
CHECK,
DOT,
DDOT,
DDDOT,
DDDDOT,
GRAVE,
HAT,
HPHANTOM,
KET,
MATHBIN,
MATHCLAP,
MATHCLOSE,
MATHINNER,
MATHLLAP,
MATHOP,
MATHOPEN,
MATHORD,
MATHPUNCT,
MATHREL,
MATHRLAP,
MATHRING,
MIT,
MOD,
OLDSTYLE,
OVERBRACE,
OVERBRACKET,
OVERLEFTARROW,
OVERLEFTRIGHTARROW,
OVERLINE,
OVERPAREN,
OVERRIGHTARROW,
PHANTOM,
PMB,
UNICODE,
PMOD,
POD,
SCR,
SHOVELEFT,
SHOVERIGHT,
SOUT,
TILDE,
TT,
UNDERBAR,
UNDERBRACE,
UNDERBRACKET,
UNDERLEFTARROW,
UNDERLINE,
UNDERPAREN,
UNDERRIGHTARROW,
UNDERLEFTRIGHTARROW,
VEC,
VCENTER,
VPHANTOM,
WIDECHECK,
WIDEHAT,
WIDETILDE,
XCANCEL,
)
COMMANDS_WITH_TWO_PARAMETERS = (
BINOM,
CFRAC,
DBINOM,
DFRAC,
FRAC,
OVERSET,
STACKREL,
TBINOM,
TFRAC,
UNDERSET,
)
BIG: dict[str, tuple[str, dict]] = {
# command: (mathml_equivalent, attributes)
r"\Bigg": ("mo", {"minsize": "2.470em", "maxsize": "2.470em"}),
r"\bigg": ("mo", {"minsize": "2.047em", "maxsize": "2.047em"}),
r"\Big": ("mo", {"minsize": "1.623em", "maxsize": "1.623em"}),
r"\big": ("mo", {"minsize": "1.2em", "maxsize": "1.2em"}),
}
BIG_OPEN_CLOSE = {
command + postfix: (tag, {"stretchy": "true", "fence": "true", **attrib})
for command, (tag, attrib) in BIG.items()
for postfix in "lmr"
}
MSTYLE_SIZES: dict[str, tuple[str, dict]] = {
# command: (mathml_equivalent, attributes)
r"\Huge": ("mstyle", {"mathsize": "2.49em"}),
r"\huge": ("mstyle", {"mathsize": "2.07em"}),
r"\LARGE": ("mstyle", {"mathsize": "1.73em"}),
r"\Large": ("mstyle", {"mathsize": "1.44em"}),
r"\large": ("mstyle", {"mathsize": "1.2em"}),
FOOTNOTESIZE: ("mstyle", {"mathsize": "0.85em"}),
r"\normalsize": ("mstyle", {"mathsize": "1em"}),
r"\scriptsize": ("mstyle", {"mathsize": "0.7em"}),
r"\small": ("mstyle", {"mathsize": "0.85em"}),
r"\tiny": ("mstyle", {"mathsize": "0.5em"}),
r"\Tiny": ("mstyle", {"mathsize": "0.6em"}),
}
STYLES: dict[str, tuple[str, dict]] = {
DISPLAYSTYLE: ("mstyle", {"displaystyle": "true", "scriptlevel": "0"}),
TEXTSTYLE: ("mstyle", {"displaystyle": "false", "scriptlevel": "0"}),
SCRIPTSTYLE: ("mstyle", {"displaystyle": "false", "scriptlevel": "1"}),
SCRIPTSCRIPTSTYLE: ("mstyle", {"displaystyle": "false", "scriptlevel": "2"}),
}
CONVERSION_MAP: dict[str, tuple[str, dict]] = {
# command: (mathml_equivalent, attributes)
# tables
**{
matrix: ("mtable", {})
for matrix in MATRICES
if matrix
not in (
DISPLAYLINES,
EQALIGN,
EQALIGNNO,
SMALLMATRIX,
SPLIT,
ALIGN,
ALIGNSTAR,
)
},
DISPLAYLINES: ("mtable", {"rowspacing": "0.5em", "columnspacing": "1em", "displaystyle": "true"}),
EQALIGN: ("mtable", {"displaystyle": "true", "columnspacing": "0em"}),
EQALIGNNO: ("mtable", {"displaystyle": "true", "columnspacing": "0em"}),
SMALLMATRIX: ("mtable", {"rowspacing": "0.1em", "columnspacing": "0.2778em"}),
SPLIT: (
"mtable",
{"displaystyle": "true", "columnspacing": "0em", "rowspacing": "3pt"},
),
ALIGN: (
"mtable",
{"displaystyle": "true", "rowspacing": "3pt"},
),
ALIGNSTAR: (
"mtable",
{"displaystyle": "true", "rowspacing": "3pt"},
),
# subscripts/superscripts
SUBSCRIPT: ("msub", {}),
SUPERSCRIPT: ("msup", {}),
SUBSUP: ("msubsup", {}),
# fractions
BINOM: ("mfrac", {"linethickness": "0"}),
CFRAC: ("mfrac", {}),
DBINOM: ("mfrac", {"linethickness": "0"}),
DFRAC: ("mfrac", {}),
FRAC: ("mfrac", {}),
GENFRAC: ("mfrac", {}),
TBINOM: ("mfrac", {"linethickness": "0"}),
TFRAC: ("mfrac", {}),
# over/under
ACUTE: ("mover", {}),
BAR: ("mover", {}),
BREVE: ("mover", {}),
CHECK: ("mover", {}),
DOT: ("mover", {}),
DDOT: ("mover", {}),
DDDOT: ("mover", {}),
DDDDOT: ("mover", {}),
GRAVE: ("mover", {}),
HAT: ("mover", {"accent": "true"}),
LIMITS: ("munderover", {}),
MATHRING: ("mover", {}),
OVERBRACE: ("mover", {}),
OVERBRACKET: ("mover", {}),
OVERLEFTARROW: ("mover", {}),
OVERLEFTRIGHTARROW: ("mover", {}),
OVERLINE: ("mover", {}),
OVERPAREN: ("mover", {}),
OVERRIGHTARROW: ("mover", {}),
TILDE: ("mover", {}),
OVERSET: ("mover", {}),
STACKREL: ("mover", {}),
UNDERBAR: ("munder", {}),
UNDERBRACE: ("munder", {}),
UNDERBRACKET: ("munder", {}),
UNDERLEFTARROW: ("munder", {}),
UNDERLINE: ("munder", {}),
UNDERPAREN: ("munder", {}),
UNDERRIGHTARROW: ("munder", {}),
UNDERLEFTRIGHTARROW: ("munder", {}),
UNDERSET: ("munder", {}),
VEC: ("mover", {}),
WIDECHECK: ("mover", {}),
WIDEHAT: ("mover", {}),
WIDETILDE: ("mover", {}),
# spaces
COLON: ("mspace", {"width": "0.222em"}),
COMMA: ("mspace", {"width": "0.167em"}),
DOUBLEBACKSLASH: ("mspace", {"linebreak": "newline"}),
ENSPACE: ("mspace", {"width": "0.5em"}),
EXCLAMATION: ("mspace", {"width": "negativethinmathspace"}),
GREATERTHAN: ("mspace", {"width": "0.222em"}),
HSKIP: ("mspace", {}),
HSPACE: ("mspace", {}),
KERN: ("mspace", {}),
MKERN: ("mspace", {}),
MSKIP: ("mspace", {}),
MSPACE: ("mspace", {}),
NEGTHINSPACE: ("mspace", {"width": "negativethinmathspace"}),
NEGMEDSPACE: ("mspace", {"width": "negativemediummathspace"}),
NEGTHICKSPACE: ("mspace", {"width": "negativethickmathspace"}),
THICKSPACE: ("mspace", {"width": "thickmathspace"}),
THINSPACE: ("mspace", {"width": "thinmathspace"}),
QQUAD: ("mspace", {"width": "2em"}),
QUAD: ("mspace", {"width": "1em"}),
SEMICOLON: ("mspace", {"width": "0.278em"}),
SPACEUPPER: ("mspace", {"width": "0.5em"}),
# overlap
CLAP: ("mpadded", {"lspace": "-0.5width", "width": "0px"}),
LLAP: ("mpadded", {"lspace": "-1width", "width": "0px"}),
MATHCLAP: ("mpadded", {"lspace": "-0.5width", "width": "0px"}),
MATHLLAP: ("mpadded", {"lspace": "-1width", "width": "0px"}),
MATHRLAP: ("mpadded", {"width": "0px"}),
RLAP: ("mpadded", {"width": "0px"}),
SHOVELEFT: ("mpadded", {"lspace": "0"}),
SHOVERIGHT: ("mpadded", {"lspace": "0", "width": "0"}),
# enclose
BCANCEL: ("menclose", {"notation": "downdiagonalstrike"}),
BOXED: ("menclose", {"notation": "box"}),
CANCEL: ("menclose", {"notation": "updiagonalstrike"}),
FBOX: ("menclose", {"notation": "box"}),
SOUT: ("menclose", {"notation": "horizontalstrike"}),
XCANCEL: ("menclose", {"notation": "updiagonalstrike downdiagonalstrike"}),
# operators
**BIG,
**BIG_OPEN_CLOSE,
**MSTYLE_SIZES,
**{limit: ("mo", {}) for limit in LIMIT},
LEFT: ("mo", {"stretchy": "true", "fence": "true", "form": "prefix"}),
MIDDLE: ("mo", {"stretchy": "true", "fence": "true", "lspace": "0.05em", "rspace": "0.05em"}),
RIGHT: ("mo", {"stretchy": "true", "fence": "true", "form": "postfix"}),
# styles
COLOR: ("mstyle", {}),
COLORBOX: ("mpadded", {}),
FCOLORBOX: ("mpadded", {}),
SMASH: ("mpadded", {}),
**STYLES,
# others
SQRT: ("msqrt", {}),
ROOT: ("mroot", {}),
EMPH: ("mtext", {"mathvariant": "italic"}),
HREF: ("mrow", {}),
TEXT: ("mtext", {}),
TEXTBF: ("mtext", {"mathvariant": "bold"}),
TEXTIT: ("mtext", {"mathvariant": "italic"}),
TEXTMD: ("mtext", {}),
TEXTNORMAL: ("mtext", {}),
TEXTRM: ("mtext", {}),
TEXTSF: ("mtext", {"mathvariant": "sans-serif"}),
TEXTTT: ("mtext", {"mathvariant": "monospace"}),
TAG: ("mtext", {}),
TAGSTAR: ("mtext", {}),
TEXTUP: ("mtext", {}),
VERB: ("mtext", {"mathvariant": "monospace"}),
HBOX: ("mtext", {}),
MBOX: ("mtext", {}),
HPHANTOM: ("mphantom", {}),
PHANTOM: ("mphantom", {}),
LOWER: ("mpadded", {}),
MATHBIN: ("mo", {"lspace": "0.22em", "rspace": "0.22em"}),
MATHCLOSE: ("mo", {"stretchy": "false", "lspace": "0em", "rspace": "0em"}),
MATHINNER: ("mpadded", {}),
MATHOP: ("mo", {}),
MATHOPEN: ("mo", {"stretchy": "false", "lspace": "0em", "rspace": "0em"}),
MATHORD: ("mi", {}),
MATHPUNCT: ("mo", {"separator": "true", "lspace": "0em", "rspace": "0.17em"}),
MATHREL: ("mo", {}),
MOVELEFT: ("mpadded", {}),
MOVERIGHT: ("mpadded", {}),
RAISE: ("mpadded", {}),
VCENTER: ("mpadded", {}),
VPHANTOM: ("mphantom", {}),
BRA: ("mrow", {}),
BRAKET: ("mrow", {}),
KET: ("mrow", {}),
SIDESET: ("mrow", {}),
SKEW: ("mrow", {}),
MOD: ("mi", {}),
PMOD: ("mi", {}),
POD: ("mi", {}),
BMOD: ("mo", {}),
**{arrow: ("mover", {}) for arrow in EXTENSIBLE_ARROWS},
}
DIACRITICS: dict[str, tuple[str, dict[str, str]]] = {
ACUTE: ("´", {}),
BAR: ("¯", {"stretchy": "true"}),
BREVE: ("˘", {}),
CHECK: ("ˇ", {}),
DOT: ("˙", {}),
DDOT: ("¨", {}),
DDDOT: ("⃛", {}),
DDDDOT: ("⃜", {}),
GRAVE: ("`", {}),
HAT: ("^", {}),
MATHRING: ("˚", {}),
OVERBRACE: ("⏞", {}),
OVERBRACKET: ("⎴", {"stretchy": "true"}),
OVERLEFTARROW: ("←", {}),
OVERLEFTRIGHTARROW: ("↔", {}),
OVERLINE: ("―", {"accent": "true"}),
OVERPAREN: ("⏜", {}),
OVERRIGHTARROW: ("→", {}),
TILDE: ("~", {"stretchy": "false"}),
UNDERBAR: ("―", {"stretchy": "true", "accent": "true"}),
UNDERBRACE: ("⏟", {}),
UNDERBRACKET: ("⎵", {"stretchy": "true"}),
UNDERLEFTARROW: ("←", {}),
UNDERLEFTRIGHTARROW: ("↔", {}),
UNDERLINE: ("―", {"accent": "true"}),
UNDERPAREN: ("⏝", {}),
UNDERRIGHTARROW: ("→", {}),
VEC: ("→", {"stretchy": "true"}),
WIDECHECK: ("ˇ", {"stretchy": "true"}),
WIDEHAT: ("^", {}),
WIDETILDE: ("~", {}),
}
================================================
FILE: latex2mathml/converter.py
================================================
import copy
import enum
import re
from typing import Iterable, Iterator, Optional
from xml.etree.ElementTree import Element, SubElement, tostring
from xml.sax.saxutils import unescape
from latex2mathml import commands
from latex2mathml.symbols_parser import convert_symbol
from latex2mathml.walker import MULTIPRIMES, Node, walk
COLUMN_ALIGNMENT_MAP = {"r": "right", "l": "left", "c": "center"}
OPERATORS = frozenset(
(
"+",
"-",
"*",
"/",
"(",
")",
"=",
",",
"?",
"[",
"]",
"|",
r"\|",
"!",
r"\{",
r"\}",
r">",
r"<",
r".",
r"\ast",
r"\bigotimes",
r"\cdot",
r"\centerdot",
r"\div",
r"\dots",
r"\dotsc",
r"\dotso",
r"\gt",
r"\ldotp",
r"\lt",
r"\lvert",
r"\lVert",
r"\lvertneqq",
r"\ngeqq",
r"\omicron",
r"\rvert",
r"\rVert",
r"\S",
r"\smallfrown",
r"\smallint",
r"\smallsmile",
r"\surd",
r"\times",
r"\varsubsetneqq",
r"\varsupsetneqq",
)
)
MATH_MODE_PATTERN = re.compile(r"\\\$|\$|\\?[^\\$]+")
NUMBER_PATTERN = re.compile(r"\d+(\.\d+)?")
MOVABLE_LIMIT_TEXTS = {
commands.ARGMAX: "arg max",
commands.ARGMIN: "arg min",
commands.DETERMINANT: "det",
commands.GCD: "gcd",
commands.INJLIM: "inj lim",
commands.INTOP: "∫",
commands.LIMINF: "lim inf",
commands.LIMSUP: "lim sup",
commands.PLIM: "plim",
commands.PR: "Pr",
commands.PROJLIM: "proj lim",
commands.VARINJLIM: "inj lim",
commands.VARLIMINF: "lim inf",
commands.VARLIMSUP: "lim sup",
commands.VARPROJLIM: "proj lim",
}
class Mode(enum.Enum):
TEXT = enum.auto()
MATH = enum.auto()
class Converter:
def __init__(self, xmlns: str = "http://www.w3.org/1998/Math/MathML", display: str = "inline") -> None:
self.xmlns = xmlns
self.display = display
self.equation_counter = 0
self.macros: dict[str, tuple[list[str], int]] = {}
def convert(self, latex: str, parent: Optional[Element] = None) -> str:
return self._convert(self.convert_to_element(latex, parent))
def convert_to_element(self, latex: str, parent: Optional[Element] = None) -> Element:
tag = "math"
attrib = {"xmlns": self.xmlns, "display": self.display}
math = Element(tag, attrib) if parent is None else SubElement(parent, tag, attrib)
row = SubElement(math, "mrow")
self._convert_group(iter(walk(latex, self.display, macros=self.macros)), row)
return math
def reset(self) -> None:
self.equation_counter = 0
self.macros = {}
@staticmethod
def _convert(tree: Element) -> str:
return unescape(tostring(tree, encoding="unicode"))
def _convert_matrix(
self, nodes: Iterator[Node], parent: Element, command: str, alignment: Optional[str] = None
) -> None:
row = None
cell = None
col_index = 0
col_alignment = None
max_col_size = 0
row_index = 0
row_lines: list[str] = []
hfil_indexes: list[bool] = []
numbered = command == commands.ALIGN
skip_number = False
for node in nodes:
if row is None:
row = SubElement(parent, "mtr")
if cell is None:
col_alignment, col_index = self._get_column_alignment(alignment, col_alignment, col_index)
cell = self._make_matrix_cell(row, col_alignment)
if node.token == commands.BRACES:
self._convert_group(iter([node]), cell)
elif node.token == "&":
self._set_cell_alignment(cell, hfil_indexes)
hfil_indexes = []
col_alignment, col_index = self._get_column_alignment(alignment, col_alignment, col_index)
cell = self._make_matrix_cell(row, col_alignment)
if command in (commands.SPLIT, commands.ALIGN, commands.ALIGNSTAR) and col_index % 2 == 0:
SubElement(cell, "mi")
elif node.token in (commands.DOUBLEBACKSLASH, commands.CARRIAGERETURN):
self._set_cell_alignment(cell, hfil_indexes)
hfil_indexes = []
if numbered and not skip_number:
self.equation_counter += 1
eqn_cell = SubElement(row, "mtd")
eqn_num = SubElement(eqn_cell, "mtext")
eqn_num.text = f"({self.equation_counter})"
skip_number = False
row_index += 1
if col_index > max_col_size:
max_col_size = col_index
col_index = 0
col_alignment, col_index = self._get_column_alignment(alignment, col_alignment, col_index)
row = SubElement(parent, "mtr")
cell = self._make_matrix_cell(row, col_alignment)
elif node.token in (commands.NONUMBER, commands.NOTAG):
skip_number = True
elif node.token == commands.HLINE:
row_lines.append("solid")
elif node.token == commands.HDASHLINE:
row_lines.append("dashed")
elif node.token == commands.HFIL:
hfil_indexes.append(True)
else:
if row_index > len(row_lines):
row_lines.append("none")
hfil_indexes.append(False)
self._convert_group(iter([node]), cell)
if col_index > max_col_size:
max_col_size = col_index
if any(r != "none" for r in row_lines):
parent.set("rowlines", " ".join(row_lines))
if row is not None and cell is not None and len(cell) == 0:
parent.remove(row)
row = None
if numbered and row is not None and not skip_number:
self.equation_counter += 1
eqn_cell = SubElement(row, "mtd")
eqn_num = SubElement(eqn_cell, "mtext")
eqn_num.text = f"({self.equation_counter})"
if max_col_size and command in (commands.ALIGN, commands.ALIGNSTAR):
spacing = ("0em", "2em")
multiplier = max_col_size // len(spacing)
parent.set("columnspacing", " ".join(spacing * multiplier))
def _convert_group(
self, nodes: Iterable[Node], parent: Element, font: Optional[dict[str, Optional[str]]] = None
) -> None:
_font = font
for node in nodes:
token = node.token
if token in (*commands.MSTYLE_SIZES, *commands.STYLES):
node = Node(token=token, children=tuple(n for n in nodes))
self._convert_command(node, parent, _font)
elif token == commands.UNICODE:
arg = node.children[0] if node.children else None
if arg and arg.children:
code = "".join(c.token for c in arg.children)
elif arg:
code = arg.token
else:
code = ""
element = SubElement(parent, "mi")
element.text = f"&#x{code.lstrip('x')};"
elif token == commands.RULE:
attrs = node.attributes or {}
SubElement(parent, "mspace", mathbackground="black", width=attrs["width"], height=attrs["height"])
elif token in commands.CONVERSION_MAP or token in (commands.MOD, commands.PMOD, commands.POD):
self._convert_command(node, parent, _font)
elif token in commands.LOCAL_FONTS and node.children is not None:
self._convert_group(iter(node.children), parent, commands.LOCAL_FONTS[token])
elif token.startswith(commands.MATH) and node.children is not None:
self._convert_group(iter(node.children), parent, _font)
elif token in commands.GLOBAL_FONTS.keys():
_font = commands.GLOBAL_FONTS.get(token)
elif node.children is None:
self._convert_symbol(node, parent, _font)
else:
attributes = node.attributes or {}
_row = SubElement(parent, "mrow", attrib=attributes)
self._convert_group(iter(node.children), _row, _font)
def _convert_command(self, node: Node, parent: Element, font: Optional[dict[str, Optional[str]]] = None) -> None:
command = node.token
modifier = node.modifier
if command in (commands.SUBSTACK, commands.SMALLMATRIX):
parent = SubElement(parent, "mstyle", scriptlevel="1")
elif command == commands.CASES:
parent = SubElement(parent, "mrow")
lbrace = SubElement(parent, "mo", {"stretchy": "true", "fence": "true", "form": "prefix"})
lbrace.text = "&#x{};".format(convert_symbol(commands.LBRACE))
elif command in (commands.DBINOM, commands.DFRAC):
parent = SubElement(parent, "mstyle", displaystyle="true", scriptlevel="0")
elif command == commands.HPHANTOM:
parent = SubElement(parent, "mpadded", height="0", depth="0")
elif command == commands.VPHANTOM:
parent = SubElement(parent, "mpadded", width="0")
elif command in (commands.TBINOM, commands.HBOX, commands.MBOX, commands.TFRAC):
parent = SubElement(parent, "mstyle", displaystyle="false", scriptlevel="0")
elif command in (commands.MOD, commands.PMOD, commands.POD):
SubElement(parent, "mspace", width="1em")
tag, attributes = copy.deepcopy(commands.CONVERSION_MAP[command])
if node.attributes is not None and node.token != commands.SKEW:
attributes.update(node.attributes)
if command == commands.LEFT:
parent = SubElement(parent, "mrow")
self._append_delimiter_element(node, parent, is_prefix=True)
alignment, column_lines = self._get_alignment_and_column_lines(node.alignment)
if column_lines:
attributes["columnlines"] = column_lines
if command == commands.SUBSUP and node.children is not None and node.children[0].token == commands.GCD:
tag = "munderover"
elif command == commands.SUPERSCRIPT and modifier in (commands.LIMITS, commands.OVERBRACE):
tag = "mover"
elif command == commands.SUBSCRIPT and modifier in (commands.LIMITS, commands.UNDERBRACE):
tag = "munder"
elif command == commands.SUBSUP and modifier in (commands.LIMITS, commands.OVERBRACE, commands.UNDERBRACE):
tag = "munderover"
elif command in commands.EXTENSIBLE_ARROWS and node.children is not None and len(node.children) == 2:
tag = "munderover"
element = SubElement(parent, tag, attributes)
if command in commands.LIMIT:
element.text = command[1:]
elif command in (commands.MOD, commands.PMOD):
element.text = "mod"
SubElement(parent, "mspace", width="0.333em")
elif command == commands.POD:
pass
elif command == commands.BMOD:
element.text = "mod"
elif command in commands.EXTENSIBLE_ARROWS:
style = SubElement(element, "mstyle", scriptlevel="0")
arrow = SubElement(style, "mo")
arrow.text = commands.EXTENSIBLE_ARROWS[command]
elif command == commands.BRA:
SubElement(element, "mo", stretchy="false").text = "⟨"
elif command == commands.KET:
SubElement(element, "mo").text = "∣"
elif command == commands.BRAKET:
SubElement(element, "mo", stretchy="false").text = "⟨"
elif node.text is not None:
if command == commands.MIDDLE:
element.text = "&#x{};".format(convert_symbol(node.text))
elif command == commands.HBOX:
mtext: Optional[Element] = element
for text, mode in self._separate_by_mode(node.text):
if mode == Mode.TEXT:
if mtext is None:
mtext = SubElement(parent, tag, attributes)
mtext.text = text.replace(" ", " ")
self._set_font(mtext, "mtext", font)
mtext = None
else:
_row = SubElement(parent, "mrow")
self._convert_group(iter(walk(text, macros=self.macros)), _row)
else:
if command in (
commands.FBOX,
commands.LLAP,
commands.RLAP,
commands.CLAP,
commands.COLORBOX,
commands.FCOLORBOX,
):
element = SubElement(element, "mtext")
if command == commands.TAG:
element.text = f"({node.text})"
elif command == commands.TAGSTAR:
element.text = node.text
else:
element.text = node.text.replace(" ", " ")
self._set_font(element, "mtext", font)
elif node.delimiter is not None and command not in (commands.FRAC, commands.GENFRAC):
if node.delimiter != ".":
symbol = convert_symbol(node.delimiter)
element.text = node.delimiter if symbol is None else "&#x{};".format(symbol)
if node.children is not None:
_parent = element
if command in (commands.LEFT, commands.MOD, commands.PMOD, commands.POD):
_parent = parent
if command in commands.MATRICES:
if command == commands.CASES:
alignment = "l"
elif command in (commands.SPLIT, commands.ALIGN, commands.ALIGNSTAR):
alignment = "rl"
self._convert_matrix(iter(node.children), _parent, command, alignment=alignment)
elif command == commands.CFRAC:
for child in node.children:
p = SubElement(_parent, "mstyle", displaystyle="false", scriptlevel="0")
self._convert_group(iter([child]), p, font)
elif command == commands.SIDESET:
left, right = node.children
self._convert_group(iter([left]), _parent, font)
fill = SubElement(_parent, "mstyle", scriptlevel="0")
SubElement(fill, "mspace", width="-0.167em")
self._convert_group(iter([right]), _parent, font)
elif command == commands.SKEW:
child = node.children[0]
new_node = Node(
token=child.token,
children=(
Node(
token=commands.BRACES,
children=(*child.children, Node(token=commands.MKERN, attributes=node.attributes)),
),
),
)
self._convert_group(iter([new_node]), _parent, font)
elif command in commands.EXTENSIBLE_ARROWS:
for child in node.children:
padded = SubElement(
_parent,
"mpadded",
{"width": "+0.833em", "lspace": "0.556em", "voffset": "-.2em", "height": "-.2em"},
)
self._convert_group(iter([child]), padded, font)
SubElement(padded, "mspace", depth=".25em")
else:
self._convert_group(iter(node.children), _parent, font)
if command in commands.DIACRITICS:
text, diacritic_attrs = copy.deepcopy(commands.DIACRITICS[command])
SubElement(element, "mo", diacritic_attrs).text = text
if command == commands.BRA:
SubElement(element, "mo").text = "∣"
elif command == commands.KET:
SubElement(element, "mo", stretchy="false").text = "⟩"
elif command == commands.BRAKET:
SubElement(element, "mo", stretchy="false").text = "⟩"
self._append_delimiter_element(node, parent, is_prefix=False)
def _append_delimiter_element(self, node: Node, parent: Element, is_prefix: bool) -> None:
delimiter_index = 0 if is_prefix else 1
size = "2.047em"
if parent.attrib.get("displaystyle") == "false" or node.token == commands.TBINOM:
size = "1.2em"
if node.token in (r"\pmatrix", commands.PMOD, commands.POD):
self._convert_and_append_command(r"\lparen" if is_prefix else r"\rparen", parent)
elif node.token in (commands.BINOM, commands.DBINOM, commands.TBINOM):
self._convert_and_append_command(
r"\lparen" if is_prefix else r"\rparen", parent, {"minsize": size, "maxsize": size}
)
elif node.token == r"\bmatrix":
self._convert_and_append_command(r"\lbrack" if is_prefix else r"\rbrack", parent)
elif node.token == r"\Bmatrix":
self._convert_and_append_command(r"\lbrace" if is_prefix else r"\rbrace", parent)
elif node.token == r"\vmatrix":
self._convert_and_append_command(r"\vert", parent)
elif node.token == r"\Vmatrix":
self._convert_and_append_command(r"\Vert", parent)
elif (
node.token in (commands.FRAC, commands.GENFRAC)
and node.delimiter is not None
and node.delimiter[delimiter_index] != "."
):
self._convert_and_append_command(
node.delimiter[delimiter_index], parent, {"minsize": size, "maxsize": size}
)
elif not is_prefix and node.token == commands.SKEW and node.attributes is not None:
SubElement(parent, "mspace", width="-" + node.attributes["width"])
def _convert_symbol(self, node: Node, parent: Element, font: Optional[dict[str, Optional[str]]] = None) -> None:
token = node.token
attributes = node.attributes or {}
symbol = convert_symbol(token)
if token == MULTIPRIMES:
count = int(node.text or "0")
element = SubElement(parent, "mi", attrib=attributes)
element.text = "′" * count
return
if NUMBER_PATTERN.match(token):
element = SubElement(parent, "mn", attrib=attributes)
element.text = token
self._set_font(element, element.tag, font)
elif token in OPERATORS:
element = SubElement(parent, "mo", attrib=attributes)
element.text = token if symbol is None else "&#x{};".format(symbol)
if token == r"\|":
element.attrib["fence"] = "false"
if token == r"\smallint":
element.attrib["largeop"] = "false"
if token in ("(", ")", "[", "]", "|", r"\|", r"\{", r"\}", r"\surd"):
element.attrib["stretchy"] = "false"
self._set_font(element, "fence", font)
else:
self._set_font(element, element.tag, font)
elif (
symbol
and (
int(symbol, 16) in range(int("2200", 16), int("22FF", 16) + 1)
or int(symbol, 16) in range(int("2190", 16), int("21FF", 16) + 1)
)
or symbol == "."
):
element = SubElement(parent, "mo", attrib=attributes)
element.text = "&#x{};".format(symbol)
self._set_font(element, element.tag, font)
elif token in (r"\ ", "~", commands.NOBREAKSPACE, commands.SPACE):
element = SubElement(parent, "mtext", attrib=attributes)
element.text = " "
self._set_font(element, "mtext", font)
elif token == commands.NOT:
mpadded = SubElement(parent, "mpadded", width="0")
element = SubElement(mpadded, "mtext")
element.text = "⧸"
elif token in MOVABLE_LIMIT_TEXTS:
element = SubElement(parent, "mo", attrib={"movablelimits": "true", **attributes})
element.text = MOVABLE_LIMIT_TEXTS[token]
self._set_font(element, element.tag, font)
elif token in (commands.MATHSTRUT, commands.STRUT):
mpadded = SubElement(parent, "mpadded", width="0px")
mphantom = SubElement(mpadded, "mphantom")
SubElement(mphantom, "mo", stretchy="false").text = "("
elif token == commands.IDOTSINT:
_parent = SubElement(parent, "mrow", attrib=attributes)
for s in ("∫", "⋯", "∫"):
element = SubElement(_parent, "mo")
element.text = s
elif token in (commands.LATEX, commands.TEX):
_parent = SubElement(parent, "mrow", attrib=attributes)
if token == commands.LATEX:
mi_l = SubElement(_parent, "mi")
mi_l.text = "L"
SubElement(_parent, "mspace", width="-.325em")
mpadded = SubElement(_parent, "mpadded", height="+.21ex", depth="-.21ex", voffset="+.21ex")
mstyle = SubElement(mpadded, "mstyle", displaystyle="false", scriptlevel="1")
mrow = SubElement(mstyle, "mrow")
mi_a = SubElement(mrow, "mi")
mi_a.text = "A"
SubElement(_parent, "mspace", width="-.17em")
self._set_font(mi_l, mi_l.tag, font)
self._set_font(mi_a, mi_a.tag, font)
mi_t = SubElement(_parent, "mi")
mi_t.text = "T"
SubElement(_parent, "mspace", width="-.14em")
mpadded = SubElement(_parent, "mpadded", height="-.5ex", depth="+.5ex", voffset="-.5ex")
mrow = SubElement(mpadded, "mrow")
mi_e = SubElement(mrow, "mi")
mi_e.text = "E"
SubElement(_parent, "mspace", width="-.115em")
mi_x = SubElement(_parent, "mi")
mi_x.text = "X"
self._set_font(mi_t, mi_t.tag, font)
self._set_font(mi_e, mi_e.tag, font)
self._set_font(mi_x, mi_x.tag, font)
elif token.startswith(commands.OPERATORNAME):
for prefix in (commands.OPERATORNAMEWITHLIMITS, commands.OPERATORNAMESTAR, commands.OPERATORNAME):
if token.startswith(prefix):
attrib = {"movablelimits": "true", **attributes} if prefix != commands.OPERATORNAME else attributes
element = SubElement(parent, "mo", attrib=attrib)
element.text = token[len(prefix) + 1 : -1]
break
elif token.startswith(commands.BACKSLASH):
element = SubElement(parent, "mi", attrib=attributes)
if symbol:
element.text = "&#x{};".format(symbol)
elif token in commands.FUNCTIONS:
element.text = token[1:]
else:
element.text = token
self._set_font(element, element.tag, font)
else:
element = SubElement(parent, "mi", attrib=attributes)
element.text = token
self._set_font(element, element.tag, font)
@staticmethod
def _set_font(element: Element, key: str, font: Optional[dict[str, Optional[str]]]) -> None:
if font is None:
return
_font = font[key]
if _font is not None:
element.attrib["mathvariant"] = _font
@staticmethod
def _set_cell_alignment(cell: Element, hfil_indexes: list[bool]) -> None:
if cell is not None and any(hfil_indexes) and len(hfil_indexes) > 1:
if hfil_indexes[0] and not hfil_indexes[-1]:
cell.attrib["columnalign"] = "right"
elif not hfil_indexes[0] and hfil_indexes[-1]:
cell.attrib["columnalign"] = "left"
@staticmethod
def _get_column_alignment(
alignment: Optional[str], column_alignment: Optional[str], column_index: int
) -> tuple[Optional[str], int]:
if alignment:
try:
column_alignment = COLUMN_ALIGNMENT_MAP.get(alignment[column_index])
except IndexError:
column_alignment = COLUMN_ALIGNMENT_MAP.get(alignment[column_index % len(alignment)])
column_index += 1
return column_alignment, column_index
@staticmethod
def _make_matrix_cell(row: Element, column_alignment: Optional[str]) -> Element:
if column_alignment:
return SubElement(row, "mtd", columnalign=column_alignment)
return SubElement(row, "mtd")
@staticmethod
def _get_alignment_and_column_lines(
alignment: Optional[str] = None,
) -> tuple[Optional[str], Optional[str]]:
if alignment is None:
return None, None
if "|" not in alignment:
return alignment, None
_alignment = ""
column_lines: list[str] = []
for c in alignment:
if c == "|":
column_lines.append("solid")
else:
_alignment += c
if len(_alignment) - len(column_lines) == 2:
column_lines.append("none")
return _alignment, " ".join(column_lines)
@staticmethod
def _separate_by_mode(text: str) -> Iterator[tuple[str, Mode]]:
string = ""
is_math_mode = False
for match in MATH_MODE_PATTERN.findall(text):
if match == "$":
yield string, Mode.MATH if is_math_mode else Mode.TEXT
string = ""
is_math_mode = not is_math_mode
else:
string += match
if string:
yield string, Mode.MATH if is_math_mode else Mode.TEXT
@staticmethod
def _convert_and_append_command(command: str, parent: Element, attributes: Optional[dict[str, str]] = None) -> None:
code_point = convert_symbol(command)
mo = SubElement(parent, "mo", attributes if attributes is not None else {})
mo.text = "&#x{};".format(code_point) if code_point else command
def convert(
latex: str,
xmlns: str = "http://www.w3.org/1998/Math/MathML",
display: str = "inline",
parent: Optional[Element] = None,
) -> str:
return Converter(xmlns=xmlns, display=display).convert(latex, parent=parent)
def convert_to_element(
latex: str,
xmlns: str = "http://www.w3.org/1998/Math/MathML",
display: str = "inline",
parent: Optional[Element] = None,
) -> Element:
return Converter(xmlns=xmlns, display=display).convert_to_element(latex, parent=parent)
def main() -> None: # pragma: no cover
import argparse
import sys
parser = argparse.ArgumentParser(description="Pure Python library for LaTeX to MathML conversion")
parser.add_argument("-V", "--version", dest="version", action="store_true", required=False, help="Show version")
parser.add_argument("-b", "--block", dest="block", action="store_true", required=False, help="Display block")
required = parser.add_argument_group("required arguments")
group = required.add_mutually_exclusive_group(required=False)
group.add_argument("-t", "--text", dest="text", type=str, required=False, help="Text")
group.add_argument("-f", "--file", dest="file", type=str, required=False, help="File")
group.add_argument("-s", "--stdin", dest="stdin", action="store_true", required=False, help="Stdin")
arguments = parser.parse_args()
display = "block" if arguments.block else "inline"
if arguments.version:
import latex2mathml
print("latex2mathml", latex2mathml.__version__)
elif arguments.text:
print(convert(arguments.text, display=display))
elif arguments.file:
with open(arguments.file) as f:
print(convert(f.read(), display=display))
elif arguments.stdin:
print(convert(sys.stdin.read(), display=display))
if __name__ == "__main__": # pragma: no cover
main()
================================================
FILE: latex2mathml/exceptions.py
================================================
class NumeratorNotFoundError(Exception):
pass
class DenominatorNotFoundError(Exception):
pass
class ExtraLeftOrMissingRightError(Exception):
pass
class MissingSuperScriptOrSubscriptError(Exception):
pass
class DoubleSubscriptsError(Exception):
pass
class DoubleSuperscriptsError(Exception):
pass
class NoAvailableTokensError(Exception):
pass
class InvalidStyleForGenfracError(Exception):
pass
class MissingEndError(Exception):
pass
class InvalidAlignmentError(Exception):
pass
class InvalidWidthError(Exception):
pass
class LimitsMustFollowMathOperatorError(Exception):
pass
================================================
FILE: latex2mathml/py.typed
================================================
# PEP 581
================================================
FILE: latex2mathml/symbols_parser.py
================================================
import os
import re
SYMBOLS_FILE: str = os.path.join(os.path.dirname(os.path.realpath(__file__)), "unimathsymbols.txt")
def convert_symbol(symbol: str) -> str | None:
return SYMBOLS.get(symbol, None)
def parse_symbols() -> dict[str, str]:
_symbols: dict[str, str] = {}
with open(SYMBOLS_FILE, encoding="utf-8") as f:
for line in f:
if line.startswith("#"):
continue
columns = line.strip().split("^")
_unicode = columns[0]
latex = columns[2]
unicode_math = columns[3]
if latex and latex not in _symbols:
_symbols[latex] = _unicode
if unicode_math and unicode_math not in _symbols:
_symbols[unicode_math] = _unicode
for equivalent in re.findall(r"[=#]\s*(\\[^,^ ]+),?", columns[-1]):
if equivalent not in _symbols:
_symbols[equivalent] = _unicode
_symbols.update(
{
r"\And": _symbols[r"\ampersand"],
r"\bigcirc": _symbols[r"\lgwhtcircle"],
r"\Box": _symbols[r"\square"],
r"\circledS": "024C8",
r"\degree": "000B0",
r"\diagdown": "02572",
r"\diagup": "02571",
r"\dots": "02026",
r"\dotsb": _symbols[r"\cdots"],
r"\dotsc": "02026",
r"\dotsi": _symbols[r"\cdots"],
r"\dotsm": _symbols[r"\cdots"],
r"\dotso": "02026",
r"\emptyset": "02205",
r"\gggtr": "022D9",
r"\gvertneqq": "02269",
r"\gt": _symbols[r"\greater"],
r"\ldotp": _symbols[r"\period"],
r"\llless": _symbols[r"\lll"],
r"\lt": _symbols[r"\less"],
r"\lvert": _symbols[r"\vert"],
r"\lVert": _symbols[r"\Vert"],
r"\lvertneqq": _symbols[r"\lneqq"],
r"\ngeqq": _symbols[r"\ngeq"],
r"\nshortmid": _symbols[r"\nmid"],
r"\nshortparallel": _symbols[r"\nparallel"],
r"\nsubseteqq": _symbols[r"\nsubseteq"],
r"\omicron": _symbols[r"\upomicron"],
r"\rvert": _symbols[r"\vert"],
r"\rVert": _symbols[r"\Vert"],
r"\shortmid": _symbols[r"\mid"],
r"\smallfrown": _symbols[r"\frown"],
r"\smallint": "0222B",
r"\smallsmile": _symbols[r"\smile"],
r"\surd": _symbols[r"\sqrt"],
r"\thicksim": "0223C",
r"\thickapprox": _symbols[r"\approx"],
r"\varsubsetneqq": _symbols[r"\subsetneqq"],
r"\varsupsetneq": "0228B",
r"\varsupsetneqq": _symbols[r"\supsetneqq"],
}
)
return _symbols
SYMBOLS: dict[str, str] = parse_symbols()
================================================
FILE: latex2mathml/tokenizer.py
================================================
import re
from typing import Iterator
from latex2mathml import commands
from latex2mathml.symbols_parser import convert_symbol
UNITS = ("in", "mm", "cm", "pt", "em", "ex", "pc", "bp", "dd", "cc", "sp", "mu")
PATTERN = re.compile(
rf"""
(?P<comment>%[^\n]+) |
(?P<letter>[a-zA-Z]) |
(?P<subsup_operator>[_^])(?P<subsup_digit>\d) |
(?P<dimension>-?\d+(?:\.\d+)?\s*(?:{"|".join(UNITS)})) |
(?P<number>\d+(?:\.\d+)?) |
(?P<dot_decimal>\.\d*) |
(?P<escaped>\\[\\\[\]{{}}\s!,:>;|_%#$&]) |
(?P<begin_end>\\(?:begin|end)\s*{{[a-zA-Z]+\*?}}) |
(?P<operatorname>\\operatorname(?:withlimits|\*)?\s*{{[a-zA-Z\s*]+\*?\s*}}) |
(?P<text_cmd>\\(?:cla(?:p|ss)|color(?!box)|emph|fbox|hbox|href|llap|mbox|rlap|style
|tag\*?|text(?:bf|color|it|md|normal|rm|sf|tt|up)?|underbar))\s*{{(?P<text_content>[^}}]*)}} |
(?P<frac_cmd>\\[cdt]?frac)\s*(?P<frac_arg1>[.\d])\s*(?P<frac_arg2>[.\d])? |
(?P<math_font>\\math(?!ring|bin|close|inner|op|open|ord|punct|rel|strut)
[a-z]+)(?P<math_open>{{)(?P<math_arg>[a-zA-Z])(?P<math_close>}}) |
(?P<verb>\\verb(?P<verb_delim>.)(?P<verb_content>.*?)(?P=verb_delim)) |
(?P<command>\\[a-zA-Z]+) |
(?P<char>\S)
""",
re.VERBOSE,
)
def tokenize(latex_string: str, skip_comments: bool = True) -> Iterator[str]:
"""
Converts Latex string into tokens.
:param latex_string: Latex string.
:param skip_comments: Flag to skip comments (default=True).
"""
for match in PATTERN.finditer(latex_string):
tokens = tuple(filter(lambda x: x is not None, match.groups()))
if tokens[0].startswith(commands.VERB):
yield commands.VERB
yield tokens[2] # verb_content
continue
if tokens[0].startswith(commands.MATH) and tokens[0] not in commands.MATH_NON_FONT_COMMANDS:
full_math = "".join(tokens)
symbol = convert_symbol(full_math)
if symbol:
yield f"&#x{symbol};"
continue
for captured in tokens:
if skip_comments and captured.startswith("%"):
break
if captured.endswith(UNITS) and captured[0:1].isdigit():
yield captured.replace(" ", "")
continue
if captured.startswith((commands.BEGIN, commands.END, commands.OPERATORNAME)):
yield "".join(captured.split(" "))
continue
yield captured
================================================
FILE: latex2mathml/unimathsymbols.txt
================================================
# Unicode characters and corresponding LaTeX math mode commands
# *************************************************************
#
# :Copyright: © 2011 Günter Milde
# :Date: Last revised 2011-11-08
# :Licence: This work may be distributed and/or modified under the
# conditions of the `LaTeX Project Public License`_,
# either version 1.3 of this license or (at your option)
# any later version.
#
# .. _LaTeX Project Public License: http://www.latex-project.org/lppl.txt
#
# This is a mapping of mathematical Unicode characters to corresponding
# (La)TeX commands.
#
# While the contents of this file represent the best information
# available to the author as of the date referenced above, it
# contains omissions and maybe errors. It is likely that the
# information in this file will change from time to time.
#
# The character encoding of the file is UTF-8.
#
# Each data record consists of 8 fields. Fields are delimited by “^”.
# Spaces adjacent to the delimiter are not significant. The number and
# type of fields in this file may change in future versions.
#
# 1. code point (Unicode character number)
#
# There may be more than one record for one code point,
# if there are different TeX commands for the same character.
# (changed 2015-09-21, before the code point was unique.)
#
# 2. literal character (UTF-8 encoded)
#
# 3. (La)TeX _`command`
#
# Preferred representation of the character in (La)TeX.
# Alternative commands are listed in the comments_ field.
#
# 4. Unicode math character class (after MathClassEx_).
#
# .. _MathClassEx:
# http://www.unicode.org/Public/math/revision-11/MathClassEx-11.txt
#
# The class can be one of:
#
# :N: Normal- includes all digits and symbols requiring only one form
# :A: Alphabetic
# :B: Binary
# :C: Closing – usually paired with opening delimiter
# :D: Diacritic
# :F: Fence - unpaired delimiter (often used as opening or closing)
# :G: Glyph_Part- piece of large operator
# :L: Large -n-ary or Large operator, often takes limits
# :O: Opening – usually paired with closing delimiter
# :P: Punctuation
# :R: Relation- includes arrows
# :S: Space
# :U: Unary – operators that are only unary
# :V: Vary – operators that can be unary or binary depending on context
# :X: Special –characters not covered by other classes
#
# C, O, and F operators are stretchy. In addition some binary
# operators, such as 002F are stretchy as noted in the descriptive
# comments. The classes are also useful in determining extra spacing
# around the operators as discussed in UTR#25.
#
# 5. TeX math category (after unimath-symbols_)
#
# .. _unimath-symbols:
# http://mirror.ctan.org/macros/latex/contrib/unicode-math/unimath-symbols.pdf
#
# 6. requirements and conflicts
#
# Space delimited list of LaTeX packages or features [1]_ providing
# the LaTeX command_ or conflicting with it.
#
# Packages/features preceded by a HYPHEN-MINUS (-) use the command
# for a different character or purpose.
#
# To save space, packages providing/modifying (almost) all commands
# of a feature or another package are not listed here but in the
# ``packages.txt`` file.
#
# .. [1] A feature can be a set of commands common to several packages,
# (e.g. ``mathbb`` or ``slantedGreek``) or a constraint (e.g.
# ``literal`` mapping plain characters to upright face).
#
# 8. descriptive _`comments`
#
# The descriptive comments provide more information about the
# character, or its specific appearance or use.
#
# Some descriptions contain references to related commands,
# marked by a character describing the relation
#
# :=: equals (alias commands),
# :#: approx (compat mapping, different character with same glyph),
# :x: → cross reference/see also (related, false friends, and name clashes),
# :t: text (text mode command),
#
# followed by requirements in parantheses, and
# delimited by commas.
#
# Comments in UPPERCASE are Unicode character names
#
# no.^chr^LaTeX^unicode-math^cls^category^requirements^comments
00020^ ^^^S^^^SPACE
00021^!^!^\exclam^N^mathpunct^^EXCLAMATION MARK
00023^#^\#^\octothorpe^N^mathord^-oz^# \# (oz), NUMBER SIGN
00024^$^\$^\mathdollar^N^mathord^^= \mathdollar, DOLLAR SIGN
00025^%^\%^\percent^N^mathord^^PERCENT SIGN
00026^&^\&^\ampersand^N^mathord^^# \binampersand (stmaryrd)
00028^(^(^\lparen^O^mathopen^^LEFT PARENTHESIS
00029^)^)^\rparen^C^mathclose^^RIGHT PARENTHESIS
0002A^*^*^^N^mathord^^# \ast, (high) ASTERISK, star
0002B^+^+^\plus^V^mathbin^^PLUS SIGN
0002C^,^,^\comma^P^mathpunct^^COMMA
0002D^-^^^N^mathbin^^t -, HYPHEN-MINUS (deprecated for math)
0002E^.^.^\period^P^mathalpha^^FULL STOP, period
0002F^/^/^\mathslash^B^mathord^^# \slash, SOLIDUS
00030^0^0^^N^mathord^^DIGIT ZERO
00031^1^1^^N^mathord^^DIGIT ONE
00032^2^2^^N^mathord^^DIGIT TWO
00033^3^3^^N^mathord^^DIGIT THREE
00034^4^4^^N^mathord^^DIGIT FOUR
00035^5^5^^N^mathord^^DIGIT FIVE
00036^6^6^^N^mathord^^DIGIT SIX
00037^7^7^^N^mathord^^DIGIT SEVEN
00038^8^8^^N^mathord^^DIGIT EIGHT
00039^9^9^^N^mathord^^DIGIT NINE
0003A^:^:^\mathcolon^P^mathpunct^-literal^= \colon (literal), COLON (not ratio)
0003B^;^;^\semicolon^P^mathpunct^^SEMICOLON p:
0003C^<^<^\less^R^mathrel^^LESS-THAN SIGN r:
0003D^=^=^\equal^R^mathrel^^EQUALS SIGN r:
0003E^>^>^\greater^R^mathrel^^GREATER-THAN SIGN r:
0003F^?^?^\question^P^mathord^^QUESTION MARK
00040^@^@^\atsign^N^mathord^^at
00041^A^A^^A^mathalpha^-literal^= \mathrm{A}, LATIN CAPITAL LETTER A
00042^B^B^^A^mathalpha^-literal^= \mathrm{B}, LATIN CAPITAL LETTER B
00043^C^C^^A^mathalpha^-literal^= \mathrm{C}, LATIN CAPITAL LETTER C
00044^D^D^^A^mathalpha^-literal^= \mathrm{D}, LATIN CAPITAL LETTER D
00045^E^E^^A^mathalpha^-literal^= \mathrm{E}, LATIN CAPITAL LETTER E
00046^F^F^^A^mathalpha^-literal^= \mathrm{F}, LATIN CAPITAL LETTER F
00047^G^G^^A^mathalpha^-literal^= \mathrm{G}, LATIN CAPITAL LETTER G
00048^H^H^^A^mathalpha^-literal^= \mathrm{H}, LATIN CAPITAL LETTER H
00049^I^I^^A^mathalpha^-literal^= \mathrm{I}, LATIN CAPITAL LETTER I
0004A^J^J^^A^mathalpha^-literal^= \mathrm{J}, LATIN CAPITAL LETTER J
0004B^K^K^^A^mathalpha^-literal^= \mathrm{K}, LATIN CAPITAL LETTER K
0004C^L^L^^A^mathalpha^-literal^= \mathrm{L}, LATIN CAPITAL LETTER L
0004D^M^M^^A^mathalpha^-literal^= \mathrm{M}, LATIN CAPITAL LETTER M
0004E^N^N^^A^mathalpha^-literal^= \mathrm{N}, LATIN CAPITAL LETTER N
0004F^O^O^^A^mathalpha^-literal^= \mathrm{O}, LATIN CAPITAL LETTER O
00050^P^P^^A^mathalpha^-literal^= \mathrm{P}, LATIN CAPITAL LETTER P
00051^Q^Q^^A^mathalpha^-literal^= \mathrm{Q}, LATIN CAPITAL LETTER Q
00052^R^R^^A^mathalpha^-literal^= \mathrm{R}, LATIN CAPITAL LETTER R
00053^S^S^^A^mathalpha^-literal^= \mathrm{S}, LATIN CAPITAL LETTER S
00054^T^T^^A^mathalpha^-literal^= \mathrm{T}, LATIN CAPITAL LETTER T
00055^U^U^^A^mathalpha^-literal^= \mathrm{U}, LATIN CAPITAL LETTER U
00056^V^V^^A^mathalpha^-literal^= \mathrm{V}, LATIN CAPITAL LETTER V
00057^W^W^^A^mathalpha^-literal^= \mathrm{W}, LATIN CAPITAL LETTER W
00058^X^X^^A^mathalpha^-literal^= \mathrm{X}, LATIN CAPITAL LETTER X
00059^Y^Y^^A^mathalpha^-literal^= \mathrm{Y}, LATIN CAPITAL LETTER Y
0005A^Z^Z^^A^mathalpha^-literal^= \mathrm{Z}, LATIN CAPITAL LETTER Z
0005B^[^\lbrack^\lbrack^O^mathopen^^LEFT SQUARE BRACKET
0005C^\^\backslash^\backslash^B^mathord^^REVERSE SOLIDUS
0005D^]^\rbrack^\rbrack^C^mathclose^^RIGHT SQUARE BRACKET
0005E^^\sphat^^N^mathord^amsxtra^CIRCUMFLEX ACCENT, TeX superscript operator
0005F^_^\_^^N^mathord^^LOW LINE, TeX subscript operator
00060^`^^^D^mathord^^grave, alias for 0300
00061^a^a^^A^mathalpha^-literal^= \mathrm{a}, LATIN SMALL LETTER A
00062^b^b^^A^mathalpha^-literal^= \mathrm{b}, LATIN SMALL LETTER B
00063^c^c^^A^mathalpha^-literal^= \mathrm{c}, LATIN SMALL LETTER C
00064^d^d^^A^mathalpha^-literal^= \mathrm{d}, LATIN SMALL LETTER D
00065^e^e^^A^mathalpha^-literal^= \mathrm{e}, LATIN SMALL LETTER E
00066^f^f^^A^mathalpha^-literal^= \mathrm{f}, LATIN SMALL LETTER F
00067^g^g^^A^mathalpha^-literal^= \mathrm{g}, LATIN SMALL LETTER G
00068^h^h^^A^mathalpha^-literal^= \mathrm{h}, LATIN SMALL LETTER H
00069^i^i^^A^mathalpha^-literal^= \mathrm{i}, LATIN SMALL LETTER I
0006A^j^j^^A^mathalpha^-literal^= \mathrm{j}, LATIN SMALL LETTER J
0006B^k^k^^A^mathalpha^-literal^= \mathrm{k}, LATIN SMALL LETTER K
0006C^l^l^^A^mathalpha^-literal^= \mathrm{l}, LATIN SMALL LETTER L
0006D^m^m^^A^mathalpha^-literal^= \mathrm{m}, LATIN SMALL LETTER M
0006E^n^n^^A^mathalpha^-literal^= \mathrm{n}, LATIN SMALL LETTER N
0006F^o^o^^A^mathalpha^-literal^= \mathrm{o}, LATIN SMALL LETTER O
00070^p^p^^A^mathalpha^-literal^= \mathrm{p}, LATIN SMALL LETTER P
00071^q^q^^A^mathalpha^-literal^= \mathrm{q}, LATIN SMALL LETTER Q
00072^r^r^^A^mathalpha^-literal^= \mathrm{r}, LATIN SMALL LETTER R
00073^s^s^^A^mathalpha^-literal^= \mathrm{s}, LATIN SMALL LETTER S
00074^t^t^^A^mathalpha^-literal^= \mathrm{t}, LATIN SMALL LETTER T
00075^u^u^^A^mathalpha^-literal^= \mathrm{u}, LATIN SMALL LETTER U
00076^v^v^^A^mathalpha^-literal^= \mathrm{v}, LATIN SMALL LETTER V
00077^w^w^^A^mathalpha^-literal^= \mathrm{w}, LATIN SMALL LETTER W
00078^x^x^^A^mathalpha^-literal^= \mathrm{x}, LATIN SMALL LETTER X
00079^y^y^^A^mathalpha^-literal^= \mathrm{y}, LATIN SMALL LETTER Y
0007A^z^z^^A^mathalpha^-literal^= \mathrm{z}, LATIN SMALL LETTER Z
0007B^{^\{^\lbrace^O^mathopen^^= \lbrace, LEFT CURLY BRACKET
0007C^|^|^\vert^F^mathfence^^= \vert, vertical bar
0007D^}^\}^\rbrace^C^mathclose^^= \rbrace, RIGHT CURLY BRACKET
0007E^~^\sptilde^^N^mathord^amsxtra^# \sim, TILDE
000A0^ ^^^S^^^nbsp
000A1^¡^^^P^^^iexcl
000A2^¢^\cent^^N^mathord^wasysym^= \mathcent (txfonts), cent
000A3^£^\pounds^\sterling^N^mathord^-fourier -omlmathit^= \mathsterling (txfonts), POUND SIGN, fourier prints a dollar sign
000A4^¤^^^N^mathord^^t \currency (wasysym), curren
000A5^¥^\yen^\yen^N^mathord^amsfonts^YEN SIGN
000A6^¦^^^N^mathord^^brvbar (vertical)
000A7^§^\S^^N^mathord^^sect
000A8^¨^\spddot^^D^mathord^amsxtra^Dot /die, alias for 0308
000AC^¬^\neg^\neg^U^mathord^^= \lnot, NOT SIGN
000AE^®^\circledR^^X^mathord^amsfonts^REGISTERED SIGN
000AF^¯^^^D^mathord^^macr, alias for 0304
000B0^°^^^N^mathord^^deg
000B1^±^\pm^\pm^V^mathbin^^plus-or-minus sign
000B2^²^^^N^mathord^^sup2
000B3^³^^^N^mathord^^sup3
000B4^´^^^N^mathord^^acute, alias for 0301
000B5^µ^\Micro^^N^mathalpha^wrisym^= \tcmu (mathcomp), t \textmu (textcomp), # \mathrm{\mu} (omlmathrm), # \muup (kpfonts mathdesign), MICRO SIGN
000B6^¶^^^N^mathord^^para (paragraph sign, pilcrow)
000B7^·^^\cdotp^B^mathbin^^# \cdot, x \centerdot, b: MIDDLE DOT
000B9^¹^^^N^mathord^^sup1
000BC^¼^^^N^mathord^^frac14
000BD^½^^^N^mathord^^frac12
000BE^¾^^^N^mathord^^frac34
000BF^¿^^^P^^^iquest
000D7^×^\times^\times^B^mathbin^^MULTIPLICATION SIGN, z notation Cartesian product
000F0^ð^\eth^\matheth^^mathalpha^amssymb arevmath^eth
000F7^÷^\div^\div^B^mathbin^^divide sign
00131^ı^\imath^^A^mathalpha^-literal^imath
001B5^Ƶ^^\Zbar^^mathord^^impedance
00237^ȷ^\jmath^^A^mathalpha^-literal^jmath
002C6^ˆ^^^D^mathalpha^^circ, alias for 0302
002C7^ˇ^^^D^mathalpha^^CARON, alias for 030C
002D8^˘^^^D^mathord^^BREVE, alias for 0306
002D9^˙^^^D^mathord^^dot, alias for 0307
002DA^˚^^^D^mathord^^ring, alias for 030A
002DC^˜^^^D^mathord^^tilde, alias for 0303
00300^ ̀^\grave^\grave^D^mathaccent^^grave accent
00301^ ́^\acute^\acute^D^mathaccent^^acute accent
00302^ ̂^\hat^\hat^D^mathaccent^^# \widehat (amssymb), circumflex accent
00303^ ̃^\tilde^\tilde^D^mathaccent^^# \widetilde (yhmath, fourier), tilde
00304^ ̄^\bar^\bar^D^mathaccent^^macron
00305^ ̅^\overline^\overbar^D^mathaccent^^overbar embellishment
00306^ ̆^\breve^\breve^D^mathaccent^^breve
00307^ ̇^\dot^\dot^D^mathaccent^-oz^= \Dot (wrisym), dot above
00308^ ̈^\ddot^\ddot^D^mathaccent^^= \DDot (wrisym), dieresis
00309^ ̉^^\ovhook^^mathaccent^^COMBINING HOOK ABOVE
0030A^ ̊^\mathring^\ocirc^D^mathaccent^amssymb^= \ring (yhmath), ring
0030C^ ̌^\check^\check^D^mathaccent^^caron
00310^ ̐^^\candra^^mathaccent^^candrabindu (non-spacing)
00311^ ̑^^^D^mathaccent^^COMBINING INVERTED BREVE
00312^ ̒^^\oturnedcomma^^mathaccent^^COMBINING TURNED COMMA ABOVE
00315^ ̕^^\ocommatopright^^mathaccent^^COMBINING COMMA ABOVE RIGHT
0031A^ ̚^^\droang^^mathaccent^^left angle above (non-spacing)
00323^ ̣^^^D^mathaccent^^COMBINING DOT BELOW
0032C^ ̬^^^D^mathaccent^^COMBINING CARON BELOW
0032D^ ̭^^^D^mathaccent^^COMBINING CIRCUMFLEX ACCENT BELOW
0032E^ ̮^^^D^mathaccent^^COMBINING BREVE BELOW
0032F^ ̯^^^D^mathaccent^^COMBINING INVERTED BREVE BELOW
00330^ ̰^\utilde^\wideutilde^D^mathaccent^undertilde^under tilde accent (multiple characters and non-spacing)
00331^ ̱^\underbar^\underbar^D^mathaccent^^COMBINING MACRON BELOW
00332^ ̲^\underline^^D^mathaccent^^COMBINING LOW LINE
00333^ ̳^^^D^mathaccent^^2lowbar
00338^ ̸^\not^\not^D^mathaccent^^COMBINING LONG SOLIDUS OVERLAY
0033A^ ̺^^^D^mathaccent^^COMBINING INVERTED BRIDGE BELOW
0033F^ ̿^^^D^mathaccent^^COMBINING DOUBLE OVERLINE
00346^ ͆^^^D^mathaccent^^COMBINING BRIDGE ABOVE
00391^Α^^\upAlpha^A^mathalpha^^capital alpha, greek
00392^Β^^\upBeta^A^mathalpha^^capital beta, greek
00393^Γ^\Gamma^\upGamma^A^mathalpha^-literal^= \Gamma (-slantedGreek), = \mathrm{\Gamma}, capital gamma, greek
00394^Δ^\Delta^\upDelta^A^mathalpha^-literal^= \Delta (-slantedGreek), = \mathrm{\Delta}, capital delta, greek
00395^Ε^^\upEpsilon^A^mathalpha^^capital epsilon, greek
00396^Ζ^^\upZeta^A^mathalpha^^capital zeta, greek
00397^Η^^\upEta^A^mathalpha^^capital eta, greek
00398^Θ^\Theta^\upTheta^A^mathalpha^-literal^= \Theta (-slantedGreek), = \mathrm{\Theta}, capital theta, greek
00399^Ι^^\upIota^A^mathalpha^^capital iota, greek
0039A^Κ^^\upKappa^A^mathalpha^^capital kappa, greek
0039B^Λ^\Lambda^\upLambda^A^mathalpha^-literal^= \Lambda (-slantedGreek), = \mathrm{\Lambda}, capital lambda, greek
0039C^Μ^^\upMu^A^mathalpha^^capital mu, greek
0039D^Ν^^\upNu^A^mathalpha^^capital nu, greek
0039E^Ξ^\Xi^\upXi^A^mathalpha^-literal^= \Xi (-slantedGreek), = \mathrm{\Xi}, capital xi, greek
0039F^Ο^^\upOmicron^A^mathalpha^^capital omicron, greek
003A0^Π^\Pi^\upPi^A^mathalpha^-literal^= \Pi (-slantedGreek), = \mathrm{\Pi}, capital pi, greek
003A1^Ρ^^\upRho^A^mathalpha^^capital rho, greek
003A3^Σ^\Sigma^\upSigma^A^mathalpha^-literal^= \Sigma (-slantedGreek), = \mathrm{\Sigma}, capital sigma, greek
003A4^Τ^^\upTau^A^mathalpha^^capital tau, greek
003A5^Υ^\Upsilon^\upUpsilon^A^mathalpha^-literal^= \Upsilon (-slantedGreek), = \mathrm{\Upsilon}, capital upsilon, greek
003A6^Φ^\Phi^\upPhi^A^mathalpha^-literal^= \Phi (-slantedGreek), = \mathrm{\Phi}, capital phi, greek
003A7^Χ^^\upChi^A^mathalpha^^capital chi, greek
003A8^Ψ^\Psi^\upPsi^A^mathalpha^-literal^= \Psi (-slantedGreek), = \mathrm{\Psi}, capital psi, greek
003A9^Ω^\Omega^\upOmega^A^mathalpha^-literal^= \Omega (-slantedGreek), = \mathrm{\Omega}, capital omega, greek
003B1^α^\alpha^\upalpha^A^mathalpha^-literal^= \mathrm{\alpha} (omlmathrm), = \alphaup (kpfonts mathdesign), = \upalpha (upgreek), alpha, greek
003B2^β^\beta^\upbeta^A^mathalpha^-literal^= \mathrm{\beta} (omlmathrm), = \betaup (kpfonts mathdesign), = \upbeta (upgreek), beta, greek
003B3^γ^\gamma^\upgamma^A^mathalpha^-literal^= \mathrm{\gamma} (omlmathrm), = \gammaup (kpfonts mathdesign), = \upgamma (upgreek), gamma, greek
003B4^δ^\delta^\updelta^A^mathalpha^-literal^= \mathrm{\delta} (omlmathrm), = \deltaup (kpfonts mathdesign), = \updelta (upgreek), delta, greek
003B5^ε^\varepsilon^\upepsilon^A^mathalpha^-literal^= \mathrm{\varepsilon} (omlmathrm), = \varepsilonup (kpfonts mathdesign), = \upepsilon (upgreek), rounded epsilon, greek
003B6^ζ^\zeta^\upzeta^A^mathalpha^-literal^= \mathrm{\zeta} (omlmathrm), = \zetaup (kpfonts mathdesign), = \upzeta (upgreek), zeta, greek
003B7^η^\eta^\upeta^A^mathalpha^-literal^= \mathrm{\eta} (omlmathrm), = \etaup (kpfonts mathdesign), = \upeta (upgreek), eta, greek
003B8^θ^\theta^\uptheta^A^mathalpha^-literal^= \mathrm{\theta} (omlmathrm), = \thetaup (kpfonts mathdesign), straight theta, = \uptheta (upgreek), theta, greek
003B9^ι^\iota^\upiota^A^mathalpha^-literal^= \mathrm{\iota} (omlmathrm), = \iotaup (kpfonts mathdesign), = \upiota (upgreek), iota, greek
003BA^κ^\kappa^\upkappa^A^mathalpha^-literal^= \mathrm{\kappa} (omlmathrm), = \kappaup (kpfonts mathdesign), = \upkappa (upgreek), kappa, greek
003BB^λ^\lambda^\uplambda^A^mathalpha^-literal^= \mathrm{\lambda} (omlmathrm), = \lambdaup (kpfonts mathdesign), = \uplambda (upgreek), lambda, greek
003BC^μ^\mu^\upmu^A^mathalpha^-literal^= \mathrm{\mu} (omlmathrm), = \muup (kpfonts mathdesign), = \upmu (upgreek), mu, greek
003BD^ν^\nu^\upnu^A^mathalpha^-literal^= \mathrm{\nu} (omlmathrm), = \nuup (kpfonts mathdesign), = \upnu (upgreek), nu, greek
003BE^ξ^\xi^\upxi^A^mathalpha^-literal^= \mathrm{\xi} (omlmathrm), = \xiup (kpfonts mathdesign), = \upxi (upgreek), xi, greek
003BF^ο^^\upomicron^A^mathalpha^^small omicron, greek
003C0^π^\pi^\uppi^A^mathalpha^-literal^= \mathrm{\pi} (omlmathrm), = \piup (kpfonts mathdesign), = \uppi (upgreek), pi, greek
003C1^ρ^\rho^\uprho^A^mathalpha^-literal^= \mathrm{\rho} (omlmathrm), = \rhoup (kpfonts mathdesign), = \uprho (upgreek), rho, greek
003C2^ς^\varsigma^\upvarsigma^^mathalpha^-literal^= \mathrm{\varsigma} (omlmathrm), = \varsigmaup (kpfonts mathdesign), = \upvarsigma (upgreek), terminal sigma, greek
003C3^σ^\sigma^\upsigma^A^mathalpha^-literal^= \mathrm{\sigma} (omlmathrm), = \sigmaup (kpfonts mathdesign), = \upsigma (upgreek), sigma, greek
003C4^τ^\tau^\uptau^A^mathalpha^-literal^= \mathrm{\tau} (omlmathrm), = \tauup (kpfonts mathdesign), = \uptau (upgreek), tau, greek
003C5^υ^\upsilon^\upupsilon^A^mathalpha^-literal^= \mathrm{\upsilon} (omlmathrm), = \upsilonup (kpfonts mathdesign), = \upupsilon (upgreek), upsilon, greek
003C6^φ^\varphi^\upvarphi^A^mathalpha^-literal^= \mathrm{\varphi} (omlmathrm), = \varphiup (kpfonts mathdesign), = \upvarphi (upgreek), curly or open phi, greek
003C7^χ^\chi^\upchi^A^mathalpha^-literal^= \mathrm{\chi} (omlmathrm), = \chiup (kpfonts mathdesign), = \upchi (upgreek), chi, greek
003C8^ψ^\psi^\uppsi^A^mathalpha^-literal^= \mathrm{\psi} (omlmathrm), = \psiup (kpfonts mathdesign), = \uppsi (upgreek), psi, greek
003C9^ω^\omega^\upomega^A^mathalpha^-literal^= \mathrm{\omega} (omlmathrm), = \omegaup (kpfonts mathdesign), = \upomega (upgreek), omega, greek
003D0^ϐ^\varbeta^\upvarbeta^A^mathalpha^arevmath^rounded beta, greek
003D1^ϑ^\vartheta^\upvartheta^A^mathalpha^-literal^= \mathrm{\vartheta} (omlmathrm), = \varthetaup (kpfonts mathdesign), curly or open theta
003D2^ϒ^^\upUpsilon^A^mathalpha^^# \mathrm{\Upsilon}, GREEK UPSILON WITH HOOK SYMBOL
003D5^ϕ^\phi^\upphi^A^mathalpha^-literal^= \mathrm{\phi} (omlmathrm), = \phiup (kpfonts mathdesign), GREEK PHI SYMBOL (straight)
003D6^ϖ^\varpi^\upvarpi^A^mathalpha^-literal^= \mathrm{\varpi} (omlmathrm), = \varpiup (kpfonts mathdesign), GREEK PI SYMBOL (pomega)
003D8^Ϙ^\Qoppa^\upoldKoppa^N^mathord^arevmath^= \Koppa (wrisym), t \Qoppa (LGR), GREEK LETTER ARCHAIC KOPPA
003D9^ϙ^\qoppa^\upoldkoppa^N^mathord^arevmath^= \koppa (wrisym), t \qoppa (LGR), GREEK SMALL LETTER ARCHAIC KOPPA
003DA^Ϛ^\Stigma^\upStigma^A^mathalpha^arevmath wrisym^capital stigma
003DB^ϛ^\stigma^\upstigma^A^mathalpha^arevmath wrisym^GREEK SMALL LETTER STIGMA
003DC^Ϝ^\Digamma^\upDigamma^A^mathalpha^wrisym^capital digamma
003DD^ϝ^\digamma^\updigamma^A^mathalpha^amssymb arevmath wrisym^GREEK SMALL LETTER DIGAMMA
003DE^Ϟ^\Koppa^\upKoppa^^mathalpha^arevmath^capital koppa
003DF^ϟ^\koppa^\upkoppa^^mathalpha^arevmath^GREEK SMALL LETTER KOPPA
003E0^Ϡ^\Sampi^\upSampi^A^mathalpha^arevmath wrisym^capital sampi
003E1^ϡ^\sampi^\upsampi^A^mathalpha^arevmath^# \sampi (wrisym), GREEK SMALL LETTER SAMPI
003F0^ϰ^\varkappa^\upvarkappa^A^mathalpha^amssymb^GREEK KAPPA SYMBOL (round)
003F1^ϱ^\varrho^\upvarrho^A^mathalpha^-literal^= \mathrm{\varrho} (omlmathrm), = \varrhoup (kpfonts mathdesign), GREEK RHO SYMBOL (round)
003F4^ϴ^^\upvarTheta^A^mathalpha^^x \varTheta (amssymb), GREEK CAPITAL THETA SYMBOL
003F5^ϵ^\epsilon^\upvarepsilon^A^mathalpha^-literal^= \mathrm{\epsilon} (omlmathrm), = \epsilonup (kpfonts mathdesign), GREEK LUNATE EPSILON SYMBOL
003F6^϶^\backepsilon^\upbackepsilon^N^mathord^amssymb wrisym^GREEK REVERSED LUNATE EPSILON SYMBOL
00428^Ш^^^A^mathalpha^^t \CYRSHA (T2A), Shcy, CYRILLIC CAPITAL LETTER SHA
00606^؆^^^L^mathord^^ARABIC-INDIC CUBE ROOT
00607^؇^^^L^mathord^^ARABIC-INDIC FOURTH ROOT
00608^؈^^^A^mathord^^ARABIC RAY
02000^ ^^^S^^^enquad
02001^ ^\quad^^S^^^emquad
02002^ ^^^S^^^ensp (half an em)
02003^ ^^^S^^^emsp
02004^ ^^^S^^^THREE-PER-EM SPACE
02005^ ^^^S^^^FOUR-PER-EM SPACE, mid space
02006^ ^^^S^^^SIX-PER-EM SPACE
02007^ ^^^S^^^FIGURE SPACE
02009^ ^^^S^^^THIN SPACE
0200A^ ^^^S^^^HAIR SPACE
0200B^^^^S^^^# \hspace{0pt}, zwsp
02010^‐^^^P^mathord^^HYPHEN (true graphic)
02012^‒^^^P^mathord^^dash
02013^–^^^P^mathord^^ndash
02014^—^^^P^mathord^^mdash
02015^―^^\horizbar^^mathord^^HORIZONTAL BAR
02016^‖^\|^\Vert^F^mathfence^^= \Vert, double vertical bar
02017^‗^^\twolowline^^mathord^^DOUBLE LOW LINE (spacing)
02020^†^\dagger^\dagger^R^mathbin^^DAGGER relation
02021^‡^\ddagger^\ddagger^R^mathbin^^DOUBLE DAGGER relation
02022^•^\bullet^\smblkcircle^B^mathbin^^BULLET (small, filled)
02025^‥^^\enleadertwodots^^mathord^^double baseline dot (en leader)
02026^…^\ldots^\unicodeellipsis^N^mathord^^ellipsis (horizontal)
02032^′^\prime^\prime^N^mathord^^PRIME or minute, not superscripted
02033^″^\second^\dprime^N^mathord^mathabx^DOUBLE PRIME or second, not superscripted
02034^‴^\third^\trprime^N^mathord^mathabx^TRIPLE PRIME (not superscripted)
02035^‵^\backprime^\backprime^N^mathord^amssymb^reverse prime, not superscripted
02036^‶^^\backdprime^N^mathord^^double reverse prime, not superscripted
02037^‷^^\backtrprime^N^mathord^^triple reverse prime, not superscripted
02038^‸^^\caretinsert^^mathord^^CARET (insertion mark)
0203B^※^^^N^^^REFERENCE MARK, Japanese kome jirushi
0203C^‼^^\Exclam^N^mathord^^# !!, DOUBLE EXCLAMATION MARK
02040^⁀^\cat^\tieconcat^B^mathbin^oz^CHARACTER TIE, z notation sequence concatenation
02043^⁃^^\hyphenbullet^^mathord^^rectangle, filled (HYPHEN BULLET)
02044^⁄^^\fracslash^B^mathbin^^# /, FRACTION SLASH
02047^⁇^^\Question^^mathord^^# ??, DOUBLE QUESTION MARK
0204E^⁎^^^B^mathbin^^# \ast, lowast, LOW ASTERISK
0204F^⁏^^^R^^^bsemi, REVERSED SEMICOLON
02050^⁐^^\closure^R^mathrel^^CLOSE UP (editing mark)
02051^⁑^^^N^^^Ast
02052^⁒^^^N^mathord^^# ./., COMMERCIAL MINUS SIGN
02057^⁗^\fourth^\qprime^N^mathord^mathabx^QUADRUPLE PRIME, not superscripted
0205F^ ^\:^^S^^^= \medspace (amsmath), MEDIUM MATHEMATICAL SPACE, four-eighteenths of an em
02061^^^^B^^^FUNCTION APPLICATION
02062^^^^B^^^INVISIBLE TIMES
02063^^^^P^^^INVISIBLE SEPARATOR
02064^^^^X^^^INVISIBLE PLUS
0207A^⁺^^^N^mathord^^SUPERSCRIPT PLUS SIGN subscript operators
0207B^⁻^^^N^mathord^^SUPERSCRIPT MINUS subscript operators
0207C^⁼^^^N^mathord^^SUPERSCRIPT EQUALS SIGN subscript operators
0207D^⁽^^^N^mathopen^^SUPERSCRIPT LEFT PARENTHESIS subscript operators
0207E^⁾^^^N^mathclose^^SUPERSCRIPT RIGHT PARENTHESIS subscript operators
0208A^₊^^^N^mathord^^SUBSCRIPT PLUS SIGN superscript operators
0208B^₋^^^N^mathord^^SUBSCRIPT MINUS superscript operators
0208C^₌^^^N^mathord^^SUBSCRIPT EQUALS SIGN superscript operators
0208D^₍^^^N^mathopen^^SUBSCRIPT LEFT PARENTHESIS superscript operators
0208E^₎^^^N^mathclose^^SUBSCRIPT RIGHT PARENTHESIS superscript operators
020AC^€^^\euro^^mathord^^EURO SIGN
020D0^x⃐^\lvec^\leftharpoonaccent^D^mathaccent^wrisym^COMBINING LEFT HARPOON ABOVE
020D1^x⃑^\vec^\rightharpoonaccent^D^mathaccent^wrisym^COMBINING RIGHT HARPOON ABOVE
020D2^x⃒^^\vertoverlay^D^mathaccent^^COMBINING LONG VERTICAL LINE OVERLAY
020D3^x⃓^^^X^mathaccent^^COMBINING SHORT VERTICAL LINE OVERLAY
020D4^x⃔^^^D^mathaccent^^COMBINING ANTICLOCKWISE ARROW ABOVE
020D5^x⃕^^^D^mathaccent^^COMBINING CLOCKWISE ARROW ABOVE
020D6^x⃖^\LVec^\overleftarrow^D^mathaccent^wrisym^# \overleftarrow, COMBINING LEFT ARROW ABOVE
020D7^x⃗^\vec^\vec^D^mathaccent^-wrisym^= \Vec (wrisym), # \overrightarrow, COMBINING RIGHT ARROW ABOVE
020D8^x⃘^^^D^mathaccent^^COMBINING RING OVERLAY
020D9^x⃙^^^D^mathaccent^^COMBINING CLOCKWISE RING OVERLAY
020DA^x⃚^^^D^mathaccent^^COMBINING ANTICLOCKWISE RING OVERLAY
020DB^x⃛^\dddot^\dddot^D^mathaccent^amsmath^= \DDDot (wrisym), COMBINING THREE DOTS ABOVE
020DC^x⃜^\ddddot^\ddddot^D^mathaccent^amsmath^COMBINING FOUR DOTS ABOVE
020DD^x⃝^^\enclosecircle^D^mathaccent^^COMBINING ENCLOSING CIRCLE
020DE^x⃞^^\enclosesquare^D^mathaccent^^COMBINING ENCLOSING SQUARE
020DF^x⃟^^\enclosediamond^D^mathaccent^^COMBINING ENCLOSING DIAMOND
020E1^x⃡^\overleftrightarrow^\overleftrightarrow^D^mathaccent^amsmath^COMBINING LEFT RIGHT ARROW ABOVE
020E4^x⃤^^\enclosetriangle^D^mathaccent^^COMBINING ENCLOSING UPWARD POINTING TRIANGLE
020E5^x⃥^^^D^mathaccent^^COMBINING REVERSE SOLIDUS OVERLAY
020E6^x⃦^^^D^mathaccent^^COMBINING DOUBLE VERTICAL STROKE OVERLAY, z notation finite function diacritic
020E7^x⃧^^\annuity^D^mathaccent^^COMBINING ANNUITY SYMBOL
020E8^x⃨^^\threeunderdot^D^mathaccent^^COMBINING TRIPLE UNDERDOT
020E9^x⃩^^\widebridgeabove^D^mathaccent^^COMBINING WIDE BRIDGE ABOVE
020EA^x⃪^^^D^mathaccent^^COMBINING LEFTWARDS ARROW OVERLAY
020EB^x⃫^^^D^mathaccent^^COMBINING LONG DOUBLE SOLIDUS OVERLAY
020EC^x⃬^^\underrightharpoondown^D^mathaccent^^COMBINING RIGHTWARDS HARPOON WITH BARB DOWNWARDS
020ED^x⃭^^\underleftharpoondown^D^mathaccent^^COMBINING LEFTWARDS HARPOON WITH BARB DOWNWARDS
020EE^x⃮^\underleftarrow^\underleftarrow^D^mathaccent^amsmath^COMBINING LEFT ARROW BELOW
020EF^x⃯^\underrightarrow^\underrightarrow^D^mathaccent^amsmath^COMBINING RIGHT ARROW BELOW
020F0^x⃰^^\asteraccent^^mathaccent^^COMBINING ASTERISK ABOVE
02102^ℂ^\mathbb{C}^\BbbC^A^mathalpha^mathbb^= \mathds{C} (dsfont), open face C
02107^ℇ^\Euler^\Eulerconst^N^mathord^wrisym^EULER CONSTANT
0210A^ℊ^\mathcal{g}^\mscrg^A^mathalpha^urwchancal^/scr g, script small letter g
0210B^ℋ^\mathcal{H}^\mscrH^A^mathalpha^^hamiltonian (script capital H)
0210C^ℌ^\mathfrak{H}^\mfrakH^A^mathalpha^eufrak^/frak H, black-letter capital H
0210D^ℍ^\mathbb{H}^\BbbH^A^mathalpha^mathbb^= \mathds{H} (dsfont), open face capital H
0210E^ℎ^^\Planckconst^N^mathord^^# h, Planck constant
0210F^ℏ^\hslash^\hslash^N^mathalpha^amssymb fourier arevmath^=\HBar (wrisym), #\hbar, Planck's h over 2pi
02110^ℐ^\mathcal{I}^\mscrI^A^mathalpha^^/scr I, script capital I
02111^ℑ^\Im^\Im^A^mathalpha^^= \mathfrak{I} (eufrak), imaginary part
02112^ℒ^\mathcal{L}^\mscrL^A^mathalpha^^lagrangian (script capital L)
02113^ℓ^\ell^\ell^A^mathalpha^^cursive small l
02115^ℕ^\mathbb{N}^\BbbN^A^mathalpha^mathbb^= \mathds{N} (dsfont), open face N
02118^℘^\wp^\wp^A^mathalpha^amssymb^weierstrass p
02119^ℙ^\mathbb{P}^\BbbP^A^mathalpha^mathbb^= \mathds{P} (dsfont), open face P
0211A^ℚ^\mathbb{Q}^\BbbQ^A^mathalpha^mathbb^= \mathds{Q} (dsfont), open face Q
0211B^ℛ^\mathcal{R}^\mscrR^A^mathalpha^^/scr R, script capital R
0211C^ℜ^\Re^\Re^A^mathalpha^^= \mathfrak{R} (eufrak), real part
0211D^ℝ^\mathbb{R}^\BbbR^A^mathalpha^mathbb^= \mathds{R} (dsfont), open face R
02124^ℤ^\mathbb{Z}^\BbbZ^A^mathalpha^mathbb^= \mathds{Z} (dsfont), open face Z
02126^Ω^\tcohm^^N^mathalpha^mathcomp^# \mathrm{\Omega}, ohm (deprecated in math, use greek letter)
02127^℧^\mho^\mho^N^mathord^amsfonts arevmath^= \Mho (wrisym), t \agemO (wasysym), conductance
02128^ℨ^\mathfrak{Z}^\mfrakZ^A^mathalpha^eufrak^/frak Z, black-letter capital Z
02129^℩^^\turnediota^N^mathalpha^^turned iota
0212B^Å^\Angstroem^\Angstrom^A^mathalpha^wrisym^# \mathring{\mathrm{A}}, Ångström capital A with ring
0212C^ℬ^\mathcal{B}^\mscrB^A^mathalpha^^bernoulli function (script capital B)
0212D^ℭ^\mathfrak{C}^\mfrakC^A^mathalpha^eufrak^black-letter capital C
0212F^ℯ^\mathcal{e}^\mscre^A^mathalpha^urwchancal^/scr e, script small letter e
02130^ℰ^\mathcal{E}^\mscrE^A^mathalpha^^/scr E, script capital E
02131^ℱ^\mathcal{F}^\mscrF^A^mathalpha^^/scr F, script capital F
02132^Ⅎ^\Finv^\Finv^N^mathord^amssymb^TURNED CAPITAL F
02133^ℳ^\mathcal{M}^\mscrM^A^mathalpha^^physics m-matrix (SCRIPT CAPITAL M)
02134^ℴ^\mathcal{o}^\mscro^A^mathalpha^urwchancal^order of (SCRIPT SMALL O)
02135^ℵ^\aleph^\aleph^A^mathalpha^^aleph, hebrew
02136^ℶ^\beth^\beth^A^mathalpha^amssymb wrisym^beth, hebrew
02137^ℷ^\gimel^\gimel^A^mathalpha^amssymb wrisym^gimel, hebrew
02138^ℸ^\daleth^\daleth^A^mathalpha^amssymb wrisym^daleth, hebrew
0213C^ℼ^\mathbb{\pi}^\Bbbpi^A^mathord^mathbbol^\DoublePi (wrisym), DOUBLE-STRUCK SMALL PI
0213D^ℽ^\mathbb{\gamma}^\Bbbgamma^A^mathalpha^mathbbol^\EulerGamma (wrisym), DOUBLE-STRUCK SMALL GAMMA
0213E^ℾ^\mathbb{\Gamma}^\BbbGamma^N^mathalpha^mathbbol^DOUBLE-STRUCK CAPITAL GAMMA
0213F^ℿ^\mathbb{\Pi}^\BbbPi^A^mathalpha^mathbbol^DOUBLE-STRUCK CAPITAL PI
02140^⅀^\mathbb{\Sigma}^\Bbbsum^L^mathop^mathbbol^DOUBLE-STRUCK N-ARY SUMMATION
02141^⅁^^\Game^N^mathord^^# \Game (amssymb), TURNED SANS-SERIF CAPITAL G (amssymb has mirrored G)
02142^⅂^^\sansLturned^N^mathord^^TURNED SANS-SERIF CAPITAL L
02143^⅃^^\sansLmirrored^N^mathord^^REVERSED SANS-SERIF CAPITAL L
02144^⅄^\Yup^\Yup^N^mathord^stmaryrd^TURNED SANS-SERIF CAPITAL Y
02145^ⅅ^\CapitalDifferentialD^\mitBbbD^N^mathord^wrisym^= \DD (wrisym), DOUBLE-STRUCK ITALIC CAPITAL D
02146^ⅆ^\DifferentialD^\mitBbbd^N^mathord^wrisym^= \dd (wrisym), DOUBLE-STRUCK ITALIC SMALL D
02147^ⅇ^\ExponetialE^\mitBbbe^N^mathord^wrisym^= \ee (wrisym), DOUBLE-STRUCK ITALIC SMALL E
02148^ⅈ^\ComplexI^\mitBbbi^N^mathord^wrisym^= \ii (wrisym), DOUBLE-STRUCK ITALIC SMALL I
02149^ⅉ^\ComplexJ^\mitBbbj^N^mathord^wrisym^= \jj (wrisym), DOUBLE-STRUCK ITALIC SMALL J
0214A^⅊^^\PropertyLine^^mathord^^PROPERTY LINE
0214B^⅋^\invamp^\upand^N^mathbin^txfonts^# \bindnasrepma (stmaryrd), TURNED AMPERSAND
02190^←^\leftarrow^\leftarrow^R^mathrel^^= \gets, a: leftward arrow
02191^↑^\uparrow^\uparrow^R^mathrel^^upward arrow
02192^→^\rightarrow^\rightarrow^R^mathrel^^= \to, = \tfun (oz), = \fun (oz), rightward arrow, z notation total function
02193^↓^\downarrow^\downarrow^R^mathrel^^downward arrow
02194^↔^\leftrightarrow^\leftrightarrow^R^mathrel^-wrisym^= \rel (oz), LEFT RIGHT ARROW, z notation relation
02195^↕^\updownarrow^\updownarrow^R^mathrel^^up and down arrow
02196^↖^\nwarrow^\nwarrow^R^mathrel^amssymb^nw pointing arrow
02197^↗^\nearrow^\nearrow^R^mathrel^^ne pointing arrow
02198^↘^\searrow^\searrow^R^mathrel^^se pointing arrow
02199^↙^\swarrow^\swarrow^R^mathrel^^sw pointing arrow
0219A^↚^\nleftarrow^\nleftarrow^R^mathrel^amssymb^not left arrow
0219B^↛^\nrightarrow^\nrightarrow^R^mathrel^amssymb^not right arrow
0219C^↜^^\leftwavearrow^R^mathrel^^left arrow-wavy
0219D^↝^^\rightwavearrow^R^mathrel^^right arrow-wavy
0219E^↞^\twoheadleftarrow^\twoheadleftarrow^R^mathrel^amssymb^left two-headed arrow
0219F^↟^^\twoheaduparrow^R^mathrel^^up two-headed arrow
021A0^↠^\twoheadrightarrow^\twoheadrightarrow^R^mathrel^amssymb^= \tsur (oz), = \surj (oz), right two-headed arrow, z notation total surjection
021A1^↡^^\twoheaddownarrow^R^mathrel^^down two-headed arrow
021A2^↢^\leftarrowtail^\leftarrowtail^R^mathrel^amssymb^left arrow-tailed
021A3^↣^\rightarrowtail^\rightarrowtail^R^mathrel^amssymb^= \tinj (oz), = \inj (oz), right arrow-tailed, z notation total injection
021A4^↤^\mapsfrom^\mapsfrom^R^mathrel^stmaryrd^= \mappedfrom (kpfonts), maps to, leftward
021A5^↥^\MapsUp^\mapsup^R^mathrel^wrisym^maps to, upward
021A6^↦^\mapsto^\mapsto^R^mathrel^^maps to, rightward, z notation maplet
021A7^↧^\MapsDown^\mapsdown^R^mathrel^wrisym^maps to, downward
021A8^↨^^\updownarrowbar^R^mathord^^UP DOWN ARROW WITH BASE (perpendicular)
021A9^↩^\hookleftarrow^\hookleftarrow^R^mathrel^^left arrow-hooked
021AA^↪^\hookrightarrow^\hookrightarrow^R^mathrel^^right arrow-hooked
021AB^↫^\looparrowleft^\looparrowleft^R^mathrel^amssymb^left arrow-looped
021AC^↬^\looparrowright^\looparrowright^R^mathrel^amssymb^right arrow-looped
021AD^↭^\leftrightsquigarrow^\leftrightsquigarrow^R^mathrel^amssymb^left and right arr-wavy
021AE^↮^\nleftrightarrow^\nleftrightarrow^R^mathrel^amssymb^not left and right arrow
021AF^↯^\lightning^\downzigzagarrow^R^mathrel^stmaryrd -wasysym^t \Lightning (marvosym), DOWNWARDS ZIGZAG ARROW
021B0^↰^\Lsh^\Lsh^R^mathrel^amssymb^a: UPWARDS ARROW WITH TIP LEFTWARDS
021B1^↱^\Rsh^\Rsh^R^mathrel^amssymb^a: UPWARDS ARROW WITH TIP RIGHTWARDS
021B2^↲^\dlsh^\Ldsh^R^mathrel^mathabx^left down angled arrow
021B3^↳^\drsh^\Rdsh^R^mathrel^mathabx^right down angled arrow
021B4^↴^^\linefeed^^mathord^^RIGHTWARDS ARROW WITH CORNER DOWNWARDS
021B5^↵^^\carriagereturn^^mathord^^downwards arrow with corner leftward = carriage return
021B6^↶^\curvearrowleft^\curvearrowleft^R^mathrel^amssymb fourier^left curved arrow
021B7^↷^\curvearrowright^\curvearrowright^R^mathrel^amssymb fourier^right curved arrow
021B8^↸^^\barovernorthwestarrow^^mathord^^NORTH WEST ARROW TO LONG BAR
021B9^↹^^\barleftarrowrightarrowba^^mathord^^LEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BAR
021BA^↺^\circlearrowleft^\acwopencirclearrow^R^mathord^amssymb^= \leftturn (wasysym), ANTICLOCKWISE OPEN CIRCLE ARROW
021BB^↻^\circlearrowright^\cwopencirclearrow^R^mathord^amssymb^= \rightturn (wasysym), CLOCKWISE OPEN CIRCLE ARROW
021BC^↼^\leftharpoonup^\leftharpoonup^R^mathrel^^left harpoon-up
021BD^↽^\leftharpoondown^\leftharpoondown^R^mathrel^^left harpoon-down
021BE^↾^\upharpoonright^\upharpoonright^R^mathrel^amssymb^= \restriction (amssymb), = \upharpoonrightup (wrisym), a: up harpoon-right
021BF^↿^\upharpoonleft^\upharpoonleft^R^mathrel^amssymb^= \upharpoonleftup (wrisym), up harpoon-left
021C0^⇀^\rightharpoonup^\rightharpoonup^R^mathrel^^right harpoon-up
021C1^⇁^\rightharpoondown^\rightharpoondown^R^mathrel^^right harpoon-down
021C2^⇂^\downharpoonright^\downharpoonright^R^mathrel^amssymb^= \upharpoonrightdown (wrisym), down harpoon-right
021C3^⇃^\downharpoonleft^\downharpoonleft^R^mathrel^amssymb^= \upharpoonleftdown (wrisym), down harpoon-left
021C4^⇄^\rightleftarrows^\rightleftarrows^R^mathrel^amssymb^= \rightleftarrow (wrisym), right arrow over left arrow
021C5^⇅^\updownarrows^\updownarrows^R^mathrel^mathabx^= \uparrowdownarrow (wrisym), up arrow, down arrow
021C6^⇆^\leftrightarrows^\leftrightarrows^R^mathrel^amssymb^= \leftrightarrow (wrisym), left arrow over right arrow
021C7^⇇^\leftleftarrows^\leftleftarrows^R^mathrel^amssymb fourier^two left arrows
021C8^⇈^\upuparrows^\upuparrows^R^mathrel^amssymb^two up arrows
021C9^⇉^\rightrightarrows^\rightrightarrows^R^mathrel^amssymb fourier^two right arrows
021CA^⇊^\downdownarrows^\downdownarrows^R^mathrel^amssymb^two down arrows
021CB^⇋^\leftrightharpoons^\leftrightharpoons^R^mathrel^amssymb^= \revequilibrium (wrisym), left harpoon over right
021CC^⇌^\rightleftharpoons^\rightleftharpoons^R^mathrel^^= \equilibrium (wrisym), right harpoon over left
021CD^⇍^\nLeftarrow^\nLeftarrow^R^mathrel^amssymb^not implied by
021CE^⇎^\nLeftrightarrow^\nLeftrightarrow^R^mathrel^amssymb^not left and right double arrows
021CF^⇏^\nRightarrow^\nRightarrow^R^mathrel^amssymb^not implies
021D0^⇐^\Leftarrow^\Leftarrow^R^mathrel^^left double arrow
021D1^⇑^\Uparrow^\Uparrow^R^mathrel^^up double arrow
021D2^⇒^\Rightarrow^\Rightarrow^R^mathrel^-marvosym^right double arrow
021D3^⇓^\Downarrow^\Downarrow^R^mathrel^^down double arrow
021D4^⇔^\Leftrightarrow^\Leftrightarrow^R^mathrel^^left and right double arrow
021D5^⇕^\Updownarrow^\Updownarrow^R^mathrel^^up and down double arrow
021D6^⇖^\Nwarrow^\Nwarrow^R^mathrel^txfonts^nw pointing double arrow
021D7^⇗^\Nearrow^\Nearrow^R^mathrel^txfonts^ne pointing double arrow
021D8^⇘^\Searrow^\Searrow^R^mathrel^txfonts^se pointing double arrow
021D9^⇙^\Swarrow^\Swarrow^R^mathrel^txfonts^sw pointing double arrow
021DA^⇚^\Lleftarrow^\Lleftarrow^R^mathrel^amssymb^left triple arrow
021DB^⇛^\Rrightarrow^\Rrightarrow^R^mathrel^amssymb^right triple arrow
021DC^⇜^\leftsquigarrow^\leftsquigarrow^R^mathrel^mathabx txfonts^LEFTWARDS SQUIGGLE ARROW
021DD^⇝^\rightsquigarrow^\rightsquigarrow^R^mathrel^amssymb^RIGHTWARDS SQUIGGLE ARROW
021DE^⇞^^\nHuparrow^R^mathord^^UPWARDS ARROW WITH DOUBLE STROKE
021DF^⇟^^\nHdownarrow^R^mathord^^DOWNWARDS ARROW WITH DOUBLE STROKE
021E0^⇠^\dashleftarrow^\leftdasharrow^R^mathord^amsfonts^LEFTWARDS DASHED ARROW
021E1^⇡^^\updasharrow^R^mathord^^UPWARDS DASHED ARROW
021E2^⇢^\dashrightarrow^\rightdasharrow^R^mathord^amsfonts^= \dasharrow (amsfonts), RIGHTWARDS DASHED ARROW
021E3^⇣^^\downdasharrow^R^mathord^^DOWNWARDS DASHED ARROW
021E4^⇤^\LeftArrowBar^\barleftarrow^R^mathrel^wrisym^LEFTWARDS ARROW TO BAR
021E5^⇥^\RightArrowBar^\rightarrowbar^R^mathrel^wrisym^RIGHTWARDS ARROW TO BAR
021E6^⇦^^\leftwhitearrow^R^mathord^^LEFTWARDS WHITE ARROW
021E7^⇧^^\upwhitearrow^R^mathord^^UPWARDS WHITE ARROW
021E8^⇨^^\rightwhitearrow^R^mathord^^RIGHTWARDS WHITE ARROW
021E9^⇩^^\downwhitearrow^R^mathord^^DOWNWARDS WHITE ARROW
021EA^⇪^^\whitearrowupfrombar^R^mathord^^UPWARDS WHITE ARROW FROM BAR
021EB^⇫^^^R^mathord^^UPWARDS WHITE ARROW ON PEDESTAL
021EC^⇬^^^R^mathord^^UPWARDS WHITE ARROW ON PEDESTAL WITH HORIZONTAL BAR
021ED^⇭^^^R^mathord^^UPWARDS WHITE ARROW ON PEDESTAL WITH VERTICAL BAR
021EE^⇮^^^R^mathord^^UPWARDS WHITE DOUBLE ARROW
021EF^⇯^^^R^mathord^^UPWARDS WHITE DOUBLE ARROW ON PEDESTAL
021F0^⇰^^^R^mathord^^RIGHTWARDS WHITE ARROW FROM WALL
021F1^⇱^^^R^mathord^^NORTH WEST ARROW TO CORNER
021F2^⇲^^^R^mathord^^SOUTH EAST ARROW TO CORNER
021F3^⇳^^^R^mathord^^UP DOWN WHITE ARROW
021F4^⇴^^\circleonrightarrow^R^mathrel^^RIGHT ARROW WITH SMALL CIRCLE
021F5^⇵^\downuparrows^\downuparrows^R^mathrel^mathabx^= \downarrowuparrow (wrisym), DOWNWARDS ARROW LEFTWARDS OF UPWARDS ARROW
021F6^⇶^^\rightthreearrows^R^mathrel^^THREE RIGHTWARDS ARROWS
021F7^⇷^^\nvleftarrow^R^mathrel^^LEFTWARDS ARROW WITH VERTICAL STROKE
021F8^⇸^\pfun^\nvrightarrow^R^mathrel^oz^RIGHTWARDS ARROW WITH VERTICAL STROKE, z notation partial function
021F9^⇹^^\nvleftrightarrow^R^mathrel^^LEFT RIGHT ARROW WITH VERTICAL STROKE, z notation partial relation
021FA^⇺^^\nVleftarrow^R^mathrel^^LEFTWARDS ARROW WITH DOUBLE VERTICAL STROKE
021FB^⇻^\ffun^\nVrightarrow^R^mathrel^oz^RIGHTWARDS ARROW WITH DOUBLE VERTICAL STROKE, z notation finite function
021FC^⇼^^\nVleftrightarrow^R^mathrel^^LEFT RIGHT ARROW WITH DOUBLE VERTICAL STROKE, z notation finite relation
021FD^⇽^\leftarrowtriangle^\leftarrowtriangle^R^mathrel^stmaryrd^LEFTWARDS OPEN-HEADED ARROW
021FE^⇾^\rightarrowtriangle^\rightarrowtriangle^R^mathrel^stmaryrd^RIGHTWARDS OPEN-HEADED ARROW
021FF^⇿^\leftrightarrowtriangle^\leftrightarrowtriangle^R^mathrel^stmaryrd^LEFT RIGHT OPEN-HEADED ARROW
02200^∀^\forall^\forall^U^mathord^^FOR ALL
02201^∁^\complement^\complement^U^mathord^amssymb fourier^COMPLEMENT sign
02202^∂^\partial^\partial^N^mathord^-literal^= \partialup (kpfonts), PARTIAL DIFFERENTIAL
02203^∃^\exists^\exists^U^mathord^^= \exi (oz), at least one exists
02204^∄^\nexists^\nexists^U^mathord^amssymb fourier^= \nexi (oz), negated exists
02205^∅^\varnothing^\varnothing^N^mathord^amssymb^circle, slash
02206^∆^^\increment^U^mathord^^# \mathrm{\Delta}, laplacian (Delta; nabla square)
02207^∇^\nabla^\nabla^U^mathord^^NABLA, del, hamilton operator
02208^∈^\in^\in^R^mathrel^^set membership, variant
02209^∉^\notin^\notin^R^mathrel^^= \nin (wrisym), negated set membership
0220A^∊^^\smallin^R^mathrel^^set membership (small set membership)
0220B^∋^\ni^\ni^R^mathrel^^= \owns, contains, variant
0220C^∌^\nni^\nni^R^mathrel^wrisym^= \notni (txfonts), = \notowner (mathabx), = \notowns (fourier), negated contains, variant
0220D^∍^^\smallni^R^mathrel^^r: contains (SMALL CONTAINS AS MEMBER)
0220E^∎^^\QED^N^mathord^^# \blacksquare (amssymb), END OF PROOF
0220F^∏^\prod^\prod^L^mathop^^product operator
02210^∐^\coprod^\coprod^L^mathop^^coproduct operator
02211^∑^\sum^\sum^L^mathop^^summation operator
02212^−^-^\minus^V^mathbin^^MINUS SIGN
02213^∓^\mp^\mp^V^mathbin^^MINUS-OR-PLUS SIGN
02214^∔^\dotplus^\dotplus^B^mathbin^amssymb^plus sign, dot above
02215^∕^\slash^\divslash^B^mathbin^^DIVISION SLASH
02216^∖^\smallsetminus^\smallsetminus^B^mathbin^amssymb fourier^small SET MINUS (cf. reverse solidus)
02217^∗^\ast^\ast^B^mathbin^^ASTERISK OPERATOR (Hodge star operator)
02218^∘^\circ^\vysmwhtcircle^B^mathbin^^composite function (small circle)
02219^∙^\bullet^\vysmblkcircle^B^mathbin^^BULLET OPERATOR
0221A^√^\sqrt^\sqrt^L^mathradical^^radical
0221B^∛^\sqrt[3]^\cuberoot^L^mathradical^^CUBE ROOT
0221C^∜^\sqrt[4]^\fourthroot^L^mathradical^^FOURTH ROOT
0221D^∝^\propto^\propto^R^mathrel^^# \varpropto (amssymb), is PROPORTIONAL TO
0221E^∞^\infty^\infty^N^mathord^^INFINITY
0221F^∟^\rightangle^\rightangle^N^mathord^wrisym^right (90 degree) angle
02220^∠^\angle^\angle^N^mathord^^ANGLE
02221^∡^\measuredangle^\measuredangle^N^mathord^amssymb wrisym^MEASURED ANGLE
02222^∢^\sphericalangle^\sphericalangle^N^mathord^amssymb wrisym^SPHERICAL ANGLE
02223^∣^\mid^\mid^R^mathrel^^r: DIVIDES
02224^∤^\nmid^\nmid^R^mathrel^amssymb^negated mid, DOES NOT DIVIDE
02225^∥^\parallel^\parallel^R^mathrel^^parallel
02226^∦^\nparallel^\nparallel^R^mathrel^amssymb fourier^not parallel
02227^∧^\wedge^\wedge^B^mathbin^amssymb^= \land, b: LOGICAL AND
02228^∨^\vee^\vee^B^mathbin^^= \lor, b: LOGICAL OR
02229^∩^\cap^\cap^B^mathbin^^INTERSECTION
0222A^∪^\cup^\cup^B^mathbin^^UNION or logical sum
0222B^∫^\int^\int^L^mathop^^INTEGRAL operator
0222C^∬^\iint^\iint^L^mathop^amsmath fourier esint wasysym^DOUBLE INTEGRAL operator
0222D^∭^\iiint^\iiint^L^mathop^amsmath fourier esint wasysym^TRIPLE INTEGRAL operator
0222E^∮^\oint^\oint^L^mathop^^CONTOUR INTEGRAL operator
0222F^∯^\oiint^\oiint^L^mathop^esint wasysym fourier^= \dbloint (wrisym), double contour integral operator
02230^∰^\oiiint^\oiiint^L^mathop^txfonts fourier^triple contour integral operator
02231^∱^^\intclockwise^L^mathop^^CLOCKWISE INTEGRAL
02232^∲^\varointclockwise^\varointclockwise^L^mathop^esint^= \clockoint (wrisym), contour integral, clockwise
02233^∳^\ointctrclockwise^\ointctrclockwise^L^mathop^esint^= \cntclockoint (wrisym), contour integral, anticlockwise
02234^∴^\therefore^\therefore^R^mathord^amssymb wrisym^= \wasytherefore (wasysym), THEREFORE
02235^∵^\because^\because^R^mathord^amssymb wrisym^BECAUSE
02236^∶^:^\mathratio^R^mathrel^^x \colon, RATIO
02237^∷^\Proportion^\Colon^R^mathrel^wrisym^# ::, two colons
02238^∸^^\dotminus^B^mathbin^^minus sign, dot above
02239^∹^\eqcolon^\dashcolon^R^mathrel^txfonts -mathabx^# -: ,EXCESS
0223A^∺^^\dotsminusdots^R^mathrel^^minus with four dots, GEOMETRIC PROPORTION
0223B^∻^^\kernelcontraction^R^mathrel^^HOMOTHETIC
0223C^∼^\sim^\sim^R^mathrel^^similar to, TILDE OPERATOR
0223D^∽^\backsim^\backsim^R^mathrel^amssymb^reverse similar
0223E^∾^^\invlazys^B^mathbin^^most positive, INVERTED LAZY S
0223F^∿^\AC^\sinewave^N^mathord^wasysym^SINE WAVE, alternating current
02240^≀^\wr^\wr^B^mathbin^amssymb^WREATH PRODUCT
02241^≁^\nsim^\nsim^R^mathrel^amssymb wrisym^not similar
02242^≂^\eqsim^\eqsim^R^mathrel^amssymb^equals, similar
02243^≃^\simeq^\simeq^R^mathrel^^similar, equals
02244^≄^\nsimeq^\nsime^R^mathrel^txfonts^not similar, equals
02245^≅^\cong^\cong^R^mathrel^^congruent with
02246^≆^^\simneqq^R^mathrel^^similar, not equals [vert only for 9573 entity]
02247^≇^\ncong^\ncong^R^mathrel^amssymb wrisym^not congruent with
02248^≈^\approx^\approx^R^mathrel^^approximate
02249^≉^\napprox^\napprox^R^mathrel^wrisym^not approximate
0224A^≊^\approxeq^\approxeq^R^mathrel^amssymb^approximate, equals
0224B^≋^^\approxident^R^mathrel^^approximately identical to
0224C^≌^^\backcong^R^mathrel^^ALL EQUAL TO
0224D^≍^\asymp^\asymp^R^mathrel^^asymptotically equal to
0224E^≎^\Bumpeq^\Bumpeq^R^mathrel^amssymb wrisym^bumpy equals
0224F^≏^\bumpeq^\bumpeq^R^mathrel^amssymb wrisym^bumpy equals, equals
02250^≐^\doteq^\doteq^R^mathrel^^= \dotequal (wrisym), equals, single dot above
02251^≑^\Doteq^\Doteq^R^mathrel^amssymb^= \doteqdot (amssymb), /doteq r: equals, even dots
02252^≒^\fallingdotseq^\fallingdotseq^R^mathrel^amssymb^equals, falling dots
02253^≓^\risingdotseq^\risingdotseq^R^mathrel^amssymb^equals, rising dots
02254^≔^\coloneq^\coloneq^R^mathrel^mathabx -txfonts^= \coloneqq (txfonts), = \SetDelayed (wrisym), # := colon, equals
02255^≕^\eqcolon^\eqcolon^R^mathrel^mathabx -txfonts^= \eqqcolon (txfonts), # =:, equals, colon
02256^≖^\eqcirc^\eqcirc^R^mathrel^amssymb^circle on equals sign
02257^≗^\circeq^\circeq^R^mathrel^amssymb^circle, equals
02258^≘^^\arceq^R^mathrel^^arc, equals; CORRESPONDS TO
02259^≙^\corresponds^\wedgeq^R^mathrel^mathabx^= \sdef (oz), t \Corresponds (marvosym), corresponds to (wedge over equals)
0225A^≚^^\veeeq^R^mathrel^^logical or, equals
0225B^≛^^\stareq^R^mathrel^^STAR EQUALS
0225C^≜^\triangleq^\triangleq^R^mathrel^amssymb^= \varsdef (oz), triangle, equals
0225D^≝^^\eqdef^R^mathrel^^equals by definition
0225E^≞^^\measeq^R^mathrel^^MEASURED BY (m over equals)
0225F^≟^^\questeq^R^mathrel^^equal with questionmark
02260^≠^\neq^\ne^R^mathrel^^= \ne, r: not equal
02261^≡^\equiv^\equiv^R^mathrel^^identical with
02262^≢^\nequiv^\nequiv^R^mathrel^wrisym^not identical with
02263^≣^^\Equiv^R^mathrel^^strict equivalence (4 lines)
02264^≤^\leq^\leq^R^mathrel^^= \le, r: less-than-or-equal
02265^≥^\geq^\geq^R^mathrel^^= \ge, r: greater-than-or-equal
02266^≦^\leqq^\leqq^R^mathrel^amssymb^less, double equals
02267^≧^\geqq^\geqq^R^mathrel^amssymb^greater, double equals
02268^≨^\lneqq^\lneqq^R^mathrel^amssymb^less, not double equals
02269^≩^\gneqq^\gneqq^R^mathrel^amssymb^greater, not double equals
0226A^≪^\ll^\ll^R^mathrel^^much less than, type 2
0226B^≫^\gg^\gg^R^mathrel^^much greater than, type 2
0226C^≬^\between^\between^R^mathrel^amssymb^BETWEEN
0226D^≭^\notasymp^\nasymp^R^mathrel^mathabx^= \nasymp (wrisym), not asymptotically equal to
0226E^≮^\nless^\nless^R^mathrel^amssymb^NOT LESS-THAN
0226F^≯^\ngtr^\ngtr^R^mathrel^amssymb^NOT GREATER-THAN
02270^≰^\nleq^\nleq^R^mathrel^amssymb wrisym^= \nleqslant (fourier), not less-than-or-equal
02271^≱^\ngeq^\ngeq^R^mathrel^amssymb wrisym^= \ngeqslant (fourier), not greater-than-or-equal
02272^≲^\lesssim^\lesssim^R^mathrel^amssymb^= \apprle (wasysym), = \LessTilde (wrisym), less, similar
02273^≳^\gtrsim^\gtrsim^R^mathrel^amssymb^= \apprge (wasysym), = \GreaterTilde (wrisym), greater, similar
02274^≴^\NotLessTilde^\nlesssim^R^mathrel^wrisym^not less, similar
02275^≵^\NotGreaterTilde^\ngtrsim^R^mathrel^wrisym^not greater, similar
02276^≶^\lessgtr^\lessgtr^R^mathrel^amssymb^less, greater
02277^≷^\gtrless^\gtrless^R^mathrel^amssymb^= \GreaterLess (wrisym), greater, less
02278^≸^^\nlessgtr^R^mathrel^wrisym^not less, greater
02279^≹^\NotGreaterLess^\ngtrless^R^mathrel^wrisym^not greater, less
0227A^≺^\prec^\prec^R^mathrel^^PRECEDES
0227B^≻^\succ^\succ^R^mathrel^^SUCCEEDS
0227C^≼^\preccurlyeq^\preccurlyeq^R^mathrel^amssymb^= \PrecedesSlantEqual (wrisym), precedes, curly equals
0227D^≽^\succcurlyeq^\succcurlyeq^R^mathrel^amssymb^= \SucceedsSlantEqual (wrisym), succeeds, curly equals
0227E^≾^\precsim^\precsim^R^mathrel^amssymb^= \PrecedesTilde (wrisym), precedes, similar
0227F^≿^\succsim^\succsim^R^mathrel^amssymb^= \SucceedsTilde (wrisym), succeeds, similar
02280^⊀^\nprec^\nprec^R^mathrel^amssymb wrisym^not precedes
02281^⊁^\nsucc^\nsucc^R^mathrel^amssymb wrisym^not succeeds
02282^⊂^\subset^\subset^R^mathrel^^subset or is implied by
02283^⊃^\supset^\supset^R^mathrel^^superset or implies
02284^⊄^\nsubset^\nsubset^R^mathrel^wrisym^not subset, variant [slash negation]
02285^⊅^\nsupset^\nsupset^R^mathrel^wrisym^not superset, variant [slash negation]
02286^⊆^\subseteq^\subseteq^R^mathrel^^subset, equals
02287^⊇^\supseteq^\supseteq^R^mathrel^^superset, equals
02288^⊈^\nsubseteq^\nsubseteq^R^mathrel^amssymb wrisym^not subset, equals
02289^⊉^\nsupseteq^\nsupseteq^R^mathrel^amssymb wrisym^not superset, equals
0228A^⊊^\subsetneq^\subsetneq^R^mathrel^amssymb^= \varsubsetneq (fourier), subset, not equals
0228B^⊋^\supsetneq^\supsetneq^R^mathrel^amssymb^superset, not equals
0228C^⊌^^\cupleftarrow^B^mathbin^^MULTISET
0228D^⊍^^\cupdot^B^mathbin^^union, with dot
0228E^⊎^\uplus^\uplus^B^mathbin^^= \buni (oz), plus sign in union
0228F^⊏^\sqsubset^\sqsubset^R^mathrel^amsfonts^square subset
02290^⊐^\sqsupset^\sqsupset^R^mathrel^amsfonts^square superset
02291^⊑^\sqsubseteq^\sqsubseteq^R^mathrel^^square subset, equals
02292^⊒^\sqsupseteq^\sqsupseteq^R^mathrel^^square superset, equals
02293^⊓^\sqcap^\sqcap^B^mathbin^^square intersection
02294^⊔^\sqcup^\sqcup^B^mathbin^^square union
02295^⊕^\oplus^\oplus^B^mathbin^^plus sign in circle
02296^⊖^\ominus^\ominus^B^mathbin^^minus sign in circle
02297^⊗^\otimes^\otimes^B^mathbin^^multiply sign in circle
02298^⊘^\oslash^\oslash^B^mathbin^^solidus in circle
02299^⊙^\odot^\odot^B^mathbin^^middle dot in circle
0229A^⊚^\circledcirc^\circledcirc^B^mathbin^amssymb^small circle in circle
0229B^⊛^\circledast^\circledast^B^mathbin^amssymb^asterisk in circle
0229C^⊜^^\circledequal^B^mathbin^^equal in circle
0229D^⊝^\circleddash^\circleddash^B^mathbin^amssymb^hyphen in circle
0229E^⊞^\boxplus^\boxplus^B^mathbin^amssymb^plus sign in box
0229F^⊟^\boxminus^\boxminus^B^mathbin^amssymb^minus sign in box
022A0^⊠^\boxtimes^\boxtimes^B^mathbin^amssymb^multiply sign in box
022A1^⊡^\boxdot^\boxdot^B^mathbin^amssymb stmaryrd^/dotsquare /boxdot b: small dot in box
022A2^⊢^\vdash^\vdash^R^mathrel^^RIGHT TACK, proves, implies, yields, (vertical, dash)
022A3^⊣^\dashv^\dashv^R^mathrel^amssymb^LEFT TACK, non-theorem, does not yield, (dash, vertical)
022A4^⊤^\top^\top^N^mathord^^DOWN TACK, top
022A5^⊥^\bot^\bot^R^mathord^^UP TACK, bottom
022A6^⊦^^\assert^R^mathrel^^# \vdash, ASSERTION (vertical, short dash)
022A7^⊧^\models^\models^R^mathrel^^MODELS (vertical, short double dash)
022A8^⊨^\vDash^\vDash^R^mathrel^amssymb fourier^TRUE (vertical, double dash)
022A9^⊩^\Vdash^\Vdash^R^mathrel^amssymb^double vertical, dash
022AA^⊪^\Vvdash^\Vvdash^R^mathrel^amssymb^triple vertical, dash
022AB^⊫^\VDash^\VDash^R^mathrel^mathabx txfonts^double vert, double dash
022AC^⊬^\nvdash^\nvdash^R^mathrel^amssymb^not vertical, dash
022AD^⊭^\nvDash^\nvDash^R^mathrel^amssymb fourier^not vertical, double dash
022AE^⊮^\nVdash^\nVdash^R^mathrel^amssymb^not double vertical, dash
022AF^⊯^\nVDash^\nVDash^R^mathrel^amssymb^not double vert, double dash
022B0^⊰^^\prurel^R^mathrel^^element PRECEDES UNDER RELATION
022B1^⊱^^\scurel^R^mathrel^^SUCCEEDS UNDER RELATION
022B2^⊲^\vartriangleleft^\vartriangleleft^R^mathrel^amssymb^left triangle, open, variant
022B3^⊳^\vartriangleright^\vartriangleright^R^mathrel^amssymb^right triangle, open, variant
022B4^⊴^\trianglelefteq^\trianglelefteq^R^mathrel^amssymb^= \unlhd (wrisym), left triangle, equals
022B5^⊵^\trianglerighteq^\trianglerighteq^R^mathrel^amssymb^= \unrhd (wrisym), right triangle, equals
022B6^⊶^\multimapdotbothA^\origof^R^mathrel^txfonts^ORIGINAL OF
022B7^⊷^\multimapdotbothB^\imageof^R^mathrel^txfonts^IMAGE OF
022B8^⊸^\multimap^\multimap^R^mathrel^amssymb^/MULTIMAP a:
022B9^⊹^^\hermitmatrix^B^mathord^^HERMITIAN CONJUGATE MATRIX
022BA^⊺^\intercal^\intercal^B^mathbin^amssymb fourier^intercal
022BB^⊻^\veebar^\veebar^B^mathbin^amssymb^logical or, bar below (large vee); exclusive disjunction
022BC^⊼^\barwedge^\barwedge^B^mathbin^amssymb^logical NAND (bar over wedge)
022BD^⊽^^\barvee^B^mathbin^^bar, vee (large vee)
022BE^⊾^^\measuredrightangle^N^mathord^^right angle-measured [with arc]
022BF^⊿^^\varlrtriangle^N^mathord^^RIGHT TRIANGLE
022C0^⋀^\bigwedge^\bigwedge^L^mathop^^logical or operator
022C1^⋁^\bigvee^\bigvee^L^mathop^^logical and operator
022C2^⋂^\bigcap^\bigcap^L^mathop^^= \dint (oz), \dinter (oz), intersection operator
022C3^⋃^\bigcup^\bigcup^L^mathop^^= \duni (oz), \dunion (oz), union operator
022C4^⋄^\diamond^\smwhtdiamond^B^mathbin^^DIAMOND OPERATOR (white diamond)
022C5^⋅^\cdot^\cdot^B^mathbin^^DOT OPERATOR (small middle dot)
022C6^⋆^\star^\star^B^mathbin^^small star, filled, low
022C7^⋇^\divideontimes^\divideontimes^B^mathbin^amssymb^division on times
022C8^⋈^\bowtie^\bowtie^R^mathrel^^= \lrtimes (txfonts), BOWTIE
022C9^⋉^\ltimes^\ltimes^B^mathbin^amssymb^times sign, left closed
022CA^⋊^\rtimes^\rtimes^B^mathbin^amssymb^times sign, right closed
022CB^⋋^\leftthreetimes^\leftthreetimes^B^mathbin^amssymb^LEFT SEMIDIRECT PRODUCT
022CC^⋌^\rightthreetimes^\rightthreetimes^B^mathbin^amssymb^RIGHT SEMIDIRECT PRODUCT
022CD^⋍^\backsimeq^\backsimeq^R^mathrel^amssymb^reverse similar, equals
022CE^⋎^\curlyvee^\curlyvee^B^mathbin^amssymb^CURLY LOGICAL OR
022CF^⋏^\curlywedge^\curlywedge^B^mathbin^amssymb^CURLY LOGICAL AND
022D0^⋐^\Subset^\Subset^R^mathrel^amssymb^DOUBLE SUBSET
022D1^⋑^\Supset^\Supset^R^mathrel^amssymb^DOUBLE SUPERSET
022D2^⋒^\Cap^\Cap^B^mathbin^amssymb^/cap /doublecap b: DOUBLE INTERSECTION
022D3^⋓^\Cup^\Cup^B^mathbin^amssymb^/cup /doublecup b: DOUBLE UNION
022D4^⋔^\pitchfork^\pitchfork^R^mathrel^amssymb^PITCHFORK
022D5^⋕^\hash^\equalparallel^R^mathrel^mathabx^parallel, equal; equal or parallel
022D6^⋖^\lessdot^\lessdot^R^mathrel^amssymb^less than, with dot
022D7^⋗^\gtrdot^\gtrdot^R^mathrel^amssymb^greater than, with dot
022D8^⋘^\lll^\lll^R^mathrel^amssymb -mathabx^triple less-than
022D9^⋙^\ggg^\ggg^R^mathrel^amssymb -mathabx^triple greater-than
022DA^⋚^\lesseqgtr^\lesseqgtr^R^mathrel^amssymb^less, equals, greater
022DB^⋛^\gtreqless^\gtreqless^R^mathrel^amssymb^greater, equals, less
022DC^⋜^^\eqless^R^mathrel^^equal-or-less
022DD^⋝^^\eqgtr^R^mathrel^^equal-or-greater
022DE^⋞^\curlyeqprec^\curlyeqprec^R^mathrel^amssymb^curly equals, precedes
022DF^⋟^\curlyeqsucc^\curlyeqsucc^R^mathrel^amssymb^curly equals, succeeds
022E0^⋠^\npreceq^\npreccurlyeq^R^mathrel^amssymb wrisym^DOES NOT PRECEDE OR EQUAL
022E1^⋡^\nsucceq^\nsucccurlyeq^R^mathrel^amssymb wrisym^not succeeds, curly equals
022E2^⋢^\nsqsubseteq^\nsqsubseteq^R^mathrel^wrisym^not, square subset, equals
022E3^⋣^\nsqsupseteq^\nsqsupseteq^R^mathrel^wrisym^not, square superset, equals
022E4^⋤^^\sqsubsetneq^R^mathrel^^square subset, not equals
022E5^⋥^^\sqsupsetneq^R^mathrel^^square superset, not equals
022E6^⋦^\lnsim^\lnsim^R^mathrel^amssymb^less, not similar
022E7^⋧^\gnsim^\gnsim^R^mathrel^amssymb^greater, not similar
022E8^⋨^\precnsim^\precnsim^R^mathrel^amssymb^precedes, not similar
022E9^⋩^\succnsim^\succnsim^R^mathrel^amssymb^succeeds, not similar
022EA^⋪^\ntriangleleft^\ntriangleleft^R^mathrel^amssymb^= \NotLeftTriangle (wrisym), not left triangle
022EB^⋫^\ntriangleright^\ntriangleright^R^mathrel^amssymb^= \NotRightTriangle (wrisym), not right triangle
022EC^⋬^\ntrianglelefteq^\ntrianglelefteq^R^mathrel^amssymb^= \nunlhd (wrisym), not left triangle, equals
022ED^⋭^\ntrianglerighteq^\ntrianglerighteq^R^mathrel^amssymb^= \nunrhd (wrisym), not right triangle, equals
022EE^⋮^\vdots^\vdots^R^mathrel^^VERTICAL ELLIPSIS
022EF^⋯^\cdots^\unicodecdots^R^mathord^^three dots, centered
022F0^⋰^\iddots^\adots^R^mathrel^mathdots^= \adots (yhmath), three dots, ascending
022F1^⋱^\ddots^\ddots^R^mathrel^^three dots, descending
022F2^⋲^^\disin^R^mathrel^^ELEMENT OF WITH LONG HORIZONTAL STROKE
022F3^⋳^^\varisins^R^mathrel^^ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE
022F4^⋴^^\isins^R^mathrel^^SMALL ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE
022F5^⋵^^\isindot^R^mathrel^^ELEMENT OF WITH DOT ABOVE
022F6^⋶^\barin^\varisinobar^R^mathrel^mathabx^ELEMENT OF WITH OVERBAR
022F7^⋷^^\isinobar^R^mathrel^^SMALL ELEMENT OF WITH OVERBAR
022F8^⋸^^\isinvb^R^mathrel^^ELEMENT OF WITH UNDERBAR
022F9^⋹^^\isinE^R^mathrel^^ELEMENT OF WITH TWO HORIZONTAL STROKES
022FA^⋺^^\nisd^R^mathrel^^CONTAINS WITH LONG HORIZONTAL STROKE
022FB^⋻^^\varnis^R^mathrel^^CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE
022FC^⋼^^\nis^R^mathrel^^SMALL CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE
022FD^⋽^^\varniobar^R^mathrel^^CONTAINS WITH OVERBAR
022FE^⋾^^\niobar^R^mathrel^^SMALL CONTAINS WITH OVERBAR
022FF^⋿^^\bagmember^R^mathrel^^# \mathsf{E}, Z NOTATION BAG MEMBERSHIP
02300^⌀^\diameter^\diameter^N^mathord^mathabx^# \varnothing (amssymb), DIAMETER SIGN
02302^⌂^^\house^N^mathord^^HOUSE
02305^⌅^^\varbarwedge^B^mathbin^^# \barwedge (amssymb), PROJECTIVE (bar over small wedge) not nand
02306^⌆^^\vardoublebarwedge^B^mathbin^^# \doublebarwedge (amssymb), PERSPECTIVE (double bar over small wedge)
02308^⌈^\lceil^\lceil^O^mathopen^^LEFT CEILING
02309^⌉^\rceil^\rceil^C^mathclose^^RIGHT CEILING
0230A^⌊^\lfloor^\lfloor^O^mathopen^^LEFT FLOOR
0230B^⌋^\rfloor^\rfloor^C^mathclose^^RIGHT FLOOR
02310^⌐^\invneg^\invnot^N^mathord^wasysym^reverse not
02311^⌑^\wasylozenge^\sqlozenge^N^mathord^wasysym^SQUARE LOZENGE
02312^⌒^^\profline^^mathord^^profile of a line
02313^⌓^^\profsurf^^mathord^^profile of a surface
02317^⌗^^\viewdata^^mathord^^VIEWDATA SQUARE
02319^⌙^^\turnednot^N^mathord^^TURNED NOT SIGN
0231C^⌜^\ulcorner^\ulcorner^O^mathopen^amsfonts^upper left corner
0231D^⌝^\urcorner^\urcorner^C^mathclose^amsfonts^upper right corner
0231E^⌞^\llcorner^\llcorner^O^mathopen^amsfonts^lower left corner
0231F^⌟^\lrcorner^\lrcorner^C^mathclose^amsfonts^lower right corner
02320^⌠^^\inttop^G^mathord^^TOP HALF INTEGRAL
02321^⌡^^\intbottom^G^mathord^^BOTTOM HALF INTEGRAL
02322^⌢^\frown^\frown^R^mathrel^^# \smallfrown, FROWN (down curve)
02323^⌣^\smile^\smile^R^mathrel^^# \smallsmile, SMILE (up curve)
0232C^⌬^^\varhexagonlrbonds^^mathord^^six carbon ring, corner down, double bonds lower right etc
02332^⌲^^\conictaper^^mathord^^CONICAL TAPER
02336^⌶^^\topbot^N^mathord^^APL FUNCTIONAL SYMBOL I-BEAM, top and bottom
02337^⌷^^^^mathord^^APL FUNCTIONAL SYMBOL SQUISH QUAD
02338^⌸^^^^mathord^^APL FUNCTIONAL SYMBOL QUAD EQUAL
02339^⌹^\APLinv^^^mathord^wasysym^APL FUNCTIONAL SYMBOL QUAD DIVIDE
0233A^⌺^^^^mathord^^APL FUNCTIONAL SYMBOL QUAD DIAMOND
0233B^⌻^^^^mathord^^APL FUNCTIONAL SYMBOL QUAD JOT
0233C^⌼^^^^mathord^^# \APLcirc{\APLbox} (wasysym), APL FUNCTIONAL SYMBOL QUAD CIRCLE
0233D^⌽^^\obar^B^mathbin^^# \APLvert{\Circle} (wasysym), x \obar (stmaryrd), APL FUNCTIONAL SYMBOL CIRCLE STILE, circle with vertical bar
0233E^⌾^^^^mathord^^# \APLcirc{\Circle} (wasysym), APL FUNCTIONAL SYMBOL CIRCLE JOT
0233F^⌿^\notslash^\APLnotslash^R^mathrel^wasysym^APL FUNCTIONAL SYMBOL SLASH BAR, solidus, bar through
02340^⍀^\notbackslash^\APLnotbackslash^^mathord^wasysym^APL FUNCTIONAL SYMBOL BACKSLASH BAR
02341^⍁^^^^mathord^^APL FUNCTIONAL SYMBOL QUAD SLASH
02342^⍂^^^^mathord^^APL FUNCTIONAL SYMBOL QUAD BACKSLASH
02343^⍃^^^^mathord^^APL FUNCTIONAL SYMBOL QUAD LESS-THAN
02344^⍄^^^^mathord^^APL FUNCTIONAL SYMBOL QUAD GREATER-THAN
02345^⍅^^^^mathord^^APL FUNCTIONAL SYMBOL LEFTWARDS VANE
02346^⍆^^^^mathord^^APL FUNCTIONAL SYMBOL RIGHTWARDS VANE
02347^⍇^\APLleftarrowbox^^^mathord^wasysym^APL FUNCTIONAL SYMBOL QUAD LEFTWARDS ARROW
02348^⍈^\APLrightarrowbox^^^mathord^wasysym^APL FUNCTIONAL SYMBOL QUAD RIGHTWARDS ARROW
02349^⍉^\invdiameter^^^mathord^wasysym^APL FUNCTIONAL SYMBOL CIRCLE BACKSLASH
0234A^⍊^^^^mathord^^APL FUNCTIONAL SYMBOL DOWN TACK UNDERBAR
0234B^⍋^^^^mathord^^# \APLvert{\APLup} (wasysym), APL FUNCTIONAL SYMBOL DELTA STILE
0234C^⍌^^^^mathord^^APL FUNCTIONAL SYMBOL QUAD DOWN CARET
0234D^⍍^^^^mathord^^APL FUNCTIONAL SYMBOL QUAD DELTA
0234E^⍎^^^^mathord^^APL FUNCTIONAL SYMBOL DOWN TACK JOT
0234F^⍏^^^^mathord^^APL FUNCTIONAL SYMBOL UPWARDS VANE
02350^⍐^\APLuparrowbox^^^mathord^wasysym^APL FUNCTIONAL SYMBOL QUAD UPWARDS ARROW
02351^⍑^^^^mathord^^APL FUNCTIONAL SYMBOL UP TACK OVERBAR
02352^⍒^^^^mathord^wasysym^# \APLvert{\APLdown} (wasysym), APL FUNCTIONAL SYMBOL DEL STILE
02353^⍓^^\APLboxupcaret^^mathord^^APL FUNCTIONAL SYMBOL QUAD UP CARET
02354^⍔^^^^mathord^^APL FUNCTIONAL SYMBOL QUAD DEL
02355^⍕^^^^mathord^^APL FUNCTIONAL SYMBOL UP TACK JOT
02356^⍖^^^^mathord^^APL FUNCTIONAL SYMBOL DOWNWARDS VANE
02357^⍗^\APLdownarrowbox^^^mathord^wasysym^APL FUNCTIONAL SYMBOL QUAD DOWNWARDS ARROW
02358^⍘^^^^mathord^^APL FUNCTIONAL SYMBOL QUOTE UNDERBAR
02359^⍙^^^^mathord^^APL FUNCTIONAL SYMBOL DELTA UNDERBAR
0235A^⍚^^^^mathord^^APL FUNCTIONAL SYMBOL DIAMOND UNDERBAR
0235B^⍛^^^^mathord^^APL FUNCTIONAL SYMBOL JOT UNDERBAR
0235C^⍜^^^^mathord^^APL FUNCTIONAL SYMBOL CIRCLE UNDERBAR
0235D^⍝^\APLcomment^^^mathord^wasysym^APL FUNCTIONAL SYMBOL UP SHOE JOT
0235E^⍞^\APLinput^^^mathord^wasysym^APL FUNCTIONAL SYMBOL QUOTE QUAD
0235F^⍟^\APLlog^^^mathord^wasysym^APL FUNCTIONAL SYMBOL CIRCLE STAR
02360^⍠^^^^mathord^^APL FUNCTIONAL SYMBOL QUAD COLON
02361^⍡^^^^mathord^^APL FUNCTIONAL SYMBOL UP TACK DIAERESIS
02362^⍢^^^^mathord^^APL FUNCTIONAL SYMBOL DEL DIAERESIS
02363^⍣^^^^mathord^^APL FUNCTIONAL SYMBOL STAR DIAERESIS
02364^⍤^^^^mathord^^APL FUNCTIONAL SYMBOL JOT DIAERESIS
02365^⍥^^^^mathord^^APL FUNCTIONAL SYMBOL CIRCLE DIAERESIS
02366^⍦^^^^mathord^^APL FUNCTIONAL SYMBOL DOWN SHOE STILE
02367^⍧^^^^mathord^^APL FUNCTIONAL SYMBOL LEFT SHOE STILE
02368^⍨^^^^mathord^^APL FUNCTIONAL SYMBOL TILDE DIAERESIS
02369^⍩^^^^mathord^^APL FUNCTIONAL SYMBOL GREATER-THAN DIAERESIS
0236A^⍪^^^^mathord^^APL FUNCTIONAL SYMBOL COMMA BAR
0236B^⍫^^^^mathord^^# \APLnot{\APLdown} (wasysym), APL FUNCTIONAL SYMBOL DEL TILDE
0236C^⍬^^^^mathord^^APL FUNCTIONAL SYMBOL ZILDE
0236D^⍭^^^^mathord^^APL FUNCTIONAL SYMBOL STILE TILDE
0236E^⍮^^^^mathord^^APL FUNCTIONAL SYMBOL SEMICOLON UNDERBAR
0236F^⍯^^^^mathord^^APL FUNCTIONAL SYMBOL QUAD NOT EQUAL
02370^⍰^^\APLboxquestion^^mathord^^APL FUNCTIONAL SYMBOL QUAD QUESTION
02371^⍱^^^^mathord^^APL FUNCTIONAL SYMBOL DOWN CARET TILDE
02372^⍲^^^^mathord^^APL FUNCTIONAL SYMBOL UP CARET TILDE
02373^⍳^^^^mathord^^APL FUNCTIONAL SYMBOL IOTA
02374^⍴^^^^mathord^^APL FUNCTIONAL SYMBOL RHO
02375^⍵^^^^mathord^^APL FUNCTIONAL SYMBOL OMEGA
02376^⍶^^^^mathord^^APL FUNCTIONAL SYMBOL ALPHA UNDERBAR
02377^⍷^^^^mathord^^APL FUNCTIONAL SYMBOL EPSILON UNDERBAR
02378^⍸^^^^mathord^^APL FUNCTIONAL SYMBOL IOTA UNDERBAR
02379^⍹^^^^mathord^^APL FUNCTIONAL SYMBOL OMEGA UNDERBAR
0237C^⍼^^\rangledownzigzagarrow^R^mathord^^RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW
02394^⎔^^\hexagon^N^mathord^^horizontal benzene ring [hexagon flat open]
0239B^⎛^^\lparenuend^G^mathord^^LEFT PARENTHESIS UPPER HOOK
0239C^⎜^^\lparenextender^G^mathord^^LEFT PARENTHESIS EXTENSION
0239D^⎝^^\lparenlend^G^mathord^^LEFT PARENTHESIS LOWER HOOK
0239E^⎞^^\rparenuend^G^mathord^^RIGHT PARENTHESIS UPPER HOOK
0239F^⎟^^\rparenextender^G^mathord^^RIGHT PARENTHESIS EXTENSION
023A0^⎠^^\rparenlend^G^mathord^^RIGHT PARENTHESIS LOWER HOOK
023A1^⎡^^\lbrackuend^G^mathord^^LEFT SQUARE BRACKET UPPER CORNER
023A2^⎢^^\lbrackextender^G^mathord^^LEFT SQUARE BRACKET EXTENSION
023A3^⎣^^\lbracklend^G^mathord^^LEFT SQUARE BRACKET LOWER CORNER
023A4^⎤^^\rbrackuend^G^mathord^^RIGHT SQUARE BRACKET UPPER CORNER
023A5^⎥^^\rbrackextender^G^mathord^^RIGHT SQUARE BRACKET EXTENSION
023A6^⎦^^\rbracklend^G^mathord^^RIGHT SQUARE BRACKET LOWER CORNER
023A7^⎧^^\lbraceuend^G^mathord^^LEFT CURLY BRACKET UPPER HOOK
023A8^⎨^^\lbracemid^G^mathord^^LEFT CURLY BRACKET MIDDLE PIECE
023A9^⎩^^\lbracelend^G^mathord^^LEFT CURLY BRACKET LOWER HOOK
023AA^⎪^^\vbraceextender^G^mathord^^CURLY BRACKET EXTENSION
023AB^⎫^^\rbraceuend^G^mathord^^RIGHT CURLY BRACKET UPPER HOOK
023AC^⎬^^\rbracemid^G^mathord^^RIGHT CURLY BRACKET MIDDLE PIECE
023AD^⎭^^\rbracelend^G^mathord^^RIGHT CURLY BRACKET LOWER HOOK
023AE^⎮^^\intextender^G^mathord^^INTEGRAL EXTENSION
023AF^⎯^^\harrowextender^G^mathord^^HORIZONTAL LINE EXTENSION (used to extend arrows)
023B0^⎰^^\lmoustache^R^mathord^^? \lmoustache, UPPER LEFT OR LOWER RIGHT CURLY BRACKET SECTION
023B1^⎱^^\rmoustache^R^mathord^^? \rmoustache, UPPER RIGHT OR LOWER LEFT CURLY BRACKET SECTION
023B2^⎲^^\sumtop^G^mathord^^SUMMATION TOP
023B3^⎳^^\sumbottom^G^mathord^^SUMMATION BOTTOM
023B4^⎴^^\overbracket^N^mathover^^TOP SQUARE BRACKET
023B5^⎵^^\underbracket^N^mathunder^^BOTTOM SQUARE BRACKET
023B6^⎶^^\bbrktbrk^N^mathord^^BOTTOM SQUARE BRACKET OVER TOP SQUARE BRACKET
023B7^⎷^^\sqrtbottom^G^mathord^^RADICAL SYMBOL BOTTOM
023B8^⎸^^\lvboxline^^mathord^^LEFT VERTICAL BOX LINE
023B9^⎹^^\rvboxline^^mathord^^RIGHT VERTICAL BOX LINE
023CE^⏎^^\varcarriagereturn^^mathord^^RETURN SYMBOL
023D0^⏐^^^G^mathord^^VERTICAL LINE EXTENSION (VERTICAL LINE EXTENSION)
023DC^⏜^\overparen^\overparen^N^mathover^wrisym^= \wideparen (yhmath mathabx fourier), TOP PARENTHESIS (mathematical use)
023DD^⏝^\underparen^\underparen^N^mathunder^wrisym^BOTTOM PARENTHESIS (mathematical use)
023DE^⏞^\overbrace^\overbrace^N^mathover^^TOP CURLY BRACKET (mathematical use)
023DF^⏟^\underbrace^\underbrace^N^mathunder^^BOTTOM CURLY BRACKET (mathematical use)
023E0^⏠^^\obrbrak^N^mathord^^TOP TORTOISE SHELL BRACKET (mathematical use)
023E1^⏡^^\ubrbrak^N^mathord^^BOTTOM TORTOISE SHELL BRACKET (mathematical use)
023E2^⏢^^\trapezium^N^mathord^^WHITE TRAPEZIUM
023E3^⏣^^\benzenr^N^mathord^^BENZENE RING WITH CIRCLE
023E4^⏤^^\strns^N^mathord^^STRAIGHTNESS
023E5^⏥^^\fltns^N^mathord^^FLATNESS
023E6^⏦^^\accurrent^N^mathord^^# \AC (wasysym), AC CURRENT
023E7^⏧^^\elinters^N^mathord^^ELECTRICAL INTERSECTION
024C8^Ⓢ^^^N^mathord^^oS capital S in circle
02506^┆^^\bdtriplevdash^^mathord^^doubly broken vert
02580^▀^^\blockuphalf^^mathord^^UPPER HALF BLOCK
02584^▄^^\blocklowhalf^^mathord^^LOWER HALF BLOCK
02588^█^^\blockfull^^mathord^^FULL BLOCK
0258C^▌^^\blocklefthalf^^mathord^^LEFT HALF BLOCK
02590^▐^^\blockrighthalf^^mathord^^RIGHT HALF BLOCK
02591^░^^\blockqtrshaded^^mathord^^25\% shaded block
02592^▒^^\blockhalfshaded^^mathord^^50\% shaded block
02593^▓^^\blockthreeqtrshaded^^mathord^^75\% shaded block
025A0^■^^\mdlgblksquare^N^mathord^^square, filled
025A1^□^^\mdlgwhtsquare^N^mathord^^square, open
025A2^▢^^\squoval^^mathord^^WHITE SQUARE WITH ROUNDED CORNERS
025A3^▣^^\blackinwhitesquare^^mathord^^WHITE SQUARE CONTAINING BLACK SMALL SQUARE
025A4^▤^^\squarehfill^^mathord^^square, horizontal rule filled
025A5^▥^^\squarevfill^^mathord^^square, vertical rule filled
025A6^▦^^\squarehvfill^^mathord^^SQUARE WITH ORTHOGONAL CROSSHATCH FILL
025A7^▧^^\squarenwsefill^^mathord^^square, nw-to-se rule filled
025A8^▨^^\squareneswfill^^mathord^^square, ne-to-sw rule filled
025A9^▩^^\squarecrossfill^^mathord^^SQUARE WITH DIAGONAL CROSSHATCH FILL
025AA^▪^^\smblksquare^N^mathord^^sq bullet, filled
025AB^▫^^\smwhtsquare^N^mathord^^WHITE SMALL SQUARE
025AC^▬^^\hrectangleblack^^mathord^^BLACK RECTANGLE
025AD^▭^^\hrectangle^N^mathord^^horizontal rectangle, open
025AE^▮^^\vrectangleblack^N^mathord^^BLACK VERTICAL RECTANGLE
025AF^▯^^\vrectangle^N^mathord^^rectangle, white (vertical)
025B0^▰^^\parallelogramblack^N^mathord^^BLACK PARALLELOGRAM
025B1^▱^^\parallelogram^N^mathord^^parallelogram, open
025B2^▲^^\bigblacktriangleup^B^mathord^^BLACK UP-POINTING TRIANGLE
025B3^△^\bigtriangleup^\bigtriangleup^B^mathbin^-stmaryrd^= \triangle (amsfonts), # \vartriangle (amssymb), big up triangle, open
025B4^▴^\blacktriangleup^\blacktriangle^B^mathbin^mathabx^up triangle, filled
025B5^▵^\smalltriangleup^\vartriangle^B^mathbin^mathabx^# \vartriangle (amssymb), small up triangle, open
025B6^▶^\RHD^\blacktriangleright^B^mathbin^wasysym^= \blacktriangleright (fourier -mathabx), (large) right triangle, filled
025B7^▷^\rhd^\triangleright^B^mathbin^amssymb wasysym^= \rres (oz), = \RightTriangle (wrisym), (large) right triangle, open; z notation range restriction
025B8^▸^\blacktriangleright^\smallblacktriangleright^B^mathbin^mathabx -fourier^right triangle, filled
025B9^▹^\smalltriangleright^\smalltriangleright^B^mathbin^mathabx^# \triangleright, x \triangleright (mathabx), right triangle, open
025BA^►^^\blackpointerright^^mathord^^BLACK RIGHT-POINTING POINTER
025BB^▻^^\whitepointerright^^mathord^^# \triangleright (mathabx), WHITE RIGHT-POINTING POINTER
025BC^▼^^\bigblacktriangledown^B^mathord^^big down triangle, filled
025BD^▽^\bigtriangledown^\bigtriangledown^B^mathbin^-stmaryrd^big down triangle, open
025BE^▾^\blacktriangledown^\blacktriangledown^B^mathbin^mathabx^BLACK DOWN-POINTING SMALL TRIANGLE
025BF^▿^\smalltriangledown^\triangledown^B^mathbin^mathabx^# \triangledown (amssymb), WHITE DOWN-POINTING SMALL TRIANGLE
025C0^◀^\LHD^\blacktriangleleft^B^mathbin^wasysym^= \blacktriangleleft (fourier -mathabx), (large) left triangle, filled
025C1^◁^\lhd^\triangleleft^B^mathbin^amssymb wasysym^= \dres (oz), = \LeftTriangle (wrisym), (large) left triangle, open; z notation domain restriction
025C2^◂^\blacktriangleleft^\smallblacktriangleleft^B^mathbin^mathabx -fourier^left triangle, filled
025C3^◃^\smalltriangleleft^\smalltriangleleft^B^mathbin^mathabx^# \triangleleft, x \triangleleft (mathabx), left triangle, open
025C4^◄^^\blackpointerleft^B^mathord^^BLACK LEFT-POINTING POINTER
025C5^◅^^\whitepointerleft^B^mathord^^# \triangleleft (mathabx), WHITE LEFT-POINTING POINTER
025C6^◆^\Diamondblack^\mdlgblkdiamond^N^mathord^txfonts^BLACK DIAMOND
025C7^◇^\Diamond^\mdlgwhtdiamond^N^mathord^amssymb^WHITE DIAMOND; diamond, open
025C8^◈^^\blackinwhitediamond^N^mathord^^WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND
025C9^◉^^\fisheye^N^mathord^^FISHEYE
025CA^◊^\lozenge^\mdlgwhtlozenge^B^mathord^amssymb^LOZENGE or total mark
025CB^○^\Circle^\mdlgwhtcircle^B^mathbin^wasysym^medium large circle
025CC^◌^^\dottedcircle^^mathord^^DOTTED CIRCLE
025CD^◍^^\circlevertfill^^mathord^^CIRCLE WITH VERTICAL FILL
025CE^◎^^\bullseye^N^mathord^^# \circledcirc (amssymb), BULLSEYE
025CF^●^\CIRCLE^\mdlgblkcircle^N^mathord^wasysym^circle, filled
025D0^◐^\LEFTcircle^\circlelefthalfblack^N^mathord^wasysym^circle, filled left half [harvey ball]
025D1^◑^\RIGHTcircle^\circlerighthalfblack^N^mathord^wasysym^circle, filled right half
025D2^◒^^\circlebottomhalfblack^N^mathord^^circle, filled bottom half
025D3^◓^^\circletophalfblack^N^mathord^^circle, filled top half
025D4^◔^^\circleurquadblack^^mathord^^CIRCLE WITH UPPER RIGHT QUADRANT BLACK
025D5^◕^^\blackcircleulquadwhite^^mathord^^CIRCLE WITH ALL BUT UPPER LEFT QUADRANT BLACK
025D6^◖^\LEFTCIRCLE^\blacklefthalfcircle^N^mathord^wasysym^LEFT HALF BLACK CIRCLE
025D7^◗^\RIGHTCIRCLE^\blackrighthalfcircle^N^mathord^wasysym^RIGHT HALF BLACK CIRCLE
025D8^◘^^\inversebullet^^mathord^^INVERSE BULLET
025D9^◙^^\inversewhitecircle^^mathord^^INVERSE WHITE CIRCLE
025DA^◚^^\invwhiteupperhalfcircle^^mathord^^UPPER HALF INVERSE WHITE CIRCLE
025DB^◛^^\invwhitelowerhalfcircle^^mathord^^LOWER HALF INVERSE WHITE CIRCLE
025DC^◜^^\ularc^^mathord^^UPPER LEFT QUADRANT CIRCULAR ARC
025DD^◝^^\urarc^^mathord^^UPPER RIGHT QUADRANT CIRCULAR ARC
025DE^◞^^\lrarc^^mathord^^LOWER RIGHT QUADRANT CIRCULAR ARC
025DF^◟^^\llarc^^mathord^^LOWER LEFT QUADRANT CIRCULAR ARC
025E0^◠^^\topsemicircle^^mathord^^UPPER HALF CIRCLE
025E1^◡^^\botsemicircle^^mathord^^LOWER HALF CIRCLE
025E2^◢^^\lrblacktriangle^N^mathord^^lower right triangle, filled
025E3^◣^^\llblacktriangle^N^mathord^^lower left triangle, filled
025E4^◤^^\ulblacktriangle^N^mathord^^upper left triangle, filled
025E5^◥^^\urblacktriangle^N^mathord^^upper right triangle, filled
025E6^◦^^\smwhtcircle^B^mathord^^WHITE BULLET
025E7^◧^^\squareleftblack^N^mathord^^square, filled left half
025E8^◨^^\squarerightblack^N^mathord^^square, filled right half
025E9^◩^^\squareulblack^N^mathord^^square, filled top left corner
025EA^◪^^\squarelrblack^N^mathord^^square, filled bottom right corner
025EB^◫^\boxbar^\boxbar^B^mathbin^stmaryrd txfonts^vertical bar in box
025EC^◬^^\trianglecdot^B^mathord^^triangle with centered dot
025ED^◭^^\triangleleftblack^^mathord^^UP-POINTING TRIANGLE WITH LEFT HALF BLACK
025EE^◮^^\trianglerightblack^^mathord^^UP-POINTING TRIANGLE WITH RIGHT HALF BLACK
025EF^◯^^\lgwhtcircle^N^mathord^^LARGE CIRCLE
025F0^◰^^\squareulquad^^mathord^^WHITE SQUARE WITH UPPER LEFT QUADRANT
025F1^◱^^\squarellquad^^mathord^^WHITE SQUARE WITH LOWER LEFT QUADRANT
025F2^◲^^\squarelrquad^^mathord^^WHITE SQUARE WITH LOWER RIGHT QUADRANT
025F3^◳^^\squareurquad^^mathord^^WHITE SQUARE WITH UPPER RIGHT QUADRANT
025F4^◴^^\circleulquad^^mathord^^WHITE CIRCLE WITH UPPER LEFT QUADRANT
025F5^◵^^\circlellquad^^mathord^^WHITE CIRCLE WITH LOWER LEFT QUADRANT
025F6^◶^^\circlelrquad^^mathord^^WHITE CIRCLE WITH LOWER RIGHT QUADRANT
025F7^◷^^\circleurquad^^mathord^^WHITE CIRCLE WITH UPPER RIGHT QUADRANT
025F8^◸^^\ultriangle^B^mathord^^UPPER LEFT TRIANGLE
025F9^◹^^\urtriangle^B^mathord^^UPPER RIGHT TRIANGLE
025FA^◺^^\lltriangle^B^mathord^^LOWER LEFT TRIANGLE
025FB^◻^\square^\mdwhtsquare^B^mathord^amssymb -fourier^WHITE MEDIUM SQUARE
025FC^◼^\blacksquare^\mdblksquare^B^mathord^amssymb -fourier^BLACK MEDIUM SQUARE
025FD^◽^^\mdsmwhtsquare^B^mathord^^WHITE MEDIUM SMALL SQUARE
025FE^◾^^\mdsmblksquare^B^mathord^^BLACK MEDIUM SMALL SQUARE
025FF^◿^^\lrtriangle^B^mathord^^LOWER RIGHT TRIANGLE
02605^★^\bigstar^\bigstar^B^mathord^amssymb^star, filled
02606^☆^^\bigwhitestar^B^mathord^^star, open
02609^☉^\Sun^\astrosun^N^mathord^mathabx^SUN
0260C^☌^^^N^mathord^wasysym^text \CONJUNCTION (wasysym), CONJUNCTION
02610^☐^\Square^^^mathord^wasysym^BALLOT BOX
02611^☑^\CheckedBox^^^mathord^wasysym^t \Checkedbox (marvosym), BALLOT BOX WITH CHECK
02612^☒^\XBox^^N^mathord^wasysym^t \Crossedbox (marvosym), BALLOT BOX WITH X
02615^☕^\steaming^^^mathord^arevmath^HOT BEVERAGE
0261E^☞^\pointright^^^mathord^arevmath^WHITE RIGHT POINTING INDEX
02620^☠^\skull^^^mathord^arevmath^SKULL AND CROSSBONES
02621^☡^^\danger^^mathord^^CAUTION SIGN, dangerous bend
02622^☢^\radiation^^^mathord^arevmath^RADIOACTIVE SIGN
02623^☣^\biohazard^^^mathord^arevmath^BIOHAZARD SIGN
0262F^☯^\yinyang^^^mathord^arevmath^YIN YANG
02639^☹^\frownie^^^mathord^wasysym^= \sadface (arevmath), WHITE FROWNING FACE
0263A^☺^\smiley^^^mathord^wasysym^= \smileface (arevmath), WHITE SMILING FACE
0263B^☻^\blacksmiley^\blacksmiley^^mathord^wasysym^= \invsmileface (arevmath), BLACK SMILING FACE
0263C^☼^\sun^\sun^^mathord^wasysym^WHITE SUN WITH RAYS
0263D^☽^\rightmoon^\rightmoon^N^mathord^wasysym mathabx^FIRST QUARTER MOON
0263E^☾^\leftmoon^\leftmoon^N^mathord^wasysym mathabx^LAST QUARTER MOON
0263F^☿^\mercury^^N^mathord^wasysym^= \Mercury (mathabx), MERCURY
02640^♀^\female^\female^N^mathord^wasysym^= \Venus (mathabx), = \girl (mathabx), venus, female
02641^♁^\earth^^N^mathord^wasysym^= \varEarth (mathabx), EARTH
02642^♂^\male^\male^N^mathord^wasysym^= \Mars (mathabx), = \boy (mathabx), mars, male
02643^♃^\jupiter^^N^mathord^wasysym^= \Jupiter (mathabx), JUPITER
02644^♄^\saturn^^N^mathord^wasysym^= \Saturn (mathabx), SATURN
02645^♅^\uranus^^^mathord^wasysym^= \Uranus (mathabx), URANUS
02646^♆^\neptune^^N^mathord^wasysym^= \Neptune (mathabx), NEPTUNE
02647^♇^\pluto^^N^mathord^wasysym^= \Pluto (mathabx), PLUTO
02648^♈^\aries^^N^mathord^wasysym^= \Aries (mathabx), ARIES
02649^♉^\taurus^^N^mathord^wasysym^= \Taurus (mathabx), TAURUS
0264A^♊^\gemini^^^mathord^wasysym^= \Gemini (mathabx), GEMINI
0264B^♋^\cancer^^^mathord^wasysym^CANCER
0264C^♌^\leo^^^mathord^wasysym^= \Leo (mathabx), LEO
0264D^♍^\virgo^^^mathord^wasysym^VIRGO
0264E^♎^\libra^^^mathord^wasysym^= \Libra (mathabx), LIBRA
0264F^♏^\scorpio^^^mathord^wasysym^= \Scorpio (mathabx), SCORPIUS
02650^♐^\sagittarius^^^mathord^wasysym^SAGITTARIUS
02651^♑^\capricornus^^^mathord^wasysym^CAPRICORN
02652^♒^\aquarius^^^mathord^wasysym^AQUARIUS
02653^♓^\pisces^^^mathord^wasysym^PISCES
02660^♠^\spadesuit^\spadesuit^N^mathord^^spades suit symbol
02661^♡^\heartsuit^\heartsuit^N^mathord^^heart suit symbol
02662^♢^\diamondsuit^\diamondsuit^N^mathord^^diamond suit symbol
02663^♣^\clubsuit^\clubsuit^N^mathord^^club suit symbol
02664^♤^\varspadesuit^\varspadesuit^N^mathord^txfonts^= \varspade (arevmath), spade, white (card suit)
02665^♥^\varheartsuit^\varheartsuit^N^mathord^txfonts^= \varheart (arevmath), filled heart (card suit)
02666^♦^\vardiamondsuit^\vardiamondsuit^N^mathord^txfonts^= \vardiamond (arevmath), filled diamond (card suit)
02667^♧^\varclubsuit^\varclubsuit^N^mathord^txfonts^= \varclub (arevmath), club, white (card suit)
02669^♩^\quarternote^\quarternote^N^mathord^arevmath wasysym^music note (sung text sign)
0266A^♪^\eighthnote^\eighthnote^^mathord^arevmath^EIGHTH NOTE
0266B^♫^\twonotes^\twonotes^^mathord^wasysym^BEAMED EIGHTH NOTES
0266C^♬^\sixteenthnote^^^mathord^arevmath^BEAMED SIXTEENTH NOTES
0266D^♭^\flat^\flat^N^mathord^^musical flat
0266E^♮^\natural^\natural^N^mathord^^music natural
0266F^♯^\sharp^\sharp^N^mathord^^= \# (oz), MUSIC SHARP SIGN, z notation infix bag count
0267B^♻^\recycle^^^mathord^arevmath^BLACK UNIVERSAL RECYCLING SYMBOL
0267E^♾^^\acidfree^^mathord^^PERMANENT PAPER SIGN
02680^⚀^^\dicei^N^mathord^^DIE FACE-1
02681^⚁^^\diceii^N^mathord^^DIE FACE-2
02682^⚂^^\diceiii^N^mathord^^DIE FACE-3
02683^⚃^^\diceiv^N^mathord^^DIE FACE-4
02684^⚄^^\dicev^N^mathord^^DIE FACE-5
02685^⚅^^\dicevi^N^mathord^^DIE FACE-6
02686^⚆^^\circledrightdot^N^mathord^^WHITE CIRCLE WITH DOT RIGHT
02687^⚇^^\circledtwodots^N^mathord^^WHITE CIRCLE WITH TWO DOTS
02688^⚈^^\blackcircledrightdot^N^mathord^^BLACK CIRCLE WITH WHITE DOT RIGHT
02689^⚉^^\blackcircledtwodots^N^mathord^^BLACK CIRCLE WITH TWO WHITE DOTS
02693^⚓^\anchor^^^mathord^arevmath^ANCHOR
02694^⚔^\swords^^^mathord^arevmath^CROSSED SWORDS
026A0^⚠^\warning^^^mathord^arevmath^WARNING SIGN
026A5^⚥^^\Hermaphrodite^^mathord^^MALE AND FEMALE SIGN
026AA^⚪^\medcirc^\mdwhtcircle^N^mathord^txfonts^MEDIUM WHITE CIRCLE
026AB^⚫^\medbullet^\mdblkcircle^N^mathord^txfonts^MEDIUM BLACK CIRCLE
026AC^⚬^^\mdsmwhtcircle^N^mathord^^MEDIUM SMALL WHITE CIRCLE
026B2^⚲^^\neuter^N^mathord^^NEUTER
0270E^✎^\pencil^^^mathord^arevmath^LOWER RIGHT PENCIL
02713^✓^\checkmark^\checkmark^N^mathord^amsfonts^= \ballotcheck (arevmath), tick, CHECK MARK
02717^✗^\ballotx^^N^mathord^arevmath^BALLOT X
02720^✠^\maltese^\maltese^N^mathord^amsfonts^MALTESE CROSS
0272A^✪^^\circledstar^N^mathord^^CIRCLED WHITE STAR
02736^✶^^\varstar^N^mathord^^SIX POINTED BLACK STAR
0273D^✽^^\dingasterisk^^mathord^^HEAVY TEARDROP-SPOKED ASTERISK
02772^❲^^\lbrbrak^O^mathopen^^LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT
02773^❳^^\rbrbrak^C^mathclose^^LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT
0279B^➛^^\draftingarrow^^mathord^^right arrow with bold head (drafting)
027A2^➢^\arrowbullet^^^mathord^arevmath^THREE-D TOP-LIGHTED RIGHTWARDS ARROWHEAD
027C0^⟀^^\threedangle^N^mathord^^THREE DIMENSIONAL ANGLE
027C1^⟁^^\whiteinwhitetriangle^N^mathord^^WHITE TRIANGLE CONTAINING SMALL WHITE TRIANGLE
027C2^⟂^\perp^\perp^R^mathrel^^PERPENDICULAR
027C3^⟃^^\subsetcirc^R^mathord^^OPEN SUBSET
027C4^⟄^^\supsetcirc^R^mathord^^OPEN SUPERSET
027C5^⟅^\Lbag^\lbag^R^mathopen^stmaryrd txfonts^= \lbag (stmaryrd -oz), LEFT S-SHAPED BAG DELIMITER
027C6^⟆^\Rbag^\rbag^R^mathclose^stmaryrd txfonts^= \rbag (stmaryrd -oz), RIGHT S-SHAPED BAG DELIMITER
027C7^⟇^^\veedot^R^mathbin^^OR WITH DOT INSIDE
027C8^⟈^^\bsolhsub^R^mathrel^^REVERSE SOLIDUS PRECEDING SUBSET
027C9^⟉^^\suphsol^R^mathrel^^SUPERSET PRECEDING SOLIDUS
027CA^⟊^^^R^mathord^^VERTICAL BAR WITH HORIZONTAL STROKE
027CC^⟌^^\longdivision^L^mathopen^^LONG DIVISION
027D0^⟐^\Diamonddot^\diamondcdot^N^mathord^txfonts^WHITE DIAMOND WITH CENTRED DOT
027D1^⟑^^\wedgedot^B^mathbin^^AND WITH DOT
027D2^⟒^^\upin^R^mathrel^^ELEMENT OF OPENING UPWARDS
027D3^⟓^^\pullback^R^mathrel^^LOWER RIGHT CORNER WITH DOT
027D4^⟔^^\pushout^R^mathrel^^UPPER LEFT CORNER WITH DOT
027D5^⟕^^\leftouterjoin^L^mathop^^LEFT OUTER JOIN
027D6^⟖^^\rightouterjoin^L^mathop^^RIGHT OUTER JOIN
027D7^⟗^^\fullouterjoin^L^mathop^^FULL OUTER JOIN
027D8^⟘^^\bigbot^L^mathop^^LARGE UP TACK
027D9^⟙^^\bigtop^L^mathop^^LARGE DOWN TACK
027DA^⟚^^\DashVDash^R^mathrel^^LEFT AND RIGHT DOUBLE TURNSTILE
027DB^⟛^^\dashVdash^R^mathrel^^LEFT AND RIGHT TACK
027DC^⟜^\multimapinv^\multimapinv^R^mathrel^txfonts^LEFT MULTIMAP
027DD^⟝^^\vlongdash^R^mathrel^^long left tack
027DE^⟞^^\longdashv^R^mathrel^^long right tack
027DF^⟟^^\cirbot^R^mathrel^^UP TACK WITH CIRCLE ABOVE
027E0^⟠^^\lozengeminus^B^mathbin^^LOZENGE DIVIDED BY HORIZONTAL RULE
027E1^⟡^^\concavediamond^B^mathbin^^WHITE CONCAVE-SIDED DIAMOND
027E2^⟢^^\concavediamondtickleft^B^mathbin^^WHITE CONCAVE-SIDED DIAMOND WITH LEFTWARDS TICK
027E3^⟣^^\concavediamondtickright^B^mathbin^^WHITE CONCAVE-SIDED DIAMOND WITH RIGHTWARDS TICK
027E4^⟤^^\whitesquaretickleft^B^mathbin^^WHITE SQUARE WITH LEFTWARDS TICK
027E5^⟥^^\whitesquaretickright^B^mathbin^^WHITE SQUARE WITH RIGHTWARDS TICK
027E6^⟦^\llbracket^\lBrack^O^mathopen^stmaryrd wrisym kpfonts fourier^= \Lbrack (mathbbol), = \lbag (oz -stmaryrd), MATHEMATICAL LEFT WHITE SQUARE BRACKET
027E7^⟧^\rrbracket^\rBrack^C^mathclose^stmaryrd wrisym kpfonts fourier^= \Rbrack (mathbbol), = \rbag (oz -stmaryrd), MATHEMATICAL RIGHT WHITE SQUARE BRACKET
027E8^⟨^\langle^\langle^O^mathopen^^MATHEMATICAL LEFT ANGLE BRACKET
027E9^⟩^\rangle^\rangle^C^mathclose^^MATHEMATICAL RIGHT ANGLE BRACKET
027EA^⟪^\lang^\lAngle^O^mathopen^oz^MATHEMATICAL LEFT DOUBLE ANGLE BRACKET, z notation left chevron bracket
027EB^⟫^\rang^\rAngle^C^mathclose^oz^MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET, z notation right chevron bracket
027EC^⟬^^\Lbrbrak^O^mathopen^^MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET
027ED^⟭^^\Rbrbrak^C^mathclose^^MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET
027EE^⟮^\lgroup^^O^mathopen^^MATHEMATICAL LEFT FLATTENED PARENTHESIS
027EF^⟯^\rgroup^^C^mathclose^^MATHEMATICAL RIGHT FLATTENED PARENTHESIS
027F0^⟰^^\UUparrow^R^mathrel^^UPWARDS QUADRUPLE ARROW
027F1^⟱^^\DDownarrow^R^mathrel^^DOWNWARDS QUADRUPLE ARROW
027F2^⟲^^\acwgapcirclearrow^R^mathrel^^ANTICLOCKWISE GAPPED CIRCLE ARROW
027F3^⟳^^\cwgapcirclearrow^R^mathrel^^CLOCKWISE GAPPED CIRCLE ARROW
027F4^⟴^^\rightarrowonoplus^R^mathrel^^RIGHT ARROW WITH CIRCLED PLUS
027F5^⟵^\longleftarrow^\longleftarrow^R^mathrel^^LONG LEFTWARDS ARROW
027F6^⟶^\longrightarrow^\longrightarrow^R^mathrel^^LONG RIGHTWARDS ARROW
027F7^⟷^\longleftrightarrow^\longleftrightarrow^R^mathrel^^LONG LEFT RIGHT ARROW
027F8^⟸^\Longleftarrow^\Longleftarrow^R^mathrel^^= \impliedby (amsmath), LONG LEFTWARDS DOUBLE ARROW
027F9^⟹^\Longrightarrow^\Longrightarrow^R^mathrel^^= \implies (amsmath), LONG RIGHTWARDS DOUBLE ARROW
027FA^⟺^\Longleftrightarrow^\Longleftrightarrow^R^mathrel^^= \iff (oz), LONG LEFT RIGHT DOUBLE ARROW
027FB^⟻^\longmapsfrom^\longmapsfrom^R^mathrel^stmaryrd^= \longmappedfrom (kpfonts), LONG LEFTWARDS ARROW FROM BAR
027FC^⟼^\longmapsto^\longmapsto^R^mathrel^^LONG RIGHTWARDS ARROW FROM BAR
027FD^⟽^\Longmapsfrom^\Longmapsfrom^R^mathrel^stmaryrd^= \Longmappedfrom (kpfonts), LONG LEFTWARDS DOUBLE ARROW FROM BAR
027FE^⟾^\Longmapsto^\Longmapsto^R^mathrel^stmaryrd^LONG RIGHTWARDS DOUBLE ARROW FROM BAR
027FF^⟿^^\longrightsquigarrow^R^mathrel^^LONG RIGHTWARDS SQUIGGLE ARROW
02900^⤀^\psur^\nvtwoheadrightarrow^R^mathrel^oz^= \psurj (oz), RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE, z notation partial surjection
02901^⤁^^\nVtwoheadrightarrow^R^mathrel^^RIGHTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKE, z notation finite surjection
02902^⤂^^\nvLeftarrow^R^mathrel^^LEFTWARDS DOUBLE ARROW WITH VERTICAL STROKE
02903^⤃^^\nvRightarrow^R^mathrel^^RIGHTWARDS DOUBLE ARROW WITH VERTICAL STROKE
02904^⤄^^\nvLeftrightarrow^R^mathrel^^LEFT RIGHT DOUBLE ARROW WITH VERTICAL STROKE
02905^⤅^^\twoheadmapsto^R^mathrel^^RIGHTWARDS TWO-HEADED ARROW FROM BAR
02906^⤆^\Mapsfrom^\Mapsfrom^R^mathrel^stmaryrd^= \Mappedfrom (kpfonts), LEFTWARDS DOUBLE ARROW FROM BAR
02907^⤇^\Mapsto^\Mapsto^R^mathrel^stmaryrd^RIGHTWARDS DOUBLE ARROW FROM BAR
02908^⤈^^\downarrowbarred^R^mathrel^^DOWNWARDS ARROW WITH HORIZONTAL STROKE
02909^⤉^^\uparrowbarred^R^mathrel^^UPWARDS ARROW WITH HORIZONTAL STROKE
0290A^⤊^^\Uuparrow^R^mathrel^^UPWARDS TRIPLE ARROW
0290B^⤋^^\Ddownarrow^R^mathrel^^DOWNWARDS TRIPLE ARROW
0290C^⤌^^\leftbkarrow^R^mathrel^^LEFTWARDS DOUBLE DASH ARROW
0290D^⤍^^\rightbkarrow^R^mathrel^^RIGHTWARDS DOUBLE DASH ARROW
0290E^⤎^^\leftdbkarrow^R^mathrel^^LEFTWARDS TRIPLE DASH ARROW
0290F^⤏^^\dbkarow^R^mathrel^^RIGHTWARDS TRIPLE DASH ARROW
02910^⤐^^\drbkarow^R^mathrel^^RIGHTWARDS TWO-HEADED TRIPLE DASH ARROW
02911^⤑^^\rightdotarrow^R^mathrel^^RIGHTWARDS ARROW WITH DOTTED STEM
02912^⤒^\UpArrowBar^\baruparrow^R^mathrel^wrisym^UPWARDS ARROW TO BAR
02913^⤓^\DownArrowBar^\downarrowbar^R^mathrel^wrisym^DOWNWARDS ARROW TO BAR
02914^⤔^\pinj^\nvrightarrowtail^R^mathrel^oz^RIGHTWARDS ARROW WITH TAIL WITH VERTICAL STROKE, z notation partial injection
02915^⤕^\finj^\nVrightarrowtail^R^mathrel^oz^RIGHTWARDS ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE, z notation finite injection
02916^⤖^\bij^\twoheadrightarrowtail^R^mathrel^oz^RIGHTWARDS TWO-HEADED ARROW WITH TAIL, z notation bijection
02917^⤗^^\nvtwoheadrightarrowtail^R^mathrel^^RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH VERTICAL STROKE, z notation surjective injection
02918^⤘^^\nVtwoheadrightarrowtail^R^mathrel^^RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE, z notation finite surjective injection
02919^⤙^^\lefttail^R^mathrel^^LEFTWARDS ARROW-TAIL
0291A^⤚^^\righttail^R^mathrel^^RIGHTWARDS ARROW-TAIL
0291B^⤛^^\leftdbltail^R^mathrel^^LEFTWARDS DOUBLE ARROW-TAIL
0291C^⤜^^\rightdbltail^R^mathrel^^RIGHTWARDS DOUBLE ARROW-TAIL
0291D^⤝^^\diamondleftarrow^R^mathrel^^LEFTWARDS ARROW TO BLACK DIAMOND
0291E^⤞^^\rightarrowdiamond^R^mathrel^^RIGHTWARDS ARROW TO BLACK DIAMOND
0291F^⤟^^\diamondleftarrowbar^R^mathrel^^LEFTWARDS ARROW FROM BAR TO BLACK DIAMOND
02920^⤠^^\barrightarrowdiamond^R^mathrel^^RIGHTWARDS ARROW FROM BAR TO BLACK DIAMOND
02921^⤡^^\nwsearrow^R^mathrel^^NORTH WEST AND SOUTH EAST ARROW
02922^⤢^^\neswarrow^R^mathrel^^NORTH EAST AND SOUTH WEST ARROW
02923^⤣^^\hknwarrow^R^mathrel^^NORTH WEST ARROW WITH HOOK
02924^⤤^^\hknearrow^R^mathrel^^NORTH EAST ARROW WITH HOOK
02925^⤥^^\hksearow^R^mathrel^^SOUTH EAST ARROW WITH HOOK
02926^⤦^^\hkswarow^R^mathrel^^SOUTH WEST ARROW WITH HOOK
02927^⤧^^\tona^R^mathrel^^NORTH WEST ARROW AND NORTH EAST ARROW
02928^⤨^^\toea^R^mathrel^^NORTH EAST ARROW AND SOUTH EAST ARROW
02929^⤩^^\tosa^R^mathrel^^SOUTH EAST ARROW AND SOUTH WEST ARROW
0292A^⤪^^\towa^R^mathrel^^SOUTH WEST ARROW AND NORTH WEST ARROW
0292B^⤫^^\rdiagovfdiag^R^mathord^^RISING DIAGONAL CROSSING FALLING DIAGONAL
0292C^⤬^^\fdiagovrdiag^R^mathord^^FALLING DIAGONAL CROSSING RISING DIAGONAL
0292D^⤭^^\seovnearrow^R^mathord^^SOUTH EAST ARROW CROSSING NORTH EAST ARROW
0292E^⤮^^\neovsearrow^R^mathord^^NORTH EAST ARROW CROSSING SOUTH EAST ARROW
0292F^⤯^^\fdiagovnearrow^R^mathord^^FALLING DIAGONAL CROSSING NORTH EAST ARROW
02930^⤰^^\rdiagovsearrow^R^mathord^^RISING DIAGONAL CROSSING SOUTH EAST ARROW
02931^⤱^^\neovnwarrow^R^mathord^^NORTH EAST ARROW CROSSING NORTH WEST ARROW
02932^⤲^^\nwovnearrow^R^mathord^^NORTH WEST ARROW CROSSING NORTH EAST ARROW
02933^⤳^\leadsto^\rightcurvedarrow^R^mathrel^txfonts^WAVE ARROW POINTING DIRECTLY RIGHT
02934^⤴^^\uprightcurvearrow^R^mathord^^ARROW POINTING RIGHTWARDS THEN CURVING UPWARDS
02935^⤵^^\downrightcurvedarrow^R^mathord^^ARROW POINTING RIGHTWARDS THEN CURVING DOWNWARDS
02936^⤶^^\leftdowncurvedarrow^R^mathrel^^ARROW POINTING DOWNWARDS THEN CURVING LEFTWARDS
02937^⤷^^\rightdowncurvedarrow^R^mathrel^^ARROW POINTING DOWNWARDS THEN CURVING RIGHTWARDS
02938^⤸^^\cwrightarcarrow^R^mathrel^^RIGHT-SIDE ARC CLOCKWISE ARROW
02939^⤹^^\acwleftarcarrow^R^mathrel^^LEFT-SIDE ARC ANTICLOCKWISE ARROW
0293A^⤺^^\acwoverarcarrow^R^mathrel^^TOP ARC ANTICLOCKWISE ARROW
0293B^⤻^^\acwunderarcarrow^R^mathrel^^BOTTOM ARC ANTICLOCKWISE ARROW
0293C^⤼^^\curvearrowrightminus^R^mathrel^^TOP ARC CLOCKWISE ARROW WITH MINUS
0293D^⤽^^\curvearrowleftplus^R^mathrel^^TOP ARC ANTICLOCKWISE ARROW WITH PLUS
0293E^⤾^^\cwundercurvearrow^R^mathrel^^LOWER RIGHT SEMICIRCULAR CLOCKWISE ARROW
0293F^⤿^^\ccwundercurvearrow^R^mathrel^^LOWER LEFT SEMICIRCULAR ANTICLOCKWISE ARROW
02940^⥀^^\acwcirclearrow^R^mathrel^^ANTICLOCKWISE CLOSED CIRCLE ARROW
02941^⥁^^\cwcirclearrow^R^mathrel^^CLOCKWISE CLOSED CIRCLE ARROW
02942^⥂^^\rightarrowshortleftarrow^R^mathrel^^RIGHTWARDS ARROW ABOVE SHORT LEFTWARDS ARROW
02943^⥃^^\leftarrowshortrightarrow^R^mathrel^^LEFTWARDS ARROW ABOVE SHORT RIGHTWARDS ARROW
02944^⥄^^\shortrightarrowleftarrow^R^mathrel^^SHORT RIGHTWARDS ARROW ABOVE LEFTWARDS ARROW
02945^⥅^^\rightarrowplus^R^mathrel^^RIGHTWARDS ARROW WITH PLUS BELOW
02946^⥆^^\leftarrowplus^R^mathrel^^LEFTWARDS ARROW WITH PLUS BELOW
02947^⥇^^\rightarrowx^R^mathrel^^RIGHTWARDS ARROW THROUGH X
02948^⥈^^\leftrightarrowcircle^R^mathrel^^LEFT RIGHT ARROW THROUGH SMALL CIRCLE
02949^⥉^^\twoheaduparrowcircle^R^mathrel^^UPWARDS TWO-HEADED ARROW FROM SMALL CIRCLE
0294A^⥊^\leftrightharpoon^\leftrightharpoonupdown^R^mathrel^mathabx^LEFT BARB UP RIGHT BARB DOWN HARPOON
0294B^⥋^\rightleftharpoon^\leftrightharpoondownup^R^mathrel^mathabx^LEFT BARB DOWN RIGHT BARB UP HARPOON
0294C^⥌^^\updownharpoonrightleft^R^mathrel^^UP BARB RIGHT DOWN BARB LEFT HARPOON
0294D^⥍^^\updownharpoonleftright^R^mathrel^^UP BARB LEFT DOWN BARB RIGHT HARPOON
0294E^⥎^\leftrightharpoonup^\leftrightharpoonupup^R^mathrel^wrisym^LEFT BARB UP RIGHT BARB UP HARPOON
0294F^⥏^\rightupdownharpoon^\updownharpoonrightright^R^mathrel^wrisym^UP BARB RIGHT DOWN BARB RIGHT HARPOON
02950^⥐^\leftrightharpoondown^\leftrightharpoondowndown^R^mathrel^wrisym^LEFT BARB DOWN RIGHT BARB DOWN HARPOON
02951^⥑^\leftupdownharpoon^\updownharpoonleftleft^R^mathrel^wrisym^UP BARB LEFT DOWN BARB LEFT HARPOON
02952^⥒^\LeftVectorBar^\barleftharpoonup^R^mathrel^wrisym^LEFTWARDS HARPOON WITH BARB UP TO BAR
02953^⥓^\RightVectorBar^\rightharpoonupbar^R^mathrel^wrisym^RIGHTWARDS HARPOON WITH BARB UP TO BAR
02954^⥔^\RightUpVectorBar^\barupharpoonright^R^mathrel^wrisym^UPWARDS HARPOON WITH BARB RIGHT TO BAR
02955^⥕^\RightDownVectorBar^\downharpoonrightbar^R^mathrel^wrisym^DOWNWARDS HARPOON WITH BARB RIGHT TO BAR
02956^⥖^\DownLeftVectorBar^\barleftharpoondown^R^mathrel^wrisym^LEFTWARDS HARPOON WITH BARB DOWN TO BAR
02957^⥗^\DownRightVectorBar^\rightharpoondownbar^R^mathrel^wrisym^RIGHTWARDS HARPOON WITH BARB DOWN TO BAR
02958^⥘^\LeftUpVectorBar^\barupharpoonleft^R^mathrel^wrisym^UPWARDS HARPOON WITH BARB LEFT TO BAR
02959^⥙^\LeftDownVectorBar^\downharpoonleftbar^R^mathrel^wrisym^DOWNWARDS HARPOON WITH BARB LEFT TO BAR
0295A^⥚^\LeftTeeVector^\leftharpoonupbar^R^mathrel^wrisym^LEFTWARDS HARPOON WITH BARB UP FROM BAR
0295B^⥛^\RightTeeVector^\barrightharpoonup^R^mathrel^wrisym^RIGHTWARDS HARPOON WITH BARB UP FROM BAR
0295C^⥜^\RightUpTeeVector^\upharpoonrightbar^R^mathrel^wrisym^UPWARDS HARPOON WITH BARB RIGHT FROM BAR
0295D^⥝^\RightDownTeeVector^\bardownharpoonright^R^mathrel^wrisym^DOWNWARDS HARPOON WITH BARB RIGHT FROM BAR
0295E^⥞^\DownLeftTeeVector^\leftharpoondownbar^R^mathrel^wrisym^LEFTWARDS HARPOON WITH BARB DOWN FROM BAR
0295F^⥟^\DownRightTeeVector^\barrightharpoondown^R^mathrel^wrisym^RIGHTWARDS HARPOON WITH BARB DOWN FROM BAR
02960^⥠^\LeftUpTeeVector^\upharpoonleftbar^R^mathrel^wrisym^UPWARDS HARPOON WITH BARB LEFT FROM BAR
02961^⥡^\LeftDownTeeVector^\bardownharpoonleft^R^mathrel^wrisym^DOWNWARDS HARPOON WITH BARB LEFT FROM BAR
02962^⥢^\leftleftharpoons^\leftharpoonsupdown^R^mathrel^mathabx^LEFTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB DOWN
02963^⥣^\upupharpoons^\upharpoonsleftright^R^mathrel^mathabx^UPWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT
02964^⥤^\rightrightharpoons^\rightharpoonsupdown^R^mathrel^mathabx^RIGHTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB DOWN
02965^⥥^\downdownharpoons^\downharpoonsleftright^R^mathrel^mathabx^DOWNWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT
02966^⥦^^\leftrightharpoonsup^R^mathrel^^LEFTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB UP
02967^⥧^^\leftrightharpoonsdown^R^mathrel^^LEFTWARDS HARPOON WITH BARB DOWN ABOVE RIGHTWARDS HARPOON WITH BARB DOWN
02968^⥨^^\rightleftharpoonsup^R^mathrel^^RIGHTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB UP
02969^⥩^^\rightleftharpoonsdown^R^mathrel^^RIGHTWARDS HARPOON WITH BARB DOWN ABOVE LEFTWARDS HARPOON WITH BARB DOWN
0296A^⥪^\leftbarharpoon^\leftharpoonupdash^R^mathrel^mathabx^LEFTWARDS HARPOON WITH BARB UP ABOVE LONG DASH
0296B^⥫^\barleftharpoon^\dashleftharpoondown^R^mathrel^mathabx^LEFTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH
0296C^⥬^\rightbarharpoon^\rightharpoonupdash^R^mathrel^mathabx^RIGHTWARDS HARPOON WITH BARB UP ABOVE LONG DASH
0296D^⥭^\barrightharpoon^\dashrightharpoondown^R^mathrel^mathabx^RIGHTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH
0296E^⥮^\updownharpoons^\updownharpoonsleftright^R^mathrel^mathabx^= \upequilibrium (wrisym), UPWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT
0296F^⥯^\downupharpoons^\downupharpoonsleftright^R^mathrel^mathabx^= \uprevequilibrium (wrisym), DOWNWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT
02970^⥰^^\rightimply^R^mathrel^^RIGHT DOUBLE ARROW WITH ROUNDED HEAD
02971^⥱^^\equalrightarrow^R^mathrel^^EQUALS SIGN ABOVE RIGHTWARDS ARROW
02972^⥲^^\similarrightarrow^R^mathrel^^TILDE OPERATOR ABOVE RIGHTWARDS ARROW
02973^⥳^^\leftarrowsimilar^R^mathrel^^LEFTWARDS ARROW ABOVE TILDE OPERATOR
02974^⥴^^\rightarrowsimilar^R^mathrel^^RIGHTWARDS ARROW ABOVE TILDE OPERATOR
02975^⥵^^\rightarrowapprox^R^mathrel^^RIGHTWARDS ARROW ABOVE ALMOST EQUAL TO
02976^⥶^^\ltlarr^R^mathrel^^LESS-THAN ABOVE LEFTWARDS ARROW
02977^⥷^^\leftarrowless^R^mathrel^^LEFTWARDS ARROW THROUGH LESS-THAN
02978^⥸^^\gtrarr^R^mathrel^^GREATER-THAN ABOVE RIGHTWARDS ARROW
02979^⥹^^\subrarr^R^mathrel^^SUBSET ABOVE RIGHTWARDS ARROW
0297A^⥺^^\leftarrowsubset^R^mathrel^^LEFTWARDS ARROW THROUGH SUBSET
0297B^⥻^^\suplarr^R^mathrel^^SUPERSET ABOVE LEFTWARDS ARROW
0297C^⥼^\strictfi^\leftfishtail^R^mathrel^txfonts^LEFT FISH TAIL
0297D^⥽^\strictif^\rightfishtail^R^mathrel^txfonts^RIGHT FISH TAIL
0297E^⥾^^\upfishtail^R^mathrel^^UP FISH TAIL
0297F^⥿^^\downfishtail^R^mathrel^^DOWN FISH TAIL
02980^⦀^\VERT^\Vvert^F^mathfence^fourier^TRIPLE VERTICAL BAR DELIMITER
02981^⦁^\spot^\mdsmblkcircle^N^mathord^oz^= \dot (oz), Z NOTATION SPOT
02982^⦂^^\typecolon^F^mathbin^^Z NOTATION TYPE COLON, (present in bbold font but no command)
02983^⦃^^\lBrace^O^mathopen^^LEFT WHITE CURLY BRACKET
02984^⦄^^\rBrace^C^mathclose^^RIGHT WHITE CURLY BRACKET
02985^⦅^\Lparen^\lParen^O^mathopen^mathbbol^LEFT WHITE PARENTHESIS
02986^⦆^\Rparen^\rParen^C^mathclose^mathbbol^RIGHT WHITE PARENTHESIS
02987^⦇^\limg^\llparenthesis^O^mathopen^oz^= \llparenthesis (stmaryrd), Z NOTATION LEFT IMAGE BRACKET
02988^⦈^\rimg^\rrparenthesis^C^mathclose^oz^= \rrparenthesis (stmaryrd), Z NOTATION RIGHT IMAGE BRACKET
02989^⦉^\lblot^\llangle^O^mathopen^oz^Z NOTATION LEFT BINDING BRACKET
0298A^⦊^\rblot^\rrangle^C^mathclose^oz^Z NOTATION RIGHT BINDING BRACKET
0298B^⦋^^\lbrackubar^O^mathopen^^LEFT SQUARE BRACKET WITH UNDERBAR
0298C^⦌^^\rbrackubar^C^mathclose^^RIGHT SQUARE BRACKET WITH UNDERBAR
0298D^⦍^^\lbrackultick^O^mathopen^^LEFT SQUARE BRACKET WITH TICK IN TOP CORNER
0298E^⦎^^\rbracklrtick^C^mathclose^^RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
0298F^⦏^^\lbracklltick^O^mathopen^^LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
02990^⦐^^\rbrackurtick^C^mathclose^^RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER
02991^⦑^^\langledot^O^mathopen^^LEFT ANGLE BRACKET WITH DOT
02992^⦒^^\rangledot^C^mathclose^^RIGHT ANGLE BRACKET WITH DOT
02993^⦓^^\lparenless^O^mathopen^^LEFT ARC LESS-THAN BRACKET
02994^⦔^^\rparengtr^C^mathclose^^RIGHT ARC GREATER-THAN BRACKET
02995^⦕^^\Lparengtr^O^mathopen^^DOUBLE LEFT ARC GREATER-THAN BRACKET
02996^⦖^^\Rparenless^C^mathclose^^DOUBLE RIGHT ARC LESS-THAN BRACKET
02997^⦗^^\lblkbrbrak^O^mathopen^^LEFT BLACK TORTOISE SHELL BRACKET
02998^⦘^^\rblkbrbrak^C^mathclose^^RIGHT BLACK TORTOISE SHELL BRACKET
02999^⦙^^\fourvdots^F^mathord^^DOTTED FENCE
0299A^⦚^^\vzigzag^F^mathord^^VERTICAL ZIGZAG LINE
0299B^⦛^^\measuredangleleft^N^mathord^^MEASURED ANGLE OPENING LEFT
0299C^⦜^^\rightanglesqr^N^mathord^^RIGHT ANGLE VARIANT WITH SQUARE
0299D^⦝^^\rightanglemdot^N^mathord^^MEASURED RIGHT ANGLE WITH DOT
0299E^⦞^^\angles^N^mathord^^ANGLE WITH S INSIDE
0299F^⦟^^\angdnr^N^mathord^^ACUTE ANGLE
029A0^⦠^^\gtlpar^N^mathord^^SPHERICAL ANGLE OPENING LEFT
029A1^⦡^^\sphericalangleup^N^mathord^^SPHERICAL ANGLE OPENING UP
029A2^⦢^^\turnangle^N^mathord^^TURNED ANGLE
029A3^⦣^^\revangle^N^mathord^^REVERSED ANGLE
029A4^⦤^^\angleubar^N^mathord^^ANGLE WITH UNDERBAR
029A5^⦥^^\revangleubar^N^mathord^^REVERSED ANGLE WITH UNDERBAR
029A6^⦦^^\wideangledown^N^mathord^^OBLIQUE ANGLE OPENING UP
029A7^⦧^^\wideangleup^N^mathord^^OBLIQUE ANGLE OPENING DOWN
029A8^⦨^^\measanglerutone^N^mathord^^MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND RIGHT
029A9^⦩^^\measanglelutonw^N^mathord^^MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND LEFT
029AA^⦪^^\measanglerdtose^N^mathord^^MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND RIGHT
029AB^⦫^^\measangleldtosw^N^mathord^^MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND LEFT
029AC^⦬^^\measangleurtone^N^mathord^^MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND UP
029AD^⦭^^\measangleultonw^N^mathord^^MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND UP
029AE^⦮^^\measangledrtose^N^mathord^^MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND DOWN
029AF^⦯^^\measangledltosw^N^mathord^^MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND DOWN
029B0^⦰^^\revemptyset^N^mathord^^REVERSED EMPTY SET
029B1^⦱^^\emptysetobar^N^mathord^^EMPTY SET WITH OVERBAR
029B2^⦲^^\emptysetocirc^N^mathord^^EMPTY SET WITH SMALL CIRCLE ABOVE
029B3^⦳^^\emptysetoarr^N^mathord^^EMPTY SET WITH RIGHT ARROW ABOVE
029B4^⦴^^\emptysetoarrl^N^mathord^^EMPTY SET WITH LEFT ARROW ABOVE
029B5^⦵^^\circlehbar^N^mathbin^^CIRCLE WITH HORIZONTAL BAR
029B6^⦶^^\circledvert^B^mathbin^^CIRCLED VERTICAL BAR
029B7^⦷^^\circledparallel^B^mathbin^^CIRCLED PARALLEL
029B8^⦸^\circledbslash^\obslash^B^mathbin^txfonts^CIRCLED REVERSE SOLIDUS
029B9^⦹^^\operp^B^mathbin^^CIRCLED PERPENDICULAR
029BA^⦺^^\obot^N^mathord^^CIRCLE DIVIDED BY HORIZONTAL BAR AND TOP HALF DIVIDED BY VERTICAL BAR
029BB^⦻^^\olcross^N^mathord^^CIRCLE WITH SUPERIMPOSED X
029BC^⦼^^\odotslashdot^N^mathord^^CIRCLED ANTICLOCKWISE-ROTATED DIVISION SIGN
029BD^⦽^^\uparrowoncircle^N^mathord^^UP ARROW THROUGH CIRCLE
029BE^⦾^^\circledwhitebullet^N^mathord^^CIRCLED WHITE BULLET
029BF^⦿^^\circledbullet^N^mathord^^CIRCLED BULLET
029C0^⧀^\circledless^\olessthan^B^mathbin^txfonts^CIRCLED LESS-THAN
029C1^⧁^\circledgtr^\ogreaterthan^B^mathbin^txfonts^CIRCLED GREATER-THAN
029C2^⧂^^\cirscir^N^mathord^^CIRCLE WITH SMALL CIRCLE TO THE RIGHT
029C3^⧃^^\cirE^N^mathord^^CIRCLE WITH TWO HORIZONTAL STROKES TO THE RIGHT
029C4^⧄^\boxslash^\boxdiag^B^mathbin^stmaryrd txfonts^SQUARED RISING DIAGONAL SLASH
029C5^⧅^\boxbslash^\boxbslash^B^mathbin^stmaryrd txfonts^SQUARED FALLING DIAGONAL SLASH
029C6^⧆^\boxast^\boxast^B^mathbin^stmaryrd txfonts^SQUARED ASTERISK
029C7^⧇^\boxcircle^\boxcircle^B^mathbin^stmaryrd^SQUARED SMALL CIRCLE
029C8^⧈^\boxbox^\boxbox^B^mathbin^stmaryrd^SQUARED SQUARE
029C9^⧉^^\boxonbox^N^mathord^^TWO JOINED SQUARES
029CA^⧊^^\triangleodot^N^mathord^^TRIANGLE WITH DOT ABOVE
029CB^⧋^^\triangleubar^N^mathord^^TRIANGLE WITH UNDERBAR
029CC^⧌^^\triangles^N^mathord^^S IN TRIANGLE
029CD^⧍^^\triangleserifs^N^mathbin^^TRIANGLE WITH SERIFS AT BOTTOM
029CE^⧎^^\rtriltri^R^mathrel^^RIGHT TRIANGLE ABOVE LEFT TRIANGLE
029CF^⧏^\LeftTriangleBar^\ltrivb^R^mathrel^wrisym^LEFT TRIANGLE BESIDE VERTICAL BAR
029D0^⧐^\RightTriangleBar^\vbrtri^R^mathrel^wrisym^VERTICAL BAR BESIDE RIGHT TRIANGLE
029D1^⧑^^\lfbowtie^R^mathrel^^left black bowtie
029D2^⧒^^\rfbowtie^R^mathrel^^right black bowtie
029D3^⧓^^\fbowtie^R^mathrel^^BLACK BOWTIE
029D4^⧔^^\lftimes^R^mathrel^^left black times
029D5^⧕^^\rftimes^R^mathrel^^right black times
029D6^⧖^^\hourglass^B^mathbin^^WHITE HOURGLASS
029D7^⧗^^\blackhourglass^B^mathbin^^BLACK HOURGLASS
029D8^⧘^^\lvzigzag^O^mathopen^^LEFT WIGGLY FENCE
029D9^⧙^^\rvzigzag^C^mathclose^^RIGHT WIGGLY FENCE
029DA^⧚^^\Lvzigzag^O^mathopen^^LEFT DOUBLE WIGGLY FENCE
029DB^⧛^^\Rvzigzag^C^mathclose^^RIGHT DOUBLE WIGGLY FENCE
029DC^⧜^^\iinfin^N^mathord^^INCOMPLETE INFINITY
029DD^⧝^^\tieinfty^N^mathord^^TIE OVER INFINITY
029DE^⧞^^\nvinfty^N^mathord^^INFINITY NEGATED WITH VERTICAL BAR
029DF^⧟^\multimapboth^\dualmap^R^mathrel^txfonts^DOUBLE-ENDED MULTIMAP
029E0^⧠^^\laplac^N^mathord^^SQUARE WITH CONTOURED OUTLINE
029E1^⧡^^\lrtriangleeq^R^mathrel^^INCREASES AS
029E2^⧢^^\shuffle^B^mathbin^^SHUFFLE PRODUCT
029E3^⧣^^\eparsl^R^mathrel^^EQUALS SIGN AND SLANTED PARALLEL
029E4^⧤^^\smeparsl^R^mathrel^^EQUALS SIGN AND SLANTED PARALLEL WITH TILDE ABOVE
029E5^⧥^^\eqvparsl^R^mathrel^^IDENTICAL TO AND SLANTED PARALLEL
029E6^⧦^^\gleichstark^R^mathrel^^GLEICH STARK
029E7^⧧^^\thermod^N^mathord^^THERMODYNAMIC
029E8^⧨^^\downtriangleleftblack^N^mathord^^DOWN-POINTING TRIANGLE WITH LEFT HALF BLACK
029E9^⧩^^\downtrianglerightblack^N^mathord^^DOWN-POINTING TRIANGLE WITH RIGHT HALF BLACK
029EA^⧪^^\blackdiamonddownarrow^N^mathord^^BLACK DIAMOND WITH DOWN ARROW
029EB^⧫^\blacklozenge^\mdlgblklozenge^B^mathbin^amssymb^BLACK LOZENGE
029EC^⧬^^\circledownarrow^N^mathord^^WHITE CIRCLE WITH DOWN ARROW
029ED^⧭^^\blackcircledownarrow^N^mathord^^BLACK CIRCLE WITH DOWN ARROW
029EE^⧮^^\errbarsquare^N^mathord^^ERROR-BARRED WHITE SQUARE
029EF^⧯^^\errbarblacksquare^N^mathord^^ERROR-BARRED BLACK SQUARE
029F0^⧰^^\errbardiamond^N^mathord^^ERROR-BARRED WHITE DIAMOND
029F1^⧱^^\errbarblackdiamond^N^mathord^^ERROR-BARRED BLACK DIAMOND
029F2^⧲^^\errbarcircle^N^mathord^^ERROR-BARRED WHITE CIRCLE
029F3^⧳^^\errbarblackcircle^N^mathord^^ERROR-BARRED BLACK CIRCLE
029F4^⧴^^\ruledelayed^R^mathrel^^RULE-DELAYED
029F5^⧵^\setminus^\setminus^B^mathbin^^REVERSE SOLIDUS OPERATOR
029F6^⧶^^\dsol^B^mathbin^^SOLIDUS WITH OVERBAR
029F7^⧷^^\rsolbar^B^mathbin^^REVERSE SOLIDUS WITH HORIZONTAL STROKE
029F8^⧸^^\xsol^L^mathop^^BIG SOLIDUS
029F9^⧹^\zhide^\xbsol^L^mathop^oz^= \hide (oz), BIG REVERSE SOLIDUS, z notation schema hiding
029FA^⧺^^\doubleplus^B^mathbin^^DOUBLE PLUS
029FB^⧻^^\tripleplus^B^mathbin^^TRIPLE PLUS
029FC^⧼^^\lcurvyangle^O^mathopen^^left pointing curved angle bracket
029FD^⧽^^\rcurvyangle^C^mathclose^^right pointing curved angle bracket
029FE^⧾^^\tplus^B^mathbin^^TINY
029FF^⧿^^\tminus^B^mathbin^^MINY
02A00^⨀^\bigodot^\bigodot^L^mathop^^N-ARY CIRCLED DOT OPERATOR
02A01^⨁^\bigoplus^\bigoplus^L^mathop^^N-ARY CIRCLED PLUS OPERATOR
02A02^⨂^\bigotimes^\bigotimes^L^mathop^^N-ARY CIRCLED TIMES OPERATOR
02A03^⨃^^\bigcupdot^L^mathop^^N-ARY UNION OPERATOR WITH DOT
02A04^⨄^\biguplus^\biguplus^L^mathop^^N-ARY UNION OPERATOR WITH PLUS
02A05^⨅^\bigsqcap^\bigsqcap^L^mathop^txfonts^N-ARY SQUARE INTERSECTION OPERATOR
02A06^⨆^\bigsqcup^\bigsqcup^L^mathop^^N-ARY SQUARE UNION OPERATOR
02A07^⨇^^\conjquant^L^mathop^^TWO LOGICAL AND OPERATOR
02A08^⨈^^\disjquant^L^mathop^^TWO LOGICAL OR OPERATOR
02A09^⨉^\varprod^\bigtimes^L^mathop^txfonts^N-ARY TIMES OPERATOR
02A0A^⨊^^\modtwosum^L^mathord^^MODULO TWO SUM
02A0B^⨋^^\sumint^L^mathop^^SUMMATION WITH INTEGRAL
02A0C^⨌^\iiiint^\iiiint^L^mathop^amsmath esint^QUADRUPLE INTEGRAL OPERATOR
02A0D^⨍^^\intbar^L^mathop^^FINITE PART INTEGRAL
02A0E^⨎^^\intBar^L^mathop^^INTEGRAL WITH DOUBLE STROKE
02A0F^⨏^\fint^\fint^L^mathop^esint wrisym^INTEGRAL AVERAGE WITH SLASH
02A10^⨐^^\cirfnint^L^mathop^^CIRCULATION FUNCTION
02A11^⨑^^\awint^L^mathop^^ANTICLOCKWISE INTEGRATION
02A12^⨒^^\rppolint^L^mathop^^LINE INTEGRATION WITH RECTANGULAR PATH AROUND POLE
02A13^⨓^^\scpolint^L^mathop^^LINE INTEGRATION WITH SEMICIRCULAR PATH AROUND POLE
02A14^⨔^^\npolint^L^mathop^^LINE INTEGRATION NOT INCLUDING THE POLE
02A15^⨕^^\pointint^L^mathop^^INTEGRAL AROUND A POINT OPERATOR
02A16^⨖^\sqint^\sqint^L^mathop^esint^= \sqrint (wrisym), QUATERNION INTEGRAL OPERATOR
02A17^⨗^^\intlarhk^L^mathop^^INTEGRAL WITH LEFTWARDS ARROW WITH HOOK
02A18^⨘^^\intx^L^mathop^^INTEGRAL WITH TIMES SIGN
02A19^⨙^^\intcap^L^mathop^^INTEGRAL WITH INTERSECTION
02A1A^⨚^^\intcup^L^mathop^^INTEGRAL WITH UNION
02A1B^⨛^^\upint^L^mathop^^INTEGRAL WITH OVERBAR
02A1C^⨜^^\lowint^L^mathop^^INTEGRAL WITH UNDERBAR
02A1D^⨝^\Join^\Join^L^mathop^amssymb^JOIN
02A1E^⨞^^\bigtriangleleft^L^mathop^^LARGE LEFT TRIANGLE OPERATOR
02A1F^⨟^\zcmp^\zcmp^L^mathop^oz^= \semi (oz), = \fatsemi (stmaryrd), Z NOTATION SCHEMA COMPOSITION
02A20^⨠^\zpipe^\zpipe^L^mathop^oz^Z NOTATION SCHEMA PIPING
02A21^⨡^\zproject^\zproject^L^mathop^oz^= \project (oz), Z NOTATION SCHEMA PROJECTION
02A22^⨢^^\ringplus^B^mathbin^^PLUS SIGN WITH SMALL CIRCLE ABOVE
02A23^⨣^^\plushat^B^mathbin^^PLUS SIGN WITH CIRCUMFLEX ACCENT ABOVE
02A24^⨤^^\simplus^B^mathbin^^PLUS SIGN WITH TILDE ABOVE
02A25^⨥^^\plusdot^B^mathbin^^PLUS SIGN WITH DOT BELOW
02A26^⨦^^\plussim^B^mathbin^^PLUS SIGN WITH TILDE BELOW
02A27^⨧^^\plussubtwo^B^mathbin^^PLUS SIGN WITH SUBSCRIPT TWO
02A28^⨨^^\plustrif^B^mathbin^^PLUS SIGN WITH BLACK TRIANGLE
02A29^⨩^^\commaminus^B^mathbin^^MINUS SIGN WITH COMMA ABOVE
02A2A^⨪^^\minusdot^B^mathbin^^MINUS SIGN WITH DOT BELOW
02A2B^⨫^^\minusfdots^B^mathbin^^MINUS SIGN WITH FALLING DOTS
02A2C^⨬^^\minusrdots^B^mathbin^^MINUS SIGN WITH RISING DOTS
02A2D^⨭^^\opluslhrim^B^mathbin^^PLUS SIGN IN LEFT HALF CIRCLE
02A2E^⨮^^\oplusrhrim^B^mathbin^^PLUS SIGN IN RIGHT HALF CIRCLE
02A2F^⨯^^\vectimes^B^mathbin^^# \times, VECTOR OR CROSS PRODUCT
02A30^⨰^^\dottimes^B^mathbin^^MULTIPLICATION SIGN WITH DOT ABOVE
02A31^⨱^^\timesbar^B^mathbin^^MULTIPLICATION SIGN WITH UNDERBAR
02A32^⨲^^\btimes^B^mathbin^^SEMIDIRECT PRODUCT WITH BOTTOM CLOSED
02A33^⨳^^\smashtimes^B^mathbin^^SMASH PRODUCT
02A34^⨴^^\otimeslhrim^B^mathbin^^MULTIPLICATION SIGN IN LEFT HALF CIRCLE
02A35^⨵^^\otimesrhrim^B^mathbin^^MULTIPLICATION SIGN IN RIGHT HALF CIRCLE
02A36^⨶^^\otimeshat^B^mathbin^^CIRCLED MULTIPLICATION SIGN WITH CIRCUMFLEX ACCENT
02A37^⨷^^\Otimes^B^mathbin^^MULTIPLICATION SIGN IN DOUBLE CIRCLE
02A38^⨸^^\odiv^B^mathbin^^CIRCLED DIVISION SIGN
02A39^⨹^^\triangleplus^B^mathbin^^PLUS SIGN IN TRIANGLE
02A3A^⨺^^\triangleminus^B^mathbin^^MINUS SIGN IN TRIANGLE
02A3B^⨻^^\triangletimes^B^mathbin^^MULTIPLICATION SIGN IN TRIANGLE
02A3C^⨼^^\intprod^B^mathbin^^INTERIOR PRODUCT
02A3D^⨽^^\intprodr^B^mathbin^^RIGHTHAND INTERIOR PRODUCT
02A3E^⨾^\fcmp^\fcmp^B^mathbin^oz^= \comp (oz), Z NOTATION RELATIONAL COMPOSITION
02A3F^⨿^\amalg^\amalg^B^mathbin^^AMALGAMATION OR COPRODUCT
02A40^⩀^^\capdot^B^mathbin^^INTERSECTION WITH DOT
02A41^⩁^^\uminus^B^mathbin^^UNION WITH MINUS SIGN, z notation bag subtraction
02A42^⩂^^\barcup^B^mathbin^^UNION WITH OVERBAR
02A43^⩃^^\barcap^B^mathbin^^INTERSECTION WITH OVERBAR
02A44^⩄^^\capwedge^B^mathbin^^INTERSECTION WITH LOGICAL AND
02A45^⩅^^\cupvee^B^mathbin^^UNION WITH LOGICAL OR
02A46^⩆^^\cupovercap^B^mathbin^^UNION ABOVE INTERSECTION
02A47^⩇^^\capovercup^B^mathbin^^INTERSECTION ABOVE UNION
02A48^⩈^^\cupbarcap^B^mathbin^^UNION ABOVE BAR ABOVE INTERSECTION
02A49^⩉^^\capbarcup^B^mathbin^^INTERSECTION ABOVE BAR ABOVE UNION
02A4A^⩊^^\twocups^B^mathbin^^UNION BESIDE AND JOINED WITH UNION
02A4B^⩋^^\twocaps^B^mathbin^^INTERSECTION BESIDE AND JOINED WITH INTERSECTION
02A4C^⩌^^\closedvarcup^B^mathbin^^CLOSED UNION WITH SERIFS
02A4D^⩍^^\closedvarcap^B^mathbin^^CLOSED INTERSECTION WITH SERIFS
02A4E^⩎^^\Sqcap^B^mathbin^^DOUBLE SQUARE INTERSECTION
02A4F^⩏^^\Sqcup^B^mathbin^^DOUBLE SQUARE UNION
02A50^⩐^^\closedvarcupsmashprod^B^mathbin^^CLOSED UNION WITH SERIFS AND SMASH PRODUCT
02A51^⩑^^\wedgeodot^B^mathbin^^LOGICAL AND WITH DOT ABOVE
02A52^⩒^^\veeodot^B^mathbin^^LOGICAL OR WITH DOT ABOVE
02A53^⩓^^\Wedge^B^mathbin^^DOUBLE LOGICAL AND
02A54^⩔^^\Vee^B^mathbin^^DOUBLE LOGICAL OR
02A55^⩕^^\wedgeonwedge^B^mathbin^^TWO INTERSECTING LOGICAL AND
02A56^⩖^^\veeonvee^B^mathbin^^TWO INTERSECTING LOGICAL OR
02A57^⩗^^\bigslopedvee^B^mathbin^^SLOPING LARGE OR
02A58^⩘^^\bigslopedwedge^B^mathbin^^SLOPING LARGE AND
02A59^⩙^^\veeonwedge^R^mathrel^^LOGICAL OR OVERLAPPING LOGICAL AND
02A5A^⩚^^\wedgemidvert^B^mathbin^^LOGICAL AND WITH MIDDLE STEM
02A5B^⩛^^\veemidvert^B^mathbin^^LOGICAL OR WITH MIDDLE STEM
02A5C^⩜^^\midbarwedge^B^mathbin^^ogical and with horizontal dash
02A5D^⩝^^\midbarvee^B^mathbin^^LOGICAL OR WITH HORIZONTAL DASH
02A5E^⩞^\doublebarwedge^\doublebarwedge^B^mathbin^amssymb^LOGICAL AND WITH DOUBLE OVERBAR
02A5F^⩟^^\wedgebar^B^mathbin^^LOGICAL AND WITH UNDERBAR
02A60^⩠^^\wedgedoublebar^B^mathbin^^LOGICAL AND WITH DOUBLE UNDERBAR
02A61^⩡^^\varveebar^B^mathbin^^SMALL VEE WITH UNDERBAR
02A62^⩢^^\doublebarvee^B^mathbin^^LOGICAL OR WITH DOUBLE OVERBAR
02A63^⩣^^\veedoublebar^B^mathbin^^LOGICAL OR WITH DOUBLE UNDERBAR
02A64^⩤^\dsub^\dsub^B^mathbin^oz^= \ndres (oz), Z NOTATION DOMAIN ANTIRESTRICTION
02A65^⩥^\rsub^\rsub^B^mathbin^oz^= \nrres (oz), Z NOTATION RANGE ANTIRESTRICTION
02A66^⩦^^\eqdot^R^mathrel^^EQUALS SIGN WITH DOT BELOW
02A67^⩧^^\dotequiv^R^mathrel^^IDENTICAL WITH DOT ABOVE
02A68^⩨^^\equivVert^R^mathrel^^TRIPLE HORIZONTAL BAR WITH DOUBLE VERTICAL STROKE
02A69^⩩^^\equivVvert^R^mathrel^^TRIPLE HORIZONTAL BAR WITH TRIPLE VERTICAL STROKE
02A6A^⩪^^\dotsim^R^mathrel^^TILDE OPERATOR WITH DOT ABOVE
02A6B^⩫^^\simrdots^R^mathrel^^TILDE OPERATOR WITH RISING DOTS
02A6C^⩬^^\simminussim^R^mathrel^^SIMILAR MINUS SIMILAR
02A6D^⩭^^\congdot^R^mathrel^^CONGRUENT WITH DOT ABOVE
02A6E^⩮^^\asteq^R^mathrel^^EQUALS WITH ASTERISK
02A6F^⩯^^\hatapprox^R^mathrel^^ALMOST EQUAL TO WITH CIRCUMFLEX ACCENT
02A70^⩰^^\approxeqq^R^mathrel^^APPROXIMATELY EQUAL OR EQUAL TO
02A71^⩱^^\eqqplus^B^mathbin^^EQUALS SIGN ABOVE PLUS SIGN
02A72^⩲^^\pluseqq^B^mathbin^^PLUS SIGN ABOVE EQUALS SIGN
02A73^⩳^^\eqqsim^R^mathrel^^EQUALS SIGN ABOVE TILDE OPERATOR
02A74^⩴^\Coloneqq^\Coloneq^R^mathrel^txfonts^# ::=, x \Coloneq (txfonts), DOUBLE COLON EQUAL
02A75^⩵^\Equal^\eqeq^R^mathrel^wrisym^# ==, TWO CONSECUTIVE EQUALS SIGNS
02A76^⩶^\Same^\eqeqeq^R^mathrel^wrisym^# ===, THREE CONSECUTIVE EQUALS SIGNS
02A77^⩷^^\ddotseq^R^mathrel^^EQUALS SIGN WITH TWO DOTS ABOVE AND TWO DOTS BELOW
02A78^⩸^^\equivDD^R^mathrel^^EQUIVALENT WITH FOUR DOTS ABOVE
02A79^⩹^^\ltcir^R^mathrel^^LESS-THAN WITH CIRCLE INSIDE
02A7A^⩺^^\gtcir^R^mathrel^^GREATER-THAN WITH CIRCLE INSIDE
02A7B^⩻^^\ltquest^R^mathrel^^LESS-THAN WITH QUESTION MARK ABOVE
02A7C^⩼^^\gtquest^R^mathrel^^GREATER-THAN WITH QUESTION MARK ABOVE
02A7D^⩽^\leqslant^\leqslant^R^mathrel^amssymb fourier^LESS-THAN OR SLANTED EQUAL TO
02A7E^⩾^\geqslant^\geqslant^R^mathrel^amssymb fourier^GREATER-THAN OR SLANTED EQUAL TO
02A7F^⩿^^\lesdot^R^mathrel^^LESS-THAN OR SLANTED EQUAL TO WITH DOT INSIDE
02A80^⪀^^\gesdot^R^mathrel^^GREATER-THAN OR SLANTED EQUAL TO WITH DOT INSIDE
02A81^⪁^^\lesdoto^R^mathrel^^LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE
02A82^⪂^^\gesdoto^R^mathrel^^GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE
02A83^⪃^^\lesdotor^R^mathrel^^LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE RIGHT
02A84^⪄^^\gesdotol^R^mathrel^^GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE LEFT
02A85^⪅^\lessapprox^\lessapprox^R^mathrel^amssymb^LESS-THAN OR APPROXIMATE
02A86^⪆^\gtrapprox^\gtrapprox^R^mathrel^amssymb^GREATER-THAN OR APPROXIMATE
02A87^⪇^\lneq^\lneq^R^mathrel^amssymb^LESS-THAN AND SINGLE-LINE NOT EQUAL TO
02A88^⪈^\gneq^\gneq^R^mathrel^amssymb^GREATER-THAN AND SINGLE-LINE NOT EQUAL TO
02A89^⪉^\lnapprox^\lnapprox^R^mathrel^amssymb^LESS-THAN AND NOT APPROXIMATE
02A8A^⪊^\gnapprox^\gnapprox^R^mathrel^amssymb^GREATER-THAN AND NOT APPROXIMATE
02A8B^⪋^\lesseqqgtr^\lesseqqgtr^R^mathrel^amssymb^LESS-THAN ABOVE DOUBLE-LINE EQUAL ABOVE GREATER-THAN
02A8C^⪌^\gtreqqless^\gtreqqless^R^mathrel^amssymb^GREATER-THAN ABOVE DOUBLE-LINE EQUAL ABOVE LESS-THAN
02A8D^⪍^^\lsime^R^mathrel^^LESS-THAN ABOVE SIMILAR OR EQUAL
02A8E^⪎^^\gsime^R^mathrel^^GREATER-THAN ABOVE SIMILAR OR EQUAL
02A8F^⪏^^\lsimg^R^mathrel^^LESS-THAN ABOVE SIMILAR ABOVE GREATER-THAN
02A90^⪐^^\gsiml^R^mathrel^^GREATER-THAN ABOVE SIMILAR ABOVE LESS-THAN
02A91^⪑^^\lgE^R^mathrel^^LESS-THAN ABOVE GREATER-THAN ABOVE DOUBLE-LINE EQUAL
02A92^⪒^^\glE^R^mathrel^^GREATER-THAN ABOVE LESS-THAN ABOVE DOUBLE-LINE EQUAL
02A93^⪓^^\lesges^R^mathrel^^LESS-THAN ABOVE SLANTED EQUAL ABOVE GREATER-THAN ABOVE SLANTED EQUAL
02A94^⪔^^\gesles^R^mathrel^^GREATER-THAN ABOVE SLANTED EQUAL ABOVE LESS-THAN ABOVE SLANTED EQUAL
02A95^⪕^\eqslantless^\eqslantless^R^mathrel^amssymb^SLANTED EQUAL TO OR LESS-THAN
02A96^⪖^\eqslantgtr^\eqslantgtr^R^mathrel^amssymb^SLANTED EQUAL TO OR GREATER-THAN
02A97^⪗^^\elsdot^R^mathrel^^SLANTED EQUAL TO OR LESS-THAN WITH DOT INSIDE
02A98^⪘^^\egsdot^R^mathrel^^SLANTED EQUAL TO OR GREATER-THAN WITH DOT INSIDE
02A99^⪙^^\eqqless^R^mathrel^^DOUBLE-LINE EQUAL TO OR LESS-THAN
02A9A^⪚^^\eqqgtr^R^mathrel^^DOUBLE-LINE EQUAL TO OR GREATER-THAN
02A9B^⪛^^\eqqslantless^R^mathrel^^DOUBLE-LINE SLANTED EQUAL TO OR LESS-THAN
02A9C^⪜^^\eqqslantgtr^R^mathrel^^DOUBLE-LINE SLANTED EQUAL TO OR GREATER-THAN
02A9D^⪝^^\simless^R^mathrel^^SIMILAR OR LESS-THAN
02A9E^⪞^^\simgtr^R^mathrel^^SIMILAR OR GREATER-THAN
02A9F^⪟^^\simlE^R^mathrel^^SIMILAR ABOVE LESS-THAN ABOVE EQUALS SIGN
02AA0^⪠^^\simgE^R^mathrel^^SIMILAR ABOVE GREATER-THAN ABOVE EQUALS SIGN
02AA1^⪡^\NestedLessLess^\Lt^R^mathrel^wrisym^= \lll (mathabx -amssymb), DOUBLE NESTED LESS-THAN
02AA2^⪢^\NestedGreaterGreater^\Gt^R^mathrel^wrisym^= \ggg (mathabx -amssymb), DOUBLE NESTED GREATER-THAN
02AA3^⪣^^\partialmeetcontraction^R^mathrel^^double less-than with underbar
02AA4^⪤^^\glj^R^mathrel^^GREATER-THAN OVERLAPPING LESS-THAN
02AA5^⪥^^\gla^R^mathrel^^GREATER-THAN BESIDE LESS-THAN
02AA6^⪦^\leftslice^\ltcc^R^mathrel^stmaryrd^LESS-THAN CLOSED BY CURVE
02AA7^⪧^\rightslice^\gtcc^R^mathrel^stmaryrd^GREATER-THAN CLOSED BY CURVE
02AA8^⪨^^\lescc^R^mathrel^^LESS-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL
02AA9^⪩^^\gescc^R^mathrel^^GREATER-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL
02AAA^⪪^^\smt^R^mathrel^^SMALLER THAN
02AAB^⪫^^\lat^R^mathrel^^LARGER THAN
02AAC^⪬^^\smte^R^mathrel^^SMALLER THAN OR EQUAL TO
02AAD^⪭^^\late^R^mathrel^^LARGER THAN OR EQUAL TO
02AAE^⪮^^\bumpeqq^R^mathrel^^EQUALS SIGN WITH BUMPY ABOVE
02AAF^⪯^\preceq^\preceq^R^mathrel^^PRECEDES ABOVE SINGLE-LINE EQUALS SIGN
02AB0^⪰^\succeq^\succeq^R^mathrel^^SUCCEEDS ABOVE SINGLE-LINE EQUALS SIGN
02AB1^⪱^^\precneq^R^mathrel^^PRECEDES ABOVE SINGLE-LINE NOT EQUAL TO
02AB2^⪲^^\succneq^R^mathrel^^SUCCEEDS ABOVE SINGLE-LINE NOT EQUAL
gitextract_s7jfff1_/
├── .all-contributorsrc
├── .coderabbit.yaml
├── .github/
│ ├── dependabot.yml
│ └── workflows/
│ ├── pypi.yml
│ ├── python.yml
│ └── testpypi.yml
├── .gitignore
├── .pre-commit-config.yaml
├── LICENSE
├── Makefile
├── README.md
├── example.py
├── latex2mathml/
│ ├── __init__.py
│ ├── commands.py
│ ├── converter.py
│ ├── exceptions.py
│ ├── py.typed
│ ├── symbols_parser.py
│ ├── tokenizer.py
│ ├── unimathsymbols.txt
│ └── walker.py
├── pyproject.toml
└── tests/
├── __init__.py
├── __snapshots__/
│ └── test_converter/
│ ├── test_convert_to_element.html
│ ├── test_convert_to_element_with_parent.html
│ ├── test_converter[307-a].html
│ ├── test_converter[307-b].html
│ ├── test_converter[And].html
│ ├── test_converter[Bbb-group].html
│ ├── test_converter[Bmatrix].html
│ ├── test_converter[LaTeX-with-style].html
│ ├── test_converter[LaTeX].html
│ ├── test_converter[Pr].html
│ ├── test_converter[S].html
│ ├── test_converter[TeX-with-style].html
│ ├── test_converter[TeX].html
│ ├── test_converter[above].html
│ ├── test_converter[abovewithdelims].html
│ ├── test_converter[acute].html
│ ├── test_converter[align-nonumber].html
│ ├── test_converter[align-notag].html
│ ├── test_converter[align0].html
│ ├── test_converter[align1].html
│ ├── test_converter[arctg].html
│ ├── test_converter[argmax].html
│ ├── test_converter[array-with-horizontal-lines].html
│ ├── test_converter[array-with-vertical-bar].html
│ ├── test_converter[atop-and-atopwithdelims].html
│ ├── test_converter[backslash-e].html
│ ├── test_converter[big].html
│ ├── test_converter[bigcirc].html
│ ├── test_converter[bigl-smallmatrix-bigr].html
│ ├── test_converter[binomial-coefficients].html
│ ├── test_converter[binomial].html
│ ├── test_converter[blackboard-bold].html
│ ├── test_converter[bm].html
│ ├── test_converter[bmod].html
│ ├── test_converter[bold].html
│ ├── test_converter[boldsymbol].html
│ ├── test_converter[boxed-box].html
│ ├── test_converter[bra].html
│ ├── test_converter[brace-1].html
│ ├── test_converter[brace].html
│ ├── test_converter[braket].html
│ ├── test_converter[breve].html
│ ├── test_converter[calligraphic-mode].html
│ ├── test_converter[cancel].html
│ ├── test_converter[centerdot].html
│ ├── test_converter[cfrac].html
│ ├── test_converter[check].html
│ ├── test_converter[choose].html
│ ├── test_converter[circledS].html
│ ├── test_converter[class].html
│ ├── test_converter[color].html
│ ├── test_converter[colorbox].html
│ ├── test_converter[command-inside-matrix].html
│ ├── test_converter[comments].html
│ ├── test_converter[complex-matrix].html
│ ├── test_converter[ddot-dddot-ddddot].html
│ ├── test_converter[decimal-numbers].html
│ ├── test_converter[degree-polynomial].html
│ ├── test_converter[degree].html
│ ├── test_converter[determinant].html
│ ├── test_converter[dfrac].html
│ ├── test_converter[diagdown-diagup].html
│ ├── test_converter[dimension-vector-space].html
│ ├── test_converter[displaylines].html
│ ├── test_converter[displaystyle].html
│ ├── test_converter[dots].html
│ ├── test_converter[dotsb].html
│ ├── test_converter[dotsc].html
│ ├── test_converter[dotsi].html
│ ├── test_converter[dotsm].html
│ ├── test_converter[dotso].html
│ ├── test_converter[double-pipe].html
│ ├── test_converter[emph].html
│ ├── test_converter[empty-color-works].html
│ ├── test_converter[empty-subscript].html
│ ├── test_converter[emptyset].html
│ ├── test_converter[eqalign].html
│ ├── test_converter[escaped-characters].html
│ ├── test_converter[exponent-without-base-works].html
│ ├── test_converter[exponential-function].html
│ ├── test_converter[fbox].html
│ ├── test_converter[fcolorbox].html
│ ├── test_converter[footnotesize].html
│ ├── test_converter[fraktur].html
│ ├── test_converter[genfrac-displaystyle].html
│ ├── test_converter[genfrac-scriptscriptstyle].html
│ ├── test_converter[genfrac-scriptstyle].html
│ ├── test_converter[genfrac-textstyle].html
│ ├── test_converter[gggtr].html
│ ├── test_converter[global-fonts].html
│ ├── test_converter[grave].html
│ ├── test_converter[greatest-common-divisor].html
│ ├── test_converter[gt].html
│ ├── test_converter[gvertneqq].html
│ ├── test_converter[hat].html
│ ├── test_converter[hbox-with-backslash-in-text].html
│ ├── test_converter[hbox-with-math-mode].html
│ ├── test_converter[hbox].html
│ ├── test_converter[hfil].html
│ ├── test_converter[hom].html
│ ├── test_converter[hphantom].html
│ ├── test_converter[href].html
│ ├── test_converter[huge].html
│ ├── test_converter[idotsint].html
│ ├── test_converter[inf].html
│ ├── test_converter[injlim].html
│ ├── test_converter[inner-group].html
│ ├── test_converter[intop].html
│ ├── test_converter[issue-103].html
│ ├── test_converter[issue-106].html
│ ├── test_converter[issue-108-1].html
│ ├── test_converter[issue-108-2].html
│ ├── test_converter[issue-108-3].html
│ ├── test_converter[issue-109-1].html
│ ├── test_converter[issue-109-2].html
│ ├── test_converter[issue-112-1].html
│ ├── test_converter[issue-112-2].html
│ ├── test_converter[issue-118].html
│ ├── test_converter[issue-125-1-overset].html
│ ├── test_converter[issue-125-2-overset].html
│ ├── test_converter[issue-125-3-underset].html
│ ├── test_converter[issue-125-4-limits].html
│ ├── test_converter[issue-125-4-mathop].html
│ ├── test_converter[issue-301-a].html
│ ├── test_converter[issue-301-b].html
│ ├── test_converter[issue-301-c].html
│ ├── test_converter[issue-33].html
│ ├── test_converter[issue-42].html
│ ├── test_converter[issue-44].html
│ ├── test_converter[issue-45-gt].html
│ ├── test_converter[issue-45-lt].html
│ ├── test_converter[issue-462-octuple-prime].html
│ ├── test_converter[issue-462-quadruple-prime].html
│ ├── test_converter[issue-462-quintuple-prime].html
│ ├── test_converter[issue-462-triple-prime].html
│ ├── test_converter[issue-498-prod].html
│ ├── test_converter[issue-498-sum].html
│ ├── test_converter[issue-51].html
│ ├── test_converter[issue-52].html
│ ├── test_converter[issue-60-1].html
│ ├── test_converter[issue-60-2].html
│ ├── test_converter[issue-61].html
│ ├── test_converter[issue-63].html
│ ├── test_converter[issue-75-1-row].html
│ ├── test_converter[issue-75-2-rows].html
│ ├── test_converter[issue-76].html
│ ├── test_converter[issue-77].html
│ ├── test_converter[issue-91].html
│ ├── test_converter[issue-98].html
│ ├── test_converter[ker].html
│ ├── test_converter[ket].html
│ ├── test_converter[lVert-double].html
│ ├── test_converter[large].html
│ ├── test_converter[ldotp].html
│ ├── test_converter[left-and-right].html
│ ├── test_converter[leftroot-uproot].html
│ ├── test_converter[lg].html
│ ├── test_converter[liminf].html
│ ├── test_converter[limit-at-plus-infinity].html
│ ├── test_converter[limsup].html
│ ├── test_converter[llap].html
│ ├── test_converter[llless].html
│ ├── test_converter[logarithm-with-base].html
│ ├── test_converter[logarithm].html
│ ├── test_converter[lower].html
│ ├── test_converter[lt].html
│ ├── test_converter[lvert].html
│ ├── test_converter[lvertneqq].html
│ ├── test_converter[math-commands-that-currently-does-nothing].html
│ ├── test_converter[mathbb].html
│ ├── test_converter[mathbf].html
│ ├── test_converter[mathbin].html
│ ├── test_converter[mathcal].html
│ ├── test_converter[mathchoice-block].html
│ ├── test_converter[mathfrak].html
│ ├── test_converter[mathit].html
│ ├── test_converter[mathllap].html
│ ├── test_converter[mathop].html
│ ├── test_converter[mathord].html
│ ├── test_converter[mathrel].html
│ ├── test_converter[mathring].html
│ ├── test_converter[mathrm].html
│ ├── test_converter[mathscr].html
│ ├── test_converter[mathsf].html
│ ├── test_converter[mathsfit].html
│ ├── test_converter[mathstrut].html
│ ├── test_converter[mathtt].html
│ ├── test_converter[matrix-with-alignment].html
│ ├── test_converter[matrix-with-negative-sign].html
│ ├── test_converter[matrix-without-begin-and-end].html
│ ├── test_converter[matrix].html
│ ├── test_converter[mbox].html
│ ├── test_converter[middle].html
│ ├── test_converter[mit].html
│ ├── test_converter[mod].html
│ ├── test_converter[moveleft].html
│ ├── test_converter[moveright].html
│ ├── test_converter[multiple-groups].html
│ ├── test_converter[multiple-identifier].html
│ ├── test_converter[multiple-numbers].html
│ ├── test_converter[newenvironment-multi-node].html
│ ├── test_converter[ngeqq].html
│ ├── test_converter[nolimits].html
│ ├── test_converter[normalsize-scriptsize].html
│ ├── test_converter[not].html
│ ├── test_converter[nshortmid].html
│ ├── test_converter[nshortparallel].html
│ ├── test_converter[nsubseteqq].html
│ ├── test_converter[null-delimiter].html
│ ├── test_converter[numbers-and-identifiers].html
│ ├── test_converter[numbers-and-operators-cdot].html
│ ├── test_converter[numbers-and-operators-div].html
│ ├── test_converter[numbers-and-operators-times].html
│ ├── test_converter[numbers-and-operators].html
│ ├── test_converter[numbers-identifiers-and-operators].html
│ ├── test_converter[oldstyle].html
│ ├── test_converter[omicron].html
│ ├── test_converter[operatorname-star].html
│ ├── test_converter[operatornamewithlimits].html
│ ├── test_converter[over-inside-braces].html
│ ├── test_converter[over].html
│ ├── test_converter[overbrace-a].html
│ ├── test_converter[overbrace-b].html
│ ├── test_converter[overbrace-c].html
│ ├── test_converter[overbracket].html
│ ├── test_converter[overleftarrow].html
│ ├── test_converter[overleftrightarrow].html
│ ├── test_converter[overline].html
│ ├── test_converter[overparen].html
│ ├── test_converter[overrightarrow].html
│ ├── test_converter[phantom].html
│ ├── test_converter[pipe].html
│ ├── test_converter[pmatrix].html
│ ├── test_converter[pmod].html
│ ├── test_converter[pod].html
│ ├── test_converter[prime-no-base].html
│ ├── test_converter[prime].html
│ ├── test_converter[projlim].html
│ ├── test_converter[rVert-double].html
│ ├── test_converter[raise].html
│ ├── test_converter[root].html
│ ├── test_converter[rule].html
│ ├── test_converter[rvert].html
│ ├── test_converter[scr].html
│ ├── test_converter[shortmid].html
│ ├── test_converter[shoveleft].html
│ ├── test_converter[sideset].html
│ ├── test_converter[simple-array].html
│ ├── test_converter[simple-fraction].html
│ ├── test_converter[single-group].html
│ ├── test_converter[single-identifier].html
│ ├── test_converter[single-number].html
│ ├── test_converter[single-operator].html
│ ├── test_converter[skew-with-braces].html
│ ├── test_converter[skew].html
│ ├── test_converter[small-tiny].html
│ ├── test_converter[smallfrown].html
│ ├── test_converter[smallint].html
│ ├── test_converter[smallsmile].html
│ ├── test_converter[smash-bottom].html
│ ├── test_converter[smash-top].html
│ ├── test_converter[smash].html
│ ├── test_converter[space].html
│ ├── test_converter[spaces].html
│ ├── test_converter[split].html
│ ├── test_converter[sqrt-with-multiple-root-nodes].html
│ ├── test_converter[square-root].html
│ ├── test_converter[stackrel].html
│ ├── test_converter[style].html
│ ├── test_converter[styles].html
│ ├── test_converter[subscript-and-superscript].html
│ ├── test_converter[subscript-within-curly-braces].html
│ ├── test_converter[subscript].html
│ ├── test_converter[superscript-and-subscript].html
│ ├── test_converter[superscript-subscript-and-curly-braces].html
│ ├── test_converter[superscript-within-curly-braces].html
│ ├── test_converter[superscript].html
│ ├── test_converter[surd].html
│ ├── test_converter[tag-star].html
│ ├── test_converter[tag].html
│ ├── test_converter[tbinom].html
│ ├── test_converter[textbf].html
│ ├── test_converter[textcolor].html
│ ├── test_converter[textit].html
│ ├── test_converter[textrm].html
│ ├── test_converter[textsf].html
│ ├── test_converter[texttt].html
│ ├── test_converter[tfrac].html
│ ├── test_converter[thickapprox].html
│ ├── test_converter[thicksim].html
│ ├── test_converter[thickspace].html
│ ├── test_converter[tilde-1].html
│ ├── test_converter[tilde-and-space-in-text].html
│ ├── test_converter[tilde].html
│ ├── test_converter[tt].html
│ ├── test_converter[underbrace-a].html
│ ├── test_converter[underbrace-b].html
│ ├── test_converter[underbrace-c].html
│ ├── test_converter[underleftarrow].html
│ ├── test_converter[underleftrightarrow].html
│ ├── test_converter[underline].html
│ ├── test_converter[underparen].html
│ ├── test_converter[underrightarrow].html
│ ├── test_converter[unicode].html
│ ├── test_converter[upper-Vmatrix].html
│ ├── test_converter[varinjlim].html
│ ├── test_converter[varsubsetneqq].html
│ ├── test_converter[varsupsetneq].html
│ ├── test_converter[varsupsetneqq].html
│ ├── test_converter[vcenter].html
│ ├── test_converter[verb].html
│ ├── test_converter[vmatrix].html
│ ├── test_converter[vphantom].html
│ ├── test_converter[widecheck].html
│ ├── test_converter[widehat].html
│ ├── test_converter[widetilde].html
│ ├── test_converter[xLeftarrow-double].html
│ ├── test_converter[xhookleftarrow].html
│ ├── test_converter[xleftarrow-with-argument].html
│ ├── test_converter[xleftarrow].html
│ ├── test_converter[xleftrightarrow].html
│ ├── test_converter[xrightarrow-with-argument].html
│ ├── test_converter[xrightarrow].html
│ ├── test_converter_inline[def-with-args].html
│ ├── test_converter_inline[issue-498-prod].html
│ ├── test_converter_inline[issue-498-sum].html
│ ├── test_converter_inline[issue-75-2-rows].html
│ ├── test_converter_inline[mathchoice-inline].html
│ └── test_converter_inline[newcommand-escaped-hash].html
├── conftest.py
├── test_converter.py
├── test_symbol_parser.py
├── test_tokenizer.py
└── test_walker.py
SYMBOL INDEX (71 symbols across 12 files)
FILE: example.py
function convert_to_mathml (line 4) | def convert_to_mathml(latex_input):
FILE: latex2mathml/commands.py
function font_factory (line 386) | def font_factory(default: Optional[str], replacement: dict[str, Optional...
FILE: latex2mathml/converter.py
class Mode (line 83) | class Mode(enum.Enum):
class Converter (line 88) | class Converter:
method __init__ (line 89) | def __init__(self, xmlns: str = "http://www.w3.org/1998/Math/MathML", ...
method convert (line 95) | def convert(self, latex: str, parent: Optional[Element] = None) -> str:
method convert_to_element (line 98) | def convert_to_element(self, latex: str, parent: Optional[Element] = N...
method reset (line 106) | def reset(self) -> None:
method _convert (line 111) | def _convert(tree: Element) -> str:
method _convert_matrix (line 114) | def _convert_matrix(
method _convert_group (line 201) | def _convert_group(
method _convert_command (line 238) | def _convert_command(self, node: Node, parent: Element, font: Optional...
method _append_delimiter_element (line 400) | def _append_delimiter_element(self, node: Node, parent: Element, is_pr...
method _convert_symbol (line 430) | def _convert_symbol(self, node: Node, parent: Element, font: Optional[...
method _set_font (line 536) | def _set_font(element: Element, key: str, font: Optional[dict[str, Opt...
method _set_cell_alignment (line 544) | def _set_cell_alignment(cell: Element, hfil_indexes: list[bool]) -> None:
method _get_column_alignment (line 552) | def _get_column_alignment(
method _make_matrix_cell (line 564) | def _make_matrix_cell(row: Element, column_alignment: Optional[str]) -...
method _get_alignment_and_column_lines (line 570) | def _get_alignment_and_column_lines(
method _separate_by_mode (line 589) | def _separate_by_mode(text: str) -> Iterator[tuple[str, Mode]]:
method _convert_and_append_command (line 603) | def _convert_and_append_command(command: str, parent: Element, attribu...
function convert (line 609) | def convert(
function convert_to_element (line 618) | def convert_to_element(
function main (line 627) | def main() -> None: # pragma: no cover
FILE: latex2mathml/exceptions.py
class NumeratorNotFoundError (line 1) | class NumeratorNotFoundError(Exception):
class DenominatorNotFoundError (line 5) | class DenominatorNotFoundError(Exception):
class ExtraLeftOrMissingRightError (line 9) | class ExtraLeftOrMissingRightError(Exception):
class MissingSuperScriptOrSubscriptError (line 13) | class MissingSuperScriptOrSubscriptError(Exception):
class DoubleSubscriptsError (line 17) | class DoubleSubscriptsError(Exception):
class DoubleSuperscriptsError (line 21) | class DoubleSuperscriptsError(Exception):
class NoAvailableTokensError (line 25) | class NoAvailableTokensError(Exception):
class InvalidStyleForGenfracError (line 29) | class InvalidStyleForGenfracError(Exception):
class MissingEndError (line 33) | class MissingEndError(Exception):
class InvalidAlignmentError (line 37) | class InvalidAlignmentError(Exception):
class InvalidWidthError (line 41) | class InvalidWidthError(Exception):
class LimitsMustFollowMathOperatorError (line 45) | class LimitsMustFollowMathOperatorError(Exception):
FILE: latex2mathml/symbols_parser.py
function convert_symbol (line 7) | def convert_symbol(symbol: str) -> str | None:
function parse_symbols (line 11) | def parse_symbols() -> dict[str, str]:
FILE: latex2mathml/tokenizer.py
function tokenize (line 33) | def tokenize(latex_string: str, skip_comments: bool = True) -> Iterator[...
FILE: latex2mathml/walker.py
class Node (line 26) | class Node(NamedTuple):
function walk (line 36) | def walk(data: str, display: str = "inline", macros: Optional[dict[str, ...
function _walk (line 42) | def _walk(
function _make_subsup (line 501) | def _make_subsup(node: Node) -> tuple[str, tuple[Node, ...]]:
function _unwrap_token (line 522) | def _unwrap_token(node: Node) -> str:
function _get_style (line 529) | def _get_style(node: Node) -> str:
function _get_environment_node (line 542) | def _get_environment_node(
function _consume_brace_arg (line 604) | def _consume_brace_arg(tokens: Iterator[str]) -> list[str]:
function _parse_optional_int (line 611) | def _parse_optional_int(tokens: Iterator[str]) -> tuple[int, str]:
function _parse_newcommand (line 623) | def _parse_newcommand(tokens: Iterator[str], macros: dict[str, tuple[lis...
function _read_until_close_brace (line 639) | def _read_until_close_brace(tokens: Iterator[str]) -> list[str]:
function _parse_newenvironment (line 656) | def _parse_newenvironment(tokens: Iterator[str], macros: dict[str, tuple...
function _parse_def (line 669) | def _parse_def(tokens: Iterator[str], macros: dict[str, tuple[list[str],...
function _parse_declare_math_operator (line 683) | def _parse_declare_math_operator(tokens: Iterator[str], macros: dict[str...
function _substitute_params (line 691) | def _substitute_params(body: list[str], args: list[list[str]]) -> list[s...
function _expand_macro (line 710) | def _expand_macro(token: str, tokens: Iterator[str], macros: dict[str, t...
FILE: tests/conftest.py
class MathMLExtension (line 8) | class MathMLExtension(SingleFileSnapshotExtension):
method serialize (line 14) | def serialize(self, data: Any, **kwargs: Any) -> SerializedData:
function snapshot (line 19) | def snapshot(snapshot: Any) -> Any:
FILE: tests/test_converter.py
function test_converter (line 385) | def test_converter(snapshot: str, latex: str) -> None:
function test_converter_inline (line 400) | def test_converter_inline(snapshot: str, latex: str) -> None:
function test_converter_raises (line 418) | def test_converter_raises(latex: str, exception: type[BaseException]) ->...
function test_macro (line 488) | def test_macro(latex: str, expected: str, display: str) -> None:
function test_align_vs_align_star (line 492) | def test_align_vs_align_star() -> None:
function test_equation_counter_persists (line 499) | def test_equation_counter_persists() -> None:
function test_reusable_macro (line 507) | def test_reusable_macro() -> None:
function test_convert_to_element (line 513) | def test_convert_to_element(snapshot: str) -> None:
function test_convert_to_element_with_parent (line 520) | def test_convert_to_element_with_parent(snapshot: str) -> None:
FILE: tests/test_symbol_parser.py
function test_convert_symbol (line 10) | def test_convert_symbol(latex: str, expected: str) -> None:
FILE: tests/test_tokenizer.py
function test_tokenize (line 525) | def test_tokenize(latex: str, expected: list) -> None:
FILE: tests/test_walker.py
function test_walk (line 1728) | def test_walk(latex: str, expected: list) -> None:
function test_error (line 1754) | def test_error(latex: str, exception: Union[tuple[Any, ...], Any]) -> None:
Condensed preview — 357 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (580K chars).
[
{
"path": ".all-contributorsrc",
"chars": 7415,
"preview": "{\n \"files\": [\n \"README.md\"\n ],\n \"imageSize\": 100,\n \"commit\": false,\n \"contributors\": [\n {\n \"login\": \"ron"
},
{
"path": ".coderabbit.yaml",
"chars": 56,
"preview": "reviews:\n path_filters:\n - \"!tests/__snapshots__/**\""
},
{
"path": ".github/dependabot.yml",
"chars": 695,
"preview": "# To get started with Dependabot version updates, you'll need to specify which\n# package ecosystems to update and where "
},
{
"path": ".github/workflows/pypi.yml",
"chars": 548,
"preview": "# This workflow will publish to PyPI\n# For more information see: https://help.github.com/actions/language-and-framework-"
},
{
"path": ".github/workflows/python.yml",
"chars": 1395,
"preview": "# This workflow will install Python dependencies, run tests and lint with a variety of Python versions\n# For more inform"
},
{
"path": ".github/workflows/testpypi.yml",
"chars": 594,
"preview": "# This workflow will publish to TestPyPI\n# For more information see: https://help.github.com/actions/language-and-framew"
},
{
"path": ".gitignore",
"chars": 3179,
"preview": "### Python template\n# Byte-compiled / optimized / DLL files\n__pycache__/\n*.py[cod]\n*$py.class\n\n# C extensions\n*.so\n\n# Di"
},
{
"path": ".pre-commit-config.yaml",
"chars": 360,
"preview": "repos:\n - repo: https://github.com/astral-sh/ruff-pre-commit\n rev: v0.15.10\n hooks:\n - id: ruff\n args"
},
{
"path": "LICENSE",
"chars": 1071,
"preview": "MIT License\n\nCopyright (c) 2016 Ronie Martinez\n\nPermission is hereby granted, free of charge, to any person obtaining a "
},
{
"path": "Makefile",
"chars": 373,
"preview": ".PHONY: install\ninstall:\n\tuv sync\n\n.PHONY: format\nformat:\n\tuv run ruff check --fix .\n\tuv run ruff format .\n\n.PHONY: lint"
},
{
"path": "README.md",
"chars": 14451,
"preview": "<table>\n <tr>\n <td>License</td>\n <td><img src='https://img.shields.io/pypi/l/latex2mathml.svg?style=for"
},
{
"path": "example.py",
"chars": 239,
"preview": "from latex2mathml.converter import convert\n\n\ndef convert_to_mathml(latex_input):\n mathml_output = convert(latex_input"
},
{
"path": "latex2mathml/__init__.py",
"chars": 79,
"preview": "from importlib import metadata\n\n__version__ = metadata.version(\"latex2mathml\")\n"
},
{
"path": "latex2mathml/commands.py",
"chars": 19804,
"preview": "from collections import defaultdict\nfrom typing import Optional\n\nOPENING_BRACE = \"{\"\nCLOSING_BRACE = \"}\"\nBRACES = \"{}\"\n\n"
},
{
"path": "latex2mathml/converter.py",
"chars": 28283,
"preview": "import copy\nimport enum\nimport re\nfrom typing import Iterable, Iterator, Optional\nfrom xml.etree.ElementTree import Elem"
},
{
"path": "latex2mathml/exceptions.py",
"chars": 645,
"preview": "class NumeratorNotFoundError(Exception):\n pass\n\n\nclass DenominatorNotFoundError(Exception):\n pass\n\n\nclass ExtraLef"
},
{
"path": "latex2mathml/py.typed",
"chars": 10,
"preview": "# PEP 581\n"
},
{
"path": "latex2mathml/symbols_parser.py",
"chars": 2768,
"preview": "import os\nimport re\n\nSYMBOLS_FILE: str = os.path.join(os.path.dirname(os.path.realpath(__file__)), \"unimathsymbols.txt\")"
},
{
"path": "latex2mathml/tokenizer.py",
"chars": 2458,
"preview": "import re\nfrom typing import Iterator\n\nfrom latex2mathml import commands\nfrom latex2mathml.symbols_parser import convert"
},
{
"path": "latex2mathml/unimathsymbols.txt",
"chars": 210098,
"preview": "# Unicode characters and corresponding LaTeX math mode commands\n# ******************************************************"
},
{
"path": "latex2mathml/walker.py",
"chars": 30999,
"preview": "from itertools import chain\nfrom typing import Any, Iterator, NamedTuple, Optional\n\nfrom latex2mathml import commands\nfr"
},
{
"path": "pyproject.toml",
"chars": 1938,
"preview": "[project]\nname = \"latex2mathml\"\nversion = \"3.81.0\"\ndescription = \"Pure Python library for LaTeX to MathML conversion\"\nau"
},
{
"path": "tests/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "tests/__snapshots__/test_converter/test_convert_to_element.html",
"chars": 96,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"inline\"><mrow><mn>1</mn></mrow></math>"
},
{
"path": "tests/__snapshots__/test_converter/test_convert_to_element_with_parent.html",
"chars": 107,
"preview": "<div><math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"inline\"><mrow><mn>1</mn></mrow></math></div>"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[307-a].html",
"chars": 392,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mrow><msubsup><mpadded width=\"0\"><mphantom><mrow"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[307-b].html",
"chars": 347,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mrow><msup><mpadded width=\"0\"><mphantom><mrow mo"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[And].html",
"chars": 103,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mi>&</mi></mrow></math>"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[Bbb-group].html",
"chars": 184,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mrow><mi mathvariant=\"double-struck\">A</mi><mi m"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[Bmatrix].html",
"chars": 131,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mo>{</mo><mtable /><mo>}</mo></m"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[LaTeX-with-style].html",
"chars": 601,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mrow><mi mathvariant=\"double-struck\">L</mi><mspa"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[LaTeX].html",
"chars": 461,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mrow><mi>L</mi><mspace width=\"-.325em\" /><mpadde"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[Pr].html",
"chars": 117,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mo movablelimits=\"true\">Pr</mo></mrow></math>"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[S].html",
"chars": 103,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mo>§</mo></mrow></math>"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[TeX-with-style].html",
"chars": 319,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mrow><mi mathvariant=\"normal\">T</mi><mspace widt"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[TeX].html",
"chars": 256,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mrow><mi>T</mi><mspace width=\"-.14em\" /><mpadded"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[above].html",
"chars": 241,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mrow><mfrac linethickness=\"1pt\"><mi>a</mi><mi>b<"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[abovewithdelims].html",
"chars": 333,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mrow><mo minsize=\"2.047em\" maxsize=\"2.047em\">[</"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[acute].html",
"chars": 194,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mover><mi>a</mi><mo>´</mo></mover><mover"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[align-nonumber].html",
"chars": 424,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mtable displaystyle=\"true\" rowspacing=\"3pt\" colu"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[align-notag].html",
"chars": 424,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mtable displaystyle=\"true\" rowspacing=\"3pt\" colu"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[align0].html",
"chars": 505,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mtable displaystyle=\"true\" rowspacing=\"3pt\" colu"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[align1].html",
"chars": 453,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mtable displaystyle=\"true\" rowspacing=\"3pt\" colu"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[arctg].html",
"chars": 109,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mi>arctg</mi><mi>x</mi></mrow></math>"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[argmax].html",
"chars": 166,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><msub><mo movablelimits=\"true\">arg max</m"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[array-with-horizontal-lines].html",
"chars": 507,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mtable rowlines=\"none solid dashed\"><mtr><mtd co"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[array-with-vertical-bar].html",
"chars": 395,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mtable columnlines=\"solid none\"><mtr><mtd column"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[atop-and-atopwithdelims].html",
"chars": 294,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mfrac linethickness=\"0\"><mi>a</mi><mrow><mo mins"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[backslash-e].html",
"chars": 96,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mi>\\e</mi></mrow></math>"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[big].html",
"chars": 292,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mo minsize=\"2.470em\" maxsize=\"2.470em\">[</mo><mo"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[bigcirc].html",
"chars": 103,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mi>◯</mi></mrow></math>"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[bigl-smallmatrix-bigr].html",
"chars": 469,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mo stretchy=\"true\" fence=\"true\" minsize=\"1.2em\" "
},
{
"path": "tests/__snapshots__/test_converter/test_converter[binomial-coefficients].html",
"chars": 299,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mstyle displaystyle=\"true\" scriptlevel=\"0\"><mo m"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[binomial].html",
"chars": 272,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mo minsize=\"2.047em\" maxsize=\"2.047em\">("
},
{
"path": "tests/__snapshots__/test_converter/test_converter[blackboard-bold].html",
"chars": 382,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mrow><mtext mathvariant=\"double-struck\">var</mte"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[bm].html",
"chars": 134,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mrow><mi mathvariant=\"bold-italic\">x</mi></mrow>"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[bmod].html",
"chars": 117,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mn>9</mn><mo>mod</mo><mn>2</mn></mrow></math>"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[bold].html",
"chars": 127,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mrow><mi mathvariant=\"bold\">x</mi></mrow></mrow>"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[boldsymbol].html",
"chars": 363,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mrow><mtext>var</mtext><mo mathvariant=\"bold\">&#"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[boxed-box].html",
"chars": 139,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><menclose notation=\"box\"><mi>◻</mi></menc"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[bra].html",
"chars": 180,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mrow><mo stretchy=\"false\">⟨</mo><mrow><mi"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[brace-1].html",
"chars": 415,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mrow><mo minsize=\"2.047em\" maxsize=\"2.047em\">[</"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[brace].html",
"chars": 415,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mrow><mo minsize=\"2.047em\" maxsize=\"2.047em\">{</"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[braket].html",
"chars": 250,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mrow><mo stretchy=\"false\">⟨</mo><mrow><mi"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[breve].html",
"chars": 194,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mover><mi>a</mi><mo>˘</mo></mover><mover"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[calligraphic-mode].html",
"chars": 388,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mrow><mrow><mtext mathvariant=\"script\">var</mtex"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[cancel].html",
"chars": 157,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><menclose notation=\"updiagonalstrike\"><mrow><mi>x"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[centerdot].html",
"chars": 123,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mi>a</mi><mo>⬝</mo><mi>b</mi></mrow></ma"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[cfrac].html",
"chars": 441,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mfrac><mstyle displaystyle=\"false\" scriptlevel=\""
},
{
"path": "tests/__snapshots__/test_converter/test_converter[check].html",
"chars": 194,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mover><mi>a</mi><mo>ˇ</mo></mover><mover"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[choose].html",
"chars": 246,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mo minsize=\"2.047em\" maxsize=\"2.047em\">("
},
{
"path": "tests/__snapshots__/test_converter/test_converter[circledS].html",
"chars": 103,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mi>Ⓢ</mi></mrow></math>"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[class].html",
"chars": 153,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mrow class=\"my-class\"><mi>x</mi><mo>+</m"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[color].html",
"chars": 171,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mrow><mi>a</mi><mstyle mathcolor=\"red\"><mi>b</mi"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[colorbox].html",
"chars": 146,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mpadded mathbackground=\"yellow\"><mtext>x+y</mtex"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[command-inside-matrix].html",
"chars": 157,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mtable><mtr><mtd><msup><mn>1</mn><mn>2</mn></msu"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[comments].html",
"chars": 133,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mn>100</mn><mi>%</mi><mo>!</mo><"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[complex-matrix].html",
"chars": 352,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mtable><mtr><mtd><msub><mi>a</mi><mrow><mn>1</mn"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[ddot-dddot-ddddot].html",
"chars": 214,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mover><mi>a</mi><mo>¨</mo></mover><mover"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[decimal-numbers].html",
"chars": 99,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mn>12.34</mn></mrow></math>"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[degree-polynomial].html",
"chars": 257,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mi>deg</mi><mo stretchy=\"false\">(</mo><m"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[degree].html",
"chars": 114,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mn>90</mn><mi>°</mi></mrow></math>"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[determinant].html",
"chars": 198,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mo movablelimits=\"true\">det</mo><mo stretchy=\"fa"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[dfrac].html",
"chars": 173,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mstyle displaystyle=\"true\" scriptlevel=\"0\"><mfra"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[diagdown-diagup].html",
"chars": 121,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mi>╲</mi><mi>╱</mi></mrow></math"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[dimension-vector-space].html",
"chars": 177,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mi>dim</mi><mo stretchy=\"false\">(</mo><m"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[displaylines].html",
"chars": 617,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mtable rowspacing=\"0.5em\" columnspacing=\"1em\" di"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[displaystyle].html",
"chars": 345,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mfrac><mi>a</mi><mi>b</mi></mfrac><mo>+<"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[dots].html",
"chars": 205,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><msub><mi>x</mi><mn>1</mn></msub><mo>,</m"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[dotsb].html",
"chars": 205,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><msub><mi>x</mi><mn>1</mn></msub><mo>+</m"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[dotsc].html",
"chars": 205,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><msub><mi>x</mi><mn>1</mn></msub><mo>,</m"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[dotsi].html",
"chars": 169,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><msub><mi>A</mi><mn>1</mn></msub><mo>⋯</m"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[dotsm].html",
"chars": 169,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><msub><mi>x</mi><mn>1</mn></msub><mo>⋯</m"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[dotso].html",
"chars": 169,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><msub><mi>A</mi><mn>1</mn></msub><mo>…</m"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[double-pipe].html",
"chars": 193,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mo fence=\"false\" stretchy=\"false\">‖</mo>"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[emph].html",
"chars": 144,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mtext mathvariant=\"italic\"> Hello
"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[empty-color-works].html",
"chars": 135,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mstyle mathcolor=\"\"><mi>a</mi><mi>b</mi></mstyle"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[empty-subscript].html",
"chars": 116,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><msub><mn>1</mn><mrow /></msub></mrow></math>"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[emptyset].html",
"chars": 103,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mo>∅</mo></mrow></math>"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[eqalign].html",
"chars": 284,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mtable displaystyle=\"true\" columnspacing=\"0em\"><"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[escaped-characters].html",
"chars": 245,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mi>#</mi><mi>$</mi><mi>%"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[exponent-without-base-works].html",
"chars": 114,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><msup><mi /><mn>3</mn></msup></mrow></math>"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[exponential-function].html",
"chars": 107,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mi>exp</mi><mi>x</mi></mrow></math>"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[fbox].html",
"chars": 160,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><menclose notation=\"box\"><mtext> Hello!&#"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[fcolorbox].html",
"chars": 165,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mpadded mathbackground=\"yellow\" border-color=\"re"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[footnotesize].html",
"chars": 130,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mstyle mathsize=\"0.85em\"><mi>x</mi></mstyle></mr"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[fraktur].html",
"chars": 393,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mrow><mrow><mtext mathvariant=\"fraktur\">var</mte"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[genfrac-displaystyle].html",
"chars": 367,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mstyle displaystyle=\"true\" scriptlevel=\"0\"><mo m"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[genfrac-scriptscriptstyle].html",
"chars": 360,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mstyle displaystyle=\"false\" scriptlevel=\"2\"><mo "
},
{
"path": "tests/__snapshots__/test_converter/test_converter[genfrac-scriptstyle].html",
"chars": 326,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mstyle displaystyle=\"false\" scriptlevel=\"1\"><mo "
},
{
"path": "tests/__snapshots__/test_converter/test_converter[genfrac-textstyle].html",
"chars": 376,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mstyle displaystyle=\"false\" scriptlevel=\"0\"><mo "
},
{
"path": "tests/__snapshots__/test_converter/test_converter[gggtr].html",
"chars": 103,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mo>⋙</mo></mrow></math>"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[global-fonts].html",
"chars": 316,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mi>x</mi><mrow><mtext>var</mtext><mo>=</"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[grave].html",
"chars": 194,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mover><mi>a</mi><mo>`</mo></mover><mover"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[greatest-common-divisor].html",
"chars": 355,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><munderover><mo movablelimits=\"true\">gcd</mo><mro"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[gt].html",
"chars": 103,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mo>></mo></mrow></math>"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[gvertneqq].html",
"chars": 103,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mo>≩</mo></mrow></math>"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[hat].html",
"chars": 222,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mover accent=\"true\"><mi>a</mi><mo>^</mo>"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[hbox-with-backslash-in-text].html",
"chars": 200,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mstyle displaystyle=\"false\" scriptlevel=\"0\"><mte"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[hbox-with-math-mode].html",
"chars": 296,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mstyle displaystyle=\"false\" scriptlevel=\"0\"><mte"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[hbox].html",
"chars": 197,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mstyle displaystyle=\"false\" scriptlevel=\"0\"><mte"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[hfil].html",
"chars": 469,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mtable><mtr><mtd><mi>x</mi><mi>x</mi><mi>x</mi><"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[hom].html",
"chars": 97,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mi>hom</mi></mrow></math>"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[hphantom].html",
"chars": 481,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mtable><mtr><mtd columnalign=\"left\"><mtext>Side&"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[href].html",
"chars": 191,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mrow href=\"https://github.com/roniemartinez/late"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[huge].html",
"chars": 330,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mo stretchy=\"false\">[</mo><mrow><mo stretchy=\"fa"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[idotsint].html",
"chars": 152,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mrow><mo>∫</mo><mo>⋯</mo><mo>&#x"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[inf].html",
"chars": 251,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><msub><mo>inf</mo><mrow><mi>x</mi><mo>></"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[injlim].html",
"chars": 130,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mo movablelimits=\"true\">inj lim</mo></mr"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[inner-group].html",
"chars": 149,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mrow><mi>a</mi><mo>+</mo><mrow><mi>b</mi"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[intop].html",
"chars": 124,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mo movablelimits=\"true\">∫</mo></mrow></m"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[issue-103].html",
"chars": 167,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mover><mrow><mi>A</mi><mi>B</mi></mrow><mo stret"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[issue-106].html",
"chars": 378,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mrow><mo stretchy=\"true\" fence=\"true\" form=\"pref"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[issue-108-1].html",
"chars": 107,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mo>max</mo><mi>f</mi></mrow></math>"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[issue-108-2].html",
"chars": 233,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mo>max</mo><mo stretchy=\"false\">{</mo><m"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[issue-108-3].html",
"chars": 218,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mo>min</mo><mrow><mo stretchy=\"false\">(<"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[issue-109-1].html",
"chars": 106,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mo>sn</mo><mi>x</mi></mrow></math>"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[issue-109-2].html",
"chars": 204,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mo>sn</mo><mo stretchy=\"false\">(</mo><mi"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[issue-112-1].html",
"chars": 128,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mover><mi>A</mi><mo>˙</mo></mover></mrow"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[issue-112-2].html",
"chars": 141,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mover><mrow><mi>A</mi></mrow><mo>˙</mo><"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[issue-118].html",
"chars": 218,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mtext>Let</mtext><mtext> </mtext><mi>x</"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[issue-125-1-overset].html",
"chars": 452,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mi>F</mi><mo stretchy=\"false\">(</mo><mi>"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[issue-125-2-overset].html",
"chars": 234,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mi>a</mi><mspace width=\"0.167em\" /><mover><mrow>"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[issue-125-3-underset].html",
"chars": 122,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><munder><mi>b</mi><mi>a</mi></munder></mrow></mat"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[issue-125-4-limits].html",
"chars": 162,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><munderover><mo><mrow><mi>x</mi></mrow></mo><mn>0"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[issue-125-4-mathop].html",
"chars": 179,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mi>a</mi><mo><mrow><mi>t</mi></mrow></mo><mi>b</"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[issue-301-a].html",
"chars": 182,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><munderover><mo>∫</mo><mrow><mn>0</mn></m"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[issue-301-b].html",
"chars": 151,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><munder><mo>∫</mo><mrow><mi>π</mi"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[issue-301-c].html",
"chars": 149,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mover><mo>∫</mo><mrow><mi>π</mi>"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[issue-33].html",
"chars": 1150,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mo>[</mo><mtable><mtr><mtd><msub><mi>a</"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[issue-42].html",
"chars": 295,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><msqrt><mrow><mo stretchy=\"false\">(</mo><"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[issue-44].html",
"chars": 349,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><msup><mrow><mo stretchy=\"true\" fence=\"true\" form"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[issue-45-gt].html",
"chars": 123,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mn>2</mn><mo>></mo><mn>5</mn></mrow></ma"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[issue-45-lt].html",
"chars": 123,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mn>2</mn><mo><</mo><mn>5</mn></mrow></ma"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[issue-462-octuple-prime].html",
"chars": 269,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><msup><mi>f</mi><mi>′′′&#"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[issue-462-quadruple-prime].html",
"chars": 206,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><msup><mi>f</mi><mi>⁗</mi></msup><mo stre"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[issue-462-quintuple-prime].html",
"chars": 242,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><msup><mi>f</mi><mi>′′′&#"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[issue-462-triple-prime].html",
"chars": 206,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><msup><mi>f</mi><mi>‴</mi></msup><mo stre"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[issue-498-prod].html",
"chars": 182,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><munderover><mo>∏</mo><mrow><mn>0</mn></m"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[issue-498-sum].html",
"chars": 182,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><munderover><mo>∑</mo><mrow><mn>0</mn></m"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[issue-51].html",
"chars": 103,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mi>ℝ</mi></mrow></math>"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[issue-52].html",
"chars": 231,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mover><mrow><msub><mi>z</mi><mn>1</mn></msub></m"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[issue-60-1].html",
"chars": 152,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mrow><mo>.</mo><mo>.</mo><mo>&#x"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[issue-60-2].html",
"chars": 237,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mrow><mo>.</mo><mo>.</mo><mo>&#x"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[issue-61].html",
"chars": 513,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mfrac><mrow><mi>x</mi><mo>+</mo><mn>4</m"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[issue-63].html",
"chars": 351,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><msqrt><mrow><msqrt><mrow><mrow><mo stretchy=\"tru"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[issue-75-1-row].html",
"chars": 385,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mstyle scriptlevel=\"1\"><mtable><mtr><mtd><mi>&#x"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[issue-75-2-rows].html",
"chars": 331,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><munder><mo>∑</mo><mrow><mstyle scriptlev"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[issue-76].html",
"chars": 182,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><munderover><mo>∫</mo><mrow><mn>0</mn></m"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[issue-77].html",
"chars": 602,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mrow><mo stretchy=\"true\" fence=\"true\" form=\"pref"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[issue-91].html",
"chars": 600,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mi>tan</mi><mi>x</mi><mo>+</mo><mi>sec</"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[issue-98].html",
"chars": 133,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><msub><mi>p</mi><mrow><mo>max</mo></mrow></msub><"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[ker].html",
"chars": 97,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mi>ker</mi></mrow></math>"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[ket].html",
"chars": 180,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mrow><mo>∣</mo><mrow><mi>ψ</mi></"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[lVert-double].html",
"chars": 103,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mo>‖</mo></mrow></math>"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[large].html",
"chars": 391,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mo stretchy=\"false\">[</mo><mrow><mo stretchy=\"fa"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[ldotp].html",
"chars": 103,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mo>.</mo></mrow></math>"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[left-and-right].html",
"chars": 231,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mrow><mo stretchy=\"true\" fence=\"true\" form=\"pref"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[leftroot-uproot].html",
"chars": 133,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mroot><mrow><mi>x</mi></mrow><mn>3</mn></mroot><"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[lg].html",
"chars": 96,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mi>lg</mi></mrow></math>"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[liminf].html",
"chars": 130,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mo movablelimits=\"true\">lim inf</mo></mr"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[limit-at-plus-infinity].html",
"chars": 277,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><msub><mo>lim</mo><mrow><mi>x</mi><mo>→</"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[limsup].html",
"chars": 130,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mo movablelimits=\"true\">lim sup</mo></mr"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[llap].html",
"chars": 149,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mpadded lspace=\"-1width\" width=\"0px\"><mtext>x</m"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[llless].html",
"chars": 103,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mo>⋘</mo></mrow></math>"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[logarithm-with-base].html",
"chars": 143,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><msub><mi>log</mi><mn>2</mn></msub><mrow><mi>x</m"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[logarithm].html",
"chars": 120,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mi>log</mi><mrow><mi>x</mi></mrow></mrow></math>"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[lower].html",
"chars": 169,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mpadded voffset=\"-3pt\" height=\"-3pt\" depth=\"+3pt"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[lt].html",
"chars": 103,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mo><</mo></mrow></math>"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[lvert].html",
"chars": 103,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mo>|</mo></mrow></math>"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[lvertneqq].html",
"chars": 103,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mo>≨</mo></mrow></math>"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[math-commands-that-currently-does-nothing].html",
"chars": 323,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mo><mrow><mi>a</mi></mrow></mo><mi><mrow><mi>b</"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[mathbb].html",
"chars": 184,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mrow><mi mathvariant=\"double-struck\">A</mi><mi m"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[mathbf].html",
"chars": 337,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mrow><mtext mathvariant=\"bold\">var</mtext><mo ma"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[mathbin].html",
"chars": 157,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mo lspace=\"0.22em\" rspace=\"0.22em\"><mrow><mo>&#x"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[mathcal].html",
"chars": 388,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mrow><mrow><mtext mathvariant=\"script\">var</mtex"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[mathchoice-block].html",
"chars": 95,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mi>D</mi></mrow></math>"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[mathfrak].html",
"chars": 393,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mrow><mrow><mtext mathvariant=\"fraktur\">var</mte"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[mathit].html",
"chars": 388,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mrow><mrow><mtext mathvariant=\"italic\">var</mtex"
},
{
"path": "tests/__snapshots__/test_converter/test_converter[mathllap].html",
"chars": 156,
"preview": "<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mpadded lspace=\"-1width\" width=\"0px\"><mrow><mi>x"
}
]
// ... and 157 more files (download for full content)
About this extraction
This page contains the full source code of the roniemartinez/latex2mathml GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 357 files (500.4 KB), approximately 187.4k tokens, and a symbol index with 71 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.