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 ================================================
License License Version Version
Github Actions Github Actions Coverage CodeCov
Supported versions Python Versions Wheel Wheel
Status Status Downloads Downloads
All Contributors All Contributors
# latex2mathml Pure Python library for LaTeX to MathML conversion ## Installation ```bash pip install latex2mathml ``` ## Usage ### Python ```python import latex2mathml.converter latex_input = "" 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)):
Ronie Martinez
Ronie Martinez

🚧 💻 🚇
askender
askender

📖
06180339
06180339

💻
chaihahaha
chaihahaha

💻
HQY
HQY

🐛
鸭梨
鸭梨

🐛
oliverstefanov
oliverstefanov

🐛
Deleted user
Deleted user

🐛
Cesaryuan
Cesaryuan

🐛
TonyStank
TonyStank

🐛
Dirk Winkel
Dirk Winkel

🐛
sinslu
sinslu

🐛
Nikola Ubavić
Nikola Ubavić

🐛
abhisheksia
abhisheksia

🐛
Denis Salem
Denis Salem

🐛 💻
Steven Clontz
Steven Clontz

🐛
空白
空白

🐛
MURAMATSU Atshshi
MURAMATSU Atshshi

🐛
leingang
leingang

🐛
Nigel Amers
Nigel Amers

🐛
retsyo
retsyo

🐛
Mia Kramer
Mia Kramer

💻 📖
Nguyễn Gia Phong
Nguyễn Gia Phong

🐛 💻 ⚠️
Collin Delker
Collin Delker

🐛
jiotv321
jiotv321

🐛
Felix Yan
Felix Yan

💻
Rob Blackbourn
Rob Blackbourn

💻
Danny Elfanbaum
Danny Elfanbaum

💻 ⚠️ 🐛
ccn
ccn

