CI_CD updates

This commit is contained in:
andrew.ridgway
2023-06-16 11:39:32 +10:00
parent 4182185595
commit 9f1dc86819
4534 changed files with 605914 additions and 8 deletions
@@ -0,0 +1,52 @@
# :Id: $Id: __init__.py 9026 2022-03-04 15:57:13Z milde $
# :Author: Guenter Milde.
# :License: Released under the terms of the `2-Clause BSD license`_, in short:
#
# Copying and distribution of this file, with or without modification,
# are permitted in any medium without royalty provided the copyright
# notice and this notice are preserved.
# This file is offered as-is, without any warranty.
#
# .. _2-Clause BSD license: https://opensource.org/licenses/BSD-2-Clause
"""
This is the Docutils (Python Documentation Utilities) "math" sub-package.
It contains various modules for conversion between different math formats
(LaTeX, MathML, HTML).
:math2html: LaTeX math -> HTML conversion from eLyXer
:latex2mathml: LaTeX math -> presentational MathML
:unichar2tex: Unicode character to LaTeX math translation table
:tex2unichar: LaTeX math to Unicode character translation dictionaries
:tex2mathml_extern: Wrapper for 3rd party TeX -> MathML converters
"""
# helpers for Docutils math support
# =================================
def toplevel_code(code):
"""Return string (LaTeX math) `code` with environments stripped out."""
chunks = code.split(r'\begin{')
return r'\begin{'.join(chunk.split(r'\end{')[-1]
for chunk in chunks)
def pick_math_environment(code, numbered=False):
"""Return the right math environment to display `code`.
The test simply looks for line-breaks (``\\``) outside environments.
Multi-line formulae are set with ``align``, one-liners with
``equation``.
If `numbered` evaluates to ``False``, the "starred" versions are used
to suppress numbering.
"""
if toplevel_code(code).find(r'\\') >= 0:
env = 'align'
else:
env = 'equation'
if not numbered:
env += '*'
return env
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,185 @@
# :Id: $Id: tex2mathml_extern.py 9250 2022-11-16 14:01:31Z milde $
# :Copyright: © 2015 Günter Milde.
# :License: Released under the terms of the `2-Clause BSD license`_, in short:
#
# Copying and distribution of this file, with or without modification,
# are permitted in any medium without royalty provided the copyright
# notice and this notice are preserved.
# This file is offered as-is, without any warranty.
#
# .. _2-Clause BSD license: https://opensource.org/licenses/BSD-2-Clause
"""Wrappers for TeX->MathML conversion by external tools
This module is provisional:
the API is not settled and may change with any minor Docutils version.
"""
import subprocess
document_template = r"""\documentclass{article}
\usepackage{amsmath}
\begin{document}
%s
\end{document}
"""
def latexml(math_code, reporter=None):
"""Convert LaTeX math code to MathML with LaTeXML_
.. _LaTeXML: http://dlmf.nist.gov/LaTeXML/
"""
p = subprocess.Popen(['latexml',
'-', # read from stdin
'--preload=amsfonts',
'--preload=amsmath',
'--inputencoding=utf8',
],
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
close_fds=True)
p.stdin.write((document_template % math_code).encode('utf-8'))
p.stdin.close()
latexml_code = p.stdout.read()
latexml_err = p.stderr.read().decode('utf-8')
if reporter and (latexml_err.find('Error') >= 0 or not latexml_code):
reporter.error(latexml_err)
post_p = subprocess.Popen(['latexmlpost',
'-',
'--nonumbersections',
'--format=xhtml',
# '--linelength=78', # experimental
'--'
],
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
close_fds=True)
post_p.stdin.write(latexml_code)
post_p.stdin.close()
result = post_p.stdout.read().decode('utf-8')
post_p_err = post_p.stderr.read().decode('utf-8')
if reporter and (post_p_err.find('Error') >= 0 or not result):
reporter.error(post_p_err)
# extract MathML code:
start, end = result.find('<math'), result.find('</math>')+7
result = result[start:end]
if 'class="ltx_ERROR' in result:
raise SyntaxError(result)
return result
def ttm(math_code, reporter=None):
"""Convert LaTeX math code to MathML with TtM_
.. _TtM: http://hutchinson.belmont.ma.us/tth/mml/
"""
p = subprocess.Popen(['ttm',
# '-i', # italic font for equations. Default roman.
'-u', # unicode encoding. (Default iso-8859-1).
'-r', # output raw MathML (no wrapper)
],
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
close_fds=True)
p.stdin.write((document_template % math_code).encode('utf-8'))
p.stdin.close()
result = p.stdout.read()
err = p.stderr.read().decode('utf-8')
if err.find('**** Unknown') >= 0:
msg = '\n'.join(line for line in err.splitlines()
if line.startswith('****'))
raise SyntaxError('\nMessage from external converter TtM:\n'+msg)
if reporter and err.find('**** Error') >= 0 or not result:
reporter.error(err)
start, end = result.find('<math'), result.find('</math>')+7
return result[start:end]
def blahtexml(math_code, inline=True, reporter=None):
"""Convert LaTeX math code to MathML with blahtexml_
.. _blahtexml: http://gva.noekeon.org/blahtexml/
"""
options = ['--mathml',
'--indented',
'--spacing', 'moderate',
'--mathml-encoding', 'raw',
'--other-encoding', 'raw',
'--doctype-xhtml+mathml',
'--annotate-TeX',
]
if inline:
mathmode_arg = ''
else:
mathmode_arg = ' display="block"'
options.append('--displaymath')
p = subprocess.Popen(['blahtexml']+options,
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
close_fds=True)
p.stdin.write(math_code.encode('utf-8'))
p.stdin.close()
result = p.stdout.read().decode('utf-8')
err = p.stderr.read().decode('utf-8')
if result.find('<error>') >= 0:
msg = result[result.find('<message>')+9:result.find('</message>')]
raise SyntaxError('\nMessage from external converter blahtexml:\n%s'
% msg)
if reporter and (err.find('**** Error') >= 0 or not result):
reporter.error(err)
start, end = result.find('<markup>')+9, result.find('</markup>')
result = ('<math xmlns="http://www.w3.org/1998/Math/MathML"%s>\n'
'%s</math>\n') % (mathmode_arg, result[start:end])
return result
def pandoc(math_code, reporter=None):
"""Convert LaTeX math code to MathML with pandoc_
.. _pandoc: https://pandoc.org/
"""
p = subprocess.Popen(['pandoc',
'--mathml',
'--from=latex',
],
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
close_fds=True)
p.stdin.write(math_code.encode('utf-8'))
p.stdin.close()
result = p.stdout.read().decode('utf-8')
err = p.stderr.read().decode('utf-8').strip()
x = p.wait()
if err:
if reporter:
reporter.error(err)
raise SyntaxError('\nError message from external converter pandoc:\n%s'
% err)
if x != 0:
raise SyntaxError('\nError code from external converter pandoc:\n%s'
% x)
start, end = result.find('<math'), result.find('</math>')+7
return result[start:end]
# self-test
if __name__ == "__main__":
example = ('\\frac{\\partial \\sin^2(\\alpha)}{\\partial \\vec r}'
'\\varpi \\mathbb{R} \\, \\text{Grüße}')
# print(latexml('$'+example+'$'))
# print(ttm('$'+example.replace('\\mathbb{R}', '')+'$'))
print(blahtexml(example))
# print(pandoc('$'+example+'$'))
@@ -0,0 +1,730 @@
#!/usr/bin/env python3
# LaTeX math to Unicode symbols translation dictionaries.
# Generated with ``write_tex2unichar.py`` from the data in
# http://milde.users.sourceforge.net/LUCR/Math/
# Includes commands from:
# standard LaTeX
# amssymb
# amsmath
# amsxtra
# bbold
# esint
# mathabx
# mathdots
# txfonts
# stmaryrd
# wasysym
mathaccent = {
'acute': '\u0301', #  ́ COMBINING ACUTE ACCENT
'bar': '\u0304', #  ̄ COMBINING MACRON
'breve': '\u0306', #  ̆ COMBINING BREVE
'check': '\u030c', #  ̌ COMBINING CARON
'ddddot': '\u20dc', #  ⃜ COMBINING FOUR DOTS ABOVE
'dddot': '\u20db', #  ⃛ COMBINING THREE DOTS ABOVE
'ddot': '\u0308', #  ̈ COMBINING DIAERESIS
'dot': '\u0307', #  ̇ COMBINING DOT ABOVE
'grave': '\u0300', #  ̀ COMBINING GRAVE ACCENT
'hat': '\u0302', #  ̂ COMBINING CIRCUMFLEX ACCENT
'mathring': '\u030a', #  ̊ COMBINING RING ABOVE
'not': '\u0338', #  ̸ COMBINING LONG SOLIDUS OVERLAY
'overleftrightarrow': '\u20e1', #  ⃡ COMBINING LEFT RIGHT ARROW ABOVE
'overline': '\u0305', #  ̅ COMBINING OVERLINE
'tilde': '\u0303', #  ̃ COMBINING TILDE
'underbar': '\u0331', #  ̱ COMBINING MACRON BELOW
'underleftarrow': '\u20ee', #  ⃮ COMBINING LEFT ARROW BELOW
'underline': '\u0332', #  ̲ COMBINING LOW LINE
'underrightarrow': '\u20ef', #  ⃯ COMBINING RIGHT ARROW BELOW
'vec': '\u20d7', #  ⃗ COMBINING RIGHT ARROW ABOVE
}
mathalpha = {
'Bbbk': '\U0001d55c', # 𝕜 MATHEMATICAL DOUBLE-STRUCK SMALL K
'Delta': '\u0394', # Δ GREEK CAPITAL LETTER DELTA
'Gamma': '\u0393', # Γ GREEK CAPITAL LETTER GAMMA
'Im': '\u2111', # ℑ BLACK-LETTER CAPITAL I
'Lambda': '\u039b', # Λ GREEK CAPITAL LETTER LAMDA
'Omega': '\u03a9', # Ω GREEK CAPITAL LETTER OMEGA
'Phi': '\u03a6', # Φ GREEK CAPITAL LETTER PHI
'Pi': '\u03a0', # Π GREEK CAPITAL LETTER PI
'Psi': '\u03a8', # Ψ GREEK CAPITAL LETTER PSI
'Re': '\u211c', # ℜ BLACK-LETTER CAPITAL R
'Sigma': '\u03a3', # Σ GREEK CAPITAL LETTER SIGMA
'Theta': '\u0398', # Θ GREEK CAPITAL LETTER THETA
'Upsilon': '\u03a5', # Υ GREEK CAPITAL LETTER UPSILON
'Xi': '\u039e', # Ξ GREEK CAPITAL LETTER XI
'aleph': '\u2135', # ℵ ALEF SYMBOL
'alpha': '\u03b1', # α GREEK SMALL LETTER ALPHA
'beta': '\u03b2', # β GREEK SMALL LETTER BETA
'beth': '\u2136', # ℶ BET SYMBOL
'chi': '\u03c7', # χ GREEK SMALL LETTER CHI
'daleth': '\u2138', # ℸ DALET SYMBOL
'delta': '\u03b4', # δ GREEK SMALL LETTER DELTA
'digamma': '\u03dd', # ϝ GREEK SMALL LETTER DIGAMMA
'ell': '\u2113', # ℓ SCRIPT SMALL L
'epsilon': '\u03f5', # ϵ GREEK LUNATE EPSILON SYMBOL
'eta': '\u03b7', # η GREEK SMALL LETTER ETA
'eth': '\xf0', # ð LATIN SMALL LETTER ETH
'gamma': '\u03b3', # γ GREEK SMALL LETTER GAMMA
'gimel': '\u2137', # ℷ GIMEL SYMBOL
'hslash': '\u210f', # ℏ PLANCK CONSTANT OVER TWO PI
'imath': '\u0131', # ı LATIN SMALL LETTER DOTLESS I
'iota': '\u03b9', # ι GREEK SMALL LETTER IOTA
'jmath': '\u0237', # ȷ LATIN SMALL LETTER DOTLESS J
'kappa': '\u03ba', # κ GREEK SMALL LETTER KAPPA
'lambda': '\u03bb', # λ GREEK SMALL LETTER LAMDA
'mu': '\u03bc', # μ GREEK SMALL LETTER MU
'nu': '\u03bd', # ν GREEK SMALL LETTER NU
'omega': '\u03c9', # ω GREEK SMALL LETTER OMEGA
'phi': '\u03d5', # ϕ GREEK PHI SYMBOL
'pi': '\u03c0', # π GREEK SMALL LETTER PI
'psi': '\u03c8', # ψ GREEK SMALL LETTER PSI
'rho': '\u03c1', # ρ GREEK SMALL LETTER RHO
'sigma': '\u03c3', # σ GREEK SMALL LETTER SIGMA
'tau': '\u03c4', # τ GREEK SMALL LETTER TAU
'theta': '\u03b8', # θ GREEK SMALL LETTER THETA
'upsilon': '\u03c5', # υ GREEK SMALL LETTER UPSILON
'varDelta': '\U0001d6e5', # 𝛥 MATHEMATICAL ITALIC CAPITAL DELTA
'varGamma': '\U0001d6e4', # 𝛤 MATHEMATICAL ITALIC CAPITAL GAMMA
'varLambda': '\U0001d6ec', # 𝛬 MATHEMATICAL ITALIC CAPITAL LAMDA
'varOmega': '\U0001d6fa', # 𝛺 MATHEMATICAL ITALIC CAPITAL OMEGA
'varPhi': '\U0001d6f7', # 𝛷 MATHEMATICAL ITALIC CAPITAL PHI
'varPi': '\U0001d6f1', # 𝛱 MATHEMATICAL ITALIC CAPITAL PI
'varPsi': '\U0001d6f9', # 𝛹 MATHEMATICAL ITALIC CAPITAL PSI
'varSigma': '\U0001d6f4', # 𝛴 MATHEMATICAL ITALIC CAPITAL SIGMA
'varTheta': '\U0001d6e9', # 𝛩 MATHEMATICAL ITALIC CAPITAL THETA
'varUpsilon': '\U0001d6f6', # 𝛶 MATHEMATICAL ITALIC CAPITAL UPSILON
'varXi': '\U0001d6ef', # 𝛯 MATHEMATICAL ITALIC CAPITAL XI
'varepsilon': '\u03b5', # ε GREEK SMALL LETTER EPSILON
'varkappa': '\u03f0', # ϰ GREEK KAPPA SYMBOL
'varphi': '\u03c6', # φ GREEK SMALL LETTER PHI
'varpi': '\u03d6', # ϖ GREEK PI SYMBOL
'varrho': '\u03f1', # ϱ GREEK RHO SYMBOL
'varsigma': '\u03c2', # ς GREEK SMALL LETTER FINAL SIGMA
'vartheta': '\u03d1', # ϑ GREEK THETA SYMBOL
'wp': '\u2118', # ℘ SCRIPT CAPITAL P
'xi': '\u03be', # ξ GREEK SMALL LETTER XI
'zeta': '\u03b6', # ζ GREEK SMALL LETTER ZETA
}
mathbin = {
'Cap': '\u22d2', # ⋒ DOUBLE INTERSECTION
'Circle': '\u25cb', # ○ WHITE CIRCLE
'Cup': '\u22d3', # ⋓ DOUBLE UNION
'LHD': '\u25c0', # ◀ BLACK LEFT-POINTING TRIANGLE
'RHD': '\u25b6', # ▶ BLACK RIGHT-POINTING TRIANGLE
'amalg': '\u2a3f', # ⨿ AMALGAMATION OR COPRODUCT
'ast': '\u2217', # ∗ ASTERISK OPERATOR
'barwedge': '\u22bc', # ⊼ NAND
'bigcirc': '\u25ef', # ◯ LARGE CIRCLE
'bigtriangledown': '\u25bd', # ▽ WHITE DOWN-POINTING TRIANGLE
'bigtriangleup': '\u25b3', # △ WHITE UP-POINTING TRIANGLE
'bindnasrepma': '\u214b', # ⅋ TURNED AMPERSAND
'blacklozenge': '\u29eb', # ⧫ BLACK LOZENGE
'boxast': '\u29c6', # ⧆ SQUARED ASTERISK
'boxbar': '\u25eb', # ◫ WHITE SQUARE WITH VERTICAL BISECTING LINE
'boxbox': '\u29c8', # ⧈ SQUARED SQUARE
'boxbslash': '\u29c5', # ⧅ SQUARED FALLING DIAGONAL SLASH
'boxcircle': '\u29c7', # ⧇ SQUARED SMALL CIRCLE
'boxdot': '\u22a1', # ⊡ SQUARED DOT OPERATOR
'boxminus': '\u229f', # ⊟ SQUARED MINUS
'boxplus': '\u229e', # ⊞ SQUARED PLUS
'boxslash': '\u29c4', # ⧄ SQUARED RISING DIAGONAL SLASH
'boxtimes': '\u22a0', # ⊠ SQUARED TIMES
'bullet': '\u2022', # • BULLET
'cap': '\u2229', # ∩ INTERSECTION
'cdot': '\u22c5', # ⋅ DOT OPERATOR
'circ': '\u2218', # ∘ RING OPERATOR
'circledast': '\u229b', # ⊛ CIRCLED ASTERISK OPERATOR
'circledbslash': '\u29b8', # ⦸ CIRCLED REVERSE SOLIDUS
'circledcirc': '\u229a', # ⊚ CIRCLED RING OPERATOR
'circleddash': '\u229d', # ⊝ CIRCLED DASH
'circledgtr': '\u29c1', # ⧁ CIRCLED GREATER-THAN
'circledless': '\u29c0', # ⧀ CIRCLED LESS-THAN
'cup': '\u222a', # ∪ UNION
'curlyvee': '\u22ce', # ⋎ CURLY LOGICAL OR
'curlywedge': '\u22cf', # ⋏ CURLY LOGICAL AND
'dagger': '\u2020', # † DAGGER
'ddagger': '\u2021', # ‡ DOUBLE DAGGER
'diamond': '\u22c4', # ⋄ DIAMOND OPERATOR
'div': '\xf7', # ÷ DIVISION SIGN
'divideontimes': '\u22c7', # ⋇ DIVISION TIMES
'dotplus': '\u2214', # ∔ DOT PLUS
'doublebarwedge': '\u2a5e', # ⩞ LOGICAL AND WITH DOUBLE OVERBAR
'gtrdot': '\u22d7', # ⋗ GREATER-THAN WITH DOT
'intercal': '\u22ba', # ⊺ INTERCALATE
'interleave': '\u2af4', # ⫴ TRIPLE VERTICAL BAR BINARY RELATION
'invamp': '\u214b', # ⅋ TURNED AMPERSAND
'land': '\u2227', # ∧ LOGICAL AND
'leftthreetimes': '\u22cb', # ⋋ LEFT SEMIDIRECT PRODUCT
'lessdot': '\u22d6', # ⋖ LESS-THAN WITH DOT
'lor': '\u2228', # ∨ LOGICAL OR
'ltimes': '\u22c9', # ⋉ LEFT NORMAL FACTOR SEMIDIRECT PRODUCT
'mp': '\u2213', # ∓ MINUS-OR-PLUS SIGN
'odot': '\u2299', # ⊙ CIRCLED DOT OPERATOR
'ominus': '\u2296', # ⊖ CIRCLED MINUS
'oplus': '\u2295', # ⊕ CIRCLED PLUS
'oslash': '\u2298', # ⊘ CIRCLED DIVISION SLASH
'otimes': '\u2297', # ⊗ CIRCLED TIMES
'pm': '\xb1', # ± PLUS-MINUS SIGN
'rightthreetimes': '\u22cc', # ⋌ RIGHT SEMIDIRECT PRODUCT
'rtimes': '\u22ca', # ⋊ RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT
'setminus': '\u29f5', # ⧵ REVERSE SOLIDUS OPERATOR
'slash': '\u2215', # ∕ DIVISION SLASH
'smallsetminus': '\u2216', # ∖ SET MINUS
'smalltriangledown': '\u25bf', # ▿ WHITE DOWN-POINTING SMALL TRIANGLE
'smalltriangleleft': '\u25c3', # ◃ WHITE LEFT-POINTING SMALL TRIANGLE
'smalltriangleright': '\u25b9', # ▹ WHITE RIGHT-POINTING SMALL TRIANGLE
'sqcap': '\u2293', # ⊓ SQUARE CAP
'sqcup': '\u2294', # ⊔ SQUARE CUP
'sslash': '\u2afd', # ⫽ DOUBLE SOLIDUS OPERATOR
'star': '\u22c6', # ⋆ STAR OPERATOR
'talloblong': '\u2afe', # ⫾ WHITE VERTICAL BAR
'times': '\xd7', # × MULTIPLICATION SIGN
'triangleleft': '\u25c3', # ◃ WHITE LEFT-POINTING SMALL TRIANGLE
'triangleright': '\u25b9', # ▹ WHITE RIGHT-POINTING SMALL TRIANGLE
'uplus': '\u228e', # ⊎ MULTISET UNION
'vee': '\u2228', # ∨ LOGICAL OR
'veebar': '\u22bb', # ⊻ XOR
'wedge': '\u2227', # ∧ LOGICAL AND
'wr': '\u2240', # ≀ WREATH PRODUCT
}
mathclose = {
'Rbag': '\u27c6', # ⟆ RIGHT S-SHAPED BAG DELIMITER
'lrcorner': '\u231f', # ⌟ BOTTOM RIGHT CORNER
'rangle': '\u27e9', # ⟩ MATHEMATICAL RIGHT ANGLE BRACKET
'rbag': '\u27c6', # ⟆ RIGHT S-SHAPED BAG DELIMITER
'rbrace': '}', # } RIGHT CURLY BRACKET
'rbrack': ']', # ] RIGHT SQUARE BRACKET
'rceil': '\u2309', # ⌉ RIGHT CEILING
'rfloor': '\u230b', # ⌋ RIGHT FLOOR
'rgroup': '\u27ef', # ⟯ MATHEMATICAL RIGHT FLATTENED PARENTHESIS
'rrbracket': '\u27e7', # ⟧ MATHEMATICAL RIGHT WHITE SQUARE BRACKET
'rrparenthesis': '\u2988', # ⦈ Z NOTATION RIGHT IMAGE BRACKET
'urcorner': '\u231d', # ⌝ TOP RIGHT CORNER
'}': '}', # } RIGHT CURLY BRACKET
}
mathfence = {
'Vert': '\u2016', # ‖ DOUBLE VERTICAL LINE
'vert': '|', # | VERTICAL LINE
'|': '\u2016', # ‖ DOUBLE VERTICAL LINE
}
mathop = {
'bigcap': '\u22c2', # ⋂ N-ARY INTERSECTION
'bigcup': '\u22c3', # ⋃ N-ARY UNION
'biginterleave': '\u2afc', # ⫼ LARGE TRIPLE VERTICAL BAR OPERATOR
'bigodot': '\u2a00', # ⨀ N-ARY CIRCLED DOT OPERATOR
'bigoplus': '\u2a01', # ⨁ N-ARY CIRCLED PLUS OPERATOR
'bigotimes': '\u2a02', # ⨂ N-ARY CIRCLED TIMES OPERATOR
'bigsqcap': '\u2a05', # ⨅ N-ARY SQUARE INTERSECTION OPERATOR
'bigsqcup': '\u2a06', # ⨆ N-ARY SQUARE UNION OPERATOR
'biguplus': '\u2a04', # ⨄ N-ARY UNION OPERATOR WITH PLUS
'bigvee': '\u22c1', # ⋁ N-ARY LOGICAL OR
'bigwedge': '\u22c0', # ⋀ N-ARY LOGICAL AND
'coprod': '\u2210', # ∐ N-ARY COPRODUCT
'fatsemi': '\u2a1f', # ⨟ Z NOTATION SCHEMA COMPOSITION
'fint': '\u2a0f', # ⨏ INTEGRAL AVERAGE WITH SLASH
'iiiint': '\u2a0c', # ⨌ QUADRUPLE INTEGRAL OPERATOR
'iiint': '\u222d', # ∭ TRIPLE INTEGRAL
'iint': '\u222c', # ∬ DOUBLE INTEGRAL
'int': '\u222b', # ∫ INTEGRAL
'intop': '\u222b', # ∫ INTEGRAL
'oiiint': '\u2230', # ∰ VOLUME INTEGRAL
'oiint': '\u222f', # ∯ SURFACE INTEGRAL
'oint': '\u222e', # ∮ CONTOUR INTEGRAL
'ointctrclockwise': '\u2233', # ∳ ANTICLOCKWISE CONTOUR INTEGRAL
'ointop': '\u222e', # ∮ CONTOUR INTEGRAL
'prod': '\u220f', # ∏ N-ARY PRODUCT
'sqint': '\u2a16', # ⨖ QUATERNION INTEGRAL OPERATOR
'sum': '\u2211', # ∑ N-ARY SUMMATION
'varointclockwise': '\u2232', # ∲ CLOCKWISE CONTOUR INTEGRAL
'varprod': '\u2a09', # ⨉ N-ARY TIMES OPERATOR
}
mathopen = {
'Lbag': '\u27c5', # ⟅ LEFT S-SHAPED BAG DELIMITER
'langle': '\u27e8', # ⟨ MATHEMATICAL LEFT ANGLE BRACKET
'lbag': '\u27c5', # ⟅ LEFT S-SHAPED BAG DELIMITER
'lbrace': '{', # { LEFT CURLY BRACKET
'lbrack': '[', # [ LEFT SQUARE BRACKET
'lceil': '\u2308', # ⌈ LEFT CEILING
'lfloor': '\u230a', # ⌊ LEFT FLOOR
'lgroup': '\u27ee', # ⟮ MATHEMATICAL LEFT FLATTENED PARENTHESIS
'llbracket': '\u27e6', # ⟦ MATHEMATICAL LEFT WHITE SQUARE BRACKET
'llcorner': '\u231e', # ⌞ BOTTOM LEFT CORNER
'llparenthesis': '\u2987', # ⦇ Z NOTATION LEFT IMAGE BRACKET
'ulcorner': '\u231c', # ⌜ TOP LEFT CORNER
'{': '{', # { LEFT CURLY BRACKET
}
mathord = {
'#': '#', # # NUMBER SIGN
'$': '$', # $ DOLLAR SIGN
'%': '%', # % PERCENT SIGN
'&': '&', # & AMPERSAND
'AC': '\u223f', # ∿ SINE WAVE
'APLcomment': '\u235d', # ⍝ APL FUNCTIONAL SYMBOL UP SHOE JOT
'APLdownarrowbox': '\u2357', # ⍗ APL FUNCTIONAL SYMBOL QUAD DOWNWARDS ARROW
'APLinput': '\u235e', # ⍞ APL FUNCTIONAL SYMBOL QUOTE QUAD
'APLinv': '\u2339', # ⌹ APL FUNCTIONAL SYMBOL QUAD DIVIDE
'APLleftarrowbox': '\u2347', # ⍇ APL FUNCTIONAL SYMBOL QUAD LEFTWARDS ARROW
'APLlog': '\u235f', # ⍟ APL FUNCTIONAL SYMBOL CIRCLE STAR
'APLrightarrowbox': '\u2348', # ⍈ APL FUNCTIONAL SYMBOL QUAD RIGHTWARDS ARROW
'APLuparrowbox': '\u2350', # ⍐ APL FUNCTIONAL SYMBOL QUAD UPWARDS ARROW
'Aries': '\u2648', # ♈ ARIES
'Box': '\u2b1c', # ⬜ WHITE LARGE SQUARE
'CIRCLE': '\u25cf', # ● BLACK CIRCLE
'CheckedBox': '\u2611', # ☑ BALLOT BOX WITH CHECK
'Diamond': '\u25c7', # ◇ WHITE DIAMOND
'Diamondblack': '\u25c6', # ◆ BLACK DIAMOND
'Diamonddot': '\u27d0', # ⟐ WHITE DIAMOND WITH CENTRED DOT
'Finv': '\u2132', # Ⅎ TURNED CAPITAL F
'Game': '\u2141', # ⅁ TURNED SANS-SERIF CAPITAL G
'Gemini': '\u264a', # ♊ GEMINI
'Jupiter': '\u2643', # ♃ JUPITER
'LEFTCIRCLE': '\u25d6', # ◖ LEFT HALF BLACK CIRCLE
'LEFTcircle': '\u25d0', # ◐ CIRCLE WITH LEFT HALF BLACK
'Leo': '\u264c', # ♌ LEO
'Libra': '\u264e', # ♎ LIBRA
'Mars': '\u2642', # ♂ MALE SIGN
'Mercury': '\u263f', # ☿ MERCURY
'Neptune': '\u2646', # ♆ NEPTUNE
'P': '\xb6', # ¶ PILCROW SIGN
'Pluto': '\u2647', # ♇ PLUTO
'RIGHTCIRCLE': '\u25d7', # ◗ RIGHT HALF BLACK CIRCLE
'RIGHTcircle': '\u25d1', # ◑ CIRCLE WITH RIGHT HALF BLACK
'S': '\xa7', # § SECTION SIGN
'Saturn': '\u2644', # ♄ SATURN
'Scorpio': '\u264f', # ♏ SCORPIUS
'Square': '\u2610', # ☐ BALLOT BOX
'Sun': '\u2609', # ☉ SUN
'Taurus': '\u2649', # ♉ TAURUS
'Uranus': '\u2645', # ♅ URANUS
'Venus': '\u2640', # ♀ FEMALE SIGN
'XBox': '\u2612', # ☒ BALLOT BOX WITH X
'Yup': '\u2144', # ⅄ TURNED SANS-SERIF CAPITAL Y
'_': '_', # _ LOW LINE
'angle': '\u2220', # ∠ ANGLE
'aquarius': '\u2652', # ♒ AQUARIUS
'aries': '\u2648', # ♈ ARIES
'arrowvert': '\u23d0', # ⏐ VERTICAL LINE EXTENSION
'backprime': '\u2035', # ‵ REVERSED PRIME
'backslash': '\\', # \ REVERSE SOLIDUS
'bigstar': '\u2605', # ★ BLACK STAR
'blacksmiley': '\u263b', # ☻ BLACK SMILING FACE
'blacksquare': '\u25fc', # ◼ BLACK MEDIUM SQUARE
'blacktriangle': '\u25b4', # ▴ BLACK UP-POINTING SMALL TRIANGLE
'blacktriangledown': '\u25be', # ▾ BLACK DOWN-POINTING SMALL TRIANGLE
'blacktriangleup': '\u25b4', # ▴ BLACK UP-POINTING SMALL TRIANGLE
'bot': '\u22a5', # ⊥ UP TACK
'boy': '\u2642', # ♂ MALE SIGN
'bracevert': '\u23aa', # ⎪ CURLY BRACKET EXTENSION
'cancer': '\u264b', # ♋ CANCER
'capricornus': '\u2651', # ♑ CAPRICORN
'cdots': '\u22ef', # ⋯ MIDLINE HORIZONTAL ELLIPSIS
'cent': '\xa2', # ¢ CENT SIGN
'checkmark': '\u2713', # ✓ CHECK MARK
'circledR': '\u24c7', # Ⓡ CIRCLED LATIN CAPITAL LETTER R
'circledS': '\u24c8', # Ⓢ CIRCLED LATIN CAPITAL LETTER S
'clubsuit': '\u2663', # ♣ BLACK CLUB SUIT
'complement': '\u2201', # ∁ COMPLEMENT
'diagdown': '\u27cd', # ⟍ MATHEMATICAL FALLING DIAGONAL
'diagup': '\u27cb', # ⟋ MATHEMATICAL RISING DIAGONAL
'diameter': '\u2300', # ⌀ DIAMETER SIGN
'diamondsuit': '\u2662', # ♢ WHITE DIAMOND SUIT
'earth': '\u2641', # ♁ EARTH
'emptyset': '\u2205', # ∅ EMPTY SET
'exists': '\u2203', # ∃ THERE EXISTS
'female': '\u2640', # ♀ FEMALE SIGN
'flat': '\u266d', # ♭ MUSIC FLAT SIGN
'forall': '\u2200', # ∀ FOR ALL
'fourth': '\u2057', # ⁗ QUADRUPLE PRIME
'frownie': '\u2639', # ☹ WHITE FROWNING FACE
'gemini': '\u264a', # ♊ GEMINI
'girl': '\u2640', # ♀ FEMALE SIGN
'heartsuit': '\u2661', # ♡ WHITE HEART SUIT
'infty': '\u221e', # ∞ INFINITY
'invdiameter': '\u2349', # ⍉ APL FUNCTIONAL SYMBOL CIRCLE BACKSLASH
'invneg': '\u2310', # ⌐ REVERSED NOT SIGN
'jupiter': '\u2643', # ♃ JUPITER
'ldots': '\u2026', # … HORIZONTAL ELLIPSIS
'leftmoon': '\u263e', # ☾ LAST QUARTER MOON
'leo': '\u264c', # ♌ LEO
'libra': '\u264e', # ♎ LIBRA
'lmoustache': '\u23b0', # ⎰ UPPER LEFT OR LOWER RIGHT CURLY BRACKET SECTION
'lnot': '\xac', # ¬ NOT SIGN
'lozenge': '\u25ca', # ◊ LOZENGE
'male': '\u2642', # ♂ MALE SIGN
'maltese': '\u2720', # ✠ MALTESE CROSS
'mathcent': '\xa2', # ¢ CENT SIGN
'mathdollar': '$', # $ DOLLAR SIGN
'mathsterling': '\xa3', # £ POUND SIGN
'measuredangle': '\u2221', # ∡ MEASURED ANGLE
'medbullet': '\u26ab', # ⚫ MEDIUM BLACK CIRCLE
'medcirc': '\u26aa', # ⚪ MEDIUM WHITE CIRCLE
'mercury': '\u263f', # ☿ MERCURY
'mho': '\u2127', # ℧ INVERTED OHM SIGN
'nabla': '\u2207', # ∇ NABLA
'natural': '\u266e', # ♮ MUSIC NATURAL SIGN
'neg': '\xac', # ¬ NOT SIGN
'neptune': '\u2646', # ♆ NEPTUNE
'nexists': '\u2204', # ∄ THERE DOES NOT EXIST
'notbackslash': '\u2340', # ⍀ APL FUNCTIONAL SYMBOL BACKSLASH BAR
'partial': '\u2202', # ∂ PARTIAL DIFFERENTIAL
'pisces': '\u2653', # ♓ PISCES
'pluto': '\u2647', # ♇ PLUTO
'pounds': '\xa3', # £ POUND SIGN
'prime': '\u2032', # ′ PRIME
'quarternote': '\u2669', # ♩ QUARTER NOTE
'rightmoon': '\u263d', # ☽ FIRST QUARTER MOON
'rmoustache': '\u23b1', # ⎱ UPPER RIGHT OR LOWER LEFT CURLY BRACKET SECTION
'sagittarius': '\u2650', # ♐ SAGITTARIUS
'saturn': '\u2644', # ♄ SATURN
'scorpio': '\u264f', # ♏ SCORPIUS
'second': '\u2033', # ″ DOUBLE PRIME
'sharp': '\u266f', # ♯ MUSIC SHARP SIGN
'smiley': '\u263a', # ☺ WHITE SMILING FACE
'spadesuit': '\u2660', # ♠ BLACK SPADE SUIT
'spddot': '\xa8', # ¨ DIAERESIS
'sphat': '^', # ^ CIRCUMFLEX ACCENT
'sphericalangle': '\u2222', # ∢ SPHERICAL ANGLE
'sptilde': '~', # ~ TILDE
'square': '\u25fb', # ◻ WHITE MEDIUM SQUARE
'sun': '\u263c', # ☼ WHITE SUN WITH RAYS
'surd': '\u221a', # √ SQUARE ROOT
'taurus': '\u2649', # ♉ TAURUS
'third': '\u2034', # ‴ TRIPLE PRIME
'top': '\u22a4', # ⊤ DOWN TACK
'twonotes': '\u266b', # ♫ BEAMED EIGHTH NOTES
'uranus': '\u2645', # ♅ URANUS
'varEarth': '\u2641', # ♁ EARTH
'varclubsuit': '\u2667', # ♧ WHITE CLUB SUIT
'vardiamondsuit': '\u2666', # ♦ BLACK DIAMOND SUIT
'varheartsuit': '\u2665', # ♥ BLACK HEART SUIT
'varspadesuit': '\u2664', # ♤ WHITE SPADE SUIT
'virgo': '\u264d', # ♍ VIRGO
'wasylozenge': '\u2311', # ⌑ SQUARE LOZENGE
'yen': '\xa5', # ¥ YEN SIGN
}
mathover = {
'overbrace': '\u23de', # ⏞ TOP CURLY BRACKET
'wideparen': '\u23dc', # ⏜ TOP PARENTHESIS
}
mathpunct = {
'ddots': '\u22f1', # ⋱ DOWN RIGHT DIAGONAL ELLIPSIS
'vdots': '\u22ee', # ⋮ VERTICAL ELLIPSIS
}
mathradical = {
'sqrt[3]': '\u221b', # ∛ CUBE ROOT
'sqrt[4]': '\u221c', # ∜ FOURTH ROOT
}
mathrel = {
'Bot': '\u2aeb', # ⫫ DOUBLE UP TACK
'Bumpeq': '\u224e', # ≎ GEOMETRICALLY EQUIVALENT TO
'Coloneqq': '\u2a74', # ⩴ DOUBLE COLON EQUAL
'Doteq': '\u2251', # ≑ GEOMETRICALLY EQUAL TO
'Downarrow': '\u21d3', # ⇓ DOWNWARDS DOUBLE ARROW
'Leftarrow': '\u21d0', # ⇐ LEFTWARDS DOUBLE ARROW
'Leftrightarrow': '\u21d4', # ⇔ LEFT RIGHT DOUBLE ARROW
'Lleftarrow': '\u21da', # ⇚ LEFTWARDS TRIPLE ARROW
'Longleftarrow': '\u27f8', # ⟸ LONG LEFTWARDS DOUBLE ARROW
'Longleftrightarrow': '\u27fa', # ⟺ LONG LEFT RIGHT DOUBLE ARROW
'Longmapsfrom': '\u27fd', # ⟽ LONG LEFTWARDS DOUBLE ARROW FROM BAR
'Longmapsto': '\u27fe', # ⟾ LONG RIGHTWARDS DOUBLE ARROW FROM BAR
'Longrightarrow': '\u27f9', # ⟹ LONG RIGHTWARDS DOUBLE ARROW
'Lsh': '\u21b0', # ↰ UPWARDS ARROW WITH TIP LEFTWARDS
'Mapsfrom': '\u2906', # ⤆ LEFTWARDS DOUBLE ARROW FROM BAR
'Mapsto': '\u2907', # ⤇ RIGHTWARDS DOUBLE ARROW FROM BAR
'Nearrow': '\u21d7', # ⇗ NORTH EAST DOUBLE ARROW
'Nwarrow': '\u21d6', # ⇖ NORTH WEST DOUBLE ARROW
'Perp': '\u2aeb', # ⫫ DOUBLE UP TACK
'Rightarrow': '\u21d2', # ⇒ RIGHTWARDS DOUBLE ARROW
'Rrightarrow': '\u21db', # ⇛ RIGHTWARDS TRIPLE ARROW
'Rsh': '\u21b1', # ↱ UPWARDS ARROW WITH TIP RIGHTWARDS
'Searrow': '\u21d8', # ⇘ SOUTH EAST DOUBLE ARROW
'Subset': '\u22d0', # ⋐ DOUBLE SUBSET
'Supset': '\u22d1', # ⋑ DOUBLE SUPERSET
'Swarrow': '\u21d9', # ⇙ SOUTH WEST DOUBLE ARROW
'Top': '\u2aea', # ⫪ DOUBLE DOWN TACK
'Uparrow': '\u21d1', # ⇑ UPWARDS DOUBLE ARROW
'Updownarrow': '\u21d5', # ⇕ UP DOWN DOUBLE ARROW
'VDash': '\u22ab', # ⊫ DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE
'Vdash': '\u22a9', # ⊩ FORCES
'Vvdash': '\u22aa', # ⊪ TRIPLE VERTICAL BAR RIGHT TURNSTILE
'apprge': '\u2273', # ≳ GREATER-THAN OR EQUIVALENT TO
'apprle': '\u2272', # ≲ LESS-THAN OR EQUIVALENT TO
'approx': '\u2248', # ≈ ALMOST EQUAL TO
'approxeq': '\u224a', # ≊ ALMOST EQUAL OR EQUAL TO
'asymp': '\u224d', # ≍ EQUIVALENT TO
'backepsilon': '\u220d', # ∍ SMALL CONTAINS AS MEMBER
'backsim': '\u223d', # ∽ REVERSED TILDE
'backsimeq': '\u22cd', # ⋍ REVERSED TILDE EQUALS
'barin': '\u22f6', # ⋶ ELEMENT OF WITH OVERBAR
'barleftharpoon': '\u296b', # ⥫ LEFTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH
'barrightharpoon': '\u296d', # ⥭ RIGHTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH
'because': '\u2235', # ∵ BECAUSE
'between': '\u226c', # ≬ BETWEEN
'blacktriangleleft': '\u25c2', # ◂ BLACK LEFT-POINTING SMALL TRIANGLE
'blacktriangleright': '\u25b8', # ▸ BLACK RIGHT-POINTING SMALL TRIANGLE
'bowtie': '\u22c8', # ⋈ BOWTIE
'bumpeq': '\u224f', # ≏ DIFFERENCE BETWEEN
'circeq': '\u2257', # ≗ RING EQUAL TO
'circlearrowleft': '\u21ba', # ↺ ANTICLOCKWISE OPEN CIRCLE ARROW
'circlearrowright': '\u21bb', # ↻ CLOCKWISE OPEN CIRCLE ARROW
'coloneq': '\u2254', # ≔ COLON EQUALS
'coloneqq': '\u2254', # ≔ COLON EQUALS
'cong': '\u2245', # ≅ APPROXIMATELY EQUAL TO
'corresponds': '\u2259', # ≙ ESTIMATES
'curlyeqprec': '\u22de', # ⋞ EQUAL TO OR PRECEDES
'curlyeqsucc': '\u22df', # ⋟ EQUAL TO OR SUCCEEDS
'curvearrowleft': '\u21b6', # ↶ ANTICLOCKWISE TOP SEMICIRCLE ARROW
'curvearrowright': '\u21b7', # ↷ CLOCKWISE TOP SEMICIRCLE ARROW
'dasharrow': '\u21e2', # ⇢ RIGHTWARDS DASHED ARROW
'dashleftarrow': '\u21e0', # ⇠ LEFTWARDS DASHED ARROW
'dashrightarrow': '\u21e2', # ⇢ RIGHTWARDS DASHED ARROW
'dashv': '\u22a3', # ⊣ LEFT TACK
'dlsh': '\u21b2', # ↲ DOWNWARDS ARROW WITH TIP LEFTWARDS
'doteq': '\u2250', # ≐ APPROACHES THE LIMIT
'doteqdot': '\u2251', # ≑ GEOMETRICALLY EQUAL TO
'downarrow': '\u2193', # ↓ DOWNWARDS ARROW
'downdownarrows': '\u21ca', # ⇊ DOWNWARDS PAIRED ARROWS
'downdownharpoons': '\u2965', # ⥥ DOWNWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT
'downharpoonleft': '\u21c3', # ⇃ DOWNWARDS HARPOON WITH BARB LEFTWARDS
'downharpoonright': '\u21c2', # ⇂ DOWNWARDS HARPOON WITH BARB RIGHTWARDS
'downuparrows': '\u21f5', # ⇵ DOWNWARDS ARROW LEFTWARDS OF UPWARDS ARROW
'downupharpoons': '\u296f', # ⥯ DOWNWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT
'drsh': '\u21b3', # ↳ DOWNWARDS ARROW WITH TIP RIGHTWARDS
'eqcirc': '\u2256', # ≖ RING IN EQUAL TO
'eqcolon': '\u2255', # ≕ EQUALS COLON
'eqqcolon': '\u2255', # ≕ EQUALS COLON
'eqsim': '\u2242', # ≂ MINUS TILDE
'eqslantgtr': '\u2a96', # ⪖ SLANTED EQUAL TO OR GREATER-THAN
'eqslantless': '\u2a95', # ⪕ SLANTED EQUAL TO OR LESS-THAN
'equiv': '\u2261', # ≡ IDENTICAL TO
'fallingdotseq': '\u2252', # ≒ APPROXIMATELY EQUAL TO OR THE IMAGE OF
'frown': '\u2322', # ⌢ FROWN
'ge': '\u2265', # ≥ GREATER-THAN OR EQUAL TO
'geq': '\u2265', # ≥ GREATER-THAN OR EQUAL TO
'geqq': '\u2267', # ≧ GREATER-THAN OVER EQUAL TO
'geqslant': '\u2a7e', # ⩾ GREATER-THAN OR SLANTED EQUAL TO
'gets': '\u2190', # ← LEFTWARDS ARROW
'gg': '\u226b', # ≫ MUCH GREATER-THAN
'ggcurly': '\u2abc', # ⪼ DOUBLE SUCCEEDS
'ggg': '\u22d9', # ⋙ VERY MUCH GREATER-THAN
'gggtr': '\u22d9', # ⋙ VERY MUCH GREATER-THAN
'gnapprox': '\u2a8a', # ⪊ GREATER-THAN AND NOT APPROXIMATE
'gneq': '\u2a88', # ⪈ GREATER-THAN AND SINGLE-LINE NOT EQUAL TO
'gneqq': '\u2269', # ≩ GREATER-THAN BUT NOT EQUAL TO
'gnsim': '\u22e7', # ⋧ GREATER-THAN BUT NOT EQUIVALENT TO
'gtrapprox': '\u2a86', # ⪆ GREATER-THAN OR APPROXIMATE
'gtreqless': '\u22db', # ⋛ GREATER-THAN EQUAL TO OR LESS-THAN
'gtreqqless': '\u2a8c', # ⪌ GREATER-THAN ABOVE DOUBLE-LINE EQUAL ABOVE LESS-THAN
'gtrless': '\u2277', # ≷ GREATER-THAN OR LESS-THAN
'gtrsim': '\u2273', # ≳ GREATER-THAN OR EQUIVALENT TO
'hash': '\u22d5', # ⋕ EQUAL AND PARALLEL TO
'hookleftarrow': '\u21a9', # ↩ LEFTWARDS ARROW WITH HOOK
'hookrightarrow': '\u21aa', # ↪ RIGHTWARDS ARROW WITH HOOK
'iddots': '\u22f0', # ⋰ UP RIGHT DIAGONAL ELLIPSIS
'impliedby': '\u27f8', # ⟸ LONG LEFTWARDS DOUBLE ARROW
'implies': '\u27f9', # ⟹ LONG RIGHTWARDS DOUBLE ARROW
'in': '\u2208', # ∈ ELEMENT OF
'le': '\u2264', # ≤ LESS-THAN OR EQUAL TO
'leadsto': '\u2933', # ⤳ WAVE ARROW POINTING DIRECTLY RIGHT
'leftarrow': '\u2190', # ← LEFTWARDS ARROW
'leftarrowtail': '\u21a2', # ↢ LEFTWARDS ARROW WITH TAIL
'leftarrowtriangle': '\u21fd', # ⇽ LEFTWARDS OPEN-HEADED ARROW
'leftbarharpoon': '\u296a', # ⥪ LEFTWARDS HARPOON WITH BARB UP ABOVE LONG DASH
'leftharpoondown': '\u21bd', # ↽ LEFTWARDS HARPOON WITH BARB DOWNWARDS
'leftharpoonup': '\u21bc', # ↼ LEFTWARDS HARPOON WITH BARB UPWARDS
'leftleftarrows': '\u21c7', # ⇇ LEFTWARDS PAIRED ARROWS
'leftleftharpoons': '\u2962', # ⥢ LEFTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB DOWN
'leftrightarrow': '\u2194', # ↔ LEFT RIGHT ARROW
'leftrightarrows': '\u21c6', # ⇆ LEFTWARDS ARROW OVER RIGHTWARDS ARROW
'leftrightarrowtriangle': '\u21ff', # ⇿ LEFT RIGHT OPEN-HEADED ARROW
'leftrightharpoon': '\u294a', # ⥊ LEFT BARB UP RIGHT BARB DOWN HARPOON
'leftrightharpoons': '\u21cb', # ⇋ LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON
'leftrightsquigarrow': '\u21ad', # ↭ LEFT RIGHT WAVE ARROW
'leftslice': '\u2aa6', # ⪦ LESS-THAN CLOSED BY CURVE
'leftsquigarrow': '\u21dc', # ⇜ LEFTWARDS SQUIGGLE ARROW
'leftturn': '\u21ba', # ↺ ANTICLOCKWISE OPEN CIRCLE ARROW
'leq': '\u2264', # ≤ LESS-THAN OR EQUAL TO
'leqq': '\u2266', # ≦ LESS-THAN OVER EQUAL TO
'leqslant': '\u2a7d', # ⩽ LESS-THAN OR SLANTED EQUAL TO
'lessapprox': '\u2a85', # ⪅ LESS-THAN OR APPROXIMATE
'lesseqgtr': '\u22da', # ⋚ LESS-THAN EQUAL TO OR GREATER-THAN
'lesseqqgtr': '\u2a8b', # ⪋ LESS-THAN ABOVE DOUBLE-LINE EQUAL ABOVE GREATER-THAN
'lessgtr': '\u2276', # ≶ LESS-THAN OR GREATER-THAN
'lesssim': '\u2272', # ≲ LESS-THAN OR EQUIVALENT TO
'lhd': '\u22b2', # ⊲ NORMAL SUBGROUP OF
'lightning': '\u21af', # ↯ DOWNWARDS ZIGZAG ARROW
'll': '\u226a', # ≪ MUCH LESS-THAN
'llcurly': '\u2abb', # ⪻ DOUBLE PRECEDES
'lll': '\u22d8', # ⋘ VERY MUCH LESS-THAN
'llless': '\u22d8', # ⋘ VERY MUCH LESS-THAN
'lnapprox': '\u2a89', # ⪉ LESS-THAN AND NOT APPROXIMATE
'lneq': '\u2a87', # ⪇ LESS-THAN AND SINGLE-LINE NOT EQUAL TO
'lneqq': '\u2268', # ≨ LESS-THAN BUT NOT EQUAL TO
'lnsim': '\u22e6', # ⋦ LESS-THAN BUT NOT EQUIVALENT TO
'longleftarrow': '\u27f5', # ⟵ LONG LEFTWARDS ARROW
'longleftrightarrow': '\u27f7', # ⟷ LONG LEFT RIGHT ARROW
'longmapsfrom': '\u27fb', # ⟻ LONG LEFTWARDS ARROW FROM BAR
'longmapsto': '\u27fc', # ⟼ LONG RIGHTWARDS ARROW FROM BAR
'longrightarrow': '\u27f6', # ⟶ LONG RIGHTWARDS ARROW
'looparrowleft': '\u21ab', # ↫ LEFTWARDS ARROW WITH LOOP
'looparrowright': '\u21ac', # ↬ RIGHTWARDS ARROW WITH LOOP
'lrtimes': '\u22c8', # ⋈ BOWTIE
'mapsfrom': '\u21a4', # ↤ LEFTWARDS ARROW FROM BAR
'mapsto': '\u21a6', # ↦ RIGHTWARDS ARROW FROM BAR
'mid': '\u2223', # ∣ DIVIDES
'models': '\u22a7', # ⊧ MODELS
'multimap': '\u22b8', # ⊸ MULTIMAP
'multimapboth': '\u29df', # ⧟ DOUBLE-ENDED MULTIMAP
'multimapdotbothA': '\u22b6', # ⊶ ORIGINAL OF
'multimapdotbothB': '\u22b7', # ⊷ IMAGE OF
'multimapinv': '\u27dc', # ⟜ LEFT MULTIMAP
'nLeftarrow': '\u21cd', # ⇍ LEFTWARDS DOUBLE ARROW WITH STROKE
'nLeftrightarrow': '\u21ce', # ⇎ LEFT RIGHT DOUBLE ARROW WITH STROKE
'nRightarrow': '\u21cf', # ⇏ RIGHTWARDS DOUBLE ARROW WITH STROKE
'nVDash': '\u22af', # ⊯ NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE
'nVdash': '\u22ae', # ⊮ DOES NOT FORCE
'ncong': '\u2247', # ≇ NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO
'ne': '\u2260', # ≠ NOT EQUAL TO
'nearrow': '\u2197', # ↗ NORTH EAST ARROW
'neq': '\u2260', # ≠ NOT EQUAL TO
'ngeq': '\u2271', # ≱ NEITHER GREATER-THAN NOR EQUAL TO
'ngtr': '\u226f', # ≯ NOT GREATER-THAN
'ngtrless': '\u2279', # ≹ NEITHER GREATER-THAN NOR LESS-THAN
'ni': '\u220b', # ∋ CONTAINS AS MEMBER
'nleftarrow': '\u219a', # ↚ LEFTWARDS ARROW WITH STROKE
'nleftrightarrow': '\u21ae', # ↮ LEFT RIGHT ARROW WITH STROKE
'nleq': '\u2270', # ≰ NEITHER LESS-THAN NOR EQUAL TO
'nless': '\u226e', # ≮ NOT LESS-THAN
'nlessgtr': '\u2278', # ≸ NEITHER LESS-THAN NOR GREATER-THAN
'nmid': '\u2224', # ∤ DOES NOT DIVIDE
'notasymp': '\u226d', # ≭ NOT EQUIVALENT TO
'notin': '\u2209', # ∉ NOT AN ELEMENT OF
'notni': '\u220c', # ∌ DOES NOT CONTAIN AS MEMBER
'notowner': '\u220c', # ∌ DOES NOT CONTAIN AS MEMBER
'notslash': '\u233f', # ⌿ APL FUNCTIONAL SYMBOL SLASH BAR
'nparallel': '\u2226', # ∦ NOT PARALLEL TO
'nprec': '\u2280', # ⊀ DOES NOT PRECEDE
'npreceq': '\u22e0', # ⋠ DOES NOT PRECEDE OR EQUAL
'nrightarrow': '\u219b', # ↛ RIGHTWARDS ARROW WITH STROKE
'nsim': '\u2241', # ≁ NOT TILDE
'nsimeq': '\u2244', # ≄ NOT ASYMPTOTICALLY EQUAL TO
'nsubseteq': '\u2288', # ⊈ NEITHER A SUBSET OF NOR EQUAL TO
'nsucc': '\u2281', # ⊁ DOES NOT SUCCEED
'nsucceq': '\u22e1', # ⋡ DOES NOT SUCCEED OR EQUAL
'nsupseteq': '\u2289', # ⊉ NEITHER A SUPERSET OF NOR EQUAL TO
'ntriangleleft': '\u22ea', # ⋪ NOT NORMAL SUBGROUP OF
'ntrianglelefteq': '\u22ec', # ⋬ NOT NORMAL SUBGROUP OF OR EQUAL TO
'ntriangleright': '\u22eb', # ⋫ DOES NOT CONTAIN AS NORMAL SUBGROUP
'ntrianglerighteq': '\u22ed', # ⋭ DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL
'nvDash': '\u22ad', # ⊭ NOT TRUE
'nvdash': '\u22ac', # ⊬ DOES NOT PROVE
'nwarrow': '\u2196', # ↖ NORTH WEST ARROW
'owns': '\u220b', # ∋ CONTAINS AS MEMBER
'parallel': '\u2225', # ∥ PARALLEL TO
'perp': '\u27c2', # ⟂ PERPENDICULAR
'pitchfork': '\u22d4', # ⋔ PITCHFORK
'prec': '\u227a', # ≺ PRECEDES
'precapprox': '\u2ab7', # ⪷ PRECEDES ABOVE ALMOST EQUAL TO
'preccurlyeq': '\u227c', # ≼ PRECEDES OR EQUAL TO
'preceq': '\u2aaf', # ⪯ PRECEDES ABOVE SINGLE-LINE EQUALS SIGN
'preceqq': '\u2ab3', # ⪳ PRECEDES ABOVE EQUALS SIGN
'precnapprox': '\u2ab9', # ⪹ PRECEDES ABOVE NOT ALMOST EQUAL TO
'precneqq': '\u2ab5', # ⪵ PRECEDES ABOVE NOT EQUAL TO
'precnsim': '\u22e8', # ⋨ PRECEDES BUT NOT EQUIVALENT TO
'precsim': '\u227e', # ≾ PRECEDES OR EQUIVALENT TO
'propto': '\u221d', # ∝ PROPORTIONAL TO
'restriction': '\u21be', # ↾ UPWARDS HARPOON WITH BARB RIGHTWARDS
'rhd': '\u22b3', # ⊳ CONTAINS AS NORMAL SUBGROUP
'rightarrow': '\u2192', # → RIGHTWARDS ARROW
'rightarrowtail': '\u21a3', # ↣ RIGHTWARDS ARROW WITH TAIL
'rightarrowtriangle': '\u21fe', # ⇾ RIGHTWARDS OPEN-HEADED ARROW
'rightbarharpoon': '\u296c', # ⥬ RIGHTWARDS HARPOON WITH BARB UP ABOVE LONG DASH
'rightharpoondown': '\u21c1', # ⇁ RIGHTWARDS HARPOON WITH BARB DOWNWARDS
'rightharpoonup': '\u21c0', # ⇀ RIGHTWARDS HARPOON WITH BARB UPWARDS
'rightleftarrows': '\u21c4', # ⇄ RIGHTWARDS ARROW OVER LEFTWARDS ARROW
'rightleftharpoon': '\u294b', # ⥋ LEFT BARB DOWN RIGHT BARB UP HARPOON
'rightleftharpoons': '\u21cc', # ⇌ RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON
'rightrightarrows': '\u21c9', # ⇉ RIGHTWARDS PAIRED ARROWS
'rightrightharpoons': '\u2964', # ⥤ RIGHTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB DOWN
'rightslice': '\u2aa7', # ⪧ GREATER-THAN CLOSED BY CURVE
'rightsquigarrow': '\u21dd', # ⇝ RIGHTWARDS SQUIGGLE ARROW
'rightturn': '\u21bb', # ↻ CLOCKWISE OPEN CIRCLE ARROW
'risingdotseq': '\u2253', # ≓ IMAGE OF OR APPROXIMATELY EQUAL TO
'searrow': '\u2198', # ↘ SOUTH EAST ARROW
'sim': '\u223c', # ∼ TILDE OPERATOR
'simeq': '\u2243', # ≃ ASYMPTOTICALLY EQUAL TO
'smile': '\u2323', # ⌣ SMILE
'sqsubset': '\u228f', # ⊏ SQUARE IMAGE OF
'sqsubseteq': '\u2291', # ⊑ SQUARE IMAGE OF OR EQUAL TO
'sqsupset': '\u2290', # ⊐ SQUARE ORIGINAL OF
'sqsupseteq': '\u2292', # ⊒ SQUARE ORIGINAL OF OR EQUAL TO
'strictfi': '\u297c', # ⥼ LEFT FISH TAIL
'strictif': '\u297d', # ⥽ RIGHT FISH TAIL
'subset': '\u2282', # ⊂ SUBSET OF
'subseteq': '\u2286', # ⊆ SUBSET OF OR EQUAL TO
'subseteqq': '\u2ac5', # ⫅ SUBSET OF ABOVE EQUALS SIGN
'subsetneq': '\u228a', # ⊊ SUBSET OF WITH NOT EQUAL TO
'subsetneqq': '\u2acb', # ⫋ SUBSET OF ABOVE NOT EQUAL TO
'succ': '\u227b', # ≻ SUCCEEDS
'succapprox': '\u2ab8', # ⪸ SUCCEEDS ABOVE ALMOST EQUAL TO
'succcurlyeq': '\u227d', # ≽ SUCCEEDS OR EQUAL TO
'succeq': '\u2ab0', # ⪰ SUCCEEDS ABOVE SINGLE-LINE EQUALS SIGN
'succeqq': '\u2ab4', # ⪴ SUCCEEDS ABOVE EQUALS SIGN
'succnapprox': '\u2aba', # ⪺ SUCCEEDS ABOVE NOT ALMOST EQUAL TO
'succneqq': '\u2ab6', # ⪶ SUCCEEDS ABOVE NOT EQUAL TO
'succnsim': '\u22e9', # ⋩ SUCCEEDS BUT NOT EQUIVALENT TO
'succsim': '\u227f', # ≿ SUCCEEDS OR EQUIVALENT TO
'supset': '\u2283', # ⊃ SUPERSET OF
'supseteq': '\u2287', # ⊇ SUPERSET OF OR EQUAL TO
'supseteqq': '\u2ac6', # ⫆ SUPERSET OF ABOVE EQUALS SIGN
'supsetneq': '\u228b', # ⊋ SUPERSET OF WITH NOT EQUAL TO
'supsetneqq': '\u2acc', # ⫌ SUPERSET OF ABOVE NOT EQUAL TO
'swarrow': '\u2199', # ↙ SOUTH WEST ARROW
'therefore': '\u2234', # ∴ THEREFORE
'to': '\u2192', # → RIGHTWARDS ARROW
'trianglelefteq': '\u22b4', # ⊴ NORMAL SUBGROUP OF OR EQUAL TO
'triangleq': '\u225c', # ≜ DELTA EQUAL TO
'trianglerighteq': '\u22b5', # ⊵ CONTAINS AS NORMAL SUBGROUP OR EQUAL TO
'twoheadleftarrow': '\u219e', # ↞ LEFTWARDS TWO HEADED ARROW
'twoheadrightarrow': '\u21a0', # ↠ RIGHTWARDS TWO HEADED ARROW
'uparrow': '\u2191', # ↑ UPWARDS ARROW
'updownarrow': '\u2195', # ↕ UP DOWN ARROW
'updownarrows': '\u21c5', # ⇅ UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW
'updownharpoons': '\u296e', # ⥮ UPWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT
'upharpoonleft': '\u21bf', # ↿ UPWARDS HARPOON WITH BARB LEFTWARDS
'upharpoonright': '\u21be', # ↾ UPWARDS HARPOON WITH BARB RIGHTWARDS
'upuparrows': '\u21c8', # ⇈ UPWARDS PAIRED ARROWS
'upupharpoons': '\u2963', # ⥣ UPWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT
'vDash': '\u22a8', # ⊨ TRUE
'vartriangle': '\u25b5', # ▵ WHITE UP-POINTING SMALL TRIANGLE
'vartriangleleft': '\u22b2', # ⊲ NORMAL SUBGROUP OF
'vartriangleright': '\u22b3', # ⊳ CONTAINS AS NORMAL SUBGROUP
'vdash': '\u22a2', # ⊢ RIGHT TACK
'wasytherefore': '\u2234', # ∴ THEREFORE
}
mathunder = {
'underbrace': '\u23df', # ⏟ BOTTOM CURLY BRACKET
}
space = {
' ': ' ', # SPACE
',': '\u2006', #   SIX-PER-EM SPACE
':': '\u205f', #   MEDIUM MATHEMATICAL SPACE
'medspace': '\u205f', #   MEDIUM MATHEMATICAL SPACE
'quad': '\u2001', #   EM QUAD
'thinspace': '\u2006', #   SIX-PER-EM SPACE
}
@@ -0,0 +1,808 @@
# LaTeX math to Unicode symbols translation table
# for use with the translate() method of unicode objects.
# Generated with ``write_unichar2tex.py`` from the data in
# http://milde.users.sourceforge.net/LUCR/Math/
# Includes commands from: standard LaTeX, amssymb, amsmath
uni2tex_table = {
0xa0: '~',
0xa3: '\\pounds ',
0xa5: '\\yen ',
0xa7: '\\S ',
0xac: '\\neg ',
0xb1: '\\pm ',
0xb6: '\\P ',
0xd7: '\\times ',
0xf0: '\\eth ',
0xf7: '\\div ',
0x131: '\\imath ',
0x237: '\\jmath ',
0x393: '\\Gamma ',
0x394: '\\Delta ',
0x398: '\\Theta ',
0x39b: '\\Lambda ',
0x39e: '\\Xi ',
0x3a0: '\\Pi ',
0x3a3: '\\Sigma ',
0x3a5: '\\Upsilon ',
0x3a6: '\\Phi ',
0x3a8: '\\Psi ',
0x3a9: '\\Omega ',
0x3b1: '\\alpha ',
0x3b2: '\\beta ',
0x3b3: '\\gamma ',
0x3b4: '\\delta ',
0x3b5: '\\varepsilon ',
0x3b6: '\\zeta ',
0x3b7: '\\eta ',
0x3b8: '\\theta ',
0x3b9: '\\iota ',
0x3ba: '\\kappa ',
0x3bb: '\\lambda ',
0x3bc: '\\mu ',
0x3bd: '\\nu ',
0x3be: '\\xi ',
0x3c0: '\\pi ',
0x3c1: '\\rho ',
0x3c2: '\\varsigma ',
0x3c3: '\\sigma ',
0x3c4: '\\tau ',
0x3c5: '\\upsilon ',
0x3c6: '\\varphi ',
0x3c7: '\\chi ',
0x3c8: '\\psi ',
0x3c9: '\\omega ',
0x3d1: '\\vartheta ',
0x3d5: '\\phi ',
0x3d6: '\\varpi ',
0x3dd: '\\digamma ',
0x3f0: '\\varkappa ',
0x3f1: '\\varrho ',
0x3f5: '\\epsilon ',
0x3f6: '\\backepsilon ',
0x2001: '\\quad ',
0x2003: '\\quad ',
0x2006: '\\, ',
0x2016: '\\| ',
0x2020: '\\dagger ',
0x2021: '\\ddagger ',
0x2022: '\\bullet ',
0x2026: '\\ldots ',
0x2032: '\\prime ',
0x2035: '\\backprime ',
0x205f: '\\: ',
0x2102: '\\mathbb{C}',
0x210b: '\\mathcal{H}',
0x210c: '\\mathfrak{H}',
0x210d: '\\mathbb{H}',
0x210f: '\\hslash ',
0x2110: '\\mathcal{I}',
0x2111: '\\Im ',
0x2112: '\\mathcal{L}',
0x2113: '\\ell ',
0x2115: '\\mathbb{N}',
0x2118: '\\wp ',
0x2119: '\\mathbb{P}',
0x211a: '\\mathbb{Q}',
0x211b: '\\mathcal{R}',
0x211c: '\\Re ',
0x211d: '\\mathbb{R}',
0x2124: '\\mathbb{Z}',
0x2127: '\\mho ',
0x2128: '\\mathfrak{Z}',
0x212c: '\\mathcal{B}',
0x212d: '\\mathfrak{C}',
0x2130: '\\mathcal{E}',
0x2131: '\\mathcal{F}',
0x2132: '\\Finv ',
0x2133: '\\mathcal{M}',
0x2135: '\\aleph ',
0x2136: '\\beth ',
0x2137: '\\gimel ',
0x2138: '\\daleth ',
0x2190: '\\leftarrow ',
0x2191: '\\uparrow ',
0x2192: '\\rightarrow ',
0x2193: '\\downarrow ',
0x2194: '\\leftrightarrow ',
0x2195: '\\updownarrow ',
0x2196: '\\nwarrow ',
0x2197: '\\nearrow ',
0x2198: '\\searrow ',
0x2199: '\\swarrow ',
0x219a: '\\nleftarrow ',
0x219b: '\\nrightarrow ',
0x219e: '\\twoheadleftarrow ',
0x21a0: '\\twoheadrightarrow ',
0x21a2: '\\leftarrowtail ',
0x21a3: '\\rightarrowtail ',
0x21a6: '\\mapsto ',
0x21a9: '\\hookleftarrow ',
0x21aa: '\\hookrightarrow ',
0x21ab: '\\looparrowleft ',
0x21ac: '\\looparrowright ',
0x21ad: '\\leftrightsquigarrow ',
0x21ae: '\\nleftrightarrow ',
0x21b0: '\\Lsh ',
0x21b1: '\\Rsh ',
0x21b6: '\\curvearrowleft ',
0x21b7: '\\curvearrowright ',
0x21ba: '\\circlearrowleft ',
0x21bb: '\\circlearrowright ',
0x21bc: '\\leftharpoonup ',
0x21bd: '\\leftharpoondown ',
0x21be: '\\upharpoonright ',
0x21bf: '\\upharpoonleft ',
0x21c0: '\\rightharpoonup ',
0x21c1: '\\rightharpoondown ',
0x21c2: '\\downharpoonright ',
0x21c3: '\\downharpoonleft ',
0x21c4: '\\rightleftarrows ',
0x21c6: '\\leftrightarrows ',
0x21c7: '\\leftleftarrows ',
0x21c8: '\\upuparrows ',
0x21c9: '\\rightrightarrows ',
0x21ca: '\\downdownarrows ',
0x21cb: '\\leftrightharpoons ',
0x21cc: '\\rightleftharpoons ',
0x21cd: '\\nLeftarrow ',
0x21ce: '\\nLeftrightarrow ',
0x21cf: '\\nRightarrow ',
0x21d0: '\\Leftarrow ',
0x21d1: '\\Uparrow ',
0x21d2: '\\Rightarrow ',
0x21d3: '\\Downarrow ',
0x21d4: '\\Leftrightarrow ',
0x21d5: '\\Updownarrow ',
0x21da: '\\Lleftarrow ',
0x21db: '\\Rrightarrow ',
0x21dd: '\\rightsquigarrow ',
0x21e0: '\\dashleftarrow ',
0x21e2: '\\dashrightarrow ',
0x2200: '\\forall ',
0x2201: '\\complement ',
0x2202: '\\partial ',
0x2203: '\\exists ',
0x2204: '\\nexists ',
0x2205: '\\emptyset ',
0x2207: '\\nabla ',
0x2208: '\\in ',
0x2209: '\\notin ',
0x220b: '\\ni ',
0x220f: '\\prod ',
0x2210: '\\coprod ',
0x2211: '\\sum ',
0x2212: '-',
0x2213: '\\mp ',
0x2214: '\\dotplus ',
0x2215: '\\slash ',
0x2216: '\\smallsetminus ',
0x2217: '\\ast ',
0x2218: '\\circ ',
0x2219: '\\bullet ',
0x221a: '\\surd ',
0x221b: '\\sqrt[3] ',
0x221c: '\\sqrt[4] ',
0x221d: '\\propto ',
0x221e: '\\infty ',
0x2220: '\\angle ',
0x2221: '\\measuredangle ',
0x2222: '\\sphericalangle ',
0x2223: '\\mid ',
0x2224: '\\nmid ',
0x2225: '\\parallel ',
0x2226: '\\nparallel ',
0x2227: '\\wedge ',
0x2228: '\\vee ',
0x2229: '\\cap ',
0x222a: '\\cup ',
0x222b: '\\int ',
0x222c: '\\iint ',
0x222d: '\\iiint ',
0x222e: '\\oint ',
0x2234: '\\therefore ',
0x2235: '\\because ',
0x2236: ':',
0x223c: '\\sim ',
0x223d: '\\backsim ',
0x2240: '\\wr ',
0x2241: '\\nsim ',
0x2242: '\\eqsim ',
0x2243: '\\simeq ',
0x2245: '\\cong ',
0x2247: '\\ncong ',
0x2248: '\\approx ',
0x224a: '\\approxeq ',
0x224d: '\\asymp ',
0x224e: '\\Bumpeq ',
0x224f: '\\bumpeq ',
0x2250: '\\doteq ',
0x2251: '\\Doteq ',
0x2252: '\\fallingdotseq ',
0x2253: '\\risingdotseq ',
0x2256: '\\eqcirc ',
0x2257: '\\circeq ',
0x225c: '\\triangleq ',
0x2260: '\\neq ',
0x2261: '\\equiv ',
0x2264: '\\leq ',
0x2265: '\\geq ',
0x2266: '\\leqq ',
0x2267: '\\geqq ',
0x2268: '\\lneqq ',
0x2269: '\\gneqq ',
0x226a: '\\ll ',
0x226b: '\\gg ',
0x226c: '\\between ',
0x226e: '\\nless ',
0x226f: '\\ngtr ',
0x2270: '\\nleq ',
0x2271: '\\ngeq ',
0x2272: '\\lesssim ',
0x2273: '\\gtrsim ',
0x2276: '\\lessgtr ',
0x2277: '\\gtrless ',
0x227a: '\\prec ',
0x227b: '\\succ ',
0x227c: '\\preccurlyeq ',
0x227d: '\\succcurlyeq ',
0x227e: '\\precsim ',
0x227f: '\\succsim ',
0x2280: '\\nprec ',
0x2281: '\\nsucc ',
0x2282: '\\subset ',
0x2283: '\\supset ',
0x2286: '\\subseteq ',
0x2287: '\\supseteq ',
0x2288: '\\nsubseteq ',
0x2289: '\\nsupseteq ',
0x228a: '\\subsetneq ',
0x228b: '\\supsetneq ',
0x228e: '\\uplus ',
0x228f: '\\sqsubset ',
0x2290: '\\sqsupset ',
0x2291: '\\sqsubseteq ',
0x2292: '\\sqsupseteq ',
0x2293: '\\sqcap ',
0x2294: '\\sqcup ',
0x2295: '\\oplus ',
0x2296: '\\ominus ',
0x2297: '\\otimes ',
0x2298: '\\oslash ',
0x2299: '\\odot ',
0x229a: '\\circledcirc ',
0x229b: '\\circledast ',
0x229d: '\\circleddash ',
0x229e: '\\boxplus ',
0x229f: '\\boxminus ',
0x22a0: '\\boxtimes ',
0x22a1: '\\boxdot ',
0x22a2: '\\vdash ',
0x22a3: '\\dashv ',
0x22a4: '\\top ',
0x22a5: '\\bot ',
0x22a7: '\\models ',
0x22a8: '\\vDash ',
0x22a9: '\\Vdash ',
0x22aa: '\\Vvdash ',
0x22ac: '\\nvdash ',
0x22ad: '\\nvDash ',
0x22ae: '\\nVdash ',
0x22af: '\\nVDash ',
0x22b2: '\\vartriangleleft ',
0x22b3: '\\vartriangleright ',
0x22b4: '\\trianglelefteq ',
0x22b5: '\\trianglerighteq ',
0x22b8: '\\multimap ',
0x22ba: '\\intercal ',
0x22bb: '\\veebar ',
0x22bc: '\\barwedge ',
0x22c0: '\\bigwedge ',
0x22c1: '\\bigvee ',
0x22c2: '\\bigcap ',
0x22c3: '\\bigcup ',
0x22c4: '\\diamond ',
0x22c5: '\\cdot ',
0x22c6: '\\star ',
0x22c7: '\\divideontimes ',
0x22c8: '\\bowtie ',
0x22c9: '\\ltimes ',
0x22ca: '\\rtimes ',
0x22cb: '\\leftthreetimes ',
0x22cc: '\\rightthreetimes ',
0x22cd: '\\backsimeq ',
0x22ce: '\\curlyvee ',
0x22cf: '\\curlywedge ',
0x22d0: '\\Subset ',
0x22d1: '\\Supset ',
0x22d2: '\\Cap ',
0x22d3: '\\Cup ',
0x22d4: '\\pitchfork ',
0x22d6: '\\lessdot ',
0x22d7: '\\gtrdot ',
0x22d8: '\\lll ',
0x22d9: '\\ggg ',
0x22da: '\\lesseqgtr ',
0x22db: '\\gtreqless ',
0x22de: '\\curlyeqprec ',
0x22df: '\\curlyeqsucc ',
0x22e0: '\\npreceq ',
0x22e1: '\\nsucceq ',
0x22e6: '\\lnsim ',
0x22e7: '\\gnsim ',
0x22e8: '\\precnsim ',
0x22e9: '\\succnsim ',
0x22ea: '\\ntriangleleft ',
0x22eb: '\\ntriangleright ',
0x22ec: '\\ntrianglelefteq ',
0x22ed: '\\ntrianglerighteq ',
0x22ee: '\\vdots ',
0x22ef: '\\cdots ',
0x22f1: '\\ddots ',
0x2308: '\\lceil ',
0x2309: '\\rceil ',
0x230a: '\\lfloor ',
0x230b: '\\rfloor ',
0x231c: '\\ulcorner ',
0x231d: '\\urcorner ',
0x231e: '\\llcorner ',
0x231f: '\\lrcorner ',
0x2322: '\\frown ',
0x2323: '\\smile ',
0x23aa: '\\bracevert ',
0x23b0: '\\lmoustache ',
0x23b1: '\\rmoustache ',
0x23d0: '\\arrowvert ',
0x23de: '\\overbrace ',
0x23df: '\\underbrace ',
0x24c7: '\\circledR ',
0x24c8: '\\circledS ',
0x25b2: '\\blacktriangle ',
0x25b3: '\\bigtriangleup ',
0x25b7: '\\triangleright ',
0x25bc: '\\blacktriangledown ',
0x25bd: '\\bigtriangledown ',
0x25c1: '\\triangleleft ',
0x25c7: '\\Diamond ',
0x25ca: '\\lozenge ',
0x25ef: '\\bigcirc ',
0x25fb: '\\square ',
0x25fc: '\\blacksquare ',
0x2605: '\\bigstar ',
0x2660: '\\spadesuit ',
0x2661: '\\heartsuit ',
0x2662: '\\diamondsuit ',
0x2663: '\\clubsuit ',
0x266d: '\\flat ',
0x266e: '\\natural ',
0x266f: '\\sharp ',
0x2713: '\\checkmark ',
0x2720: '\\maltese ',
0x27c2: '\\perp ',
0x27cb: '\\diagup ',
0x27cd: '\\diagdown ',
0x27e8: '\\langle ',
0x27e9: '\\rangle ',
0x27ee: '\\lgroup ',
0x27ef: '\\rgroup ',
0x27f5: '\\longleftarrow ',
0x27f6: '\\longrightarrow ',
0x27f7: '\\longleftrightarrow ',
0x27f8: '\\Longleftarrow ',
0x27f9: '\\Longrightarrow ',
0x27fa: '\\Longleftrightarrow ',
0x27fc: '\\longmapsto ',
0x29eb: '\\blacklozenge ',
0x29f5: '\\setminus ',
0x2a00: '\\bigodot ',
0x2a01: '\\bigoplus ',
0x2a02: '\\bigotimes ',
0x2a04: '\\biguplus ',
0x2a06: '\\bigsqcup ',
0x2a0c: '\\iiiint ',
0x2a3f: '\\amalg ',
0x2a5e: '\\doublebarwedge ',
0x2a7d: '\\leqslant ',
0x2a7e: '\\geqslant ',
0x2a85: '\\lessapprox ',
0x2a86: '\\gtrapprox ',
0x2a87: '\\lneq ',
0x2a88: '\\gneq ',
0x2a89: '\\lnapprox ',
0x2a8a: '\\gnapprox ',
0x2a8b: '\\lesseqqgtr ',
0x2a8c: '\\gtreqqless ',
0x2a95: '\\eqslantless ',
0x2a96: '\\eqslantgtr ',
0x2aaf: '\\preceq ',
0x2ab0: '\\succeq ',
0x2ab5: '\\precneqq ',
0x2ab6: '\\succneqq ',
0x2ab7: '\\precapprox ',
0x2ab8: '\\succapprox ',
0x2ab9: '\\precnapprox ',
0x2aba: '\\succnapprox ',
0x2ac5: '\\subseteqq ',
0x2ac6: '\\supseteqq ',
0x2acb: '\\subsetneqq ',
0x2acc: '\\supsetneqq ',
0x2b1c: '\\Box ',
0x1d400: '\\mathbf{A}',
0x1d401: '\\mathbf{B}',
0x1d402: '\\mathbf{C}',
0x1d403: '\\mathbf{D}',
0x1d404: '\\mathbf{E}',
0x1d405: '\\mathbf{F}',
0x1d406: '\\mathbf{G}',
0x1d407: '\\mathbf{H}',
0x1d408: '\\mathbf{I}',
0x1d409: '\\mathbf{J}',
0x1d40a: '\\mathbf{K}',
0x1d40b: '\\mathbf{L}',
0x1d40c: '\\mathbf{M}',
0x1d40d: '\\mathbf{N}',
0x1d40e: '\\mathbf{O}',
0x1d40f: '\\mathbf{P}',
0x1d410: '\\mathbf{Q}',
0x1d411: '\\mathbf{R}',
0x1d412: '\\mathbf{S}',
0x1d413: '\\mathbf{T}',
0x1d414: '\\mathbf{U}',
0x1d415: '\\mathbf{V}',
0x1d416: '\\mathbf{W}',
0x1d417: '\\mathbf{X}',
0x1d418: '\\mathbf{Y}',
0x1d419: '\\mathbf{Z}',
0x1d41a: '\\mathbf{a}',
0x1d41b: '\\mathbf{b}',
0x1d41c: '\\mathbf{c}',
0x1d41d: '\\mathbf{d}',
0x1d41e: '\\mathbf{e}',
0x1d41f: '\\mathbf{f}',
0x1d420: '\\mathbf{g}',
0x1d421: '\\mathbf{h}',
0x1d422: '\\mathbf{i}',
0x1d423: '\\mathbf{j}',
0x1d424: '\\mathbf{k}',
0x1d425: '\\mathbf{l}',
0x1d426: '\\mathbf{m}',
0x1d427: '\\mathbf{n}',
0x1d428: '\\mathbf{o}',
0x1d429: '\\mathbf{p}',
0x1d42a: '\\mathbf{q}',
0x1d42b: '\\mathbf{r}',
0x1d42c: '\\mathbf{s}',
0x1d42d: '\\mathbf{t}',
0x1d42e: '\\mathbf{u}',
0x1d42f: '\\mathbf{v}',
0x1d430: '\\mathbf{w}',
0x1d431: '\\mathbf{x}',
0x1d432: '\\mathbf{y}',
0x1d433: '\\mathbf{z}',
0x1d434: 'A',
0x1d435: 'B',
0x1d436: 'C',
0x1d437: 'D',
0x1d438: 'E',
0x1d439: 'F',
0x1d43a: 'G',
0x1d43b: 'H',
0x1d43c: 'I',
0x1d43d: 'J',
0x1d43e: 'K',
0x1d43f: 'L',
0x1d440: 'M',
0x1d441: 'N',
0x1d442: 'O',
0x1d443: 'P',
0x1d444: 'Q',
0x1d445: 'R',
0x1d446: 'S',
0x1d447: 'T',
0x1d448: 'U',
0x1d449: 'V',
0x1d44a: 'W',
0x1d44b: 'X',
0x1d44c: 'Y',
0x1d44d: 'Z',
0x1d44e: 'a',
0x1d44f: 'b',
0x1d450: 'c',
0x1d451: 'd',
0x1d452: 'e',
0x1d453: 'f',
0x1d454: 'g',
0x1d456: 'i',
0x1d457: 'j',
0x1d458: 'k',
0x1d459: 'l',
0x1d45a: 'm',
0x1d45b: 'n',
0x1d45c: 'o',
0x1d45d: 'p',
0x1d45e: 'q',
0x1d45f: 'r',
0x1d460: 's',
0x1d461: 't',
0x1d462: 'u',
0x1d463: 'v',
0x1d464: 'w',
0x1d465: 'x',
0x1d466: 'y',
0x1d467: 'z',
0x1d49c: '\\mathcal{A}',
0x1d49e: '\\mathcal{C}',
0x1d49f: '\\mathcal{D}',
0x1d4a2: '\\mathcal{G}',
0x1d4a5: '\\mathcal{J}',
0x1d4a6: '\\mathcal{K}',
0x1d4a9: '\\mathcal{N}',
0x1d4aa: '\\mathcal{O}',
0x1d4ab: '\\mathcal{P}',
0x1d4ac: '\\mathcal{Q}',
0x1d4ae: '\\mathcal{S}',
0x1d4af: '\\mathcal{T}',
0x1d4b0: '\\mathcal{U}',
0x1d4b1: '\\mathcal{V}',
0x1d4b2: '\\mathcal{W}',
0x1d4b3: '\\mathcal{X}',
0x1d4b4: '\\mathcal{Y}',
0x1d4b5: '\\mathcal{Z}',
0x1d504: '\\mathfrak{A}',
0x1d505: '\\mathfrak{B}',
0x1d507: '\\mathfrak{D}',
0x1d508: '\\mathfrak{E}',
0x1d509: '\\mathfrak{F}',
0x1d50a: '\\mathfrak{G}',
0x1d50d: '\\mathfrak{J}',
0x1d50e: '\\mathfrak{K}',
0x1d50f: '\\mathfrak{L}',
0x1d510: '\\mathfrak{M}',
0x1d511: '\\mathfrak{N}',
0x1d512: '\\mathfrak{O}',
0x1d513: '\\mathfrak{P}',
0x1d514: '\\mathfrak{Q}',
0x1d516: '\\mathfrak{S}',
0x1d517: '\\mathfrak{T}',
0x1d518: '\\mathfrak{U}',
0x1d519: '\\mathfrak{V}',
0x1d51a: '\\mathfrak{W}',
0x1d51b: '\\mathfrak{X}',
0x1d51c: '\\mathfrak{Y}',
0x1d51e: '\\mathfrak{a}',
0x1d51f: '\\mathfrak{b}',
0x1d520: '\\mathfrak{c}',
0x1d521: '\\mathfrak{d}',
0x1d522: '\\mathfrak{e}',
0x1d523: '\\mathfrak{f}',
0x1d524: '\\mathfrak{g}',
0x1d525: '\\mathfrak{h}',
0x1d526: '\\mathfrak{i}',
0x1d527: '\\mathfrak{j}',
0x1d528: '\\mathfrak{k}',
0x1d529: '\\mathfrak{l}',
0x1d52a: '\\mathfrak{m}',
0x1d52b: '\\mathfrak{n}',
0x1d52c: '\\mathfrak{o}',
0x1d52d: '\\mathfrak{p}',
0x1d52e: '\\mathfrak{q}',
0x1d52f: '\\mathfrak{r}',
0x1d530: '\\mathfrak{s}',
0x1d531: '\\mathfrak{t}',
0x1d532: '\\mathfrak{u}',
0x1d533: '\\mathfrak{v}',
0x1d534: '\\mathfrak{w}',
0x1d535: '\\mathfrak{x}',
0x1d536: '\\mathfrak{y}',
0x1d537: '\\mathfrak{z}',
0x1d538: '\\mathbb{A}',
0x1d539: '\\mathbb{B}',
0x1d53b: '\\mathbb{D}',
0x1d53c: '\\mathbb{E}',
0x1d53d: '\\mathbb{F}',
0x1d53e: '\\mathbb{G}',
0x1d540: '\\mathbb{I}',
0x1d541: '\\mathbb{J}',
0x1d542: '\\mathbb{K}',
0x1d543: '\\mathbb{L}',
0x1d544: '\\mathbb{M}',
0x1d546: '\\mathbb{O}',
0x1d54a: '\\mathbb{S}',
0x1d54b: '\\mathbb{T}',
0x1d54c: '\\mathbb{U}',
0x1d54d: '\\mathbb{V}',
0x1d54e: '\\mathbb{W}',
0x1d54f: '\\mathbb{X}',
0x1d550: '\\mathbb{Y}',
0x1d55c: '\\Bbbk ',
0x1d5a0: '\\mathsf{A}',
0x1d5a1: '\\mathsf{B}',
0x1d5a2: '\\mathsf{C}',
0x1d5a3: '\\mathsf{D}',
0x1d5a4: '\\mathsf{E}',
0x1d5a5: '\\mathsf{F}',
0x1d5a6: '\\mathsf{G}',
0x1d5a7: '\\mathsf{H}',
0x1d5a8: '\\mathsf{I}',
0x1d5a9: '\\mathsf{J}',
0x1d5aa: '\\mathsf{K}',
0x1d5ab: '\\mathsf{L}',
0x1d5ac: '\\mathsf{M}',
0x1d5ad: '\\mathsf{N}',
0x1d5ae: '\\mathsf{O}',
0x1d5af: '\\mathsf{P}',
0x1d5b0: '\\mathsf{Q}',
0x1d5b1: '\\mathsf{R}',
0x1d5b2: '\\mathsf{S}',
0x1d5b3: '\\mathsf{T}',
0x1d5b4: '\\mathsf{U}',
0x1d5b5: '\\mathsf{V}',
0x1d5b6: '\\mathsf{W}',
0x1d5b7: '\\mathsf{X}',
0x1d5b8: '\\mathsf{Y}',
0x1d5b9: '\\mathsf{Z}',
0x1d5ba: '\\mathsf{a}',
0x1d5bb: '\\mathsf{b}',
0x1d5bc: '\\mathsf{c}',
0x1d5bd: '\\mathsf{d}',
0x1d5be: '\\mathsf{e}',
0x1d5bf: '\\mathsf{f}',
0x1d5c0: '\\mathsf{g}',
0x1d5c1: '\\mathsf{h}',
0x1d5c2: '\\mathsf{i}',
0x1d5c3: '\\mathsf{j}',
0x1d5c4: '\\mathsf{k}',
0x1d5c5: '\\mathsf{l}',
0x1d5c6: '\\mathsf{m}',
0x1d5c7: '\\mathsf{n}',
0x1d5c8: '\\mathsf{o}',
0x1d5c9: '\\mathsf{p}',
0x1d5ca: '\\mathsf{q}',
0x1d5cb: '\\mathsf{r}',
0x1d5cc: '\\mathsf{s}',
0x1d5cd: '\\mathsf{t}',
0x1d5ce: '\\mathsf{u}',
0x1d5cf: '\\mathsf{v}',
0x1d5d0: '\\mathsf{w}',
0x1d5d1: '\\mathsf{x}',
0x1d5d2: '\\mathsf{y}',
0x1d5d3: '\\mathsf{z}',
0x1d670: '\\mathtt{A}',
0x1d671: '\\mathtt{B}',
0x1d672: '\\mathtt{C}',
0x1d673: '\\mathtt{D}',
0x1d674: '\\mathtt{E}',
0x1d675: '\\mathtt{F}',
0x1d676: '\\mathtt{G}',
0x1d677: '\\mathtt{H}',
0x1d678: '\\mathtt{I}',
0x1d679: '\\mathtt{J}',
0x1d67a: '\\mathtt{K}',
0x1d67b: '\\mathtt{L}',
0x1d67c: '\\mathtt{M}',
0x1d67d: '\\mathtt{N}',
0x1d67e: '\\mathtt{O}',
0x1d67f: '\\mathtt{P}',
0x1d680: '\\mathtt{Q}',
0x1d681: '\\mathtt{R}',
0x1d682: '\\mathtt{S}',
0x1d683: '\\mathtt{T}',
0x1d684: '\\mathtt{U}',
0x1d685: '\\mathtt{V}',
0x1d686: '\\mathtt{W}',
0x1d687: '\\mathtt{X}',
0x1d688: '\\mathtt{Y}',
0x1d689: '\\mathtt{Z}',
0x1d68a: '\\mathtt{a}',
0x1d68b: '\\mathtt{b}',
0x1d68c: '\\mathtt{c}',
0x1d68d: '\\mathtt{d}',
0x1d68e: '\\mathtt{e}',
0x1d68f: '\\mathtt{f}',
0x1d690: '\\mathtt{g}',
0x1d691: '\\mathtt{h}',
0x1d692: '\\mathtt{i}',
0x1d693: '\\mathtt{j}',
0x1d694: '\\mathtt{k}',
0x1d695: '\\mathtt{l}',
0x1d696: '\\mathtt{m}',
0x1d697: '\\mathtt{n}',
0x1d698: '\\mathtt{o}',
0x1d699: '\\mathtt{p}',
0x1d69a: '\\mathtt{q}',
0x1d69b: '\\mathtt{r}',
0x1d69c: '\\mathtt{s}',
0x1d69d: '\\mathtt{t}',
0x1d69e: '\\mathtt{u}',
0x1d69f: '\\mathtt{v}',
0x1d6a0: '\\mathtt{w}',
0x1d6a1: '\\mathtt{x}',
0x1d6a2: '\\mathtt{y}',
0x1d6a3: '\\mathtt{z}',
0x1d6a4: '\\imath ',
0x1d6a5: '\\jmath ',
0x1d6aa: '\\mathbf{\\Gamma}',
0x1d6ab: '\\mathbf{\\Delta}',
0x1d6af: '\\mathbf{\\Theta}',
0x1d6b2: '\\mathbf{\\Lambda}',
0x1d6b5: '\\mathbf{\\Xi}',
0x1d6b7: '\\mathbf{\\Pi}',
0x1d6ba: '\\mathbf{\\Sigma}',
0x1d6bc: '\\mathbf{\\Upsilon}',
0x1d6bd: '\\mathbf{\\Phi}',
0x1d6bf: '\\mathbf{\\Psi}',
0x1d6c0: '\\mathbf{\\Omega}',
0x1d6e4: '\\mathit{\\Gamma}',
0x1d6e5: '\\mathit{\\Delta}',
0x1d6e9: '\\mathit{\\Theta}',
0x1d6ec: '\\mathit{\\Lambda}',
0x1d6ef: '\\mathit{\\Xi}',
0x1d6f1: '\\mathit{\\Pi}',
0x1d6f4: '\\mathit{\\Sigma}',
0x1d6f6: '\\mathit{\\Upsilon}',
0x1d6f7: '\\mathit{\\Phi}',
0x1d6f9: '\\mathit{\\Psi}',
0x1d6fa: '\\mathit{\\Omega}',
0x1d6fc: '\\alpha ',
0x1d6fd: '\\beta ',
0x1d6fe: '\\gamma ',
0x1d6ff: '\\delta ',
0x1d700: '\\varepsilon ',
0x1d701: '\\zeta ',
0x1d702: '\\eta ',
0x1d703: '\\theta ',
0x1d704: '\\iota ',
0x1d705: '\\kappa ',
0x1d706: '\\lambda ',
0x1d707: '\\mu ',
0x1d708: '\\nu ',
0x1d709: '\\xi ',
0x1d70b: '\\pi ',
0x1d70c: '\\rho ',
0x1d70d: '\\varsigma ',
0x1d70e: '\\sigma ',
0x1d70f: '\\tau ',
0x1d710: '\\upsilon ',
0x1d711: '\\varphi ',
0x1d712: '\\chi ',
0x1d713: '\\psi ',
0x1d714: '\\omega ',
0x1d715: '\\partial ',
0x1d716: '\\epsilon ',
0x1d717: '\\vartheta ',
0x1d718: '\\varkappa ',
0x1d719: '\\phi ',
0x1d71a: '\\varrho ',
0x1d71b: '\\varpi ',
0x1d7ce: '\\mathbf{0}',
0x1d7cf: '\\mathbf{1}',
0x1d7d0: '\\mathbf{2}',
0x1d7d1: '\\mathbf{3}',
0x1d7d2: '\\mathbf{4}',
0x1d7d3: '\\mathbf{5}',
0x1d7d4: '\\mathbf{6}',
0x1d7d5: '\\mathbf{7}',
0x1d7d6: '\\mathbf{8}',
0x1d7d7: '\\mathbf{9}',
0x1d7e2: '\\mathsf{0}',
0x1d7e3: '\\mathsf{1}',
0x1d7e4: '\\mathsf{2}',
0x1d7e5: '\\mathsf{3}',
0x1d7e6: '\\mathsf{4}',
0x1d7e7: '\\mathsf{5}',
0x1d7e8: '\\mathsf{6}',
0x1d7e9: '\\mathsf{7}',
0x1d7ea: '\\mathsf{8}',
0x1d7eb: '\\mathsf{9}',
0x1d7f6: '\\mathtt{0}',
0x1d7f7: '\\mathtt{1}',
0x1d7f8: '\\mathtt{2}',
0x1d7f9: '\\mathtt{3}',
0x1d7fa: '\\mathtt{4}',
0x1d7fb: '\\mathtt{5}',
0x1d7fc: '\\mathtt{6}',
0x1d7fd: '\\mathtt{7}',
0x1d7fe: '\\mathtt{8}',
0x1d7ff: '\\mathtt{9}',
}