├── MANIFEST.in ├── tests ├── test_cli.py └── test_latex.py ├── LICENSES_bundled ├── .gitignore ├── src └── unicodeitplus │ ├── __init__.py │ ├── cli.py │ ├── parser.py │ ├── transform.py │ ├── _make_data.py │ └── data.py ├── .github └── workflows │ ├── publish.yml │ └── test.yml ├── .pre-commit-config.yaml ├── tools └── generate_examples.py ├── setup.py ├── LICENSE ├── pyproject.toml ├── README.rst ├── CONTRIBUTING.rst └── extern └── LICENSE.LPPL /MANIFEST.in: -------------------------------------------------------------------------------- 1 | include *.rst 2 | include LICENSE 3 | include Makefile 4 | include pyproject.toml 5 | include setup.py 6 | graft src 7 | graft tools 8 | graft extern 9 | graft docs 10 | graft tests 11 | -------------------------------------------------------------------------------- /tests/test_cli.py: -------------------------------------------------------------------------------- 1 | from unicodeitplus.cli import main 2 | import sys 3 | 4 | 5 | def test_cli(capsys): 6 | sys.argv = ["prog", "foo $x^3$", "bar"] 7 | assert main() == 0 8 | out, err = capsys.readouterr() 9 | assert out == "foo 𝑥³ bar\n" 10 | assert err == "" 11 | -------------------------------------------------------------------------------- /LICENSES_bundled: -------------------------------------------------------------------------------- 1 | The unicodeitplus repository and source distributions bundles a file which is compatibly licensed. 2 | 3 | Name: Unicode characters and corresponding LaTeX math mode commands 4 | Files: extern/unimathsymbols.txt 5 | License: LaTeX Project Public License 1.3 6 | For details, see extern/LICENCE.LPPL. 7 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Caches 2 | __pycache__/ 3 | *.py[cod] 4 | .ruff_cache 5 | .cache 6 | .pytest_cache/ 7 | .mypy_cache/ 8 | 9 | # Distribution / packaging 10 | build/ 11 | develop-eggs/ 12 | dist/ 13 | eggs/ 14 | .eggs/ 15 | *.egg-info/ 16 | *.egg 17 | MANIFEST 18 | 19 | # Unit test / coverage reports 20 | htmlcov/ 21 | .coverage 22 | .coverage.* 23 | 24 | # Sphinx documentation 25 | docs/_build/ 26 | 27 | # Jupyter Notebook 28 | .ipynb_checkpoints 29 | 30 | # virtualenv 31 | venv/ 32 | 33 | # IDE settings 34 | .vscode/ 35 | -------------------------------------------------------------------------------- /src/unicodeitplus/__init__.py: -------------------------------------------------------------------------------- 1 | """Top-level package for unicodeitplus.""" 2 | try: 3 | from importlib.metadata import version 4 | 5 | __version__ = version("unicodeitplus") 6 | except Exception: 7 | pass 8 | 9 | from .parser import parser 10 | 11 | __all__ = ["replace", "parse"] 12 | 13 | 14 | def parse(s: str) -> str: 15 | """Parse simple LaTeX code and replace it by an unicode approximation.""" 16 | return parser.parse(s) # type:ignore 17 | 18 | 19 | def replace(s: str) -> str: 20 | """Replace simple LaTeX code by unicode approximation.""" 21 | return parse(f"${s}$") 22 | -------------------------------------------------------------------------------- /src/unicodeitplus/cli.py: -------------------------------------------------------------------------------- 1 | """Console script for unicodeitplus.""" 2 | import argparse 3 | import sys 4 | from unicodeitplus import replace, parse 5 | 6 | 7 | def main() -> int: 8 | """Convert simple LaTeX into an unicode approximation to paste anywhere.""" 9 | parser = argparse.ArgumentParser(description=main.__doc__) 10 | parser.add_argument("ARG", nargs="+", help="some LaTeX code") 11 | args = parser.parse_args() 12 | sargs = " ".join(args.ARG) 13 | if "$" not in sargs: 14 | s = replace(sargs) 15 | else: 16 | s = parse(sargs) 17 | sys.stdout.write(s + "\n") 18 | return 0 19 | 20 | 21 | if __name__ == "__main__": 22 | sys.exit(main()) # pragma: no cover 23 | -------------------------------------------------------------------------------- /src/unicodeitplus/parser.py: -------------------------------------------------------------------------------- 1 | """ 2 | Parser for simple LaTeX. 3 | 4 | This parser supports only the simple subject of LaTeX that we typically use. 5 | """ 6 | from lark import Lark 7 | from .transform import ToUnicode 8 | 9 | grammar = r""" 10 | start: (item | math)* 11 | 12 | ?atom: CHARACTER 13 | | COMMAND 14 | 15 | ?item: atom 16 | | WS_EXT+ 17 | | group 18 | 19 | CHARACTER: /[^%#&\{\}^_\\]/ | ESCAPED 20 | ESCAPED: /\\\S/ 21 | group: "{" item* "}" 22 | math: "$" item* "$" 23 | SUBSCRIPT: "_" 24 | SUPERSCRIPT: "^" 25 | COMMAND: (("\\" WORD WS*) | SUBSCRIPT | SUPERSCRIPT) 26 | WS_EXT: WS | "~" | "\," | "\;" | "\:" | "\>" 27 | 28 | %import common.WS 29 | %import common.WORD 30 | """ 31 | 32 | parser = Lark(grammar, parser="lalr", transformer=ToUnicode()) 33 | -------------------------------------------------------------------------------- /.github/workflows/publish.yml: -------------------------------------------------------------------------------- 1 | name: Upload Python Package 2 | 3 | on: 4 | release: 5 | types: [published] 6 | 7 | permissions: 8 | contents: read 9 | 10 | jobs: 11 | deploy: 12 | 13 | runs-on: ubuntu-latest 14 | 15 | steps: 16 | - uses: actions/checkout@v3 17 | - name: Set up Python 18 | uses: actions/setup-python@v3 19 | with: 20 | python-version: '3.9' 21 | - name: Install dependencies 22 | run: | 23 | python -m pip install --upgrade pip 24 | pip install build 25 | - run: python -m build 26 | - run: python -m pip install $(echo dist/unicodeitplus-*.whl)[test] 27 | - run: python -m pytest 28 | - uses: pypa/gh-action-pypi-publish@release/v1 29 | with: 30 | user: __token__ 31 | password: ${{secrets.PYPI_API_TOKEN}} 32 | -------------------------------------------------------------------------------- /.github/workflows/test.yml: -------------------------------------------------------------------------------- 1 | name: Test 2 | 3 | on: 4 | pull_request: 5 | workflow_dispatch: 6 | 7 | jobs: 8 | test: 9 | runs-on: ${{ matrix.os }} 10 | 11 | strategy: 12 | matrix: 13 | os: [windows-latest, macos-latest, ubuntu-latest] 14 | include: 15 | # version number must be string, otherwise 3.10 becomes 3.1 16 | - os: windows-latest 17 | python-version: "3.11" 18 | - os: macos-latest 19 | python-version: "3.8" 20 | - os: ubuntu-latest 21 | python-version: "pypy-3.8" 22 | fail-fast: false 23 | steps: 24 | - uses: actions/checkout@v3 25 | with: 26 | submodules: true 27 | - uses: actions/setup-python@v4 28 | with: 29 | python-version: ${{ matrix.python-version }} 30 | - run: python -m pip install --upgrade pip 31 | - run: python -m pip install -e .[test] 32 | - run: python -m pytest 33 | -------------------------------------------------------------------------------- /.pre-commit-config.yaml: -------------------------------------------------------------------------------- 1 | repos: 2 | # Standard hooks 3 | - repo: https://github.com/pre-commit/pre-commit-hooks 4 | rev: v4.4.0 5 | hooks: 6 | - id: check-case-conflict 7 | - id: check-docstring-first 8 | - id: check-executables-have-shebangs 9 | - id: check-merge-conflict 10 | - id: check-symlinks 11 | - id: check-yaml 12 | args: ["--allow-multiple-documents"] 13 | - id: debug-statements 14 | - id: end-of-file-fixer 15 | - id: mixed-line-ending 16 | - id: sort-simple-yaml 17 | - id: file-contents-sorter 18 | - id: trailing-whitespace 19 | exclude: ^doc/_static/.*.svg 20 | 21 | # Python formatting 22 | - repo: https://github.com/psf/black 23 | rev: 23.3.0 24 | hooks: 25 | - id: black 26 | 27 | # Ruff linter, replacement for flake8 28 | - repo: https://github.com/charliermarsh/ruff-pre-commit 29 | rev: 'v0.0.261' 30 | hooks: 31 | - id: ruff 32 | 33 | # Python type checking 34 | - repo: https://github.com/pre-commit/mirrors-mypy 35 | rev: 'v1.2.0' 36 | hooks: 37 | - id: mypy 38 | args: [src] 39 | pass_filenames: false 40 | -------------------------------------------------------------------------------- /tools/generate_examples.py: -------------------------------------------------------------------------------- 1 | """Generate examples for README.rst.""" 2 | from unicodeitplus import replace 3 | from tabulate import tabulate 4 | 5 | LATEX = r""" 6 | \alpha \beta \gamma \Gamma \Im \Re \hbar 7 | e^+ \mu^- \slash{\partial} 8 | \exists \in \int \sum \partial \infty 9 | \perp \parallel \therefore \because \subset \supset 10 | \to \longrightarrow 11 | p\bar{p} \mathrm{t}\bar{\mathrm{t}} 12 | \mathcal{H} \mathbb{R} 13 | \phone \checkmark 14 | \underline{x} \dot{x} \ddot{x} \vec{x} 15 | A^6 m_0 16 | 1.2 \times 10^{23} 17 | $p_T / \mathrm{GeV} c^{-1}$ 18 | K^0_S 19 | $D^{\ast\ast} \to hhee$ 20 | $A \cdot \mathbf{x} \simeq \mathbf{b}$ 21 | """ 22 | 23 | table = {"LaTeX": [], "Unicode": []} 24 | for latex in LATEX.split("\n"): 25 | if not latex or latex.isspace(): 26 | continue 27 | table["LaTeX"].append(f"``{latex.strip('$')}``") 28 | if latex.startswith("$"): 29 | s = replace(latex.strip("$")) 30 | else: 31 | s = " ".join(replace(x) for x in latex.split()) 32 | table["Unicode"].append(f"``{s}``") 33 | 34 | print(tabulate(table, headers="keys", tablefmt="rst")) 35 | -------------------------------------------------------------------------------- /setup.py: -------------------------------------------------------------------------------- 1 | from setuptools import setup 2 | from distutils.command.sdist import sdist 3 | from contextlib import contextmanager 4 | 5 | 6 | @contextmanager 7 | def merge_license_files(): 8 | """Merge LICENSE and LICENSES_bundled for sdist creation. 9 | 10 | This follows the approach of Scipy and is to keep LICENSE in repo as an 11 | exact BSD 3-clause, to make GitHub state correctly how unicodeitplus 12 | is licensed. 13 | """ 14 | l1 = "LICENSE" 15 | l2 = "LICENSES_bundled" 16 | 17 | with open(l1, "r") as f: 18 | content1 = f.read() 19 | 20 | with open(l2, "r") as f: 21 | content2 = f.read() 22 | 23 | with open(l1, "w") as f: 24 | f.write(content1 + "\n\n" + content2) 25 | 26 | yield 27 | 28 | with open(l1, "w") as f: 29 | f.write(content1) 30 | 31 | 32 | class sdist_mod(sdist): 33 | def run(self): 34 | with merge_license_files(): 35 | sdist.run(self) 36 | 37 | 38 | setup( 39 | zip_safe=False, 40 | use_scm_version=True, 41 | setup_requires=["setuptools_scm"], 42 | cmdclass={"sdist": sdist_mod}, 43 | ) 44 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2023, Hans Dembinski 2 | All rights reserved. 3 | 4 | Redistribution and use in source and binary forms, with or without 5 | modification, are permitted provided that the following conditions 6 | are met: 7 | 8 | 1. Redistributions of source code must retain the above copyright 9 | notice, this list of conditions and the following disclaimer. 10 | 11 | 2. Redistributions in binary form must reproduce the above 12 | copyright notice, this list of conditions and the following 13 | disclaimer in the documentation and/or other materials provided 14 | with the distribution. 15 | 16 | 3. Neither the name of the copyright holder nor the names of its 17 | contributors may be used to endorse or promote products derived 18 | from this software without specific prior written permission. 19 | 20 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 21 | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 22 | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 23 | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 24 | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 25 | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 26 | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 27 | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 28 | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 29 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 30 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31 | -------------------------------------------------------------------------------- /pyproject.toml: -------------------------------------------------------------------------------- 1 | [build-system] 2 | requires = [ 3 | "setuptools>=46.4", 4 | "setuptools_scm[toml]>=3.4", 5 | ] 6 | build-backend = "setuptools.build_meta" 7 | 8 | [project] 9 | name = "unicodeitplus" 10 | description = "Converts simple LaTeX to an unicode approximation" 11 | dependencies = ["lark"] 12 | maintainers = [ 13 | { name = "Hans Dembinski" }, 14 | { email = "hans.dembinski@gmail.com" } 15 | ] 16 | readme = "README.rst" 17 | requires-python = ">=3.8" 18 | license = {text = "BSD 3-Clause License"} 19 | classifiers = [ 20 | "Programming Language :: Python :: 3", 21 | "Operating System :: POSIX :: Linux", 22 | "Operating System :: MacOS", 23 | "Operating System :: Microsoft :: Windows", 24 | "Topic :: Scientific/Engineering", 25 | "Intended Audience :: Developers" 26 | ] 27 | dynamic = ["version"] 28 | 29 | [project.urls] 30 | repository = "https://github.com/HDembinski/unicodeitplus" 31 | 32 | [project.optional-dependencies] 33 | test = [ 34 | "pytest", 35 | ] 36 | 37 | [project.scripts] 38 | unicodeitplus = "unicodeitplus.cli:main" 39 | 40 | [tool.setuptools_scm] 41 | 42 | [tool.ruff] 43 | select = ["E", "F", "D"] 44 | extend-ignore = ["D203", "D212", "D200"] 45 | extend-exclude = ["docs", "setup.py"] 46 | fix = true 47 | 48 | [tool.ruff.per-file-ignores] 49 | "tests/test_*.py" = ["B", "D"] 50 | 51 | [tool.mypy] 52 | strict = true 53 | no_implicit_optional = false 54 | allow_redefinition = true 55 | ignore_missing_imports = true 56 | show_error_codes = true 57 | exclude = ["/parser\\.py$"] 58 | 59 | [tool.pytest.ini_options] 60 | minversion = "6.0" 61 | addopts = "-q -ra --ff" 62 | testpaths = ["tests"] 63 | xfail_strict = true 64 | filterwarnings = [ 65 | "error::DeprecationWarning", 66 | ] 67 | 68 | [tool.coverage.run] 69 | relative_files = true 70 | source = ["unicodeitplus"] 71 | 72 | [tool.coverage.report] 73 | exclude_lines = ["pragma: no cover"] 74 | 75 | [tool.pydocstyle] 76 | convention = "numpy" 77 | -------------------------------------------------------------------------------- /tests/test_latex.py: -------------------------------------------------------------------------------- 1 | import pytest 2 | from unicodeitplus import parse, replace 3 | 4 | REPLACE_TEST_CASES = { 5 | r"\infty": "∞", 6 | r"e^+": "𝑒⁺", 7 | r"\mu^-": "𝜇⁻", 8 | r"\int\sum\partial": "∫∑∂", 9 | r"\to": "→", 10 | r"p\bar{p}": "𝑝𝑝̄", 11 | r"\mathrm{p}\bar{\mathrm{p}}": "pp̄", 12 | r"p_\text{T} \text T": "𝑝ₜT", 13 | r"\mathcal{H}": "ℋ", 14 | r"\mathbb{R}": "ℝ", 15 | r"\slash{\partial}": "∂̸", 16 | r"\underline{x}": "𝑥̲", 17 | r"\phone": "☎", 18 | r"\checkmark": "✓", 19 | r"\dot{x}": "𝑥̇", 20 | r"\ddot{x}": "𝑥̈", 21 | r"A^6": "𝐴⁶", 22 | r"m_0": "𝑚₀", 23 | r"\Im": "ℑ", 24 | r"\Re": "ℜ", 25 | r"\hbar": "ℏ", 26 | r"\gamma": "𝛾", 27 | r"\Gamma": "𝛤", 28 | r"\perp": "⟂", 29 | r"\parallel": "∥", 30 | r"\therefore": "∴", 31 | r"\because": "∵", 32 | r"\subset": "⊂", 33 | r"\supset": "⊃", 34 | } 35 | 36 | 37 | @pytest.mark.parametrize("latex", REPLACE_TEST_CASES) 38 | def test_replace(latex): 39 | expected = REPLACE_TEST_CASES[latex] 40 | got = replace(latex) 41 | assert expected == got 42 | 43 | 44 | PARSE_TEST_CASES = { 45 | r"foo?!-1+2.;'\" \} \\ $bar$": "foo?!-1+2.;'\" } \\ 𝑏𝑎𝑟", 46 | r"$\left(\mathbf{\alpha + 1}^2_x y\right)$ bar": "(𝛂+𝟏²ₓ𝑦) bar", 47 | r"$\beta^{12}$ $\bar p {}^foo$ $\bar \mathrm{t}$ ": "𝛽¹² 𝑝̄ᶠ𝑜𝑜 t̄ ", 48 | r"$D^{\ast\ast} \to hhee$": "𝐷**→ℎℎ𝑒𝑒", 49 | r"$\mathbf{xyz + 1}$": "𝐱𝐲𝐳+𝟏", 50 | r"$\sqrt {1Aas\alpha}$": "√1̅𝐴̅𝑎̅𝑠̅𝛼̅", 51 | r"$\vec{x} b^2 \vec\alpha\overline\alpha K^0_S p_\text{T} \text T$": "𝑥⃗𝑏²𝛼⃗𝛼̅𝐾⁰ₛ𝑝ₜT", 52 | r"$\sqrt{abcd}$": "√𝑎̅𝑏̅𝑐̅𝑑̅", 53 | r"$p_T / \text{GeV}c^{-1}$": "𝑝ₜ/GeV𝑐⁻¹", 54 | ( 55 | r"Search for $ \mathrm{t}\overline{\mathrm{t}} $" 56 | r" in collisions at $ \sqrt{s}=13 $~TeV" 57 | ): "Search for tt̅ in collisions at √𝑠̅=13\xa0TeV", 58 | r"$\overline {\mathrm{a} b}$ foo": "a̅𝑏̅ foo", 59 | "{abc{d{e}}a} {}": "{abc{d{e}}a} {}", 60 | r"foo\;bar\~": "foo\u2004bar~", 61 | } 62 | 63 | 64 | @pytest.mark.parametrize("latex", PARSE_TEST_CASES) 65 | def test_parse(latex): 66 | expected = PARSE_TEST_CASES[latex] 67 | got = parse(latex) 68 | assert expected == got 69 | -------------------------------------------------------------------------------- /README.rst: -------------------------------------------------------------------------------- 1 | ============= 2 | unicodeitplus 3 | ============= 4 | 5 | .. image:: https://img.shields.io/pypi/v/unicodeitplus.svg 6 | :target: https://pypi.python.org/pypi/unicodeitplus 7 | 8 | Convert simple LaTeX into an unicode approximation and paste it anywhere. 9 | 10 | This package provides a more complete LaTeX to Unicode converter than `unicodeit `_. ``unicodeitplus`` uses a better parser (generated from EBNF with the fantastic `Lark library `_) than ``unicodeit``, which handles some code on which ``unicodeit`` fails, and allows one to parse a mix of text and math code, like:: 11 | 12 | $p_T$ / GeV $c^{-1}$ 13 | 14 | I want to eventually merge this project into ``unicodeit``, discussions with the maintainer of ``unicodeit`` are ongoing. 15 | 16 | LaTeX to Unicode: How does this even work? 17 | ------------------------------------------ 18 | Unicode contains many subscript and superscript characters. It also contains font variations of latin and greek characters, including italic, boldface, bold italic, and more. It contains a lot of special mathematical characters and diacritical marks, which we use to approximate LaTeX renderings using just unicode characters. 19 | 20 | Like ``unicodeit``, ``unicodeitplus`` is largely based on ``unimathsymbols.txt`` from Günter Milde, which provides the mapping between LaTeX macros and Unicode symbols. 21 | 22 | Caveats 23 | ------- 24 | - Only a subset of all LaTeX code can be converted to Unicode. Some Unicode characters simply don't exist. For example, subscript characters exist only for a subset of all lowercase latin characters, there are no subscript characters for uppercase latin characters, and all subscript or superscript characters are in roman font (upright). 25 | - Some code is rendered to the best approximation, for example, ``p_T`` as ``𝑝ₜ``. Returning an approximation is preferred over a failed conversion. 26 | - Your font needs to contain glyphs for the Unicode characters, otherwise you will typically see a little box with the unicode character index. 27 | - The visually best results seem to be obtained with monospace fonts. 28 | 29 | Examples 30 | -------- 31 | 32 | ======================================================= ================= 33 | LaTeX Unicode 34 | ======================================================= ================= 35 | ``\alpha \beta \gamma \Gamma \Im \Re \hbar`` ``𝛼 𝛽 𝛾 𝛤 ℑ ℜ ℏ`` 36 | ``e^+ \mu^- \slash{\partial}`` ``𝑒⁺ 𝜇⁻ ∂̸`` 37 | ``\exists \in \int \sum \partial \infty`` ``∃ ∈ ∫ ∑ ∂ ∞`` 38 | ``\perp \parallel \therefore \because \subset \supset`` ``⟂ ∥ ∴ ∵ ⊂ ⊃`` 39 | ``\to \longrightarrow`` ``→ ⟶`` 40 | ``p\bar{p} \mathrm{t}\bar{\mathrm{t}}`` ``𝑝𝑝̄ tt̄`` 41 | ``\mathcal{H} \mathbb{R}`` ``ℋ ℝ`` 42 | ``\phone \checkmark`` ``☎ ✓`` 43 | ``\underline{x} \dot{x} \ddot{x} \vec{x}`` ``𝑥̲ 𝑥̇ 𝑥̈ 𝑥⃗`` 44 | ``A^6 m_0`` ``𝐴⁶ 𝑚₀`` 45 | ``1.2 \times 10^{23}`` ``1.2 × 10²³`` 46 | ``p_T / \mathrm{GeV} c^{-1}`` ``𝑝ₜ/GeV𝑐⁻¹`` 47 | ``K^0_S`` ``𝐾⁰ₛ`` 48 | ``D^{\ast\ast} \to hhee`` ``𝐷**→ℎℎ𝑒𝑒`` 49 | ``A \cdot \mathbf{x} \simeq \mathbf{b}`` ``𝐴⋅𝐱≃𝐛`` 50 | ======================================================= ================= 51 | -------------------------------------------------------------------------------- /CONTRIBUTING.rst: -------------------------------------------------------------------------------- 1 | .. highlight:: shell 2 | 3 | ============ 4 | Contributing 5 | ============ 6 | 7 | Contributions are welcome, and they are greatly appreciated! Every little bit 8 | helps, and credit will always be given. 9 | 10 | You can contribute in many ways: 11 | 12 | Types of Contributions 13 | ---------------------- 14 | 15 | Report Bugs 16 | ~~~~~~~~~~~ 17 | 18 | Report bugs at https://github.com/hdembinski/unicodeitplus/issues. 19 | 20 | If you are reporting a bug, please include: 21 | 22 | * Your operating system name and version. 23 | * Any details about your local setup that might be helpful in troubleshooting. 24 | * Detailed steps to reproduce the bug. 25 | 26 | Fix Bugs 27 | ~~~~~~~~ 28 | 29 | Look through the GitHub issues for bugs. Anything tagged with "bug" and "help 30 | wanted" is open to whoever wants to implement it. 31 | 32 | Implement Features 33 | ~~~~~~~~~~~~~~~~~~ 34 | 35 | Look through the GitHub issues for features. Anything tagged with "enhancement" 36 | and "help wanted" is open to whoever wants to implement it. 37 | 38 | Write Documentation 39 | ~~~~~~~~~~~~~~~~~~~ 40 | 41 | unicodeitplus could always use more documentation, whether as part of the 42 | official unicodeitplus docs, in docstrings, or even on the web in blog posts, 43 | articles, and such. 44 | 45 | Submit Feedback 46 | ~~~~~~~~~~~~~~~ 47 | 48 | The best way to send feedback is to file an issue at https://github.com/hdembinski/unicodeitplus/issues. 49 | 50 | If you are proposing a feature: 51 | 52 | * Explain in detail how it would work. 53 | * Keep the scope as narrow as possible, to make it easier to implement. 54 | * Remember that this is a volunteer-driven project, and that contributions 55 | are welcome :) 56 | 57 | Get Started! 58 | ------------ 59 | 60 | Ready to contribute? Here's how to set up `unicodeitplus` for local development. 61 | 62 | 1. Fork the `unicodeitplus` repo on GitHub. 63 | 2. Clone your fork locally:: 64 | 65 | $ git clone git@github.com:your_name_here/unicodeitplus.git 66 | 67 | 3. Install your local copy into a virtualenv. Assuming you have virtualenvwrapper installed, this is how you set up your fork for local development:: 68 | 69 | $ mkvirtualenv unicodeitplus 70 | $ cd unicodeitplus/ 71 | $ python setup.py develop 72 | 73 | 4. Create a branch for local development:: 74 | 75 | $ git checkout -b name-of-your-bugfix-or-feature 76 | 77 | Now you can make your changes locally. 78 | 79 | 5. When you're done making changes, check that your changes pass flake8 and the 80 | tests, including testing other Python versions with tox:: 81 | 82 | $ flake8 unicodeitplus tests 83 | $ python setup.py test or pytest 84 | $ tox 85 | 86 | To get flake8 and tox, just pip install them into your virtualenv. 87 | 88 | 6. Commit your changes and push your branch to GitHub:: 89 | 90 | $ git add . 91 | $ git commit -m "Your detailed description of your changes." 92 | $ git push origin name-of-your-bugfix-or-feature 93 | 94 | 7. Submit a pull request through the GitHub website. 95 | 96 | Pull Request Guidelines 97 | ----------------------- 98 | 99 | Before you submit a pull request, check that it meets these guidelines: 100 | 101 | 1. The pull request should include tests. 102 | 2. If the pull request adds functionality, the docs should be updated. Put 103 | your new functionality into a function with a docstring, and add the 104 | feature to the list in README.rst. 105 | 3. The pull request should work for Python 3.5, 3.6, 3.7 and 3.8, and for PyPy. Check 106 | https://travis-ci.com/hdembinski/unicodeitplus/pull_requests 107 | and make sure that the tests pass for all supported Python versions. 108 | 109 | Tips 110 | ---- 111 | 112 | To run a subset of tests:: 113 | 114 | $ pytest tests.test_unicodeitplus 115 | 116 | 117 | Deploying 118 | --------- 119 | 120 | A reminder for the maintainers on how to deploy. 121 | Make sure all your changes are committed (including an entry in HISTORY.rst). 122 | Then run:: 123 | 124 | $ bump2version patch # possible: major / minor / patch 125 | $ git push 126 | $ git push --tags 127 | 128 | Travis will then deploy to PyPI if tests pass. 129 | -------------------------------------------------------------------------------- /src/unicodeitplus/transform.py: -------------------------------------------------------------------------------- 1 | """Tools to transform LaTeX tree into unicode.""" 2 | from . import _make_data # noqa, imported for side-effects 3 | from .data import COMMANDS, HAS_ARG 4 | from lark import Transformer, Token 5 | from typing import List, Any 6 | 7 | 8 | IGNORE_AS_FALLBACK = { 9 | r"\text", 10 | r"\mathbb", 11 | r"\mathrm", 12 | r"\mathbf", 13 | r"\mathsf", 14 | r"\mathsfbf", 15 | r"\mathsfbfit", 16 | r"\mathsfit", 17 | r"\mathtt", 18 | r"\left", 19 | r"\right", 20 | r"\big", 21 | r"\Big", 22 | r"\Bigg", 23 | } 24 | 25 | # ESCAPED = { 26 | # "\\\\": "\\", 27 | # r"\}": "}", 28 | # r"\{": "{", 29 | # r"\_": "_", 30 | # r"\^": "^", 31 | # r"\~": "~", 32 | # } 33 | 34 | WHITESPACE = { 35 | # unbreakable space 36 | "~": "\u00A0", 37 | # thinspace ~0.17em 38 | r"\,": "\u2009", 39 | # medspace ~0.22em 40 | r"\:": "\u2005", 41 | r"\>": "\u2005", 42 | # thickspace ~0.28em 43 | r"\;": "\u2004", 44 | } 45 | 46 | 47 | class ToUnicode(Transformer): # type:ignore 48 | """Convert Tree to Unicode.""" 49 | 50 | def start(self, ch: List[Any]) -> str: 51 | """ 52 | Return final unicode. 53 | 54 | The start token is handled last, because the transformer 55 | starts from the leafs. So when we arrive here, everything 56 | else is already transformed into strings. We only need 57 | to handle escaped characters correctly and recursively 58 | unparse groups. 59 | """ 60 | r: List[str] = [] 61 | 62 | def visitor(r: List[str], ch: List[Any]) -> None: 63 | for x in ch: 64 | if isinstance(x, str): 65 | r.append(x) 66 | elif isinstance(x, list): 67 | r.append("{") 68 | visitor(r, x) 69 | r.append("}") 70 | else: 71 | assert False # this should never happen 72 | 73 | visitor(r, ch) 74 | return "".join(r) 75 | 76 | def CHARACTER(self, ch: Token) -> str: 77 | """ 78 | Handle character token. 79 | 80 | This is either a single charactor or an escaped character sequence. 81 | """ 82 | if ch.value.startswith("\\"): 83 | return ch.value[1:] # type:ignore 84 | return ch.value # type:ignore 85 | 86 | def WS_EXT(self, ch: Token) -> str: 87 | """ 88 | Handle whitespace. 89 | """ 90 | return WHITESPACE.get(ch.value, " ") 91 | 92 | def COMMAND(self, ch: Token) -> str: 93 | """ 94 | Handle command token. 95 | 96 | We need to strip the whitespace which may be there. 97 | """ 98 | return ch.value.strip() # type:ignore 99 | 100 | def group(self, items: List[Any]) -> List[Any]: 101 | """ 102 | Handle group token. 103 | 104 | Nothing to do, we just the children as a list. 105 | """ 106 | return items 107 | 108 | def math(self, items: List[Any]) -> str: 109 | """ 110 | Handle math token. 111 | 112 | Here the actual magic happens. The challenge is to treat macros which accept an 113 | argument correctly, while respecting the grouping. A command which accepts an 114 | argument acts on the next character or group. Groups can be nested, so we need 115 | to handle this with recursion. 116 | 117 | First, a recursive visitor with a command stack converts nested macros and 118 | groups into a list of flat lists of commands which end in a leaf (a charactor or 119 | command that accepts no argument). 120 | 121 | Then, we convert each list of commands with the function _handle_cmds into 122 | unicode. See comments in that function for details. 123 | """ 124 | 125 | def visitor( 126 | r: List[List[str]], 127 | stack: List[str], 128 | items: List[Any], 129 | ) -> None: 130 | initial_stack = stack.copy() 131 | for x in items: 132 | if isinstance(x, str) and x in HAS_ARG: 133 | if x == r"\sqrt": 134 | r.append(stack.copy() + [r"\sqrt"]) 135 | stack.append(r"\overline") 136 | else: 137 | stack.append(x) 138 | else: 139 | if isinstance(x, list): 140 | visitor(r, stack, x) 141 | elif isinstance(x, str): 142 | if not x.isspace() or (stack and stack[-1] == r"\text"): 143 | r.append(stack.copy() + [x]) 144 | else: 145 | assert False # should never happen 146 | stack[:] = initial_stack 147 | 148 | r: List[List[str]] = [] 149 | visitor(r, [], items) 150 | return "".join(_handle_cmds(x[:-1], x[-1]) for x in r) 151 | 152 | 153 | def _handle_cmds(cmds: List[str], x: str) -> str: 154 | # - x can be character or command, like \alpha 155 | # - cmds contains commands to apply, may be empty 156 | # - to transform ^{\alpha} or \text{x} correctly, 157 | # we first try to convert innermost command and x 158 | # as unit; if this fails we treat commands sequentially 159 | # - other commands in cmds must be modifiers like \dot or 160 | # \vec that are converted into diacritical characters 161 | # - if we cannot convert, we return unconverted LaTeX 162 | if cmds: 163 | innermost = True 164 | for cmd in reversed(cmds): 165 | latex = f"{cmd}{{{x}}}" 166 | if latex in COMMANDS: 167 | x = COMMANDS[latex] 168 | elif cmd in (r"\text", r"\mathrm"): 169 | pass 170 | else: 171 | if innermost: 172 | x = COMMANDS.get(x, x) 173 | if cmd in COMMANDS: 174 | # must be some unicode modifier, e.g. \dot, \vec 175 | assert cmd in HAS_ARG # nosec 176 | x += COMMANDS[cmd] 177 | elif cmd not in IGNORE_AS_FALLBACK: 178 | x = latex 179 | innermost = False 180 | else: 181 | x = COMMANDS.get(x, x) 182 | return x 183 | -------------------------------------------------------------------------------- /src/unicodeitplus/_make_data.py: -------------------------------------------------------------------------------- 1 | from pathlib import Path 2 | from typing import Dict, Tuple, Set 3 | 4 | ALIASES = { 5 | r"\rightarrow": r"\to", 6 | r"\hslash": r"\hbar", 7 | r"\thinspace": r"\,", 8 | } 9 | 10 | CORRECTIONS_EXTENSIONS = { 11 | r"^{\ast}": "*", 12 | "h": "ℎ", 13 | r"\partial": "∂", 14 | r"\slash": "\u0338", 15 | r"\phone": "☎", 16 | r"\thinspace": "\u2009", 17 | # https://github.com/HDembinski/unicodeitplus/issues/3 18 | r"\square": "\u25A1", 19 | } 20 | 21 | 22 | def _generate_sub_and_super_scripts() -> Dict[str, str]: 23 | import string 24 | 25 | # Wikipedia: https://en.wikipedia.org/wiki/Unicode_subscripts_and_superscripts 26 | 27 | cmds = {} 28 | 29 | greek_latex = ( 30 | r"\alpha", 31 | r"\beta", 32 | r"\gamma", 33 | r"\delta", 34 | r"\epsilon", 35 | r"\zeta", 36 | r"\eta", 37 | r"\theta", 38 | r"\iota", 39 | r"\kappa", 40 | r"\lambda", 41 | r"\mu", 42 | r"\nu", 43 | r"\xi", 44 | "o", 45 | r"\pi", 46 | r"\rho", 47 | r"\sigma", 48 | r"\tau", 49 | r"\upsilon", 50 | r"\phi", 51 | r"\chi", 52 | r"\psi", 53 | r"\omega", 54 | ) 55 | 56 | superscript_numbers = "⁰¹²³⁴⁵⁶⁷⁸⁹" 57 | for i, ch in enumerate(superscript_numbers): 58 | cmds[f"^{{{i}}}"] = ch 59 | 60 | subscript_numbers = "₀₁₂₃₄₅₆₇₈₉" 61 | for i, ch in enumerate(subscript_numbers): 62 | cmds[f"_{{{i}}}"] = ch 63 | 64 | superscript_lowercase = "ᵃᵇᶜᵈᵉᶠᵍʰⁱʲᵏˡᵐⁿᵒᵖ𐞥ʳˢᵗᵘᵛʷˣʸᶻ" 65 | superscript_uppercase = "ᴬᴮꟲᴰᴱꟳᴳᴴᴵᴶᴷᴸᴹᴺᴼᴾꟴᴿ ᵀᵁⱽᵂ " 66 | for latex, ch in zip( 67 | string.ascii_letters, superscript_lowercase + superscript_uppercase 68 | ): 69 | if ch != " ": 70 | cmds[f"^{{{latex}}}"] = ch 71 | 72 | subscript_lowercase = "ₐ ₑ ₕᵢⱼₖₗₘₙₒₚ ᵣₛₜᵤᵥ ₓ " 73 | for latex, ch in zip(string.ascii_letters, subscript_lowercase * 2): 74 | if ch != " ": 75 | cmds[f"_{{{latex}}}"] = ch 76 | 77 | superscript_lowercase_greek = " ᵝᵞᵟᵋ ᶿᶥ ᶹᵠᵡ " 78 | subscript_lowercase_greek = " ᵦᵧ ᵨ ᵩᵪ " 79 | for latex, sup, sub in zip( 80 | greek_latex, superscript_lowercase_greek, subscript_lowercase_greek 81 | ): 82 | if sup != " ": 83 | cmds[f"^{{{latex}}}"] = sup 84 | if sub != " ": 85 | cmds[f"_{{{latex}}}"] = sub 86 | 87 | return cmds 88 | 89 | 90 | def _generate_from_unimathsymbols_txt() -> Tuple[Dict[str, str], Set[str]]: 91 | d = Path(__file__).parent 92 | fn = None 93 | while d.parent is not None: 94 | d = d.parent 95 | if (d / "extern").exists(): 96 | fn = d / "extern" / "unimathsymbols.txt" 97 | break 98 | assert fn is not None 99 | 100 | # Symbols extracted from extern/unimathsymbols.txt, which is under Copyright 2011 by 101 | # Günter Milde and licensed under the LaTeX Project Public License (LPPL) 102 | def match(comments: bytes) -> str: 103 | matches = [ 104 | (b"PLUS", "+"), 105 | (b"MINUS", "-"), 106 | (b"EQUALS", "="), 107 | (b"LEFT PARENTHESIS", "("), 108 | (b"RIGHT PARENTHESIS", ")"), 109 | ] 110 | for match, latex in matches: 111 | if match in comments: 112 | return latex 113 | assert False, f"unmatched: {comments!r}" # nosec, never arrive here 114 | 115 | cmds = {} 116 | has_arg = set() 117 | with open(fn, "rb") as f: 118 | for line in f: 119 | if line.startswith(b"#"): 120 | continue 121 | items = line.split(b"^") 122 | _, ch, latex, latex2, cls, category, _, comments = items 123 | ch = ch.decode() 124 | latex = latex.decode() 125 | latex2 = latex2.decode() 126 | comments = comments[:-1] 127 | arg = _has_arg(cls, category) 128 | if arg: 129 | ch = ch[-1] 130 | if latex: 131 | if latex == ch: 132 | continue 133 | cmds[latex] = ch 134 | if arg: 135 | has_arg.add(latex) 136 | elif latex2: 137 | cmds[latex2] = ch 138 | elif comments.startswith(b"SUPERSCRIPT"): 139 | latex = f"^{{{match(comments)}}}" 140 | cmds[latex] = ch 141 | elif comments.startswith(b"SUBSCRIPT"): 142 | latex = f"_{{{match(comments)}}}" 143 | cmds[latex] = ch 144 | else: 145 | pass 146 | 147 | return cmds, has_arg 148 | 149 | 150 | def generate_data() -> str: 151 | """Generate source code for Python module with database of known LaTeX commands.""" 152 | cmds = _generate_sub_and_super_scripts() 153 | cmds2, has_arg = _generate_from_unimathsymbols_txt() 154 | cmds.update(cmds2) 155 | cmds.update(CORRECTIONS_EXTENSIONS) 156 | 157 | for old, new in ALIASES.items(): 158 | cmds[new] = cmds[old] 159 | 160 | # fill up has_arg 161 | for key in cmds: 162 | i = key.find("{") 163 | if i > 0: 164 | has_arg.add(key[:i]) 165 | 166 | has_arg |= { 167 | r"\big", 168 | r"\Big", 169 | r"\Bigg", 170 | r"\left", 171 | r"\right", 172 | r"\text", 173 | r"\sqrt", 174 | r"\slash", 175 | r"\mathrm", 176 | } 177 | 178 | has_arg.remove("\\") 179 | 180 | chunks = [ 181 | """\"\"\" 182 | Symbols extracted from extern/unimathsymbols.txt with extensions and corrections. 183 | 184 | extern/unimathsymbols.txt is under Copyright 2011 by Günter Milde and licensed under the 185 | LaTeX Project Public License (LPPL). 186 | 187 | As a Derived Work, this file is licensed under LaTeX Project Public License (LPPL). 188 | \"\"\" 189 | 190 | COMMANDS = { 191 | """ 192 | ] 193 | for key in sorted(cmds): 194 | val = cmds[key] 195 | chunks.append(f" {key!r}: {val!r},\n".replace("'", '"')) 196 | chunks.append("}\n") 197 | 198 | chunks.append( 199 | """ 200 | 201 | HAS_ARG = { 202 | """ 203 | ) 204 | 205 | for key in sorted(has_arg): 206 | chunks.append(f" {key!r},\n".replace("'", '"')) 207 | chunks.append("}\n") 208 | 209 | return "".join(chunks) 210 | 211 | 212 | def _has_arg(cls: bytes, category: bytes) -> bool: 213 | return cls == b"D" or category == b"mathaccent" 214 | 215 | 216 | if __name__ == "__main__": 217 | print(generate_data()) 218 | else: 219 | fn_data = Path(__file__).parent / "data.py" 220 | if fn_data.stat().st_mtime < Path(__file__).stat().st_mtime: 221 | with open(fn_data, "w") as f: 222 | f.write(generate_data()) 223 | -------------------------------------------------------------------------------- /extern/LICENSE.LPPL: -------------------------------------------------------------------------------- 1 | The LaTeX Project Public License 2 | =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 3 | 4 | LPPL Version 1.3c 2008-05-04 5 | 6 | Copyright 1999 2002-2008 LaTeX3 Project 7 | Everyone is allowed to distribute verbatim copies of this 8 | license document, but modification of it is not allowed. 9 | 10 | 11 | PREAMBLE 12 | ======== 13 | 14 | The LaTeX Project Public License (LPPL) is the primary license under 15 | which the LaTeX kernel and the base LaTeX packages are distributed. 16 | 17 | You may use this license for any work of which you hold the copyright 18 | and which you wish to distribute. This license may be particularly 19 | suitable if your work is TeX-related (such as a LaTeX package), but 20 | it is written in such a way that you can use it even if your work is 21 | unrelated to TeX. 22 | 23 | The section `WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE', 24 | below, gives instructions, examples, and recommendations for authors 25 | who are considering distributing their works under this license. 26 | 27 | This license gives conditions under which a work may be distributed 28 | and modified, as well as conditions under which modified versions of 29 | that work may be distributed. 30 | 31 | We, the LaTeX3 Project, believe that the conditions below give you 32 | the freedom to make and distribute modified versions of your work 33 | that conform with whatever technical specifications you wish while 34 | maintaining the availability, integrity, and reliability of 35 | that work. If you do not see how to achieve your goal while 36 | meeting these conditions, then read the document `cfgguide.tex' 37 | and `modguide.tex' in the base LaTeX distribution for suggestions. 38 | 39 | 40 | DEFINITIONS 41 | =========== 42 | 43 | In this license document the following terms are used: 44 | 45 | `Work' 46 | Any work being distributed under this License. 47 | 48 | `Derived Work' 49 | Any work that under any applicable law is derived from the Work. 50 | 51 | `Modification' 52 | Any procedure that produces a Derived Work under any applicable 53 | law -- for example, the production of a file containing an 54 | original file associated with the Work or a significant portion of 55 | such a file, either verbatim or with modifications and/or 56 | translated into another language. 57 | 58 | `Modify' 59 | To apply any procedure that produces a Derived Work under any 60 | applicable law. 61 | 62 | `Distribution' 63 | Making copies of the Work available from one person to another, in 64 | whole or in part. Distribution includes (but is not limited to) 65 | making any electronic components of the Work accessible by 66 | file transfer protocols such as FTP or HTTP or by shared file 67 | systems such as Sun's Network File System (NFS). 68 | 69 | `Compiled Work' 70 | A version of the Work that has been processed into a form where it 71 | is directly usable on a computer system. This processing may 72 | include using installation facilities provided by the Work, 73 | transformations of the Work, copying of components of the Work, or 74 | other activities. Note that modification of any installation 75 | facilities provided by the Work constitutes modification of the Work. 76 | 77 | `Current Maintainer' 78 | A person or persons nominated as such within the Work. If there is 79 | no such explicit nomination then it is the `Copyright Holder' under 80 | any applicable law. 81 | 82 | `Base Interpreter' 83 | A program or process that is normally needed for running or 84 | interpreting a part or the whole of the Work. 85 | 86 | A Base Interpreter may depend on external components but these 87 | are not considered part of the Base Interpreter provided that each 88 | external component clearly identifies itself whenever it is used 89 | interactively. Unless explicitly specified when applying the 90 | license to the Work, the only applicable Base Interpreter is a 91 | `LaTeX-Format' or in the case of files belonging to the 92 | `LaTeX-format' a program implementing the `TeX language'. 93 | 94 | 95 | 96 | CONDITIONS ON DISTRIBUTION AND MODIFICATION 97 | =========================================== 98 | 99 | 1. Activities other than distribution and/or modification of the Work 100 | are not covered by this license; they are outside its scope. In 101 | particular, the act of running the Work is not restricted and no 102 | requirements are made concerning any offers of support for the Work. 103 | 104 | 2. You may distribute a complete, unmodified copy of the Work as you 105 | received it. Distribution of only part of the Work is considered 106 | modification of the Work, and no right to distribute such a Derived 107 | Work may be assumed under the terms of this clause. 108 | 109 | 3. You may distribute a Compiled Work that has been generated from a 110 | complete, unmodified copy of the Work as distributed under Clause 2 111 | above, as long as that Compiled Work is distributed in such a way that 112 | the recipients may install the Compiled Work on their system exactly 113 | as it would have been installed if they generated a Compiled Work 114 | directly from the Work. 115 | 116 | 4. If you are the Current Maintainer of the Work, you may, without 117 | restriction, modify the Work, thus creating a Derived Work. You may 118 | also distribute the Derived Work without restriction, including 119 | Compiled Works generated from the Derived Work. Derived Works 120 | distributed in this manner by the Current Maintainer are considered to 121 | be updated versions of the Work. 122 | 123 | 5. If you are not the Current Maintainer of the Work, you may modify 124 | your copy of the Work, thus creating a Derived Work based on the Work, 125 | and compile this Derived Work, thus creating a Compiled Work based on 126 | the Derived Work. 127 | 128 | 6. If you are not the Current Maintainer of the Work, you may 129 | distribute a Derived Work provided the following conditions are met 130 | for every component of the Work unless that component clearly states 131 | in the copyright notice that it is exempt from that condition. Only 132 | the Current Maintainer is allowed to add such statements of exemption 133 | to a component of the Work. 134 | 135 | a. If a component of this Derived Work can be a direct replacement 136 | for a component of the Work when that component is used with the 137 | Base Interpreter, then, wherever this component of the Work 138 | identifies itself to the user when used interactively with that 139 | Base Interpreter, the replacement component of this Derived Work 140 | clearly and unambiguously identifies itself as a modified version 141 | of this component to the user when used interactively with that 142 | Base Interpreter. 143 | 144 | b. Every component of the Derived Work contains prominent notices 145 | detailing the nature of the changes to that component, or a 146 | prominent reference to another file that is distributed as part 147 | of the Derived Work and that contains a complete and accurate log 148 | of the changes. 149 | 150 | c. No information in the Derived Work implies that any persons, 151 | including (but not limited to) the authors of the original version 152 | of the Work, provide any support, including (but not limited to) 153 | the reporting and handling of errors, to recipients of the 154 | Derived Work unless those persons have stated explicitly that 155 | they do provide such support for the Derived Work. 156 | 157 | d. You distribute at least one of the following with the Derived Work: 158 | 159 | 1. A complete, unmodified copy of the Work; 160 | if your distribution of a modified component is made by 161 | offering access to copy the modified component from a 162 | designated place, then offering equivalent access to copy 163 | the Work from the same or some similar place meets this 164 | condition, even though third parties are not compelled to 165 | copy the Work along with the modified component; 166 | 167 | 2. Information that is sufficient to obtain a complete, 168 | unmodified copy of the Work. 169 | 170 | 7. If you are not the Current Maintainer of the Work, you may 171 | distribute a Compiled Work generated from a Derived Work, as long as 172 | the Derived Work is distributed to all recipients of the Compiled 173 | Work, and as long as the conditions of Clause 6, above, are met with 174 | regard to the Derived Work. 175 | 176 | 8. The conditions above are not intended to prohibit, and hence do not 177 | apply to, the modification, by any method, of any component so that it 178 | becomes identical to an updated version of that component of the Work as 179 | it is distributed by the Current Maintainer under Clause 4, above. 180 | 181 | 9. Distribution of the Work or any Derived Work in an alternative 182 | format, where the Work or that Derived Work (in whole or in part) is 183 | then produced by applying some process to that format, does not relax or 184 | nullify any sections of this license as they pertain to the results of 185 | applying that process. 186 | 187 | 10. a. A Derived Work may be distributed under a different license 188 | provided that license itself honors the conditions listed in 189 | Clause 6 above, in regard to the Work, though it does not have 190 | to honor the rest of the conditions in this license. 191 | 192 | b. If a Derived Work is distributed under a different license, that 193 | Derived Work must provide sufficient documentation as part of 194 | itself to allow each recipient of that Derived Work to honor the 195 | restrictions in Clause 6 above, concerning changes from the Work. 196 | 197 | 11. This license places no restrictions on works that are unrelated to 198 | the Work, nor does this license place any restrictions on aggregating 199 | such works with the Work by any means. 200 | 201 | 12. Nothing in this license is intended to, or may be used to, prevent 202 | complete compliance by all parties with all applicable laws. 203 | 204 | 205 | NO WARRANTY 206 | =========== 207 | 208 | There is no warranty for the Work. Except when otherwise stated in 209 | writing, the Copyright Holder provides the Work `as is', without 210 | warranty of any kind, either expressed or implied, including, but not 211 | limited to, the implied warranties of merchantability and fitness for a 212 | particular purpose. The entire risk as to the quality and performance 213 | of the Work is with you. Should the Work prove defective, you assume 214 | the cost of all necessary servicing, repair, or correction. 215 | 216 | In no event unless required by applicable law or agreed to in writing 217 | will The Copyright Holder, or any author named in the components of the 218 | Work, or any other party who may distribute and/or modify the Work as 219 | permitted above, be liable to you for damages, including any general, 220 | special, incidental or consequential damages arising out of any use of 221 | the Work or out of inability to use the Work (including, but not limited 222 | to, loss of data, data being rendered inaccurate, or losses sustained by 223 | anyone as a result of any failure of the Work to operate with any other 224 | programs), even if the Copyright Holder or said author or said other 225 | party has been advised of the possibility of such damages. 226 | 227 | 228 | MAINTENANCE OF THE WORK 229 | ======================= 230 | 231 | The Work has the status `author-maintained' if the Copyright Holder 232 | explicitly and prominently states near the primary copyright notice in 233 | the Work that the Work can only be maintained by the Copyright Holder 234 | or simply that it is `author-maintained'. 235 | 236 | The Work has the status `maintained' if there is a Current Maintainer 237 | who has indicated in the Work that they are willing to receive error 238 | reports for the Work (for example, by supplying a valid e-mail 239 | address). It is not required for the Current Maintainer to acknowledge 240 | or act upon these error reports. 241 | 242 | The Work changes from status `maintained' to `unmaintained' if there 243 | is no Current Maintainer, or the person stated to be Current 244 | Maintainer of the work cannot be reached through the indicated means 245 | of communication for a period of six months, and there are no other 246 | significant signs of active maintenance. 247 | 248 | You can become the Current Maintainer of the Work by agreement with 249 | any existing Current Maintainer to take over this role. 250 | 251 | If the Work is unmaintained, you can become the Current Maintainer of 252 | the Work through the following steps: 253 | 254 | 1. Make a reasonable attempt to trace the Current Maintainer (and 255 | the Copyright Holder, if the two differ) through the means of 256 | an Internet or similar search. 257 | 258 | 2. If this search is successful, then enquire whether the Work 259 | is still maintained. 260 | 261 | a. If it is being maintained, then ask the Current Maintainer 262 | to update their communication data within one month. 263 | 264 | b. If the search is unsuccessful or no action to resume active 265 | maintenance is taken by the Current Maintainer, then announce 266 | within the pertinent community your intention to take over 267 | maintenance. (If the Work is a LaTeX work, this could be 268 | done, for example, by posting to comp.text.tex.) 269 | 270 | 3a. If the Current Maintainer is reachable and agrees to pass 271 | maintenance of the Work to you, then this takes effect 272 | immediately upon announcement. 273 | 274 | b. If the Current Maintainer is not reachable and the Copyright 275 | Holder agrees that maintenance of the Work be passed to you, 276 | then this takes effect immediately upon announcement. 277 | 278 | 4. If you make an `intention announcement' as described in 2b. above 279 | and after three months your intention is challenged neither by 280 | the Current Maintainer nor by the Copyright Holder nor by other 281 | people, then you may arrange for the Work to be changed so as 282 | to name you as the (new) Current Maintainer. 283 | 284 | 5. If the previously unreachable Current Maintainer becomes 285 | reachable once more within three months of a change completed 286 | under the terms of 3b) or 4), then that Current Maintainer must 287 | become or remain the Current Maintainer upon request provided 288 | they then update their communication data within one month. 289 | 290 | A change in the Current Maintainer does not, of itself, alter the fact 291 | that the Work is distributed under the LPPL license. 292 | 293 | If you become the Current Maintainer of the Work, you should 294 | immediately provide, within the Work, a prominent and unambiguous 295 | statement of your status as Current Maintainer. You should also 296 | announce your new status to the same pertinent community as 297 | in 2b) above. 298 | 299 | 300 | WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE 301 | ====================================================== 302 | 303 | This section contains important instructions, examples, and 304 | recommendations for authors who are considering distributing their 305 | works under this license. These authors are addressed as `you' in 306 | this section. 307 | 308 | Choosing This License or Another License 309 | ---------------------------------------- 310 | 311 | If for any part of your work you want or need to use *distribution* 312 | conditions that differ significantly from those in this license, then 313 | do not refer to this license anywhere in your work but, instead, 314 | distribute your work under a different license. You may use the text 315 | of this license as a model for your own license, but your license 316 | should not refer to the LPPL or otherwise give the impression that 317 | your work is distributed under the LPPL. 318 | 319 | The document `modguide.tex' in the base LaTeX distribution explains 320 | the motivation behind the conditions of this license. It explains, 321 | for example, why distributing LaTeX under the GNU General Public 322 | License (GPL) was considered inappropriate. Even if your work is 323 | unrelated to LaTeX, the discussion in `modguide.tex' may still be 324 | relevant, and authors intending to distribute their works under any 325 | license are encouraged to read it. 326 | 327 | A Recommendation on Modification Without Distribution 328 | ----------------------------------------------------- 329 | 330 | It is wise never to modify a component of the Work, even for your own 331 | personal use, without also meeting the above conditions for 332 | distributing the modified component. While you might intend that such 333 | modifications will never be distributed, often this will happen by 334 | accident -- you may forget that you have modified that component; or 335 | it may not occur to you when allowing others to access the modified 336 | version that you are thus distributing it and violating the conditions 337 | of this license in ways that could have legal implications and, worse, 338 | cause problems for the community. It is therefore usually in your 339 | best interest to keep your copy of the Work identical with the public 340 | one. Many works provide ways to control the behavior of that work 341 | without altering any of its licensed components. 342 | 343 | How to Use This License 344 | ----------------------- 345 | 346 | To use this license, place in each of the components of your work both 347 | an explicit copyright notice including your name and the year the work 348 | was authored and/or last substantially modified. Include also a 349 | statement that the distribution and/or modification of that 350 | component is constrained by the conditions in this license. 351 | 352 | Here is an example of such a notice and statement: 353 | 354 | %% pig.dtx 355 | %% Copyright 2008 M. Y. Name 356 | % 357 | % This work may be distributed and/or modified under the 358 | % conditions of the LaTeX Project Public License, either version 1.3 359 | % of this license or (at your option) any later version. 360 | % The latest version of this license is in 361 | % https://www.latex-project.org/lppl.txt 362 | % and version 1.3c or later is part of all distributions of LaTeX 363 | % version 2008 or later. 364 | % 365 | % This work has the LPPL maintenance status `maintained'. 366 | % 367 | % The Current Maintainer of this work is M. Y. Name. 368 | % 369 | % This work consists of the files pig.dtx and pig.ins 370 | % and the derived file pig.sty. 371 | 372 | Given such a notice and statement in a file, the conditions 373 | given in this license document would apply, with the `Work' referring 374 | to the three files `pig.dtx', `pig.ins', and `pig.sty' (the last being 375 | generated from `pig.dtx' using `pig.ins'), the `Base Interpreter' 376 | referring to any `LaTeX-Format', and both `Copyright Holder' and 377 | `Current Maintainer' referring to the person `M. Y. Name'. 378 | 379 | If you do not want the Maintenance section of LPPL to apply to your 380 | Work, change `maintained' above into `author-maintained'. 381 | However, we recommend that you use `maintained', as the Maintenance 382 | section was added in order to ensure that your Work remains useful to 383 | the community even when you can no longer maintain and support it 384 | yourself. 385 | 386 | Derived Works That Are Not Replacements 387 | --------------------------------------- 388 | 389 | Several clauses of the LPPL specify means to provide reliability and 390 | stability for the user community. They therefore concern themselves 391 | with the case that a Derived Work is intended to be used as a 392 | (compatible or incompatible) replacement of the original Work. If 393 | this is not the case (e.g., if a few lines of code are reused for a 394 | completely different task), then clauses 6b and 6d shall not apply. 395 | 396 | 397 | Important Recommendations 398 | ------------------------- 399 | 400 | Defining What Constitutes the Work 401 | 402 | The LPPL requires that distributions of the Work contain all the 403 | files of the Work. It is therefore important that you provide a 404 | way for the licensee to determine which files constitute the Work. 405 | This could, for example, be achieved by explicitly listing all the 406 | files of the Work near the copyright notice of each file or by 407 | using a line such as: 408 | 409 | % This work consists of all files listed in manifest.txt. 410 | 411 | in that place. In the absence of an unequivocal list it might be 412 | impossible for the licensee to determine what is considered by you 413 | to comprise the Work and, in such a case, the licensee would be 414 | entitled to make reasonable conjectures as to which files comprise 415 | the Work. 416 | -------------------------------------------------------------------------------- /src/unicodeitplus/data.py: -------------------------------------------------------------------------------- 1 | """ 2 | Symbols extracted from extern/unimathsymbols.txt with extensions and corrections. 3 | 4 | extern/unimathsymbols.txt is under Copyright 2011 by Günter Milde and licensed under the 5 | LaTeX Project Public License (LPPL). 6 | 7 | As a Derived Work, this file is licensed under LaTeX Project Public License (LPPL). 8 | """ 9 | 10 | COMMANDS = { 11 | "-": "−", 12 | ":": "∶", 13 | "A": "𝐴", 14 | "B": "𝐵", 15 | "C": "𝐶", 16 | "D": "𝐷", 17 | "E": "𝐸", 18 | "F": "𝐹", 19 | "G": "𝐺", 20 | "H": "𝐻", 21 | "I": "𝐼", 22 | "J": "𝐽", 23 | "K": "𝐾", 24 | "L": "𝐿", 25 | "M": "𝑀", 26 | "N": "𝑁", 27 | "O": "𝑂", 28 | "P": "𝑃", 29 | "Q": "𝑄", 30 | "R": "𝑅", 31 | "S": "𝑆", 32 | "T": "𝑇", 33 | "U": "𝑈", 34 | "V": "𝑉", 35 | "W": "𝑊", 36 | "X": "𝑋", 37 | "Y": "𝑌", 38 | "Z": "𝑍", 39 | "\\#": "#", 40 | "\\$": "$", 41 | "\\%": "%", 42 | "\\&": "&", 43 | "\\,": "\u2009", 44 | "\\:": "\u205f", 45 | "\\AC": "∿", 46 | "\\APLboxquestion": "⍰", 47 | "\\APLboxupcaret": "⍓", 48 | "\\APLcomment": "⍝", 49 | "\\APLdownarrowbox": "⍗", 50 | "\\APLinput": "⍞", 51 | "\\APLinv": "⌹", 52 | "\\APLleftarrowbox": "⍇", 53 | "\\APLlog": "⍟", 54 | "\\APLrightarrowbox": "⍈", 55 | "\\APLuparrowbox": "⍐", 56 | "\\Angstroem": "Å", 57 | "\\Barv": "⫧", 58 | "\\Bot": "⫫", 59 | "\\Bumpeq": "≎", 60 | "\\CIRCLE": "●", 61 | "\\Cap": "⋒", 62 | "\\CapitalDifferentialD": "ⅅ", 63 | "\\CheckedBox": "☑", 64 | "\\Circle": "○", 65 | "\\Coloneqq": "⩴", 66 | "\\ComplexI": "ⅈ", 67 | "\\ComplexJ": "ⅉ", 68 | "\\Cup": "⋓", 69 | "\\DDownarrow": "⟱", 70 | "\\DashV": "⫥", 71 | "\\DashVDash": "⟚", 72 | "\\Dashv": "⫤", 73 | "\\Ddownarrow": "⤋", 74 | "\\Delta": "𝛥", 75 | "\\Diamond": "◇", 76 | "\\Diamondblack": "◆", 77 | "\\Diamonddot": "⟐", 78 | "\\DifferentialD": "ⅆ", 79 | "\\Digamma": "Ϝ", 80 | "\\Doteq": "≑", 81 | "\\DownArrowBar": "⤓", 82 | "\\DownLeftTeeVector": "⥞", 83 | "\\DownLeftVectorBar": "⥖", 84 | "\\DownRightTeeVector": "⥟", 85 | "\\DownRightVectorBar": "⥗", 86 | "\\Downarrow": "⇓", 87 | "\\Equal": "⩵", 88 | "\\Equiv": "≣", 89 | "\\Euler": "ℇ", 90 | "\\Exclam": "‼", 91 | "\\ExponetialE": "ⅇ", 92 | "\\Finv": "Ⅎ", 93 | "\\Game": "⅁", 94 | "\\Gamma": "𝛤", 95 | "\\Hermaphrodite": "⚥", 96 | "\\Im": "ℑ", 97 | "\\Join": "⨝", 98 | "\\Koppa": "Ϟ", 99 | "\\LEFTCIRCLE": "◖", 100 | "\\LEFTcircle": "◐", 101 | "\\LHD": "◀", 102 | "\\LLeftarrow": "⭅", 103 | "\\LVec": "⃖", 104 | "\\Lambda": "𝛬", 105 | "\\Lbag": "⟅", 106 | "\\Lbrbrak": "〘", 107 | "\\LeftArrowBar": "⇤", 108 | "\\LeftDownTeeVector": "⥡", 109 | "\\LeftDownVectorBar": "⥙", 110 | "\\LeftTeeVector": "⥚", 111 | "\\LeftTriangleBar": "⧏", 112 | "\\LeftUpTeeVector": "⥠", 113 | "\\LeftUpVectorBar": "⥘", 114 | "\\LeftVectorBar": "⥒", 115 | "\\Leftarrow": "⇐", 116 | "\\Leftrightarrow": "⇔", 117 | "\\Lleftarrow": "⇚", 118 | "\\Longleftarrow": "⟸", 119 | "\\Longleftrightarrow": "⟺", 120 | "\\Longmapsfrom": "⟽", 121 | "\\Longmapsto": "⟾", 122 | "\\Longrightarrow": "⟹", 123 | "\\Lparen": "⦅", 124 | "\\Lparengtr": "⦕", 125 | "\\Lsh": "↰", 126 | "\\Lvzigzag": "⧚", 127 | "\\MapsDown": "↧", 128 | "\\MapsUp": "↥", 129 | "\\Mapsfrom": "⤆", 130 | "\\Mapsto": "⤇", 131 | "\\Micro": "µ", 132 | "\\Nearrow": "⇗", 133 | "\\NestedGreaterGreater": "⪢", 134 | "\\NestedLessLess": "⪡", 135 | "\\Not": "⫬", 136 | "\\NotGreaterLess": "≹", 137 | "\\NotGreaterTilde": "≵", 138 | "\\NotLessTilde": "≴", 139 | "\\Nwarrow": "⇖", 140 | "\\Omega": "𝛺", 141 | "\\Otimes": "⨷", 142 | "\\Phi": "𝛷", 143 | "\\Pi": "𝛱", 144 | "\\Planckconst": "ℎ", 145 | "\\PropertyLine": "⅊", 146 | "\\Proportion": "∷", 147 | "\\Psi": "𝛹", 148 | "\\QED": "∎", 149 | "\\Qoppa": "Ϙ", 150 | "\\Question": "⁇", 151 | "\\RHD": "▶", 152 | "\\RIGHTCIRCLE": "◗", 153 | "\\RIGHTcircle": "◑", 154 | "\\RRightarrow": "⭆", 155 | "\\Rbag": "⟆", 156 | "\\Rbrbrak": "〙", 157 | "\\Re": "ℜ", 158 | "\\RightArrowBar": "⇥", 159 | "\\RightDownTeeVector": "⥝", 160 | "\\RightDownVectorBar": "⥕", 161 | "\\RightTeeVector": "⥛", 162 | "\\RightTriangleBar": "⧐", 163 | "\\RightUpTeeVector": "⥜", 164 | "\\RightUpVectorBar": "⥔", 165 | "\\RightVectorBar": "⥓", 166 | "\\Rightarrow": "⇒", 167 | "\\Rparen": "⦆", 168 | "\\Rparenless": "⦖", 169 | "\\Rrightarrow": "⇛", 170 | "\\Rsh": "↱", 171 | "\\Rvzigzag": "⧛", 172 | "\\Same": "⩶", 173 | "\\Sampi": "Ϡ", 174 | "\\Searrow": "⇘", 175 | "\\Sigma": "𝛴", 176 | "\\Sqcap": "⩎", 177 | "\\Sqcup": "⩏", 178 | "\\Square": "☐", 179 | "\\Stigma": "Ϛ", 180 | "\\Subset": "⋐", 181 | "\\Sun": "☉", 182 | "\\Supset": "⋑", 183 | "\\Swarrow": "⇙", 184 | "\\Theta": "𝛩", 185 | "\\Top": "⫪", 186 | "\\UUparrow": "⟰", 187 | "\\UpArrowBar": "⤒", 188 | "\\Uparrow": "⇑", 189 | "\\Updownarrow": "⇕", 190 | "\\Upsilon": "𝛶", 191 | "\\Uuparrow": "⤊", 192 | "\\VDash": "⊫", 193 | "\\VERT": "⦀", 194 | "\\Vdash": "⊩", 195 | "\\Vee": "⩔", 196 | "\\Vvdash": "⊪", 197 | "\\Wedge": "⩓", 198 | "\\XBox": "☒", 199 | "\\Xi": "𝛯", 200 | "\\Yup": "⅄", 201 | "\\Zbar": "Ƶ", 202 | "\\_": "_", 203 | "\\accurrent": "⏦", 204 | "\\acidfree": "♾", 205 | "\\acute": "́", 206 | "\\acwcirclearrow": "⥀", 207 | "\\acwgapcirclearrow": "⟲", 208 | "\\acwleftarcarrow": "⤹", 209 | "\\acwoverarcarrow": "⤺", 210 | "\\acwunderarcarrow": "⤻", 211 | "\\aleph": "ℵ", 212 | "\\alpha": "𝛼", 213 | "\\amalg": "⨿", 214 | "\\anchor": "⚓", 215 | "\\angdnr": "⦟", 216 | "\\angle": "∠", 217 | "\\angles": "⦞", 218 | "\\angleubar": "⦤", 219 | "\\annuity": "⃧", 220 | "\\approx": "≈", 221 | "\\approxeq": "≊", 222 | "\\approxeqq": "⩰", 223 | "\\approxident": "≋", 224 | "\\aquarius": "♒", 225 | "\\arceq": "≘", 226 | "\\aries": "♈", 227 | "\\arrowbullet": "➢", 228 | "\\assert": "⊦", 229 | "\\ast": "∗", 230 | "\\asteq": "⩮", 231 | "\\asteraccent": "⃰", 232 | "\\asymp": "≍", 233 | "\\awint": "⨑", 234 | "\\bNot": "⫭", 235 | "\\backcong": "≌", 236 | "\\backdprime": "‶", 237 | "\\backepsilon": "϶", 238 | "\\backprime": "‵", 239 | "\\backsim": "∽", 240 | "\\backsimeq": "⋍", 241 | "\\backslash": "\\", 242 | "\\backtrprime": "‷", 243 | "\\bagmember": "⋿", 244 | "\\ballotx": "✗", 245 | "\\bar": "̄", 246 | "\\barcap": "⩃", 247 | "\\barcup": "⩂", 248 | "\\barin": "⋶", 249 | "\\barleftarrowrightarrowba": "↹", 250 | "\\barleftharpoon": "⥫", 251 | "\\barovernorthwestarrow": "↸", 252 | "\\barrightarrowdiamond": "⤠", 253 | "\\barrightharpoon": "⥭", 254 | "\\barvee": "⊽", 255 | "\\barwedge": "⊼", 256 | "\\bbrktbrk": "⎶", 257 | "\\bdtriplevdash": "┆", 258 | "\\because": "∵", 259 | "\\benzenr": "⏣", 260 | "\\beta": "𝛽", 261 | "\\beth": "ℶ", 262 | "\\between": "≬", 263 | "\\bigblacktriangledown": "▼", 264 | "\\bigblacktriangleup": "▲", 265 | "\\bigbot": "⟘", 266 | "\\bigcap": "⋂", 267 | "\\bigcup": "⋃", 268 | "\\bigcupdot": "⨃", 269 | "\\biginterleave": "⫼", 270 | "\\bigodot": "⨀", 271 | "\\bigoplus": "⨁", 272 | "\\bigotimes": "⨂", 273 | "\\bigslopedvee": "⩗", 274 | "\\bigslopedwedge": "⩘", 275 | "\\bigsqcap": "⨅", 276 | "\\bigsqcup": "⨆", 277 | "\\bigstar": "★", 278 | "\\bigtalloblong": "⫿", 279 | "\\bigtop": "⟙", 280 | "\\bigtriangledown": "▽", 281 | "\\bigtriangleleft": "⨞", 282 | "\\bigtriangleup": "△", 283 | "\\biguplus": "⨄", 284 | "\\bigvee": "⋁", 285 | "\\bigwedge": "⋀", 286 | "\\bigwhitestar": "☆", 287 | "\\bij": "⤖", 288 | "\\biohazard": "☣", 289 | "\\blackcircledownarrow": "⧭", 290 | "\\blackcircledrightdot": "⚈", 291 | "\\blackcircledtwodots": "⚉", 292 | "\\blackcircleulquadwhite": "◕", 293 | "\\blackdiamonddownarrow": "⧪", 294 | "\\blackhourglass": "⧗", 295 | "\\blackinwhitediamond": "◈", 296 | "\\blackinwhitesquare": "▣", 297 | "\\blacklozenge": "⧫", 298 | "\\blackpointerleft": "◄", 299 | "\\blackpointerright": "►", 300 | "\\blacksmiley": "☻", 301 | "\\blacksquare": "⬛", 302 | "\\blacktriangledown": "▾", 303 | "\\blacktriangleleft": "◂", 304 | "\\blacktriangleright": "▸", 305 | "\\blacktriangleup": "▴", 306 | "\\blkhorzoval": "⬬", 307 | "\\blkvertoval": "⬮", 308 | "\\blockfull": "█", 309 | "\\blockhalfshaded": "▒", 310 | "\\blocklefthalf": "▌", 311 | "\\blocklowhalf": "▄", 312 | "\\blockqtrshaded": "░", 313 | "\\blockrighthalf": "▐", 314 | "\\blockthreeqtrshaded": "▓", 315 | "\\blockuphalf": "▀", 316 | "\\bot": "⊥", 317 | "\\botsemicircle": "◡", 318 | "\\bowtie": "⋈", 319 | "\\boxast": "⧆", 320 | "\\boxbar": "◫", 321 | "\\boxbox": "⧈", 322 | "\\boxbslash": "⧅", 323 | "\\boxcircle": "⧇", 324 | "\\boxdot": "⊡", 325 | "\\boxminus": "⊟", 326 | "\\boxonbox": "⧉", 327 | "\\boxplus": "⊞", 328 | "\\boxslash": "⧄", 329 | "\\boxtimes": "⊠", 330 | "\\breve": "̆", 331 | "\\bsimilarleftarrow": "⭁", 332 | "\\bsimilarrightarrow": "⭇", 333 | "\\bsolhsub": "⟈", 334 | "\\btimes": "⨲", 335 | "\\bullet": "∙", 336 | "\\bullseye": "◎", 337 | "\\bumpeq": "≏", 338 | "\\bumpeqq": "⪮", 339 | "\\cancer": "♋", 340 | "\\candra": "̐", 341 | "\\cap": "∩", 342 | "\\capbarcup": "⩉", 343 | "\\capdot": "⩀", 344 | "\\capovercup": "⩇", 345 | "\\capricornus": "♑", 346 | "\\capwedge": "⩄", 347 | "\\caretinsert": "‸", 348 | "\\carriagereturn": "↵", 349 | "\\cat": "⁀", 350 | "\\ccwundercurvearrow": "⤿", 351 | "\\cdot": "⋅", 352 | "\\cdotp": "·", 353 | "\\cdots": "⋯", 354 | "\\cent": "¢", 355 | "\\check": "̌", 356 | "\\checkmark": "✓", 357 | "\\chi": "𝜒", 358 | "\\cirE": "⧃", 359 | "\\cirbot": "⟟", 360 | "\\circ": "∘", 361 | "\\circeq": "≗", 362 | "\\circlearrowleft": "↺", 363 | "\\circlearrowright": "↻", 364 | "\\circlebottomhalfblack": "◒", 365 | "\\circledR": "®", 366 | "\\circledast": "⊛", 367 | "\\circledbslash": "⦸", 368 | "\\circledbullet": "⦿", 369 | "\\circledcirc": "⊚", 370 | "\\circleddash": "⊝", 371 | "\\circledequal": "⊜", 372 | "\\circledgtr": "⧁", 373 | "\\circledless": "⧀", 374 | "\\circledownarrow": "⧬", 375 | "\\circledparallel": "⦷", 376 | "\\circledrightdot": "⚆", 377 | "\\circledstar": "✪", 378 | "\\circledtwodots": "⚇", 379 | "\\circledvert": "⦶", 380 | "\\circledwhitebullet": "⦾", 381 | "\\circlehbar": "⦵", 382 | "\\circlellquad": "◵", 383 | "\\circlelrquad": "◶", 384 | "\\circleonleftarrow": "⬰", 385 | "\\circleonrightarrow": "⇴", 386 | "\\circletophalfblack": "◓", 387 | "\\circleulquad": "◴", 388 | "\\circleurquad": "◷", 389 | "\\circleurquadblack": "◔", 390 | "\\circlevertfill": "◍", 391 | "\\cirfnint": "⨐", 392 | "\\cirmid": "⫯", 393 | "\\cirscir": "⧂", 394 | "\\closedvarcap": "⩍", 395 | "\\closedvarcup": "⩌", 396 | "\\closedvarcupsmashprod": "⩐", 397 | "\\closure": "⁐", 398 | "\\clubsuit": "♣", 399 | "\\coloneq": "≔", 400 | "\\commaminus": "⨩", 401 | "\\complement": "∁", 402 | "\\concavediamond": "⟡", 403 | "\\concavediamondtickleft": "⟢", 404 | "\\concavediamondtickright": "⟣", 405 | "\\cong": "≅", 406 | "\\congdot": "⩭", 407 | "\\conictaper": "⌲", 408 | "\\conjquant": "⨇", 409 | "\\coprod": "∐", 410 | "\\corresponds": "≙", 411 | "\\csub": "⫏", 412 | "\\csube": "⫑", 413 | "\\csup": "⫐", 414 | "\\csupe": "⫒", 415 | "\\cup": "∪", 416 | "\\cupbarcap": "⩈", 417 | "\\cupdot": "⊍", 418 | "\\cupleftarrow": "⊌", 419 | "\\cupovercap": "⩆", 420 | "\\cupvee": "⩅", 421 | "\\curlyeqprec": "⋞", 422 | "\\curlyeqsucc": "⋟", 423 | "\\curlyvee": "⋎", 424 | "\\curlywedge": "⋏", 425 | "\\curvearrowleft": "↶", 426 | "\\curvearrowleftplus": "⤽", 427 | "\\curvearrowright": "↷", 428 | "\\curvearrowrightminus": "⤼", 429 | "\\cwcirclearrow": "⥁", 430 | "\\cwgapcirclearrow": "⟳", 431 | "\\cwrightarcarrow": "⤸", 432 | "\\cwundercurvearrow": "⤾", 433 | "\\dagger": "†", 434 | "\\daleth": "ℸ", 435 | "\\danger": "☡", 436 | "\\dashV": "⫣", 437 | "\\dashVdash": "⟛", 438 | "\\dashleftarrow": "⇠", 439 | "\\dashrightarrow": "⇢", 440 | "\\dashv": "⊣", 441 | "\\dbkarow": "⤏", 442 | "\\ddagger": "‡", 443 | "\\ddddot": "⃜", 444 | "\\dddot": "⃛", 445 | "\\ddot": "̈", 446 | "\\ddots": "⋱", 447 | "\\ddotseq": "⩷", 448 | "\\delta": "𝛿", 449 | "\\diameter": "⌀", 450 | "\\diamond": "⋄", 451 | "\\diamondbotblack": "⬙", 452 | "\\diamondleftarrow": "⤝", 453 | "\\diamondleftarrowbar": "⤟", 454 | "\\diamondleftblack": "⬖", 455 | "\\diamondrightblack": "⬗", 456 | "\\diamondsuit": "♢", 457 | "\\diamondtopblack": "⬘", 458 | "\\dicei": "⚀", 459 | "\\diceii": "⚁", 460 | "\\diceiii": "⚂", 461 | "\\diceiv": "⚃", 462 | "\\dicev": "⚄", 463 | "\\dicevi": "⚅", 464 | "\\digamma": "ϝ", 465 | "\\dingasterisk": "✽", 466 | "\\disin": "⋲", 467 | "\\disjquant": "⨈", 468 | "\\div": "÷", 469 | "\\divideontimes": "⋇", 470 | "\\dlsh": "↲", 471 | "\\dot": "̇", 472 | "\\doteq": "≐", 473 | "\\dotequiv": "⩧", 474 | "\\dotminus": "∸", 475 | "\\dotplus": "∔", 476 | "\\dotsim": "⩪", 477 | "\\dotsminusdots": "∺", 478 | "\\dottedcircle": "◌", 479 | "\\dottedsquare": "⬚", 480 | "\\dottimes": "⨰", 481 | "\\doublebarvee": "⩢", 482 | "\\doublebarwedge": "⩞", 483 | "\\doubleplus": "⧺", 484 | "\\downarrow": "↓", 485 | "\\downarrowbarred": "⤈", 486 | "\\downdasharrow": "⇣", 487 | "\\downdownarrows": "⇊", 488 | "\\downdownharpoons": "⥥", 489 | "\\downfishtail": "⥿", 490 | "\\downharpoonleft": "⇃", 491 | "\\downharpoonright": "⇂", 492 | "\\downrightcurvedarrow": "⤵", 493 | "\\downtriangleleftblack": "⧨", 494 | "\\downtrianglerightblack": "⧩", 495 | "\\downuparrows": "⇵", 496 | "\\downupharpoons": "⥯", 497 | "\\downwhitearrow": "⇩", 498 | "\\draftingarrow": "➛", 499 | "\\drbkarow": "⤐", 500 | "\\droang": "̚", 501 | "\\drsh": "↳", 502 | "\\dsol": "⧶", 503 | "\\dsub": "⩤", 504 | "\\earth": "♁", 505 | "\\egsdot": "⪘", 506 | "\\eighthnote": "♪", 507 | "\\elinters": "⏧", 508 | "\\ell": "ℓ", 509 | "\\elsdot": "⪗", 510 | "\\emptysetoarr": "⦳", 511 | "\\emptysetoarrl": "⦴", 512 | "\\emptysetobar": "⦱", 513 | "\\emptysetocirc": "⦲", 514 | "\\enclosecircle": "⃝", 515 | "\\enclosediamond": "⃟", 516 | "\\enclosesquare": "⃞", 517 | "\\enclosetriangle": "⃤", 518 | "\\enleadertwodots": "‥", 519 | "\\eparsl": "⧣", 520 | "\\epsilon": "𝜖", 521 | "\\eqcirc": "≖", 522 | "\\eqcolon": "≕", 523 | "\\eqdef": "≝", 524 | "\\eqdot": "⩦", 525 | "\\eqgtr": "⋝", 526 | "\\eqless": "⋜", 527 | "\\eqqgtr": "⪚", 528 | "\\eqqless": "⪙", 529 | "\\eqqplus": "⩱", 530 | "\\eqqsim": "⩳", 531 | "\\eqqslantgtr": "⪜", 532 | "\\eqqslantless": "⪛", 533 | "\\eqsim": "≂", 534 | "\\eqslantgtr": "⪖", 535 | "\\eqslantless": "⪕", 536 | "\\equalleftarrow": "⭀", 537 | "\\equalrightarrow": "⥱", 538 | "\\equiv": "≡", 539 | "\\equivDD": "⩸", 540 | "\\equivVert": "⩨", 541 | "\\equivVvert": "⩩", 542 | "\\eqvparsl": "⧥", 543 | "\\errbarblackcircle": "⧳", 544 | "\\errbarblackdiamond": "⧱", 545 | "\\errbarblacksquare": "⧯", 546 | "\\errbarcircle": "⧲", 547 | "\\errbardiamond": "⧰", 548 | "\\errbarsquare": "⧮", 549 | "\\eta": "𝜂", 550 | "\\eth": "ð", 551 | "\\euro": "€", 552 | "\\exists": "∃", 553 | "\\fallingdotseq": "≒", 554 | "\\fbowtie": "⧓", 555 | "\\fcmp": "⨾", 556 | "\\fdiagovnearrow": "⤯", 557 | "\\fdiagovrdiag": "⤬", 558 | "\\female": "♀", 559 | "\\ffun": "⇻", 560 | "\\finj": "⤕", 561 | "\\fint": "⨏", 562 | "\\fisheye": "◉", 563 | "\\flat": "♭", 564 | "\\fltns": "⏥", 565 | "\\forall": "∀", 566 | "\\forks": "⫝̸", 567 | "\\forksnot": "⫝", 568 | "\\forkv": "⫙", 569 | "\\fourth": "⁗", 570 | "\\fourvdots": "⦙", 571 | "\\fracslash": "⁄", 572 | "\\frown": "⌢", 573 | "\\frownie": "☹", 574 | "\\fullouterjoin": "⟗", 575 | "\\gamma": "𝛾", 576 | "\\gemini": "♊", 577 | "\\geq": "≥", 578 | "\\geqq": "≧", 579 | "\\geqqslant": "⫺", 580 | "\\geqslant": "⩾", 581 | "\\gescc": "⪩", 582 | "\\gesdot": "⪀", 583 | "\\gesdoto": "⪂", 584 | "\\gesdotol": "⪄", 585 | "\\gesles": "⪔", 586 | "\\gg": "≫", 587 | "\\ggcurly": "⪼", 588 | "\\ggg": "⋙", 589 | "\\gggnest": "⫸", 590 | "\\gimel": "ℷ", 591 | "\\glE": "⪒", 592 | "\\gla": "⪥", 593 | "\\gleichstark": "⧦", 594 | "\\glj": "⪤", 595 | "\\gnapprox": "⪊", 596 | "\\gneq": "⪈", 597 | "\\gneqq": "≩", 598 | "\\gnsim": "⋧", 599 | "\\grave": "̀", 600 | "\\gsime": "⪎", 601 | "\\gsiml": "⪐", 602 | "\\gtcir": "⩺", 603 | "\\gtlpar": "⦠", 604 | "\\gtquest": "⩼", 605 | "\\gtrapprox": "⪆", 606 | "\\gtrarr": "⥸", 607 | "\\gtrdot": "⋗", 608 | "\\gtreqless": "⋛", 609 | "\\gtreqqless": "⪌", 610 | "\\gtrless": "≷", 611 | "\\gtrsim": "≳", 612 | "\\harrowextender": "⎯", 613 | "\\hash": "⋕", 614 | "\\hat": "̂", 615 | "\\hatapprox": "⩯", 616 | "\\hbar": "ℏ", 617 | "\\heartsuit": "♡", 618 | "\\hermitmatrix": "⊹", 619 | "\\hexagon": "⎔", 620 | "\\hexagonblack": "⬣", 621 | "\\hknearrow": "⤤", 622 | "\\hknwarrow": "⤣", 623 | "\\hksearow": "⤥", 624 | "\\hkswarow": "⤦", 625 | "\\hookleftarrow": "↩", 626 | "\\hookrightarrow": "↪", 627 | "\\horizbar": "―", 628 | "\\hourglass": "⧖", 629 | "\\house": "⌂", 630 | "\\hrectangle": "▭", 631 | "\\hrectangleblack": "▬", 632 | "\\hslash": "ℏ", 633 | "\\hyphenbullet": "⁃", 634 | "\\hzigzag": "〰", 635 | "\\iddots": "⋰", 636 | "\\iiiint": "⨌", 637 | "\\iiint": "∭", 638 | "\\iinfin": "⧜", 639 | "\\iint": "∬", 640 | "\\imath": "𝚤", 641 | "\\in": "∈", 642 | "\\increment": "∆", 643 | "\\infty": "∞", 644 | "\\int": "∫", 645 | "\\intBar": "⨎", 646 | "\\intbar": "⨍", 647 | "\\intbottom": "⌡", 648 | "\\intcap": "⨙", 649 | "\\intclockwise": "∱", 650 | "\\intcup": "⨚", 651 | "\\intercal": "⊺", 652 | "\\interleave": "⫴", 653 | "\\intextender": "⎮", 654 | "\\intlarhk": "⨗", 655 | "\\intprod": "⨼", 656 | "\\intprodr": "⨽", 657 | "\\inttop": "⌠", 658 | "\\intx": "⨘", 659 | "\\invamp": "⅋", 660 | "\\invdiameter": "⍉", 661 | "\\inversebullet": "◘", 662 | "\\inversewhitecircle": "◙", 663 | "\\invlazys": "∾", 664 | "\\invneg": "⌐", 665 | "\\invwhitelowerhalfcircle": "◛", 666 | "\\invwhiteupperhalfcircle": "◚", 667 | "\\iota": "𝜄", 668 | "\\isinE": "⋹", 669 | "\\isindot": "⋵", 670 | "\\isinobar": "⋷", 671 | "\\isins": "⋴", 672 | "\\isinvb": "⋸", 673 | "\\jmath": "𝚥", 674 | "\\jupiter": "♃", 675 | "\\kappa": "𝜅", 676 | "\\kernelcontraction": "∻", 677 | "\\koppa": "ϟ", 678 | "\\lBrace": "⦃", 679 | "\\lambda": "𝜆", 680 | "\\lang": "⟪", 681 | "\\langle": "⟨", 682 | "\\langledot": "⦑", 683 | "\\laplac": "⧠", 684 | "\\lat": "⪫", 685 | "\\late": "⪭", 686 | "\\lblkbrbrak": "⦗", 687 | "\\lblot": "⦉", 688 | "\\lbracelend": "⎩", 689 | "\\lbracemid": "⎨", 690 | "\\lbraceuend": "⎧", 691 | "\\lbrack": "[", 692 | "\\lbrackextender": "⎢", 693 | "\\lbracklend": "⎣", 694 | "\\lbracklltick": "⦏", 695 | "\\lbrackubar": "⦋", 696 | "\\lbrackuend": "⎡", 697 | "\\lbrackultick": "⦍", 698 | "\\lbrbrak": "〔", 699 | "\\lceil": "⌈", 700 | "\\lcurvyangle": "⧼", 701 | "\\ldots": "…", 702 | "\\leadsto": "⤳", 703 | "\\leftarrow": "←", 704 | "\\leftarrowapprox": "⭊", 705 | "\\leftarrowbackapprox": "⭂", 706 | "\\leftarrowbsimilar": "⭋", 707 | "\\leftarrowless": "⥷", 708 | "\\leftarrowonoplus": "⬲", 709 | "\\leftarrowplus": "⥆", 710 | "\\leftarrowshortrightarrow": "⥃", 711 | "\\leftarrowsimilar": "⥳", 712 | "\\leftarrowsubset": "⥺", 713 | "\\leftarrowtail": "↢", 714 | "\\leftarrowtriangle": "⇽", 715 | "\\leftarrowx": "⬾", 716 | "\\leftbarharpoon": "⥪", 717 | "\\leftbkarrow": "⤌", 718 | "\\leftcurvedarrow": "⬿", 719 | "\\leftdbkarrow": "⤎", 720 | "\\leftdbltail": "⤛", 721 | "\\leftdotarrow": "⬸", 722 | "\\leftdowncurvedarrow": "⤶", 723 | "\\leftharpoondown": "↽", 724 | "\\leftharpoonup": "↼", 725 | "\\leftleftarrows": "⇇", 726 | "\\leftleftharpoons": "⥢", 727 | "\\leftmoon": "☾", 728 | "\\leftouterjoin": "⟕", 729 | "\\leftrightarrow": "↔", 730 | "\\leftrightarrowcircle": "⥈", 731 | "\\leftrightarrows": "⇆", 732 | "\\leftrightarrowtriangle": "⇿", 733 | "\\leftrightharpoon": "⥊", 734 | "\\leftrightharpoondown": "⥐", 735 | "\\leftrightharpoons": "⇋", 736 | "\\leftrightharpoonsdown": "⥧", 737 | "\\leftrightharpoonsup": "⥦", 738 | "\\leftrightharpoonup": "⥎", 739 | "\\leftrightsquigarrow": "↭", 740 | "\\leftslice": "⪦", 741 | "\\leftsquigarrow": "⇜", 742 | "\\lefttail": "⤙", 743 | "\\leftthreearrows": "⬱", 744 | "\\leftthreetimes": "⋋", 745 | "\\leftupdownharpoon": "⥑", 746 | "\\leftwavearrow": "↜", 747 | "\\leftwhitearrow": "⇦", 748 | "\\leo": "♌", 749 | "\\leq": "≤", 750 | "\\leqq": "≦", 751 | "\\leqqslant": "⫹", 752 | "\\leqslant": "⩽", 753 | "\\lescc": "⪨", 754 | "\\lesdot": "⩿", 755 | "\\lesdoto": "⪁", 756 | "\\lesdotor": "⪃", 757 | "\\lesges": "⪓", 758 | "\\lessapprox": "⪅", 759 | "\\lessdot": "⋖", 760 | "\\lesseqgtr": "⋚", 761 | "\\lesseqqgtr": "⪋", 762 | "\\lessgtr": "≶", 763 | "\\lesssim": "≲", 764 | "\\lfbowtie": "⧑", 765 | "\\lfloor": "⌊", 766 | "\\lftimes": "⧔", 767 | "\\lgE": "⪑", 768 | "\\lgblkcircle": "⬤", 769 | "\\lgroup": "⟮", 770 | "\\lgwhtcircle": "◯", 771 | "\\lhd": "◁", 772 | "\\libra": "♎", 773 | "\\lightning": "↯", 774 | "\\limg": "⦇", 775 | "\\linefeed": "↴", 776 | "\\ll": "≪", 777 | "\\llarc": "◟", 778 | "\\llblacktriangle": "◣", 779 | "\\llbracket": "⟦", 780 | "\\llcorner": "⌞", 781 | "\\llcurly": "⪻", 782 | "\\lll": "⋘", 783 | "\\lllnest": "⫷", 784 | "\\lltriangle": "◺", 785 | "\\lmoustache": "⎰", 786 | "\\lnapprox": "⪉", 787 | "\\lneq": "⪇", 788 | "\\lneqq": "≨", 789 | "\\lnsim": "⋦", 790 | "\\longdashv": "⟞", 791 | "\\longdivision": "⟌", 792 | "\\longleftarrow": "⟵", 793 | "\\longleftrightarrow": "⟷", 794 | "\\longleftsquigarrow": "⬳", 795 | "\\longmapsfrom": "⟻", 796 | "\\longmapsto": "⟼", 797 | "\\longrightarrow": "⟶", 798 | "\\longrightsquigarrow": "⟿", 799 | "\\looparrowleft": "↫", 800 | "\\looparrowright": "↬", 801 | "\\lowint": "⨜", 802 | "\\lozenge": "◊", 803 | "\\lozengeminus": "⟠", 804 | "\\lparenextender": "⎜", 805 | "\\lparenlend": "⎝", 806 | "\\lparenless": "⦓", 807 | "\\lparenuend": "⎛", 808 | "\\lrarc": "◞", 809 | "\\lrblacktriangle": "◢", 810 | "\\lrcorner": "⌟", 811 | "\\lrtriangle": "◿", 812 | "\\lrtriangleeq": "⧡", 813 | "\\lsime": "⪍", 814 | "\\lsimg": "⪏", 815 | "\\lsqhook": "⫍", 816 | "\\ltcir": "⩹", 817 | "\\ltimes": "⋉", 818 | "\\ltlarr": "⥶", 819 | "\\ltquest": "⩻", 820 | "\\lvboxline": "⎸", 821 | "\\lvec": "⃐", 822 | "\\lvzigzag": "⧘", 823 | "\\male": "♂", 824 | "\\maltese": "✠", 825 | "\\mapsfrom": "↤", 826 | "\\mapsto": "↦", 827 | "\\mathbb{0}": "𝟘", 828 | "\\mathbb{1}": "𝟙", 829 | "\\mathbb{2}": "𝟚", 830 | "\\mathbb{3}": "𝟛", 831 | "\\mathbb{4}": "𝟜", 832 | "\\mathbb{5}": "𝟝", 833 | "\\mathbb{6}": "𝟞", 834 | "\\mathbb{7}": "𝟟", 835 | "\\mathbb{8}": "𝟠", 836 | "\\mathbb{9}": "𝟡", 837 | "\\mathbb{A}": "𝔸", 838 | "\\mathbb{B}": "𝔹", 839 | "\\mathbb{C}": "ℂ", 840 | "\\mathbb{D}": "𝔻", 841 | "\\mathbb{E}": "𝔼", 842 | "\\mathbb{F}": "𝔽", 843 | "\\mathbb{G}": "𝔾", 844 | "\\mathbb{H}": "ℍ", 845 | "\\mathbb{I}": "𝕀", 846 | "\\mathbb{J}": "𝕁", 847 | "\\mathbb{K}": "𝕂", 848 | "\\mathbb{L}": "𝕃", 849 | "\\mathbb{M}": "𝕄", 850 | "\\mathbb{N}": "ℕ", 851 | "\\mathbb{O}": "𝕆", 852 | "\\mathbb{P}": "ℙ", 853 | "\\mathbb{Q}": "ℚ", 854 | "\\mathbb{R}": "ℝ", 855 | "\\mathbb{S}": "𝕊", 856 | "\\mathbb{T}": "𝕋", 857 | "\\mathbb{U}": "𝕌", 858 | "\\mathbb{V}": "𝕍", 859 | "\\mathbb{W}": "𝕎", 860 | "\\mathbb{X}": "𝕏", 861 | "\\mathbb{Y}": "𝕐", 862 | "\\mathbb{Z}": "ℤ", 863 | "\\mathbb{\\Gamma}": "ℾ", 864 | "\\mathbb{\\Pi}": "ℿ", 865 | "\\mathbb{\\Sigma}": "⅀", 866 | "\\mathbb{\\gamma}": "ℽ", 867 | "\\mathbb{\\pi}": "ℼ", 868 | "\\mathbb{a}": "𝕒", 869 | "\\mathbb{b}": "𝕓", 870 | "\\mathbb{c}": "𝕔", 871 | "\\mathbb{d}": "𝕕", 872 | "\\mathbb{e}": "𝕖", 873 | "\\mathbb{f}": "𝕗", 874 | "\\mathbb{g}": "𝕘", 875 | "\\mathbb{h}": "𝕙", 876 | "\\mathbb{i}": "𝕚", 877 | "\\mathbb{j}": "𝕛", 878 | "\\mathbb{k}": "𝕜", 879 | "\\mathbb{l}": "𝕝", 880 | "\\mathbb{m}": "𝕞", 881 | "\\mathbb{n}": "𝕟", 882 | "\\mathbb{o}": "𝕠", 883 | "\\mathbb{p}": "𝕡", 884 | "\\mathbb{q}": "𝕢", 885 | "\\mathbb{r}": "𝕣", 886 | "\\mathbb{s}": "𝕤", 887 | "\\mathbb{t}": "𝕥", 888 | "\\mathbb{u}": "𝕦", 889 | "\\mathbb{v}": "𝕧", 890 | "\\mathbb{w}": "𝕨", 891 | "\\mathbb{x}": "𝕩", 892 | "\\mathbb{y}": "𝕪", 893 | "\\mathbb{z}": "𝕫", 894 | "\\mathbfit{A}": "𝑨", 895 | "\\mathbfit{B}": "𝑩", 896 | "\\mathbfit{C}": "𝑪", 897 | "\\mathbfit{D}": "𝑫", 898 | "\\mathbfit{E}": "𝑬", 899 | "\\mathbfit{F}": "𝑭", 900 | "\\mathbfit{G}": "𝑮", 901 | "\\mathbfit{H}": "𝑯", 902 | "\\mathbfit{I}": "𝑰", 903 | "\\mathbfit{J}": "𝑱", 904 | "\\mathbfit{K}": "𝑲", 905 | "\\mathbfit{L}": "𝑳", 906 | "\\mathbfit{M}": "𝑴", 907 | "\\mathbfit{N}": "𝑵", 908 | "\\mathbfit{O}": "𝑶", 909 | "\\mathbfit{P}": "𝑷", 910 | "\\mathbfit{Q}": "𝑸", 911 | "\\mathbfit{R}": "𝑹", 912 | "\\mathbfit{S}": "𝑺", 913 | "\\mathbfit{T}": "𝑻", 914 | "\\mathbfit{U}": "𝑼", 915 | "\\mathbfit{V}": "𝑽", 916 | "\\mathbfit{W}": "𝑾", 917 | "\\mathbfit{X}": "𝑿", 918 | "\\mathbfit{Y}": "𝒀", 919 | "\\mathbfit{Z}": "𝒁", 920 | "\\mathbfit{\\Delta}": "𝜟", 921 | "\\mathbfit{\\Gamma}": "𝜞", 922 | "\\mathbfit{\\Lambda}": "𝜦", 923 | "\\mathbfit{\\Omega}": "𝜴", 924 | "\\mathbfit{\\Phi}": "𝜱", 925 | "\\mathbfit{\\Pi}": "𝜫", 926 | "\\mathbfit{\\Psi}": "𝜳", 927 | "\\mathbfit{\\Sigma}": "𝜮", 928 | "\\mathbfit{\\Theta}": "𝜣", 929 | "\\mathbfit{\\Upsilon}": "𝜰", 930 | "\\mathbfit{\\Xi}": "𝜩", 931 | "\\mathbfit{\\alpha}": "𝜶", 932 | "\\mathbfit{\\beta}": "𝜷", 933 | "\\mathbfit{\\chi}": "𝝌", 934 | "\\mathbfit{\\delta}": "𝜹", 935 | "\\mathbfit{\\epsilon}": "𝝐", 936 | "\\mathbfit{\\eta}": "𝜼", 937 | "\\mathbfit{\\gamma}": "𝜸", 938 | "\\mathbfit{\\iota}": "𝜾", 939 | "\\mathbfit{\\kappa}": "𝜿", 940 | "\\mathbfit{\\lambda}": "𝝀", 941 | "\\mathbfit{\\mu}": "𝝁", 942 | "\\mathbfit{\\nu}": "𝝂", 943 | "\\mathbfit{\\omega}": "𝝎", 944 | "\\mathbfit{\\phi}": "𝝓", 945 | "\\mathbfit{\\pi}": "𝝅", 946 | "\\mathbfit{\\psi}": "𝝍", 947 | "\\mathbfit{\\rho}": "𝝆", 948 | "\\mathbfit{\\sigma}": "𝝈", 949 | "\\mathbfit{\\tau}": "𝝉", 950 | "\\mathbfit{\\theta}": "𝜽", 951 | "\\mathbfit{\\upsilon}": "𝝊", 952 | "\\mathbfit{\\varepsilon}": "𝜺", 953 | "\\mathbfit{\\varphi}": "𝝋", 954 | "\\mathbfit{\\varpi}": "𝝕", 955 | "\\mathbfit{\\varrho}": "𝝔", 956 | "\\mathbfit{\\varsigma}": "𝝇", 957 | "\\mathbfit{\\vartheta}": "𝝑", 958 | "\\mathbfit{\\xi}": "𝝃", 959 | "\\mathbfit{\\zeta}": "𝜻", 960 | "\\mathbfit{a}": "𝒂", 961 | "\\mathbfit{b}": "𝒃", 962 | "\\mathbfit{c}": "𝒄", 963 | "\\mathbfit{d}": "𝒅", 964 | "\\mathbfit{e}": "𝒆", 965 | "\\mathbfit{f}": "𝒇", 966 | "\\mathbfit{g}": "𝒈", 967 | "\\mathbfit{h}": "𝒉", 968 | "\\mathbfit{i}": "𝒊", 969 | "\\mathbfit{j}": "𝒋", 970 | "\\mathbfit{k}": "𝒌", 971 | "\\mathbfit{l}": "𝒍", 972 | "\\mathbfit{m}": "𝒎", 973 | "\\mathbfit{n}": "𝒏", 974 | "\\mathbfit{o}": "𝒐", 975 | "\\mathbfit{p}": "𝒑", 976 | "\\mathbfit{q}": "𝒒", 977 | "\\mathbfit{r}": "𝒓", 978 | "\\mathbfit{s}": "𝒔", 979 | "\\mathbfit{t}": "𝒕", 980 | "\\mathbfit{u}": "𝒖", 981 | "\\mathbfit{v}": "𝒗", 982 | "\\mathbfit{w}": "𝒘", 983 | "\\mathbfit{x}": "𝒙", 984 | "\\mathbfit{y}": "𝒚", 985 | "\\mathbfit{z}": "𝒛", 986 | "\\mathbf{0}": "𝟎", 987 | "\\mathbf{1}": "𝟏", 988 | "\\mathbf{2}": "𝟐", 989 | "\\mathbf{3}": "𝟑", 990 | "\\mathbf{4}": "𝟒", 991 | "\\mathbf{5}": "𝟓", 992 | "\\mathbf{6}": "𝟔", 993 | "\\mathbf{7}": "𝟕", 994 | "\\mathbf{8}": "𝟖", 995 | "\\mathbf{9}": "𝟗", 996 | "\\mathbf{A}": "𝐀", 997 | "\\mathbf{B}": "𝐁", 998 | "\\mathbf{C}": "𝐂", 999 | "\\mathbf{D}": "𝐃", 1000 | "\\mathbf{E}": "𝐄", 1001 | "\\mathbf{F}": "𝐅", 1002 | "\\mathbf{G}": "𝐆", 1003 | "\\mathbf{H}": "𝐇", 1004 | "\\mathbf{I}": "𝐈", 1005 | "\\mathbf{J}": "𝐉", 1006 | "\\mathbf{K}": "𝐊", 1007 | "\\mathbf{L}": "𝐋", 1008 | "\\mathbf{M}": "𝐌", 1009 | "\\mathbf{N}": "𝐍", 1010 | "\\mathbf{O}": "𝐎", 1011 | "\\mathbf{P}": "𝐏", 1012 | "\\mathbf{Q}": "𝐐", 1013 | "\\mathbf{R}": "𝐑", 1014 | "\\mathbf{S}": "𝐒", 1015 | "\\mathbf{T}": "𝐓", 1016 | "\\mathbf{U}": "𝐔", 1017 | "\\mathbf{V}": "𝐕", 1018 | "\\mathbf{W}": "𝐖", 1019 | "\\mathbf{X}": "𝐗", 1020 | "\\mathbf{Y}": "𝐘", 1021 | "\\mathbf{Z}": "𝐙", 1022 | "\\mathbf{\\Delta}": "𝚫", 1023 | "\\mathbf{\\Gamma}": "𝚪", 1024 | "\\mathbf{\\Lambda}": "𝚲", 1025 | "\\mathbf{\\Omega}": "𝛀", 1026 | "\\mathbf{\\Phi}": "𝚽", 1027 | "\\mathbf{\\Pi}": "𝚷", 1028 | "\\mathbf{\\Psi}": "𝚿", 1029 | "\\mathbf{\\Sigma}": "𝚺", 1030 | "\\mathbf{\\Theta}": "𝚯", 1031 | "\\mathbf{\\Upsilon}": "𝚼", 1032 | "\\mathbf{\\Xi}": "𝚵", 1033 | "\\mathbf{\\alpha}": "𝛂", 1034 | "\\mathbf{\\beta}": "𝛃", 1035 | "\\mathbf{\\chi}": "𝛘", 1036 | "\\mathbf{\\delta}": "𝛅", 1037 | "\\mathbf{\\epsilon}": "𝛜", 1038 | "\\mathbf{\\eta}": "𝛈", 1039 | "\\mathbf{\\gamma}": "𝛄", 1040 | "\\mathbf{\\iota}": "𝛊", 1041 | "\\mathbf{\\kappa}": "𝛋", 1042 | "\\mathbf{\\lambda}": "𝛌", 1043 | "\\mathbf{\\mu}": "𝛍", 1044 | "\\mathbf{\\nu}": "𝛎", 1045 | "\\mathbf{\\omega}": "𝛚", 1046 | "\\mathbf{\\phi}": "𝛟", 1047 | "\\mathbf{\\pi}": "𝛑", 1048 | "\\mathbf{\\psi}": "𝛙", 1049 | "\\mathbf{\\rho}": "𝛒", 1050 | "\\mathbf{\\sigma}": "𝛔", 1051 | "\\mathbf{\\tau}": "𝛕", 1052 | "\\mathbf{\\theta}": "𝛉", 1053 | "\\mathbf{\\upsilon}": "𝛖", 1054 | "\\mathbf{\\varepsilon}": "𝛆", 1055 | "\\mathbf{\\varphi}": "𝛗", 1056 | "\\mathbf{\\varpi}": "𝛡", 1057 | "\\mathbf{\\varrho}": "𝛠", 1058 | "\\mathbf{\\varsigma}": "𝛓", 1059 | "\\mathbf{\\vartheta}": "𝛝", 1060 | "\\mathbf{\\xi}": "𝛏", 1061 | "\\mathbf{\\zeta}": "𝛇", 1062 | "\\mathbf{a}": "𝐚", 1063 | "\\mathbf{b}": "𝐛", 1064 | "\\mathbf{c}": "𝐜", 1065 | "\\mathbf{d}": "𝐝", 1066 | "\\mathbf{e}": "𝐞", 1067 | "\\mathbf{f}": "𝐟", 1068 | "\\mathbf{g}": "𝐠", 1069 | "\\mathbf{h}": "𝐡", 1070 | "\\mathbf{i}": "𝐢", 1071 | "\\mathbf{j}": "𝐣", 1072 | "\\mathbf{k}": "𝐤", 1073 | "\\mathbf{l}": "𝐥", 1074 | "\\mathbf{m}": "𝐦", 1075 | "\\mathbf{n}": "𝐧", 1076 | "\\mathbf{o}": "𝐨", 1077 | "\\mathbf{p}": "𝐩", 1078 | "\\mathbf{q}": "𝐪", 1079 | "\\mathbf{r}": "𝐫", 1080 | "\\mathbf{s}": "𝐬", 1081 | "\\mathbf{t}": "𝐭", 1082 | "\\mathbf{u}": "𝐮", 1083 | "\\mathbf{v}": "𝐯", 1084 | "\\mathbf{w}": "𝐰", 1085 | "\\mathbf{x}": "𝐱", 1086 | "\\mathbf{y}": "𝐲", 1087 | "\\mathbf{z}": "𝐳", 1088 | "\\mathcal{A}": "𝒜", 1089 | "\\mathcal{B}": "ℬ", 1090 | "\\mathcal{C}": "𝒞", 1091 | "\\mathcal{D}": "𝒟", 1092 | "\\mathcal{E}": "ℰ", 1093 | "\\mathcal{F}": "ℱ", 1094 | "\\mathcal{G}": "𝒢", 1095 | "\\mathcal{H}": "ℋ", 1096 | "\\mathcal{I}": "ℐ", 1097 | "\\mathcal{J}": "𝒥", 1098 | "\\mathcal{K}": "𝒦", 1099 | "\\mathcal{L}": "ℒ", 1100 | "\\mathcal{M}": "ℳ", 1101 | "\\mathcal{N}": "𝒩", 1102 | "\\mathcal{O}": "𝒪", 1103 | "\\mathcal{P}": "𝒫", 1104 | "\\mathcal{Q}": "𝒬", 1105 | "\\mathcal{R}": "ℛ", 1106 | "\\mathcal{S}": "𝒮", 1107 | "\\mathcal{T}": "𝒯", 1108 | "\\mathcal{U}": "𝒰", 1109 | "\\mathcal{V}": "𝒱", 1110 | "\\mathcal{W}": "𝒲", 1111 | "\\mathcal{X}": "𝒳", 1112 | "\\mathcal{Y}": "𝒴", 1113 | "\\mathcal{Z}": "𝒵", 1114 | "\\mathcal{a}": "𝒶", 1115 | "\\mathcal{b}": "𝒷", 1116 | "\\mathcal{c}": "𝒸", 1117 | "\\mathcal{d}": "𝒹", 1118 | "\\mathcal{e}": "ℯ", 1119 | "\\mathcal{f}": "𝒻", 1120 | "\\mathcal{g}": "ℊ", 1121 | "\\mathcal{h}": "𝒽", 1122 | "\\mathcal{i}": "𝒾", 1123 | "\\mathcal{j}": "𝒿", 1124 | "\\mathcal{k}": "𝓀", 1125 | "\\mathcal{l}": "𝓁", 1126 | "\\mathcal{m}": "𝓂", 1127 | "\\mathcal{n}": "𝓃", 1128 | "\\mathcal{o}": "ℴ", 1129 | "\\mathcal{p}": "𝓅", 1130 | "\\mathcal{q}": "𝓆", 1131 | "\\mathcal{r}": "𝓇", 1132 | "\\mathcal{s}": "𝓈", 1133 | "\\mathcal{t}": "𝓉", 1134 | "\\mathcal{u}": "𝓊", 1135 | "\\mathcal{v}": "𝓋", 1136 | "\\mathcal{w}": "𝓌", 1137 | "\\mathcal{x}": "𝓍", 1138 | "\\mathcal{y}": "𝓎", 1139 | "\\mathcal{z}": "𝓏", 1140 | "\\mathfrak{A}": "𝔄", 1141 | "\\mathfrak{B}": "𝔅", 1142 | "\\mathfrak{C}": "ℭ", 1143 | "\\mathfrak{D}": "𝔇", 1144 | "\\mathfrak{E}": "𝔈", 1145 | "\\mathfrak{F}": "𝔉", 1146 | "\\mathfrak{G}": "𝔊", 1147 | "\\mathfrak{H}": "ℌ", 1148 | "\\mathfrak{J}": "𝔍", 1149 | "\\mathfrak{K}": "𝔎", 1150 | "\\mathfrak{L}": "𝔏", 1151 | "\\mathfrak{M}": "𝔐", 1152 | "\\mathfrak{N}": "𝔑", 1153 | "\\mathfrak{O}": "𝔒", 1154 | "\\mathfrak{P}": "𝔓", 1155 | "\\mathfrak{Q}": "𝔔", 1156 | "\\mathfrak{S}": "𝔖", 1157 | "\\mathfrak{T}": "𝔗", 1158 | "\\mathfrak{U}": "𝔘", 1159 | "\\mathfrak{V}": "𝔙", 1160 | "\\mathfrak{W}": "𝔚", 1161 | "\\mathfrak{X}": "𝔛", 1162 | "\\mathfrak{Y}": "𝔜", 1163 | "\\mathfrak{Z}": "ℨ", 1164 | "\\mathfrak{a}": "𝔞", 1165 | "\\mathfrak{b}": "𝔟", 1166 | "\\mathfrak{c}": "𝔠", 1167 | "\\mathfrak{d}": "𝔡", 1168 | "\\mathfrak{e}": "𝔢", 1169 | "\\mathfrak{f}": "𝔣", 1170 | "\\mathfrak{g}": "𝔤", 1171 | "\\mathfrak{h}": "𝔥", 1172 | "\\mathfrak{i}": "𝔦", 1173 | "\\mathfrak{j}": "𝔧", 1174 | "\\mathfrak{k}": "𝔨", 1175 | "\\mathfrak{l}": "𝔩", 1176 | "\\mathfrak{m}": "𝔪", 1177 | "\\mathfrak{n}": "𝔫", 1178 | "\\mathfrak{o}": "𝔬", 1179 | "\\mathfrak{p}": "𝔭", 1180 | "\\mathfrak{q}": "𝔮", 1181 | "\\mathfrak{r}": "𝔯", 1182 | "\\mathfrak{s}": "𝔰", 1183 | "\\mathfrak{t}": "𝔱", 1184 | "\\mathfrak{u}": "𝔲", 1185 | "\\mathfrak{v}": "𝔳", 1186 | "\\mathfrak{w}": "𝔴", 1187 | "\\mathfrak{x}": "𝔵", 1188 | "\\mathfrak{y}": "𝔶", 1189 | "\\mathfrak{z}": "𝔷", 1190 | "\\mathring": "̊", 1191 | "\\mathsfbfit{A}": "𝘼", 1192 | "\\mathsfbfit{B}": "𝘽", 1193 | "\\mathsfbfit{C}": "𝘾", 1194 | "\\mathsfbfit{D}": "𝘿", 1195 | "\\mathsfbfit{E}": "𝙀", 1196 | "\\mathsfbfit{F}": "𝙁", 1197 | "\\mathsfbfit{G}": "𝙂", 1198 | "\\mathsfbfit{H}": "𝙃", 1199 | "\\mathsfbfit{I}": "𝙄", 1200 | "\\mathsfbfit{J}": "𝙅", 1201 | "\\mathsfbfit{K}": "𝙆", 1202 | "\\mathsfbfit{L}": "𝙇", 1203 | "\\mathsfbfit{M}": "𝙈", 1204 | "\\mathsfbfit{N}": "𝙉", 1205 | "\\mathsfbfit{O}": "𝙊", 1206 | "\\mathsfbfit{P}": "𝙋", 1207 | "\\mathsfbfit{Q}": "𝙌", 1208 | "\\mathsfbfit{R}": "𝙍", 1209 | "\\mathsfbfit{S}": "𝙎", 1210 | "\\mathsfbfit{T}": "𝙏", 1211 | "\\mathsfbfit{U}": "𝙐", 1212 | "\\mathsfbfit{V}": "𝙑", 1213 | "\\mathsfbfit{W}": "𝙒", 1214 | "\\mathsfbfit{X}": "𝙓", 1215 | "\\mathsfbfit{Y}": "𝙔", 1216 | "\\mathsfbfit{Z}": "𝙕", 1217 | "\\mathsfbfit{\\Delta}": "𝞓", 1218 | "\\mathsfbfit{\\Gamma}": "𝞒", 1219 | "\\mathsfbfit{\\Lambda}": "𝞚", 1220 | "\\mathsfbfit{\\Omega}": "𝞨", 1221 | "\\mathsfbfit{\\Phi}": "𝞥", 1222 | "\\mathsfbfit{\\Pi}": "𝞟", 1223 | "\\mathsfbfit{\\Psi}": "𝞧", 1224 | "\\mathsfbfit{\\Sigma}": "𝞢", 1225 | "\\mathsfbfit{\\Theta}": "𝞗", 1226 | "\\mathsfbfit{\\Upsilon}": "𝞤", 1227 | "\\mathsfbfit{\\Xi}": "𝞝", 1228 | "\\mathsfbfit{\\alpha}": "𝞪", 1229 | "\\mathsfbfit{\\beta}": "𝞫", 1230 | "\\mathsfbfit{\\chi}": "𝟀", 1231 | "\\mathsfbfit{\\delta}": "𝞭", 1232 | "\\mathsfbfit{\\epsilon}": "𝟄", 1233 | "\\mathsfbfit{\\eta}": "𝞰", 1234 | "\\mathsfbfit{\\gamma}": "𝞬", 1235 | "\\mathsfbfit{\\iota}": "𝞲", 1236 | "\\mathsfbfit{\\kappa}": "𝞳", 1237 | "\\mathsfbfit{\\lambda}": "𝞴", 1238 | "\\mathsfbfit{\\mu}": "𝞵", 1239 | "\\mathsfbfit{\\nu}": "𝞶", 1240 | "\\mathsfbfit{\\omega}": "𝟂", 1241 | "\\mathsfbfit{\\phi}": "𝟇", 1242 | "\\mathsfbfit{\\pi}": "𝞹", 1243 | "\\mathsfbfit{\\psi}": "𝟁", 1244 | "\\mathsfbfit{\\rho}": "𝞺", 1245 | "\\mathsfbfit{\\sigma}": "𝞼", 1246 | "\\mathsfbfit{\\tau}": "𝞽", 1247 | "\\mathsfbfit{\\theta}": "𝞱", 1248 | "\\mathsfbfit{\\upsilon}": "𝞾", 1249 | "\\mathsfbfit{\\varepsilon}": "𝞮", 1250 | "\\mathsfbfit{\\varphi}": "𝞿", 1251 | "\\mathsfbfit{\\varpi}": "𝟉", 1252 | "\\mathsfbfit{\\varrho}": "𝟈", 1253 | "\\mathsfbfit{\\varsigma}": "𝞻", 1254 | "\\mathsfbfit{\\vartheta}": "𝟅", 1255 | "\\mathsfbfit{\\xi}": "𝞷", 1256 | "\\mathsfbfit{\\zeta}": "𝞯", 1257 | "\\mathsfbfit{a}": "𝙖", 1258 | "\\mathsfbfit{b}": "𝙗", 1259 | "\\mathsfbfit{c}": "𝙘", 1260 | "\\mathsfbfit{d}": "𝙙", 1261 | "\\mathsfbfit{e}": "𝙚", 1262 | "\\mathsfbfit{f}": "𝙛", 1263 | "\\mathsfbfit{g}": "𝙜", 1264 | "\\mathsfbfit{h}": "𝙝", 1265 | "\\mathsfbfit{i}": "𝙞", 1266 | "\\mathsfbfit{j}": "𝙟", 1267 | "\\mathsfbfit{k}": "𝙠", 1268 | "\\mathsfbfit{l}": "𝙡", 1269 | "\\mathsfbfit{m}": "𝙢", 1270 | "\\mathsfbfit{n}": "𝙣", 1271 | "\\mathsfbfit{o}": "𝙤", 1272 | "\\mathsfbfit{p}": "𝙥", 1273 | "\\mathsfbfit{q}": "𝙦", 1274 | "\\mathsfbfit{r}": "𝙧", 1275 | "\\mathsfbfit{s}": "𝙨", 1276 | "\\mathsfbfit{t}": "𝙩", 1277 | "\\mathsfbfit{u}": "𝙪", 1278 | "\\mathsfbfit{v}": "𝙫", 1279 | "\\mathsfbfit{w}": "𝙬", 1280 | "\\mathsfbfit{x}": "𝙭", 1281 | "\\mathsfbfit{y}": "𝙮", 1282 | "\\mathsfbfit{z}": "𝙯", 1283 | "\\mathsfbf{0}": "𝟬", 1284 | "\\mathsfbf{1}": "𝟭", 1285 | "\\mathsfbf{2}": "𝟮", 1286 | "\\mathsfbf{3}": "𝟯", 1287 | "\\mathsfbf{4}": "𝟰", 1288 | "\\mathsfbf{5}": "𝟱", 1289 | "\\mathsfbf{6}": "𝟲", 1290 | "\\mathsfbf{7}": "𝟳", 1291 | "\\mathsfbf{8}": "𝟴", 1292 | "\\mathsfbf{9}": "𝟵", 1293 | "\\mathsfbf{A}": "𝗔", 1294 | "\\mathsfbf{B}": "𝗕", 1295 | "\\mathsfbf{C}": "𝗖", 1296 | "\\mathsfbf{D}": "𝗗", 1297 | "\\mathsfbf{E}": "𝗘", 1298 | "\\mathsfbf{F}": "𝗙", 1299 | "\\mathsfbf{G}": "𝗚", 1300 | "\\mathsfbf{H}": "𝗛", 1301 | "\\mathsfbf{I}": "𝗜", 1302 | "\\mathsfbf{J}": "𝗝", 1303 | "\\mathsfbf{K}": "𝗞", 1304 | "\\mathsfbf{L}": "𝗟", 1305 | "\\mathsfbf{M}": "𝗠", 1306 | "\\mathsfbf{N}": "𝗡", 1307 | "\\mathsfbf{O}": "𝗢", 1308 | "\\mathsfbf{P}": "𝗣", 1309 | "\\mathsfbf{Q}": "𝗤", 1310 | "\\mathsfbf{R}": "𝗥", 1311 | "\\mathsfbf{S}": "𝗦", 1312 | "\\mathsfbf{T}": "𝗧", 1313 | "\\mathsfbf{U}": "𝗨", 1314 | "\\mathsfbf{V}": "𝗩", 1315 | "\\mathsfbf{W}": "𝗪", 1316 | "\\mathsfbf{X}": "𝗫", 1317 | "\\mathsfbf{Y}": "𝗬", 1318 | "\\mathsfbf{Z}": "𝗭", 1319 | "\\mathsfbf{\\Delta}": "𝝙", 1320 | "\\mathsfbf{\\Gamma}": "𝝘", 1321 | "\\mathsfbf{\\Lambda}": "𝝠", 1322 | "\\mathsfbf{\\Omega}": "𝝮", 1323 | "\\mathsfbf{\\Phi}": "𝝫", 1324 | "\\mathsfbf{\\Pi}": "𝝥", 1325 | "\\mathsfbf{\\Psi}": "𝝭", 1326 | "\\mathsfbf{\\Sigma}": "𝝨", 1327 | "\\mathsfbf{\\Theta}": "𝝝", 1328 | "\\mathsfbf{\\Upsilon}": "𝝪", 1329 | "\\mathsfbf{\\Xi}": "𝝣", 1330 | "\\mathsfbf{\\alpha}": "𝝰", 1331 | "\\mathsfbf{\\beta}": "𝝱", 1332 | "\\mathsfbf{\\chi}": "𝞆", 1333 | "\\mathsfbf{\\delta}": "𝝳", 1334 | "\\mathsfbf{\\epsilon}": "𝞊", 1335 | "\\mathsfbf{\\eta}": "𝝶", 1336 | "\\mathsfbf{\\gamma}": "𝝲", 1337 | "\\mathsfbf{\\iota}": "𝝸", 1338 | "\\mathsfbf{\\kappa}": "𝝹", 1339 | "\\mathsfbf{\\lambda}": "𝝺", 1340 | "\\mathsfbf{\\mu}": "𝝻", 1341 | "\\mathsfbf{\\nu}": "𝝼", 1342 | "\\mathsfbf{\\omega}": "𝞈", 1343 | "\\mathsfbf{\\phi}": "𝞍", 1344 | "\\mathsfbf{\\pi}": "𝝿", 1345 | "\\mathsfbf{\\psi}": "𝞇", 1346 | "\\mathsfbf{\\rho}": "𝞀", 1347 | "\\mathsfbf{\\sigma}": "𝞂", 1348 | "\\mathsfbf{\\tau}": "𝞃", 1349 | "\\mathsfbf{\\theta}": "𝝷", 1350 | "\\mathsfbf{\\upsilon}": "𝞄", 1351 | "\\mathsfbf{\\varepsilon}": "𝝴", 1352 | "\\mathsfbf{\\varphi}": "𝞅", 1353 | "\\mathsfbf{\\varpi}": "𝞏", 1354 | "\\mathsfbf{\\varrho}": "𝞎", 1355 | "\\mathsfbf{\\varsigma}": "𝞁", 1356 | "\\mathsfbf{\\vartheta}": "𝞋", 1357 | "\\mathsfbf{\\xi}": "𝝽", 1358 | "\\mathsfbf{\\zeta}": "𝝵", 1359 | "\\mathsfbf{a}": "𝗮", 1360 | "\\mathsfbf{b}": "𝗯", 1361 | "\\mathsfbf{c}": "𝗰", 1362 | "\\mathsfbf{d}": "𝗱", 1363 | "\\mathsfbf{e}": "𝗲", 1364 | "\\mathsfbf{f}": "𝗳", 1365 | "\\mathsfbf{g}": "𝗴", 1366 | "\\mathsfbf{h}": "𝗵", 1367 | "\\mathsfbf{i}": "𝗶", 1368 | "\\mathsfbf{j}": "𝗷", 1369 | "\\mathsfbf{k}": "𝗸", 1370 | "\\mathsfbf{l}": "𝗹", 1371 | "\\mathsfbf{m}": "𝗺", 1372 | "\\mathsfbf{n}": "𝗻", 1373 | "\\mathsfbf{o}": "𝗼", 1374 | "\\mathsfbf{p}": "𝗽", 1375 | "\\mathsfbf{q}": "𝗾", 1376 | "\\mathsfbf{r}": "𝗿", 1377 | "\\mathsfbf{s}": "𝘀", 1378 | "\\mathsfbf{t}": "𝘁", 1379 | "\\mathsfbf{u}": "𝘂", 1380 | "\\mathsfbf{v}": "𝘃", 1381 | "\\mathsfbf{w}": "𝘄", 1382 | "\\mathsfbf{x}": "𝘅", 1383 | "\\mathsfbf{y}": "𝘆", 1384 | "\\mathsfbf{z}": "𝘇", 1385 | "\\mathsfit{A}": "𝘈", 1386 | "\\mathsfit{B}": "𝘉", 1387 | "\\mathsfit{C}": "𝘊", 1388 | "\\mathsfit{D}": "𝘋", 1389 | "\\mathsfit{E}": "𝘌", 1390 | "\\mathsfit{F}": "𝘍", 1391 | "\\mathsfit{G}": "𝘎", 1392 | "\\mathsfit{H}": "𝘏", 1393 | "\\mathsfit{I}": "𝘐", 1394 | "\\mathsfit{J}": "𝘑", 1395 | "\\mathsfit{K}": "𝘒", 1396 | "\\mathsfit{L}": "𝘓", 1397 | "\\mathsfit{M}": "𝘔", 1398 | "\\mathsfit{N}": "𝘕", 1399 | "\\mathsfit{O}": "𝘖", 1400 | "\\mathsfit{P}": "𝘗", 1401 | "\\mathsfit{Q}": "𝘘", 1402 | "\\mathsfit{R}": "𝘙", 1403 | "\\mathsfit{S}": "𝘚", 1404 | "\\mathsfit{T}": "𝘛", 1405 | "\\mathsfit{U}": "𝘜", 1406 | "\\mathsfit{V}": "𝘝", 1407 | "\\mathsfit{W}": "𝘞", 1408 | "\\mathsfit{X}": "𝘟", 1409 | "\\mathsfit{Y}": "𝘠", 1410 | "\\mathsfit{Z}": "𝘡", 1411 | "\\mathsfit{a}": "𝘢", 1412 | "\\mathsfit{b}": "𝘣", 1413 | "\\mathsfit{c}": "𝘤", 1414 | "\\mathsfit{d}": "𝘥", 1415 | "\\mathsfit{e}": "𝘦", 1416 | "\\mathsfit{f}": "𝘧", 1417 | "\\mathsfit{g}": "𝘨", 1418 | "\\mathsfit{h}": "𝘩", 1419 | "\\mathsfit{i}": "𝘪", 1420 | "\\mathsfit{j}": "𝘫", 1421 | "\\mathsfit{k}": "𝘬", 1422 | "\\mathsfit{l}": "𝘭", 1423 | "\\mathsfit{m}": "𝘮", 1424 | "\\mathsfit{n}": "𝘯", 1425 | "\\mathsfit{o}": "𝘰", 1426 | "\\mathsfit{p}": "𝘱", 1427 | "\\mathsfit{q}": "𝘲", 1428 | "\\mathsfit{r}": "𝘳", 1429 | "\\mathsfit{s}": "𝘴", 1430 | "\\mathsfit{t}": "𝘵", 1431 | "\\mathsfit{u}": "𝘶", 1432 | "\\mathsfit{v}": "𝘷", 1433 | "\\mathsfit{w}": "𝘸", 1434 | "\\mathsfit{x}": "𝘹", 1435 | "\\mathsfit{y}": "𝘺", 1436 | "\\mathsfit{z}": "𝘻", 1437 | "\\mathsf{0}": "𝟢", 1438 | "\\mathsf{1}": "𝟣", 1439 | "\\mathsf{2}": "𝟤", 1440 | "\\mathsf{3}": "𝟥", 1441 | "\\mathsf{4}": "𝟦", 1442 | "\\mathsf{5}": "𝟧", 1443 | "\\mathsf{6}": "𝟨", 1444 | "\\mathsf{7}": "𝟩", 1445 | "\\mathsf{8}": "𝟪", 1446 | "\\mathsf{9}": "𝟫", 1447 | "\\mathsf{A}": "𝖠", 1448 | "\\mathsf{B}": "𝖡", 1449 | "\\mathsf{C}": "𝖢", 1450 | "\\mathsf{D}": "𝖣", 1451 | "\\mathsf{E}": "𝖤", 1452 | "\\mathsf{F}": "𝖥", 1453 | "\\mathsf{G}": "𝖦", 1454 | "\\mathsf{H}": "𝖧", 1455 | "\\mathsf{I}": "𝖨", 1456 | "\\mathsf{J}": "𝖩", 1457 | "\\mathsf{K}": "𝖪", 1458 | "\\mathsf{L}": "𝖫", 1459 | "\\mathsf{M}": "𝖬", 1460 | "\\mathsf{N}": "𝖭", 1461 | "\\mathsf{O}": "𝖮", 1462 | "\\mathsf{P}": "𝖯", 1463 | "\\mathsf{Q}": "𝖰", 1464 | "\\mathsf{R}": "𝖱", 1465 | "\\mathsf{S}": "𝖲", 1466 | "\\mathsf{T}": "𝖳", 1467 | "\\mathsf{U}": "𝖴", 1468 | "\\mathsf{V}": "𝖵", 1469 | "\\mathsf{W}": "𝖶", 1470 | "\\mathsf{X}": "𝖷", 1471 | "\\mathsf{Y}": "𝖸", 1472 | "\\mathsf{Z}": "𝖹", 1473 | "\\mathsf{a}": "𝖺", 1474 | "\\mathsf{b}": "𝖻", 1475 | "\\mathsf{c}": "𝖼", 1476 | "\\mathsf{d}": "𝖽", 1477 | "\\mathsf{e}": "𝖾", 1478 | "\\mathsf{f}": "𝖿", 1479 | "\\mathsf{g}": "𝗀", 1480 | "\\mathsf{h}": "𝗁", 1481 | "\\mathsf{i}": "𝗂", 1482 | "\\mathsf{j}": "𝗃", 1483 | "\\mathsf{k}": "𝗄", 1484 | "\\mathsf{l}": "𝗅", 1485 | "\\mathsf{m}": "𝗆", 1486 | "\\mathsf{n}": "𝗇", 1487 | "\\mathsf{o}": "𝗈", 1488 | "\\mathsf{p}": "𝗉", 1489 | "\\mathsf{q}": "𝗊", 1490 | "\\mathsf{r}": "𝗋", 1491 | "\\mathsf{s}": "𝗌", 1492 | "\\mathsf{t}": "𝗍", 1493 | "\\mathsf{u}": "𝗎", 1494 | "\\mathsf{v}": "𝗏", 1495 | "\\mathsf{w}": "𝗐", 1496 | "\\mathsf{x}": "𝗑", 1497 | "\\mathsf{y}": "𝗒", 1498 | "\\mathsf{z}": "𝗓", 1499 | "\\mathtt{0}": "𝟶", 1500 | "\\mathtt{1}": "𝟷", 1501 | "\\mathtt{2}": "𝟸", 1502 | "\\mathtt{3}": "𝟹", 1503 | "\\mathtt{4}": "𝟺", 1504 | "\\mathtt{5}": "𝟻", 1505 | "\\mathtt{6}": "𝟼", 1506 | "\\mathtt{7}": "𝟽", 1507 | "\\mathtt{8}": "𝟾", 1508 | "\\mathtt{9}": "𝟿", 1509 | "\\mathtt{A}": "𝙰", 1510 | "\\mathtt{B}": "𝙱", 1511 | "\\mathtt{C}": "𝙲", 1512 | "\\mathtt{D}": "𝙳", 1513 | "\\mathtt{E}": "𝙴", 1514 | "\\mathtt{F}": "𝙵", 1515 | "\\mathtt{G}": "𝙶", 1516 | "\\mathtt{H}": "𝙷", 1517 | "\\mathtt{I}": "𝙸", 1518 | "\\mathtt{J}": "𝙹", 1519 | "\\mathtt{K}": "𝙺", 1520 | "\\mathtt{L}": "𝙻", 1521 | "\\mathtt{M}": "𝙼", 1522 | "\\mathtt{N}": "𝙽", 1523 | "\\mathtt{O}": "𝙾", 1524 | "\\mathtt{P}": "𝙿", 1525 | "\\mathtt{Q}": "𝚀", 1526 | "\\mathtt{R}": "𝚁", 1527 | "\\mathtt{S}": "𝚂", 1528 | "\\mathtt{T}": "𝚃", 1529 | "\\mathtt{U}": "𝚄", 1530 | "\\mathtt{V}": "𝚅", 1531 | "\\mathtt{W}": "𝚆", 1532 | "\\mathtt{X}": "𝚇", 1533 | "\\mathtt{Y}": "𝚈", 1534 | "\\mathtt{Z}": "𝚉", 1535 | "\\mathtt{a}": "𝚊", 1536 | "\\mathtt{b}": "𝚋", 1537 | "\\mathtt{c}": "𝚌", 1538 | "\\mathtt{d}": "𝚍", 1539 | "\\mathtt{e}": "𝚎", 1540 | "\\mathtt{f}": "𝚏", 1541 | "\\mathtt{g}": "𝚐", 1542 | "\\mathtt{h}": "𝚑", 1543 | "\\mathtt{i}": "𝚒", 1544 | "\\mathtt{j}": "𝚓", 1545 | "\\mathtt{k}": "𝚔", 1546 | "\\mathtt{l}": "𝚕", 1547 | "\\mathtt{m}": "𝚖", 1548 | "\\mathtt{n}": "𝚗", 1549 | "\\mathtt{o}": "𝚘", 1550 | "\\mathtt{p}": "𝚙", 1551 | "\\mathtt{q}": "𝚚", 1552 | "\\mathtt{r}": "𝚛", 1553 | "\\mathtt{s}": "𝚜", 1554 | "\\mathtt{t}": "𝚝", 1555 | "\\mathtt{u}": "𝚞", 1556 | "\\mathtt{v}": "𝚟", 1557 | "\\mathtt{w}": "𝚠", 1558 | "\\mathtt{x}": "𝚡", 1559 | "\\mathtt{y}": "𝚢", 1560 | "\\mathtt{z}": "𝚣", 1561 | "\\mbfAlpha": "𝚨", 1562 | "\\mbfBeta": "𝚩", 1563 | "\\mbfChi": "𝚾", 1564 | "\\mbfDigamma": "𝟊", 1565 | "\\mbfEpsilon": "𝚬", 1566 | "\\mbfEta": "𝚮", 1567 | "\\mbfIota": "𝚰", 1568 | "\\mbfKappa": "𝚱", 1569 | "\\mbfMu": "𝚳", 1570 | "\\mbfNu": "𝚴", 1571 | "\\mbfOmicron": "𝚶", 1572 | "\\mbfRho": "𝚸", 1573 | "\\mbfTau": "𝚻", 1574 | "\\mbfZeta": "𝚭", 1575 | "\\mbfdigamma": "𝟋", 1576 | "\\mbffrakA": "𝕬", 1577 | "\\mbffrakB": "𝕭", 1578 | "\\mbffrakC": "𝕮", 1579 | "\\mbffrakD": "𝕯", 1580 | "\\mbffrakE": "𝕰", 1581 | "\\mbffrakF": "𝕱", 1582 | "\\mbffrakG": "𝕲", 1583 | "\\mbffrakH": "𝕳", 1584 | "\\mbffrakI": "𝕴", 1585 | "\\mbffrakJ": "𝕵", 1586 | "\\mbffrakK": "𝕶", 1587 | "\\mbffrakL": "𝕷", 1588 | "\\mbffrakM": "𝕸", 1589 | "\\mbffrakN": "𝕹", 1590 | "\\mbffrakO": "𝕺", 1591 | "\\mbffrakP": "𝕻", 1592 | "\\mbffrakQ": "𝕼", 1593 | "\\mbffrakR": "𝕽", 1594 | "\\mbffrakS": "𝕾", 1595 | "\\mbffrakT": "𝕿", 1596 | "\\mbffrakU": "𝖀", 1597 | "\\mbffrakV": "𝖁", 1598 | "\\mbffrakW": "𝖂", 1599 | "\\mbffrakX": "𝖃", 1600 | "\\mbffrakY": "𝖄", 1601 | "\\mbffrakZ": "𝖅", 1602 | "\\mbffraka": "𝖆", 1603 | "\\mbffrakb": "𝖇", 1604 | "\\mbffrakc": "𝖈", 1605 | "\\mbffrakd": "𝖉", 1606 | "\\mbffrake": "𝖊", 1607 | "\\mbffrakf": "𝖋", 1608 | "\\mbffrakg": "𝖌", 1609 | "\\mbffrakh": "𝖍", 1610 | "\\mbffraki": "𝖎", 1611 | "\\mbffrakj": "𝖏", 1612 | "\\mbffrakk": "𝖐", 1613 | "\\mbffrakl": "𝖑", 1614 | "\\mbffrakm": "𝖒", 1615 | "\\mbffrakn": "𝖓", 1616 | "\\mbffrako": "𝖔", 1617 | "\\mbffrakp": "𝖕", 1618 | "\\mbffrakq": "𝖖", 1619 | "\\mbffrakr": "𝖗", 1620 | "\\mbffraks": "𝖘", 1621 | "\\mbffrakt": "𝖙", 1622 | "\\mbffraku": "𝖚", 1623 | "\\mbffrakv": "𝖛", 1624 | "\\mbffrakw": "𝖜", 1625 | "\\mbffrakx": "𝖝", 1626 | "\\mbffraky": "𝖞", 1627 | "\\mbffrakz": "𝖟", 1628 | "\\mbfitAlpha": "𝜜", 1629 | "\\mbfitBeta": "𝜝", 1630 | "\\mbfitChi": "𝜲", 1631 | "\\mbfitEpsilon": "𝜠", 1632 | "\\mbfitEta": "𝜢", 1633 | "\\mbfitIota": "𝜤", 1634 | "\\mbfitKappa": "𝜥", 1635 | "\\mbfitMu": "𝜧", 1636 | "\\mbfitNu": "𝜨", 1637 | "\\mbfitOmicron": "𝜪", 1638 | "\\mbfitRho": "𝜬", 1639 | "\\mbfitTau": "𝜯", 1640 | "\\mbfitZeta": "𝜡", 1641 | "\\mbfitnabla": "𝜵", 1642 | "\\mbfitomicron": "𝝄", 1643 | "\\mbfitpartial": "𝝏", 1644 | "\\mbfitsansAlpha": "𝞐", 1645 | "\\mbfitsansBeta": "𝞑", 1646 | "\\mbfitsansChi": "𝞦", 1647 | "\\mbfitsansEpsilon": "𝞔", 1648 | "\\mbfitsansEta": "𝞖", 1649 | "\\mbfitsansIota": "𝞘", 1650 | "\\mbfitsansKappa": "𝞙", 1651 | "\\mbfitsansMu": "𝞛", 1652 | "\\mbfitsansNu": "𝞜", 1653 | "\\mbfitsansOmicron": "𝞞", 1654 | "\\mbfitsansRho": "𝞠", 1655 | "\\mbfitsansTau": "𝞣", 1656 | "\\mbfitsansZeta": "𝞕", 1657 | "\\mbfitsansnabla": "𝞩", 1658 | "\\mbfitsansomicron": "𝞸", 1659 | "\\mbfitsanspartial": "𝟃", 1660 | "\\mbfitsansvarTheta": "𝞡", 1661 | "\\mbfitsansvarkappa": "𝟆", 1662 | "\\mbfitvarTheta": "𝜭", 1663 | "\\mbfitvarkappa": "𝝒", 1664 | "\\mbfnabla": "𝛁", 1665 | "\\mbfomicron": "𝛐", 1666 | "\\mbfpartial": "𝛛", 1667 | "\\mbfsansAlpha": "𝝖", 1668 | "\\mbfsansBeta": "𝝗", 1669 | "\\mbfsansChi": "𝝬", 1670 | "\\mbfsansEpsilon": "𝝚", 1671 | "\\mbfsansEta": "𝝜", 1672 | "\\mbfsansIota": "𝝞", 1673 | "\\mbfsansKappa": "𝝟", 1674 | "\\mbfsansMu": "𝝡", 1675 | "\\mbfsansNu": "𝝢", 1676 | "\\mbfsansOmicron": "𝝤", 1677 | "\\mbfsansRho": "𝝦", 1678 | "\\mbfsansTau": "𝝩", 1679 | "\\mbfsansZeta": "𝝛", 1680 | "\\mbfsansnabla": "𝝯", 1681 | "\\mbfsansomicron": "𝝾", 1682 | "\\mbfsanspartial": "𝞉", 1683 | "\\mbfsansvarTheta": "𝝧", 1684 | "\\mbfsansvarkappa": "𝞌", 1685 | "\\mbfscrA": "𝓐", 1686 | "\\mbfscrB": "𝓑", 1687 | "\\mbfscrC": "𝓒", 1688 | "\\mbfscrD": "𝓓", 1689 | "\\mbfscrE": "𝓔", 1690 | "\\mbfscrF": "𝓕", 1691 | "\\mbfscrG": "𝓖", 1692 | "\\mbfscrH": "𝓗", 1693 | "\\mbfscrI": "𝓘", 1694 | "\\mbfscrJ": "𝓙", 1695 | "\\mbfscrK": "𝓚", 1696 | "\\mbfscrL": "𝓛", 1697 | "\\mbfscrM": "𝓜", 1698 | "\\mbfscrN": "𝓝", 1699 | "\\mbfscrO": "𝓞", 1700 | "\\mbfscrP": "𝓟", 1701 | "\\mbfscrQ": "𝓠", 1702 | "\\mbfscrR": "𝓡", 1703 | "\\mbfscrS": "𝓢", 1704 | "\\mbfscrT": "𝓣", 1705 | "\\mbfscrU": "𝓤", 1706 | "\\mbfscrV": "𝓥", 1707 | "\\mbfscrW": "𝓦", 1708 | "\\mbfscrX": "𝓧", 1709 | "\\mbfscrY": "𝓨", 1710 | "\\mbfscrZ": "𝓩", 1711 | "\\mbfscra": "𝓪", 1712 | "\\mbfscrb": "𝓫", 1713 | "\\mbfscrc": "𝓬", 1714 | "\\mbfscrd": "𝓭", 1715 | "\\mbfscre": "𝓮", 1716 | "\\mbfscrf": "𝓯", 1717 | "\\mbfscrg": "𝓰", 1718 | "\\mbfscrh": "𝓱", 1719 | "\\mbfscri": "𝓲", 1720 | "\\mbfscrj": "𝓳", 1721 | "\\mbfscrk": "𝓴", 1722 | "\\mbfscrl": "𝓵", 1723 | "\\mbfscrm": "𝓶", 1724 | "\\mbfscrn": "𝓷", 1725 | "\\mbfscro": "𝓸", 1726 | "\\mbfscrp": "𝓹", 1727 | "\\mbfscrq": "𝓺", 1728 | "\\mbfscrr": "𝓻", 1729 | "\\mbfscrs": "𝓼", 1730 | "\\mbfscrt": "𝓽", 1731 | "\\mbfscru": "𝓾", 1732 | "\\mbfscrv": "𝓿", 1733 | "\\mbfscrw": "𝔀", 1734 | "\\mbfscrx": "𝔁", 1735 | "\\mbfscry": "𝔂", 1736 | "\\mbfscrz": "𝔃", 1737 | "\\mbfvarTheta": "𝚹", 1738 | "\\mbfvarkappa": "𝛞", 1739 | "\\mdblkdiamond": "⬥", 1740 | "\\mdblklozenge": "⬧", 1741 | "\\mdlgblksquare": "■", 1742 | "\\mdlgwhtsquare": "□", 1743 | "\\mdsmblksquare": "◾", 1744 | "\\mdsmwhtcircle": "⚬", 1745 | "\\mdsmwhtsquare": "◽", 1746 | "\\mdwhtdiamond": "⬦", 1747 | "\\mdwhtlozenge": "⬨", 1748 | "\\measangledltosw": "⦯", 1749 | "\\measangledrtose": "⦮", 1750 | "\\measangleldtosw": "⦫", 1751 | "\\measanglelutonw": "⦩", 1752 | "\\measanglerdtose": "⦪", 1753 | "\\measanglerutone": "⦨", 1754 | "\\measangleultonw": "⦭", 1755 | "\\measangleurtone": "⦬", 1756 | "\\measeq": "≞", 1757 | "\\measuredangle": "∡", 1758 | "\\measuredangleleft": "⦛", 1759 | "\\measuredrightangle": "⊾", 1760 | "\\medblackstar": "⭑", 1761 | "\\medbullet": "⚫", 1762 | "\\medcirc": "⚪", 1763 | "\\medwhitestar": "⭐", 1764 | "\\mercury": "☿", 1765 | "\\mho": "℧", 1766 | "\\mid": "∣", 1767 | "\\midbarvee": "⩝", 1768 | "\\midbarwedge": "⩜", 1769 | "\\midcir": "⫰", 1770 | "\\minusdot": "⨪", 1771 | "\\minusfdots": "⨫", 1772 | "\\minusrdots": "⨬", 1773 | "\\mitAlpha": "𝛢", 1774 | "\\mitBeta": "𝛣", 1775 | "\\mitChi": "𝛸", 1776 | "\\mitEpsilon": "𝛦", 1777 | "\\mitEta": "𝛨", 1778 | "\\mitIota": "𝛪", 1779 | "\\mitKappa": "𝛫", 1780 | "\\mitMu": "𝛭", 1781 | "\\mitNu": "𝛮", 1782 | "\\mitOmicron": "𝛰", 1783 | "\\mitRho": "𝛲", 1784 | "\\mitTau": "𝛵", 1785 | "\\mitZeta": "𝛧", 1786 | "\\mitnabla": "𝛻", 1787 | "\\mitomicron": "𝜊", 1788 | "\\mitvarTheta": "𝛳", 1789 | "\\mlcp": "⫛", 1790 | "\\models": "⊧", 1791 | "\\modtwosum": "⨊", 1792 | "\\mp": "∓", 1793 | "\\mu": "𝜇", 1794 | "\\multimap": "⊸", 1795 | "\\multimapboth": "⧟", 1796 | "\\multimapdotbothA": "⊶", 1797 | "\\multimapdotbothB": "⊷", 1798 | "\\multimapinv": "⟜", 1799 | "\\nHdownarrow": "⇟", 1800 | "\\nHuparrow": "⇞", 1801 | "\\nLeftarrow": "⇍", 1802 | "\\nLeftrightarrow": "⇎", 1803 | "\\nRightarrow": "⇏", 1804 | "\\nVDash": "⊯", 1805 | "\\nVdash": "⊮", 1806 | "\\nVleftarrow": "⇺", 1807 | "\\nVleftarrowtail": "⬺", 1808 | "\\nVleftrightarrow": "⇼", 1809 | "\\nVtwoheadleftarrow": "⬵", 1810 | "\\nVtwoheadleftarrowtail": "⬽", 1811 | "\\nVtwoheadrightarrow": "⤁", 1812 | "\\nVtwoheadrightarrowtail": "⤘", 1813 | "\\nabla": "∇", 1814 | "\\napprox": "≉", 1815 | "\\natural": "♮", 1816 | "\\ncong": "≇", 1817 | "\\nearrow": "↗", 1818 | "\\neg": "¬", 1819 | "\\neovnwarrow": "⤱", 1820 | "\\neovsearrow": "⤮", 1821 | "\\neptune": "♆", 1822 | "\\neq": "≠", 1823 | "\\nequiv": "≢", 1824 | "\\neswarrow": "⤢", 1825 | "\\neuter": "⚲", 1826 | "\\nexists": "∄", 1827 | "\\ngeq": "≱", 1828 | "\\ngtr": "≯", 1829 | "\\nhVvert": "⫵", 1830 | "\\nhpar": "⫲", 1831 | "\\ni": "∋", 1832 | "\\niobar": "⋾", 1833 | "\\nis": "⋼", 1834 | "\\nisd": "⋺", 1835 | "\\nleftarrow": "↚", 1836 | "\\nleftrightarrow": "↮", 1837 | "\\nleq": "≰", 1838 | "\\nless": "≮", 1839 | "\\nlessgtr": "≸", 1840 | "\\nmid": "∤", 1841 | "\\nni": "∌", 1842 | "\\not": "̸", 1843 | "\\notasymp": "≭", 1844 | "\\notbackslash": "⍀", 1845 | "\\notin": "∉", 1846 | "\\notslash": "⌿", 1847 | "\\nparallel": "∦", 1848 | "\\npolint": "⨔", 1849 | "\\nprec": "⊀", 1850 | "\\npreceq": "⋠", 1851 | "\\nrightarrow": "↛", 1852 | "\\nsim": "≁", 1853 | "\\nsimeq": "≄", 1854 | "\\nsqsubseteq": "⋢", 1855 | "\\nsqsupseteq": "⋣", 1856 | "\\nsubset": "⊄", 1857 | "\\nsubseteq": "⊈", 1858 | "\\nsucc": "⊁", 1859 | "\\nsucceq": "⋡", 1860 | "\\nsupset": "⊅", 1861 | "\\nsupseteq": "⊉", 1862 | "\\ntriangleleft": "⋪", 1863 | "\\ntrianglelefteq": "⋬", 1864 | "\\ntriangleright": "⋫", 1865 | "\\ntrianglerighteq": "⋭", 1866 | "\\nu": "𝜈", 1867 | "\\nvDash": "⊭", 1868 | "\\nvLeftarrow": "⤂", 1869 | "\\nvLeftrightarrow": "⤄", 1870 | "\\nvRightarrow": "⤃", 1871 | "\\nvdash": "⊬", 1872 | "\\nvinfty": "⧞", 1873 | "\\nvleftarrow": "⇷", 1874 | "\\nvleftarrowtail": "⬹", 1875 | "\\nvleftrightarrow": "⇹", 1876 | "\\nvtwoheadleftarrow": "⬴", 1877 | "\\nvtwoheadleftarrowtail": "⬼", 1878 | "\\nvtwoheadrightarrowtail": "⤗", 1879 | "\\nwarrow": "↖", 1880 | "\\nwovnearrow": "⤲", 1881 | "\\nwsearrow": "⤡", 1882 | "\\obar": "⌽", 1883 | "\\obot": "⦺", 1884 | "\\obrbrak": "⏠", 1885 | "\\ocommatopright": "̕", 1886 | "\\odiv": "⨸", 1887 | "\\odot": "⊙", 1888 | "\\odotslashdot": "⦼", 1889 | "\\oiiint": "∰", 1890 | "\\oiint": "∯", 1891 | "\\oint": "∮", 1892 | "\\ointctrclockwise": "∳", 1893 | "\\olcross": "⦻", 1894 | "\\omega": "𝜔", 1895 | "\\ominus": "⊖", 1896 | "\\operp": "⦹", 1897 | "\\oplus": "⊕", 1898 | "\\opluslhrim": "⨭", 1899 | "\\oplusrhrim": "⨮", 1900 | "\\oslash": "⊘", 1901 | "\\otimes": "⊗", 1902 | "\\otimeshat": "⨶", 1903 | "\\otimeslhrim": "⨴", 1904 | "\\otimesrhrim": "⨵", 1905 | "\\oturnedcomma": "̒", 1906 | "\\overbrace": "⏞", 1907 | "\\overbracket": "⎴", 1908 | "\\overleftrightarrow": "⃡", 1909 | "\\overline": "̅", 1910 | "\\overparen": "⏜", 1911 | "\\ovhook": "̉", 1912 | "\\parallel": "∥", 1913 | "\\parallelogram": "▱", 1914 | "\\parallelogramblack": "▰", 1915 | "\\parsim": "⫳", 1916 | "\\partial": "∂", 1917 | "\\partialmeetcontraction": "⪣", 1918 | "\\pencil": "✎", 1919 | "\\pentagon": "⬠", 1920 | "\\pentagonblack": "⬟", 1921 | "\\perp": "⟂", 1922 | "\\perps": "⫡", 1923 | "\\pfun": "⇸", 1924 | "\\phi": "𝜙", 1925 | "\\phone": "☎", 1926 | "\\pi": "𝜋", 1927 | "\\pinj": "⤔", 1928 | "\\pisces": "♓", 1929 | "\\pitchfork": "⋔", 1930 | "\\plusdot": "⨥", 1931 | "\\pluseqq": "⩲", 1932 | "\\plushat": "⨣", 1933 | "\\plussim": "⨦", 1934 | "\\plussubtwo": "⨧", 1935 | "\\plustrif": "⨨", 1936 | "\\pluto": "♇", 1937 | "\\pm": "±", 1938 | "\\pointint": "⨕", 1939 | "\\pointright": "☞", 1940 | "\\postalmark": "〒", 1941 | "\\pounds": "£", 1942 | "\\prec": "≺", 1943 | "\\precapprox": "⪷", 1944 | "\\preccurlyeq": "≼", 1945 | "\\preceq": "⪯", 1946 | "\\preceqq": "⪳", 1947 | "\\precnapprox": "⪹", 1948 | "\\precneq": "⪱", 1949 | "\\precneqq": "⪵", 1950 | "\\precnsim": "⋨", 1951 | "\\precsim": "≾", 1952 | "\\prime": "′", 1953 | "\\prod": "∏", 1954 | "\\profline": "⌒", 1955 | "\\profsurf": "⌓", 1956 | "\\propto": "∝", 1957 | "\\prurel": "⊰", 1958 | "\\psi": "𝜓", 1959 | "\\psur": "⤀", 1960 | "\\pullback": "⟓", 1961 | "\\pushout": "⟔", 1962 | "\\qoppa": "ϙ", 1963 | "\\quad": "\u2001", 1964 | "\\quarternote": "♩", 1965 | "\\questeq": "≟", 1966 | "\\rBrace": "⦄", 1967 | "\\radiation": "☢", 1968 | "\\rang": "⟫", 1969 | "\\rangle": "⟩", 1970 | "\\rangledot": "⦒", 1971 | "\\rangledownzigzagarrow": "⍼", 1972 | "\\rblkbrbrak": "⦘", 1973 | "\\rblot": "⦊", 1974 | "\\rbracelend": "⎭", 1975 | "\\rbracemid": "⎬", 1976 | "\\rbraceuend": "⎫", 1977 | "\\rbrack": "]", 1978 | "\\rbrackextender": "⎥", 1979 | "\\rbracklend": "⎦", 1980 | "\\rbracklrtick": "⦎", 1981 | "\\rbrackubar": "⦌", 1982 | "\\rbrackuend": "⎤", 1983 | "\\rbrackurtick": "⦐", 1984 | "\\rbrbrak": "〕", 1985 | "\\rceil": "⌉", 1986 | "\\rcurvyangle": "⧽", 1987 | "\\rdiagovfdiag": "⤫", 1988 | "\\rdiagovsearrow": "⤰", 1989 | "\\recycle": "♻", 1990 | "\\revangle": "⦣", 1991 | "\\revangleubar": "⦥", 1992 | "\\revemptyset": "⦰", 1993 | "\\revnmid": "⫮", 1994 | "\\rfbowtie": "⧒", 1995 | "\\rfloor": "⌋", 1996 | "\\rftimes": "⧕", 1997 | "\\rgroup": "⟯", 1998 | "\\rhd": "▷", 1999 | "\\rho": "𝜌", 2000 | "\\rightangle": "∟", 2001 | "\\rightanglemdot": "⦝", 2002 | "\\rightanglesqr": "⦜", 2003 | "\\rightarrow": "→", 2004 | "\\rightarrowapprox": "⥵", 2005 | "\\rightarrowbackapprox": "⭈", 2006 | "\\rightarrowbsimilar": "⭌", 2007 | "\\rightarrowdiamond": "⤞", 2008 | "\\rightarrowgtr": "⭃", 2009 | "\\rightarrowonoplus": "⟴", 2010 | "\\rightarrowplus": "⥅", 2011 | "\\rightarrowshortleftarrow": "⥂", 2012 | "\\rightarrowsimilar": "⥴", 2013 | "\\rightarrowsupset": "⭄", 2014 | "\\rightarrowtail": "↣", 2015 | "\\rightarrowtriangle": "⇾", 2016 | "\\rightarrowx": "⥇", 2017 | "\\rightbarharpoon": "⥬", 2018 | "\\rightbkarrow": "⤍", 2019 | "\\rightdbltail": "⤜", 2020 | "\\rightdotarrow": "⤑", 2021 | "\\rightdowncurvedarrow": "⤷", 2022 | "\\rightharpoondown": "⇁", 2023 | "\\rightharpoonup": "⇀", 2024 | "\\rightimply": "⥰", 2025 | "\\rightleftarrows": "⇄", 2026 | "\\rightleftharpoon": "⥋", 2027 | "\\rightleftharpoons": "⇌", 2028 | "\\rightleftharpoonsdown": "⥩", 2029 | "\\rightleftharpoonsup": "⥨", 2030 | "\\rightmoon": "☽", 2031 | "\\rightouterjoin": "⟖", 2032 | "\\rightpentagon": "⭔", 2033 | "\\rightpentagonblack": "⭓", 2034 | "\\rightrightarrows": "⇉", 2035 | "\\rightrightharpoons": "⥤", 2036 | "\\rightslice": "⪧", 2037 | "\\rightsquigarrow": "⇝", 2038 | "\\righttail": "⤚", 2039 | "\\rightthreearrows": "⇶", 2040 | "\\rightthreetimes": "⋌", 2041 | "\\rightupdownharpoon": "⥏", 2042 | "\\rightwavearrow": "↝", 2043 | "\\rightwhitearrow": "⇨", 2044 | "\\rimg": "⦈", 2045 | "\\ringplus": "⨢", 2046 | "\\risingdotseq": "≓", 2047 | "\\rmoustache": "⎱", 2048 | "\\rparenextender": "⎟", 2049 | "\\rparengtr": "⦔", 2050 | "\\rparenlend": "⎠", 2051 | "\\rparenuend": "⎞", 2052 | "\\rppolint": "⨒", 2053 | "\\rrbracket": "⟧", 2054 | "\\rsolbar": "⧷", 2055 | "\\rsqhook": "⫎", 2056 | "\\rsub": "⩥", 2057 | "\\rtimes": "⋊", 2058 | "\\rtriltri": "⧎", 2059 | "\\ruledelayed": "⧴", 2060 | "\\rvboxline": "⎹", 2061 | "\\rvzigzag": "⧙", 2062 | "\\sagittarius": "♐", 2063 | "\\sampi": "ϡ", 2064 | "\\sansLmirrored": "⅃", 2065 | "\\sansLturned": "⅂", 2066 | "\\saturn": "♄", 2067 | "\\scorpio": "♏", 2068 | "\\scpolint": "⨓", 2069 | "\\scurel": "⊱", 2070 | "\\searrow": "↘", 2071 | "\\second": "″", 2072 | "\\seovnearrow": "⤭", 2073 | "\\setminus": "⧵", 2074 | "\\sharp": "♯", 2075 | "\\shortdowntack": "⫟", 2076 | "\\shortlefttack": "⫞", 2077 | "\\shortrightarrowleftarrow": "⥄", 2078 | "\\shortuptack": "⫠", 2079 | "\\shuffle": "⧢", 2080 | "\\sigma": "𝜎", 2081 | "\\sim": "∼", 2082 | "\\simeq": "≃", 2083 | "\\simgE": "⪠", 2084 | "\\simgtr": "⪞", 2085 | "\\similarleftarrow": "⭉", 2086 | "\\similarrightarrow": "⥲", 2087 | "\\simlE": "⪟", 2088 | "\\simless": "⪝", 2089 | "\\simminussim": "⩬", 2090 | "\\simneqq": "≆", 2091 | "\\simplus": "⨤", 2092 | "\\simrdots": "⩫", 2093 | "\\sixteenthnote": "♬", 2094 | "\\skull": "☠", 2095 | "\\slash": "̸", 2096 | "\\smallin": "∊", 2097 | "\\smallni": "∍", 2098 | "\\smallsetminus": "∖", 2099 | "\\smalltriangledown": "▿", 2100 | "\\smalltriangleleft": "◃", 2101 | "\\smalltriangleright": "▹", 2102 | "\\smalltriangleup": "▵", 2103 | "\\smashtimes": "⨳", 2104 | "\\smblkdiamond": "⬩", 2105 | "\\smblklozenge": "⬪", 2106 | "\\smblksquare": "▪", 2107 | "\\smeparsl": "⧤", 2108 | "\\smile": "⌣", 2109 | "\\smiley": "☺", 2110 | "\\smt": "⪪", 2111 | "\\smte": "⪬", 2112 | "\\smwhitestar": "⭒", 2113 | "\\smwhtcircle": "◦", 2114 | "\\smwhtlozenge": "⬫", 2115 | "\\smwhtsquare": "▫", 2116 | "\\spadesuit": "♠", 2117 | "\\spddot": "¨", 2118 | "\\sphat": "", 2119 | "\\sphericalangle": "∢", 2120 | "\\sphericalangleup": "⦡", 2121 | "\\spot": "⦁", 2122 | "\\sptilde": "~", 2123 | "\\sqcap": "⊓", 2124 | "\\sqcup": "⊔", 2125 | "\\sqint": "⨖", 2126 | "\\sqrt": "√", 2127 | "\\sqrt[3]": "∛", 2128 | "\\sqrt[4]": "∜", 2129 | "\\sqrtbottom": "⎷", 2130 | "\\sqsubset": "⊏", 2131 | "\\sqsubseteq": "⊑", 2132 | "\\sqsubsetneq": "⋤", 2133 | "\\sqsupset": "⊐", 2134 | "\\sqsupseteq": "⊒", 2135 | "\\sqsupsetneq": "⋥", 2136 | "\\square": "□", 2137 | "\\squarebotblack": "⬓", 2138 | "\\squarecrossfill": "▩", 2139 | "\\squarehfill": "▤", 2140 | "\\squarehvfill": "▦", 2141 | "\\squareleftblack": "◧", 2142 | "\\squarellblack": "⬕", 2143 | "\\squarellquad": "◱", 2144 | "\\squarelrblack": "◪", 2145 | "\\squarelrquad": "◲", 2146 | "\\squareneswfill": "▨", 2147 | "\\squarenwsefill": "▧", 2148 | "\\squarerightblack": "◨", 2149 | "\\squaretopblack": "⬒", 2150 | "\\squareulblack": "◩", 2151 | "\\squareulquad": "◰", 2152 | "\\squareurblack": "⬔", 2153 | "\\squareurquad": "◳", 2154 | "\\squarevfill": "▥", 2155 | "\\squoval": "▢", 2156 | "\\sslash": "⫽", 2157 | "\\star": "⋆", 2158 | "\\stareq": "≛", 2159 | "\\steaming": "☕", 2160 | "\\stigma": "ϛ", 2161 | "\\strictfi": "⥼", 2162 | "\\strictif": "⥽", 2163 | "\\strns": "⏤", 2164 | "\\subedot": "⫃", 2165 | "\\submult": "⫁", 2166 | "\\subrarr": "⥹", 2167 | "\\subset": "⊂", 2168 | "\\subsetapprox": "⫉", 2169 | "\\subsetcirc": "⟃", 2170 | "\\subsetdot": "⪽", 2171 | "\\subseteq": "⊆", 2172 | "\\subseteqq": "⫅", 2173 | "\\subsetneq": "⊊", 2174 | "\\subsetneqq": "⫋", 2175 | "\\subsetplus": "⪿", 2176 | "\\subsim": "⫇", 2177 | "\\subsub": "⫕", 2178 | "\\subsup": "⫓", 2179 | "\\succ": "≻", 2180 | "\\succapprox": "⪸", 2181 | "\\succcurlyeq": "≽", 2182 | "\\succeq": "⪰", 2183 | "\\succeqq": "⪴", 2184 | "\\succnapprox": "⪺", 2185 | "\\succneq": "⪲", 2186 | "\\succneqq": "⪶", 2187 | "\\succnsim": "⋩", 2188 | "\\succsim": "≿", 2189 | "\\sum": "∑", 2190 | "\\sumbottom": "⎳", 2191 | "\\sumint": "⨋", 2192 | "\\sumtop": "⎲", 2193 | "\\sun": "☼", 2194 | "\\supdsub": "⫘", 2195 | "\\supedot": "⫄", 2196 | "\\suphsol": "⟉", 2197 | "\\suphsub": "⫗", 2198 | "\\suplarr": "⥻", 2199 | "\\supmult": "⫂", 2200 | "\\supset": "⊃", 2201 | "\\supsetapprox": "⫊", 2202 | "\\supsetcirc": "⟄", 2203 | "\\supsetdot": "⪾", 2204 | "\\supseteq": "⊇", 2205 | "\\supseteqq": "⫆", 2206 | "\\supsetneq": "⊋", 2207 | "\\supsetneqq": "⫌", 2208 | "\\supsetplus": "⫀", 2209 | "\\supsim": "⫈", 2210 | "\\supsub": "⫔", 2211 | "\\supsup": "⫖", 2212 | "\\swarrow": "↙", 2213 | "\\swords": "⚔", 2214 | "\\talloblong": "⫾", 2215 | "\\tau": "𝜏", 2216 | "\\taurus": "♉", 2217 | "\\tcohm": "Ω", 2218 | "\\therefore": "∴", 2219 | "\\thermod": "⧧", 2220 | "\\theta": "𝜃", 2221 | "\\thinspace": "\u2009", 2222 | "\\third": "‴", 2223 | "\\threedangle": "⟀", 2224 | "\\threedotcolon": "⫶", 2225 | "\\threeunderdot": "⃨", 2226 | "\\tieinfty": "⧝", 2227 | "\\tilde": "̃", 2228 | "\\times": "×", 2229 | "\\timesbar": "⨱", 2230 | "\\tminus": "⧿", 2231 | "\\to": "→", 2232 | "\\toea": "⤨", 2233 | "\\tona": "⤧", 2234 | "\\top": "⊤", 2235 | "\\topbot": "⌶", 2236 | "\\topcir": "⫱", 2237 | "\\topfork": "⫚", 2238 | "\\topsemicircle": "◠", 2239 | "\\tosa": "⤩", 2240 | "\\towa": "⤪", 2241 | "\\tplus": "⧾", 2242 | "\\trapezium": "⏢", 2243 | "\\trianglecdot": "◬", 2244 | "\\triangleleftblack": "◭", 2245 | "\\trianglelefteq": "⊴", 2246 | "\\triangleminus": "⨺", 2247 | "\\triangleodot": "⧊", 2248 | "\\triangleplus": "⨹", 2249 | "\\triangleq": "≜", 2250 | "\\trianglerightblack": "◮", 2251 | "\\trianglerighteq": "⊵", 2252 | "\\triangles": "⧌", 2253 | "\\triangleserifs": "⧍", 2254 | "\\triangletimes": "⨻", 2255 | "\\triangleubar": "⧋", 2256 | "\\tripleplus": "⧻", 2257 | "\\trslash": "⫻", 2258 | "\\turnangle": "⦢", 2259 | "\\turnediota": "℩", 2260 | "\\turnednot": "⌙", 2261 | "\\twocaps": "⩋", 2262 | "\\twocups": "⩊", 2263 | "\\twoheaddownarrow": "↡", 2264 | "\\twoheadleftarrow": "↞", 2265 | "\\twoheadleftarrowtail": "⬻", 2266 | "\\twoheadleftdbkarrow": "⬷", 2267 | "\\twoheadmapsfrom": "⬶", 2268 | "\\twoheadmapsto": "⤅", 2269 | "\\twoheadrightarrow": "↠", 2270 | "\\twoheaduparrow": "↟", 2271 | "\\twoheaduparrowcircle": "⥉", 2272 | "\\twolowline": "‗", 2273 | "\\twonotes": "♫", 2274 | "\\typecolon": "⦂", 2275 | "\\ubrbrak": "⏡", 2276 | "\\ularc": "◜", 2277 | "\\ulblacktriangle": "◤", 2278 | "\\ulcorner": "⌜", 2279 | "\\ultriangle": "◸", 2280 | "\\uminus": "⩁", 2281 | "\\underbar": "̱", 2282 | "\\underbrace": "⏟", 2283 | "\\underbracket": "⎵", 2284 | "\\underleftarrow": "⃮", 2285 | "\\underleftharpoondown": "⃭", 2286 | "\\underline": "̲", 2287 | "\\underparen": "⏝", 2288 | "\\underrightarrow": "⃯", 2289 | "\\underrightharpoondown": "⃬", 2290 | "\\upAlpha": "Α", 2291 | "\\upBeta": "Β", 2292 | "\\upChi": "Χ", 2293 | "\\upEpsilon": "Ε", 2294 | "\\upEta": "Η", 2295 | "\\upIota": "Ι", 2296 | "\\upKappa": "Κ", 2297 | "\\upMu": "Μ", 2298 | "\\upNu": "Ν", 2299 | "\\upOmicron": "Ο", 2300 | "\\upRho": "Ρ", 2301 | "\\upTau": "Τ", 2302 | "\\upUpsilon": "ϒ", 2303 | "\\upZeta": "Ζ", 2304 | "\\uparrow": "↑", 2305 | "\\uparrowbarred": "⤉", 2306 | "\\uparrowoncircle": "⦽", 2307 | "\\updasharrow": "⇡", 2308 | "\\updownarrow": "↕", 2309 | "\\updownarrowbar": "↨", 2310 | "\\updownarrows": "⇅", 2311 | "\\updownharpoonleftright": "⥍", 2312 | "\\updownharpoonrightleft": "⥌", 2313 | "\\updownharpoons": "⥮", 2314 | "\\upfishtail": "⥾", 2315 | "\\upharpoonleft": "↿", 2316 | "\\upharpoonright": "↾", 2317 | "\\upin": "⟒", 2318 | "\\upint": "⨛", 2319 | "\\uplus": "⊎", 2320 | "\\upomicron": "ο", 2321 | "\\uprightcurvearrow": "⤴", 2322 | "\\upsilon": "𝜐", 2323 | "\\upuparrows": "⇈", 2324 | "\\upupharpoons": "⥣", 2325 | "\\upvarTheta": "ϴ", 2326 | "\\upwhitearrow": "⇧", 2327 | "\\uranus": "♅", 2328 | "\\urarc": "◝", 2329 | "\\urblacktriangle": "◥", 2330 | "\\urcorner": "⌝", 2331 | "\\urtriangle": "◹", 2332 | "\\utilde": "̰", 2333 | "\\vBar": "⫨", 2334 | "\\vBarv": "⫩", 2335 | "\\vDash": "⊨", 2336 | "\\vDdash": "⫢", 2337 | "\\varVdash": "⫦", 2338 | "\\varbarwedge": "⌅", 2339 | "\\varbeta": "ϐ", 2340 | "\\varcarriagereturn": "⏎", 2341 | "\\varclubsuit": "♧", 2342 | "\\vardiamondsuit": "♦", 2343 | "\\vardoublebarwedge": "⌆", 2344 | "\\varepsilon": "𝜀", 2345 | "\\varheartsuit": "♥", 2346 | "\\varhexagon": "⬡", 2347 | "\\varhexagonblack": "⬢", 2348 | "\\varhexagonlrbonds": "⌬", 2349 | "\\varisins": "⋳", 2350 | "\\varkappa": "𝜘", 2351 | "\\varlrtriangle": "⊿", 2352 | "\\varniobar": "⋽", 2353 | "\\varnis": "⋻", 2354 | "\\varnothing": "∅", 2355 | "\\varointclockwise": "∲", 2356 | "\\varphi": "𝜑", 2357 | "\\varpi": "𝜛", 2358 | "\\varprod": "⨉", 2359 | "\\varrho": "𝜚", 2360 | "\\varsigma": "𝜍", 2361 | "\\varspadesuit": "♤", 2362 | "\\varstar": "✶", 2363 | "\\vartheta": "𝜗", 2364 | "\\vartriangleleft": "⊲", 2365 | "\\vartriangleright": "⊳", 2366 | "\\varveebar": "⩡", 2367 | "\\vbraceextender": "⎪", 2368 | "\\vdash": "⊢", 2369 | "\\vdots": "⋮", 2370 | "\\vec": "⃗", 2371 | "\\vectimes": "⨯", 2372 | "\\vee": "∨", 2373 | "\\veebar": "⊻", 2374 | "\\veedot": "⟇", 2375 | "\\veedoublebar": "⩣", 2376 | "\\veeeq": "≚", 2377 | "\\veemidvert": "⩛", 2378 | "\\veeodot": "⩒", 2379 | "\\veeonvee": "⩖", 2380 | "\\veeonwedge": "⩙", 2381 | "\\vertoverlay": "⃒", 2382 | "\\viewdata": "⌗", 2383 | "\\virgo": "♍", 2384 | "\\vlongdash": "⟝", 2385 | "\\vrectangle": "▯", 2386 | "\\vrectangleblack": "▮", 2387 | "\\vysmblksquare": "⬝", 2388 | "\\vysmwhtsquare": "⬞", 2389 | "\\vzigzag": "⦚", 2390 | "\\warning": "⚠", 2391 | "\\wasylozenge": "⌑", 2392 | "\\wedge": "∧", 2393 | "\\wedgebar": "⩟", 2394 | "\\wedgedot": "⟑", 2395 | "\\wedgedoublebar": "⩠", 2396 | "\\wedgemidvert": "⩚", 2397 | "\\wedgeodot": "⩑", 2398 | "\\wedgeonwedge": "⩕", 2399 | "\\whitearrowupfrombar": "⇪", 2400 | "\\whiteinwhitetriangle": "⟁", 2401 | "\\whitepointerleft": "◅", 2402 | "\\whitepointerright": "▻", 2403 | "\\whitesquaretickleft": "⟤", 2404 | "\\whitesquaretickright": "⟥", 2405 | "\\whthorzoval": "⬭", 2406 | "\\whtvertoval": "⬯", 2407 | "\\wideangledown": "⦦", 2408 | "\\wideangleup": "⦧", 2409 | "\\widebridgeabove": "⃩", 2410 | "\\wp": "℘", 2411 | "\\wr": "≀", 2412 | "\\xi": "𝜉", 2413 | "\\xsol": "⧸", 2414 | "\\yen": "¥", 2415 | "\\yinyang": "☯", 2416 | "\\zcmp": "⨟", 2417 | "\\zeta": "𝜁", 2418 | "\\zhide": "⧹", 2419 | "\\zpipe": "⨠", 2420 | "\\zproject": "⨡", 2421 | "\\{": "{", 2422 | "\\|": "‖", 2423 | "\\}": "}", 2424 | "^{(}": "⁽", 2425 | "^{)}": "⁾", 2426 | "^{+}": "⁺", 2427 | "^{-}": "⁻", 2428 | "^{0}": "⁰", 2429 | "^{1}": "¹", 2430 | "^{2}": "²", 2431 | "^{3}": "³", 2432 | "^{4}": "⁴", 2433 | "^{5}": "⁵", 2434 | "^{6}": "⁶", 2435 | "^{7}": "⁷", 2436 | "^{8}": "⁸", 2437 | "^{9}": "⁹", 2438 | "^{=}": "⁼", 2439 | "^{A}": "ᴬ", 2440 | "^{B}": "ᴮ", 2441 | "^{C}": "ꟲ", 2442 | "^{D}": "ᴰ", 2443 | "^{E}": "ᴱ", 2444 | "^{F}": "ꟳ", 2445 | "^{G}": "ᴳ", 2446 | "^{H}": "ᴴ", 2447 | "^{I}": "ᴵ", 2448 | "^{J}": "ᴶ", 2449 | "^{K}": "ᴷ", 2450 | "^{L}": "ᴸ", 2451 | "^{M}": "ᴹ", 2452 | "^{N}": "ᴺ", 2453 | "^{O}": "ᴼ", 2454 | "^{P}": "ᴾ", 2455 | "^{Q}": "ꟴ", 2456 | "^{R}": "ᴿ", 2457 | "^{T}": "ᵀ", 2458 | "^{U}": "ᵁ", 2459 | "^{V}": "ⱽ", 2460 | "^{W}": "ᵂ", 2461 | "^{\\ast}": "*", 2462 | "^{\\beta}": "ᵝ", 2463 | "^{\\chi}": "ᵡ", 2464 | "^{\\delta}": "ᵟ", 2465 | "^{\\epsilon}": "ᵋ", 2466 | "^{\\gamma}": "ᵞ", 2467 | "^{\\iota}": "ᶥ", 2468 | "^{\\phi}": "ᵠ", 2469 | "^{\\theta}": "ᶿ", 2470 | "^{\\upsilon}": "ᶹ", 2471 | "^{a}": "ᵃ", 2472 | "^{b}": "ᵇ", 2473 | "^{c}": "ᶜ", 2474 | "^{d}": "ᵈ", 2475 | "^{e}": "ᵉ", 2476 | "^{f}": "ᶠ", 2477 | "^{g}": "ᵍ", 2478 | "^{h}": "ʰ", 2479 | "^{i}": "ⁱ", 2480 | "^{j}": "ʲ", 2481 | "^{k}": "ᵏ", 2482 | "^{l}": "ˡ", 2483 | "^{m}": "ᵐ", 2484 | "^{n}": "ⁿ", 2485 | "^{o}": "ᵒ", 2486 | "^{p}": "ᵖ", 2487 | "^{q}": "𐞥", 2488 | "^{r}": "ʳ", 2489 | "^{s}": "ˢ", 2490 | "^{t}": "ᵗ", 2491 | "^{u}": "ᵘ", 2492 | "^{v}": "ᵛ", 2493 | "^{w}": "ʷ", 2494 | "^{x}": "ˣ", 2495 | "^{y}": "ʸ", 2496 | "^{z}": "ᶻ", 2497 | "_{(}": "₍", 2498 | "_{)}": "₎", 2499 | "_{+}": "₊", 2500 | "_{-}": "₋", 2501 | "_{0}": "₀", 2502 | "_{1}": "₁", 2503 | "_{2}": "₂", 2504 | "_{3}": "₃", 2505 | "_{4}": "₄", 2506 | "_{5}": "₅", 2507 | "_{6}": "₆", 2508 | "_{7}": "₇", 2509 | "_{8}": "₈", 2510 | "_{9}": "₉", 2511 | "_{=}": "₌", 2512 | "_{A}": "ₐ", 2513 | "_{E}": "ₑ", 2514 | "_{H}": "ₕ", 2515 | "_{I}": "ᵢ", 2516 | "_{J}": "ⱼ", 2517 | "_{K}": "ₖ", 2518 | "_{L}": "ₗ", 2519 | "_{M}": "ₘ", 2520 | "_{N}": "ₙ", 2521 | "_{O}": "ₒ", 2522 | "_{P}": "ₚ", 2523 | "_{R}": "ᵣ", 2524 | "_{S}": "ₛ", 2525 | "_{T}": "ₜ", 2526 | "_{U}": "ᵤ", 2527 | "_{V}": "ᵥ", 2528 | "_{X}": "ₓ", 2529 | "_{\\beta}": "ᵦ", 2530 | "_{\\chi}": "ᵪ", 2531 | "_{\\gamma}": "ᵧ", 2532 | "_{\\phi}": "ᵩ", 2533 | "_{\\rho}": "ᵨ", 2534 | "_{a}": "ₐ", 2535 | "_{e}": "ₑ", 2536 | "_{h}": "ₕ", 2537 | "_{i}": "ᵢ", 2538 | "_{j}": "ⱼ", 2539 | "_{k}": "ₖ", 2540 | "_{l}": "ₗ", 2541 | "_{m}": "ₘ", 2542 | "_{n}": "ₙ", 2543 | "_{o}": "ₒ", 2544 | "_{p}": "ₚ", 2545 | "_{r}": "ᵣ", 2546 | "_{s}": "ₛ", 2547 | "_{t}": "ₜ", 2548 | "_{u}": "ᵤ", 2549 | "_{v}": "ᵥ", 2550 | "_{x}": "ₓ", 2551 | "a": "𝑎", 2552 | "b": "𝑏", 2553 | "c": "𝑐", 2554 | "d": "𝑑", 2555 | "e": "𝑒", 2556 | "f": "𝑓", 2557 | "g": "𝑔", 2558 | "h": "ℎ", 2559 | "i": "𝑖", 2560 | "j": "𝑗", 2561 | "k": "𝑘", 2562 | "l": "𝑙", 2563 | "m": "𝑚", 2564 | "n": "𝑛", 2565 | "o": "𝑜", 2566 | "p": "𝑝", 2567 | "q": "𝑞", 2568 | "r": "𝑟", 2569 | "s": "𝑠", 2570 | "t": "𝑡", 2571 | "u": "𝑢", 2572 | "v": "𝑣", 2573 | "w": "𝑤", 2574 | "x": "𝑥", 2575 | "y": "𝑦", 2576 | "z": "𝑧", 2577 | } 2578 | 2579 | 2580 | HAS_ARG = { 2581 | "\\Big", 2582 | "\\Bigg", 2583 | "\\LVec", 2584 | "\\acute", 2585 | "\\bar", 2586 | "\\big", 2587 | "\\breve", 2588 | "\\check", 2589 | "\\ddddot", 2590 | "\\dddot", 2591 | "\\ddot", 2592 | "\\dot", 2593 | "\\grave", 2594 | "\\hat", 2595 | "\\left", 2596 | "\\lvec", 2597 | "\\mathbb", 2598 | "\\mathbf", 2599 | "\\mathbfit", 2600 | "\\mathcal", 2601 | "\\mathfrak", 2602 | "\\mathring", 2603 | "\\mathrm", 2604 | "\\mathsf", 2605 | "\\mathsfbf", 2606 | "\\mathsfbfit", 2607 | "\\mathsfit", 2608 | "\\mathtt", 2609 | "\\not", 2610 | "\\overleftrightarrow", 2611 | "\\overline", 2612 | "\\right", 2613 | "\\slash", 2614 | "\\spddot", 2615 | "\\sqrt", 2616 | "\\text", 2617 | "\\tilde", 2618 | "\\underbar", 2619 | "\\underleftarrow", 2620 | "\\underline", 2621 | "\\underrightarrow", 2622 | "\\utilde", 2623 | "\\vec", 2624 | "^", 2625 | "_", 2626 | } 2627 | --------------------------------------------------------------------------------