🐛
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%[^\n]+) | (?P[a-zA-Z]) | (?P[_^])(?P\d) | (?P-?\d+(?:\.\d+)?\s*(?:{"|".join(UNITS)})) | (?P\d+(?:\.\d+)?) | (?P\.\d*) | (?P\\[\\\[\]{{}}\s!,:>;|_%#$&]) | (?P\\(?:begin|end)\s*{{[a-zA-Z]+\*?}}) | (?P\\operatorname(?:withlimits|\*)?\s*{{[a-zA-Z\s*]+\*?\s*}}) | (?P\\(?: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[^}}]*)}} | (?P\\[cdt]?frac)\s*(?P[.\d])\s*(?P[.\d])? | (?P\\math(?!ring|bin|close|inner|op|open|ord|punct|rel|strut) [a-z]+)(?P{{)(?P[a-zA-Z])(?P}}) | (?P\\verb(?P.)(?P.*?)(?P=verb_delim)) | (?P\\[a-zA-Z]+) | (?P\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 TO 02AB3^⪳^\preceqq^\preceqq^R^mathrel^txfonts^PRECEDES ABOVE EQUALS SIGN 02AB4^⪴^\succeqq^\succeqq^R^mathrel^txfonts^SUCCEEDS ABOVE EQUALS SIGN 02AB5^⪵^^\precneqq^R^mathrel^amssymb^PRECEDES ABOVE NOT EQUAL TO 02AB6^⪶^^\succneqq^R^mathrel^amssymb^SUCCEEDS ABOVE NOT EQUAL TO 02AB7^⪷^\precapprox^\precapprox^R^mathrel^amssymb^PRECEDES ABOVE ALMOST EQUAL TO 02AB8^⪸^\succapprox^\succapprox^R^mathrel^amssymb^SUCCEEDS ABOVE ALMOST EQUAL TO 02AB9^⪹^\precnapprox^\precnapprox^R^mathrel^amssymb^PRECEDES ABOVE NOT ALMOST EQUAL TO 02ABA^⪺^\succnapprox^\succnapprox^R^mathrel^amssymb^SUCCEEDS ABOVE NOT ALMOST EQUAL TO 02ABB^⪻^\llcurly^\Prec^R^mathrel^mathabx^DOUBLE PRECEDES 02ABC^⪼^\ggcurly^\Succ^R^mathrel^mathabx^DOUBLE SUCCEEDS 02ABD^⪽^^\subsetdot^R^mathrel^^SUBSET WITH DOT 02ABE^⪾^^\supsetdot^R^mathrel^^SUPERSET WITH DOT 02ABF^⪿^^\subsetplus^R^mathrel^^SUBSET WITH PLUS SIGN BELOW 02AC0^⫀^^\supsetplus^R^mathrel^^SUPERSET WITH PLUS SIGN BELOW 02AC1^⫁^^\submult^R^mathrel^^SUBSET WITH MULTIPLICATION SIGN BELOW 02AC2^⫂^^\supmult^R^mathrel^^SUPERSET WITH MULTIPLICATION SIGN BELOW 02AC3^⫃^^\subedot^R^mathrel^^SUBSET OF OR EQUAL TO WITH DOT ABOVE 02AC4^⫄^^\supedot^R^mathrel^^SUPERSET OF OR EQUAL TO WITH DOT ABOVE 02AC5^⫅^\subseteqq^\subseteqq^R^mathrel^amssymb^SUBSET OF ABOVE EQUALS SIGN 02AC6^⫆^\supseteqq^\supseteqq^R^mathrel^amssymb^SUPERSET OF ABOVE EQUALS SIGN 02AC7^⫇^^\subsim^R^mathrel^^SUBSET OF ABOVE TILDE OPERATOR 02AC8^⫈^^\supsim^R^mathrel^^SUPERSET OF ABOVE TILDE OPERATOR 02AC9^⫉^^\subsetapprox^R^mathrel^^SUBSET OF ABOVE ALMOST EQUAL TO 02ACA^⫊^^\supsetapprox^R^mathrel^^SUPERSET OF ABOVE ALMOST EQUAL TO 02ACB^⫋^\subsetneqq^\subsetneqq^R^mathrel^amssymb^SUBSET OF ABOVE NOT EQUAL TO 02ACC^⫌^\supsetneqq^\supsetneqq^R^mathrel^amssymb^SUPERSET OF ABOVE NOT EQUAL TO 02ACD^⫍^^\lsqhook^R^mathrel^^SQUARE LEFT OPEN BOX OPERATOR 02ACE^⫎^^\rsqhook^R^mathrel^^SQUARE RIGHT OPEN BOX OPERATOR 02ACF^⫏^^\csub^R^mathrel^^CLOSED SUBSET 02AD0^⫐^^\csup^R^mathrel^^CLOSED SUPERSET 02AD1^⫑^^\csube^R^mathrel^^CLOSED SUBSET OR EQUAL TO 02AD2^⫒^^\csupe^R^mathrel^^CLOSED SUPERSET OR EQUAL TO 02AD3^⫓^^\subsup^R^mathrel^^SUBSET ABOVE SUPERSET 02AD4^⫔^^\supsub^R^mathrel^^SUPERSET ABOVE SUBSET 02AD5^⫕^^\subsub^R^mathrel^^SUBSET ABOVE SUBSET 02AD6^⫖^^\supsup^R^mathrel^^SUPERSET ABOVE SUPERSET 02AD7^⫗^^\suphsub^R^mathrel^^SUPERSET BESIDE SUBSET 02AD8^⫘^^\supdsub^R^mathrel^^SUPERSET BESIDE AND JOINED BY DASH WITH SUBSET 02AD9^⫙^^\forkv^R^mathrel^^ELEMENT OF OPENING DOWNWARDS 02ADA^⫚^^\topfork^R^mathrel^^PITCHFORK WITH TEE TOP 02ADB^⫛^^\mlcp^R^mathrel^^TRANSVERSAL INTERSECTION 02ADC^⫝̸^^\forks^R^mathrel^^FORKING 02ADD^⫝^^\forksnot^R^mathrel^^NONFORKING 02ADE^⫞^^\shortlefttack^R^mathrel^^SHORT LEFT TACK 02ADF^⫟^^\shortdowntack^R^mathrel^^SHORT DOWN TACK 02AE0^⫠^^\shortuptack^R^mathrel^^SHORT UP TACK 02AE1^⫡^^\perps^N^mathord^^PERPENDICULAR WITH S 02AE2^⫢^^\vDdash^R^mathrel^^VERTICAL BAR TRIPLE RIGHT TURNSTILE 02AE3^⫣^^\dashV^R^mathrel^^DOUBLE VERTICAL BAR LEFT TURNSTILE 02AE4^⫤^^\Dashv^R^mathrel^^VERTICAL BAR DOUBLE LEFT TURNSTILE 02AE5^⫥^^\DashV^R^mathrel^^DOUBLE VERTICAL BAR DOUBLE LEFT TURNSTILE 02AE6^⫦^^\varVdash^R^mathrel^^LONG DASH FROM LEFT MEMBER OF DOUBLE VERTICAL 02AE7^⫧^^\Barv^R^mathrel^^SHORT DOWN TACK WITH OVERBAR 02AE8^⫨^^\vBar^R^mathrel^^SHORT UP TACK WITH UNDERBAR 02AE9^⫩^^\vBarv^R^mathrel^^SHORT UP TACK ABOVE SHORT DOWN TACK 02AEA^⫪^\Top^\barV^R^mathrel^txfonts^DOUBLE DOWN TACK 02AEB^⫫^\Bot^\Vbar^R^mathrel^txfonts^= \Perp (txfonts), DOUBLE UP TACK 02AEC^⫬^^\Not^R^mathrel^^DOUBLE STROKE NOT SIGN 02AED^⫭^^\bNot^R^mathrel^^REVERSED DOUBLE STROKE NOT SIGN 02AEE^⫮^^\revnmid^R^mathrel^^DOES NOT DIVIDE WITH REVERSED NEGATION SLASH 02AEF^⫯^^\cirmid^R^mathrel^^VERTICAL LINE WITH CIRCLE ABOVE 02AF0^⫰^^\midcir^R^mathrel^^VERTICAL LINE WITH CIRCLE BELOW 02AF1^⫱^^\topcir^N^mathord^^DOWN TACK WITH CIRCLE BELOW 02AF2^⫲^^\nhpar^R^mathrel^^PARALLEL WITH HORIZONTAL STROKE 02AF3^⫳^^\parsim^R^mathrel^^PARALLEL WITH TILDE OPERATOR 02AF4^⫴^\interleave^\interleave^B^mathbin^stmaryrd^TRIPLE VERTICAL BAR BINARY RELATION 02AF5^⫵^^\nhVvert^B^mathbin^^TRIPLE VERTICAL BAR WITH HORIZONTAL STROKE 02AF6^⫶^^\threedotcolon^B^mathbin^^TRIPLE COLON OPERATOR 02AF7^⫷^^\lllnest^R^mathrel^^TRIPLE NESTED LESS-THAN 02AF8^⫸^^\gggnest^R^mathrel^^TRIPLE NESTED GREATER-THAN 02AF9^⫹^^\leqqslant^R^mathrel^^DOUBLE-LINE SLANTED LESS-THAN OR EQUAL TO 02AFA^⫺^^\geqqslant^R^mathrel^^DOUBLE-LINE SLANTED GREATER-THAN OR EQUAL TO 02AFB^⫻^^\trslash^B^mathbin^^TRIPLE SOLIDUS BINARY RELATION 02AFC^⫼^\biginterleave^\biginterleave^L^mathop^stmaryrd^LARGE TRIPLE VERTICAL BAR OPERATOR 02AFD^⫽^\sslash^\sslash^B^mathbin^stmaryrd^# \varparallel (txfonts), DOUBLE SOLIDUS OPERATOR 02AFE^⫾^\talloblong^\talloblong^B^mathbin^stmaryrd^WHITE VERTICAL BAR 02AFF^⫿^^\bigtalloblong^L^mathop^^N-ARY WHITE VERTICAL BAR 02B00^⬀^^^R^mathord^^NORTH EAST WHITE ARROW 02B01^⬁^^^R^mathord^^NORTH WEST WHITE ARROW 02B02^⬂^^^R^mathord^^SOUTH EAST WHITE ARROW 02B03^⬃^^^R^mathord^^SOUTH WEST WHITE ARROW 02B04^⬄^^^R^mathord^^LEFT RIGHT WHITE ARROW 02B05^⬅^^^R^mathord^^LEFTWARDS BLACK ARROW 02B06^⬆^^^R^mathord^^UPWARDS BLACK ARROW 02B07^⬇^^^R^mathord^^DOWNWARDS BLACK ARROW 02B08^⬈^^^R^mathord^^NORTH EAST BLACK ARROW 02B09^⬉^^^R^mathord^^NORTH WEST BLACK ARROW 02B0A^⬊^^^R^mathord^^SOUTH EAST BLACK ARROW 02B0B^⬋^^^R^mathord^^SOUTH WEST BLACK ARROW 02B0C^⬌^^^R^mathord^^LEFT RIGHT BLACK ARROW 02B0D^⬍^^^R^mathord^^UP DOWN BLACK ARROW 02B0E^⬎^^^R^mathord^^RIGHTWARDS ARROW WITH TIP DOWNWARDS 02B0F^⬏^^^R^mathord^^RIGHTWARDS ARROW WITH TIP UPWARDS 02B10^⬐^^^R^mathord^^LEFTWARDS ARROW WITH TIP DOWNWARDS 02B11^⬑^^^R^mathord^^LEFTWARDS ARROW WITH TIP UPWARDS 02B12^⬒^^\squaretopblack^N^mathord^^SQUARE WITH TOP HALF BLACK 02B13^⬓^^\squarebotblack^N^mathord^^SQUARE WITH BOTTOM HALF BLACK 02B14^⬔^^\squareurblack^N^mathord^^SQUARE WITH UPPER RIGHT DIAGONAL HALF BLACK 02B15^⬕^^\squarellblack^N^mathord^^SQUARE WITH LOWER LEFT DIAGONAL HALF BLACK 02B16^⬖^^\diamondleftblack^N^mathord^^DIAMOND WITH LEFT HALF BLACK 02B17^⬗^^\diamondrightblack^N^mathord^^DIAMOND WITH RIGHT HALF BLACK 02B18^⬘^^\diamondtopblack^N^mathord^^DIAMOND WITH TOP HALF BLACK 02B19^⬙^^\diamondbotblack^N^mathord^^DIAMOND WITH BOTTOM HALF BLACK 02B1A^⬚^^\dottedsquare^^mathord^^DOTTED SQUARE 02B1B^⬛^\blacksquare^\lgblksquare^N^mathord^fourier -amssymb^BLACK LARGE SQUARE 02B1C^⬜^\square^\lgwhtsquare^N^mathord^fourier -amssymb^WHITE LARGE SQUARE 02B1D^⬝^^\vysmblksquare^N^mathord^^# \centerdot (amssymb), t \Squaredot (marvosym), BLACK VERY SMALL SQUARE 02B1E^⬞^^\vysmwhtsquare^N^mathord^^WHITE VERY SMALL SQUARE 02B1F^⬟^^\pentagonblack^N^mathord^^BLACK PENTAGON 02B20^⬠^^\pentagon^N^mathord^^WHITE PENTAGON 02B21^⬡^^\varhexagon^N^mathord^^WHITE HEXAGON 02B22^⬢^^\varhexagonblack^N^mathord^^BLACK HEXAGON 02B23^⬣^^\hexagonblack^N^mathord^^HORIZONTAL BLACK HEXAGON 02B24^⬤^^\lgblkcircle^N^mathord^^BLACK LARGE CIRCLE 02B25^⬥^^\mdblkdiamond^N^mathord^^BLACK MEDIUM DIAMOND 02B26^⬦^^\mdwhtdiamond^N^mathord^^WHITE MEDIUM DIAMOND 02B27^⬧^^\mdblklozenge^N^mathord^^# \blacklozenge (amssymb), BLACK MEDIUM LOZENGE 02B28^⬨^^\mdwhtlozenge^N^mathord^^# \lozenge (amssymb), WHITE MEDIUM LOZENGE 02B29^⬩^^\smblkdiamond^N^mathord^^BLACK SMALL DIAMOND 02B2A^⬪^^\smblklozenge^N^mathord^^BLACK SMALL LOZENGE 02B2B^⬫^^\smwhtlozenge^N^mathord^^WHITE SMALL LOZENGE 02B2C^⬬^^\blkhorzoval^N^mathord^^BLACK HORIZONTAL ELLIPSE 02B2D^⬭^^\whthorzoval^N^mathord^^WHITE HORIZONTAL ELLIPSE 02B2E^⬮^^\blkvertoval^N^mathord^^BLACK VERTICAL ELLIPSE 02B2F^⬯^^\whtvertoval^N^mathord^^WHITE VERTICAL ELLIPSE 02B30^⬰^^\circleonleftarrow^R^mathrel^^LEFT ARROW WITH SMALL CIRCLE 02B31^⬱^^\leftthreearrows^R^mathrel^^THREE LEFTWARDS ARROWS 02B32^⬲^^\leftarrowonoplus^R^mathrel^^LEFT ARROW WITH CIRCLED PLUS 02B33^⬳^^\longleftsquigarrow^R^mathrel^^LONG LEFTWARDS SQUIGGLE ARROW 02B34^⬴^^\nvtwoheadleftarrow^R^mathrel^^LEFTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE 02B35^⬵^^\nVtwoheadleftarrow^R^mathrel^^LEFTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKE 02B36^⬶^^\twoheadmapsfrom^R^mathrel^^LEFTWARDS TWO-HEADED ARROW FROM BAR 02B37^⬷^^\twoheadleftdbkarrow^R^mathrel^^leftwards two-headed triple-dash arrow 02B38^⬸^^\leftdotarrow^R^mathrel^^LEFTWARDS ARROW WITH DOTTED STEM 02B39^⬹^^\nvleftarrowtail^R^mathrel^^LEFTWARDS ARROW WITH TAIL WITH VERTICAL STROKE 02B3A^⬺^^\nVleftarrowtail^R^mathrel^^LEFTWARDS ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE 02B3B^⬻^^\twoheadleftarrowtail^R^mathrel^^LEFTWARDS TWO-HEADED ARROW WITH TAIL 02B3C^⬼^^\nvtwoheadleftarrowtail^R^mathrel^^LEFTWARDS TWO-HEADED ARROW WITH TAIL WITH VERTICAL STROKE 02B3D^⬽^^\nVtwoheadleftarrowtail^R^mathrel^^LEFTWARDS TWO-HEADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE 02B3E^⬾^^\leftarrowx^R^mathrel^^LEFTWARDS ARROW THROUGH X 02B3F^⬿^^\leftcurvedarrow^R^mathrel^^WAVE ARROW POINTING DIRECTLY LEFT 02B40^⭀^^\equalleftarrow^R^mathrel^^EQUALS SIGN ABOVE LEFTWARDS ARROW 02B41^⭁^^\bsimilarleftarrow^R^mathrel^^REVERSE TILDE OPERATOR ABOVE LEFTWARDS ARROW 02B42^⭂^^\leftarrowbackapprox^R^mathrel^^LEFTWARDS ARROW ABOVE REVERSE ALMOST EQUAL TO 02B43^⭃^^\rightarrowgtr^R^mathrel^^rightwards arrow through less-than 02B44^⭄^^\rightarrowsupset^R^mathrel^^rightwards arrow through subset 02B45^⭅^^\LLeftarrow^R^mathrel^^LEFTWARDS QUADRUPLE ARROW 02B46^⭆^^\RRightarrow^R^mathrel^^RIGHTWARDS QUADRUPLE ARROW 02B47^⭇^^\bsimilarrightarrow^R^mathrel^^REVERSE TILDE OPERATOR ABOVE RIGHTWARDS ARROW 02B48^⭈^^\rightarrowbackapprox^R^mathrel^^RIGHTWARDS ARROW ABOVE REVERSE ALMOST EQUAL TO 02B49^⭉^^\similarleftarrow^R^mathrel^^TILDE OPERATOR ABOVE LEFTWARDS ARROW 02B4A^⭊^^\leftarrowapprox^R^mathrel^^LEFTWARDS ARROW ABOVE ALMOST EQUAL TO 02B4B^⭋^^\leftarrowbsimilar^R^mathrel^^LEFTWARDS ARROW ABOVE REVERSE TILDE OPERATOR 02B4C^⭌^^\rightarrowbsimilar^R^mathrel^^righttwards arrow above reverse tilde operator 02B50^⭐^^\medwhitestar^N^mathord^^WHITE MEDIUM STAR 02B51^⭑^^\medblackstar^N^mathord^^black medium star 02B52^⭒^^\smwhitestar^N^mathord^^WHITE SMALL STAR 02B53^⭓^^\rightpentagonblack^N^mathord^^BLACK RIGHT-POINTING PENTAGON 02B54^⭔^^\rightpentagon^N^mathord^^WHITE RIGHT-POINTING PENTAGON 03008^〈^^^X^mathopen^^# \langle, LEFT ANGLE BRACKET (deprecated for math use) 03009^〉^^^X^mathclose^^# \rangle, RIGHT ANGLE BRACKET (deprecated for math use) 03012^〒^^\postalmark^^mathord^^POSTAL MARK 03014^〔^^\lbrbrak^^mathopen^^left broken bracket 03015^〕^^\rbrbrak^^mathclose^^right broken bracket 03018^〘^^\Lbrbrak^^mathopen^^LEFT WHITE TORTOISE SHELL BRACKET 03019^〙^^\Rbrbrak^^mathclose^^RIGHT WHITE TORTOISE SHELL BRACKET 0301A^〚^^^X^mathopen^^# \llbracket (stmaryrd), LEFT WHITE SQUARE BRACKET (deprecated for math use) 0301B^〛^^^X^mathclose^^# \rrbracket (stmaryrd), RIGHT WHITE SQUARE BRACKET (deprecated for math use) 03030^〰^^\hzigzag^^mathord^^zigzag 0306E^の^^^N^mathalpha^^HIRAGANA LETTER NO 0FB29^﬩^^^X^mathord^^HEBREW LETTER ALTERNATIVE PLUS SIGN (doesn't have cross shape) 0FE00^︀^^^D^mathaccent^^VARIATION SELECTOR-1 0FE61^﹡^^^X^^^SMALL ASTERISK 0FE62^﹢^^^X^mathord^^SMALL PLUS SIGN 0FE63^﹣^^^X^mathord^^SMALL HYPHEN-MINUS 0FE64^﹤^^^X^mathord^^SMALL LESS-THAN SIGN 0FE65^﹥^^^X^mathord^^SMALL GREATER-THAN SIGN 0FE66^﹦^^^X^mathord^^SMALL EQUALS SIGN 0FE68^﹨^^^X^^^SMALL REVERSE SOLIDUS 0FF0B^+^^^X^mathord^^FULLWIDTH PLUS SIGN 0FF1C^<^^^X^mathord^^FULLWIDTH LESS-THAN SIGN 0FF1D^=^^^X^mathord^^FULLWIDTH EQUALS SIGN 0FF1E^>^^^X^mathord^^FULLWIDTH GREATER-THAN SIGN 0FF3C^\^^^X^^^FULLWIDTH REVERSE SOLIDUS 0FF3E^^^^^X^mathord^^FULLWIDTH CIRCUMFLEX ACCENT 0FF5C^|^^^X^mathord^^FULLWIDTH VERTICAL LINE 0FF5E^~^^^X^mathord^^FULLWIDTH TILDE 0FFE2^¬^^^X^mathord^^FULLWIDTH NOT SIGN 0FFE9^←^^^X^mathord^^HALFWIDTH LEFTWARDS ARROW 0FFEA^↑^^^X^mathord^^HALFWIDTH UPWARDS ARROW 0FFEB^→^^^X^mathord^^HALFWIDTH RIGHTWARDS ARROW 0FFEC^↓^^^X^mathord^^HALFWIDTH DOWNWARDS ARROW 1D400^𝐀^\mathbf{A}^\mbfA^A^mathalpha^^MATHEMATICAL BOLD CAPITAL A 1D401^𝐁^\mathbf{B}^\mbfB^A^mathalpha^^MATHEMATICAL BOLD CAPITAL B 1D402^𝐂^\mathbf{C}^\mbfC^A^mathalpha^^MATHEMATICAL BOLD CAPITAL C 1D403^𝐃^\mathbf{D}^\mbfD^A^mathalpha^^MATHEMATICAL BOLD CAPITAL D 1D404^𝐄^\mathbf{E}^\mbfE^A^mathalpha^^MATHEMATICAL BOLD CAPITAL E 1D405^𝐅^\mathbf{F}^\mbfF^A^mathalpha^^MATHEMATICAL BOLD CAPITAL F 1D406^𝐆^\mathbf{G}^\mbfG^A^mathalpha^^MATHEMATICAL BOLD CAPITAL G 1D407^𝐇^\mathbf{H}^\mbfH^A^mathalpha^^MATHEMATICAL BOLD CAPITAL H 1D408^𝐈^\mathbf{I}^\mbfI^A^mathalpha^^MATHEMATICAL BOLD CAPITAL I 1D409^𝐉^\mathbf{J}^\mbfJ^A^mathalpha^^MATHEMATICAL BOLD CAPITAL J 1D40A^𝐊^\mathbf{K}^\mbfK^A^mathalpha^^MATHEMATICAL BOLD CAPITAL K 1D40B^𝐋^\mathbf{L}^\mbfL^A^mathalpha^^MATHEMATICAL BOLD CAPITAL L 1D40C^𝐌^\mathbf{M}^\mbfM^A^mathalpha^^MATHEMATICAL BOLD CAPITAL M 1D40D^𝐍^\mathbf{N}^\mbfN^A^mathalpha^^MATHEMATICAL BOLD CAPITAL N 1D40E^𝐎^\mathbf{O}^\mbfO^A^mathalpha^^MATHEMATICAL BOLD CAPITAL O 1D40F^𝐏^\mathbf{P}^\mbfP^A^mathalpha^^MATHEMATICAL BOLD CAPITAL P 1D410^𝐐^\mathbf{Q}^\mbfQ^A^mathalpha^^MATHEMATICAL BOLD CAPITAL Q 1D411^𝐑^\mathbf{R}^\mbfR^A^mathalpha^^MATHEMATICAL BOLD CAPITAL R 1D412^𝐒^\mathbf{S}^\mbfS^A^mathalpha^^MATHEMATICAL BOLD CAPITAL S 1D413^𝐓^\mathbf{T}^\mbfT^A^mathalpha^^MATHEMATICAL BOLD CAPITAL T 1D414^𝐔^\mathbf{U}^\mbfU^A^mathalpha^^MATHEMATICAL BOLD CAPITAL U 1D415^𝐕^\mathbf{V}^\mbfV^A^mathalpha^^MATHEMATICAL BOLD CAPITAL V 1D416^𝐖^\mathbf{W}^\mbfW^A^mathalpha^^MATHEMATICAL BOLD CAPITAL W 1D417^𝐗^\mathbf{X}^\mbfX^A^mathalpha^^MATHEMATICAL BOLD CAPITAL X 1D418^𝐘^\mathbf{Y}^\mbfY^A^mathalpha^^MATHEMATICAL BOLD CAPITAL Y 1D419^𝐙^\mathbf{Z}^\mbfZ^A^mathalpha^^MATHEMATICAL BOLD CAPITAL Z 1D41A^𝐚^\mathbf{a}^\mbfa^A^mathalpha^^MATHEMATICAL BOLD SMALL A 1D41B^𝐛^\mathbf{b}^\mbfb^A^mathalpha^^MATHEMATICAL BOLD SMALL B 1D41C^𝐜^\mathbf{c}^\mbfc^A^mathalpha^^MATHEMATICAL BOLD SMALL C 1D41D^𝐝^\mathbf{d}^\mbfd^A^mathalpha^^MATHEMATICAL BOLD SMALL D 1D41E^𝐞^\mathbf{e}^\mbfe^A^mathalpha^^MATHEMATICAL BOLD SMALL E 1D41F^𝐟^\mathbf{f}^\mbff^A^mathalpha^^MATHEMATICAL BOLD SMALL F 1D420^𝐠^\mathbf{g}^\mbfg^A^mathalpha^^MATHEMATICAL BOLD SMALL G 1D421^𝐡^\mathbf{h}^\mbfh^A^mathalpha^^MATHEMATICAL BOLD SMALL H 1D422^𝐢^\mathbf{i}^\mbfi^A^mathalpha^^MATHEMATICAL BOLD SMALL I 1D423^𝐣^\mathbf{j}^\mbfj^A^mathalpha^^MATHEMATICAL BOLD SMALL J 1D424^𝐤^\mathbf{k}^\mbfk^A^mathalpha^^MATHEMATICAL BOLD SMALL K 1D425^𝐥^\mathbf{l}^\mbfl^A^mathalpha^^MATHEMATICAL BOLD SMALL L 1D426^𝐦^\mathbf{m}^\mbfm^A^mathalpha^^MATHEMATICAL BOLD SMALL M 1D427^𝐧^\mathbf{n}^\mbfn^A^mathalpha^^MATHEMATICAL BOLD SMALL N 1D428^𝐨^\mathbf{o}^\mbfo^A^mathalpha^^MATHEMATICAL BOLD SMALL O 1D429^𝐩^\mathbf{p}^\mbfp^A^mathalpha^^MATHEMATICAL BOLD SMALL P 1D42A^𝐪^\mathbf{q}^\mbfq^A^mathalpha^^MATHEMATICAL BOLD SMALL Q 1D42B^𝐫^\mathbf{r}^\mbfr^A^mathalpha^^MATHEMATICAL BOLD SMALL R 1D42C^𝐬^\mathbf{s}^\mbfs^A^mathalpha^^MATHEMATICAL BOLD SMALL S 1D42D^𝐭^\mathbf{t}^\mbft^A^mathalpha^^MATHEMATICAL BOLD SMALL T 1D42E^𝐮^\mathbf{u}^\mbfu^A^mathalpha^^MATHEMATICAL BOLD SMALL U 1D42F^𝐯^\mathbf{v}^\mbfv^A^mathalpha^^MATHEMATICAL BOLD SMALL V 1D430^𝐰^\mathbf{w}^\mbfw^A^mathalpha^^MATHEMATICAL BOLD SMALL W 1D431^𝐱^\mathbf{x}^\mbfx^A^mathalpha^^MATHEMATICAL BOLD SMALL X 1D432^𝐲^\mathbf{y}^\mbfy^A^mathalpha^^MATHEMATICAL BOLD SMALL Y 1D433^𝐳^\mathbf{z}^\mbfz^A^mathalpha^^MATHEMATICAL BOLD SMALL Z 1D434^𝐴^A^\mitA^A^mathalpha^-frenchstyle^= \mathit{A}, MATHEMATICAL ITALIC CAPITAL A 1D435^𝐵^B^\mitB^A^mathalpha^-frenchstyle^= \mathit{B}, MATHEMATICAL ITALIC CAPITAL B 1D436^𝐶^C^\mitC^A^mathalpha^-frenchstyle^= \mathit{C}, MATHEMATICAL ITALIC CAPITAL C 1D437^𝐷^D^\mitD^A^mathalpha^-frenchstyle^= \mathit{D}, MATHEMATICAL ITALIC CAPITAL D 1D438^𝐸^E^\mitE^A^mathalpha^-frenchstyle^= \mathit{E}, MATHEMATICAL ITALIC CAPITAL E 1D439^𝐹^F^\mitF^A^mathalpha^-frenchstyle^= \mathit{F}, MATHEMATICAL ITALIC CAPITAL F 1D43A^𝐺^G^\mitG^A^mathalpha^-frenchstyle^= \mathit{G}, MATHEMATICAL ITALIC CAPITAL G 1D43B^𝐻^H^\mitH^A^mathalpha^-frenchstyle^= \mathit{H}, MATHEMATICAL ITALIC CAPITAL H 1D43C^𝐼^I^\mitI^A^mathalpha^-frenchstyle^= \mathit{I}, MATHEMATICAL ITALIC CAPITAL I 1D43D^𝐽^J^\mitJ^A^mathalpha^-frenchstyle^= \mathit{J}, MATHEMATICAL ITALIC CAPITAL J 1D43E^𝐾^K^\mitK^A^mathalpha^-frenchstyle^= \mathit{K}, MATHEMATICAL ITALIC CAPITAL K 1D43F^𝐿^L^\mitL^A^mathalpha^-frenchstyle^= \mathit{L}, MATHEMATICAL ITALIC CAPITAL L 1D440^𝑀^M^\mitM^A^mathalpha^-frenchstyle^= \mathit{M}, MATHEMATICAL ITALIC CAPITAL M 1D441^𝑁^N^\mitN^A^mathalpha^-frenchstyle^= \mathit{N}, MATHEMATICAL ITALIC CAPITAL N 1D442^𝑂^O^\mitO^A^mathalpha^-frenchstyle^= \mathit{O}, MATHEMATICAL ITALIC CAPITAL O 1D443^𝑃^P^\mitP^A^mathalpha^-frenchstyle^= \mathit{P}, MATHEMATICAL ITALIC CAPITAL P 1D444^𝑄^Q^\mitQ^A^mathalpha^-frenchstyle^= \mathit{Q}, MATHEMATICAL ITALIC CAPITAL Q 1D445^𝑅^R^\mitR^A^mathalpha^-frenchstyle^= \mathit{R}, MATHEMATICAL ITALIC CAPITAL R 1D446^𝑆^S^\mitS^A^mathalpha^-frenchstyle^= \mathit{S}, MATHEMATICAL ITALIC CAPITAL S 1D447^𝑇^T^\mitT^A^mathalpha^-frenchstyle^= \mathit{T}, MATHEMATICAL ITALIC CAPITAL T 1D448^𝑈^U^\mitU^A^mathalpha^-frenchstyle^= \mathit{U}, MATHEMATICAL ITALIC CAPITAL U 1D449^𝑉^V^\mitV^A^mathalpha^-frenchstyle^= \mathit{V}, MATHEMATICAL ITALIC CAPITAL V 1D44A^𝑊^W^\mitW^A^mathalpha^-frenchstyle^= \mathit{W}, MATHEMATICAL ITALIC CAPITAL W 1D44B^𝑋^X^\mitX^A^mathalpha^-frenchstyle^= \mathit{X}, MATHEMATICAL ITALIC CAPITAL X 1D44C^𝑌^Y^\mitY^A^mathalpha^-frenchstyle^= \mathit{Y}, MATHEMATICAL ITALIC CAPITAL Y 1D44D^𝑍^Z^\mitZ^A^mathalpha^-frenchstyle^= \mathit{Z}, MATHEMATICAL ITALIC CAPITAL Z 1D44E^𝑎^a^\mita^A^mathalpha^-uprightstyle^= \mathit{a}, MATHEMATICAL ITALIC SMALL A 1D44F^𝑏^b^\mitb^A^mathalpha^-uprightstyle^= \mathit{b}, MATHEMATICAL ITALIC SMALL B 1D450^𝑐^c^\mitc^A^mathalpha^-uprightstyle^= \mathit{c}, MATHEMATICAL ITALIC SMALL C 1D451^𝑑^d^\mitd^A^mathalpha^-uprightstyle^= \mathit{d}, MATHEMATICAL ITALIC SMALL D 1D452^𝑒^e^\mite^A^mathalpha^-uprightstyle^= \mathit{e}, MATHEMATICAL ITALIC SMALL E 1D453^𝑓^f^\mitf^A^mathalpha^-uprightstyle^= \mathit{f}, MATHEMATICAL ITALIC SMALL F 1D454^𝑔^g^\mitg^A^mathalpha^-uprightstyle^= \mathit{g}, MATHEMATICAL ITALIC SMALL G 1D456^𝑖^i^\miti^A^mathalpha^-uprightstyle^= \mathit{i}, MATHEMATICAL ITALIC SMALL I 1D457^𝑗^j^\mitj^A^mathalpha^-uprightstyle^= \mathit{j}, MATHEMATICAL ITALIC SMALL J 1D458^𝑘^k^\mitk^A^mathalpha^-uprightstyle^= \mathit{k}, MATHEMATICAL ITALIC SMALL K 1D459^𝑙^l^\mitl^A^mathalpha^-uprightstyle^= \mathit{l}, MATHEMATICAL ITALIC SMALL L 1D45A^𝑚^m^\mitm^A^mathalpha^-uprightstyle^= \mathit{m}, MATHEMATICAL ITALIC SMALL M 1D45B^𝑛^n^\mitn^A^mathalpha^-uprightstyle^= \mathit{n}, MATHEMATICAL ITALIC SMALL N 1D45C^𝑜^o^\mito^A^mathalpha^-uprightstyle^= \mathit{o}, MATHEMATICAL ITALIC SMALL O 1D45D^𝑝^p^\mitp^A^mathalpha^-uprightstyle^= \mathit{p}, MATHEMATICAL ITALIC SMALL P 1D45E^𝑞^q^\mitq^A^mathalpha^-uprightstyle^= \mathit{q}, MATHEMATICAL ITALIC SMALL Q 1D45F^𝑟^r^\mitr^A^mathalpha^-uprightstyle^= \mathit{r}, MATHEMATICAL ITALIC SMALL R 1D460^𝑠^s^\mits^A^mathalpha^-uprightstyle^= \mathit{s}, MATHEMATICAL ITALIC SMALL S 1D461^𝑡^t^\mitt^A^mathalpha^-uprightstyle^= \mathit{t}, MATHEMATICAL ITALIC SMALL T 1D462^𝑢^u^\mitu^A^mathalpha^-uprightstyle^= \mathit{u}, MATHEMATICAL ITALIC SMALL U 1D463^𝑣^v^\mitv^A^mathalpha^-uprightstyle^= \mathit{v}, MATHEMATICAL ITALIC SMALL V 1D464^𝑤^w^\mitw^A^mathalpha^-uprightstyle^= \mathit{w}, MATHEMATICAL ITALIC SMALL W 1D465^𝑥^x^\mitx^A^mathalpha^-uprightstyle^= \mathit{x}, MATHEMATICAL ITALIC SMALL X 1D466^𝑦^y^\mity^A^mathalpha^-uprightstyle^= \mathit{y}, MATHEMATICAL ITALIC SMALL Y 1D467^𝑧^z^\mitz^A^mathalpha^-uprightstyle^= \mathit{z}, MATHEMATICAL ITALIC SMALL Z 1D468^𝑨^\mathbfit{A}^\mbfitA^A^mathalpha^isomath^= \mathbold{A} (fixmath), MATHEMATICAL BOLD ITALIC CAPITAL A 1D469^𝑩^\mathbfit{B}^\mbfitB^A^mathalpha^isomath^= \mathbold{B} (fixmath), MATHEMATICAL BOLD ITALIC CAPITAL B 1D46A^𝑪^\mathbfit{C}^\mbfitC^A^mathalpha^isomath^= \mathbold{C} (fixmath), MATHEMATICAL BOLD ITALIC CAPITAL C 1D46B^𝑫^\mathbfit{D}^\mbfitD^A^mathalpha^isomath^= \mathbold{D} (fixmath), MATHEMATICAL BOLD ITALIC CAPITAL D 1D46C^𝑬^\mathbfit{E}^\mbfitE^A^mathalpha^isomath^= \mathbold{E} (fixmath), MATHEMATICAL BOLD ITALIC CAPITAL E 1D46D^𝑭^\mathbfit{F}^\mbfitF^A^mathalpha^isomath^= \mathbold{F} (fixmath), MATHEMATICAL BOLD ITALIC CAPITAL F 1D46E^𝑮^\mathbfit{G}^\mbfitG^A^mathalpha^isomath^= \mathbold{G} (fixmath), MATHEMATICAL BOLD ITALIC CAPITAL G 1D46F^𝑯^\mathbfit{H}^\mbfitH^A^mathalpha^isomath^= \mathbold{H} (fixmath), MATHEMATICAL BOLD ITALIC CAPITAL H 1D470^𝑰^\mathbfit{I}^\mbfitI^A^mathalpha^isomath^= \mathbold{I} (fixmath), MATHEMATICAL BOLD ITALIC CAPITAL I 1D471^𝑱^\mathbfit{J}^\mbfitJ^A^mathalpha^isomath^= \mathbold{J} (fixmath), MATHEMATICAL BOLD ITALIC CAPITAL J 1D472^𝑲^\mathbfit{K}^\mbfitK^A^mathalpha^isomath^= \mathbold{K} (fixmath), MATHEMATICAL BOLD ITALIC CAPITAL K 1D473^𝑳^\mathbfit{L}^\mbfitL^A^mathalpha^isomath^= \mathbold{L} (fixmath), MATHEMATICAL BOLD ITALIC CAPITAL L 1D474^𝑴^\mathbfit{M}^\mbfitM^A^mathalpha^isomath^= \mathbold{M} (fixmath), MATHEMATICAL BOLD ITALIC CAPITAL M 1D475^𝑵^\mathbfit{N}^\mbfitN^A^mathalpha^isomath^= \mathbold{N} (fixmath), MATHEMATICAL BOLD ITALIC CAPITAL N 1D476^𝑶^\mathbfit{O}^\mbfitO^A^mathalpha^isomath^= \mathbold{O} (fixmath), MATHEMATICAL BOLD ITALIC CAPITAL O 1D477^𝑷^\mathbfit{P}^\mbfitP^A^mathalpha^isomath^= \mathbold{P} (fixmath), MATHEMATICAL BOLD ITALIC CAPITAL P 1D478^𝑸^\mathbfit{Q}^\mbfitQ^A^mathalpha^isomath^= \mathbold{Q} (fixmath), MATHEMATICAL BOLD ITALIC CAPITAL Q 1D479^𝑹^\mathbfit{R}^\mbfitR^A^mathalpha^isomath^= \mathbold{R} (fixmath), MATHEMATICAL BOLD ITALIC CAPITAL R 1D47A^𝑺^\mathbfit{S}^\mbfitS^A^mathalpha^isomath^= \mathbold{S} (fixmath), MATHEMATICAL BOLD ITALIC CAPITAL S 1D47B^𝑻^\mathbfit{T}^\mbfitT^A^mathalpha^isomath^= \mathbold{T} (fixmath), MATHEMATICAL BOLD ITALIC CAPITAL T 1D47C^𝑼^\mathbfit{U}^\mbfitU^A^mathalpha^isomath^= \mathbold{U} (fixmath), MATHEMATICAL BOLD ITALIC CAPITAL U 1D47D^𝑽^\mathbfit{V}^\mbfitV^A^mathalpha^isomath^= \mathbold{V} (fixmath), MATHEMATICAL BOLD ITALIC CAPITAL V 1D47E^𝑾^\mathbfit{W}^\mbfitW^A^mathalpha^isomath^= \mathbold{W} (fixmath), MATHEMATICAL BOLD ITALIC CAPITAL W 1D47F^𝑿^\mathbfit{X}^\mbfitX^A^mathalpha^isomath^= \mathbold{X} (fixmath), MATHEMATICAL BOLD ITALIC CAPITAL X 1D480^𝒀^\mathbfit{Y}^\mbfitY^A^mathalpha^isomath^= \mathbold{Y} (fixmath), MATHEMATICAL BOLD ITALIC CAPITAL Y 1D481^𝒁^\mathbfit{Z}^\mbfitZ^A^mathalpha^isomath^= \mathbold{Z} (fixmath), MATHEMATICAL BOLD ITALIC CAPITAL Z 1D482^𝒂^\mathbfit{a}^\mbfita^A^mathalpha^isomath^= \mathbold{a} (fixmath), MATHEMATICAL BOLD ITALIC SMALL A 1D483^𝒃^\mathbfit{b}^\mbfitb^A^mathalpha^isomath^= \mathbold{b} (fixmath), MATHEMATICAL BOLD ITALIC SMALL B 1D484^𝒄^\mathbfit{c}^\mbfitc^A^mathalpha^isomath^= \mathbold{c} (fixmath), MATHEMATICAL BOLD ITALIC SMALL C 1D485^𝒅^\mathbfit{d}^\mbfitd^A^mathalpha^isomath^= \mathbold{d} (fixmath), MATHEMATICAL BOLD ITALIC SMALL D 1D486^𝒆^\mathbfit{e}^\mbfite^A^mathalpha^isomath^= \mathbold{e} (fixmath), MATHEMATICAL BOLD ITALIC SMALL E 1D487^𝒇^\mathbfit{f}^\mbfitf^A^mathalpha^isomath^= \mathbold{f} (fixmath), MATHEMATICAL BOLD ITALIC SMALL F 1D488^𝒈^\mathbfit{g}^\mbfitg^A^mathalpha^isomath^= \mathbold{g} (fixmath), MATHEMATICAL BOLD ITALIC SMALL G 1D489^𝒉^\mathbfit{h}^\mbfith^A^mathalpha^isomath^= \mathbold{h} (fixmath), MATHEMATICAL BOLD ITALIC SMALL H 1D48A^𝒊^\mathbfit{i}^\mbfiti^A^mathalpha^isomath^= \mathbold{i} (fixmath), MATHEMATICAL BOLD ITALIC SMALL I 1D48B^𝒋^\mathbfit{j}^\mbfitj^A^mathalpha^isomath^= \mathbold{j} (fixmath), MATHEMATICAL BOLD ITALIC SMALL J 1D48C^𝒌^\mathbfit{k}^\mbfitk^A^mathalpha^isomath^= \mathbold{k} (fixmath), MATHEMATICAL BOLD ITALIC SMALL K 1D48D^𝒍^\mathbfit{l}^\mbfitl^A^mathalpha^isomath^= \mathbold{l} (fixmath), MATHEMATICAL BOLD ITALIC SMALL L 1D48E^𝒎^\mathbfit{m}^\mbfitm^A^mathalpha^isomath^= \mathbold{m} (fixmath), MATHEMATICAL BOLD ITALIC SMALL M 1D48F^𝒏^\mathbfit{n}^\mbfitn^A^mathalpha^isomath^= \mathbold{n} (fixmath), MATHEMATICAL BOLD ITALIC SMALL N 1D490^𝒐^\mathbfit{o}^\mbfito^A^mathalpha^isomath^= \mathbold{o} (fixmath), MATHEMATICAL BOLD ITALIC SMALL O 1D491^𝒑^\mathbfit{p}^\mbfitp^A^mathalpha^isomath^= \mathbold{p} (fixmath), MATHEMATICAL BOLD ITALIC SMALL P 1D492^𝒒^\mathbfit{q}^\mbfitq^A^mathalpha^isomath^= \mathbold{q} (fixmath), MATHEMATICAL BOLD ITALIC SMALL Q 1D493^𝒓^\mathbfit{r}^\mbfitr^A^mathalpha^isomath^= \mathbold{r} (fixmath), MATHEMATICAL BOLD ITALIC SMALL R 1D494^𝒔^\mathbfit{s}^\mbfits^A^mathalpha^isomath^= \mathbold{s} (fixmath), MATHEMATICAL BOLD ITALIC SMALL S 1D495^𝒕^\mathbfit{t}^\mbfitt^A^mathalpha^isomath^= \mathbold{t} (fixmath), MATHEMATICAL BOLD ITALIC SMALL T 1D496^𝒖^\mathbfit{u}^\mbfitu^A^mathalpha^isomath^= \mathbold{u} (fixmath), MATHEMATICAL BOLD ITALIC SMALL U 1D497^𝒗^\mathbfit{v}^\mbfitv^A^mathalpha^isomath^= \mathbold{v} (fixmath), MATHEMATICAL BOLD ITALIC SMALL V 1D498^𝒘^\mathbfit{w}^\mbfitw^A^mathalpha^isomath^= \mathbold{w} (fixmath), MATHEMATICAL BOLD ITALIC SMALL W 1D499^𝒙^\mathbfit{x}^\mbfitx^A^mathalpha^isomath^= \mathbold{x} (fixmath), MATHEMATICAL BOLD ITALIC SMALL X 1D49A^𝒚^\mathbfit{y}^\mbfity^A^mathalpha^isomath^= \mathbold{y} (fixmath), MATHEMATICAL BOLD ITALIC SMALL Y 1D49B^𝒛^\mathbfit{z}^\mbfitz^A^mathalpha^isomath^= \mathbold{z} (fixmath), MATHEMATICAL BOLD ITALIC SMALL Z 1D49C^𝒜^\mathcal{A}^\mscrA^A^mathalpha^^MATHEMATICAL SCRIPT CAPITAL A 1D49E^𝒞^\mathcal{C}^\mscrC^A^mathalpha^^MATHEMATICAL SCRIPT CAPITAL C 1D49F^𝒟^\mathcal{D}^\mscrD^A^mathalpha^^MATHEMATICAL SCRIPT CAPITAL D 1D4A2^𝒢^\mathcal{G}^\mscrG^A^mathalpha^^MATHEMATICAL SCRIPT CAPITAL G 1D4A5^𝒥^\mathcal{J}^\mscrJ^A^mathalpha^^MATHEMATICAL SCRIPT CAPITAL J 1D4A6^𝒦^\mathcal{K}^\mscrK^A^mathalpha^^MATHEMATICAL SCRIPT CAPITAL K 1D4A9^𝒩^\mathcal{N}^\mscrN^A^mathalpha^^MATHEMATICAL SCRIPT CAPITAL N 1D4AA^𝒪^\mathcal{O}^\mscrO^A^mathalpha^^MATHEMATICAL SCRIPT CAPITAL O 1D4AB^𝒫^\mathcal{P}^\mscrP^A^mathalpha^^MATHEMATICAL SCRIPT CAPITAL P 1D4AC^𝒬^\mathcal{Q}^\mscrQ^A^mathalpha^^MATHEMATICAL SCRIPT CAPITAL Q 1D4AE^𝒮^\mathcal{S}^\mscrS^A^mathalpha^^MATHEMATICAL SCRIPT CAPITAL S 1D4AF^𝒯^\mathcal{T}^\mscrT^A^mathalpha^^MATHEMATICAL SCRIPT CAPITAL T 1D4B0^𝒰^\mathcal{U}^\mscrU^A^mathalpha^^MATHEMATICAL SCRIPT CAPITAL U 1D4B1^𝒱^\mathcal{V}^\mscrV^A^mathalpha^^MATHEMATICAL SCRIPT CAPITAL V 1D4B2^𝒲^\mathcal{W}^\mscrW^A^mathalpha^^MATHEMATICAL SCRIPT CAPITAL W 1D4B3^𝒳^\mathcal{X}^\mscrX^A^mathalpha^^MATHEMATICAL SCRIPT CAPITAL X 1D4B4^𝒴^\mathcal{Y}^\mscrY^A^mathalpha^^MATHEMATICAL SCRIPT CAPITAL Y 1D4B5^𝒵^\mathcal{Z}^\mscrZ^A^mathalpha^^MATHEMATICAL SCRIPT CAPITAL Z 1D4B6^𝒶^\mathcal{a}^\mscra^A^mathalpha^urwchancal^MATHEMATICAL SCRIPT SMALL A 1D4B7^𝒷^\mathcal{b}^\mscrb^A^mathalpha^urwchancal^MATHEMATICAL SCRIPT SMALL B 1D4B8^𝒸^\mathcal{c}^\mscrc^A^mathalpha^urwchancal^MATHEMATICAL SCRIPT SMALL C 1D4B9^𝒹^\mathcal{d}^\mscrd^A^mathalpha^urwchancal^MATHEMATICAL SCRIPT SMALL D 1D4BB^𝒻^\mathcal{f}^\mscrf^A^mathalpha^urwchancal^MATHEMATICAL SCRIPT SMALL F 1D4BD^𝒽^\mathcal{h}^\mscrh^A^mathalpha^urwchancal^MATHEMATICAL SCRIPT SMALL H 1D4BE^𝒾^\mathcal{i}^\mscri^A^mathalpha^urwchancal^MATHEMATICAL SCRIPT SMALL I 1D4BF^𝒿^\mathcal{j}^\mscrj^A^mathalpha^urwchancal^MATHEMATICAL SCRIPT SMALL J 1D4C0^𝓀^\mathcal{k}^\mscrk^A^mathalpha^urwchancal^MATHEMATICAL SCRIPT SMALL K 1D4C1^𝓁^\mathcal{l}^\mscrl^A^mathalpha^urwchancal^MATHEMATICAL SCRIPT SMALL L 1D4C2^𝓂^\mathcal{m}^\mscrm^A^mathalpha^urwchancal^MATHEMATICAL SCRIPT SMALL M 1D4C3^𝓃^\mathcal{n}^\mscrn^A^mathalpha^urwchancal^MATHEMATICAL SCRIPT SMALL N 1D4C5^𝓅^\mathcal{p}^\mscrp^A^mathalpha^urwchancal^MATHEMATICAL SCRIPT SMALL P 1D4C6^𝓆^\mathcal{q}^\mscrq^A^mathalpha^urwchancal^MATHEMATICAL SCRIPT SMALL Q 1D4C7^𝓇^\mathcal{r}^\mscrr^A^mathalpha^urwchancal^MATHEMATICAL SCRIPT SMALL R 1D4C8^𝓈^\mathcal{s}^\mscrs^A^mathalpha^urwchancal^MATHEMATICAL SCRIPT SMALL S 1D4C9^𝓉^\mathcal{t}^\mscrt^A^mathalpha^urwchancal^MATHEMATICAL SCRIPT SMALL T 1D4CA^𝓊^\mathcal{u}^\mscru^A^mathalpha^urwchancal^MATHEMATICAL SCRIPT SMALL U 1D4CB^𝓋^\mathcal{v}^\mscrv^A^mathalpha^urwchancal^MATHEMATICAL SCRIPT SMALL V 1D4CC^𝓌^\mathcal{w}^\mscrw^A^mathalpha^urwchancal^MATHEMATICAL SCRIPT SMALL W 1D4CD^𝓍^\mathcal{x}^\mscrx^A^mathalpha^urwchancal^MATHEMATICAL SCRIPT SMALL X 1D4CE^𝓎^\mathcal{y}^\mscry^A^mathalpha^urwchancal^MATHEMATICAL SCRIPT SMALL Y 1D4CF^𝓏^\mathcal{z}^\mscrz^A^mathalpha^urwchancal^MATHEMATICAL SCRIPT SMALL Z 1D4D0^𝓐^^\mbfscrA^A^mathalpha^^MATHEMATICAL BOLD SCRIPT CAPITAL A 1D4D1^𝓑^^\mbfscrB^A^mathalpha^^MATHEMATICAL BOLD SCRIPT CAPITAL B 1D4D2^𝓒^^\mbfscrC^A^mathalpha^^MATHEMATICAL BOLD SCRIPT CAPITAL C 1D4D3^𝓓^^\mbfscrD^A^mathalpha^^MATHEMATICAL BOLD SCRIPT CAPITAL D 1D4D4^𝓔^^\mbfscrE^A^mathalpha^^MATHEMATICAL BOLD SCRIPT CAPITAL E 1D4D5^𝓕^^\mbfscrF^A^mathalpha^^MATHEMATICAL BOLD SCRIPT CAPITAL F 1D4D6^𝓖^^\mbfscrG^A^mathalpha^^MATHEMATICAL BOLD SCRIPT CAPITAL G 1D4D7^𝓗^^\mbfscrH^A^mathalpha^^MATHEMATICAL BOLD SCRIPT CAPITAL H 1D4D8^𝓘^^\mbfscrI^A^mathalpha^^MATHEMATICAL BOLD SCRIPT CAPITAL I 1D4D9^𝓙^^\mbfscrJ^A^mathalpha^^MATHEMATICAL BOLD SCRIPT CAPITAL J 1D4DA^𝓚^^\mbfscrK^A^mathalpha^^MATHEMATICAL BOLD SCRIPT CAPITAL K 1D4DB^𝓛^^\mbfscrL^A^mathalpha^^MATHEMATICAL BOLD SCRIPT CAPITAL L 1D4DC^𝓜^^\mbfscrM^A^mathalpha^^MATHEMATICAL BOLD SCRIPT CAPITAL M 1D4DD^𝓝^^\mbfscrN^A^mathalpha^^MATHEMATICAL BOLD SCRIPT CAPITAL N 1D4DE^𝓞^^\mbfscrO^A^mathalpha^^MATHEMATICAL BOLD SCRIPT CAPITAL O 1D4DF^𝓟^^\mbfscrP^A^mathalpha^^MATHEMATICAL BOLD SCRIPT CAPITAL P 1D4E0^𝓠^^\mbfscrQ^A^mathalpha^^MATHEMATICAL BOLD SCRIPT CAPITAL Q 1D4E1^𝓡^^\mbfscrR^A^mathalpha^^MATHEMATICAL BOLD SCRIPT CAPITAL R 1D4E2^𝓢^^\mbfscrS^A^mathalpha^^MATHEMATICAL BOLD SCRIPT CAPITAL S 1D4E3^𝓣^^\mbfscrT^A^mathalpha^^MATHEMATICAL BOLD SCRIPT CAPITAL T 1D4E4^𝓤^^\mbfscrU^A^mathalpha^^MATHEMATICAL BOLD SCRIPT CAPITAL U 1D4E5^𝓥^^\mbfscrV^A^mathalpha^^MATHEMATICAL BOLD SCRIPT CAPITAL V 1D4E6^𝓦^^\mbfscrW^A^mathalpha^^MATHEMATICAL BOLD SCRIPT CAPITAL W 1D4E7^𝓧^^\mbfscrX^A^mathalpha^^MATHEMATICAL BOLD SCRIPT CAPITAL X 1D4E8^𝓨^^\mbfscrY^A^mathalpha^^MATHEMATICAL BOLD SCRIPT CAPITAL Y 1D4E9^𝓩^^\mbfscrZ^A^mathalpha^^MATHEMATICAL BOLD SCRIPT CAPITAL Z 1D4EA^𝓪^^\mbfscra^A^mathalpha^^MATHEMATICAL BOLD SCRIPT SMALL A 1D4EB^𝓫^^\mbfscrb^A^mathalpha^^MATHEMATICAL BOLD SCRIPT SMALL B 1D4EC^𝓬^^\mbfscrc^A^mathalpha^^MATHEMATICAL BOLD SCRIPT SMALL C 1D4ED^𝓭^^\mbfscrd^A^mathalpha^^MATHEMATICAL BOLD SCRIPT SMALL D 1D4EE^𝓮^^\mbfscre^A^mathalpha^^MATHEMATICAL BOLD SCRIPT SMALL E 1D4EF^𝓯^^\mbfscrf^A^mathalpha^^MATHEMATICAL BOLD SCRIPT SMALL F 1D4F0^𝓰^^\mbfscrg^A^mathalpha^^MATHEMATICAL BOLD SCRIPT SMALL G 1D4F1^𝓱^^\mbfscrh^A^mathalpha^^MATHEMATICAL BOLD SCRIPT SMALL H 1D4F2^𝓲^^\mbfscri^A^mathalpha^^MATHEMATICAL BOLD SCRIPT SMALL I 1D4F3^𝓳^^\mbfscrj^A^mathalpha^^MATHEMATICAL BOLD SCRIPT SMALL J 1D4F4^𝓴^^\mbfscrk^A^mathalpha^^MATHEMATICAL BOLD SCRIPT SMALL K 1D4F5^𝓵^^\mbfscrl^A^mathalpha^^MATHEMATICAL BOLD SCRIPT SMALL L 1D4F6^𝓶^^\mbfscrm^A^mathalpha^^MATHEMATICAL BOLD SCRIPT SMALL M 1D4F7^𝓷^^\mbfscrn^A^mathalpha^^MATHEMATICAL BOLD SCRIPT SMALL N 1D4F8^𝓸^^\mbfscro^A^mathalpha^^MATHEMATICAL BOLD SCRIPT SMALL O 1D4F9^𝓹^^\mbfscrp^A^mathalpha^^MATHEMATICAL BOLD SCRIPT SMALL P 1D4FA^𝓺^^\mbfscrq^A^mathalpha^^MATHEMATICAL BOLD SCRIPT SMALL Q 1D4FB^𝓻^^\mbfscrr^A^mathalpha^^MATHEMATICAL BOLD SCRIPT SMALL R 1D4FC^𝓼^^\mbfscrs^A^mathalpha^^MATHEMATICAL BOLD SCRIPT SMALL S 1D4FD^𝓽^^\mbfscrt^A^mathalpha^^MATHEMATICAL BOLD SCRIPT SMALL T 1D4FE^𝓾^^\mbfscru^A^mathalpha^^MATHEMATICAL BOLD SCRIPT SMALL U 1D4FF^𝓿^^\mbfscrv^A^mathalpha^^MATHEMATICAL BOLD SCRIPT SMALL V 1D500^𝔀^^\mbfscrw^A^mathalpha^^MATHEMATICAL BOLD SCRIPT SMALL W 1D501^𝔁^^\mbfscrx^A^mathalpha^^MATHEMATICAL BOLD SCRIPT SMALL X 1D502^𝔂^^\mbfscry^A^mathalpha^^MATHEMATICAL BOLD SCRIPT SMALL Y 1D503^𝔃^^\mbfscrz^A^mathalpha^^MATHEMATICAL BOLD SCRIPT SMALL Z 1D504^𝔄^\mathfrak{A}^\mfrakA^A^mathalpha^eufrak^MATHEMATICAL FRAKTUR CAPITAL A 1D505^𝔅^\mathfrak{B}^\mfrakB^A^mathalpha^eufrak^MATHEMATICAL FRAKTUR CAPITAL B 1D507^𝔇^\mathfrak{D}^\mfrakD^A^mathalpha^eufrak^MATHEMATICAL FRAKTUR CAPITAL D 1D508^𝔈^\mathfrak{E}^\mfrakE^A^mathalpha^eufrak^MATHEMATICAL FRAKTUR CAPITAL E 1D509^𝔉^\mathfrak{F}^\mfrakF^A^mathalpha^eufrak^MATHEMATICAL FRAKTUR CAPITAL F 1D50A^𝔊^\mathfrak{G}^\mfrakG^A^mathalpha^eufrak^MATHEMATICAL FRAKTUR CAPITAL G 1D50D^𝔍^\mathfrak{J}^\mfrakJ^A^mathalpha^eufrak^MATHEMATICAL FRAKTUR CAPITAL J 1D50E^𝔎^\mathfrak{K}^\mfrakK^A^mathalpha^eufrak^MATHEMATICAL FRAKTUR CAPITAL K 1D50F^𝔏^\mathfrak{L}^\mfrakL^A^mathalpha^eufrak^MATHEMATICAL FRAKTUR CAPITAL L 1D510^𝔐^\mathfrak{M}^\mfrakM^A^mathalpha^eufrak^MATHEMATICAL FRAKTUR CAPITAL M 1D511^𝔑^\mathfrak{N}^\mfrakN^A^mathalpha^eufrak^MATHEMATICAL FRAKTUR CAPITAL N 1D512^𝔒^\mathfrak{O}^\mfrakO^A^mathalpha^eufrak^MATHEMATICAL FRAKTUR CAPITAL O 1D513^𝔓^\mathfrak{P}^\mfrakP^A^mathalpha^eufrak^MATHEMATICAL FRAKTUR CAPITAL P 1D514^𝔔^\mathfrak{Q}^\mfrakQ^A^mathalpha^eufrak^MATHEMATICAL FRAKTUR CAPITAL Q 1D516^𝔖^\mathfrak{S}^\mfrakS^A^mathalpha^eufrak^MATHEMATICAL FRAKTUR CAPITAL S 1D517^𝔗^\mathfrak{T}^\mfrakT^A^mathalpha^eufrak^MATHEMATICAL FRAKTUR CAPITAL T 1D518^𝔘^\mathfrak{U}^\mfrakU^A^mathalpha^eufrak^MATHEMATICAL FRAKTUR CAPITAL U 1D519^𝔙^\mathfrak{V}^\mfrakV^A^mathalpha^eufrak^MATHEMATICAL FRAKTUR CAPITAL V 1D51A^𝔚^\mathfrak{W}^\mfrakW^A^mathalpha^eufrak^MATHEMATICAL FRAKTUR CAPITAL W 1D51B^𝔛^\mathfrak{X}^\mfrakX^A^mathalpha^eufrak^MATHEMATICAL FRAKTUR CAPITAL X 1D51C^𝔜^\mathfrak{Y}^\mfrakY^A^mathalpha^eufrak^MATHEMATICAL FRAKTUR CAPITAL Y 1D51E^𝔞^\mathfrak{a}^\mfraka^A^mathalpha^eufrak^MATHEMATICAL FRAKTUR SMALL A 1D51F^𝔟^\mathfrak{b}^\mfrakb^A^mathalpha^eufrak^MATHEMATICAL FRAKTUR SMALL B 1D520^𝔠^\mathfrak{c}^\mfrakc^A^mathalpha^eufrak^MATHEMATICAL FRAKTUR SMALL C 1D521^𝔡^\mathfrak{d}^\mfrakd^A^mathalpha^eufrak^MATHEMATICAL FRAKTUR SMALL D 1D522^𝔢^\mathfrak{e}^\mfrake^A^mathalpha^eufrak^MATHEMATICAL FRAKTUR SMALL E 1D523^𝔣^\mathfrak{f}^\mfrakf^A^mathalpha^eufrak^MATHEMATICAL FRAKTUR SMALL F 1D524^𝔤^\mathfrak{g}^\mfrakg^A^mathalpha^eufrak^MATHEMATICAL FRAKTUR SMALL G 1D525^𝔥^\mathfrak{h}^\mfrakh^A^mathalpha^eufrak^MATHEMATICAL FRAKTUR SMALL H 1D526^𝔦^\mathfrak{i}^\mfraki^A^mathalpha^eufrak^MATHEMATICAL FRAKTUR SMALL I 1D527^𝔧^\mathfrak{j}^\mfrakj^A^mathalpha^eufrak^MATHEMATICAL FRAKTUR SMALL J 1D528^𝔨^\mathfrak{k}^\mfrakk^A^mathalpha^eufrak^MATHEMATICAL FRAKTUR SMALL K 1D529^𝔩^\mathfrak{l}^\mfrakl^A^mathalpha^eufrak^MATHEMATICAL FRAKTUR SMALL L 1D52A^𝔪^\mathfrak{m}^\mfrakm^A^mathalpha^eufrak^MATHEMATICAL FRAKTUR SMALL M 1D52B^𝔫^\mathfrak{n}^\mfrakn^A^mathalpha^eufrak^MATHEMATICAL FRAKTUR SMALL N 1D52C^𝔬^\mathfrak{o}^\mfrako^A^mathalpha^eufrak^MATHEMATICAL FRAKTUR SMALL O 1D52D^𝔭^\mathfrak{p}^\mfrakp^A^mathalpha^eufrak^MATHEMATICAL FRAKTUR SMALL P 1D52E^𝔮^\mathfrak{q}^\mfrakq^A^mathalpha^eufrak^MATHEMATICAL FRAKTUR SMALL Q 1D52F^𝔯^\mathfrak{r}^\mfrakr^A^mathalpha^eufrak^MATHEMATICAL FRAKTUR SMALL R 1D530^𝔰^\mathfrak{s}^\mfraks^A^mathalpha^eufrak^MATHEMATICAL FRAKTUR SMALL S 1D531^𝔱^\mathfrak{t}^\mfrakt^A^mathalpha^eufrak^MATHEMATICAL FRAKTUR SMALL T 1D532^𝔲^\mathfrak{u}^\mfraku^A^mathalpha^eufrak^MATHEMATICAL FRAKTUR SMALL U 1D533^𝔳^\mathfrak{v}^\mfrakv^A^mathalpha^eufrak^MATHEMATICAL FRAKTUR SMALL V 1D534^𝔴^\mathfrak{w}^\mfrakw^A^mathalpha^eufrak^MATHEMATICAL FRAKTUR SMALL W 1D535^𝔵^\mathfrak{x}^\mfrakx^A^mathalpha^eufrak^MATHEMATICAL FRAKTUR SMALL X 1D536^𝔶^\mathfrak{y}^\mfraky^A^mathalpha^eufrak^MATHEMATICAL FRAKTUR SMALL Y 1D537^𝔷^\mathfrak{z}^\mfrakz^A^mathalpha^eufrak^MATHEMATICAL FRAKTUR SMALL Z 1D538^𝔸^\mathbb{A}^\BbbA^A^mathalpha^mathbb^= \mathds{A} (dsfont), MATHEMATICAL DOUBLE-STRUCK CAPITAL A 1D539^𝔹^\mathbb{B}^\BbbB^A^mathalpha^mathbb^= \mathds{B} (dsfont), matMATHEMATICAL DOUBLE-STRUCK CAPITAL B 1D53B^𝔻^\mathbb{D}^\BbbD^A^mathalpha^mathbb^= \mathds{D} (dsfont), matMATHEMATICAL DOUBLE-STRUCK CAPITAL D 1D53C^𝔼^\mathbb{E}^\BbbE^A^mathalpha^mathbb^= \mathds{E} (dsfont), matMATHEMATICAL DOUBLE-STRUCK CAPITAL E 1D53D^𝔽^\mathbb{F}^\BbbF^A^mathalpha^mathbb^= \mathds{F} (dsfont), matMATHEMATICAL DOUBLE-STRUCK CAPITAL F 1D53E^𝔾^\mathbb{G}^\BbbG^A^mathalpha^mathbb^= \mathds{G} (dsfont), matMATHEMATICAL DOUBLE-STRUCK CAPITAL G 1D540^𝕀^\mathbb{I}^\BbbI^A^mathalpha^mathbb^= \mathds{I} (dsfont), matMATHEMATICAL DOUBLE-STRUCK CAPITAL I 1D541^𝕁^\mathbb{J}^\BbbJ^A^mathalpha^mathbb^= \mathds{J} (dsfont), matMATHEMATICAL DOUBLE-STRUCK CAPITAL J 1D542^𝕂^\mathbb{K}^\BbbK^A^mathalpha^mathbb^= \mathds{K} (dsfont), matMATHEMATICAL DOUBLE-STRUCK CAPITAL K 1D543^𝕃^\mathbb{L}^\BbbL^A^mathalpha^mathbb^= \mathds{L} (dsfont), matMATHEMATICAL DOUBLE-STRUCK CAPITAL L 1D544^𝕄^\mathbb{M}^\BbbM^A^mathalpha^mathbb^= \mathds{M} (dsfont), matMATHEMATICAL DOUBLE-STRUCK CAPITAL M 1D546^𝕆^\mathbb{O}^\BbbO^A^mathalpha^mathbb^= \mathds{O} (dsfont), matMATHEMATICAL DOUBLE-STRUCK CAPITAL O 1D54A^𝕊^\mathbb{S}^\BbbS^A^mathalpha^mathbb^= \mathds{S} (dsfont), matMATHEMATICAL DOUBLE-STRUCK CAPITAL S 1D54B^𝕋^\mathbb{T}^\BbbT^A^mathalpha^mathbb^= \mathds{T} (dsfont), matMATHEMATICAL DOUBLE-STRUCK CAPITAL T 1D54C^𝕌^\mathbb{U}^\BbbU^A^mathalpha^mathbb^= \mathds{U} (dsfont), matMATHEMATICAL DOUBLE-STRUCK CAPITAL U 1D54D^𝕍^\mathbb{V}^\BbbV^A^mathalpha^mathbb^= \mathds{V} (dsfont), matMATHEMATICAL DOUBLE-STRUCK CAPITAL V 1D54E^𝕎^\mathbb{W}^\BbbW^A^mathalpha^mathbb^= \mathds{W} (dsfont), matMATHEMATICAL DOUBLE-STRUCK CAPITAL W 1D54F^𝕏^\mathbb{X}^\BbbX^A^mathalpha^mathbb^= \mathds{X} (dsfont), matMATHEMATICAL DOUBLE-STRUCK CAPITAL X 1D550^𝕐^\mathbb{Y}^\BbbY^A^mathalpha^mathbb^= \mathds{Y} (dsfont), matMATHEMATICAL DOUBLE-STRUCK CAPITAL Y 1D552^𝕒^\mathbb{a}^\Bbba^A^mathalpha^bbold^MATHEMATICAL DOUBLE-STRUCK SMALL A 1D553^𝕓^\mathbb{b}^\Bbbb^A^mathalpha^bbold^MATHEMATICAL DOUBLE-STRUCK SMALL B 1D554^𝕔^\mathbb{c}^\Bbbc^A^mathalpha^bbold^MATHEMATICAL DOUBLE-STRUCK SMALL C 1D555^𝕕^\mathbb{d}^\Bbbd^A^mathalpha^bbold^MATHEMATICAL DOUBLE-STRUCK SMALL D 1D556^𝕖^\mathbb{e}^\Bbbe^A^mathalpha^bbold^MATHEMATICAL DOUBLE-STRUCK SMALL E 1D557^𝕗^\mathbb{f}^\Bbbf^A^mathalpha^bbold^MATHEMATICAL DOUBLE-STRUCK SMALL F 1D558^𝕘^\mathbb{g}^\Bbbg^A^mathalpha^bbold^MATHEMATICAL DOUBLE-STRUCK SMALL G 1D559^𝕙^\mathbb{h}^\Bbbh^A^mathalpha^bbold^MATHEMATICAL DOUBLE-STRUCK SMALL H 1D55A^𝕚^\mathbb{i}^\Bbbi^A^mathalpha^bbold^MATHEMATICAL DOUBLE-STRUCK SMALL I 1D55B^𝕛^\mathbb{j}^\Bbbj^A^mathalpha^bbold^MATHEMATICAL DOUBLE-STRUCK SMALL J 1D55C^𝕜^\mathbb{k}^\Bbbk^A^mathalpha^bbold fourier^= \Bbbk (amssymb), MATHEMATICAL DOUBLE-STRUCK SMALL K 1D55D^𝕝^\mathbb{l}^\Bbbl^A^mathalpha^bbold^MATHEMATICAL DOUBLE-STRUCK SMALL L 1D55E^𝕞^\mathbb{m}^\Bbbm^A^mathalpha^bbold^MATHEMATICAL DOUBLE-STRUCK SMALL M 1D55F^𝕟^\mathbb{n}^\Bbbn^A^mathalpha^bbold^MATHEMATICAL DOUBLE-STRUCK SMALL N 1D560^𝕠^\mathbb{o}^\Bbbo^A^mathalpha^bbold^MATHEMATICAL DOUBLE-STRUCK SMALL O 1D561^𝕡^\mathbb{p}^\Bbbp^A^mathalpha^bbold^MATHEMATICAL DOUBLE-STRUCK SMALL P 1D562^𝕢^\mathbb{q}^\Bbbq^A^mathalpha^bbold^MATHEMATICAL DOUBLE-STRUCK SMALL Q 1D563^𝕣^\mathbb{r}^\Bbbr^A^mathalpha^bbold^MATHEMATICAL DOUBLE-STRUCK SMALL R 1D564^𝕤^\mathbb{s}^\Bbbs^A^mathalpha^bbold^MATHEMATICAL DOUBLE-STRUCK SMALL S 1D565^𝕥^\mathbb{t}^\Bbbt^A^mathalpha^bbold^MATHEMATICAL DOUBLE-STRUCK SMALL T 1D566^𝕦^\mathbb{u}^\Bbbu^A^mathalpha^bbold^MATHEMATICAL DOUBLE-STRUCK SMALL U 1D567^𝕧^\mathbb{v}^\Bbbv^A^mathalpha^bbold^MATHEMATICAL DOUBLE-STRUCK SMALL V 1D568^𝕨^\mathbb{w}^\Bbbw^A^mathalpha^bbold^MATHEMATICAL DOUBLE-STRUCK SMALL W 1D569^𝕩^\mathbb{x}^\Bbbx^A^mathalpha^bbold^MATHEMATICAL DOUBLE-STRUCK SMALL X 1D56A^𝕪^\mathbb{y}^\Bbby^A^mathalpha^bbold^MATHEMATICAL DOUBLE-STRUCK SMALL Y 1D56B^𝕫^\mathbb{z}^\Bbbz^A^mathalpha^bbold^MATHEMATICAL DOUBLE-STRUCK SMALL Z 1D56C^𝕬^^\mbffrakA^A^mathalpha^^MATHEMATICAL BOLD FRAKTUR CAPITAL A 1D56D^𝕭^^\mbffrakB^A^mathalpha^^MATHEMATICAL BOLD FRAKTUR CAPITAL B 1D56E^𝕮^^\mbffrakC^A^mathalpha^^MATHEMATICAL BOLD FRAKTUR CAPITAL C 1D56F^𝕯^^\mbffrakD^A^mathalpha^^MATHEMATICAL BOLD FRAKTUR CAPITAL D 1D570^𝕰^^\mbffrakE^A^mathalpha^^MATHEMATICAL BOLD FRAKTUR CAPITAL E 1D571^𝕱^^\mbffrakF^A^mathalpha^^MATHEMATICAL BOLD FRAKTUR CAPITAL F 1D572^𝕲^^\mbffrakG^A^mathalpha^^MATHEMATICAL BOLD FRAKTUR CAPITAL G 1D573^𝕳^^\mbffrakH^A^mathalpha^^MATHEMATICAL BOLD FRAKTUR CAPITAL H 1D574^𝕴^^\mbffrakI^A^mathalpha^^MATHEMATICAL BOLD FRAKTUR CAPITAL I 1D575^𝕵^^\mbffrakJ^A^mathalpha^^MATHEMATICAL BOLD FRAKTUR CAPITAL J 1D576^𝕶^^\mbffrakK^A^mathalpha^^MATHEMATICAL BOLD FRAKTUR CAPITAL K 1D577^𝕷^^\mbffrakL^A^mathalpha^^MATHEMATICAL BOLD FRAKTUR CAPITAL L 1D578^𝕸^^\mbffrakM^A^mathalpha^^MATHEMATICAL BOLD FRAKTUR CAPITAL M 1D579^𝕹^^\mbffrakN^A^mathalpha^^MATHEMATICAL BOLD FRAKTUR CAPITAL N 1D57A^𝕺^^\mbffrakO^A^mathalpha^^MATHEMATICAL BOLD FRAKTUR CAPITAL O 1D57B^𝕻^^\mbffrakP^A^mathalpha^^MATHEMATICAL BOLD FRAKTUR CAPITAL P 1D57C^𝕼^^\mbffrakQ^A^mathalpha^^MATHEMATICAL BOLD FRAKTUR CAPITAL Q 1D57D^𝕽^^\mbffrakR^A^mathalpha^^MATHEMATICAL BOLD FRAKTUR CAPITAL R 1D57E^𝕾^^\mbffrakS^A^mathalpha^^MATHEMATICAL BOLD FRAKTUR CAPITAL S 1D57F^𝕿^^\mbffrakT^A^mathalpha^^MATHEMATICAL BOLD FRAKTUR CAPITAL T 1D580^𝖀^^\mbffrakU^A^mathalpha^^MATHEMATICAL BOLD FRAKTUR CAPITAL U 1D581^𝖁^^\mbffrakV^A^mathalpha^^MATHEMATICAL BOLD FRAKTUR CAPITAL V 1D582^𝖂^^\mbffrakW^A^mathalpha^^MATHEMATICAL BOLD FRAKTUR CAPITAL W 1D583^𝖃^^\mbffrakX^A^mathalpha^^MATHEMATICAL BOLD FRAKTUR CAPITAL X 1D584^𝖄^^\mbffrakY^A^mathalpha^^MATHEMATICAL BOLD FRAKTUR CAPITAL Y 1D585^𝖅^^\mbffrakZ^A^mathalpha^^MATHEMATICAL BOLD FRAKTUR CAPITAL Z 1D586^𝖆^^\mbffraka^A^mathalpha^^MATHEMATICAL BOLD FRAKTUR SMALL A 1D587^𝖇^^\mbffrakb^A^mathalpha^^MATHEMATICAL BOLD FRAKTUR SMALL B 1D588^𝖈^^\mbffrakc^A^mathalpha^^MATHEMATICAL BOLD FRAKTUR SMALL C 1D589^𝖉^^\mbffrakd^A^mathalpha^^MATHEMATICAL BOLD FRAKTUR SMALL D 1D58A^𝖊^^\mbffrake^A^mathalpha^^MATHEMATICAL BOLD FRAKTUR SMALL E 1D58B^𝖋^^\mbffrakf^A^mathalpha^^MATHEMATICAL BOLD FRAKTUR SMALL F 1D58C^𝖌^^\mbffrakg^A^mathalpha^^MATHEMATICAL BOLD FRAKTUR SMALL G 1D58D^𝖍^^\mbffrakh^A^mathalpha^^MATHEMATICAL BOLD FRAKTUR SMALL H 1D58E^𝖎^^\mbffraki^A^mathalpha^^MATHEMATICAL BOLD FRAKTUR SMALL I 1D58F^𝖏^^\mbffrakj^A^mathalpha^^MATHEMATICAL BOLD FRAKTUR SMALL J 1D590^𝖐^^\mbffrakk^A^mathalpha^^MATHEMATICAL BOLD FRAKTUR SMALL K 1D591^𝖑^^\mbffrakl^A^mathalpha^^MATHEMATICAL BOLD FRAKTUR SMALL L 1D592^𝖒^^\mbffrakm^A^mathalpha^^MATHEMATICAL BOLD FRAKTUR SMALL M 1D593^𝖓^^\mbffrakn^A^mathalpha^^MATHEMATICAL BOLD FRAKTUR SMALL N 1D594^𝖔^^\mbffrako^A^mathalpha^^MATHEMATICAL BOLD FRAKTUR SMALL O 1D595^𝖕^^\mbffrakp^A^mathalpha^^MATHEMATICAL BOLD FRAKTUR SMALL P 1D596^𝖖^^\mbffrakq^A^mathalpha^^MATHEMATICAL BOLD FRAKTUR SMALL Q 1D597^𝖗^^\mbffrakr^A^mathalpha^^MATHEMATICAL BOLD FRAKTUR SMALL R 1D598^𝖘^^\mbffraks^A^mathalpha^^MATHEMATICAL BOLD FRAKTUR SMALL S 1D599^𝖙^^\mbffrakt^A^mathalpha^^MATHEMATICAL BOLD FRAKTUR SMALL T 1D59A^𝖚^^\mbffraku^A^mathalpha^^MATHEMATICAL BOLD FRAKTUR SMALL U 1D59B^𝖛^^\mbffrakv^A^mathalpha^^MATHEMATICAL BOLD FRAKTUR SMALL V 1D59C^𝖜^^\mbffrakw^A^mathalpha^^MATHEMATICAL BOLD FRAKTUR SMALL W 1D59D^𝖝^^\mbffrakx^A^mathalpha^^MATHEMATICAL BOLD FRAKTUR SMALL X 1D59E^𝖞^^\mbffraky^A^mathalpha^^MATHEMATICAL BOLD FRAKTUR SMALL Y 1D59F^𝖟^^\mbffrakz^A^mathalpha^^MATHEMATICAL BOLD FRAKTUR SMALL Z 1D5A0^𝖠^\mathsf{A}^\msansA^A^mathalpha^^MATHEMATICAL SANS-SERIF CAPITAL A 1D5A1^𝖡^\mathsf{B}^\msansB^A^mathalpha^^MATHEMATICAL SANS-SERIF CAPITAL B 1D5A2^𝖢^\mathsf{C}^\msansC^A^mathalpha^^MATHEMATICAL SANS-SERIF CAPITAL C 1D5A3^𝖣^\mathsf{D}^\msansD^A^mathalpha^^MATHEMATICAL SANS-SERIF CAPITAL D 1D5A4^𝖤^\mathsf{E}^\msansE^A^mathalpha^^MATHEMATICAL SANS-SERIF CAPITAL E 1D5A5^𝖥^\mathsf{F}^\msansF^A^mathalpha^^MATHEMATICAL SANS-SERIF CAPITAL F 1D5A6^𝖦^\mathsf{G}^\msansG^A^mathalpha^^MATHEMATICAL SANS-SERIF CAPITAL G 1D5A7^𝖧^\mathsf{H}^\msansH^A^mathalpha^^MATHEMATICAL SANS-SERIF CAPITAL H 1D5A8^𝖨^\mathsf{I}^\msansI^A^mathalpha^^MATHEMATICAL SANS-SERIF CAPITAL I 1D5A9^𝖩^\mathsf{J}^\msansJ^A^mathalpha^^MATHEMATICAL SANS-SERIF CAPITAL J 1D5AA^𝖪^\mathsf{K}^\msansK^A^mathalpha^^MATHEMATICAL SANS-SERIF CAPITAL K 1D5AB^𝖫^\mathsf{L}^\msansL^A^mathalpha^^MATHEMATICAL SANS-SERIF CAPITAL L 1D5AC^𝖬^\mathsf{M}^\msansM^A^mathalpha^^MATHEMATICAL SANS-SERIF CAPITAL M 1D5AD^𝖭^\mathsf{N}^\msansN^A^mathalpha^^MATHEMATICAL SANS-SERIF CAPITAL N 1D5AE^𝖮^\mathsf{O}^\msansO^A^mathalpha^^MATHEMATICAL SANS-SERIF CAPITAL O 1D5AF^𝖯^\mathsf{P}^\msansP^A^mathalpha^^MATHEMATICAL SANS-SERIF CAPITAL P 1D5B0^𝖰^\mathsf{Q}^\msansQ^A^mathalpha^^MATHEMATICAL SANS-SERIF CAPITAL Q 1D5B1^𝖱^\mathsf{R}^\msansR^A^mathalpha^^MATHEMATICAL SANS-SERIF CAPITAL R 1D5B2^𝖲^\mathsf{S}^\msansS^A^mathalpha^^MATHEMATICAL SANS-SERIF CAPITAL S 1D5B3^𝖳^\mathsf{T}^\msansT^A^mathalpha^^MATHEMATICAL SANS-SERIF CAPITAL T 1D5B4^𝖴^\mathsf{U}^\msansU^A^mathalpha^^MATHEMATICAL SANS-SERIF CAPITAL U 1D5B5^𝖵^\mathsf{V}^\msansV^A^mathalpha^^MATHEMATICAL SANS-SERIF CAPITAL V 1D5B6^𝖶^\mathsf{W}^\msansW^A^mathalpha^^MATHEMATICAL SANS-SERIF CAPITAL W 1D5B7^𝖷^\mathsf{X}^\msansX^A^mathalpha^^MATHEMATICAL SANS-SERIF CAPITAL X 1D5B8^𝖸^\mathsf{Y}^\msansY^A^mathalpha^^MATHEMATICAL SANS-SERIF CAPITAL Y 1D5B9^𝖹^\mathsf{Z}^\msansZ^A^mathalpha^^MATHEMATICAL SANS-SERIF CAPITAL Z 1D5BA^𝖺^\mathsf{a}^\msansa^A^mathalpha^^MATHEMATICAL SANS-SERIF SMALL A 1D5BB^𝖻^\mathsf{b}^\msansb^A^mathalpha^^MATHEMATICAL SANS-SERIF SMALL B 1D5BC^𝖼^\mathsf{c}^\msansc^A^mathalpha^^MATHEMATICAL SANS-SERIF SMALL C 1D5BD^𝖽^\mathsf{d}^\msansd^A^mathalpha^^MATHEMATICAL SANS-SERIF SMALL D 1D5BE^𝖾^\mathsf{e}^\msanse^A^mathalpha^^MATHEMATICAL SANS-SERIF SMALL E 1D5BF^𝖿^\mathsf{f}^\msansf^A^mathalpha^^MATHEMATICAL SANS-SERIF SMALL F 1D5C0^𝗀^\mathsf{g}^\msansg^A^mathalpha^^MATHEMATICAL SANS-SERIF SMALL G 1D5C1^𝗁^\mathsf{h}^\msansh^A^mathalpha^^MATHEMATICAL SANS-SERIF SMALL H 1D5C2^𝗂^\mathsf{i}^\msansi^A^mathalpha^^MATHEMATICAL SANS-SERIF SMALL I 1D5C3^𝗃^\mathsf{j}^\msansj^A^mathalpha^^MATHEMATICAL SANS-SERIF SMALL J 1D5C4^𝗄^\mathsf{k}^\msansk^A^mathalpha^^MATHEMATICAL SANS-SERIF SMALL K 1D5C5^𝗅^\mathsf{l}^\msansl^A^mathalpha^^MATHEMATICAL SANS-SERIF SMALL L 1D5C6^𝗆^\mathsf{m}^\msansm^A^mathalpha^^MATHEMATICAL SANS-SERIF SMALL M 1D5C7^𝗇^\mathsf{n}^\msansn^A^mathalpha^^MATHEMATICAL SANS-SERIF SMALL N 1D5C8^𝗈^\mathsf{o}^\msanso^A^mathalpha^^MATHEMATICAL SANS-SERIF SMALL O 1D5C9^𝗉^\mathsf{p}^\msansp^A^mathalpha^^MATHEMATICAL SANS-SERIF SMALL P 1D5CA^𝗊^\mathsf{q}^\msansq^A^mathalpha^^MATHEMATICAL SANS-SERIF SMALL Q 1D5CB^𝗋^\mathsf{r}^\msansr^A^mathalpha^^MATHEMATICAL SANS-SERIF SMALL R 1D5CC^𝗌^\mathsf{s}^\msanss^A^mathalpha^^MATHEMATICAL SANS-SERIF SMALL S 1D5CD^𝗍^\mathsf{t}^\msanst^A^mathalpha^^MATHEMATICAL SANS-SERIF SMALL T 1D5CE^𝗎^\mathsf{u}^\msansu^A^mathalpha^^MATHEMATICAL SANS-SERIF SMALL U 1D5CF^𝗏^\mathsf{v}^\msansv^A^mathalpha^^MATHEMATICAL SANS-SERIF SMALL V 1D5D0^𝗐^\mathsf{w}^\msansw^A^mathalpha^^MATHEMATICAL SANS-SERIF SMALL W 1D5D1^𝗑^\mathsf{x}^\msansx^A^mathalpha^^MATHEMATICAL SANS-SERIF SMALL X 1D5D2^𝗒^\mathsf{y}^\msansy^A^mathalpha^^MATHEMATICAL SANS-SERIF SMALL Y 1D5D3^𝗓^\mathsf{z}^\msansz^A^mathalpha^^MATHEMATICAL SANS-SERIF SMALL Z 1D5D4^𝗔^\mathsfbf{A}^\mbfsansA^A^mathalpha^mathsfbf^MATHEMATICAL SANS-SERIF BOLD CAPITAL A 1D5D5^𝗕^\mathsfbf{B}^\mbfsansB^A^mathalpha^mathsfbf^MATHEMATICAL SANS-SERIF BOLD CAPITAL B 1D5D6^𝗖^\mathsfbf{C}^\mbfsansC^A^mathalpha^mathsfbf^MATHEMATICAL SANS-SERIF BOLD CAPITAL C 1D5D7^𝗗^\mathsfbf{D}^\mbfsansD^A^mathalpha^mathsfbf^MATHEMATICAL SANS-SERIF BOLD CAPITAL D 1D5D8^𝗘^\mathsfbf{E}^\mbfsansE^A^mathalpha^mathsfbf^MATHEMATICAL SANS-SERIF BOLD CAPITAL E 1D5D9^𝗙^\mathsfbf{F}^\mbfsansF^A^mathalpha^mathsfbf^MATHEMATICAL SANS-SERIF BOLD CAPITAL F 1D5DA^𝗚^\mathsfbf{G}^\mbfsansG^A^mathalpha^mathsfbf^MATHEMATICAL SANS-SERIF BOLD CAPITAL G 1D5DB^𝗛^\mathsfbf{H}^\mbfsansH^A^mathalpha^mathsfbf^MATHEMATICAL SANS-SERIF BOLD CAPITAL H 1D5DC^𝗜^\mathsfbf{I}^\mbfsansI^A^mathalpha^mathsfbf^MATHEMATICAL SANS-SERIF BOLD CAPITAL I 1D5DD^𝗝^\mathsfbf{J}^\mbfsansJ^A^mathalpha^mathsfbf^MATHEMATICAL SANS-SERIF BOLD CAPITAL J 1D5DE^𝗞^\mathsfbf{K}^\mbfsansK^A^mathalpha^mathsfbf^MATHEMATICAL SANS-SERIF BOLD CAPITAL K 1D5DF^𝗟^\mathsfbf{L}^\mbfsansL^A^mathalpha^mathsfbf^MATHEMATICAL SANS-SERIF BOLD CAPITAL L 1D5E0^𝗠^\mathsfbf{M}^\mbfsansM^A^mathalpha^mathsfbf^MATHEMATICAL SANS-SERIF BOLD CAPITAL M 1D5E1^𝗡^\mathsfbf{N}^\mbfsansN^A^mathalpha^mathsfbf^MATHEMATICAL SANS-SERIF BOLD CAPITAL N 1D5E2^𝗢^\mathsfbf{O}^\mbfsansO^A^mathalpha^mathsfbf^MATHEMATICAL SANS-SERIF BOLD CAPITAL O 1D5E3^𝗣^\mathsfbf{P}^\mbfsansP^A^mathalpha^mathsfbf^MATHEMATICAL SANS-SERIF BOLD CAPITAL P 1D5E4^𝗤^\mathsfbf{Q}^\mbfsansQ^A^mathalpha^mathsfbf^MATHEMATICAL SANS-SERIF BOLD CAPITAL Q 1D5E5^𝗥^\mathsfbf{R}^\mbfsansR^A^mathalpha^mathsfbf^MATHEMATICAL SANS-SERIF BOLD CAPITAL R 1D5E6^𝗦^\mathsfbf{S}^\mbfsansS^A^mathalpha^mathsfbf^MATHEMATICAL SANS-SERIF BOLD CAPITAL S 1D5E7^𝗧^\mathsfbf{T}^\mbfsansT^A^mathalpha^mathsfbf^MATHEMATICAL SANS-SERIF BOLD CAPITAL T 1D5E8^𝗨^\mathsfbf{U}^\mbfsansU^A^mathalpha^mathsfbf^MATHEMATICAL SANS-SERIF BOLD CAPITAL U 1D5E9^𝗩^\mathsfbf{V}^\mbfsansV^A^mathalpha^mathsfbf^MATHEMATICAL SANS-SERIF BOLD CAPITAL V 1D5EA^𝗪^\mathsfbf{W}^\mbfsansW^A^mathalpha^mathsfbf^MATHEMATICAL SANS-SERIF BOLD CAPITAL W 1D5EB^𝗫^\mathsfbf{X}^\mbfsansX^A^mathalpha^mathsfbf^MATHEMATICAL SANS-SERIF BOLD CAPITAL X 1D5EC^𝗬^\mathsfbf{Y}^\mbfsansY^A^mathalpha^mathsfbf^MATHEMATICAL SANS-SERIF BOLD CAPITAL Y 1D5ED^𝗭^\mathsfbf{Z}^\mbfsansZ^A^mathalpha^mathsfbf^MATHEMATICAL SANS-SERIF BOLD CAPITAL Z 1D5EE^𝗮^\mathsfbf{a}^\mbfsansa^A^mathalpha^mathsfbf^MATHEMATICAL SANS-SERIF BOLD SMALL A 1D5EF^𝗯^\mathsfbf{b}^\mbfsansb^A^mathalpha^mathsfbf^MATHEMATICAL SANS-SERIF BOLD SMALL B 1D5F0^𝗰^\mathsfbf{c}^\mbfsansc^A^mathalpha^mathsfbf^MATHEMATICAL SANS-SERIF BOLD SMALL C 1D5F1^𝗱^\mathsfbf{d}^\mbfsansd^A^mathalpha^mathsfbf^MATHEMATICAL SANS-SERIF BOLD SMALL D 1D5F2^𝗲^\mathsfbf{e}^\mbfsanse^A^mathalpha^mathsfbf^MATHEMATICAL SANS-SERIF BOLD SMALL E 1D5F3^𝗳^\mathsfbf{f}^\mbfsansf^A^mathalpha^mathsfbf^MATHEMATICAL SANS-SERIF BOLD SMALL F 1D5F4^𝗴^\mathsfbf{g}^\mbfsansg^A^mathalpha^mathsfbf^MATHEMATICAL SANS-SERIF BOLD SMALL G 1D5F5^𝗵^\mathsfbf{h}^\mbfsansh^A^mathalpha^mathsfbf^MATHEMATICAL SANS-SERIF BOLD SMALL H 1D5F6^𝗶^\mathsfbf{i}^\mbfsansi^A^mathalpha^mathsfbf^MATHEMATICAL SANS-SERIF BOLD SMALL I 1D5F7^𝗷^\mathsfbf{j}^\mbfsansj^A^mathalpha^mathsfbf^MATHEMATICAL SANS-SERIF BOLD SMALL J 1D5F8^𝗸^\mathsfbf{k}^\mbfsansk^A^mathalpha^mathsfbf^MATHEMATICAL SANS-SERIF BOLD SMALL K 1D5F9^𝗹^\mathsfbf{l}^\mbfsansl^A^mathalpha^mathsfbf^MATHEMATICAL SANS-SERIF BOLD SMALL L 1D5FA^𝗺^\mathsfbf{m}^\mbfsansm^A^mathalpha^mathsfbf^MATHEMATICAL SANS-SERIF BOLD SMALL M 1D5FB^𝗻^\mathsfbf{n}^\mbfsansn^A^mathalpha^mathsfbf^MATHEMATICAL SANS-SERIF BOLD SMALL N 1D5FC^𝗼^\mathsfbf{o}^\mbfsanso^A^mathalpha^mathsfbf^MATHEMATICAL SANS-SERIF BOLD SMALL O 1D5FD^𝗽^\mathsfbf{p}^\mbfsansp^A^mathalpha^mathsfbf^MATHEMATICAL SANS-SERIF BOLD SMALL P 1D5FE^𝗾^\mathsfbf{q}^\mbfsansq^A^mathalpha^mathsfbf^MATHEMATICAL SANS-SERIF BOLD SMALL Q 1D5FF^𝗿^\mathsfbf{r}^\mbfsansr^A^mathalpha^mathsfbf^MATHEMATICAL SANS-SERIF BOLD SMALL R 1D600^𝘀^\mathsfbf{s}^\mbfsanss^A^mathalpha^mathsfbf^MATHEMATICAL SANS-SERIF BOLD SMALL S 1D601^𝘁^\mathsfbf{t}^\mbfsanst^A^mathalpha^mathsfbf^MATHEMATICAL SANS-SERIF BOLD SMALL T 1D602^𝘂^\mathsfbf{u}^\mbfsansu^A^mathalpha^mathsfbf^MATHEMATICAL SANS-SERIF BOLD SMALL U 1D603^𝘃^\mathsfbf{v}^\mbfsansv^A^mathalpha^mathsfbf^MATHEMATICAL SANS-SERIF BOLD SMALL V 1D604^𝘄^\mathsfbf{w}^\mbfsansw^A^mathalpha^mathsfbf^MATHEMATICAL SANS-SERIF BOLD SMALL W 1D605^𝘅^\mathsfbf{x}^\mbfsansx^A^mathalpha^mathsfbf^MATHEMATICAL SANS-SERIF BOLD SMALL X 1D606^𝘆^\mathsfbf{y}^\mbfsansy^A^mathalpha^mathsfbf^MATHEMATICAL SANS-SERIF BOLD SMALL Y 1D607^𝘇^\mathsfbf{z}^\mbfsansz^A^mathalpha^mathsfbf^MATHEMATICAL SANS-SERIF BOLD SMALL Z 1D608^𝘈^\mathsfit{A}^\mitsansA^A^mathalpha^omlmathsfit^MATHEMATICAL SANS-SERIF ITALIC CAPITAL A 1D609^𝘉^\mathsfit{B}^\mitsansB^A^mathalpha^omlmathsfit^MATHEMATICAL SANS-SERIF ITALIC CAPITAL B 1D60A^𝘊^\mathsfit{C}^\mitsansC^A^mathalpha^omlmathsfit^MATHEMATICAL SANS-SERIF ITALIC CAPITAL C 1D60B^𝘋^\mathsfit{D}^\mitsansD^A^mathalpha^omlmathsfit^MATHEMATICAL SANS-SERIF ITALIC CAPITAL D 1D60C^𝘌^\mathsfit{E}^\mitsansE^A^mathalpha^omlmathsfit^MATHEMATICAL SANS-SERIF ITALIC CAPITAL E 1D60D^𝘍^\mathsfit{F}^\mitsansF^A^mathalpha^omlmathsfit^MATHEMATICAL SANS-SERIF ITALIC CAPITAL F 1D60E^𝘎^\mathsfit{G}^\mitsansG^A^mathalpha^omlmathsfit^MATHEMATICAL SANS-SERIF ITALIC CAPITAL G 1D60F^𝘏^\mathsfit{H}^\mitsansH^A^mathalpha^omlmathsfit^MATHEMATICAL SANS-SERIF ITALIC CAPITAL H 1D610^𝘐^\mathsfit{I}^\mitsansI^A^mathalpha^omlmathsfit^MATHEMATICAL SANS-SERIF ITALIC CAPITAL I 1D611^𝘑^\mathsfit{J}^\mitsansJ^A^mathalpha^omlmathsfit^MATHEMATICAL SANS-SERIF ITALIC CAPITAL J 1D612^𝘒^\mathsfit{K}^\mitsansK^A^mathalpha^omlmathsfit^MATHEMATICAL SANS-SERIF ITALIC CAPITAL K 1D613^𝘓^\mathsfit{L}^\mitsansL^A^mathalpha^omlmathsfit^MATHEMATICAL SANS-SERIF ITALIC CAPITAL L 1D614^𝘔^\mathsfit{M}^\mitsansM^A^mathalpha^omlmathsfit^MATHEMATICAL SANS-SERIF ITALIC CAPITAL M 1D615^𝘕^\mathsfit{N}^\mitsansN^A^mathalpha^omlmathsfit^MATHEMATICAL SANS-SERIF ITALIC CAPITAL N 1D616^𝘖^\mathsfit{O}^\mitsansO^A^mathalpha^omlmathsfit^MATHEMATICAL SANS-SERIF ITALIC CAPITAL O 1D617^𝘗^\mathsfit{P}^\mitsansP^A^mathalpha^omlmathsfit^MATHEMATICAL SANS-SERIF ITALIC CAPITAL P 1D618^𝘘^\mathsfit{Q}^\mitsansQ^A^mathalpha^omlmathsfit^MATHEMATICAL SANS-SERIF ITALIC CAPITAL Q 1D619^𝘙^\mathsfit{R}^\mitsansR^A^mathalpha^omlmathsfit^MATHEMATICAL SANS-SERIF ITALIC CAPITAL R 1D61A^𝘚^\mathsfit{S}^\mitsansS^A^mathalpha^omlmathsfit^MATHEMATICAL SANS-SERIF ITALIC CAPITAL S 1D61B^𝘛^\mathsfit{T}^\mitsansT^A^mathalpha^omlmathsfit^MATHEMATICAL SANS-SERIF ITALIC CAPITAL T 1D61C^𝘜^\mathsfit{U}^\mitsansU^A^mathalpha^omlmathsfit^MATHEMATICAL SANS-SERIF ITALIC CAPITAL U 1D61D^𝘝^\mathsfit{V}^\mitsansV^A^mathalpha^omlmathsfit^MATHEMATICAL SANS-SERIF ITALIC CAPITAL V 1D61E^𝘞^\mathsfit{W}^\mitsansW^A^mathalpha^omlmathsfit^MATHEMATICAL SANS-SERIF ITALIC CAPITAL W 1D61F^𝘟^\mathsfit{X}^\mitsansX^A^mathalpha^omlmathsfit^MATHEMATICAL SANS-SERIF ITALIC CAPITAL X 1D620^𝘠^\mathsfit{Y}^\mitsansY^A^mathalpha^omlmathsfit^MATHEMATICAL SANS-SERIF ITALIC CAPITAL Y 1D621^𝘡^\mathsfit{Z}^\mitsansZ^A^mathalpha^omlmathsfit^MATHEMATICAL SANS-SERIF ITALIC CAPITAL Z 1D622^𝘢^\mathsfit{a}^\mitsansa^A^mathalpha^omlmathsfit^MATHEMATICAL SANS-SERIF ITALIC SMALL A 1D623^𝘣^\mathsfit{b}^\mitsansb^A^mathalpha^omlmathsfit^MATHEMATICAL SANS-SERIF ITALIC SMALL B 1D624^𝘤^\mathsfit{c}^\mitsansc^A^mathalpha^omlmathsfit^MATHEMATICAL SANS-SERIF ITALIC SMALL C 1D625^𝘥^\mathsfit{d}^\mitsansd^A^mathalpha^omlmathsfit^MATHEMATICAL SANS-SERIF ITALIC SMALL D 1D626^𝘦^\mathsfit{e}^\mitsanse^A^mathalpha^omlmathsfit^MATHEMATICAL SANS-SERIF ITALIC SMALL E 1D627^𝘧^\mathsfit{f}^\mitsansf^A^mathalpha^omlmathsfit^MATHEMATICAL SANS-SERIF ITALIC SMALL F 1D628^𝘨^\mathsfit{g}^\mitsansg^A^mathalpha^omlmathsfit^MATHEMATICAL SANS-SERIF ITALIC SMALL G 1D629^𝘩^\mathsfit{h}^\mitsansh^A^mathalpha^omlmathsfit^MATHEMATICAL SANS-SERIF ITALIC SMALL H 1D62A^𝘪^\mathsfit{i}^\mitsansi^A^mathalpha^omlmathsfit^MATHEMATICAL SANS-SERIF ITALIC SMALL I 1D62B^𝘫^\mathsfit{j}^\mitsansj^A^mathalpha^omlmathsfit^MATHEMATICAL SANS-SERIF ITALIC SMALL J 1D62C^𝘬^\mathsfit{k}^\mitsansk^A^mathalpha^omlmathsfit^MATHEMATICAL SANS-SERIF ITALIC SMALL K 1D62D^𝘭^\mathsfit{l}^\mitsansl^A^mathalpha^omlmathsfit^MATHEMATICAL SANS-SERIF ITALIC SMALL L 1D62E^𝘮^\mathsfit{m}^\mitsansm^A^mathalpha^omlmathsfit^MATHEMATICAL SANS-SERIF ITALIC SMALL M 1D62F^𝘯^\mathsfit{n}^\mitsansn^A^mathalpha^omlmathsfit^MATHEMATICAL SANS-SERIF ITALIC SMALL N 1D630^𝘰^\mathsfit{o}^\mitsanso^A^mathalpha^omlmathsfit^MATHEMATICAL SANS-SERIF ITALIC SMALL O 1D631^𝘱^\mathsfit{p}^\mitsansp^A^mathalpha^omlmathsfit^MATHEMATICAL SANS-SERIF ITALIC SMALL P 1D632^𝘲^\mathsfit{q}^\mitsansq^A^mathalpha^omlmathsfit^MATHEMATICAL SANS-SERIF ITALIC SMALL Q 1D633^𝘳^\mathsfit{r}^\mitsansr^A^mathalpha^omlmathsfit^MATHEMATICAL SANS-SERIF ITALIC SMALL R 1D634^𝘴^\mathsfit{s}^\mitsanss^A^mathalpha^omlmathsfit^MATHEMATICAL SANS-SERIF ITALIC SMALL S 1D635^𝘵^\mathsfit{t}^\mitsanst^A^mathalpha^omlmathsfit^MATHEMATICAL SANS-SERIF ITALIC SMALL T 1D636^𝘶^\mathsfit{u}^\mitsansu^A^mathalpha^omlmathsfit^MATHEMATICAL SANS-SERIF ITALIC SMALL U 1D637^𝘷^\mathsfit{v}^\mitsansv^A^mathalpha^omlmathsfit^MATHEMATICAL SANS-SERIF ITALIC SMALL V 1D638^𝘸^\mathsfit{w}^\mitsansw^A^mathalpha^omlmathsfit^MATHEMATICAL SANS-SERIF ITALIC SMALL W 1D639^𝘹^\mathsfit{x}^\mitsansx^A^mathalpha^omlmathsfit^MATHEMATICAL SANS-SERIF ITALIC SMALL X 1D63A^𝘺^\mathsfit{y}^\mitsansy^A^mathalpha^omlmathsfit^MATHEMATICAL SANS-SERIF ITALIC SMALL Y 1D63B^𝘻^\mathsfit{z}^\mitsansz^A^mathalpha^omlmathsfit^MATHEMATICAL SANS-SERIF ITALIC SMALL Z 1D63C^𝘼^\mathsfbfit{A}^\mbfitsansA^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL A 1D63D^𝘽^\mathsfbfit{B}^\mbfitsansB^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL B 1D63E^𝘾^\mathsfbfit{C}^\mbfitsansC^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL C 1D63F^𝘿^\mathsfbfit{D}^\mbfitsansD^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL D 1D640^𝙀^\mathsfbfit{E}^\mbfitsansE^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL E 1D641^𝙁^\mathsfbfit{F}^\mbfitsansF^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL F 1D642^𝙂^\mathsfbfit{G}^\mbfitsansG^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL G 1D643^𝙃^\mathsfbfit{H}^\mbfitsansH^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL H 1D644^𝙄^\mathsfbfit{I}^\mbfitsansI^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL I 1D645^𝙅^\mathsfbfit{J}^\mbfitsansJ^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL J 1D646^𝙆^\mathsfbfit{K}^\mbfitsansK^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL K 1D647^𝙇^\mathsfbfit{L}^\mbfitsansL^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL L 1D648^𝙈^\mathsfbfit{M}^\mbfitsansM^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL M 1D649^𝙉^\mathsfbfit{N}^\mbfitsansN^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL N 1D64A^𝙊^\mathsfbfit{O}^\mbfitsansO^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL O 1D64B^𝙋^\mathsfbfit{P}^\mbfitsansP^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL P 1D64C^𝙌^\mathsfbfit{Q}^\mbfitsansQ^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Q 1D64D^𝙍^\mathsfbfit{R}^\mbfitsansR^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL R 1D64E^𝙎^\mathsfbfit{S}^\mbfitsansS^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL S 1D64F^𝙏^\mathsfbfit{T}^\mbfitsansT^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL T 1D650^𝙐^\mathsfbfit{U}^\mbfitsansU^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL U 1D651^𝙑^\mathsfbfit{V}^\mbfitsansV^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL V 1D652^𝙒^\mathsfbfit{W}^\mbfitsansW^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL W 1D653^𝙓^\mathsfbfit{X}^\mbfitsansX^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL X 1D654^𝙔^\mathsfbfit{Y}^\mbfitsansY^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Y 1D655^𝙕^\mathsfbfit{Z}^\mbfitsansZ^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Z 1D656^𝙖^\mathsfbfit{a}^\mbfitsansa^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL A 1D657^𝙗^\mathsfbfit{b}^\mbfitsansb^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL B 1D658^𝙘^\mathsfbfit{c}^\mbfitsansc^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL C 1D659^𝙙^\mathsfbfit{d}^\mbfitsansd^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL D 1D65A^𝙚^\mathsfbfit{e}^\mbfitsanse^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL E 1D65B^𝙛^\mathsfbfit{f}^\mbfitsansf^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL F 1D65C^𝙜^\mathsfbfit{g}^\mbfitsansg^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL G 1D65D^𝙝^\mathsfbfit{h}^\mbfitsansh^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL H 1D65E^𝙞^\mathsfbfit{i}^\mbfitsansi^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL I 1D65F^𝙟^\mathsfbfit{j}^\mbfitsansj^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL J 1D660^𝙠^\mathsfbfit{k}^\mbfitsansk^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL K 1D661^𝙡^\mathsfbfit{l}^\mbfitsansl^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL L 1D662^𝙢^\mathsfbfit{m}^\mbfitsansm^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL M 1D663^𝙣^\mathsfbfit{n}^\mbfitsansn^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL N 1D664^𝙤^\mathsfbfit{o}^\mbfitsanso^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL O 1D665^𝙥^\mathsfbfit{p}^\mbfitsansp^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL P 1D666^𝙦^\mathsfbfit{q}^\mbfitsansq^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Q 1D667^𝙧^\mathsfbfit{r}^\mbfitsansr^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL R 1D668^𝙨^\mathsfbfit{s}^\mbfitsanss^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL S 1D669^𝙩^\mathsfbfit{t}^\mbfitsanst^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL T 1D66A^𝙪^\mathsfbfit{u}^\mbfitsansu^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL U 1D66B^𝙫^\mathsfbfit{v}^\mbfitsansv^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL V 1D66C^𝙬^\mathsfbfit{w}^\mbfitsansw^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL W 1D66D^𝙭^\mathsfbfit{x}^\mbfitsansx^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL X 1D66E^𝙮^\mathsfbfit{y}^\mbfitsansy^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Y 1D66F^𝙯^\mathsfbfit{z}^\mbfitsansz^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Z 1D670^𝙰^\mathtt{A}^\mttA^A^mathalpha^^MATHEMATICAL MONOSPACE CAPITAL A 1D671^𝙱^\mathtt{B}^\mttB^A^mathalpha^^MATHEMATICAL MONOSPACE CAPITAL B 1D672^𝙲^\mathtt{C}^\mttC^A^mathalpha^^MATHEMATICAL MONOSPACE CAPITAL C 1D673^𝙳^\mathtt{D}^\mttD^A^mathalpha^^MATHEMATICAL MONOSPACE CAPITAL D 1D674^𝙴^\mathtt{E}^\mttE^A^mathalpha^^MATHEMATICAL MONOSPACE CAPITAL E 1D675^𝙵^\mathtt{F}^\mttF^A^mathalpha^^MATHEMATICAL MONOSPACE CAPITAL F 1D676^𝙶^\mathtt{G}^\mttG^A^mathalpha^^MATHEMATICAL MONOSPACE CAPITAL G 1D677^𝙷^\mathtt{H}^\mttH^A^mathalpha^^MATHEMATICAL MONOSPACE CAPITAL H 1D678^𝙸^\mathtt{I}^\mttI^A^mathalpha^^MATHEMATICAL MONOSPACE CAPITAL I 1D679^𝙹^\mathtt{J}^\mttJ^A^mathalpha^^MATHEMATICAL MONOSPACE CAPITAL J 1D67A^𝙺^\mathtt{K}^\mttK^A^mathalpha^^MATHEMATICAL MONOSPACE CAPITAL K 1D67B^𝙻^\mathtt{L}^\mttL^A^mathalpha^^MATHEMATICAL MONOSPACE CAPITAL L 1D67C^𝙼^\mathtt{M}^\mttM^A^mathalpha^^MATHEMATICAL MONOSPACE CAPITAL M 1D67D^𝙽^\mathtt{N}^\mttN^A^mathalpha^^MATHEMATICAL MONOSPACE CAPITAL N 1D67E^𝙾^\mathtt{O}^\mttO^A^mathalpha^^MATHEMATICAL MONOSPACE CAPITAL O 1D67F^𝙿^\mathtt{P}^\mttP^A^mathalpha^^MATHEMATICAL MONOSPACE CAPITAL P 1D680^𝚀^\mathtt{Q}^\mttQ^A^mathalpha^^MATHEMATICAL MONOSPACE CAPITAL Q 1D681^𝚁^\mathtt{R}^\mttR^A^mathalpha^^MATHEMATICAL MONOSPACE CAPITAL R 1D682^𝚂^\mathtt{S}^\mttS^A^mathalpha^^MATHEMATICAL MONOSPACE CAPITAL S 1D683^𝚃^\mathtt{T}^\mttT^A^mathalpha^^MATHEMATICAL MONOSPACE CAPITAL T 1D684^𝚄^\mathtt{U}^\mttU^A^mathalpha^^MATHEMATICAL MONOSPACE CAPITAL U 1D685^𝚅^\mathtt{V}^\mttV^A^mathalpha^^MATHEMATICAL MONOSPACE CAPITAL V 1D686^𝚆^\mathtt{W}^\mttW^A^mathalpha^^MATHEMATICAL MONOSPACE CAPITAL W 1D687^𝚇^\mathtt{X}^\mttX^A^mathalpha^^MATHEMATICAL MONOSPACE CAPITAL X 1D688^𝚈^\mathtt{Y}^\mttY^A^mathalpha^^MATHEMATICAL MONOSPACE CAPITAL Y 1D689^𝚉^\mathtt{Z}^\mttZ^A^mathalpha^^MATHEMATICAL MONOSPACE CAPITAL Z 1D68A^𝚊^\mathtt{a}^\mtta^A^mathalpha^^MATHEMATICAL MONOSPACE SMALL A 1D68B^𝚋^\mathtt{b}^\mttb^A^mathalpha^^MATHEMATICAL MONOSPACE SMALL B 1D68C^𝚌^\mathtt{c}^\mttc^A^mathalpha^^MATHEMATICAL MONOSPACE SMALL C 1D68D^𝚍^\mathtt{d}^\mttd^A^mathalpha^^MATHEMATICAL MONOSPACE SMALL D 1D68E^𝚎^\mathtt{e}^\mtte^A^mathalpha^^MATHEMATICAL MONOSPACE SMALL E 1D68F^𝚏^\mathtt{f}^\mttf^A^mathalpha^^MATHEMATICAL MONOSPACE SMALL F 1D690^𝚐^\mathtt{g}^\mttg^A^mathalpha^^MATHEMATICAL MONOSPACE SMALL G 1D691^𝚑^\mathtt{h}^\mtth^A^mathalpha^^MATHEMATICAL MONOSPACE SMALL H 1D692^𝚒^\mathtt{i}^\mtti^A^mathalpha^^MATHEMATICAL MONOSPACE SMALL I 1D693^𝚓^\mathtt{j}^\mttj^A^mathalpha^^MATHEMATICAL MONOSPACE SMALL J 1D694^𝚔^\mathtt{k}^\mttk^A^mathalpha^^MATHEMATICAL MONOSPACE SMALL K 1D695^𝚕^\mathtt{l}^\mttl^A^mathalpha^^MATHEMATICAL MONOSPACE SMALL L 1D696^𝚖^\mathtt{m}^\mttm^A^mathalpha^^MATHEMATICAL MONOSPACE SMALL M 1D697^𝚗^\mathtt{n}^\mttn^A^mathalpha^^MATHEMATICAL MONOSPACE SMALL N 1D698^𝚘^\mathtt{o}^\mtto^A^mathalpha^^MATHEMATICAL MONOSPACE SMALL O 1D699^𝚙^\mathtt{p}^\mttp^A^mathalpha^^MATHEMATICAL MONOSPACE SMALL P 1D69A^𝚚^\mathtt{q}^\mttq^A^mathalpha^^MATHEMATICAL MONOSPACE SMALL Q 1D69B^𝚛^\mathtt{r}^\mttr^A^mathalpha^^MATHEMATICAL MONOSPACE SMALL R 1D69C^𝚜^\mathtt{s}^\mtts^A^mathalpha^^MATHEMATICAL MONOSPACE SMALL S 1D69D^𝚝^\mathtt{t}^\mttt^A^mathalpha^^MATHEMATICAL MONOSPACE SMALL T 1D69E^𝚞^\mathtt{u}^\mttu^A^mathalpha^^MATHEMATICAL MONOSPACE SMALL U 1D69F^𝚟^\mathtt{v}^\mttv^A^mathalpha^^MATHEMATICAL MONOSPACE SMALL V 1D6A0^𝚠^\mathtt{w}^\mttw^A^mathalpha^^MATHEMATICAL MONOSPACE SMALL W 1D6A1^𝚡^\mathtt{x}^\mttx^A^mathalpha^^MATHEMATICAL MONOSPACE SMALL X 1D6A2^𝚢^\mathtt{y}^\mtty^A^mathalpha^^MATHEMATICAL MONOSPACE SMALL Y 1D6A3^𝚣^\mathtt{z}^\mttz^A^mathalpha^^MATHEMATICAL MONOSPACE SMALL Z 1D6A4^𝚤^\imath^\imath^A^mathalpha^^MATHEMATICAL ITALIC SMALL DOTLESS I 1D6A5^𝚥^\jmath^\jmath^A^mathalpha^^MATHEMATICAL ITALIC SMALL DOTLESS J 1D6A8^𝚨^^\mbfAlpha^A^mathalpha^^MATHEMATICAL BOLD CAPITAL ALPHA 1D6A9^𝚩^^\mbfBeta^A^mathalpha^^MATHEMATICAL BOLD CAPITAL BETA 1D6AA^𝚪^\mathbf{\Gamma}^\mbfGamma^A^mathalpha^-fourier^MATHEMATICAL BOLD CAPITAL GAMMA 1D6AB^𝚫^\mathbf{\Delta}^\mbfDelta^A^mathalpha^-fourier^MATHEMATICAL BOLD CAPITAL DELTA 1D6AC^𝚬^^\mbfEpsilon^A^mathalpha^^MATHEMATICAL BOLD CAPITAL EPSILON 1D6AD^𝚭^^\mbfZeta^A^mathalpha^^MATHEMATICAL BOLD CAPITAL ZETA 1D6AE^𝚮^^\mbfEta^A^mathalpha^^MATHEMATICAL BOLD CAPITAL ETA 1D6AF^𝚯^\mathbf{\Theta}^\mbfTheta^A^mathalpha^-fourier^MATHEMATICAL BOLD CAPITAL THETA 1D6B0^𝚰^^\mbfIota^A^mathalpha^^MATHEMATICAL BOLD CAPITAL IOTA 1D6B1^𝚱^^\mbfKappa^A^mathalpha^^MATHEMATICAL BOLD CAPITAL KAPPA 1D6B2^𝚲^\mathbf{\Lambda}^\mbfLambda^A^mathalpha^-fourier^mathematical bold capital lambda 1D6B3^𝚳^^\mbfMu^A^mathalpha^^MATHEMATICAL BOLD CAPITAL MU 1D6B4^𝚴^^\mbfNu^A^mathalpha^^MATHEMATICAL BOLD CAPITAL NU 1D6B5^𝚵^\mathbf{\Xi}^\mbfXi^A^mathalpha^-fourier^MATHEMATICAL BOLD CAPITAL XI 1D6B6^𝚶^^\mbfOmicron^A^mathalpha^^MATHEMATICAL BOLD CAPITAL OMICRON 1D6B7^𝚷^\mathbf{\Pi}^\mbfPi^A^mathalpha^-fourier^MATHEMATICAL BOLD CAPITAL PI 1D6B8^𝚸^^\mbfRho^A^mathalpha^^MATHEMATICAL BOLD CAPITAL RHO 1D6B9^𝚹^^\mbfvarTheta^A^mathalpha^^MATHEMATICAL BOLD CAPITAL THETA SYMBOL 1D6BA^𝚺^\mathbf{\Sigma}^\mbfSigma^A^mathalpha^-fourier^MATHEMATICAL BOLD CAPITAL SIGMA 1D6BB^𝚻^^\mbfTau^A^mathalpha^^MATHEMATICAL BOLD CAPITAL TAU 1D6BC^𝚼^\mathbf{\Upsilon}^\mbfUpsilon^A^mathalpha^-fourier^MATHEMATICAL BOLD CAPITAL UPSILON 1D6BD^𝚽^\mathbf{\Phi}^\mbfPhi^A^mathalpha^-fourier^MATHEMATICAL BOLD CAPITAL PHI 1D6BE^𝚾^^\mbfChi^A^mathalpha^^MATHEMATICAL BOLD CAPITAL CHI 1D6BF^𝚿^\mathbf{\Psi}^\mbfPsi^A^mathalpha^-fourier^MATHEMATICAL BOLD CAPITAL PSI 1D6C0^𝛀^\mathbf{\Omega}^\mbfOmega^A^mathalpha^-fourier^MATHEMATICAL BOLD CAPITAL OMEGA 1D6C1^𝛁^^\mbfnabla^A^mathord^^MATHEMATICAL BOLD NABLA 1D6C2^𝛂^\mathbf{\alpha}^\mbfalpha^A^mathalpha^omlmathbf^MATHEMATICAL BOLD SMALL ALPHA 1D6C3^𝛃^\mathbf{\beta}^\mbfbeta^A^mathalpha^omlmathbf^MATHEMATICAL BOLD SMALL BETA 1D6C4^𝛄^\mathbf{\gamma}^\mbfgamma^A^mathalpha^omlmathbf^MATHEMATICAL BOLD SMALL GAMMA 1D6C5^𝛅^\mathbf{\delta}^\mbfdelta^A^mathalpha^omlmathbf^MATHEMATICAL BOLD SMALL DELTA 1D6C6^𝛆^\mathbf{\varepsilon}^\mbfepsilon^A^mathalpha^omlmathbf^MATHEMATICAL BOLD SMALL EPSILON 1D6C7^𝛇^\mathbf{\zeta}^\mbfzeta^A^mathalpha^omlmathbf^MATHEMATICAL BOLD SMALL ZETA 1D6C8^𝛈^\mathbf{\eta}^\mbfeta^A^mathalpha^omlmathbf^MATHEMATICAL BOLD SMALL ETA 1D6C9^𝛉^\mathbf{\theta}^\mbftheta^A^mathalpha^omlmathbf^MATHEMATICAL BOLD SMALL THETA 1D6CA^𝛊^\mathbf{\iota}^\mbfiota^A^mathalpha^omlmathbf^MATHEMATICAL BOLD SMALL IOTA 1D6CB^𝛋^\mathbf{\kappa}^\mbfkappa^A^mathalpha^omlmathbf^MATHEMATICAL BOLD SMALL KAPPA 1D6CC^𝛌^\mathbf{\lambda}^\mbflambda^A^mathalpha^omlmathbf^mathematical bold small lambda 1D6CD^𝛍^\mathbf{\mu}^\mbfmu^A^mathalpha^omlmathbf^MATHEMATICAL BOLD SMALL MU 1D6CE^𝛎^\mathbf{\nu}^\mbfnu^A^mathalpha^omlmathbf^MATHEMATICAL BOLD SMALL NU 1D6CF^𝛏^\mathbf{\xi}^\mbfxi^A^mathalpha^omlmathbf^MATHEMATICAL BOLD SMALL XI 1D6D0^𝛐^^\mbfomicron^A^mathalpha^^MATHEMATICAL BOLD SMALL OMICRON 1D6D1^𝛑^\mathbf{\pi}^\mbfpi^A^mathalpha^omlmathbf^MATHEMATICAL BOLD SMALL PI 1D6D2^𝛒^\mathbf{\rho}^\mbfrho^A^mathalpha^omlmathbf^MATHEMATICAL BOLD SMALL RHO 1D6D3^𝛓^\mathbf{\varsigma}^\mbfvarsigma^A^mathalpha^omlmathbf^MATHEMATICAL BOLD SMALL FINAL SIGMA 1D6D4^𝛔^\mathbf{\sigma}^\mbfsigma^A^mathalpha^omlmathbf^MATHEMATICAL BOLD SMALL SIGMA 1D6D5^𝛕^\mathbf{\tau}^\mbftau^A^mathalpha^omlmathbf^MATHEMATICAL BOLD SMALL TAU 1D6D6^𝛖^\mathbf{\upsilon}^\mbfupsilon^A^mathalpha^omlmathbf^MATHEMATICAL BOLD SMALL UPSILON 1D6D7^𝛗^\mathbf{\varphi}^\mbfvarphi^A^mathalpha^omlmathbf^MATHEMATICAL BOLD SMALL PHI 1D6D8^𝛘^\mathbf{\chi}^\mbfchi^A^mathalpha^omlmathbf^MATHEMATICAL BOLD SMALL CHI 1D6D9^𝛙^\mathbf{\psi}^\mbfpsi^A^mathalpha^omlmathbf^MATHEMATICAL BOLD SMALL PSI 1D6DA^𝛚^\mathbf{\omega}^\mbfomega^A^mathalpha^omlmathbf^MATHEMATICAL BOLD SMALL OMEGA 1D6DB^𝛛^^\mbfpartial^A^mathord^^MATHEMATICAL BOLD PARTIAL DIFFERENTIAL 1D6DC^𝛜^\mathbf{\epsilon}^\mbfvarepsilon^A^mathalpha^omlmathbf^MATHEMATICAL BOLD EPSILON SYMBOL 1D6DD^𝛝^\mathbf{\vartheta}^\mbfvartheta^A^mathalpha^omlmathbf^MATHEMATICAL BOLD THETA SYMBOL 1D6DE^𝛞^^\mbfvarkappa^A^mathalpha^^MATHEMATICAL BOLD KAPPA SYMBOL 1D6DF^𝛟^\mathbf{\phi}^\mbfphi^A^mathalpha^omlmathbf^MATHEMATICAL BOLD PHI SYMBOL 1D6E0^𝛠^\mathbf{\varrho}^\mbfvarrho^A^mathalpha^omlmathbf^MATHEMATICAL BOLD RHO SYMBOL 1D6E1^𝛡^\mathbf{\varpi}^\mbfvarpi^A^mathalpha^omlmathbf^MATHEMATICAL BOLD PI SYMBOL 1D6E2^𝛢^^\mitAlpha^A^mathalpha^^MATHEMATICAL ITALIC CAPITAL ALPHA 1D6E3^𝛣^^\mitBeta^A^mathalpha^^MATHEMATICAL ITALIC CAPITAL BETA 1D6E4^𝛤^\Gamma^\mitGamma^A^mathalpha^slantedGreek^= \mathit{\Gamma} (-fourier), = \varGamma (amsmath fourier), MATHEMATICAL ITALIC CAPITAL GAMMA 1D6E5^𝛥^\Delta^\mitDelta^A^mathalpha^slantedGreek^= \mathit{\Delta} (-fourier), = \varDelta (amsmath fourier), MATHEMATICAL ITALIC CAPITAL DELTA 1D6E6^𝛦^^\mitEpsilon^A^mathalpha^^MATHEMATICAL ITALIC CAPITAL EPSILON 1D6E7^𝛧^^\mitZeta^A^mathalpha^^MATHEMATICAL ITALIC CAPITAL ZETA 1D6E8^𝛨^^\mitEta^A^mathalpha^^MATHEMATICAL ITALIC CAPITAL ETA 1D6E9^𝛩^\Theta^\mitTheta^A^mathalpha^slantedGreek^= \mathit{\Theta} (-fourier), = \varTheta (amsmath fourier), MATHEMATICAL ITALIC CAPITAL THETA 1D6EA^𝛪^^\mitIota^A^mathalpha^^MATHEMATICAL ITALIC CAPITAL IOTA 1D6EB^𝛫^^\mitKappa^A^mathalpha^^MATHEMATICAL ITALIC CAPITAL KAPPA 1D6EC^𝛬^\Lambda^\mitLambda^A^mathalpha^slantedGreek^= \mathit{\Lambda} (-fourier), = \varLambda (amsmath fourier), mathematical italic capital lambda 1D6ED^𝛭^^\mitMu^A^mathalpha^^MATHEMATICAL ITALIC CAPITAL MU 1D6EE^𝛮^^\mitNu^A^mathalpha^^MATHEMATICAL ITALIC CAPITAL NU 1D6EF^𝛯^\Xi^\mitXi^A^mathalpha^slantedGreek^= \mathit{\Xi} (-fourier), = \varXi (amsmath fourier), MATHEMATICAL ITALIC CAPITAL XI 1D6F0^𝛰^^\mitOmicron^A^mathalpha^^MATHEMATICAL ITALIC CAPITAL OMICRON 1D6F1^𝛱^\Pi^\mitPi^A^mathalpha^slantedGreek^= \mathit{\Pi} (-fourier), = \varPi (amsmath fourier), MATHEMATICAL ITALIC CAPITAL PI 1D6F2^𝛲^^\mitRho^A^mathalpha^^MATHEMATICAL ITALIC CAPITAL RHO 1D6F3^𝛳^^\mitvarTheta^A^mathalpha^^MATHEMATICAL ITALIC CAPITAL THETA SYMBOL 1D6F4^𝛴^\Sigma^\mitSigma^A^mathalpha^slantedGreek^= \mathit{\Sigma} (-fourier), = \varSigma (amsmath fourier), MATHEMATICAL ITALIC CAPITAL SIGMA 1D6F5^𝛵^^\mitTau^A^mathalpha^^MATHEMATICAL ITALIC CAPITAL TAU 1D6F6^𝛶^\Upsilon^\mitUpsilon^A^mathalpha^slantedGreek^= \mathit{\Upsilon} (-fourier), = \varUpsilon (amsmath fourier), MATHEMATICAL ITALIC CAPITAL UPSILON 1D6F7^𝛷^\Phi^\mitPhi^A^mathalpha^slantedGreek^= \mathit{\Phi} (-fourier), = \varPhi (amsmath fourier), MATHEMATICAL ITALIC CAPITAL PHI 1D6F8^𝛸^^\mitChi^A^mathalpha^^MATHEMATICAL ITALIC CAPITAL CHI 1D6F9^𝛹^\Psi^\mitPsi^A^mathalpha^slantedGreek^= \mathit{\Psi} (-fourier), = \varPsi (amsmath fourier), MATHEMATICAL ITALIC CAPITAL PSI 1D6FA^𝛺^\Omega^\mitOmega^A^mathalpha^slantedGreek^= \mathit{\Omega} (-fourier), = \varOmega (amsmath fourier), MATHEMATICAL ITALIC CAPITAL OMEGA 1D6FB^𝛻^^\mitnabla^A^mathord^^MATHEMATICAL ITALIC NABLA 1D6FC^𝛼^\alpha^\mitalpha^A^mathalpha^^= \mathit{\alpha} (omlmathit), MATHEMATICAL ITALIC SMALL ALPHA 1D6FD^𝛽^\beta^\mitbeta^A^mathalpha^^= \mathit{\beta} (omlmathit), MATHEMATICAL ITALIC SMALL BETA 1D6FE^𝛾^\gamma^\mitgamma^A^mathalpha^^= \mathit{\gamma} (omlmathit), MATHEMATICAL ITALIC SMALL GAMMA 1D6FF^𝛿^\delta^\mitdelta^A^mathalpha^^= \mathit{\delta} (omlmathit), MATHEMATICAL ITALIC SMALL DELTA 1D700^𝜀^\varepsilon^\mitepsilon^A^mathalpha^^= \mathit{\varepsilon} (omlmathit), MATHEMATICAL ITALIC SMALL EPSILON 1D701^𝜁^\zeta^\mitzeta^A^mathalpha^^= \mathit{\zeta} (omlmathit), MATHEMATICAL ITALIC SMALL ZETA 1D702^𝜂^\eta^\miteta^A^mathalpha^^= \mathit{\eta} (omlmathit), MATHEMATICAL ITALIC SMALL ETA 1D703^𝜃^\theta^\mittheta^A^mathalpha^^= \mathit{\theta} (omlmathit), MATHEMATICAL ITALIC SMALL THETA 1D704^𝜄^\iota^\mitiota^A^mathalpha^^= \mathit{\iota} (omlmathit), MATHEMATICAL ITALIC SMALL IOTA 1D705^𝜅^\kappa^\mitkappa^A^mathalpha^^= \mathit{\kappa} (omlmathit), MATHEMATICAL ITALIC SMALL KAPPA 1D706^𝜆^\lambda^\mitlambda^A^mathalpha^^= \mathit{\lambda} (omlmathit), mathematical italic small lambda 1D707^𝜇^\mu^\mitmu^A^mathalpha^^= \mathit{\mu} (omlmathit), MATHEMATICAL ITALIC SMALL MU 1D708^𝜈^\nu^\mitnu^A^mathalpha^^= \mathit{\nu} (omlmathit), MATHEMATICAL ITALIC SMALL NU 1D709^𝜉^\xi^\mitxi^A^mathalpha^^= \mathit{\xi} (omlmathit), MATHEMATICAL ITALIC SMALL XI 1D70A^𝜊^^\mitomicron^A^mathalpha^^MATHEMATICAL ITALIC SMALL OMICRON 1D70B^𝜋^\pi^\mitpi^A^mathalpha^^= \mathit{\pi} (omlmathit), MATHEMATICAL ITALIC SMALL PI 1D70C^𝜌^\rho^\mitrho^A^mathalpha^^= \mathit{\rho} (omlmathit), MATHEMATICAL ITALIC SMALL RHO 1D70D^𝜍^\varsigma^\mitvarsigma^A^mathalpha^^= \mathit{\varsigma} (omlmathit), MATHEMATICAL ITALIC SMALL FINAL SIGMA 1D70E^𝜎^\sigma^\mitsigma^A^mathalpha^^= \mathit{\sigma} (omlmathit), MATHEMATICAL ITALIC SMALL SIGMA 1D70F^𝜏^\tau^\mittau^A^mathalpha^^= \mathit{\tau} (omlmathit), MATHEMATICAL ITALIC SMALL TAU 1D710^𝜐^\upsilon^\mitupsilon^A^mathalpha^^= \mathit{\upsilon} (omlmathit), MATHEMATICAL ITALIC SMALL UPSILON 1D711^𝜑^\varphi^\mitphi^A^mathalpha^^= \mathit{\varphi} (omlmathit), MATHEMATICAL ITALIC SMALL PHI 1D712^𝜒^\chi^\mitchi^A^mathalpha^^= \mathit{\chi} (omlmathit), MATHEMATICAL ITALIC SMALL CHI 1D713^𝜓^\psi^\mitpsi^A^mathalpha^^= \mathit{\psi} (omlmathit), MATHEMATICAL ITALIC SMALL PSI 1D714^𝜔^\omega^\mitomega^A^mathalpha^^= \mathit{\omega} (omlmathit), MATHEMATICAL ITALIC SMALL OMEGA 1D715^𝜕^\partial^\mitpartial^A^mathord^^= \mathit{\partial} (omlmathit), MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL 1D716^𝜖^\epsilon^\mitvarepsilon^A^mathalpha^^= \mathit{\epsilon} (omlmathit), MATHEMATICAL ITALIC EPSILON SYMBOL 1D717^𝜗^\vartheta^\mitvartheta^A^mathalpha^^= \mathit{\vartheta} (omlmathit), MATHEMATICAL ITALIC THETA SYMBOL 1D718^𝜘^\varkappa^\mitvarkappa^A^mathalpha^amssymb^MATHEMATICAL ITALIC KAPPA SYMBOL 1D719^𝜙^\phi^\mitvarphi^A^mathalpha^^= \mathit{\phi} (omlmathit), MATHEMATICAL ITALIC PHI SYMBOL 1D71A^𝜚^\varrho^\mitvarrho^A^mathalpha^^= \mathit{\varrho} (omlmathit), MATHEMATICAL ITALIC RHO SYMBOL 1D71B^𝜛^\varpi^\mitvarpi^A^mathalpha^^= \mathit{\varpi} (omlmathit), MATHEMATICAL ITALIC PI SYMBOL 1D71C^𝜜^^\mbfitAlpha^A^mathalpha^^MATHEMATICAL BOLD ITALIC CAPITAL ALPHA 1D71D^𝜝^^\mbfitBeta^A^mathalpha^^MATHEMATICAL BOLD ITALIC CAPITAL BETA 1D71E^𝜞^\mathbfit{\Gamma}^\mbfitGamma^A^mathalpha^isomath^= \mathbold{\Gamma} (fixmath), MATHEMATICAL BOLD ITALIC CAPITAL GAMMA 1D71F^𝜟^\mathbfit{\Delta}^\mbfitDelta^A^mathalpha^isomath^= \mathbold{\Delta} (fixmath), MATHEMATICAL BOLD ITALIC CAPITAL DELTA 1D720^𝜠^^\mbfitEpsilon^A^mathalpha^^MATHEMATICAL BOLD ITALIC CAPITAL EPSILON 1D721^𝜡^^\mbfitZeta^A^mathalpha^^MATHEMATICAL BOLD ITALIC CAPITAL ZETA 1D722^𝜢^^\mbfitEta^A^mathalpha^^MATHEMATICAL BOLD ITALIC CAPITAL ETA 1D723^𝜣^\mathbfit{\Theta}^\mbfitTheta^A^mathalpha^isomath^= \mathbold{\Theta} (fixmath), MATHEMATICAL BOLD ITALIC CAPITAL THETA 1D724^𝜤^^\mbfitIota^A^mathalpha^^MATHEMATICAL BOLD ITALIC CAPITAL IOTA 1D725^𝜥^^\mbfitKappa^A^mathalpha^^MATHEMATICAL BOLD ITALIC CAPITAL KAPPA 1D726^𝜦^\mathbfit{\Lambda}^\mbfitLambda^A^mathalpha^isomath^= \mathbold{\Lambda} (fixmath), mathematical bold italic capital lambda 1D727^𝜧^^\mbfitMu^A^mathalpha^^MATHEMATICAL BOLD ITALIC CAPITAL MU 1D728^𝜨^^\mbfitNu^A^mathalpha^^MATHEMATICAL BOLD ITALIC CAPITAL NU 1D729^𝜩^\mathbfit{\Xi}^\mbfitXi^A^mathalpha^isomath^= \mathbold{\Xi} (fixmath), MATHEMATICAL BOLD ITALIC CAPITAL XI 1D72A^𝜪^^\mbfitOmicron^A^mathalpha^^MATHEMATICAL BOLD ITALIC CAPITAL OMICRON 1D72B^𝜫^\mathbfit{\Pi}^\mbfitPi^A^mathalpha^isomath^= \mathbold{\Pi} (fixmath), MATHEMATICAL BOLD ITALIC CAPITAL PI 1D72C^𝜬^^\mbfitRho^A^mathalpha^^MATHEMATICAL BOLD ITALIC CAPITAL RHO 1D72D^𝜭^^\mbfitvarTheta^A^mathalpha^^MATHEMATICAL BOLD ITALIC CAPITAL THETA SYMBOL 1D72E^𝜮^\mathbfit{\Sigma}^\mbfitSigma^A^mathalpha^isomath^= \mathbold{\Sigma} (fixmath), MATHEMATICAL BOLD ITALIC CAPITAL SIGMA 1D72F^𝜯^^\mbfitTau^A^mathalpha^^MATHEMATICAL BOLD ITALIC CAPITAL TAU 1D730^𝜰^\mathbfit{\Upsilon}^\mbfitUpsilon^A^mathalpha^isomath^= \mathbold{\Upsilon} (fixmath), MATHEMATICAL BOLD ITALIC CAPITAL UPSILON 1D731^𝜱^\mathbfit{\Phi}^\mbfitPhi^A^mathalpha^isomath^= \mathbold{\Phi} (fixmath), MATHEMATICAL BOLD ITALIC CAPITAL PHI 1D732^𝜲^^\mbfitChi^A^mathalpha^^MATHEMATICAL BOLD ITALIC CAPITAL CHI 1D733^𝜳^\mathbfit{\Psi}^\mbfitPsi^A^mathalpha^isomath^= \mathbold{\Psi} (fixmath), MATHEMATICAL BOLD ITALIC CAPITAL PSI 1D734^𝜴^\mathbfit{\Omega}^\mbfitOmega^A^mathalpha^isomath^= \mathbold{\Omega} (fixmath), MATHEMATICAL BOLD ITALIC CAPITAL OMEGA 1D735^𝜵^^\mbfitnabla^A^mathord^^MATHEMATICAL BOLD ITALIC NABLA 1D736^𝜶^\mathbfit{\alpha}^\mbfitalpha^A^mathalpha^isomath^= \mathbold{\alpha} (fixmath), MATHEMATICAL BOLD ITALIC SMALL ALPHA 1D737^𝜷^\mathbfit{\beta}^\mbfitbeta^A^mathalpha^isomath^= \mathbold{\beta} (fixmath), MATHEMATICAL BOLD ITALIC SMALL BETA 1D738^𝜸^\mathbfit{\gamma}^\mbfitgamma^A^mathalpha^isomath^= \mathbold{\gamma} (fixmath), MATHEMATICAL BOLD ITALIC SMALL GAMMA 1D739^𝜹^\mathbfit{\delta}^\mbfitdelta^A^mathalpha^isomath^= \mathbold{\delta} (fixmath), MATHEMATICAL BOLD ITALIC SMALL DELTA 1D73A^𝜺^\mathbfit{\varepsilon}^\mbfitepsilon^A^mathalpha^isomath^= \mathbold{\varepsilon} (fixmath), MATHEMATICAL BOLD ITALIC SMALL EPSILON 1D73B^𝜻^\mathbfit{\zeta}^\mbfitzeta^A^mathalpha^isomath^= \mathbold{\zeta} (fixmath), MATHEMATICAL BOLD ITALIC SMALL ZETA 1D73C^𝜼^\mathbfit{\eta}^\mbfiteta^A^mathalpha^isomath^= \mathbold{\eta} (fixmath), MATHEMATICAL BOLD ITALIC SMALL ETA 1D73D^𝜽^\mathbfit{\theta}^\mbfittheta^A^mathalpha^isomath^= \mathbold{\theta} (fixmath), MATHEMATICAL BOLD ITALIC SMALL THETA 1D73E^𝜾^\mathbfit{\iota}^\mbfitiota^A^mathalpha^isomath^= \mathbold{\iota} (fixmath), MATHEMATICAL BOLD ITALIC SMALL IOTA 1D73F^𝜿^\mathbfit{\kappa}^\mbfitkappa^A^mathalpha^isomath^= \mathbold{\kappa} (fixmath), MATHEMATICAL BOLD ITALIC SMALL KAPPA 1D740^𝝀^\mathbfit{\lambda}^\mbfitlambda^A^mathalpha^isomath^= \mathbold{\lambda} (fixmath), mathematical bold italic small lambda 1D741^𝝁^\mathbfit{\mu}^\mbfitmu^A^mathalpha^isomath^= \mathbold{\mu} (fixmath), MATHEMATICAL BOLD ITALIC SMALL MU 1D742^𝝂^\mathbfit{\nu}^\mbfitnu^A^mathalpha^isomath^= \mathbold{\nu} (fixmath), MATHEMATICAL BOLD ITALIC SMALL NU 1D743^𝝃^\mathbfit{\xi}^\mbfitxi^A^mathalpha^isomath^= \mathbold{\xi} (fixmath), MATHEMATICAL BOLD ITALIC SMALL XI 1D744^𝝄^^\mbfitomicron^A^mathalpha^^MATHEMATICAL BOLD ITALIC SMALL OMICRON 1D745^𝝅^\mathbfit{\pi}^\mbfitpi^A^mathalpha^isomath^= \mathbold{\pi} (fixmath), MATHEMATICAL BOLD ITALIC SMALL PI 1D746^𝝆^\mathbfit{\rho}^\mbfitrho^A^mathalpha^isomath^= \mathbold{\rho} (fixmath), MATHEMATICAL BOLD ITALIC SMALL RHO 1D747^𝝇^\mathbfit{\varsigma}^\mbfitvarsigma^A^mathalpha^isomath^= \mathbold{\varsigma} (fixmath), MATHEMATICAL BOLD ITALIC SMALL FINAL SIGMA 1D748^𝝈^\mathbfit{\sigma}^\mbfitsigma^A^mathalpha^isomath^= \mathbold{\sigma} (fixmath), MATHEMATICAL BOLD ITALIC SMALL SIGMA 1D749^𝝉^\mathbfit{\tau}^\mbfittau^A^mathalpha^isomath^= \mathbold{\tau} (fixmath), MATHEMATICAL BOLD ITALIC SMALL TAU 1D74A^𝝊^\mathbfit{\upsilon}^\mbfitupsilon^A^mathalpha^isomath^= \mathbold{\upsilon} (fixmath), MATHEMATICAL BOLD ITALIC SMALL UPSILON 1D74B^𝝋^\mathbfit{\varphi}^\mbfitphi^A^mathalpha^isomath^= \mathbold{\varphi} (fixmath), MATHEMATICAL BOLD ITALIC SMALL PHI 1D74C^𝝌^\mathbfit{\chi}^\mbfitchi^A^mathalpha^isomath^= \mathbold{\chi} (fixmath), MATHEMATICAL BOLD ITALIC SMALL CHI 1D74D^𝝍^\mathbfit{\psi}^\mbfitpsi^A^mathalpha^isomath^= \mathbold{\psi} (fixmath), MATHEMATICAL BOLD ITALIC SMALL PSI 1D74E^𝝎^\mathbfit{\omega}^\mbfitomega^A^mathalpha^isomath^= \mathbold{\omega} (fixmath), MATHEMATICAL BOLD ITALIC SMALL OMEGA 1D74F^𝝏^^\mbfitpartial^A^mathord^^MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL 1D750^𝝐^\mathbfit{\epsilon}^\mbfitvarepsilon^A^mathalpha^isomath^= \mathbold{\epsilon} (fixmath), MATHEMATICAL BOLD ITALIC EPSILON SYMBOL 1D751^𝝑^\mathbfit{\vartheta}^\mbfitvartheta^A^mathalpha^isomath^= \mathbold{\vartheta} (fixmath), MATHEMATICAL BOLD ITALIC THETA SYMBOL 1D752^𝝒^^\mbfitvarkappa^A^mathalpha^^MATHEMATICAL BOLD ITALIC KAPPA SYMBOL 1D753^𝝓^\mathbfit{\phi}^\mbfitvarphi^A^mathalpha^isomath^= \mathbold{\phi} (fixmath), MATHEMATICAL BOLD ITALIC PHI SYMBOL 1D754^𝝔^\mathbfit{\varrho}^\mbfitvarrho^A^mathalpha^isomath^= \mathbold{\varrho} (fixmath), MATHEMATICAL BOLD ITALIC RHO SYMBOL 1D755^𝝕^\mathbfit{\varpi}^\mbfitvarpi^A^mathalpha^isomath^= \mathbold{\varpi} (fixmath), MATHEMATICAL BOLD ITALIC PI SYMBOL 1D756^𝝖^^\mbfsansAlpha^A^mathalpha^^MATHEMATICAL SANS-SERIF BOLD CAPITAL ALPHA 1D757^𝝗^^\mbfsansBeta^A^mathalpha^^MATHEMATICAL SANS-SERIF BOLD CAPITAL BETA 1D758^𝝘^\mathsfbf{\Gamma}^\mbfsansGamma^A^mathalpha^mathsfbf^MATHEMATICAL SANS-SERIF BOLD CAPITAL GAMMA 1D759^𝝙^\mathsfbf{\Delta}^\mbfsansDelta^A^mathalpha^mathsfbf^MATHEMATICAL SANS-SERIF BOLD CAPITAL DELTA 1D75A^𝝚^^\mbfsansEpsilon^A^mathalpha^^MATHEMATICAL SANS-SERIF BOLD CAPITAL EPSILON 1D75B^𝝛^^\mbfsansZeta^A^mathalpha^^MATHEMATICAL SANS-SERIF BOLD CAPITAL ZETA 1D75C^𝝜^^\mbfsansEta^A^mathalpha^^MATHEMATICAL SANS-SERIF BOLD CAPITAL ETA 1D75D^𝝝^\mathsfbf{\Theta}^\mbfsansTheta^A^mathalpha^mathsfbf^MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA 1D75E^𝝞^^\mbfsansIota^A^mathalpha^^MATHEMATICAL SANS-SERIF BOLD CAPITAL IOTA 1D75F^𝝟^^\mbfsansKappa^A^mathalpha^^MATHEMATICAL SANS-SERIF BOLD CAPITAL KAPPA 1D760^𝝠^\mathsfbf{\Lambda}^\mbfsansLambda^A^mathalpha^mathsfbf^mathematical sans-serif bold capital lambda 1D761^𝝡^^\mbfsansMu^A^mathalpha^^MATHEMATICAL SANS-SERIF BOLD CAPITAL MU 1D762^𝝢^^\mbfsansNu^A^mathalpha^^MATHEMATICAL SANS-SERIF BOLD CAPITAL NU 1D763^𝝣^\mathsfbf{\Xi}^\mbfsansXi^A^mathalpha^mathsfbf^MATHEMATICAL SANS-SERIF BOLD CAPITAL XI 1D764^𝝤^^\mbfsansOmicron^A^mathalpha^^MATHEMATICAL SANS-SERIF BOLD CAPITAL OMICRON 1D765^𝝥^\mathsfbf{\Pi}^\mbfsansPi^A^mathalpha^mathsfbf^MATHEMATICAL SANS-SERIF BOLD CAPITAL PI 1D766^𝝦^^\mbfsansRho^A^mathalpha^^MATHEMATICAL SANS-SERIF BOLD CAPITAL RHO 1D767^𝝧^^\mbfsansvarTheta^A^mathalpha^^MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA SYMBOL 1D768^𝝨^\mathsfbf{\Sigma}^\mbfsansSigma^A^mathalpha^mathsfbf^MATHEMATICAL SANS-SERIF BOLD CAPITAL SIGMA 1D769^𝝩^^\mbfsansTau^A^mathalpha^^MATHEMATICAL SANS-SERIF BOLD CAPITAL TAU 1D76A^𝝪^\mathsfbf{\Upsilon}^\mbfsansUpsilon^A^mathalpha^mathsfbf^MATHEMATICAL SANS-SERIF BOLD CAPITAL UPSILON 1D76B^𝝫^\mathsfbf{\Phi}^\mbfsansPhi^A^mathalpha^mathsfbf^MATHEMATICAL SANS-SERIF BOLD CAPITAL PHI 1D76C^𝝬^^\mbfsansChi^A^mathalpha^^MATHEMATICAL SANS-SERIF BOLD CAPITAL CHI 1D76D^𝝭^\mathsfbf{\Psi}^\mbfsansPsi^A^mathalpha^mathsfbf^MATHEMATICAL SANS-SERIF BOLD CAPITAL PSI 1D76E^𝝮^\mathsfbf{\Omega}^\mbfsansOmega^A^mathalpha^mathsfbf^MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA 1D76F^𝝯^^\mbfsansnabla^A^mathord^^MATHEMATICAL SANS-SERIF BOLD NABLA 1D770^𝝰^\mathsfbf{\alpha}^\mbfsansalpha^A^mathalpha^omlmathsfbf^MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA 1D771^𝝱^\mathsfbf{\beta}^\mbfsansbeta^A^mathalpha^omlmathsfbf^MATHEMATICAL SANS-SERIF BOLD SMALL BETA 1D772^𝝲^\mathsfbf{\gamma}^\mbfsansgamma^A^mathalpha^omlmathsfbf^MATHEMATICAL SANS-SERIF BOLD SMALL GAMMA 1D773^𝝳^\mathsfbf{\delta}^\mbfsansdelta^A^mathalpha^omlmathsfbf^MATHEMATICAL SANS-SERIF BOLD SMALL DELTA 1D774^𝝴^\mathsfbf{\varepsilon}^\mbfsansepsilon^A^mathalpha^omlmathsfbf^MATHEMATICAL SANS-SERIF BOLD SMALL EPSILON 1D775^𝝵^\mathsfbf{\zeta}^\mbfsanszeta^A^mathalpha^omlmathsfbf^MATHEMATICAL SANS-SERIF BOLD SMALL ZETA 1D776^𝝶^\mathsfbf{\eta}^\mbfsanseta^A^mathalpha^omlmathsfbf^MATHEMATICAL SANS-SERIF BOLD SMALL ETA 1D777^𝝷^\mathsfbf{\theta}^\mbfsanstheta^A^mathalpha^omlmathsfbf^MATHEMATICAL SANS-SERIF BOLD SMALL THETA 1D778^𝝸^\mathsfbf{\iota}^\mbfsansiota^A^mathalpha^omlmathsfbf^MATHEMATICAL SANS-SERIF BOLD SMALL IOTA 1D779^𝝹^\mathsfbf{\kappa}^\mbfsanskappa^A^mathalpha^omlmathsfbf^MATHEMATICAL SANS-SERIF BOLD SMALL KAPPA 1D77A^𝝺^\mathsfbf{\lambda}^\mbfsanslambda^A^mathalpha^omlmathsfbf^mathematical sans-serif bold small lambda 1D77B^𝝻^\mathsfbf{\mu}^\mbfsansmu^A^mathalpha^omlmathsfbf^MATHEMATICAL SANS-SERIF BOLD SMALL MU 1D77C^𝝼^\mathsfbf{\nu}^\mbfsansnu^A^mathalpha^omlmathsfbf^MATHEMATICAL SANS-SERIF BOLD SMALL NU 1D77D^𝝽^\mathsfbf{\xi}^\mbfsansxi^A^mathalpha^omlmathsfbf^MATHEMATICAL SANS-SERIF BOLD SMALL XI 1D77E^𝝾^^\mbfsansomicron^A^mathalpha^^MATHEMATICAL SANS-SERIF BOLD SMALL OMICRON 1D77F^𝝿^\mathsfbf{\pi}^\mbfsanspi^A^mathalpha^omlmathsfbf^MATHEMATICAL SANS-SERIF BOLD SMALL PI 1D780^𝞀^\mathsfbf{\rho}^\mbfsansrho^A^mathalpha^omlmathsfbf^MATHEMATICAL SANS-SERIF BOLD SMALL RHO 1D781^𝞁^\mathsfbf{\varsigma}^\mbfsansvarsigma^A^mathalpha^omlmathsfbf^MATHEMATICAL SANS-SERIF BOLD SMALL FINAL SIGMA 1D782^𝞂^\mathsfbf{\sigma}^\mbfsanssigma^A^mathalpha^omlmathsfbf^MATHEMATICAL SANS-SERIF BOLD SMALL SIGMA 1D783^𝞃^\mathsfbf{\tau}^\mbfsanstau^A^mathalpha^omlmathsfbf^MATHEMATICAL SANS-SERIF BOLD SMALL TAU 1D784^𝞄^\mathsfbf{\upsilon}^\mbfsansupsilon^A^mathalpha^omlmathsfbf^MATHEMATICAL SANS-SERIF BOLD SMALL UPSILON 1D785^𝞅^\mathsfbf{\varphi}^\mbfsansphi^A^mathalpha^omlmathsfbf^MATHEMATICAL SANS-SERIF BOLD SMALL PHI 1D786^𝞆^\mathsfbf{\chi}^\mbfsanschi^A^mathalpha^omlmathsfbf^MATHEMATICAL SANS-SERIF BOLD SMALL CHI 1D787^𝞇^\mathsfbf{\psi}^\mbfsanspsi^A^mathalpha^omlmathsfbf^MATHEMATICAL SANS-SERIF BOLD SMALL PSI 1D788^𝞈^\mathsfbf{\omega}^\mbfsansomega^A^mathalpha^omlmathsfbf^MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA 1D789^𝞉^^\mbfsanspartial^A^mathord^^MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL 1D78A^𝞊^\mathsfbf{\epsilon}^\mbfsansvarepsilon^A^mathalpha^omlmathsfbf^MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL 1D78B^𝞋^\mathsfbf{\vartheta}^\mbfsansvartheta^A^mathalpha^omlmathsfbf^MATHEMATICAL SANS-SERIF BOLD THETA SYMBOL 1D78C^𝞌^^\mbfsansvarkappa^A^mathalpha^^MATHEMATICAL SANS-SERIF BOLD KAPPA SYMBOL 1D78D^𝞍^\mathsfbf{\phi}^\mbfsansvarphi^A^mathalpha^omlmathsfbf^MATHEMATICAL SANS-SERIF BOLD PHI SYMBOL 1D78E^𝞎^\mathsfbf{\varrho}^\mbfsansvarrho^A^mathalpha^omlmathsfbf^MATHEMATICAL SANS-SERIF BOLD RHO SYMBOL 1D78F^𝞏^\mathsfbf{\varpi}^\mbfsansvarpi^A^mathalpha^omlmathsfbf^MATHEMATICAL SANS-SERIF BOLD PI SYMBOL 1D790^𝞐^^\mbfitsansAlpha^A^mathalpha^^MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ALPHA 1D791^𝞑^^\mbfitsansBeta^A^mathalpha^^MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL BETA 1D792^𝞒^\mathsfbfit{\Gamma}^\mbfitsansGamma^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL GAMMA 1D793^𝞓^\mathsfbfit{\Delta}^\mbfitsansDelta^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL DELTA 1D794^𝞔^^\mbfitsansEpsilon^A^mathalpha^^MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL EPSILON 1D795^𝞕^^\mbfitsansZeta^A^mathalpha^^MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ZETA 1D796^𝞖^^\mbfitsansEta^A^mathalpha^^MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ETA 1D797^𝞗^\mathsfbfit{\Theta}^\mbfitsansTheta^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA 1D798^𝞘^^\mbfitsansIota^A^mathalpha^^MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL IOTA 1D799^𝞙^^\mbfitsansKappa^A^mathalpha^^MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL KAPPA 1D79A^𝞚^\mathsfbfit{\Lambda}^\mbfitsansLambda^A^mathalpha^isomath^mathematical sans-serif bold italic capital lambda 1D79B^𝞛^^\mbfitsansMu^A^mathalpha^^MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL MU 1D79C^𝞜^^\mbfitsansNu^A^mathalpha^^MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL NU 1D79D^𝞝^\mathsfbfit{\Xi}^\mbfitsansXi^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL XI 1D79E^𝞞^^\mbfitsansOmicron^A^mathalpha^^MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMICRON 1D79F^𝞟^\mathsfbfit{\Pi}^\mbfitsansPi^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PI 1D7A0^𝞠^^\mbfitsansRho^A^mathalpha^^MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL RHO 1D7A1^𝞡^^\mbfitsansvarTheta^A^mathalpha^^MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA SYMBOL 1D7A2^𝞢^\mathsfbfit{\Sigma}^\mbfitsansSigma^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL SIGMA 1D7A3^𝞣^^\mbfitsansTau^A^mathalpha^^MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL TAU 1D7A4^𝞤^\mathsfbfit{\Upsilon}^\mbfitsansUpsilon^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL UPSILON 1D7A5^𝞥^\mathsfbfit{\Phi}^\mbfitsansPhi^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PHI 1D7A6^𝞦^^\mbfitsansChi^A^mathalpha^^MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL CHI 1D7A7^𝞧^\mathsfbfit{\Psi}^\mbfitsansPsi^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PSI 1D7A8^𝞨^\mathsfbfit{\Omega}^\mbfitsansOmega^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA 1D7A9^𝞩^^\mbfitsansnabla^A^mathord^^MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA 1D7AA^𝞪^\mathsfbfit{\alpha}^\mbfitsansalpha^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA 1D7AB^𝞫^\mathsfbfit{\beta}^\mbfitsansbeta^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL BETA 1D7AC^𝞬^\mathsfbfit{\gamma}^\mbfitsansgamma^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL GAMMA 1D7AD^𝞭^\mathsfbfit{\delta}^\mbfitsansdelta^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL DELTA 1D7AE^𝞮^\mathsfbfit{\varepsilon}^\mbfitsansepsilon^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL EPSILON 1D7AF^𝞯^\mathsfbfit{\zeta}^\mbfitsanszeta^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ZETA 1D7B0^𝞰^\mathsfbfit{\eta}^\mbfitsanseta^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ETA 1D7B1^𝞱^\mathsfbfit{\theta}^\mbfitsanstheta^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL THETA 1D7B2^𝞲^\mathsfbfit{\iota}^\mbfitsansiota^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL IOTA 1D7B3^𝞳^\mathsfbfit{\kappa}^\mbfitsanskappa^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL KAPPA 1D7B4^𝞴^\mathsfbfit{\lambda}^\mbfitsanslambda^A^mathalpha^isomath^mathematical sans-serif bold italic small lambda 1D7B5^𝞵^\mathsfbfit{\mu}^\mbfitsansmu^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL MU 1D7B6^𝞶^\mathsfbfit{\nu}^\mbfitsansnu^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL NU 1D7B7^𝞷^\mathsfbfit{\xi}^\mbfitsansxi^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL XI 1D7B8^𝞸^^\mbfitsansomicron^A^mathalpha^^MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMICRON 1D7B9^𝞹^\mathsfbfit{\pi}^\mbfitsanspi^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PI 1D7BA^𝞺^\mathsfbfit{\rho}^\mbfitsansrho^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL RHO 1D7BB^𝞻^\mathsfbfit{\varsigma}^\mbfitsansvarsigma^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL FINAL SIGMA 1D7BC^𝞼^\mathsfbfit{\sigma}^\mbfitsanssigma^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL SIGMA 1D7BD^𝞽^\mathsfbfit{\tau}^\mbfitsanstau^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL TAU 1D7BE^𝞾^\mathsfbfit{\upsilon}^\mbfitsansupsilon^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL UPSILON 1D7BF^𝞿^\mathsfbfit{\varphi}^\mbfitsansphi^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PHI 1D7C0^𝟀^\mathsfbfit{\chi}^\mbfitsanschi^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL CHI 1D7C1^𝟁^\mathsfbfit{\psi}^\mbfitsanspsi^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PSI 1D7C2^𝟂^\mathsfbfit{\omega}^\mbfitsansomega^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA 1D7C3^𝟃^^\mbfitsanspartial^A^mathord^^MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL 1D7C4^𝟄^\mathsfbfit{\epsilon}^\mbfitsansvarepsilon^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL 1D7C5^𝟅^\mathsfbfit{\vartheta}^\mbfitsansvartheta^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC THETA SYMBOL 1D7C6^𝟆^^\mbfitsansvarkappa^A^mathalpha^^MATHEMATICAL SANS-SERIF BOLD ITALIC KAPPA SYMBOL 1D7C7^𝟇^\mathsfbfit{\phi}^\mbfitsansvarphi^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC PHI SYMBOL 1D7C8^𝟈^\mathsfbfit{\varrho}^\mbfitsansvarrho^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC RHO SYMBOL 1D7C9^𝟉^\mathsfbfit{\varpi}^\mbfitsansvarpi^A^mathalpha^isomath^MATHEMATICAL SANS-SERIF BOLD ITALIC PI SYMBOL 1D7CA^𝟊^^\mbfDigamma^A^mathalpha^^MATHEMATICAL BOLD CAPITAL DIGAMMA 1D7CB^𝟋^^\mbfdigamma^A^mathalpha^^MATHEMATICAL BOLD SMALL DIGAMMA 1D7CE^𝟎^\mathbf{0}^^N^mathord^^mathematical bold digit 0 1D7CF^𝟏^\mathbf{1}^^N^mathord^^mathematical bold digit 1 1D7D0^𝟐^\mathbf{2}^^N^mathord^^mathematical bold digit 2 1D7D1^𝟑^\mathbf{3}^^N^mathord^^mathematical bold digit 3 1D7D2^𝟒^\mathbf{4}^^N^mathord^^mathematical bold digit 4 1D7D3^𝟓^\mathbf{5}^^N^mathord^^mathematical bold digit 5 1D7D4^𝟔^\mathbf{6}^^N^mathord^^mathematical bold digit 6 1D7D5^𝟕^\mathbf{7}^^N^mathord^^mathematical bold digit 7 1D7D6^𝟖^\mathbf{8}^^N^mathord^^mathematical bold digit 8 1D7D7^𝟗^\mathbf{9}^^N^mathord^^mathematical bold digit 9 1D7D8^𝟘^\mathbb{0}^\Bbbzero^N^mathord^bbold^mathematical double-struck digit 0 1D7D9^𝟙^\mathbb{1}^\Bbbone^N^mathord^bbold fourier^= \mathds{1} (dsfont), mathematical double-struck digit 1 1D7DA^𝟚^\mathbb{2}^\Bbbtwo^N^mathord^bbold^mathematical double-struck digit 2 1D7DB^𝟛^\mathbb{3}^\Bbbthree^N^mathord^bbold^mathematical double-struck digit 3 1D7DC^𝟜^\mathbb{4}^\Bbbfour^N^mathord^bbold^mathematical double-struck digit 4 1D7DD^𝟝^\mathbb{5}^\Bbbfive^N^mathord^bbold^mathematical double-struck digit 5 1D7DE^𝟞^\mathbb{6}^\Bbbsix^N^mathord^bbold^mathematical double-struck digit 6 1D7DF^𝟟^\mathbb{7}^\Bbbseven^N^mathord^bbold^mathematical double-struck digit 7 1D7E0^𝟠^\mathbb{8}^\Bbbeight^N^mathord^bbold^mathematical double-struck digit 8 1D7E1^𝟡^\mathbb{9}^\Bbbnine^N^mathord^bbold^mathematical double-struck digit 9 1D7E2^𝟢^\mathsf{0}^\msanszero^N^mathord^^mathematical sans-serif digit 0 1D7E3^𝟣^\mathsf{1}^\msansone^N^mathord^^mathematical sans-serif digit 1 1D7E4^𝟤^\mathsf{2}^\msanstwo^N^mathord^^mathematical sans-serif digit 2 1D7E5^𝟥^\mathsf{3}^\msansthree^N^mathord^^mathematical sans-serif digit 3 1D7E6^𝟦^\mathsf{4}^\msansfour^N^mathord^^mathematical sans-serif digit 4 1D7E7^𝟧^\mathsf{5}^\msansfive^N^mathord^^mathematical sans-serif digit 5 1D7E8^𝟨^\mathsf{6}^\msanssix^N^mathord^^mathematical sans-serif digit 6 1D7E9^𝟩^\mathsf{7}^\msansseven^N^mathord^^mathematical sans-serif digit 7 1D7EA^𝟪^\mathsf{8}^\msanseight^N^mathord^^mathematical sans-serif digit 8 1D7EB^𝟫^\mathsf{9}^\msansnine^N^mathord^^mathematical sans-serif digit 9 1D7EC^𝟬^\mathsfbf{0}^\mbfsanszero^N^mathord^mathsfbf^mathematical sans-serif bold digit 0 1D7ED^𝟭^\mathsfbf{1}^\mbfsansone^N^mathord^mathsfbf^mathematical sans-serif bold digit 1 1D7EE^𝟮^\mathsfbf{2}^\mbfsanstwo^N^mathord^mathsfbf^mathematical sans-serif bold digit 2 1D7EF^𝟯^\mathsfbf{3}^\mbfsansthree^N^mathord^mathsfbf^mathematical sans-serif bold digit 3 1D7F0^𝟰^\mathsfbf{4}^\mbfsansfour^N^mathord^mathsfbf^mathematical sans-serif bold digit 4 1D7F1^𝟱^\mathsfbf{5}^\mbfsansfive^N^mathord^mathsfbf^mathematical sans-serif bold digit 5 1D7F2^𝟲^\mathsfbf{6}^\mbfsanssix^N^mathord^mathsfbf^mathematical sans-serif bold digit 6 1D7F3^𝟳^\mathsfbf{7}^\mbfsansseven^N^mathord^mathsfbf^mathematical sans-serif bold digit 7 1D7F4^𝟴^\mathsfbf{8}^\mbfsanseight^N^mathord^mathsfbf^mathematical sans-serif bold digit 8 1D7F5^𝟵^\mathsfbf{9}^\mbfsansnine^N^mathord^mathsfbf^mathematical sans-serif bold digit 9 1D7F6^𝟶^\mathtt{0}^\mttzero^N^mathord^^mathematical monospace digit 0 1D7F7^𝟷^\mathtt{1}^\mttone^N^mathord^^mathematical monospace digit 1 1D7F8^𝟸^\mathtt{2}^\mtttwo^N^mathord^^mathematical monospace digit 2 1D7F9^𝟹^\mathtt{3}^\mttthree^N^mathord^^mathematical monospace digit 3 1D7FA^𝟺^\mathtt{4}^\mttfour^N^mathord^^mathematical monospace digit 4 1D7FB^𝟻^\mathtt{5}^\mttfive^N^mathord^^mathematical monospace digit 5 1D7FC^𝟼^\mathtt{6}^\mttsix^N^mathord^^mathematical monospace digit 6 1D7FD^𝟽^\mathtt{7}^\mttseven^N^mathord^^mathematical monospace digit 7 1D7FE^𝟾^\mathtt{8}^\mtteight^N^mathord^^mathematical monospace digit 8 1D7FF^𝟿^\mathtt{9}^\mttnine^N^mathord^^mathematical monospace digit 9 ================================================ FILE: latex2mathml/walker.py ================================================ from itertools import chain from typing import Any, Iterator, NamedTuple, Optional from latex2mathml import commands from latex2mathml.exceptions import ( DenominatorNotFoundError, DoubleSubscriptsError, DoubleSuperscriptsError, ExtraLeftOrMissingRightError, InvalidAlignmentError, InvalidStyleForGenfracError, InvalidWidthError, LimitsMustFollowMathOperatorError, MissingEndError, MissingSuperScriptOrSubscriptError, NoAvailableTokensError, NumeratorNotFoundError, ) from latex2mathml.symbols_parser import convert_symbol from latex2mathml.tokenizer import tokenize MULTIPRIMES = "multiprimes" MAX_MACRO_DEPTH = 100 class Node(NamedTuple): token: str children: Optional[tuple[Any, ...]] = None delimiter: Optional[str] = None alignment: Optional[str] = None text: Optional[str] = None attributes: Optional[dict[str, str]] = None modifier: Optional[str] = None def walk(data: str, display: str = "inline", macros: Optional[dict[str, tuple[list[str], int]]] = None) -> list[Node]: tokens = tokenize(data) block = display == "block" return _walk(tokens, block=block, macros={} if macros is None else macros) def _walk( tokens: Iterator[str], terminator: Optional[str] = None, limit: int = 0, block: bool = False, macros: Optional[dict[str, tuple[list[str], int]]] = None, depth: int = 0, ) -> list[Node]: _macros = {} if macros is None else macros group: list[Node] = [] token: str has_available_tokens = False for token in tokens: has_available_tokens = True if token == terminator: delimiter = None if terminator == commands.RIGHT: delimiter = next(tokens) group.append(Node(token=token, delimiter=delimiter)) break elif (token == commands.RIGHT != terminator) or (token == commands.MIDDLE and terminator != commands.RIGHT): raise ExtraLeftOrMissingRightError elif token == commands.LEFT: delimiter = next(tokens) children = tuple( _walk(tokens, terminator=commands.RIGHT, macros=_macros) ) # make \right as a child of \left if len(children) == 0 or children[-1].token != commands.RIGHT: raise ExtraLeftOrMissingRightError node = Node(token=token, children=children, delimiter=delimiter) elif token == commands.OPENING_BRACE: children = tuple(_walk(tokens, terminator=commands.CLOSING_BRACE, macros=_macros)) if len(children) and children[-1].token == commands.CLOSING_BRACE: children = children[:-1] node = Node(token=commands.BRACES, children=children) elif token in (commands.SUBSCRIPT, commands.SUPERSCRIPT): try: previous = group.pop() except IndexError: previous = Node(token="") # left operand can be empty if not present if token == previous.token == commands.SUBSCRIPT: raise DoubleSubscriptsError if (token == previous.token == commands.SUPERSCRIPT) and ( previous.children is not None and len(previous.children) >= 2 and previous.children[1].token != commands.PRIME ): raise DoubleSuperscriptsError modifier = None if previous.token in (commands.LIMITS, commands.NOLIMITS): modifier = previous.token try: previous = group.pop() if not previous.token.startswith("\\"): # TODO: Complete list of operators raise LimitsMustFollowMathOperatorError except IndexError: raise LimitsMustFollowMathOperatorError elif block and previous.token in (commands.SUMMATION, commands.PRODUCT): # block summation and product should result in limited sub/sup modifier = commands.LIMITS if token == commands.SUBSCRIPT and previous.token == commands.SUPERSCRIPT and previous.children is not None: children = tuple(_walk(tokens, terminator=terminator, limit=1, macros=_macros)) node = Node( token=commands.SUBSUP, children=(previous.children[0], *children, previous.children[1]), modifier=previous.modifier, ) elif ( token == commands.SUPERSCRIPT and previous.token == commands.SUBSCRIPT and previous.children is not None ): children = tuple(_walk(tokens, terminator=terminator, limit=1, macros=_macros)) node = Node(token=commands.SUBSUP, children=(*previous.children, *children), modifier=previous.modifier) elif ( token == commands.SUPERSCRIPT and previous.token == commands.SUPERSCRIPT and previous.children is not None and previous.children[1].token == commands.PRIME ): children = tuple(_walk(tokens, terminator=terminator, limit=1, macros=_macros)) node = Node( token=commands.SUPERSCRIPT, children=( previous.children[0], Node(token=commands.BRACES, children=(previous.children[1], *children)), ), modifier=previous.modifier, ) else: try: children = tuple(_walk(tokens, terminator=terminator, limit=1, macros=_macros)) except NoAvailableTokensError: raise MissingSuperScriptOrSubscriptError if previous.token in (commands.OVERBRACE, commands.UNDERBRACE): modifier = previous.token node = Node(token=token, children=(previous, *children), modifier=modifier) elif token == commands.APOSTROPHE: try: previous = group.pop() except IndexError: previous = Node(token="") # left operand can be empty if not present prev_is_super_with_children = ( previous.token == commands.SUPERSCRIPT and previous.children is not None and len(previous.children) >= 2 ) prev_prime = previous.children[1] if prev_is_super_with_children and previous.children else None prev_is_prime_token = prev_prime is not None and ( prev_prime.token in commands.PRIME_UPGRADE or prev_prime.token == commands.QPRIME or prev_prime.token == MULTIPRIMES ) if prev_is_super_with_children and not prev_is_prime_token: raise DoubleSuperscriptsError if prev_is_prime_token and previous.children is not None and prev_prime is not None: if prev_prime.token in commands.PRIME_UPGRADE: new_prime = Node(token=commands.PRIME_UPGRADE[prev_prime.token]) elif prev_prime.token == commands.QPRIME: new_prime = Node(token=MULTIPRIMES, text="5") else: new_prime = Node(token=MULTIPRIMES, text=str(int(prev_prime.text or "0") + 1)) node = Node(token=commands.SUPERSCRIPT, children=(previous.children[0], new_prime)) elif previous.token == commands.SUBSCRIPT and previous.children is not None: node = Node( token=commands.SUBSUP, children=(*previous.children, Node(token=commands.PRIME)), modifier=previous.modifier, ) else: node = Node(token=commands.SUPERSCRIPT, children=(previous, Node(token=commands.PRIME))) elif token in commands.COMMANDS_WITH_TWO_PARAMETERS: children = tuple(_walk(tokens, terminator=terminator, limit=2, macros=_macros)) if token in (commands.OVERSET, commands.STACKREL, commands.UNDERSET): children = children[::-1] node = Node(token=token, children=children) elif token in commands.COMMANDS_WITH_ONE_PARAMETER or ( token.startswith(commands.MATH) and token not in commands.MATH_NON_FONT_COMMANDS ): children = tuple(_walk(tokens, terminator=terminator, limit=1, macros=_macros)) node = Node(token=token, children=children) elif token == commands.NOT: try: next_node = tuple(_walk(tokens, terminator=terminator, limit=1, macros=_macros))[0] if next_node.token.startswith("\\"): negated_symbol = r"\n" + next_node.token[1:] symbol = convert_symbol(negated_symbol) if symbol: node = Node(token=negated_symbol) group.append(node) continue node = Node(token=token) group.extend((node, next_node)) continue except NoAvailableTokensError: node = Node(token=token) elif token in commands.EXTENSIBLE_ARROWS: children = tuple(_walk(tokens, terminator=terminator, limit=1, macros=_macros)) if children[0].token == commands.OPENING_BRACKET: children = ( Node( token=commands.BRACES, children=tuple(_walk(tokens, terminator=commands.CLOSING_BRACKET, macros=_macros))[:-1], ), *tuple(_walk(tokens, terminator=terminator, limit=1, macros=_macros)), ) node = Node(token=token, children=children) elif token in (commands.HSKIP, commands.HSPACE, commands.KERN, commands.MKERN, commands.MSKIP, commands.MSPACE): children = tuple(_walk(tokens, terminator=terminator, limit=1, macros=_macros)) node = Node(token=token, attributes={"width": _unwrap_token(children[0])}) elif token in (commands.RAISE, commands.LOWER, commands.MOVELEFT, commands.MOVERIGHT): dim_children = tuple(_walk(tokens, terminator=terminator, limit=1, macros=_macros)) dim = _unwrap_token(dim_children[0]) if dim_children else "0" children = tuple(_walk(tokens, terminator=terminator, limit=1, macros=_macros)) if token == commands.RAISE: attributes = {"voffset": dim, "height": f"+{dim}", "depth": f"-{dim}"} elif token == commands.LOWER: attributes = {"voffset": f"-{dim}", "height": f"-{dim}", "depth": f"+{dim}"} elif token == commands.MOVELEFT: attributes = {"lspace": f"-{dim}"} else: attributes = {"lspace": dim} node = Node(token=token, children=children, attributes=attributes) elif token == commands.RULE: dims = [] for _ in range(2): arg = tuple(_walk(tokens, terminator=terminator, limit=1, macros=_macros))[0] dims.append(_unwrap_token(arg)) node = Node(token=token, attributes={"width": dims[0], "height": dims[1]}) elif token == commands.SMASH: children = tuple(_walk(tokens, terminator=terminator, limit=1, macros=_macros)) attributes = {"height": "0px", "depth": "0px"} if children[0].token == commands.OPENING_BRACKET: opt = tuple(_walk(tokens, terminator=commands.CLOSING_BRACKET, macros=_macros))[:-1] if opt and opt[0].token == "b": attributes = {"depth": "0px"} elif opt and opt[0].token == "t": attributes = {"height": "0px"} children = tuple(_walk(tokens, terminator=terminator, limit=1, macros=_macros)) node = Node(token=token, children=children, attributes=attributes) elif token == commands.TEXTCOLOR: color = next(tokens) children = tuple(_walk(tokens, terminator=terminator, limit=1, macros=_macros)) node = Node(token=commands.COLOR, children=children, attributes={"mathcolor": color}) elif token in (commands.COLORBOX, commands.FCOLORBOX): arg_count = 3 if token == commands.FCOLORBOX else 2 args = [] for _ in range(arg_count): arg_node = tuple(_walk(tokens, terminator=terminator, limit=1, macros=_macros))[0] args.append("".join(c.token for c in arg_node.children) if arg_node.children else "") if token == commands.FCOLORBOX: attributes = {"mathbackground": args[1], "border-color": args[0]} else: attributes = {"mathbackground": args[0]} node = Node(token=token, text=args[-1], attributes=attributes) elif token == commands.COLOR: attributes = {"mathcolor": next(tokens)} children = tuple(_walk(tokens, terminator=terminator, macros=_macros)) sibling = None if len(children) and children[-1].token == terminator: children, sibling = children[:-1], children[-1] group.append(Node(token=token, children=children, attributes=attributes)) if sibling: group.append(sibling) break elif token in (commands.LEFTROOT, commands.UPROOT): # Consume the numeric argument but discard — MathML has no root index positioning tuple(_walk(tokens, terminator=terminator, limit=1, macros=_macros)) continue elif token == commands.MATHCHOICE: choices = tuple(_walk(tokens, terminator=terminator, limit=4, macros=_macros)) # In block (display) mode use arg 0, in inline (text) mode use arg 1 choice = choices[0] if block else choices[1] if choice.children: for child in choice.children: group.append(child) else: group.append(choice) continue elif token in (commands.CLASS, commands.STYLE): attr_name = "class" if token == commands.CLASS else "style" attributes = {attr_name: next(tokens)} next_node = tuple(_walk(tokens, terminator=terminator, limit=1, macros=_macros))[0] node = next_node._replace(attributes=attributes) elif token in ( *commands.BIG.keys(), *commands.BIG_OPEN_CLOSE.keys(), commands.CLAP, commands.EMPH, commands.FBOX, commands.HBOX, commands.LLAP, commands.MBOX, commands.MIDDLE, commands.RLAP, commands.TAG, commands.TAGSTAR, commands.TEXT, commands.TEXTBF, commands.TEXTIT, commands.TEXTMD, commands.TEXTNORMAL, commands.TEXTRM, commands.TEXTSF, commands.TEXTTT, commands.TEXTUP, commands.VERB, ): node = Node(token=token, text=next(tokens)) elif token == commands.HREF: attributes = {"href": next(tokens)} children = tuple(_walk(tokens, terminator=terminator, limit=1, macros=_macros)) node = Node(token=token, children=children, attributes=attributes) elif token in ( commands.ABOVE, commands.ATOP, commands.ABOVEWITHDELIMS, commands.ATOPWITHDELIMS, commands.BRACE, commands.BRACK, commands.CHOOSE, commands.OVER, ): attributes = None delimiter = None if token == commands.ABOVEWITHDELIMS: delimiter = next(tokens).lstrip("\\") + next(tokens).lstrip("\\") elif token == commands.ATOPWITHDELIMS: attributes = {"linethickness": "0"} delimiter = next(tokens).lstrip("\\") + next(tokens).lstrip("\\") elif token == commands.BRACE: delimiter = "{}" elif token == commands.BRACK: delimiter = "[]" elif token == commands.CHOOSE: delimiter = "()" if token in (commands.ABOVE, commands.ABOVEWITHDELIMS): dimension_node = tuple(_walk(tokens, terminator=terminator, limit=1, macros=_macros))[0] dimension = _unwrap_token(dimension_node) attributes = {"linethickness": dimension} elif token in (commands.ATOP, commands.BRACE, commands.BRACK, commands.CHOOSE): attributes = {"linethickness": "0"} denominator = tuple(_walk(tokens, terminator=terminator, macros=_macros)) sibling = None if len(denominator) and denominator[-1].token == terminator: denominator, sibling = denominator[:-1], denominator[-1] if len(denominator) == 0: if token in (commands.BRACE, commands.BRACK): denominator = (Node(token=commands.BRACES, children=()),) else: raise DenominatorNotFoundError if len(group) == 0: if token in (commands.BRACE, commands.BRACK): group = [Node(token=commands.BRACES, children=())] else: raise NumeratorNotFoundError if len(denominator) > 1: denominator = (Node(token=commands.BRACES, children=denominator),) if len(group) == 1: children = (*group, *denominator) else: children = (Node(token=commands.BRACES, children=tuple(group)), *denominator) group = [Node(token=commands.FRAC, children=children, attributes=attributes, delimiter=delimiter)] if sibling is not None: group.append(sibling) break elif token == commands.SQRT: root_nodes = None next_node = tuple(_walk(tokens, limit=1, macros=_macros))[0] if next_node.token == commands.OPENING_BRACKET: root_nodes = tuple(_walk(tokens, terminator=commands.CLOSING_BRACKET, macros=_macros))[:-1] next_node = tuple(_walk(tokens, limit=1, macros=_macros))[0] if len(root_nodes) > 1: root_nodes = (Node(token=commands.BRACES, children=root_nodes),) if root_nodes: node = Node(token=commands.ROOT, children=(next_node, *root_nodes)) else: node = Node(token=token, children=(next_node,)) elif token == commands.ROOT: root_nodes = tuple(_walk(tokens, terminator=r"\of", macros=_macros))[:-1] next_node = tuple(_walk(tokens, limit=1, macros=_macros))[0] if len(root_nodes) > 1: root_nodes = (Node(token=commands.BRACES, children=root_nodes),) if root_nodes: node = Node(token=token, children=(next_node, *root_nodes)) else: node = Node(token=token, children=(next_node, Node(token=commands.BRACES, children=()))) elif token in commands.MATRICES: children = tuple(_walk(tokens, terminator=terminator, macros=_macros)) sibling = None if len(children) and children[-1].token == terminator: children, sibling = children[:-1], children[-1] if len(children) == 1 and children[0].token == commands.BRACES and children[0].children: children = children[0].children if sibling is not None: group.extend([Node(token=token, children=children, alignment=""), sibling]) break else: node = Node(token=token, children=children, alignment="") elif token == commands.GENFRAC: delimiter = next(tokens).lstrip("\\") + next(tokens).lstrip("\\") dimension_node, style_node = tuple(_walk(tokens, terminator=terminator, limit=2, macros=_macros)) dimension = _unwrap_token(dimension_node) style = _get_style(style_node) attributes = {"linethickness": dimension} children = tuple(_walk(tokens, terminator=terminator, limit=2, macros=_macros)) group.extend( [Node(token=style), Node(token=token, children=children, delimiter=delimiter, attributes=attributes)] ) break elif token == commands.SIDESET: left, right, operator = tuple(_walk(tokens, terminator=terminator, limit=3, macros=_macros)) left_token, left_children = _make_subsup(left) right_token, right_children = _make_subsup(right) attributes = {"movablelimits": "false"} node = Node( token=token, children=( Node( token=left_token, children=( Node( token=commands.VPHANTOM, children=( Node(token=operator.token, children=operator.children, attributes=attributes), ), ), *left_children, ), ), Node( token=right_token, children=( Node(token=operator.token, children=operator.children, attributes=attributes), *right_children, ), ), ), ) elif token == commands.SKEW: width_node, child = tuple(_walk(tokens, terminator=terminator, limit=2, macros=_macros)) width = width_node.token if width == commands.BRACES: if width_node.children is None or len(width_node.children) == 0: raise InvalidWidthError width = width_node.children[0].token if not width.isdigit(): raise InvalidWidthError node = Node(token=token, children=(child,), attributes={"width": f"{0.0555 * int(width):.3f}em"}) elif token.startswith(commands.BEGIN): node = _get_environment_node(token, tokens, macros=_macros, block=block) elif token == commands.NEWCOMMAND: _parse_newcommand(tokens, _macros) continue elif token == commands.DEF: _parse_def(tokens, _macros) continue elif token == commands.DECLAREMATHOPERATOR: _parse_declare_math_operator(tokens, _macros) continue elif token == commands.NEWENVIRONMENT: _parse_newenvironment(tokens, _macros) continue elif token in _macros: if depth >= MAX_MACRO_DEPTH: raise RecursionError(f"Maximum macro expansion depth ({MAX_MACRO_DEPTH}) exceeded") expanded_tokens = _expand_macro(token, tokens, _macros) if not expanded_tokens: continue chained = chain(iter(expanded_tokens), tokens) remaining_limit = max(0, limit - len(group)) if limit else 0 group.extend( _walk( chained, terminator=terminator, block=block, macros=_macros, depth=depth + 1, limit=remaining_limit ) ) break else: node = Node(token=token) group.append(node) if limit and len(group) >= limit: break if not has_available_tokens: raise NoAvailableTokensError return group def _make_subsup(node: Node) -> tuple[str, tuple[Node, ...]]: if node.token != commands.BRACES: raise MissingSuperScriptOrSubscriptError if ( node.children is not None and len(node.children) > 0 and node.children[0].children is not None and 2 <= len(node.children[0].children) <= 3 and node.children[0].token in ( commands.SUBSUP, commands.SUBSCRIPT, commands.SUPERSCRIPT, ) ): token = node.children[0].token children = node.children[0].children[1:] return token, children return "", () def _unwrap_token(node: Node) -> str: dimension = node.token if node.token == commands.BRACES and node.children is not None: dimension = node.children[0].token return dimension def _get_style(node: Node) -> str: style = _unwrap_token(node) if style == "0": return commands.DISPLAYSTYLE if style == "1": return commands.TEXTSTYLE if style == "2": return commands.SCRIPTSTYLE if style == "3": return commands.SCRIPTSCRIPTSTYLE raise InvalidStyleForGenfracError def _get_environment_node( token: str, tokens: Iterator[str], macros: Optional[dict[str, tuple[list[str], int]]] = None, block: bool = False, ) -> Node: _macros = {} if macros is None else macros start_index = token.index("{") + 1 environment = token[start_index:-1] env_key = f"\\begin{{{environment}}}" if env_key in _macros: begin_body, nargs = _macros[env_key] end_body, _ = _macros.get(f"\\end{{{environment}}}", ([], 0)) args: list[list[str]] = [] for _ in range(nargs): args.append(_consume_brace_arg(tokens)) terminator = rf"{commands.END}{{{environment}}}" raw_tokens: list[str] = [] found_end = False for t in tokens: if t == terminator: found_end = True break raw_tokens.append(t) if not found_end: raise MissingEndError begin_expanded = _substitute_params(begin_body, args) end_expanded = _substitute_params(end_body, args) expanded = [*begin_expanded, *raw_tokens, *end_expanded] result = _walk(iter(expanded), macros=_macros, block=block) if len(result) == 1: return result[0] return Node(token=commands.BRACES, children=tuple(result)) terminator = rf"{commands.END}{{{environment}}}" children = tuple(_walk(tokens, terminator=terminator, macros=macros, block=block)) if len(children) and children[-1].token != terminator: raise MissingEndError children = children[:-1] alignment = "" if len(children) and children[0].token == commands.OPENING_BRACKET: children_iter = iter(children) next(children_iter) # remove BRACKET for c in children_iter: if c.token == commands.CLOSING_BRACKET: break elif c.token not in "lcr|": raise InvalidAlignmentError alignment += c.token children = tuple(children_iter) elif ( len(children) and children[0].children is not None and children[0].token == commands.BRACES and all(c.token in "lcr|" for c in children[0].children) ): alignment = "".join(c.token for c in children[0].children) children = children[1:] return Node(token=rf"\{environment}", children=children, alignment=alignment) def _consume_brace_arg(tokens: Iterator[str]) -> list[str]: token = next(tokens) if token == "{": return _read_until_close_brace(tokens) return [token] def _parse_optional_int(tokens: Iterator[str]) -> tuple[int, str]: peek = next(tokens) if peek != "[": return 0, peek nargs_str = "" for t in tokens: if t == "]": break nargs_str += t return int(nargs_str), next(tokens) def _parse_newcommand(tokens: Iterator[str], macros: dict[str, tuple[list[str], int]]) -> None: name_tokens = _consume_brace_arg(tokens) name = "".join(name_tokens) nargs, peek = _parse_optional_int(tokens) if peek == "[": for t in tokens: if t == "]": break peek = next(tokens) if peek == "{": body = _read_until_close_brace(tokens) else: body = [peek] macros[name] = (body, nargs) def _read_until_close_brace(tokens: Iterator[str]) -> list[str]: depth = 1 content: list[str] = [] for t in tokens: if t == "{": depth += 1 content.append(t) elif t == "}": depth -= 1 if depth == 0: return content content.append(t) else: content.append(t) return content def _parse_newenvironment(tokens: Iterator[str], macros: dict[str, tuple[list[str], int]]) -> None: name_tokens = _consume_brace_arg(tokens) name = "".join(name_tokens) nargs, peek = _parse_optional_int(tokens) if peek == "{": begin_body = _read_until_close_brace(tokens) else: begin_body = [peek] end_body = _consume_brace_arg(tokens) macros[f"\\begin{{{name}}}"] = (begin_body, nargs) macros[f"\\end{{{name}}}"] = (end_body, 0) def _parse_def(tokens: Iterator[str], macros: dict[str, tuple[list[str], int]]) -> None: name = next(tokens) nargs = 0 for t in tokens: if t == "#": param = next(tokens, "") if param.isdigit(): nargs = max(nargs, int(param)) elif t == "{": break body = _read_until_close_brace(tokens) macros[name] = (body, nargs) def _parse_declare_math_operator(tokens: Iterator[str], macros: dict[str, tuple[list[str], int]]) -> None: name_tokens = _consume_brace_arg(tokens) name = "".join(name_tokens) text_tokens = _consume_brace_arg(tokens) text = "".join(text_tokens) macros[name] = ([rf"\operatorname{{{text}}}"], 0) def _substitute_params(body: list[str], args: list[list[str]]) -> list[str]: if not args: return list(body) expanded: list[str] = [] body_iter = iter(body) for tok in body_iter: if tok == "#": param_num = next(body_iter, "") if param_num.isdigit() and 1 <= int(param_num) <= len(args): expanded.extend(args[int(param_num) - 1]) else: expanded.append(tok) if param_num: expanded.append(param_num) else: expanded.append(tok) return expanded def _expand_macro(token: str, tokens: Iterator[str], macros: dict[str, tuple[list[str], int]]) -> list[str]: body, nargs = macros[token] if nargs == 0: return list(body) args: list[list[str]] = [] for _ in range(nargs): args.append(_consume_brace_arg(tokens)) return _substitute_params(body, args) ================================================ FILE: pyproject.toml ================================================ [project] name = "latex2mathml" version = "3.81.0" description = "Pure Python library for LaTeX to MathML conversion" authors = [ { name = "Ronie Martinez", email = "ronmarti18@gmail.com" } ] license = { text = "MIT" } readme = "README.md" keywords = [ "latex", "mathml" ] classifiers = [ "Development Status :: 5 - Production/Stable", "Topic :: Scientific/Engineering :: Mathematics", "Topic :: Software Development :: Libraries :: Python Modules", "Topic :: Text Processing :: Markup :: HTML", "Topic :: Text Processing :: Markup :: LaTeX", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Programming Language :: Python :: 3.14", "Programming Language :: Python :: Implementation :: CPython", ] requires-python = ">=3.10" dependencies = [ ] [project.urls] repository = "https://github.com/roniemartinez/latex2mathml" "Donate" = "https://www.buymeacoffee.com/roniemartinez" [project.scripts] latex2mathml = "latex2mathml.converter:main" l2m = "latex2mathml.converter:main" [dependency-groups] dev = [ "mypy>=1.19.1", "pre-commit>=4.5.1", "pytest>=9.0.2", "pytest-clarity>=1.0.1", "pytest-cov>=7.0.0", "ruff>=0.15.6", "syrupy>=5.1.0", ] [tool.ruff] line-length = 120 target-version = "py310" [tool.ruff.lint] select = ["E", "F", "I", "W"] ignore = ["E203"] [tool.ruff.lint.isort] known-first-party = ["latex2mathml"] [tool.mypy] disallow_untyped_defs = true ignore_missing_imports = true [tool.pytest.ini_options] addopts = """\ --cov=latex2mathml \ --cov-report=term-missing \ --cov-report=xml \ --cov-report=html \ -vv \ -x \ """ [build-system] requires = ["uv_build>=0.10.11,<0.12.0"] build-backend = "uv_build" [tool.uv.build-backend] module-root = "" ================================================ FILE: tests/__init__.py ================================================ ================================================ FILE: tests/__snapshots__/test_converter/test_convert_to_element.html ================================================ 1 ================================================ FILE: tests/__snapshots__/test_converter/test_convert_to_element_with_parent.html ================================================
1
================================================ FILE: tests/__snapshots__/test_converter/test_converter[307-a].html ================================================ 1234 ================================================ FILE: tests/__snapshots__/test_converter/test_converter[307-b].html ================================================ C°C ================================================ FILE: tests/__snapshots__/test_converter/test_converter[And].html ================================================ & ================================================ FILE: tests/__snapshots__/test_converter/test_converter[Bbb-group].html ================================================ ABC ================================================ FILE: tests/__snapshots__/test_converter/test_converter[Bmatrix].html ================================================ {} ================================================ FILE: tests/__snapshots__/test_converter/test_converter[LaTeX-with-style].html ================================================ LATEX ================================================ FILE: tests/__snapshots__/test_converter/test_converter[LaTeX].html ================================================ LATEX ================================================ FILE: tests/__snapshots__/test_converter/test_converter[Pr].html ================================================ Pr ================================================ FILE: tests/__snapshots__/test_converter/test_converter[S].html ================================================ § ================================================ FILE: tests/__snapshots__/test_converter/test_converter[TeX-with-style].html ================================================ TEX ================================================ FILE: tests/__snapshots__/test_converter/test_converter[TeX].html ================================================ TEX ================================================ FILE: tests/__snapshots__/test_converter/test_converter[above].html ================================================ ab+cd ================================================ FILE: tests/__snapshots__/test_converter/test_converter[abovewithdelims].html ================================================ [ab]+cd ================================================ FILE: tests/__snapshots__/test_converter/test_converter[acute].html ================================================ a´bc´ ================================================ FILE: tests/__snapshots__/test_converter/test_converter[align-nonumber].html ================================================ x=1y=2(1) ================================================ FILE: tests/__snapshots__/test_converter/test_converter[align-notag].html ================================================ x=1y=2(1) ================================================ FILE: tests/__snapshots__/test_converter/test_converter[align0].html ================================================ x=yw=za=b ================================================ FILE: tests/__snapshots__/test_converter/test_converter[align1].html ================================================ x=1(1)y=2(2) ================================================ FILE: tests/__snapshots__/test_converter/test_converter[arctg].html ================================================ arctgx ================================================ FILE: tests/__snapshots__/test_converter/test_converter[argmax].html ================================================ arg maxx ================================================ FILE: tests/__snapshots__/test_converter/test_converter[array-with-horizontal-lines].html ================================================ 12345678 ================================================ FILE: tests/__snapshots__/test_converter/test_converter[array-with-vertical-bar].html ================================================ 123456 ================================================ FILE: tests/__snapshots__/test_converter/test_converter[atop-and-atopwithdelims].html ================================================ a|bc} ================================================ FILE: tests/__snapshots__/test_converter/test_converter[backslash-e].html ================================================ \e ================================================ FILE: tests/__snapshots__/test_converter/test_converter[big].html ================================================ [[[[[ ================================================ FILE: tests/__snapshots__/test_converter/test_converter[bigcirc].html ================================================ ================================================ FILE: tests/__snapshots__/test_converter/test_converter[bigl-smallmatrix-bigr].html ================================================ (123456) ================================================ FILE: tests/__snapshots__/test_converter/test_converter[binomial-coefficients].html ================================================ (ab) ================================================ FILE: tests/__snapshots__/test_converter/test_converter[binomial].html ================================================ (23) ================================================ FILE: tests/__snapshots__/test_converter/test_converter[blackboard-bold].html ================================================ var=1+{b} ================================================ FILE: tests/__snapshots__/test_converter/test_converter[bm].html ================================================ x ================================================ FILE: tests/__snapshots__/test_converter/test_converter[bmod].html ================================================ 9mod2 ================================================ FILE: tests/__snapshots__/test_converter/test_converter[bold].html ================================================ x ================================================ FILE: tests/__snapshots__/test_converter/test_converter[boldsymbol].html ================================================ var=1+{b} ================================================ FILE: tests/__snapshots__/test_converter/test_converter[boxed-box].html ================================================ ================================================ FILE: tests/__snapshots__/test_converter/test_converter[bra].html ================================================ ψ ================================================ FILE: tests/__snapshots__/test_converter/test_converter[brace-1].html ================================================ []+[ab] ================================================ FILE: tests/__snapshots__/test_converter/test_converter[brace].html ================================================ {}+{ab} ================================================ FILE: tests/__snapshots__/test_converter/test_converter[braket].html ================================================ ϕ|ψ ================================================ FILE: tests/__snapshots__/test_converter/test_converter[breve].html ================================================ a˘bc˘ ================================================ FILE: tests/__snapshots__/test_converter/test_converter[calligraphic-mode].html ================================================ var=1+{b}+B ================================================ FILE: tests/__snapshots__/test_converter/test_converter[cancel].html ================================================ x ================================================ FILE: tests/__snapshots__/test_converter/test_converter[centerdot].html ================================================ ab ================================================ FILE: tests/__snapshots__/test_converter/test_converter[cfrac].html ================================================ 21+21 ================================================ FILE: tests/__snapshots__/test_converter/test_converter[check].html ================================================ aˇbcˇ ================================================ FILE: tests/__snapshots__/test_converter/test_converter[choose].html ================================================ (ab) ================================================ FILE: tests/__snapshots__/test_converter/test_converter[circledS].html ================================================ ================================================ FILE: tests/__snapshots__/test_converter/test_converter[class].html ================================================ x+y ================================================ FILE: tests/__snapshots__/test_converter/test_converter[color].html ================================================ abcd ================================================ FILE: tests/__snapshots__/test_converter/test_converter[colorbox].html ================================================ x+y ================================================ FILE: tests/__snapshots__/test_converter/test_converter[command-inside-matrix].html ================================================ 12 ================================================ FILE: tests/__snapshots__/test_converter/test_converter[comments].html ================================================ 100%! ================================================ FILE: tests/__snapshots__/test_converter/test_converter[complex-matrix].html ================================================ a1b2c3d4 ================================================ FILE: tests/__snapshots__/test_converter/test_converter[ddot-dddot-ddddot].html ================================================ a¨bc ================================================ FILE: tests/__snapshots__/test_converter/test_converter[decimal-numbers].html ================================================ 12.34 ================================================ FILE: tests/__snapshots__/test_converter/test_converter[degree-polynomial].html ================================================ deg(f(x)) ================================================ FILE: tests/__snapshots__/test_converter/test_converter[degree].html ================================================ 90° ================================================ FILE: tests/__snapshots__/test_converter/test_converter[determinant].html ================================================ det(A) ================================================ FILE: tests/__snapshots__/test_converter/test_converter[dfrac].html ================================================ ab ================================================ FILE: tests/__snapshots__/test_converter/test_converter[diagdown-diagup].html ================================================ ================================================ FILE: tests/__snapshots__/test_converter/test_converter[dimension-vector-space].html ================================================ dim(A) ================================================ FILE: tests/__snapshots__/test_converter/test_converter[displaylines].html ================================================ a=aif a=b then b=aif a=b and b=c then a=c ================================================ FILE: tests/__snapshots__/test_converter/test_converter[displaystyle].html ================================================ ab+cd+ef+gh ================================================ FILE: tests/__snapshots__/test_converter/test_converter[dots].html ================================================ x1,,xn ================================================ FILE: tests/__snapshots__/test_converter/test_converter[dotsb].html ================================================ x1++xn ================================================ FILE: tests/__snapshots__/test_converter/test_converter[dotsc].html ================================================ x1,,xn ================================================ FILE: tests/__snapshots__/test_converter/test_converter[dotsi].html ================================================ A1An ================================================ FILE: tests/__snapshots__/test_converter/test_converter[dotsm].html ================================================ x1xn ================================================ FILE: tests/__snapshots__/test_converter/test_converter[dotso].html ================================================ A1An ================================================ FILE: tests/__snapshots__/test_converter/test_converter[double-pipe].html ================================================ x ================================================ FILE: tests/__snapshots__/test_converter/test_converter[emph].html ================================================  Hello  ================================================ FILE: tests/__snapshots__/test_converter/test_converter[empty-color-works].html ================================================ ab ================================================ FILE: tests/__snapshots__/test_converter/test_converter[empty-subscript].html ================================================ 1 ================================================ FILE: tests/__snapshots__/test_converter/test_converter[emptyset].html ================================================ ================================================ FILE: tests/__snapshots__/test_converter/test_converter[eqalign].html ================================================ a=bc=d ================================================ FILE: tests/__snapshots__/test_converter/test_converter[escaped-characters].html ================================================ #$%&_{} ================================================ FILE: tests/__snapshots__/test_converter/test_converter[exponent-without-base-works].html ================================================ 3 ================================================ FILE: tests/__snapshots__/test_converter/test_converter[exponential-function].html ================================================ expx ================================================ FILE: tests/__snapshots__/test_converter/test_converter[fbox].html ================================================  Hello!  ================================================ FILE: tests/__snapshots__/test_converter/test_converter[fcolorbox].html ================================================ x+y ================================================ FILE: tests/__snapshots__/test_converter/test_converter[footnotesize].html ================================================ x ================================================ FILE: tests/__snapshots__/test_converter/test_converter[fraktur].html ================================================ var=1+{b}+B ================================================ FILE: tests/__snapshots__/test_converter/test_converter[genfrac-displaystyle].html ================================================ {a+bc+d] ================================================ FILE: tests/__snapshots__/test_converter/test_converter[genfrac-scriptscriptstyle].html ================================================ {a+bc+d} ================================================ FILE: tests/__snapshots__/test_converter/test_converter[genfrac-scriptstyle].html ================================================ (a+bc+d ================================================ FILE: tests/__snapshots__/test_converter/test_converter[genfrac-textstyle].html ================================================ (a+bc+d| ================================================ FILE: tests/__snapshots__/test_converter/test_converter[gggtr].html ================================================ ================================================ FILE: tests/__snapshots__/test_converter/test_converter[global-fonts].html ================================================ xvar=1+{b}Δ ================================================ FILE: tests/__snapshots__/test_converter/test_converter[grave].html ================================================ a`bc` ================================================ FILE: tests/__snapshots__/test_converter/test_converter[greatest-common-divisor].html ================================================ gcdsubsup ================================================ FILE: tests/__snapshots__/test_converter/test_converter[gt].html ================================================ > ================================================ FILE: tests/__snapshots__/test_converter/test_converter[gvertneqq].html ================================================ ================================================ FILE: tests/__snapshots__/test_converter/test_converter[hat].html ================================================ a^bc^ ================================================ FILE: tests/__snapshots__/test_converter/test_converter[hbox-with-backslash-in-text].html ================================================ \alpha α ================================================ FILE: tests/__snapshots__/test_converter/test_converter[hbox-with-math-mode].html ================================================ left x>0 center \$x > 0\$ right ================================================ FILE: tests/__snapshots__/test_converter/test_converter[hbox].html ================================================ This is a sentence. ================================================ FILE: tests/__snapshots__/test_converter/test_converter[hfil].html ================================================ xxxxxxxxxxxxxxxxxxababab ================================================ FILE: tests/__snapshots__/test_converter/test_converter[hom].html ================================================ hom ================================================ FILE: tests/__snapshots__/test_converter/test_converter[hphantom].html ================================================ Side Angle SideSide Angle S ================================================ FILE: tests/__snapshots__/test_converter/test_converter[href].html ================================================ latex2mathml ================================================ FILE: tests/__snapshots__/test_converter/test_converter[huge].html ================================================ [[[[[[ ================================================ FILE: tests/__snapshots__/test_converter/test_converter[idotsint].html ================================================ ================================================ FILE: tests/__snapshots__/test_converter/test_converter[inf].html ================================================ infx>sf(x) ================================================ FILE: tests/__snapshots__/test_converter/test_converter[injlim].html ================================================ inj lim ================================================ FILE: tests/__snapshots__/test_converter/test_converter[inner-group].html ================================================ a+b ================================================ FILE: tests/__snapshots__/test_converter/test_converter[intop].html ================================================ ================================================ FILE: tests/__snapshots__/test_converter/test_converter[issue-103].html ================================================ AB ================================================ FILE: tests/__snapshots__/test_converter/test_converter[issue-106].html ================================================ {x=1y=2 ================================================ FILE: tests/__snapshots__/test_converter/test_converter[issue-108-1].html ================================================ maxf ================================================ FILE: tests/__snapshots__/test_converter/test_converter[issue-108-2].html ================================================ max{a,b,c} ================================================ FILE: tests/__snapshots__/test_converter/test_converter[issue-108-3].html ================================================ min(x,y) ================================================ FILE: tests/__snapshots__/test_converter/test_converter[issue-109-1].html ================================================ snx ================================================ FILE: tests/__snapshots__/test_converter/test_converter[issue-109-2].html ================================================ sn(x+y) ================================================ FILE: tests/__snapshots__/test_converter/test_converter[issue-112-1].html ================================================ A˙ ================================================ FILE: tests/__snapshots__/test_converter/test_converter[issue-112-2].html ================================================ A˙ ================================================ FILE: tests/__snapshots__/test_converter/test_converter[issue-118].html ================================================ Let x=number of cats. ================================================ FILE: tests/__snapshots__/test_converter/test_converter[issue-125-1-overset].html ================================================ F(a,n)=aaaantexta ================================================ FILE: tests/__snapshots__/test_converter/test_converter[issue-125-2-overset].html ================================================ a=?b ================================================ FILE: tests/__snapshots__/test_converter/test_converter[issue-125-3-underset].html ================================================ ba ================================================ FILE: tests/__snapshots__/test_converter/test_converter[issue-125-4-limits].html ================================================ x01 ================================================ FILE: tests/__snapshots__/test_converter/test_converter[issue-125-4-mathop].html ================================================ atbtc ================================================ FILE: tests/__snapshots__/test_converter/test_converter[issue-301-a].html ================================================ 0π ================================================ FILE: tests/__snapshots__/test_converter/test_converter[issue-301-b].html ================================================ π ================================================ FILE: tests/__snapshots__/test_converter/test_converter[issue-301-c].html ================================================ π ================================================ FILE: tests/__snapshots__/test_converter/test_converter[issue-33].html ================================================ [a1,1a1,2a1,na2,1a2,2a2,nam,1am,2am,n] ================================================ FILE: tests/__snapshots__/test_converter/test_converter[issue-42].html ================================================ (25)2=±25 ================================================ FILE: tests/__snapshots__/test_converter/test_converter[issue-44].html ================================================ (x3+5)5 ================================================ FILE: tests/__snapshots__/test_converter/test_converter[issue-45-gt].html ================================================ 2>5 ================================================ FILE: tests/__snapshots__/test_converter/test_converter[issue-45-lt].html ================================================ 2<5 ================================================ FILE: tests/__snapshots__/test_converter/test_converter[issue-462-octuple-prime].html ================================================ f′′′′′′′′(x) ================================================ FILE: tests/__snapshots__/test_converter/test_converter[issue-462-quadruple-prime].html ================================================ f(x) ================================================ FILE: tests/__snapshots__/test_converter/test_converter[issue-462-quintuple-prime].html ================================================ f′′′′′(x) ================================================ FILE: tests/__snapshots__/test_converter/test_converter[issue-462-triple-prime].html ================================================ f(x) ================================================ FILE: tests/__snapshots__/test_converter/test_converter[issue-498-prod].html ================================================ 0π ================================================ FILE: tests/__snapshots__/test_converter/test_converter[issue-498-sum].html ================================================ 0π ================================================ FILE: tests/__snapshots__/test_converter/test_converter[issue-51].html ================================================ ================================================ FILE: tests/__snapshots__/test_converter/test_converter[issue-52].html ================================================ z1¯=z2 ================================================ FILE: tests/__snapshots__/test_converter/test_converter[issue-60-1].html ================================================ ... ================================================ FILE: tests/__snapshots__/test_converter/test_converter[issue-60-2].html ================================================ ...+... ================================================ FILE: tests/__snapshots__/test_converter/test_converter[issue-61].html ================================================ x+4x+123(x+5)x+48 ================================================ FILE: tests/__snapshots__/test_converter/test_converter[issue-63].html ================================================ (x3)+v ================================================ FILE: tests/__snapshots__/test_converter/test_converter[issue-75-1-row].html ================================================ ξ2=g(x) ================================================ FILE: tests/__snapshots__/test_converter/test_converter[issue-75-2-rows].html ================================================ 1inij ================================================ FILE: tests/__snapshots__/test_converter/test_converter[issue-76].html ================================================ 0π ================================================ FILE: tests/__snapshots__/test_converter/test_converter[issue-77].html ================================================ [1000010000100001] ================================================ FILE: tests/__snapshots__/test_converter/test_converter[issue-91].html ================================================ tanx+secx+cosx+sinx+cotx+cscx+arccosx+arcsinx+arctanx+coshx+cothx+sinhx+tanhx ================================================ FILE: tests/__snapshots__/test_converter/test_converter[issue-98].html ================================================ pmax ================================================ FILE: tests/__snapshots__/test_converter/test_converter[ker].html ================================================ ker ================================================ FILE: tests/__snapshots__/test_converter/test_converter[ket].html ================================================ ψ ================================================ FILE: tests/__snapshots__/test_converter/test_converter[lVert-double].html ================================================ ================================================ FILE: tests/__snapshots__/test_converter/test_converter[large].html ================================================ [[[[[[[ ================================================ FILE: tests/__snapshots__/test_converter/test_converter[ldotp].html ================================================ . ================================================ FILE: tests/__snapshots__/test_converter/test_converter[left-and-right].html ================================================ (x) ================================================ FILE: tests/__snapshots__/test_converter/test_converter[leftroot-uproot].html ================================================ x3 ================================================ FILE: tests/__snapshots__/test_converter/test_converter[lg].html ================================================ lg ================================================ FILE: tests/__snapshots__/test_converter/test_converter[liminf].html ================================================ lim inf ================================================ FILE: tests/__snapshots__/test_converter/test_converter[limit-at-plus-infinity].html ================================================ limx+f(x) ================================================ FILE: tests/__snapshots__/test_converter/test_converter[limsup].html ================================================ lim sup ================================================ FILE: tests/__snapshots__/test_converter/test_converter[llap].html ================================================ x ================================================ FILE: tests/__snapshots__/test_converter/test_converter[llless].html ================================================ ================================================ FILE: tests/__snapshots__/test_converter/test_converter[logarithm-with-base].html ================================================ log2x ================================================ FILE: tests/__snapshots__/test_converter/test_converter[logarithm].html ================================================ logx ================================================ FILE: tests/__snapshots__/test_converter/test_converter[lower].html ================================================ x ================================================ FILE: tests/__snapshots__/test_converter/test_converter[lt].html ================================================ < ================================================ FILE: tests/__snapshots__/test_converter/test_converter[lvert].html ================================================ | ================================================ FILE: tests/__snapshots__/test_converter/test_converter[lvertneqq].html ================================================ ================================================ FILE: tests/__snapshots__/test_converter/test_converter[math-commands-that-currently-does-nothing].html ================================================ abcde ================================================ FILE: tests/__snapshots__/test_converter/test_converter[mathbb].html ================================================ ABC ================================================ FILE: tests/__snapshots__/test_converter/test_converter[mathbf].html ================================================ var=1+{b} ================================================ FILE: tests/__snapshots__/test_converter/test_converter[mathbin].html ================================================ + ================================================ FILE: tests/__snapshots__/test_converter/test_converter[mathcal].html ================================================ var=1+{b}+B ================================================ FILE: tests/__snapshots__/test_converter/test_converter[mathchoice-block].html ================================================ D ================================================ FILE: tests/__snapshots__/test_converter/test_converter[mathfrak].html ================================================ var=1+{b}+B ================================================ FILE: tests/__snapshots__/test_converter/test_converter[mathit].html ================================================ var=1+{b}+B ================================================ FILE: tests/__snapshots__/test_converter/test_converter[mathllap].html ================================================ x ================================================ FILE: tests/__snapshots__/test_converter/test_converter[mathop].html ================================================ x ================================================ FILE: tests/__snapshots__/test_converter/test_converter[mathord].html ================================================ x ================================================ FILE: tests/__snapshots__/test_converter/test_converter[mathrel].html ================================================ = ================================================ FILE: tests/__snapshots__/test_converter/test_converter[mathring].html ================================================ a˚bc˚ ================================================ FILE: tests/__snapshots__/test_converter/test_converter[mathrm].html ================================================ var=1+{b}+B ================================================ FILE: tests/__snapshots__/test_converter/test_converter[mathscr].html ================================================ var=1+{b}+B ================================================ FILE: tests/__snapshots__/test_converter/test_converter[mathsf].html ================================================ var=1+{b}+B ================================================ FILE: tests/__snapshots__/test_converter/test_converter[mathsfit].html ================================================ 𝘹 ================================================ FILE: tests/__snapshots__/test_converter/test_converter[mathstrut].html ================================================ ( ================================================ FILE: tests/__snapshots__/test_converter/test_converter[mathtt].html ================================================ var=1+{b}+B ================================================ FILE: tests/__snapshots__/test_converter/test_converter[matrix-with-alignment].html ================================================ abcd ================================================ FILE: tests/__snapshots__/test_converter/test_converter[matrix-with-negative-sign].html ================================================ abcd ================================================ FILE: tests/__snapshots__/test_converter/test_converter[matrix-without-begin-and-end].html ================================================ abcd ================================================ FILE: tests/__snapshots__/test_converter/test_converter[matrix].html ================================================ abcd ================================================ FILE: tests/__snapshots__/test_converter/test_converter[mbox].html ================================================ This is a sentence. ================================================ FILE: tests/__snapshots__/test_converter/test_converter[middle].html ================================================ {|} ================================================ FILE: tests/__snapshots__/test_converter/test_converter[mit].html ================================================ var=1+{b}+B ================================================ FILE: tests/__snapshots__/test_converter/test_converter[mod].html ================================================ mod5 ================================================ FILE: tests/__snapshots__/test_converter/test_converter[moveleft].html ================================================ x ================================================ FILE: tests/__snapshots__/test_converter/test_converter[moveright].html ================================================ x ================================================ FILE: tests/__snapshots__/test_converter/test_converter[multiple-groups].html ================================================ ab ================================================ FILE: tests/__snapshots__/test_converter/test_converter[multiple-identifier].html ================================================ xyz ================================================ FILE: tests/__snapshots__/test_converter/test_converter[multiple-numbers].html ================================================ 333 ================================================ FILE: tests/__snapshots__/test_converter/test_converter[newenvironment-multi-node].html ================================================ a+b+c ================================================ FILE: tests/__snapshots__/test_converter/test_converter[ngeqq].html ================================================ ================================================ FILE: tests/__snapshots__/test_converter/test_converter[nolimits].html ================================================ i=0n ================================================ FILE: tests/__snapshots__/test_converter/test_converter[normalsize-scriptsize].html ================================================ [[[[[[ ================================================ FILE: tests/__snapshots__/test_converter/test_converter[not].html ================================================ aR ================================================ FILE: tests/__snapshots__/test_converter/test_converter[nshortmid].html ================================================ ================================================ FILE: tests/__snapshots__/test_converter/test_converter[nshortparallel].html ================================================ ================================================ FILE: tests/__snapshots__/test_converter/test_converter[nsubseteqq].html ================================================ ================================================ FILE: tests/__snapshots__/test_converter/test_converter[null-delimiter].html ================================================ {3x5y+4z=0xy+8z=02x6y+z=0 ================================================ FILE: tests/__snapshots__/test_converter/test_converter[numbers-and-identifiers].html ================================================ 12x ================================================ FILE: tests/__snapshots__/test_converter/test_converter[numbers-and-operators-cdot].html ================================================ 3·2 ================================================ FILE: tests/__snapshots__/test_converter/test_converter[numbers-and-operators-div].html ================================================ 3÷2 ================================================ FILE: tests/__snapshots__/test_converter/test_converter[numbers-and-operators-times].html ================================================ 3×2 ================================================ FILE: tests/__snapshots__/test_converter/test_converter[numbers-and-operators].html ================================================ 32 ================================================ FILE: tests/__snapshots__/test_converter/test_converter[numbers-identifiers-and-operators].html ================================================ 3x*2 ================================================ FILE: tests/__snapshots__/test_converter/test_converter[oldstyle].html ================================================ var=1+{b}+B ================================================ FILE: tests/__snapshots__/test_converter/test_converter[omicron].html ================================================ ο ================================================ FILE: tests/__snapshots__/test_converter/test_converter[operatorname-star].html ================================================ argmaxx ================================================ FILE: tests/__snapshots__/test_converter/test_converter[operatornamewithlimits].html ================================================ limx ================================================ FILE: tests/__snapshots__/test_converter/test_converter[over-inside-braces].html ================================================ 12 ================================================ FILE: tests/__snapshots__/test_converter/test_converter[over].html ================================================ 12 ================================================ FILE: tests/__snapshots__/test_converter/test_converter[overbrace-a].html ================================================ 3 ================================================ FILE: tests/__snapshots__/test_converter/test_converter[overbrace-b].html ================================================ 3a ================================================ FILE: tests/__snapshots__/test_converter/test_converter[overbrace-c].html ================================================ 3xa ================================================ FILE: tests/__snapshots__/test_converter/test_converter[overbracket].html ================================================ x ================================================ FILE: tests/__snapshots__/test_converter/test_converter[overleftarrow].html ================================================ abc ================================================ FILE: tests/__snapshots__/test_converter/test_converter[overleftrightarrow].html ================================================ abc ================================================ FILE: tests/__snapshots__/test_converter/test_converter[overline].html ================================================ abc ================================================ FILE: tests/__snapshots__/test_converter/test_converter[overparen].html ================================================ abc ================================================ FILE: tests/__snapshots__/test_converter/test_converter[overrightarrow].html ================================================ abc ================================================ FILE: tests/__snapshots__/test_converter/test_converter[phantom].html ================================================ a ================================================ FILE: tests/__snapshots__/test_converter/test_converter[pipe].html ================================================ |x| ================================================ FILE: tests/__snapshots__/test_converter/test_converter[pmatrix].html ================================================ (abcd) ================================================ FILE: tests/__snapshots__/test_converter/test_converter[pmod].html ================================================ (mod5) ================================================ FILE: tests/__snapshots__/test_converter/test_converter[pod].html ================================================ (a) ================================================ FILE: tests/__snapshots__/test_converter/test_converter[prime-no-base].html ================================================ x ================================================ FILE: tests/__snapshots__/test_converter/test_converter[prime].html ================================================ f(x)=2x,f(x)=2 ================================================ FILE: tests/__snapshots__/test_converter/test_converter[projlim].html ================================================ proj lim ================================================ FILE: tests/__snapshots__/test_converter/test_converter[rVert-double].html ================================================ ================================================ FILE: tests/__snapshots__/test_converter/test_converter[raise].html ================================================ x ================================================ FILE: tests/__snapshots__/test_converter/test_converter[root].html ================================================ 23 ================================================ FILE: tests/__snapshots__/test_converter/test_converter[rule].html ================================================ ================================================ FILE: tests/__snapshots__/test_converter/test_converter[rvert].html ================================================ | ================================================ FILE: tests/__snapshots__/test_converter/test_converter[scr].html ================================================ var=1+{b}+B ================================================ FILE: tests/__snapshots__/test_converter/test_converter[shortmid].html ================================================ ================================================ FILE: tests/__snapshots__/test_converter/test_converter[shoveleft].html ================================================ x ================================================ FILE: tests/__snapshots__/test_converter/test_converter[sideset].html ================================================ 1234 ================================================ FILE: tests/__snapshots__/test_converter/test_converter[simple-array].html ================================================ 1234 ================================================ FILE: tests/__snapshots__/test_converter/test_converter[simple-fraction].html ================================================ 12 ================================================ FILE: tests/__snapshots__/test_converter/test_converter[single-group].html ================================================ a ================================================ FILE: tests/__snapshots__/test_converter/test_converter[single-identifier].html ================================================ x ================================================ FILE: tests/__snapshots__/test_converter/test_converter[single-number].html ================================================ 3 ================================================ FILE: tests/__snapshots__/test_converter/test_converter[single-operator].html ================================================ + ================================================ FILE: tests/__snapshots__/test_converter/test_converter[skew-with-braces].html ================================================ M~ ================================================ FILE: tests/__snapshots__/test_converter/test_converter[skew].html ================================================ A^ ================================================ FILE: tests/__snapshots__/test_converter/test_converter[small-tiny].html ================================================ [[[[[[[ ================================================ FILE: tests/__snapshots__/test_converter/test_converter[smallfrown].html ================================================ ================================================ FILE: tests/__snapshots__/test_converter/test_converter[smallint].html ================================================ ================================================ FILE: tests/__snapshots__/test_converter/test_converter[smallsmile].html ================================================ ================================================ FILE: tests/__snapshots__/test_converter/test_converter[smash-bottom].html ================================================ x ================================================ FILE: tests/__snapshots__/test_converter/test_converter[smash-top].html ================================================ x ================================================ FILE: tests/__snapshots__/test_converter/test_converter[smash].html ================================================ x ================================================ FILE: tests/__snapshots__/test_converter/test_converter[space].html ================================================ ================================================ FILE: tests/__snapshots__/test_converter/test_converter[spaces].html ================================================ |||||||||||||||||||| | || ================================================ FILE: tests/__snapshots__/test_converter/test_converter[split].html ================================================ x=y=z ================================================ FILE: tests/__snapshots__/test_converter/test_converter[sqrt-with-multiple-root-nodes].html ================================================ 123abc ================================================ FILE: tests/__snapshots__/test_converter/test_converter[square-root].html ================================================ 2 ================================================ FILE: tests/__snapshots__/test_converter/test_converter[stackrel].html ================================================ f ================================================ FILE: tests/__snapshots__/test_converter/test_converter[style].html ================================================ x+1y+2 ================================================ FILE: tests/__snapshots__/test_converter/test_converter[styles].html ================================================ ab+cd+ef+gh+ij ================================================ FILE: tests/__snapshots__/test_converter/test_converter[subscript-and-superscript].html ================================================ abc ================================================ FILE: tests/__snapshots__/test_converter/test_converter[subscript-within-curly-braces].html ================================================ ab ================================================ FILE: tests/__snapshots__/test_converter/test_converter[subscript].html ================================================ ab ================================================ FILE: tests/__snapshots__/test_converter/test_converter[superscript-and-subscript].html ================================================ acb ================================================ FILE: tests/__snapshots__/test_converter/test_converter[superscript-subscript-and-curly-braces].html ================================================ a3i+1 ================================================ FILE: tests/__snapshots__/test_converter/test_converter[superscript-within-curly-braces].html ================================================ ab ================================================ FILE: tests/__snapshots__/test_converter/test_converter[superscript].html ================================================ ab ================================================ FILE: tests/__snapshots__/test_converter/test_converter[surd].html ================================================ ================================================ FILE: tests/__snapshots__/test_converter/test_converter[tag-star].html ================================================ x2A ================================================ FILE: tests/__snapshots__/test_converter/test_converter[tag].html ================================================ x2(1) ================================================ FILE: tests/__snapshots__/test_converter/test_converter[tbinom].html ================================================ (23) ================================================ FILE: tests/__snapshots__/test_converter/test_converter[textbf].html ================================================  Hello~World  ================================================ FILE: tests/__snapshots__/test_converter/test_converter[textcolor].html ================================================ x+y ================================================ FILE: tests/__snapshots__/test_converter/test_converter[textit].html ================================================  Hello~World  ================================================ FILE: tests/__snapshots__/test_converter/test_converter[textrm].html ================================================  Hello~World  ================================================ FILE: tests/__snapshots__/test_converter/test_converter[textsf].html ================================================  Hello~World  ================================================ FILE: tests/__snapshots__/test_converter/test_converter[texttt].html ================================================  Hello~World  ================================================ FILE: tests/__snapshots__/test_converter/test_converter[tfrac].html ================================================ 12 ================================================ FILE: tests/__snapshots__/test_converter/test_converter[thickapprox].html ================================================ ================================================ FILE: tests/__snapshots__/test_converter/test_converter[thicksim].html ================================================ ================================================ FILE: tests/__snapshots__/test_converter/test_converter[thickspace].html ================================================ ================================================ FILE: tests/__snapshots__/test_converter/test_converter[tilde-1].html ================================================ a~bc~ ================================================ FILE: tests/__snapshots__/test_converter/test_converter[tilde-and-space-in-text].html ================================================  Hello~World  ================================================ FILE: tests/__snapshots__/test_converter/test_converter[tilde].html ================================================ Hello World ================================================ FILE: tests/__snapshots__/test_converter/test_converter[tt].html ================================================ var=1+{b}+B ================================================ FILE: tests/__snapshots__/test_converter/test_converter[underbrace-a].html ================================================ 3 ================================================ FILE: tests/__snapshots__/test_converter/test_converter[underbrace-b].html ================================================ 3a ================================================ FILE: tests/__snapshots__/test_converter/test_converter[underbrace-c].html ================================================ 3ax ================================================ FILE: tests/__snapshots__/test_converter/test_converter[underleftarrow].html ================================================ abc ================================================ FILE: tests/__snapshots__/test_converter/test_converter[underleftrightarrow].html ================================================ abc ================================================ FILE: tests/__snapshots__/test_converter/test_converter[underline].html ================================================ abc ================================================ FILE: tests/__snapshots__/test_converter/test_converter[underparen].html ================================================ abc ================================================ FILE: tests/__snapshots__/test_converter/test_converter[underrightarrow].html ================================================ abc ================================================ FILE: tests/__snapshots__/test_converter/test_converter[unicode].html ================================================ ================================================ FILE: tests/__snapshots__/test_converter/test_converter[upper-Vmatrix].html ================================================ ================================================ FILE: tests/__snapshots__/test_converter/test_converter[varinjlim].html ================================================ inj lim ================================================ FILE: tests/__snapshots__/test_converter/test_converter[varsubsetneqq].html ================================================ ================================================ FILE: tests/__snapshots__/test_converter/test_converter[varsupsetneq].html ================================================ ================================================ FILE: tests/__snapshots__/test_converter/test_converter[varsupsetneqq].html ================================================ ================================================ FILE: tests/__snapshots__/test_converter/test_converter[vcenter].html ================================================ x ================================================ FILE: tests/__snapshots__/test_converter/test_converter[verb].html ================================================ hello world ================================================ FILE: tests/__snapshots__/test_converter/test_converter[vmatrix].html ================================================ || ================================================ FILE: tests/__snapshots__/test_converter/test_converter[vphantom].html ================================================ a ================================================ FILE: tests/__snapshots__/test_converter/test_converter[widecheck].html ================================================ xˇ ================================================ FILE: tests/__snapshots__/test_converter/test_converter[widehat].html ================================================ a^bc^ ================================================ FILE: tests/__snapshots__/test_converter/test_converter[widetilde].html ================================================ a~bc~ ================================================ FILE: tests/__snapshots__/test_converter/test_converter[xLeftarrow-double].html ================================================ yx ================================================ FILE: tests/__snapshots__/test_converter/test_converter[xhookleftarrow].html ================================================ x ================================================ FILE: tests/__snapshots__/test_converter/test_converter[xleftarrow-with-argument].html ================================================ yx ================================================ FILE: tests/__snapshots__/test_converter/test_converter[xleftarrow].html ================================================ x ================================================ FILE: tests/__snapshots__/test_converter/test_converter[xleftrightarrow].html ================================================ x ================================================ FILE: tests/__snapshots__/test_converter/test_converter[xrightarrow-with-argument].html ================================================ yx ================================================ FILE: tests/__snapshots__/test_converter/test_converter[xrightarrow].html ================================================ x ================================================ FILE: tests/__snapshots__/test_converter/test_converter_inline[def-with-args].html ================================================ x ================================================ FILE: tests/__snapshots__/test_converter/test_converter_inline[issue-498-prod].html ================================================ 0π ================================================ FILE: tests/__snapshots__/test_converter/test_converter_inline[issue-498-sum].html ================================================ 0π ================================================ FILE: tests/__snapshots__/test_converter/test_converter_inline[issue-75-2-rows].html ================================================ 1inij ================================================ FILE: tests/__snapshots__/test_converter/test_converter_inline[mathchoice-inline].html ================================================ T ================================================ FILE: tests/__snapshots__/test_converter/test_converter_inline[newcommand-escaped-hash].html ================================================ ##x ================================================ FILE: tests/conftest.py ================================================ from typing import Any import pytest from syrupy.extensions.single_file import SingleFileSnapshotExtension, WriteMode from syrupy.types import SerializedData class MathMLExtension(SingleFileSnapshotExtension): # Use .html so snapshots open directly in a browser for visual verification. # All major browsers support MathML: https://caniuse.com/mathml file_extension = "html" _write_mode = WriteMode.TEXT def serialize(self, data: Any, **kwargs: Any) -> SerializedData: return str(data) @pytest.fixture def snapshot(snapshot: Any) -> Any: return snapshot.use_extension(MathMLExtension) ================================================ FILE: tests/test_converter.py ================================================ import pytest from latex2mathml.converter import Converter, convert, convert_to_element from latex2mathml.exceptions import DoubleSubscriptsError, DoubleSuperscriptsError, MissingEndError @pytest.mark.parametrize( "latex", [ pytest.param("x", id="single-identifier"), pytest.param("xyz", id="multiple-identifier"), pytest.param("3", id="single-number"), pytest.param("333", id="multiple-numbers"), pytest.param("12.34", id="decimal-numbers"), pytest.param("12x", id="numbers-and-identifiers"), pytest.param("+", id="single-operator"), pytest.param("3-2", id="numbers-and-operators"), pytest.param(r"3 \times 2", id="numbers-and-operators-times"), pytest.param(r"3 \cdot 2", id="numbers-and-operators-cdot"), pytest.param(r"3 \div 2", id="numbers-and-operators-div"), pytest.param("3x*2", id="numbers-identifiers-and-operators"), pytest.param("{a}", id="single-group"), pytest.param("{a}{b}", id="multiple-groups"), pytest.param("{a+{b}}", id="inner-group"), pytest.param(r"1 \over 2", id="over"), pytest.param(r"{1 \over 2}", id="over-inside-braces"), pytest.param(r"\begin{matrix}a_{1} & b_{2} \\ c_{3} & d_{4} \end{matrix}", id="complex-matrix"), pytest.param( r"\left\{ \begin{array} { l } { 3x - 5y + 4z = 0} \\ { x - y + 8z = 0} \\ { 2x - 6y + z = 0} \end{array} " r"\right.", id="null-delimiter", ), pytest.param("a_b", id="subscript"), pytest.param("a^b", id="superscript"), pytest.param("a_b^c", id="subscript-and-superscript"), pytest.param("a^b_c", id="superscript-and-subscript"), pytest.param("{a_b}", id="subscript-within-curly-braces"), pytest.param("{a^b}", id="superscript-within-curly-braces"), pytest.param("a^{i+1}_3", id="superscript-subscript-and-curly-braces"), pytest.param(r"\frac{1}{2}", id="simple-fraction"), pytest.param(r"\sqrt{2}", id="square-root"), pytest.param(r"\sqrt[3]{2}", id="root"), pytest.param(r"\binom{2}{3}", id="binomial"), pytest.param(r"\left(x\right)", id="left-and-right"), pytest.param(r"\,", id="space"), pytest.param(r"\begin{matrix}a & b \\ c & d \end{matrix}", id="matrix"), pytest.param(r"\matrix{a & b \\ c & d}", id="matrix-without-begin-and-end"), pytest.param(r"\begin{matrix*}[r]a & b \\ c & d \end{matrix*}", id="matrix-with-alignment"), pytest.param(r"\begin{matrix}-a & b \\ c & d \end{matrix}", id="matrix-with-negative-sign"), pytest.param(r"\begin{pmatrix}a & b \\ c & d \end{pmatrix}", id="pmatrix"), pytest.param(r"\begin{array}{cr} 1 & 2 \\ 3 & 4 \end{array}", id="simple-array"), pytest.param(r"\begin{array}{c|rl} 1 & 2 & 3 \\ 4 & 5 & 6 \end{array}", id="array-with-vertical-bar"), pytest.param( r"\begin{array}{cr} 1 & 2 \\ 3 & 4 \\ \hline 5 & 6 \\ \hdashline 7 & 8 \end{array}", id="array-with-horizontal-lines", ), pytest.param( r"""\begin{bmatrix} a_{1,1} & a_{1,2} & \cdots & a_{1,n} \\ a_{2,1} & a_{2,2} & \cdots & a_{2,n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m,1} & a_{m,2} & \cdots & a_{m,n} \end{bmatrix}""", id="issue-33", ), pytest.param(r"\sqrt { ( - 25 ) ^ { 2 } } = \pm 25", id="issue-42"), pytest.param("2 < 5", id="issue-45-lt"), pytest.param("2 > 5", id="issue-45-gt"), pytest.param(r"\And", id="And"), pytest.param(r"\left(- x^{3} + 5\right)^{5}", id="issue-44"), pytest.param(r"\mathbb{R}", id="issue-51"), pytest.param(r"\bar{z_1} = z_2", id="issue-52"), pytest.param(r"\mathrm{...}", id="issue-60-1"), pytest.param(r"\mathrm{...}+\mathrm{...}", id="issue-60-2"), pytest.param(r"\frac{x + 4}{x + \frac{123 \left(\sqrt{x} + 5\right)}{x + 4} - 8}", id="issue-61"), pytest.param(r"\sqrt {\sqrt {\left( x^{3}\right) + v}}", id="issue-63"), pytest.param(r"1_{}", id="empty-subscript"), pytest.param(r"\begin{Bmatrix}\end{Bmatrix}", id="Bmatrix"), pytest.param(r"\begin{vmatrix}\end{vmatrix}", id="vmatrix"), pytest.param(r"\begin{Vmatrix}\end{Vmatrix}", id="upper-Vmatrix"), pytest.param(r"\begin{matrix}1^2\end{matrix}", id="command-inside-matrix"), pytest.param(r"\e", id="backslash-e"), pytest.param( r"\left[\begin{matrix}1 & 0 & 0 & 0\\0 & 1 & 0 & 0\\0 & 0 & 1 & 0\\0 & 0 & 0 & 1\end{matrix}\right]", id="issue-77", ), pytest.param(r"\log{x}", id="logarithm"), pytest.param(r"\log_2{x}", id="logarithm-with-base"), pytest.param("^3", id="exponent-without-base-works"), pytest.param(r"\lim_{x \to +\infty} f(x)", id="limit-at-plus-infinity"), pytest.param(r"\inf_{x > s}f(x)", id="inf"), pytest.param(r"\int\limits_{0}^{\pi}", id="issue-76"), pytest.param(r"\int\limits^{\pi}_{0}", id="issue-301-a"), pytest.param(r"\int\limits_{\pi}", id="issue-301-b"), pytest.param(r"\int\limits^{\pi}", id="issue-301-c"), pytest.param(r"\substack{ \xi{2}=g{\left(x \right)}}", id="issue-75-1-row"), pytest.param(r"\sum_{\substack{1\le i\le n\\ i\ne j}}", id="issue-75-2-rows"), pytest.param( r"\tan x+\sec x+\cos x+\sin x+\cot x+\csc x+\arccos x+\arcsin x+\arctan x +\cosh x+\coth x+\sinh x+\tanh x", id="issue-91", ), pytest.param(r"p_{\max}", id="issue-98"), pytest.param(r"\vec{AB}", id="issue-103"), pytest.param(r"\begin{cases} {x=1} \\ {y=-2}\end{cases}", id="issue-106"), pytest.param(r"\max f", id="issue-108-1"), pytest.param(r"\max \{a, b, c\}", id="issue-108-2"), pytest.param(r"\min{(x, y)}", id="issue-108-3"), pytest.param(r"\dot A", id="issue-112-1"), pytest.param(r"\dot{A}", id="issue-112-2"), pytest.param(r"\operatorname{sn}x", id="issue-109-1"), pytest.param(r"\operatorname{sn}(x+y)", id="issue-109-2"), pytest.param(r"\text{Let}\ x=\text{number of cats}.", id="issue-118"), pytest.param(r"F(a,n)=\overset{a-a-a\cdots-a}{}ntext{个}a", id="issue-125-1-overset"), pytest.param(r"a\,\overset{?}{=}\,b", id="issue-125-2-overset"), pytest.param(r"\underset ab", id="issue-125-3-underset"), pytest.param(r"a\mathop{t}b\mathop{t}c", id="issue-125-4-mathop"), pytest.param(r"\mathop{x}\limits_0^1", id="issue-125-4-limits"), pytest.param(r"\Bigg[\bigg[\Big[\big[[", id="big"), pytest.param(r"x\rm {\text{var} = 1+\{b\}}\sf \Delta", id="global-fonts"), pytest.param("f'(x) = 2x, f''(x) = 2", id="prime"), pytest.param("f'''(x)", id="issue-462-triple-prime"), pytest.param("f''''(x)", id="issue-462-quadruple-prime"), pytest.param("f'''''(x)", id="issue-462-quintuple-prime"), pytest.param("f''''''''(x)", id="issue-462-octuple-prime"), pytest.param("'x", id="prime-no-base"), pytest.param( r"""|\,|\:|\>|\;|\\|\!|\quad|\qquad|\hspace1em|\hspace{10ex}|\enspace|\hskip1em|\kern-1.5pt|\mkern10mu| \mskip18mu|\mspace18mu|\negthinspace|\negmedspace|\negthickspace|\nobreakspace|\space|\thinspace|""", id="spaces", ), pytest.param(r"|x|", id="pipe"), pytest.param(r"\|x\|", id="double-pipe"), pytest.param("Hello~World", id="tilde"), pytest.param(r"\text{ Hello~World }", id="tilde-and-space-in-text"), pytest.param( r"""% this is hidden 100\%!% this is hidden, too""", id="comments", ), pytest.param(r"\#\$\%\&\_\{\}", id="escaped-characters"), pytest.param(r"{a \above 1pt b} + {c \above {1.5pt} d}", id="above"), pytest.param(r"\acute a \acute{bc}", id="acute"), pytest.param(r"a \atop {b \atopwithdelims | \} c}", id="atop-and-atopwithdelims"), pytest.param(r"{a \abovewithdelims [ ] 1pt b} + {c \abovewithdelims . . {1.5pt} d}", id="abovewithdelims"), pytest.param(r"\Bbb {\text{var} = 1+\{b\}}", id="blackboard-bold"), pytest.param(r"\Bbb{AB}C", id="Bbb-group"), pytest.param(r"\bigcirc", id="bigcirc"), pytest.param(r"\boldsymbol {\text{var} = 1+\{b\}}", id="boldsymbol"), pytest.param(r"\boxed \Box", id="boxed-box"), pytest.param(r"\breve a \breve{bc}", id="breve"), pytest.param(r"{\brace} + {a \brace b}", id="brace"), pytest.param(r"{\brack} + {a \brack b}", id="brace-1"), pytest.param(r"{\cal {\text{var} = 1+\{b\}}} + B", id="calligraphic-mode"), pytest.param(r"a\centerdot b", id="centerdot"), pytest.param(r"\cfrac{2}{1+ \cfrac{2}{1}}", id="cfrac"), pytest.param(r"\check a \check{bc}", id="check"), pytest.param(r"a \choose b", id="choose"), pytest.param(r"\circledS", id="circledS"), pytest.param(r"{a\color{red}bc}d", id="color"), pytest.param(r"\color{}ab", id="empty-color-works"), pytest.param(r"\dbinom a b", id="binomial-coefficients"), pytest.param(r"\ddot a \dddot b \ddddot c", id="ddot-dddot-ddddot"), pytest.param(r"\deg(f(x))", id="degree-polynomial"), pytest.param(r"\det(A)", id="determinant"), pytest.param(r"\dim(A)", id="dimension-vector-space"), pytest.param(r"\dfrac a b", id="dfrac"), pytest.param(r"\diagdown \diagup", id="diagdown-diagup"), pytest.param(r"x_1, \dots, x_n", id="dots"), pytest.param(r"x_1 + \dotsb + x_n", id="dotsb"), pytest.param(r"x_1, \dotsc, x_n", id="dotsc"), pytest.param(r"A_1 \dotsi A_n", id="dotsi"), pytest.param(r"x_1 \dotsm x_n", id="dotsm"), pytest.param(r"A_1 \dotso A_n", id="dotso"), pytest.param(r"\frac ab + {\displaystyle \frac cd + \frac ef} + \frac gh", id="displaystyle"), pytest.param( r"\frac ab+\displaystyle\frac cd+\textstyle\frac ef+\scriptstyle\frac gh+\scriptscriptstyle\frac ij", id="styles", ), pytest.param( r""" \displaylines{ a = a\cr \text{if } a=b \text{ then } b=a\\ \text{if } a=b \text{ and } b=c \text{ then } a=c } """, id="displaylines", ), pytest.param(r"\emptyset", id="emptyset"), pytest.param(r"\exp x", id="exponential-function"), pytest.param(r"\fbox{ Hello! }", id="fbox"), pytest.param(r"{\frak {\text{var} = 1+\{b\}}} + B", id="fraktur"), pytest.param(r"\gcd_{\rm sub}^{\rm sup}", id="greatest-common-divisor"), pytest.param(r"\genfrac\{]{1pt}{0}{a+b}{c+d}", id="genfrac-displaystyle"), pytest.param(r"\genfrac(|{1pt}{1}{a+b}{c+d}", id="genfrac-textstyle"), pytest.param(r"\genfrac(.{1pt}{2}{a+b}{c+d}", id="genfrac-scriptstyle"), pytest.param(r"\genfrac\{\}{1pt}{3}{a+b}{c+d}", id="genfrac-scriptscriptstyle"), pytest.param(r"\gggtr", id="gggtr"), pytest.param(r"\gvertneqq", id="gvertneqq"), pytest.param(r"\gt", id="gt"), pytest.param(r"\grave a \grave{bc}", id="grave"), pytest.param(r"\hat a \hat{bc}", id="hat"), pytest.param(r"\hom", id="hom"), pytest.param(r"\href{https://github.com/roniemartinez/latex2mathml}{\text{latex2mathml}}", id="href"), pytest.param(r"[{[\Huge[\huge[[}[", id="huge"), pytest.param(r"\sqrt[abc]{123}", id="sqrt-with-multiple-root-nodes"), pytest.param( r"\begin{array}{l} \text{Side Angle Side}\\ \text{S}\hphantom{\text{ide }}\text{A}\hphantom{\text{ngle }}" r"\text{S} \end{array}", id="hphantom", ), pytest.param(r"\idotsint", id="idotsint"), pytest.param(r"\intop", id="intop"), pytest.param(r"\injlim", id="injlim"), pytest.param(r"\ker", id="ker"), pytest.param(r"[{[\LARGE[\Large[\large[[}[", id="large"), pytest.param(r"[{[\normalsize[\scriptsize[[}[", id="normalsize-scriptsize"), pytest.param(r"\mathbb{AB}C", id="mathbb"), pytest.param(r"\mathbf {\text{var} = 1+\{b\}}", id="mathbf"), pytest.param(r"{\mathcal {\text{var} = 1+\{b\}}} + B", id="mathcal"), pytest.param(r"{\mathfrak {\text{var} = 1+\{b\}}} + B", id="mathfrak"), pytest.param(r"{\mathit {\text{var} = 1+\{b\}}} + B", id="mathit"), pytest.param(r"{\mathrm {\text{var} = 1+\{b\}}} + B", id="mathrm"), pytest.param(r"{\mathscr {\text{var} = 1+\{b\}}} + B", id="mathscr"), pytest.param(r"{\mathsf {\text{var} = 1+\{b\}}} + B", id="mathsf"), pytest.param(r"{\mathtt {\text{var} = 1+\{b\}}} + B", id="mathtt"), pytest.param( r"\mathop{a}\mathord{b}\mathpunct{c}\mathbin{d}\mathrel{e}", id="math-commands-that-currently-does-nothing" ), pytest.param(r"\hbox{This is a sentence.}", id="hbox"), pytest.param(r"\hbox{left $x > 0$ center \$x > 0\$ right}", id="hbox-with-math-mode"), pytest.param(r"\hbox{\alpha $\alpha$}", id="hbox-with-backslash-in-text"), pytest.param(r"\begin{matrix} xxxxxx & xxxxxx & xxxxxx \cr ab & \hfil ab & ab\hfil\cr \end{matrix}", id="hfil"), pytest.param(r"\ldotp", id="ldotp"), pytest.param(r"\lg", id="lg"), pytest.param(r"\liminf", id="liminf"), pytest.param(r"\limsup", id="limsup"), pytest.param(r"\llless", id="llless"), pytest.param(r"\lt", id="lt"), pytest.param(r"\lvert", id="lvert"), pytest.param(r"\lVert", id="lVert-double"), pytest.param(r"\lvertneqq", id="lvertneqq"), pytest.param(r"\ngeqq", id="ngeqq"), pytest.param(r"\nshortmid", id="nshortmid"), pytest.param(r"\nshortparallel", id="nshortparallel"), pytest.param(r"\nsubseteqq", id="nsubseteqq"), pytest.param(r"\omicron", id="omicron"), pytest.param(r"\Pr", id="Pr"), pytest.param(r"\projlim", id="projlim"), pytest.param(r"\rvert", id="rvert"), pytest.param(r"\rVert", id="rVert-double"), pytest.param(r"\S", id="S"), pytest.param(r"\shortmid", id="shortmid"), pytest.param(r"\smallfrown", id="smallfrown"), pytest.param(r"\smallint", id="smallint"), pytest.param(r"\smallsmile", id="smallsmile"), pytest.param(r"\surd", id="surd"), pytest.param(r"\thicksim", id="thicksim"), pytest.param(r"\thickapprox", id="thickapprox"), pytest.param(r"\varsubsetneqq", id="varsubsetneqq"), pytest.param(r"\varsupsetneq", id="varsupsetneq"), pytest.param(r"\varsupsetneqq", id="varsupsetneqq"), pytest.param(r"[{[\small[\tiny[\Tiny[[}[", id="small-tiny"), pytest.param(r"\mbox{This is a sentence.}", id="mbox"), pytest.param(r"\frac{\style{color:red}{x+1}}{\style{color:green}y+2}", id="style"), pytest.param(r"\mathring a \mathring{bc}", id="mathring"), pytest.param(r"\overleftarrow a \overleftarrow{bc}", id="overleftarrow"), pytest.param(r"\overleftrightarrow a \overleftrightarrow{bc}", id="overleftrightarrow"), pytest.param(r"\overline a \overline{bc}", id="overline"), pytest.param(r"\overparen a \overparen{bc}", id="overparen"), pytest.param(r"\overrightarrow a \overrightarrow{bc}", id="overrightarrow"), pytest.param(r"\tilde a \tilde{bc}", id="tilde-1"), pytest.param(r"\underleftarrow a \underleftarrow{bc}", id="underleftarrow"), pytest.param(r"\underrightarrow a \underrightarrow{bc}", id="underrightarrow"), pytest.param(r"\underleftrightarrow a \underleftrightarrow{bc}", id="underleftrightarrow"), pytest.param(r"\underline a \underline{bc}", id="underline"), pytest.param(r"\underparen a \underparen{bc}", id="underparen"), pytest.param(r"\widehat a \widehat{bc}", id="widehat"), pytest.param(r"\widetilde a \widetilde{bc}", id="widetilde"), pytest.param(r"\phantom a", id="phantom"), pytest.param(r"\vphantom a", id="vphantom"), pytest.param(r"\sideset{_1^2}{_3^4}\sum", id="sideset"), pytest.param(r"\sideset{_1^2}{_3^4}{\sum}", id="307-a"), pytest.param(r"\sideset{^{°}}{}{C}", id="307-b"), pytest.param(r"\tbinom{2}{3}", id="tbinom"), pytest.param(r"\tfrac{1}{2}", id="tfrac"), pytest.param(r"{\mit {\text{var} = 1+\{b\}}} + B", id="mit"), pytest.param(r"{\oldstyle {\text{var} = 1+\{b\}}} + B", id="oldstyle"), pytest.param(r"{\scr {\text{var} = 1+\{b\}}} + B", id="scr"), pytest.param(r"{\tt {\text{var} = 1+\{b\}}} + B", id="tt"), pytest.param(r"\textbf{ Hello~World }", id="textbf"), pytest.param(r"\textit{ Hello~World }", id="textit"), pytest.param(r"\textrm{ Hello~World }", id="textrm"), pytest.param(r"\textsf{ Hello~World }", id="textsf"), pytest.param(r"\texttt{ Hello~World }", id="texttt"), pytest.param(r"\LaTeX", id="LaTeX"), pytest.param(r"\Bbb \LaTeX", id="LaTeX-with-style"), pytest.param(r"\TeX", id="TeX"), pytest.param(r"\rm \TeX", id="TeX-with-style"), pytest.param(r"\skew7\hat A", id="skew"), pytest.param(r"\skew{8}\tilde M", id="skew-with-braces"), pytest.param(r"\mod 5", id="mod"), pytest.param(r"\pmod 5", id="pmod"), pytest.param(r"\left\{\middle|\right\}", id="middle"), pytest.param(r"9 \bmod2", id="bmod"), pytest.param(r"\overbrace3", id="overbrace-a"), pytest.param(r"\overbrace3^a", id="overbrace-b"), pytest.param(r"\overbrace3^a_x", id="overbrace-c"), pytest.param(r"\underbrace3", id="underbrace-a"), pytest.param(r"\underbrace3_a", id="underbrace-b"), pytest.param(r"\underbrace3_a^x", id="underbrace-c"), pytest.param(r"\xleftarrow x", id="xleftarrow"), pytest.param(r"\xleftarrow[y] x", id="xleftarrow-with-argument"), pytest.param(r"\xrightarrow x", id="xrightarrow"), pytest.param(r"\xrightarrow[y] x", id="xrightarrow-with-argument"), pytest.param( r"\bigl(\begin{smallmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \\ \end{smallmatrix}\bigr)", id="bigl-smallmatrix-bigr" ), pytest.param(r"\not\in\not a\not\operatorname{R}\not", id="not"), pytest.param(r"\begin{split} x &= y \\ &=z \end{split}", id="split"), pytest.param(r"\begin{align*}x &=y & w &=z & a&=b \end{align*}", id="align"), pytest.param(r"\sum_{0}^{\pi}", id="issue-498-sum"), pytest.param(r"\prod_{0}^{\pi}", id="issue-498-prod"), pytest.param(r"\arctg x", id="arctg"), pytest.param(r"\argmax_{x}", id="argmax"), pytest.param(r"\varinjlim", id="varinjlim"), pytest.param(r"\sum\nolimits_{i=0}^{n}", id="nolimits"), pytest.param(r"\bold{x}", id="bold"), pytest.param(r"\bm{x}", id="bm"), pytest.param(r"\mathsfit{x}", id="mathsfit"), pytest.param(r"\emph{ Hello }", id="emph"), pytest.param(r"\footnotesize x", id="footnotesize"), pytest.param(r"\thickspace", id="thickspace"), pytest.param(r"\stackrel{f}{\to}", id="stackrel"), pytest.param(r"90\degree", id="degree"), pytest.param(r"\cancel{x}", id="cancel"), pytest.param(r"\llap{x}", id="llap"), pytest.param(r"\mathllap{x}", id="mathllap"), pytest.param(r"\overbracket{x}", id="overbracket"), pytest.param(r"\widecheck{x}", id="widecheck"), pytest.param(r"\xLeftarrow[y] x", id="xLeftarrow-double"), pytest.param(r"\xleftrightarrow{x}", id="xleftrightarrow"), pytest.param(r"\xhookleftarrow{x}", id="xhookleftarrow"), pytest.param(r"\operatornamewithlimits{lim}_{x}", id="operatornamewithlimits"), pytest.param(r"\pod{a}", id="pod"), pytest.param(r"\textcolor{red}{x+y}", id="textcolor"), pytest.param(r"\colorbox{yellow}{x+y}", id="colorbox"), pytest.param(r"\fcolorbox{red}{yellow}{x+y}", id="fcolorbox"), pytest.param(r"\smash{x}", id="smash"), pytest.param(r"\smash[b]{x}", id="smash-bottom"), pytest.param(r"\rule{1em}{2em}", id="rule"), pytest.param(r"\bra{\psi}", id="bra"), pytest.param(r"\ket{\psi}", id="ket"), pytest.param(r"\braket{\phi|\psi}", id="braket"), pytest.param(r"\mathstrut", id="mathstrut"), pytest.param(r"\operatorname*{argmax}_{x}", id="operatorname-star"), pytest.param(r"\vcenter{x}", id="vcenter"), pytest.param(r"\mathbin{+}", id="mathbin"), pytest.param(r"\mathop{x}", id="mathop"), pytest.param(r"\mathord{x}", id="mathord"), pytest.param(r"\mathrel{=}", id="mathrel"), pytest.param(r"\unicode{x263A}", id="unicode"), pytest.param(r"\verb|hello world|", id="verb"), pytest.param(r"x^2 \tag{1}", id="tag"), pytest.param(r"x^2 \tag*{A}", id="tag-star"), pytest.param(r"\class{my-class}{x+y}", id="class"), pytest.param(r"\shoveleft{x}", id="shoveleft"), pytest.param(r"\raise{3pt}{x}", id="raise"), pytest.param(r"\lower{3pt}{x}", id="lower"), pytest.param(r"\moveleft{5pt}{x}", id="moveleft"), pytest.param(r"\moveright{5pt}{x}", id="moveright"), pytest.param(r"\smash[t]{x}", id="smash-top"), pytest.param(r"\mathchoice{D}{T}{S}{SS}", id="mathchoice-block"), pytest.param(r"\sqrt[\leftroot{2}\uproot{4} 3]{x}", id="leftroot-uproot"), pytest.param(r"\eqalign{a &= b \cr c &= d}", id="eqalign"), pytest.param("\\begin{align} x &= 1 \\\\ y &= 2 \\end{align}", id="align"), pytest.param("\\begin{align} x &= 1 \\nonumber \\\\ y &= 2 \\end{align}", id="align-nonumber"), pytest.param("\\begin{align} x &= 1 \\notag \\\\ y &= 2 \\end{align}", id="align-notag"), pytest.param( r"\newenvironment{wrapper}{a +}{+ c} \begin{wrapper} b \end{wrapper}", id="newenvironment-multi-node", ), ], ) def test_converter(snapshot: str, latex: str) -> None: assert convert(latex, display="block") == snapshot @pytest.mark.parametrize( "latex", [ pytest.param(r"\sum_{0}^{\pi}", id="issue-498-sum"), pytest.param(r"\prod_{0}^{\pi}", id="issue-498-prod"), pytest.param(r"\sum_{\substack{1\le i\le n\\ i\ne j}}", id="issue-75-2-rows"), pytest.param(r"\mathchoice{D}{T}{S}{SS}", id="mathchoice-inline"), pytest.param(r"\def\bold#1{\mathbf{#1}} \bold{x}", id="def-with-args"), pytest.param(r"\newcommand{\foo}[1]{## #1} \foo{x}", id="newcommand-escaped-hash"), ], ) def test_converter_inline(snapshot: str, latex: str) -> None: assert convert(latex) == snapshot @pytest.mark.parametrize( ("latex", "exception"), [ pytest.param("f^a^b", DoubleSuperscriptsError, id="double-superscript"), pytest.param("f''^2", DoubleSuperscriptsError, id="double-superscript-prime"), pytest.param("f_a_b", DoubleSubscriptsError, id="double-subscript"), pytest.param( r"\newenvironment{myenv}{\begin{bmatrix}}{\end{bmatrix}} \begin{myenv} 1 & 2", MissingEndError, id="newenvironment-missing-end", ), pytest.param(r"\def\A{\A} \A", RecursionError, id="macro-recursion-depth"), ], ) def test_converter_raises(latex: str, exception: type[BaseException]) -> None: with pytest.raises(exception): convert(latex) @pytest.mark.parametrize( ("latex", "expected", "display"), [ pytest.param( r"\DeclareMathOperator{\Res}{Res} \Res_{z=0}", r"\operatorname{Res}_{z=0}", "block", id="declare-math-operator", ), pytest.param( r"\newcommand{\R}{\mathbb{R}} \R", r"\mathbb{R}", "block", id="newcommand-no-args", ), pytest.param( r"\newcommand{\norm}[1]{\left\|#1\right\|} \norm{x}", r"\left\|x\right\|", "block", id="newcommand-with-args", ), pytest.param( r"\newcommand{\greeting}[1][Hello]{#1} \greeting{world}", r"world", "inline", id="newcommand-optional-default", ), pytest.param( r"\newcommand{\myfrac}{\frac} \myfrac{a}{b}", r"\frac{a}{b}", "inline", id="newcommand-expands-to-command", ), pytest.param( r"\newcommand{\nothing}{} \nothing x", r"x", "inline", id="newcommand-empty-body", ), pytest.param( r"\def\R{\mathbb{R}} \R", r"\mathbb{R}", "block", id="def-command", ), pytest.param( r"\newenvironment{myenv}{\begin{bmatrix}}{\end{bmatrix}} \begin{myenv} 1 & 2 \\ 3 & 4 \end{myenv}", r"\begin{bmatrix} 1 & 2 \\ 3 & 4 \end{bmatrix}", "block", id="newenvironment", ), pytest.param( r"\newenvironment{paren}[1]{\left( #1 +}{\right)} \begin{paren}{x} y \end{paren}", r"\left( x + y \right)", "block", id="newenvironment-with-args", ), pytest.param( r"\newcommand\R{\mathbb{R}} \R", r"\mathbb{R}", "block", id="newcommand-bare-name", ), ], ) def test_macro(latex: str, expected: str, display: str) -> None: assert convert(latex, display=display) == convert(expected, display=display) def test_align_vs_align_star() -> None: numbered = convert(r"\begin{align} x &= 1 \end{align}", display="block") unnumbered = convert(r"\begin{align*} x &= 1 \end{align*}", display="block") assert "(1)" in numbered assert "(1)" not in unnumbered def test_equation_counter_persists() -> None: c = Converter(display="block") r1 = c.convert(r"\begin{align} a &= 1 \end{align}") r2 = c.convert(r"\begin{align} b &= 2 \end{align}") assert "(1)" in r1 assert "(2)" in r2 def test_reusable_macro() -> None: c = Converter(display="block") c.convert(r"\newcommand{\R}{\mathbb{R}}") assert c.convert(r"\R") == convert(r"\mathbb{R}", display="block") def test_convert_to_element(snapshot: str) -> None: from xml.etree.ElementTree import tostring element = convert_to_element("1") assert tostring(element, encoding="unicode") == snapshot def test_convert_to_element_with_parent(snapshot: str) -> None: from xml.etree.ElementTree import Element, tostring parent = Element("div") convert_to_element("1", parent=parent) assert tostring(parent, encoding="unicode") == snapshot ================================================ FILE: tests/test_symbol_parser.py ================================================ import pytest from latex2mathml.symbols_parser import convert_symbol @pytest.mark.parametrize( "latex, expected", [pytest.param("+", "0002B", id="operator-plus"), pytest.param(r"\to", "02192", id="alias-command")], ) def test_convert_symbol(latex: str, expected: str) -> None: assert convert_symbol(latex) == expected ================================================ FILE: tests/test_tokenizer.py ================================================ import string import pytest from latex2mathml.tokenizer import tokenize @pytest.mark.parametrize( "latex, expected", [ pytest.param("\\", ["\\"], id="single-backslash"), pytest.param(string.ascii_letters, list(string.ascii_letters), id="alphabets"), pytest.param(string.digits, [string.digits], id="numbers"), pytest.param("123\\", ["123", "\\"], id="backslash-after-number"), pytest.param(r"123\\", ["123", r"\\"], id="double-backslash-after-number"), pytest.param("12.56", ["12.56"], id="decimal"), pytest.param(r"12.\\", ["12", ".", r"\\"], id="incomplete-decimal"), pytest.param("5x", list("5x"), id="numbers-and-alphabets"), pytest.param("5.8x", ["5.8", "x"], id="decimals-and-alphabets"), pytest.param("3 x", ["3", "x"], id="string-with-spaces"), pytest.param("+-*/=()[]_^{}", list("+-*/=()[]_^{}"), id="operators"), pytest.param( "3 + 5x - 5y = 7", ["3", "+", "5", "x", "-", "5", "y", "=", "7"], id="numbers-alphabets-and-operators" ), pytest.param(r"\alpha\beta", [r"\alpha", r"\beta"], id="symbols"), pytest.param(r"\frac2x", [r"\frac", "2", "x"], id="symbols-appended-with-number"), pytest.param( r"\begin{matrix}a & b \\ c & d \end{matrix}", [r"\begin{matrix}", "a", "&", "b", r"\\", "c", "&", "d", r"\end{matrix}"], id="matrix", ), pytest.param( r"\begin{matrix*}[r]a & b \\ c & d \end{matrix*}", [ r"\begin{matrix*}", "[", "r", "]", "a", "&", "b", r"\\", "c", "&", "d", r"\end{matrix*}", ], id="matrix-with-alignment", ), pytest.param( r"\begin{matrix}-a & b \\ c & d \end{matrix}", [r"\begin{matrix}", "-", "a", "&", "b", r"\\", "c", "&", "d", r"\end{matrix}"], id="matrix-with-negative-sign", ), pytest.param( r"\begin{array}{cc} 1 & 2 \\ 3 & 4 \end{array}", [ r"\begin{array}", "{", "c", "c", "}", "1", "&", "2", r"\\", "3", "&", "4", r"\end{array}", ], id="simple-array", ), pytest.param("a_{2,n}", ["a", "_", "{", "2", ",", "n", "}"], id="subscript"), pytest.param("a^{i+1}_3", ["a", "^", "{", "i", "+", "1", "}", "_", "3"], id="superscript-with-curly-braces"), pytest.param( r"""\begin{bmatrix} a_{1,1} & a_{1,2} & \cdots & a_{1,n} \\ a_{2,1} & a_{2,2} & \cdots & a_{2,n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m,1} & a_{m,2} & \cdots & a_{m,n} \end{bmatrix}""", [ r"\begin{bmatrix}", "a", "_", "{", "1", ",", "1", "}", "&", "a", "_", "{", "1", ",", "2", "}", "&", r"\cdots", "&", "a", "_", "{", "1", ",", "n", "}", r"\\", "a", "_", "{", "2", ",", "1", "}", "&", "a", "_", "{", "2", ",", "2", "}", "&", r"\cdots", "&", "a", "_", "{", "2", ",", "n", "}", r"\\", r"\vdots", "&", r"\vdots", "&", r"\ddots", "&", r"\vdots", r"\\", "a", "_", "{", "m", ",", "1", "}", "&", "a", "_", "{", "m", ",", "2", "}", "&", r"\cdots", "&", "a", "_", "{", "m", ",", "n", "}", r"\end{bmatrix}", ], id="issue-33", ), pytest.param(r"\mathbb{R}", ["ℝ"], id="issue-51"), pytest.param( r"\begin{array}{rcl}ABC&=&a\\A&=&abc\end{array}", [ r"\begin{array}", "{", "r", "c", "l", "}", "A", "B", "C", "&", "=", "&", "a", r"\\", "A", "&", "=", "&", "a", "b", "c", r"\end{array}", ], id="issue-55", ), pytest.param(r"\mathrm{...}", [r"\mathrm", "{", ".", ".", ".", "}"], id="issue-60"), pytest.param( r"\frac{x + 4}{x + \frac{123 \left(\sqrt{x} + 5\right)}{x + 4} - 8}", [ r"\frac", "{", "x", "+", "4", "}", "{", "x", "+", r"\frac", "{", "123", r"\left", "(", r"\sqrt", "{", "x", "}", "+", "5", r"\right", ")", "}", "{", "x", "+", "4", "}", "-", "8", "}", ], id="issue-61", ), pytest.param( r"\sqrt {\sqrt {\left( x^{3}\right) + v}}", [ r"\sqrt", "{", r"\sqrt", "{", r"\left", "(", "x", "^", "{", "3", "}", r"\right", ")", "+", "v", "}", "}", ], id="issue-63", ), pytest.param( r"\left[\begin{matrix}1 & 0 & 0 & 0\\0 & 1 & 0 & 0\\0 & 0 & 1 & 0\\0 & 0 & 0 & 1\end{matrix}\right]", [ r"\left", "[", r"\begin{matrix}", "1", "&", "0", "&", "0", "&", "0", r"\\", "0", "&", "1", "&", "0", "&", "0", r"\\", "0", "&", "0", "&", "1", "&", "0", r"\\", "0", "&", "0", "&", "0", "&", "1", r"\end{matrix}", r"\right", "]", ], id="issue-77", ), pytest.param( r"x^{x^{x^{x}}} \left(x^{x^{x}} \left(x^{x} \left(\log{\left(x \right)} + 1\right) \log{\left(x \right)} + " r"\frac{x^{x}}{x}\right) \log{\left(x \right)} + \frac{x^{x^{x}}}{x}\right)", [ "x", "^", "{", "x", "^", "{", "x", "^", "{", "x", "}", "}", "}", r"\left", "(", "x", "^", "{", "x", "^", "{", "x", "}", "}", r"\left", "(", "x", "^", "{", "x", "}", r"\left", "(", r"\log", "{", r"\left", "(", "x", r"\right", ")", "}", "+", "1", r"\right", ")", r"\log", "{", r"\left", "(", "x", r"\right", ")", "}", "+", r"\frac", "{", "x", "^", "{", "x", "}", "}", "{", "x", "}", r"\right", ")", r"\log", "{", r"\left", "(", "x", r"\right", ")", "}", "+", r"\frac", "{", "x", "^", "{", "x", "^", "{", "x", "}", "}", "}", "{", "x", "}", r"\right", ")", ], id="issue-78", ), pytest.param( r"\max_{x \in \[a,b\]}f(x)", [ r"\max", "_", "{", "x", r"\in", r"\[", "a", ",", "b", r"\]", "}", "f", "(", "x", ")", ], id="max", ), pytest.param(r"\max \{a, b, c\}", [r"\max", r"\{", "a", ",", "b", ",", "c", r"\}"], id="issue-108-1"), pytest.param(r"\operatorname{sn}x", [r"\operatorname{sn}", "x"], id="issue-109"), pytest.param( r"\text{Let}\ x=\text{number of cats}.", [r"\text", "Let", r"\ ", "x", "=", r"\text", "number of cats", "."], id="issue-109", ), pytest.param( r"x = {-b \pm \sqrt{b^2-4ac} \over 2a}", [ "x", "=", "{", "-", "b", r"\pm", r"\sqrt", "{", "b", "^", "2", "-", "4", "a", "c", "}", r"\over", "2", "a", "}", ], id="quadratic-equation", ), pytest.param( r"a\,\overset{?}{=}\,b", ["a", "\\,", r"\overset", "{", "?", "}", "{", "=", "}", "\\,", "b"], id="issue-125" ), pytest.param( r"|\hspace1em|\hspace 1.2em|\hspace{1.5ex}|\hspace {2ex}|", [ "|", r"\hspace", "1em", "|", r"\hspace", "1.2em", "|", r"\hspace", "{", "1.5ex", "}", "|", r"\hspace", "{", "2ex", "}", "|", ], id="issue-129", ), pytest.param(r"\text{Hello~World}", [r"\text", "Hello~World"], id="tilde-in-text"), pytest.param( r"""% this is hidden 100\%! 100% this is hidden, too \test% this is another hidden line""", ["100", r"\%", "!", "100", r"\test"], id="comments", ), pytest.param( r"{a \above 1pt b} + {c \above { 1.5 pt } d}", ["{", "a", r"\above", "1pt", "b", "}", "+", "{", "c", r"\above", "{", "1.5pt", "}", "d", "}"], id="above", ), pytest.param( r"\mathop{x}\limits_0^1", [r"\mathop", "{", "x", "}", r"\limits", "_", "0", "^", "1"], id="issue-125", ), pytest.param(r"\fbox{E=mc^2}", [r"\fbox", "E=mc^2"], id="fbox"), pytest.param("X_123", ["X", "_", "1", "23"], id="issue-203-1"), pytest.param("X_1.23", ["X", "_", "1", ".23"], id="issue-203-2"), pytest.param("X^123", ["X", "^", "1", "23"], id="issue-203-3"), pytest.param("X^1.23", ["X", "^", "1", ".23"], id="issue-203-4"), pytest.param(r"X_\mathrm{min}", ["X", "_", r"\mathrm", "{", "m", "i", "n", "}"], id="issue-203-5"), pytest.param(r"\hbox{E=mc^2}", [r"\hbox", "E=mc^2"], id="hbox"), pytest.param(r"\style{color:red}", [r"\style", "color:red"], id="style"), pytest.param(r"\frac12", [r"\frac", "1", "2"], id="issue-245-1"), pytest.param(r"\frac1.", [r"\frac", "1", "."], id="issue-245-2"), pytest.param(r"\frac.2", [r"\frac", ".", "2"], id="issue-245-3"), pytest.param(r"\frac123", [r"\frac", "1", "2", "3"], id="issue-245-4"), pytest.param(r"\color{}ab", [r"\color", "", "a", "b"], id="empty-color"), pytest.param( r"\frac 1 2 3 + \frac 123", [r"\frac", "1", "2", "3", "+", r"\frac", "1", "2", "3"], id="issue-386" ), pytest.param(r"\begin {cases} \end {cases}", [r"\begin{cases}", r"\end{cases}"], id="issue-391"), pytest.param(r"\operatorname { s n } x", [r"\operatorname{sn}", "x"], id="issue-391-operatorname"), ], ) def test_tokenize(latex: str, expected: list) -> None: assert list(tokenize(latex)) == expected ================================================ FILE: tests/test_walker.py ================================================ import string from typing import Any, Union import pytest from latex2mathml.exceptions import ( DenominatorNotFoundError, DoubleSubscriptsError, DoubleSuperscriptsError, ExtraLeftOrMissingRightError, InvalidAlignmentError, InvalidStyleForGenfracError, InvalidWidthError, LimitsMustFollowMathOperatorError, MissingEndError, MissingSuperScriptOrSubscriptError, NumeratorNotFoundError, ) from latex2mathml.walker import Node, walk @pytest.mark.parametrize( "latex, expected", [ pytest.param(string.ascii_letters, [Node(token=c) for c in string.ascii_letters], id="alphabets"), pytest.param("{{}}", [Node(token="{}", children=(Node(token="{}", children=()),))], id="empty-group"), pytest.param(string.digits, [Node(token=string.digits)], id="numbers"), pytest.param("12.56", [Node(token="12.56")], id="decimals"), pytest.param("5x", [Node(token="5"), Node(token="x")], id="numbers-and-alphabets"), pytest.param("5.8x", [Node(token="5.8"), Node(token="x")], id="decimals-and-alphabets"), pytest.param("3 x", [Node(token="3"), Node(token="x")], id="string-with-space"), pytest.param("+-*/=()[])]([", [Node(token=c) for c in "+-*/=()[])](["], id="operators"), pytest.param("3 + 5x - 5y = 7", [Node(token=c) for c in "3+5x-5y=7"], id="numbers-alphabets-and-operators"), pytest.param(r"\alpha\beta", [Node(token=r"\alpha"), Node(token=r"\beta")], id="symbols"), pytest.param( r"\frac2x", [Node(token=r"\frac", children=(Node(token="2"), Node(token="x")))], id="symbols-appended-with-number", ), pytest.param("{a}", [Node(token="{}", children=(Node(token="a"),))], id="single-group"), pytest.param( "{a}{b}", [Node(token="{}", children=(Node(token="a"),)), Node(token="{}", children=(Node(token="b"),))], id="multiple-groups", ), pytest.param( "{a+{b}}", [ Node( token="{}", children=(Node(token="a"), Node(token="+"), Node(token="{}", children=(Node(token="b"),))), ) ], id="inner-group", ), pytest.param("a_b", [Node(token="_", children=(Node(token="a"), Node(token="b")))], id="subscript-1"), pytest.param( "{a_b}", [Node(token="{}", children=(Node(token="_", children=(Node(token="a"), Node(token="b"))),))], id="subscript-2", ), pytest.param("1_2", [Node(token="_", children=(Node(token="1"), Node(token="2")))], id="subscript-3"), pytest.param("1.2_2", [Node(token="_", children=(Node(token="1.2"), Node(token="2")))], id="subscript-4"), pytest.param("a^b", [Node(token="^", children=(Node(token="a"), Node(token="b")))], id="superscript-1"), pytest.param( "{a^b}", [Node(token="{}", children=(Node(token="^", children=(Node(token="a"), Node(token="b"))),))], id="superscript-2", ), pytest.param( "a^{i+1}_3", [ Node( token="_^", children=( Node(token="a"), Node(token="3"), Node(token="{}", children=(Node(token="i"), Node(token="+"), Node(token="1"))), ), ) ], id="superscript-3", ), pytest.param( "a_b^c", [Node(token="_^", children=(Node(token="a"), Node(token="b"), Node(token="c")))], id="subscript-and-superscript-1", ), pytest.param( "a^b_c", [Node(token="_^", children=(Node(token="a"), Node(token="c"), Node(token="b")))], id="subscript-and-superscript-2", ), pytest.param( r"\sqrt[3]{2}", [Node(token=r"\root", children=(Node(token="{}", children=(Node(token="2"),)), Node(token="3")))], id="root", ), pytest.param( r"\frac{1}{2}", [ Node( token=r"\frac", children=( Node(token="{}", children=(Node(token="1"),)), Node(token="{}", children=(Node(token="2"),)), ), ), ], id="fraction-1", ), pytest.param( r"1 \over 2", [Node(token=r"\frac", children=(Node(token="1"), Node(token="2")))], id="fraction-2", ), pytest.param( r"{1 \over 2}", [Node(token="{}", children=(Node(token=r"\frac", children=(Node(token="1"), Node(token="2"))),))], id="fraction-3", ), pytest.param( r"\left\{\right.", [Node(token=r"\left", children=(Node(token=r"\right", delimiter="."),), delimiter=r"\{")], id="null-delimiter-1", ), pytest.param( r"\matrix{a & b \\ c & d}", [ Node( token=r"\matrix", children=( Node(token="a"), Node(token="&"), Node(token="b"), Node(token=r"\\"), Node(token="c"), Node(token="&"), Node(token="d"), ), alignment="", ) ], id="matrix-1", ), pytest.param( r"\begin{matrix}a & b \\ c & d \end{matrix}", [ Node( token=r"\matrix", children=( Node(token="a"), Node(token="&"), Node(token="b"), Node(token=r"\\"), Node(token="c"), Node(token="&"), Node(token="d"), ), alignment="", ) ], id="matrix-2", ), pytest.param( r"\left\{ \begin{array} { l } { 3x - 5y + 4z = 0} \\ { x - y + 8z = 0} \\ { 2x - 6y + z = 0} " r"\end{array}\right.", [ Node( token=r"\left", children=( Node( token=r"\array", alignment="l", children=( Node( token="{}", children=( Node(token="3"), Node(token="x"), Node(token="-"), Node(token="5"), Node(token="y"), Node(token="+"), Node(token="4"), Node(token="z"), Node(token="="), Node(token="0"), ), ), Node(token=r"\\"), Node( token="{}", children=( Node(token="x"), Node(token="-"), Node(token="y"), Node(token="+"), Node(token="8"), Node(token="z"), Node(token="="), Node(token="0"), ), ), Node(token=r"\\"), Node( token="{}", children=( Node(token="2"), Node(token="x"), Node(token="-"), Node(token="6"), Node(token="y"), Node(token="+"), Node(token="z"), Node(token="="), Node(token="0"), ), ), ), ), Node(token=r"\right", delimiter="."), ), delimiter=r"\{", ) ], id="null-delimiter-2", ), pytest.param( r"\begin{matrix*}[r]a & b \\ c & d \end{matrix*}", [ Node( token=r"\matrix*", children=( Node(token="a"), Node(token="&"), Node(token="b"), Node(token=r"\\"), Node(token="c"), Node(token="&"), Node(token="d"), ), alignment="r", ) ], id="matrix-with-alignment", ), pytest.param( r"\begin{matrix*}[]a & b \\ c & d \end{matrix*}", [ Node( token=r"\matrix*", children=( Node(token="a"), Node(token="&"), Node(token="b"), Node(token=r"\\"), Node(token="c"), Node(token="&"), Node(token="d"), ), alignment="", ) ], id="matrix-with-empty-alignment", ), pytest.param( r"\begin{matrix}-a & b \\ c & d \end{matrix}", [ Node( token=r"\matrix", children=( Node(token="-"), Node(token="a"), Node(token="&"), Node(token="b"), Node(token=r"\\"), Node(token="c"), Node(token="&"), Node(token="d"), ), alignment="", ) ], id="matrix-with-negative-sign", ), pytest.param( r"\begin{matrix}-\end{matrix}", [Node(token=r"\matrix", children=(Node(token="-"),), alignment="")], id="matrix-with-just-negative-sign-1", ), pytest.param( r"\begin{matrix}a_{1} & b_{2} \\ c_{3} & d_{4} \end{matrix}", [ Node( token=r"\matrix", children=( Node(token="_", children=(Node(token="a"), Node(token="{}", children=(Node(token="1"),)))), Node(token="&"), Node(token="_", children=(Node(token="b"), Node(token="{}", children=(Node(token="2"),)))), Node(token=r"\\"), Node(token="_", children=(Node(token="c"), Node(token="{}", children=(Node(token="3"),)))), Node(token="&"), Node(token="_", children=(Node(token="d"), Node(token="{}", children=(Node(token="4"),)))), ), alignment="", ), ], id="complex-matrix", ), pytest.param( r"\begin{array}{cc} 1 & 2 \\ 3 & 4 \end{array}", [ Node( token=r"\array", children=( Node(token="1"), Node(token="&"), Node(token="2"), Node(token=r"\\"), Node(token="3"), Node(token="&"), Node(token="4"), ), alignment="cc", ) ], id="simple-array", ), pytest.param( r"""\begin{bmatrix} a_{1,1} & a_{1,2} & \cdots & a_{1,n} \\ a_{2,1} & a_{2,2} & \cdots & a_{2,n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m,1} & a_{m,2} & \cdots & a_{m,n} \end{bmatrix}""", [ Node( token=r"\bmatrix", children=( Node( token="_", children=( Node(token="a"), Node(token="{}", children=(Node(token="1"), Node(token=","), Node(token="1"))), ), ), Node(token="&"), Node( token="_", children=( Node(token="a"), Node(token="{}", children=(Node(token="1"), Node(token=","), Node(token="2"))), ), ), Node(token="&"), Node(token=r"\cdots"), Node(token="&"), Node( token="_", children=( Node(token="a"), Node(token="{}", children=(Node(token="1"), Node(token=","), Node(token="n"))), ), ), Node(token=r"\\"), Node( token="_", children=( Node(token="a"), Node(token="{}", children=(Node(token="2"), Node(token=","), Node(token="1"))), ), ), Node(token="&"), Node( token="_", children=( Node(token="a"), Node(token="{}", children=(Node(token="2"), Node(token=","), Node(token="2"))), ), ), Node(token="&"), Node(token=r"\cdots"), Node(token="&"), Node( token="_", children=( Node(token="a"), Node(token="{}", children=(Node(token="2"), Node(token=","), Node(token="n"))), ), ), Node(token=r"\\"), Node(token=r"\vdots"), Node(token="&"), Node(token=r"\vdots"), Node(token="&"), Node(token=r"\ddots"), Node(token="&"), Node(token=r"\vdots"), Node(token=r"\\"), Node( token="_", children=( Node(token="a"), Node(token="{}", children=(Node(token="m"), Node(token=","), Node(token="1"))), ), ), Node(token="&"), Node( token="_", children=( Node(token="a"), Node(token="{}", children=(Node(token="m"), Node(token=","), Node(token="2"))), ), ), Node(token="&"), Node(token=r"\cdots"), Node(token="&"), Node( token="_", children=( Node(token="a"), Node(token="{}", children=(Node(token="m"), Node(token=","), Node(token="n"))), ), ), ), alignment="", ) ], id="issue-33", ), pytest.param( r"\sqrt { ( - 25 ) ^ { 2 } } = \pm 25", [ Node( token=r"\sqrt", children=( Node( token="{}", children=( Node(token="("), Node(token="-"), Node(token="25"), Node( token="^", children=(Node(token=")"), Node(token="{}", children=(Node(token="2"),))) ), ), ), ), ), Node(token="="), Node(token=r"\pm"), Node(token="25"), ], id="issue-42", ), pytest.param( r"\left(- x^{3} + 5\right)^{5}", [ Node( token="^", children=( Node( token=r"\left", children=( Node(token="-"), Node( token="^", children=(Node(token="x"), Node(token="{}", children=(Node(token="3"),))) ), Node(token="+"), Node(token="5"), Node(token=r"\right", delimiter=")"), ), delimiter="(", ), Node(token="{}", children=(Node(token="5"),)), ), ) ], id="issue-44", ), pytest.param( r"\begin{array}{rcl}ABC&=&a\\A&=&abc\end{array}", [ Node( token=r"\array", children=( Node(token="A"), Node(token="B"), Node(token="C"), Node(token="&"), Node(token="="), Node(token="&"), Node(token="a"), Node(token=r"\\"), Node(token="A"), Node(token="&"), Node(token="="), Node(token="&"), Node(token="a"), Node(token="b"), Node(token="c"), ), alignment="rcl", ) ], id="issue-55", ), pytest.param( r"\begin{array}{cr} 1 & 2 \\ 3 & 4 \\ \hline 5 & 6 \end{array}", [ Node( token=r"\array", children=( Node(token="1"), Node(token="&"), Node(token="2"), Node(token=r"\\"), Node(token="3"), Node(token="&"), Node(token="4"), Node(token=r"\\"), Node(token=r"\hline"), Node(token="5"), Node(token="&"), Node(token="6"), ), alignment="cr", ) ], id="array-with-horizontal-line", ), pytest.param( r"\begin{array}{cr} 1 & 2 \\ \hline 3 & 4 \\ \hline 5 & 6 \end{array}", [ Node( token=r"\array", children=( Node(token="1"), Node(token="&"), Node(token="2"), Node(token=r"\\"), Node(token=r"\hline"), Node(token="3"), Node(token="&"), Node(token="4"), Node(token=r"\\"), Node(token=r"\hline"), Node(token="5"), Node(token="&"), Node(token="6"), ), alignment="cr", ) ], id="array-with-horizontal-lines", ), pytest.param( r"\mathrm{...}", [ Node( token=r"\mathrm", children=(Node(token="{}", children=(Node(token="."), Node(token="."), Node(token="."))),), ) ], id="issue-60", ), pytest.param( r"\frac{x + 4}{x + \frac{123 \left(\sqrt{x} + 5\right)}{x + 4} - 8}", [ Node( token=r"\frac", children=( Node(token="{}", children=(Node(token="x"), Node(token="+"), Node(token="4"))), Node( token="{}", children=( Node(token="x"), Node(token="+"), Node( token=r"\frac", children=( Node( token="{}", children=( Node(token="123"), Node( token=r"\left", children=( Node( token=r"\sqrt", children=(Node(token="{}", children=(Node(token="x"),)),), ), Node(token="+"), Node(token="5"), Node(token=r"\right", delimiter=")"), ), delimiter="(", ), ), ), Node(token="{}", children=(Node(token="x"), Node(token="+"), Node(token="4"))), ), ), Node(token="-"), Node(token="8"), ), ), ), ) ], id="issue-61", ), pytest.param( r"\sqrt {\sqrt {\left( x^{3}\right) + v}}", [ Node( token=r"\sqrt", children=( Node( token="{}", children=( Node( token=r"\sqrt", children=( Node( token="{}", children=( Node( token=r"\left", children=( Node( token="^", children=( Node(token="x"), Node(token="{}", children=(Node(token="3"),)), ), ), Node(token=r"\right", delimiter=")"), ), delimiter="(", ), Node(token="+"), Node(token="v"), ), ), ), ), ), ), ), ) ], id="issue-63", ), pytest.param( r"\left(\left(x\right)\right)", [ Node( token=r"\left", children=( Node( token=r"\left", children=(Node(token="x"), Node(token=r"\right", delimiter=")")), delimiter="(", ), Node(token=r"\right", delimiter=")"), ), delimiter="(", ) ], id=r"nested-left-right", ), pytest.param( r"\left(x\right){5}", [ Node( token=r"\left", children=(Node(token="x"), Node(token=r"\right", delimiter=")")), delimiter="(", ), Node(token="{}", children=(Node(token="5"),)), ], id=r"group-after-right", ), pytest.param( r"\sqrt[3]{}", [Node(token=r"\root", children=(Node(token="{}", children=()), Node(token="3")))], id="empty-nth-root", ), pytest.param( r"1_{}", [Node(token="_", children=(Node(token="1"), Node(token="{}", children=())))], id="empty-subscript" ), pytest.param( r"\array{}", [Node(token=r"\array", children=(Node(token="{}", children=()),), alignment="")], id="empty-array", ), pytest.param( r"\array{{}}", [Node(token=r"\array", children=(Node(token="{}", children=()),), alignment="")], id="empty-array-with-empty-group", ), pytest.param( r"\left[\begin{matrix}1 & 0 & 0 & 0\\0 & 1 & 0 & 0\\0 & 0 & 1 & 0\\0 & 0 & 0 & 1\end{matrix}\right]", [ Node( token=r"\left", children=( Node( token=r"\matrix", children=( Node(token="1"), Node(token="&"), Node(token="0"), Node(token="&"), Node(token="0"), Node(token="&"), Node(token="0"), Node(token=r"\\"), Node(token="0"), Node(token="&"), Node(token="1"), Node(token="&"), Node(token="0"), Node(token="&"), Node(token="0"), Node(token=r"\\"), Node(token="0"), Node(token="&"), Node(token="0"), Node(token="&"), Node(token="1"), Node(token="&"), Node(token="0"), Node(token=r"\\"), Node(token="0"), Node(token="&"), Node(token="0"), Node(token="&"), Node(token="0"), Node(token="&"), Node(token="1"), ), alignment="", ), Node(token=r"\right", delimiter="]"), ), delimiter="[", ) ], id="issue-77", ), pytest.param( r"\left({x}\right)", [ Node( token=r"\left", children=( Node(token="{}", children=(Node(token="x"),)), Node(token=r"\right", delimiter=")"), ), delimiter="(", ) ], id="issue-78-1", ), pytest.param( r"\left(\frac{x^{x^{x}}}{x}\right)", [ Node( token=r"\left", children=( Node( token=r"\frac", children=( Node( token="{}", children=( Node( token="^", children=( Node(token="x"), Node( token="{}", children=( Node( token="^", children=( Node(token="x"), Node(token="{}", children=(Node(token="x"),)), ), ), ), ), ), ), ), ), Node(token="{}", children=(Node(token="x"),)), ), ), Node(token=r"\right", delimiter=")"), ), delimiter="(", ) ], id="issue-78-2", ), pytest.param( r"x^{x^{x^{x}}} \left(x^{x^{x}} \left(x^{x} \left(\log{\left(x \right)} + 1\right) \log{\left(x \right)} + " r"\frac{x^{x}}{x}\right) \log{\left(x \right)} + \frac{x^{x^{x}}}{x}\right)", [ Node( token="^", children=( Node(token="x"), Node( token="{}", children=( Node( token="^", children=( Node(token="x"), Node( token="{}", children=( Node( token="^", children=( Node(token="x"), Node(token="{}", children=(Node(token="x"),)), ), ), ), ), ), ), ), ), ), ), Node( token=r"\left", children=( Node( token="^", children=( Node(token="x"), Node( token="{}", children=( Node( token="^", children=(Node(token="x"), Node(token="{}", children=(Node(token="x"),))), ), ), ), ), ), Node( token=r"\left", children=( Node( token="^", children=(Node(token="x"), Node(token="{}", children=(Node(token="x"),))) ), Node( token=r"\left", children=( Node(token=r"\log"), Node( token="{}", children=( Node( token=r"\left", children=(Node(token="x"), Node(token=r"\right", delimiter=")")), delimiter="(", ), ), ), Node(token="+"), Node(token="1"), Node(token=r"\right", delimiter=")"), ), delimiter="(", ), Node(token=r"\log"), Node( token="{}", children=( Node( token=r"\left", children=(Node(token="x"), Node(token=r"\right", delimiter=")")), delimiter="(", ), ), ), Node(token="+"), Node( token=r"\frac", children=( Node( token="{}", children=( Node( token="^", children=( Node(token="x"), Node(token="{}", children=(Node(token="x"),)), ), ), ), ), Node(token="{}", children=(Node(token="x"),)), ), ), Node(token=r"\right", delimiter=")"), ), delimiter="(", ), Node(token=r"\log"), Node( token="{}", children=( Node( token=r"\left", children=(Node(token="x"), Node(token=r"\right", delimiter=")")), delimiter="(", ), ), ), Node(token="+"), Node( token=r"\frac", children=( Node( token="{}", children=( Node( token="^", children=( Node(token="x"), Node( token="{}", children=( Node( token="^", children=( Node(token="x"), Node(token="{}", children=(Node(token="x"),)), ), ), ), ), ), ), ), ), Node(token="{}", children=(Node(token="x"),)), ), ), Node(token=r"\right", delimiter=")"), ), delimiter="(", ), ], id="issue-78-3", ), pytest.param( r"\log_2{x}", [ Node(token="_", children=(Node(token=r"\log"), Node(token="2"))), Node(token="{}", children=(Node(token="x"),)), ], id="logarithm-with-base", ), pytest.param( r"\sqrt[]{3}", [Node(token=r"\sqrt", children=(Node(token="{}", children=(Node(token="3"),)),))], id="issue-79-empty-root", ), pytest.param( r"\frac{3}{\frac{1}{2}{x}^{2}}", [ Node( token=r"\frac", children=( Node(token="{}", children=(Node(token="3"),)), Node( token="{}", children=( Node( token=r"\frac", children=( Node(token="{}", children=(Node(token="1"),)), Node(token="{}", children=(Node(token="2"),)), ), ), Node( token="^", children=( Node(token="{}", children=(Node(token="x"),)), Node(token="{}", children=(Node(token="2"),)), ), ), ), ), ), ) ], id="issue-79-exponent-after-fraction", ), pytest.param( r"\frac{3}{\frac{1}{2}{x}^{2}-\frac{3\sqrt[]{3}}{2}x+3}", [ Node( token=r"\frac", children=( Node(token="{}", children=(Node(token="3"),)), Node( token="{}", children=( Node( token=r"\frac", children=( Node(token="{}", children=(Node(token="1"),)), Node(token="{}", children=(Node(token="2"),)), ), ), Node( token="^", children=( Node(token="{}", children=(Node(token="x"),)), Node(token="{}", children=(Node(token="2"),)), ), ), Node(token="-"), Node( token=r"\frac", children=( Node( token="{}", children=( Node(token="3"), Node( token=r"\sqrt", children=(Node(token="{}", children=(Node(token="3"),)),), ), ), ), Node(token="{}", children=(Node(token="2"),)), ), ), Node(token="x"), Node(token="+"), Node(token="3"), ), ), ), ) ], id="issue-79", ), pytest.param( "^3", [Node(token="^", children=(Node(token=""), Node(token="3")))], id="superscript-without-base-works" ), pytest.param( "_3", [Node(token="_", children=(Node(token=""), Node(token="3")))], id="subscript-without-base-works" ), pytest.param( r"\lim_{x \to +\infty} f(x)", [ Node( token="_", children=( Node(token=r"\lim"), Node( token="{}", children=(Node(token="x"), Node(token=r"\to"), Node(token="+"), Node(token=r"\infty")), ), ), ), Node(token="f"), Node(token="("), Node(token="x"), Node(token=")"), ], id="limit-at-plus-infinity", ), pytest.param( r"\inf_{x > s}f(x)", [ Node( token="_", children=( Node(token=r"\inf"), Node(token="{}", children=(Node(token="x"), Node(token=">"), Node(token="s"))), ), ), Node(token="f"), Node(token="("), Node(token="x"), Node(token=")"), ], id="inf", ), pytest.param( r"\sup_{x \in \mathbb{R}}f(x)", [ Node( token="_", children=( Node(token=r"\sup"), Node(token="{}", children=(Node(token="x"), Node(token=r"\in"), Node(token="ℝ"))), ), ), Node(token="f"), Node(token="("), Node(token="x"), Node(token=")"), ], id="sup", ), pytest.param( r"\max_{x \in [a,b]}f(x)", [ Node( token="_", children=( Node(token=r"\max"), Node( token="{}", children=( Node(token="x"), Node(token=r"\in"), Node(token="["), Node(token="a"), Node(token=","), Node(token="b"), Node(token="]"), ), ), ), ), Node(token="f"), Node(token="("), Node(token="x"), Node(token=")"), ], id="max", ), pytest.param( r"\min_{x \in [\alpha,\beta]}f(x)", [ Node( token="_", children=( Node(token=r"\min"), Node( token="{}", children=( Node(token="x"), Node(token=r"\in"), Node(token="["), Node(token=r"\alpha"), Node(token=","), Node(token=r"\beta"), Node(token="]"), ), ), ), ), Node(token="f"), Node(token="("), Node(token="x"), Node(token=")"), ], id="min", ), pytest.param( r"\int\limits_{0}^{\pi}", [ Node( token="_^", children=( Node(token=r"\int"), Node(token="{}", children=(Node(token="0"),)), Node(token="{}", children=(Node(token=r"\pi"),)), ), modifier=r"\limits", ), ], id="issue-76", ), pytest.param( r"\sum_{\substack{1\le i\le n\\ i\ne j}}", [ Node( token="_", children=( Node(token=r"\sum"), Node( token="{}", children=( Node( token=r"\substack", children=( Node(token="1"), Node(token=r"\le"), Node(token="i"), Node(token=r"\le"), Node(token="n"), Node(token=r"\\"), Node(token="i"), Node(token=r"\ne"), Node(token="j"), ), alignment="", ), ), ), ), ) ], id="issue-75", ), pytest.param( r"\mathrm{AA}", [Node(token=r"\mathrm", children=(Node(token="{}", children=(Node(token="A"), Node(token="A"))),))], id="issue-94", ), pytest.param( r"(1+(x-y)^{2})", [ Node(token="("), Node(token="1"), Node(token="+"), Node(token="("), Node(token="x"), Node(token="-"), Node(token="y"), Node(token="^", children=(Node(token=")"), Node(token="{}", children=(Node(token="2"),)))), Node(token=")"), ], id="issue-96", ), pytest.param( r"p_{\max}", [Node(token="_", children=(Node(token="p"), Node(token="{}", children=(Node(token=r"\max"),))))], id="issue-98", ), pytest.param( r"\vec{AB}", [Node(token=r"\vec", children=(Node(token="{}", children=(Node(token="A"), Node(token="B"))),))], id="issue-103", ), pytest.param(r"\max f", [Node(token=r"\max"), Node(token="f")], id="issue-108-1"), pytest.param( r"\max \{a, b, c\}", [ Node(token=r"\max"), Node(token=r"\{"), Node(token="a"), Node(token=","), Node(token="b"), Node(token=","), Node(token="c"), Node(token=r"\}"), ], id="issue-108-2", ), pytest.param( r"\min{(x, y)}", [ Node(token=r"\min"), Node( token="{}", children=(Node(token="("), Node(token="x"), Node(token=","), Node(token="y"), Node(token=")")), ), ], id="issue-108-3", ), pytest.param( r"x = {-b \pm \sqrt{b^2-4ac} \over 2a}", [ Node(token="x"), Node(token="="), Node( token="{}", children=( Node( token=r"\frac", children=( Node( token="{}", children=( Node(token="-"), Node(token="b"), Node(token=r"\pm"), Node( token=r"\sqrt", children=( Node( token="{}", children=( Node(token="^", children=(Node(token="b"), Node(token="2"))), Node(token="-"), Node(token="4"), Node(token="a"), Node(token="c"), ), ), ), ), ), ), Node(token="{}", children=(Node(token="2"), Node(token="a"))), ), ), ), ), ], id="quadratic-equation", ), pytest.param( r"\binom{2}{3}", [ Node( token=r"\binom", children=( Node(token="{}", children=(Node(token="2"),)), Node(token="{}", children=(Node(token="3"),)), ), ) ], id="binomial", ), pytest.param( r"\overline{a}", [Node(token=r"\overline", children=(Node(token="{}", children=(Node(token="a"),)),))], id="overline", ), pytest.param( r"\bar{a}", [Node(token=r"\bar", children=(Node(token="{}", children=(Node(token="a"),)),))], id="bar", ), pytest.param( r"\underline{a}", [Node(token=r"\underline", children=(Node(token="{}", children=(Node(token="a"),)),))], id="underline", ), pytest.param( r"\overrightarrow{a}", [Node(token=r"\overrightarrow", children=(Node(token="{}", children=(Node(token="a"),)),))], id="overrightarrow", ), pytest.param(r"\text{Let}", [Node(token=r"\text", text="Let")], id="text"), pytest.param( r"F(a,n)=\overset{a-a-a\cdots-a}{}ntext{个}a", [ Node(token="F"), Node(token="("), Node(token="a"), Node(token=","), Node(token="n"), Node(token=")"), Node(token="="), Node( token=r"\overset", children=( Node(token="{}", children=()), Node( token="{}", children=( Node(token="a"), Node(token="-"), Node(token="a"), Node(token="-"), Node(token="a"), Node(token=r"\cdots"), Node(token="-"), Node(token="a"), ), ), ), ), Node(token="n"), Node(token="t"), Node(token="e"), Node(token="x"), Node(token="t"), Node(token="{}", children=(Node(token="个"),)), Node(token="a"), ], id="issue-125-overset", ), pytest.param( r"|\hspace1em|\hspace{10ex}|", [ Node(token="|"), Node(token=r"\hspace", attributes={"width": "1em"}), Node(token="|"), Node(token=r"\hspace", attributes={"width": "10ex"}), Node(token="|"), ], id="issue-129-hspace", ), pytest.param( "f'(x) = 2x, f''(x) = 2", [ Node(token="^", children=(Node(token="f"), Node(token=r"\prime"))), Node(token="("), Node(token="x"), Node(token=")"), Node(token="="), Node(token="2"), Node(token="x"), Node(token=","), Node(token="^", children=(Node(token="f"), Node(token=r"\dprime"))), Node(token="("), Node(token="x"), Node(token=")"), Node(token="="), Node(token="2"), ], id="prime", ), pytest.param( r"{a \above 1pt b} + {c \above {1.5pt} d}", [ Node( token="{}", children=( Node( token=r"\frac", children=(Node(token="a"), Node(token="b")), attributes={"linethickness": "1pt"}, ), ), ), Node(token="+"), Node( token="{}", children=( Node( token=r"\frac", children=(Node(token="c"), Node(token="d")), attributes={"linethickness": "1.5pt"}, ), ), ), ], id="above", ), pytest.param( r"a \atop {b \atopwithdelims \{ \} c}", [ Node( token=r"\frac", children=( Node(token="a"), Node( token="{}", children=( Node( token=r"\frac", children=( Node(token="b"), Node(token="c"), ), attributes={"linethickness": "0"}, delimiter="{}", ), ), ), ), attributes={"linethickness": "0"}, ), ], id="atop-and-atopwithdelims", ), pytest.param( r"{a \abovewithdelims [ ] 1pt b} + {c \abovewithdelims . . {1.5pt} d}", [ Node( token="{}", children=( Node( token=r"\frac", children=( Node(token="a"), Node(token="b"), ), attributes={"linethickness": "1pt"}, delimiter="[]", ), ), ), Node(token="+"), Node( token="{}", children=( Node( token=r"\frac", children=( Node(token="c"), Node(token="d"), ), attributes={"linethickness": "1.5pt"}, delimiter="..", ), ), ), ], id="abovewithdelims", ), # We don't want \Huge or \huge to make its siblings as children as it breaks groupings on deep-nesting pytest.param( r"[{[\Huge[\huge[[}[", [ Node(token="["), Node( token="{}", children=( Node(token="["), Node(token=r"\Huge"), Node(token="["), Node(token=r"\huge"), Node(token="["), Node(token="["), ), ), Node(token="["), ], id="huge", ), pytest.param( r"X_\mathrm{min}", [ Node( token="_", children=( Node(token="X"), Node( token=r"\mathrm", children=(Node(token="{}", children=(Node(token="m"), Node(token="i"), Node(token="n"))),), ), ), ) ], id="issue-203-1", ), pytest.param( r"a\mathop{t}b\mathop{t}c", [ Node(token="a"), Node(token=r"\mathop", children=(Node(token="{}", children=(Node(token="t"),)),)), Node(token="b"), Node(token=r"\mathop", children=(Node(token="{}", children=(Node(token="t"),)),)), Node(token="c"), ], id="issue-203-2", ), pytest.param(r"\hbox{E=mc^2}", [Node(token=r"\hbox", text="E=mc^2")], id="hbox"), pytest.param( r"\style{color:red}{x+1}", [ Node( token="{}", children=(Node(token="x"), Node(token="+"), Node(token="1")), attributes={"style": "color:red"}, ) ], id="style", ), pytest.param( r"\sideset{_1^2}{_3^4}\sum", [ Node( token=r"\sideset", children=( Node( token="_^", children=( Node( token=r"\vphantom", children=(Node(token=r"\sum", attributes={"movablelimits": "false"}),), ), Node(token="1"), Node(token="2"), ), ), Node( token="_^", children=( Node(token=r"\sum", attributes={"movablelimits": "false"}), Node(token="3"), Node(token="4"), ), ), ), ) ], id="sideset", ), pytest.param( r"\sideset{^2}{_3}\sum", [ Node( token=r"\sideset", children=( Node( token="^", children=( Node( token=r"\vphantom", children=(Node(token=r"\sum", attributes={"movablelimits": "false"}),), ), Node(token="2"), ), ), Node( token="_", children=( Node(token=r"\sum", attributes={"movablelimits": "false"}), Node(token="3"), ), ), ), ) ], id="sideset-2", ), pytest.param( r"\root 3 \of x", [Node(token=r"\root", children=(Node(token="x"), Node(token="3")))], id="root-of" ), pytest.param( r"\root n+1 \of x + 2", [ Node( token=r"\root", children=( Node(token="x"), Node(token="{}", children=(Node(token="n"), Node(token="+"), Node(token="1"))), ), ), Node(token="+"), Node(token="2"), ], id="root-of-multiple", ), pytest.param( r"\root \of x", [Node(token=r"\root", children=(Node(token="x"), Node(token="{}", children=())))], id="root-of-without-root", ), pytest.param( r"\skew7\hat a\skew{8}\hat b", [ Node( token=r"\skew", children=(Node(token=r"\hat", children=(Node(token="a"),)),), attributes={"width": "0.389em"}, ), Node( token=r"\skew", children=(Node(token=r"\hat", children=(Node(token="b"),)),), attributes={"width": "0.444em"}, ), ], id="skew-hat", ), pytest.param(r"\xleftarrow x", [Node(token=r"\xleftarrow", children=(Node(token="x"),))], id="xleftarrow"), pytest.param( r"\xleftarrow[y] x", [Node(token=r"\xleftarrow", children=(Node(token="{}", children=(Node(token="y"),)), Node(token="x")))], id="xleftarrow-with-argument", ), pytest.param(r"\xrightarrow x", [Node(token=r"\xrightarrow", children=(Node(token="x"),))], id="xrightarrow"), pytest.param( r"\xrightarrow[y] x", [Node(token=r"\xrightarrow", children=(Node(token="{}", children=(Node(token="y"),)), Node(token="x")))], id="xrightarrow-with-argument", ), pytest.param( r"\not \in \not\ni \not a \not\equiv \not\operatorname{R}\not", [ Node(token=r"\nin"), Node(token=r"\nni"), Node(token=r"\not"), Node(token="a"), Node(token=r"\nequiv"), Node(token=r"\not"), Node(token=r"\operatorname{R}"), Node(token=r"\not"), ], id="not", ), pytest.param( "x_1'", [ Node( token="_^", children=(Node(token="x"), Node(token="1"), Node(token="\\prime")), ), ], id="issue-392-subscript", ), pytest.param( "x'^2", [ Node( token="^", children=( Node(token="x"), Node( token="{}", children=(Node(token="\\prime"), Node(token="2")), ), ), ) ], id="issue-392-superscript", ), ], ) def test_walk(latex: str, expected: list) -> None: assert walk(latex) == expected @pytest.mark.parametrize( "latex, exception", [ pytest.param(r"\right)", ExtraLeftOrMissingRightError, id=r"missing-\left"), pytest.param(r"\left(x", ExtraLeftOrMissingRightError, id=r"missing-\right"), pytest.param(r"\middle|", ExtraLeftOrMissingRightError, id=r"missing-\left"), pytest.param(r"{ \over 2}", NumeratorNotFoundError, id="fraction-without-numerator"), pytest.param(r"{1 \over }", DenominatorNotFoundError, id="fraction-without-denominator"), pytest.param(r"1_", MissingSuperScriptOrSubscriptError, id="missing-subscript"), pytest.param(r"1^", MissingSuperScriptOrSubscriptError, id="missing-superscript"), pytest.param(r"1_2_3", DoubleSubscriptsError, id="double-subscript"), pytest.param(r"1^2^3", DoubleSuperscriptsError, id="double-superscript"), pytest.param(r"\genfrac(){1pt}4ab", InvalidStyleForGenfracError, id="invalid-style-for-genfrac"), pytest.param(r"\begin{array}\end{array1}", MissingEndError, id="missing-end"), pytest.param(r"\begin{matrix*}[xxx]\end{matrix*}", InvalidAlignmentError, id="invalid-alignment"), pytest.param(r"\skew{}\hat b", InvalidWidthError, id="invalid-width"), pytest.param(r"\skew{X}\hat b", InvalidWidthError, id="invalid-width-not-number"), pytest.param(r"\limits^{\pi}", LimitsMustFollowMathOperatorError, id="limits-must-follow-math-operator-blank"), pytest.param(r"5\limits^{\pi}", LimitsMustFollowMathOperatorError, id="limits-must-follow-math-operator"), pytest.param(r"x^2'", DoubleSuperscriptsError, id="issue-392"), ], ) def test_error(latex: str, exception: Union[tuple[Any, ...], Any]) -> None: with pytest.raises(exception): walk(latex)