diff --git a/README.md b/README.md index 0f8c3bc..c1ab7b9 100644 --- a/README.md +++ b/README.md @@ -33,3 +33,21 @@ cp -R * ~/.vim ``` Julia should appear as a file type and be automatically detected for files with the `.jl` extension. + +## LaTeX-to-Unicode substitution via Tab key + +This plugin adds a mapping to the `Tab` key which makes it behave like the Julia REPL, i.e. when +the cursor is at the end of a recognized LaTeX symbol (e.g. `\alpha`) in insert mode, pressing +the `Tab` key will substitute it with the corresponding Unicode symbol (e.g. `α`). + +If no suitabe substitution is found, the action will fall back to whatever mapping was previously +defined: by default, inserting a literal `Tab` character, or invoking some other action if another +plug-in is installed, e.g. syntastic or YouCompleteMe. + +A literal tab can always be forced by using `CTRL-V` and then `Tab`. + +To disable this mapping, you can use the command `:let g:julia_latex_to_unicode = 0`, e.g. by putting +it into your `.vimrc` file. + +Even when the mapping is disabled, the feature is still available via the omnicompletion mechanism, +i.e. by pressing `CTRL-X` and then `CTRL-O`. diff --git a/ftdetect/julia.vim b/ftdetect/julia.vim index b4d435d..dd0d536 100644 --- a/ftdetect/julia.vim +++ b/ftdetect/julia.vim @@ -4,3 +4,5 @@ au BufRead,BufNewFile *.jl let b:undo_ftplugin = "setlocal comments< define< formatoptions< iskeyword< lisp<" au BufRead,BufNewFile *.jl set filetype=julia + +au VimEnter * let g:jl_did_vim_enter = 1 diff --git a/ftplugin/julia.vim b/ftplugin/julia.vim index fe7322e..aeb9095 100644 --- a/ftplugin/julia.vim +++ b/ftplugin/julia.vim @@ -6,7 +6,6 @@ if exists("b:did_ftplugin") finish endif - let b:did_ftplugin = 1 let s:save_cpo = &cpo @@ -23,8 +22,122 @@ setlocal define="^\s*macro\>" " syntax-highlightened let g:julia_highlight_operators=1 +" Support for LaTex-to-Unicode conversion as in the Julia REPL + +" (The dictionary was generated from within Julia with the following code: +" # open("latex_symbols.vim","w") do f +" # println(f, "\" This file is autogenerated") +" # println(f, "let g:latex_symbols = {\n \\ ", join([string("'", latex, "': '", unicode, "'") for (latex,unicode) in sort!(collect(Base.REPLCompletions.latex_symbols), by=x->x[1])], ",\n \\ "), "}") +" # end +" ) +exe "source " . join(split(expand(":p"), '/', 1)[0:-2], '/') . "/latex_symbols.vim" + +function! LaTeXtoUnicode_omnifunc(findstart, base) + if a:findstart + let cnum = col('.') + let l = getline('.') + let i = match(l[0:cnum-2], '\\[A-Za-z]\+$') + if i == -1 + let i = -3 + endif + return i + else + if has_key(g:latex_symbols, a:base) + return [g:latex_symbols[a:base]] + else + return [] + end + endif +endfunction + +set omnifunc=LaTeXtoUnicode_omnifunc + +let s:JuliaFallbackTabTrigger = "\u0091JuliaFallbackTab" + +function! s:JuliaSetFallbackTab(s, k) + let mmdict = maparg(a:s, 'i', 0, 1) + if empty(mmdict) + exe 'inoremap ' . a:k . ' ' + return + endif + let rhs = mmdict["rhs"] + if rhs == 'JuliaTab' + return + endif + let pre = '' + if mmdict["silent"] + let pre = pre . '' + endif + if mmdict["expr"] + let pre = pre . '' + endif + if mmdict["noremap"] + let cmd = 'inoremap ' + else + let cmd = 'imap ' + endif + exe cmd . pre . ' ' . a:k . ' ' . rhs +endfunction + +function! JuliaTab() + let l = getline('.') + let cnum = col('.') + let i = LaTeXtoUnicode_omnifunc(1, '') + if i >= 0 + let base = l[i : cnum-2] + let uni = LaTeXtoUnicode_omnifunc(0, base) + if empty(uni) + let i = -3 + else + let b = '' + for j in range(len(base)) + let b = b . "\b" + endfor + return b . uni[0] + endif + endif + if i < 0 + return s:JuliaFallbackTabTrigger + endif +endfunction + +let b:julia_tab_set = 0 + +function! s:JuliaSetTab(wait_vim_enter) + if a:wait_vim_enter && !exists("g:jl_did_vim_enter") + return + endif + let g:jl_did_vim_enter = 1 + if !get(g:, "julia_latex_to_unicode", 1) + return + endif + call s:JuliaSetFallbackTab('', s:JuliaFallbackTabTrigger) + imap JuliaTab + imap JuliaTab JuliaTab() + let b:julia_tab_set = 1 +endfunction + +function! JuliaUnsetTab() + if !b:julia_tab_set + return + endif + iunmap + if empty(maparg("", "i")) + call s:JuliaSetFallbackTab(s:JuliaFallbackTabTrigger, '') + endif + iunmap JuliaTab + exe 'iunmap ' . s:JuliaFallbackTabTrigger +endfunction + +" try to postpone the first initialization as much as possible, +" by calling s:JuliaSetTab only at VimEnter or later +call s:JuliaSetTab(1) +autocmd VimEnter *.jl call s:JuliaSetTab(0) + let b:undo_ftplugin = "setlocal include< suffixesadd< comments< commentstring<" - \ . " define< shiftwidth< expandtab< indentexpr< indentkeys< cinoptions<" + \ . " define< shiftwidth< expandtab< indentexpr< indentkeys< cinoptions< omnifunc<" + \ . " | call JuliaUnsetTab()" + \ . " | delfunction LaTeXtoUnicode_omnifunc | delfunction JuliaTab | delfunction JuliaUnsetTab" if exists("loaded_matchit") let b:match_ignorecase = 0 @@ -37,7 +150,6 @@ if exists("loaded_matchit") " note: this function relies heavily on the syntax file function! JuliaGetMatchWords() let s:attr = synIDattr(synID(line("."),col("."),1),"name") - "echo s:attr if s:attr == 'juliaConditional' return s:beginKeywords . ':\<\%(elseif\|else\)\>:' . s:endKeyowrds elseif s:attr =~ '\<\%(juliaRepeat\|juliaRepKeyword\)\>' diff --git a/ftplugin/latex_symbols.vim b/ftplugin/latex_symbols.vim new file mode 100644 index 0000000..8fcdf72 --- /dev/null +++ b/ftplugin/latex_symbols.vim @@ -0,0 +1,738 @@ +" This file is autogenerated +let g:latex_symbols = { + \ '\AA': 'Å', + \ '\AE': 'Æ', + \ '\Alpha': 'Α', + \ '\Angle': '⦜', + \ '\BbbPi': 'ℿ', + \ '\Beta': 'Β', + \ '\Bumpeq': '≎', + \ '\Cap': '⋒', + \ '\Chi': 'Χ', + \ '\Colon': '∷', + \ '\Cup': '⋓', + \ '\DH': 'Ð', + \ '\DJ': 'Đ', + \ '\Dashv': '⫤', + \ '\Ddownarrow': '⤋', + \ '\Delta': 'Δ', + \ '\Digamma': 'Ϝ', + \ '\Doteq': '≑', + \ '\DownArrowBar': '⤓', + \ '\DownArrowUpArrow': '⇵', + \ '\DownLeftRightVector': '⥐', + \ '\DownLeftTeeVector': '⥞', + \ '\DownLeftVectorBar': '⥖', + \ '\DownRightTeeVector': '⥟', + \ '\DownRightVectorBar': '⥗', + \ '\Downarrow': '⇓', + \ '\ElOr': '⩖', + \ '\Elroang': '⦆', + \ '\ElzAnd': '⩓', + \ '\ElzLap': '⧊', + \ '\ElzOr': '⩔', + \ '\ElzRlarr': '⥂', + \ '\ElzTimes': '⨯', + \ '\Elzbar': '̶', + \ '\Elzbtdl': 'ɬ', + \ '\Elzcirfb': '◒', + \ '\Elzcirfl': '◐', + \ '\Elzcirfr': '◑', + \ '\Elzclomeg': 'ɷ', + \ '\Elzddfnc': '⦙', + \ '\Elzdefas': '⧋', + \ '\Elzdlcorn': '⎣', + \ '\Elzdshfnc': '┆', + \ '\Elzdyogh': 'ʤ', + \ '\Elzesh': 'ʃ', + \ '\Elzfhr': 'ɾ', + \ '\Elzglst': 'ʔ', + \ '\Elzhlmrk': 'ˑ', + \ '\Elzinglst': 'ʖ', + \ '\Elzinvv': 'ʌ', + \ '\Elzinvw': 'ʍ', + \ '\Elzlmrk': 'ː', + \ '\Elzlow': '˕', + \ '\Elzlpargt': '⦠', + \ '\Elzltlmr': 'ɱ', + \ '\Elzltln': 'ɲ', + \ '\Elzminhat': '⩟', + \ '\Elzopeno': 'ɔ', + \ '\Elzpalh': '̡', + \ '\Elzpbgam': 'ɤ', + \ '\Elzpes': '₧', + \ '\Elzpgamma': 'ɣ', + \ '\Elzpscrv': 'ʋ', + \ '\Elzpupsil': 'ʊ', + \ '\ElzrLarr': '⥄', + \ '\Elzrais': '˔', + \ '\Elzrarrx': '⥇', + \ '\Elzreapos': '‛', + \ '\Elzreglst': 'ʕ', + \ '\Elzrh': '̢', + \ '\Elzrl': 'ɼ', + \ '\Elzrtld': 'ɖ', + \ '\Elzrtll': 'ɭ', + \ '\Elzrtln': 'ɳ', + \ '\Elzrtlr': 'ɽ', + \ '\Elzrtls': 'ʂ', + \ '\Elzrtlt': 'ʈ', + \ '\Elzrtlz': 'ʐ', + \ '\Elzrttrnr': 'ɻ', + \ '\Elzrvbull': '◘', + \ '\Elzsbbrg': '̪', + \ '\Elzsblhr': '˓', + \ '\Elzsbrhr': '˒', + \ '\Elzschwa': 'ə', + \ '\Elzsqfl': '◧', + \ '\Elzsqfnw': '┙', + \ '\Elzsqfr': '◨', + \ '\Elzsqfse': '◪', + \ '\Elzsqspne': '⋥', + \ '\Elztdcol': '⫶', + \ '\Elztesh': 'ʧ', + \ '\Elztrna': 'ɐ', + \ '\Elztrnh': 'ɥ', + \ '\Elztrnm': 'ɯ', + \ '\Elztrnmlr': 'ɰ', + \ '\Elztrnr': 'ɹ', + \ '\Elztrnrl': 'ɺ', + \ '\Elztrnsa': 'ɒ', + \ '\Elztrnt': 'ʇ', + \ '\Elztrny': 'ʎ', + \ '\Elzverti': 'ˌ', + \ '\Elzverts': 'ˈ', + \ '\Elzvrecto': '▯', + \ '\Elzxh': 'ħ', + \ '\Elzxl': '̵', + \ '\Elzxrat': '℞', + \ '\Elzyogh': 'ʒ', + \ '\Epsilon': 'Ε', + \ '\Equal': '⩵', + \ '\Eta': 'Η', + \ '\Game': '⅁', + \ '\Gamma': 'Γ', + \ '\H': '̋', + \ '\Im': 'ℑ', + \ '\Iota': 'Ι', + \ '\Kappa': 'Κ', + \ '\Koppa': 'Ϟ', + \ '\L': 'Ł', + \ '\Lambda': 'Λ', + \ '\LeftDownTeeVector': '⥡', + \ '\LeftDownVectorBar': '⥙', + \ '\LeftRightVector': '⥎', + \ '\LeftTeeVector': '⥚', + \ '\LeftTriangleBar': '⧏', + \ '\LeftUpDownVector': '⥑', + \ '\LeftUpTeeVector': '⥠', + \ '\LeftUpVectorBar': '⥘', + \ '\LeftVectorBar': '⥒', + \ '\Leftarrow': '⇐', + \ '\Leftrightarrow': '⇔', + \ '\Lleftarrow': '⇚', + \ '\Longleftarrow': '⟸', + \ '\Longleftrightarrow': '⟺', + \ '\Longrightarrow': '⟹', + \ '\Lsh': '↰', + \ '\Mapsfrom': '⤆', + \ '\Mapsto': '⤇', + \ '\NG': 'Ŋ', + \ '\NestedGreaterGreater': '⪢', + \ '\NestedLessLess': '⪡', + \ '\NotGreaterGreater': '≫̸', + \ '\NotLeftTriangleBar': '⧏̸', + \ '\NotLessLess': '≪̸', + \ '\NotNestedGreaterGreater': '⪢̸', + \ '\NotNestedLessLess': '⪡̸', + \ '\NotRightTriangleBar': '⧐̸', + \ '\NotSquareSubset': '⊏̸', + \ '\NotSquareSuperset': '⊐̸', + \ '\O': 'Ø', + \ '\OE': 'Œ', + \ '\Omega': 'Ω', + \ '\P': '¶', + \ '\Phi': 'Φ', + \ '\Pi': 'Π', + \ '\Psi': 'Ψ', + \ '\Re': 'ℜ', + \ '\ReverseUpEquilibrium': '⥯', + \ '\Rho': 'Ρ', + \ '\RightDownTeeVector': '⥝', + \ '\RightDownVectorBar': '⥕', + \ '\RightTeeVector': '⥛', + \ '\RightTriangleBar': '⧐', + \ '\RightUpDownVector': '⥏', + \ '\RightUpTeeVector': '⥜', + \ '\RightUpVectorBar': '⥔', + \ '\RightVectorBar': '⥓', + \ '\Rightarrow': '⇒', + \ '\RoundImplies': '⥰', + \ '\Rrightarrow': '⇛', + \ '\Rsh': '↱', + \ '\RuleDelayed': '⧴', + \ '\S': '§', + \ '\Sampi': 'Ϡ', + \ '\Sigma': 'Σ', + \ '\Stigma': 'Ϛ', + \ '\Subset': '⋐', + \ '\Supset': '⋑', + \ '\TH': 'Þ', + \ '\Tau': 'Τ', + \ '\Theta': 'Θ', + \ '\UpArrowBar': '⤒', + \ '\UpEquilibrium': '⥮', + \ '\Uparrow': '⇑', + \ '\Updownarrow': '⇕', + \ '\Upsilon': 'Υ', + \ '\Uuparrow': '⤊', + \ '\VDash': '⊫', + \ '\Vdash': '⊩', + \ '\Vert': '‖', + \ '\Vvdash': '⊪', + \ '\Vvert': '⦀', + \ '\Xi': 'Ξ', + \ '\Zeta': 'Ζ', + \ '\aa': 'å', + \ '\acute': '́', + \ '\adots': '⋰', + \ '\ae': 'æ', + \ '\aleph': 'ℵ', + \ '\allequal': '≌', + \ '\alpha': 'α', + \ '\amalg': '⨿', + \ '\angle': '∠', + \ '\approx': '≈', + \ '\approxeq': '≊', + \ '\approxnotequal': '≆', + \ '\aquarius': '♒', + \ '\aries': '♈', + \ '\ast': '∗', + \ '\asymp': '≍', + \ '\backepsilon': '϶', + \ '\backprime': '‵', + \ '\backsim': '∽', + \ '\backsimeq': '⋍', + \ '\bar': '̄', + \ '\barwedge': '⌅', + \ '\bbsum': '⅀', + \ '\because': '∵', + \ '\beta': 'β', + \ '\beth': 'ℶ', + \ '\between': '≬', + \ '\bigcap': '⋂', + \ '\bigcirc': '○', + \ '\bigcup': '⋃', + \ '\bigcupdot': '⨃', + \ '\bigodot': '⨀', + \ '\bigoplus': '⨁', + \ '\bigotimes': '⨂', + \ '\bigsqcap': '⨅', + \ '\bigsqcup': '⨆', + \ '\bigstar': '★', + \ '\bigtimes': '⨉', + \ '\bigtriangledown': '▽', + \ '\bigtriangleup': '△', + \ '\biguplus': '⨄', + \ '\bigvee': '⋁', + \ '\bigwedge': '⋀', + \ '\bkarow': '⤍', + \ '\blacklozenge': '⧫', + \ '\blacksquare': '■', + \ '\blacktriangle': '▴', + \ '\blacktriangledown': '▾', + \ '\blacktriangleleft': '◂', + \ '\blacktriangleright': '▸', + \ '\bowtie': '⋈', + \ '\boxast': '⧆', + \ '\boxbslash': '⧅', + \ '\boxcircle': '⧇', + \ '\boxdiag': '⧄', + \ '\boxdot': '⊡', + \ '\boxminus': '⊟', + \ '\boxplus': '⊞', + \ '\boxtimes': '⊠', + \ '\breve': '̆', + \ '\btimes': '⨲', + \ '\bullet': '•', + \ '\bumpeq': '≏', + \ '\bumpeqq': '⪮', + \ '\c': '̧', + \ '\cancer': '♋', + \ '\cap': '∩', + \ '\capricornus': '♑', + \ '\cbrt': '∛', + \ '\cdot': '⋅', + \ '\cdotp': '·', + \ '\cdots': '⋯', + \ '\check': '̌', + \ '\checkmark': '✓', + \ '\chi': 'χ', + \ '\circ': '∘', + \ '\circeq': '≗', + \ '\circlearrowleft': '↺', + \ '\circlearrowright': '↻', + \ '\circledR': '®', + \ '\circledS': 'Ⓢ', + \ '\circledast': '⊛', + \ '\circledcirc': '⊚', + \ '\circleddash': '⊝', + \ '\clockoint': '⨏', + \ '\clubsuit': '♣', + \ '\clwintegral': '∱', + \ '\coloneq': '≔', + \ '\complement': '∁', + \ '\cong': '≅', + \ '\conjquant': '⨇', + \ '\coprod': '∐', + \ '\copyright': '©', + \ '\cup': '∪', + \ '\cupdot': '⊍', + \ '\curlyeqprec': '⋞', + \ '\curlyeqsucc': '⋟', + \ '\curlyvee': '⋎', + \ '\curlywedge': '⋏', + \ '\curvearrowleft': '↶', + \ '\curvearrowright': '↷', + \ '\dagger': '†', + \ '\daleth': 'ℸ', + \ '\dashV': '⫣', + \ '\dashv': '⊣', + \ '\dbkarow': '⤏', + \ '\dblarrowupdown': '⇅', + \ '\ddagger': '‡', + \ '\ddddot': '⃜', + \ '\dddot': '⃛', + \ '\ddot': '̈', + \ '\ddots': '⋱', + \ '\ddotseq': '⩷', + \ '\degree': '°', + \ '\delta': 'δ', + \ '\diagdown': '╲', + \ '\diagup': '╱', + \ '\diamond': '⋄', + \ '\diamondsuit': '♢', + \ '\digamma': 'ϝ', + \ '\disjquant': '⨈', + \ '\div': '÷', + \ '\divideontimes': '⋇', + \ '\dj': 'đ', + \ '\dot': '̇', + \ '\doteq': '≐', + \ '\dotminus': '∸', + \ '\dotplus': '∔', + \ '\dots': '…', + \ '\downarrow': '↓', + \ '\downdownarrows': '⇊', + \ '\downharpoonleft': '⇃', + \ '\downharpoonright': '⇂', + \ '\drbkarrow': '⤐', + \ '\dualmap': '⧟', + \ '\eighthnote': '♪', + \ '\ell': 'ℓ', + \ '\emdash': '—', + \ '\endash': '–', + \ '\enspace': ' ', + \ '\epsilon': 'ϵ', + \ '\eqcirc': '≖', + \ '\eqcolon': '≕', + \ '\eqsim': '≂', + \ '\eqslantgtr': '⪖', + \ '\eqslantless': '⪕', + \ '\equiv': '≡', + \ '\eta': 'η', + \ '\eth': 'ð', + \ '\exists': '∃', + \ '\fallingdotseq': '≒', + \ '\fdiagovnearrow': '⤯', + \ '\fdiagovrdiag': '⤬', + \ '\female': '♀', + \ '\flat': '♭', + \ '\forall': '∀', + \ '\forks': '⫝̸', + \ '\forksnot': '⫝', + \ '\frown': '⌢', + \ '\gamma': 'γ', + \ '\ge': '≥', + \ '\gemini': '♊', + \ '\geqq': '≧', + \ '\geqslant': '⩾', + \ '\gg': '≫', + \ '\ggg': '⋙', + \ '\gimel': 'ℷ', + \ '\gnapprox': '⪊', + \ '\gneq': '⪈', + \ '\gneqq': '≩', + \ '\gnsim': '⋧', + \ '\grave': '̀', + \ '\gtrapprox': '⪆', + \ '\gtrdot': '⋗', + \ '\gtreqless': '⋛', + \ '\gtreqqless': '⪌', + \ '\gtrless': '≷', + \ '\gtrsim': '≳', + \ '\guilsinglleft': '‹', + \ '\guilsinglright': '›', + \ '\gvertneqq': '≩︀', + \ '\hat': '̂', + \ '\heartsuit': '♡', + \ '\hermitconjmatrix': '⊹', + \ '\hksearow': '⤥', + \ '\hkswarow': '⤦', + \ '\hookleftarrow': '↩', + \ '\hookrightarrow': '↪', + \ '\hslash': 'ℏ', + \ '\hspace': ' ', + \ '\iiiint': '⨌', + \ '\iiint': '∭', + \ '\iint': '∬', + \ '\image': '⊷', + \ '\imath': 'ı', + \ '\in': '∈', + \ '\infty': '∞', + \ '\int': '∫', + \ '\intBar': '⨎', + \ '\intbar': '⨍', + \ '\intcap': '⨙', + \ '\intcup': '⨚', + \ '\intercal': '⊺', + \ '\interleave': '⫴', + \ '\intprod': '⨼', + \ '\intprodr': '⨽', + \ '\intx': '⨘', + \ '\iota': 'ι', + \ '\jupiter': '♃', + \ '\k': '̨', + \ '\kappa': 'κ', + \ '\kernelcontraction': '∻', + \ '\l': 'ł', + \ '\lambda': 'λ', + \ '\langle': '〈', + \ '\lazysinv': '∾', + \ '\lceil': '⌈', + \ '\le': '≤', + \ '\leftarrow': '←', + \ '\leftarrowtail': '↢', + \ '\leftarrowtriangle': '⇽', + \ '\leftharpoondown': '↽', + \ '\leftharpoonup': '↼', + \ '\leftleftarrows': '⇇', + \ '\leftrightarrow': '↔', + \ '\leftrightarrows': '⇆', + \ '\leftrightharpoons': '⇋', + \ '\leftrightsquigarrow': '↭', + \ '\leftsquigarrow': '↜', + \ '\leftthreetimes': '⋋', + \ '\leo': '♌', + \ '\leqq': '≦', + \ '\leqslant': '⩽', + \ '\lessapprox': '⪅', + \ '\lessdot': '⋖', + \ '\lesseqgtr': '⋚', + \ '\lesseqqgtr': '⪋', + \ '\lessgtr': '≶', + \ '\lesssim': '≲', + \ '\lfloor': '⌊', + \ '\libra': '♎', + \ '\ll': '≪', + \ '\llcorner': '⌞', + \ '\lmoustache': '⎰', + \ '\lnapprox': '⪉', + \ '\lneq': '⪇', + \ '\lneqq': '≨', + \ '\lnsim': '⋦', + \ '\longleftarrow': '⟵', + \ '\longleftrightarrow': '⟷', + \ '\longmapsto': '⟼', + \ '\longrightarrow': '⟶', + \ '\looparrowleft': '↫', + \ '\looparrowright': '↬', + \ '\lowint': '⨜', + \ '\lozenge': '◊', + \ '\lq': '‘', + \ '\lrcorner': '⌟', + \ '\ltimes': '⋉', + \ '\lvertneqq': '≨︀', + \ '\male': '♂', + \ '\maltese': '✠', + \ '\mapsto': '↦', + \ '\mars': '♂', + \ '\measuredangle': '∡', + \ '\mercury': '☿', + \ '\mho': '℧', + \ '\mid': '∣', + \ '\minus': '−', + \ '\minusdot': '⨪', + \ '\mlcp': '⫛', + \ '\models': '⊧', + \ '\mp': '∓', + \ '\mu': 'μ', + \ '\multimap': '⊸', + \ '\nBumpeq': '≎̸', + \ '\nLeftarrow': '⇍', + \ '\nRightarrow': '⇏', + \ '\nVDash': '⊯', + \ '\nVdash': '⊮', + \ '\nabla': '∇', + \ '\napprox': '≉', + \ '\natural': '♮', + \ '\nbumpeq': '≏̸', + \ '\ncong': '≇', + \ '\ne': '≠', + \ '\nearrow': '↗', + \ '\neg': '¬', + \ '\neovnwarrow': '⤱', + \ '\neovsearrow': '⤮', + \ '\neptune': '♆', + \ '\neqsim': '≂̸', + \ '\nequiv': '≢', + \ '\nexists': '∄', + \ '\ng': 'ŋ', + \ '\ngeq': '≱', + \ '\ngeqslant': '⩾̸', + \ '\ngtr': '≯', + \ '\ni': '∋', + \ '\nleftarrow': '↚', + \ '\nleftrightarrow': '↮', + \ '\nleq': '≰', + \ '\nleqslant': '⩽̸', + \ '\nless': '≮', + \ '\nmid': '∤', + \ '\nolinebreak': '⁠', + \ '\notgreaterless': '≹', + \ '\notin': '∉', + \ '\notlessgreater': '≸', + \ '\nparallel': '∦', + \ '\nprec': '⊀', + \ '\npreceq': '⪯̸', + \ '\nprecsim': '≾̸', + \ '\nrightarrow': '↛', + \ '\nsim': '≁', + \ '\nsime': '≄', + \ '\nsubset': '⊄', + \ '\nsubseteq': '⊈', + \ '\nsubseteqq': '⫅̸', + \ '\nsucc': '⊁', + \ '\nsucceq': '⪰̸', + \ '\nsuccsim': '≿̸', + \ '\nsupset': '⊅', + \ '\nsupseteq': '⊉', + \ '\nsupseteqq': '⫆̸', + \ '\ntriangleleft': '⋪', + \ '\ntrianglelefteq': '⋬', + \ '\ntriangleright': '⋫', + \ '\ntrianglerighteq': '⋭', + \ '\nu': 'ν', + \ '\nvDash': '⊭', + \ '\nvdash': '⊬', + \ '\nwarrow': '↖', + \ '\nwovnearrow': '⤲', + \ '\o': 'ø', + \ '\obar': '⌽', + \ '\obslash': '⦸', + \ '\ocirc': '̊', + \ '\odot': '⊙', + \ '\oe': 'œ', + \ '\oiiint': '∰', + \ '\oiint': '∯', + \ '\oint': '∮', + \ '\omega': 'ω', + \ '\ominus': '⊖', + \ '\openbracketleft': '〚', + \ '\openbracketright': '〛', + \ '\oplus': '⊕', + \ '\original': '⊶', + \ '\oslash': '⊘', + \ '\otimes': '⊗', + \ '\overbrace': '︷', + \ '\parallel': '∥', + \ '\partial': '∂', + \ '\partialmeetcontraction': '⪣', + \ '\perp': '⊥', + \ '\perspcorrespond': '⩞', + \ '\phi': 'ϕ', + \ '\pi': 'π', + \ '\pisces': '♓', + \ '\pitchfork': '⋔', + \ '\plusdot': '⨥', + \ '\pluto': '♇', + \ '\pm': '±', + \ '\prec': '≺', + \ '\precapprox': '⪷', + \ '\preccurlyeq': '≼', + \ '\preceq': '⪯', + \ '\precnapprox': '⪹', + \ '\precneqq': '⪵', + \ '\precnsim': '⋨', + \ '\precsim': '≾', + \ '\prime': '′', + \ '\prod': '∏', + \ '\propto': '∝', + \ '\psi': 'ψ', + \ '\quad': ' ', + \ '\quarternote': '♩', + \ '\questeq': '≟', + \ '\rangle': '〉', + \ '\rasp': 'ʼ', + \ '\rceil': '⌉', + \ '\rdiagovfdiag': '⤫', + \ '\rdiagovsearrow': '⤰', + \ '\recorder': '⌕', + \ '\rfloor': '⌋', + \ '\rho': 'ρ', + \ '\rightangle': '∟', + \ '\rightanglearc': '⊾', + \ '\rightarrow': '→', + \ '\rightarrowtail': '↣', + \ '\rightarrowtriangle': '⇾', + \ '\rightharpoondown': '⇁', + \ '\rightharpoonup': '⇀', + \ '\rightleftarrows': '⇄', + \ '\rightleftharpoons': '⇌', + \ '\rightmoon': '☾', + \ '\rightrightarrows': '⇉', + \ '\rightsquigarrow': '↝', + \ '\rightthreetimes': '⋌', + \ '\risingdotseq': '≓', + \ '\rmoustache': '⎱', + \ '\rq': '’', + \ '\rtimes': '⋊', + \ '\sagittarius': '♐', + \ '\saturn': '♄', + \ '\scorpio': '♏', + \ '\searrow': '↘', + \ '\seovnearrow': '⤭', + \ '\setminus': '∖', + \ '\sharp': '♯', + \ '\shuffle': '⧢', + \ '\sigma': 'σ', + \ '\sim': '∼', + \ '\simeq': '≃', + \ '\smile': '⌣', + \ '\spadesuit': '♠', + \ '\sphericalangle': '∢', + \ '\sqcap': '⊓', + \ '\sqcup': '⊔', + \ '\sqrint': '⨖', + \ '\sqrt': '√', + \ '\sqsubset': '⊏', + \ '\sqsubseteq': '⊑', + \ '\sqsupset': '⊐', + \ '\sqsupseteq': '⊒', + \ '\square': '□', + \ '\ss': 'ß', + \ '\star': '⋆', + \ '\starequal': '≛', + \ '\sterling': '£', + \ '\subset': '⊂', + \ '\subseteq': '⊆', + \ '\subseteqq': '⫅', + \ '\subsetneq': '⊊', + \ '\subsetneqq': '⫋', + \ '\succ': '≻', + \ '\succapprox': '⪸', + \ '\succcurlyeq': '≽', + \ '\succeq': '⪰', + \ '\succnapprox': '⪺', + \ '\succneqq': '⪶', + \ '\succnsim': '⋩', + \ '\succsim': '≿', + \ '\sum': '∑', + \ '\supset': '⊃', + \ '\supseteq': '⊇', + \ '\supseteqq': '⫆', + \ '\supsetneq': '⊋', + \ '\supsetneqq': '⫌', + \ '\surd': '√', + \ '\swarrow': '↙', + \ '\tau': 'τ', + \ '\taurus': '♉', + \ '\textTheta': 'ϴ', + \ '\textasciiacute': '´', + \ '\textasciicaron': 'ˇ', + \ '\textasciidieresis': '¨', + \ '\textasciimacron': '¯', + \ '\textbrokenbar': '¦', + \ '\textdoublepipe': 'ǂ', + \ '\textexclamdown': '¡', + \ '\texthvlig': 'ƕ', + \ '\textnrleg': 'ƞ', + \ '\textnumero': '№', + \ '\textonehalf': '½', + \ '\textonequarter': '¼', + \ '\textordfeminine': 'ª', + \ '\textordmasculine': 'º', + \ '\textpertenthousand': '‱', + \ '\textperthousand': '‰', + \ '\textphi': 'ɸ', + \ '\textquestiondown': '¿', + \ '\textquotedblleft': '“', + \ '\textquotedblright': '”', + \ '\textthreequarters': '¾', + \ '\texttildelow': '˜', + \ '\texttrademark': '™', + \ '\textturnk': 'ʞ', + \ '\textvisiblespace': '␣', + \ '\th': 'þ', + \ '\therefore': '∴', + \ '\theta': 'θ', + \ '\thickspace': ' ', + \ '\thinspace': ' ', + \ '\tilde': '̃', + \ '\tildetrpl': '≋', + \ '\times': '×', + \ '\toea': '⤨', + \ '\tona': '⤧', + \ '\top': '⊤', + \ '\tosa': '⤩', + \ '\towa': '⤪', + \ '\triangledown': '▿', + \ '\triangleleft': '◃', + \ '\trianglelefteq': '⊴', + \ '\triangleq': '≜', + \ '\triangleright': '▹', + \ '\trianglerighteq': '⊵', + \ '\twoheadleftarrow': '↞', + \ '\twoheadrightarrow': '↠', + \ '\twoheadrightarrowtail': '⤖', + \ '\u': '˘', + \ '\ulcorner': '⌜', + \ '\underbrace': '︸', + \ '\uparrow': '↑', + \ '\updownarrow': '↕', + \ '\upharpoonleft': '↾', + \ '\upharpoonright': '↿', + \ '\upint': '⨛', + \ '\uplus': '⊎', + \ '\upsilon': 'υ', + \ '\upuparrows': '⇈', + \ '\uranus': '♅', + \ '\urcorner': '⌝', + \ '\vDash': '⊨', + \ '\varepsilon': 'ɛ', + \ '\varkappa': 'ϰ', + \ '\varnothing': '∅', + \ '\varphi': 'φ', + \ '\varpi': 'ϖ', + \ '\varrho': 'ϱ', + \ '\varsigma': 'ς', + \ '\varsubsetneqq': '⊊︀', + \ '\varsupsetneq': '⊋︀', + \ '\vartheta': 'ϑ', + \ '\vartriangle': '▵', + \ '\vartriangleleft': '⊲', + \ '\vartriangleright': '⊳', + \ '\vdash': '⊢', + \ '\vdots': '⋮', + \ '\vee': '∨', + \ '\veebar': '⊻', + \ '\venus': '♀', + \ '\verymuchless': '⋘', + \ '\virgo': '♍', + \ '\wedge': '∧', + \ '\wedgeq': '≙', + \ '\wp': '℘', + \ '\wr': '≀', + \ '\xi': 'ξ', + \ '\yen': '¥', + \ '\zeta': 'ζ'}