Ultisnip自动补全数学环境与符号

Vanabel/ 12月 15, 2017/ 互联网/ 0 comments

下面的代码可以自动补全数学环境与符号.

# complete function
global !p
def complete(t, opts):
    if t:
        opts = [ m[len(t):] for m in opts if m.startswith(t) ]
    if len(opts) == 1:
        return opts[0]
    if len(opts) == 0:
        return ''
    return "(" + '|'.join(opts) + ')'
# the translation function
def alphabeta_map(latin):
    alphabeta={
        'a' : '\\alpha',
        'b' : '\\beta',
        'c' : '\\gamma',
        'd' : '\\delta',
        'e' : '\\epsilon',
        'f' : '\\phi',
        'g' : '\\gamma',
        'h' : '\\eta',
        'i' : '\\iota',
        'k' : '\\kappa',
        'l' : '\\lambda',
        'm' : '\\mu',
        'n' : '\\nu',
        'p' : '\\pi',
        'q' : '\\theta',
        'r' : '\\rho',
        's' : '\\sigma',
        't' : '\\tau',
        'u' : '\\upsilon',
        'w' : '\\omega',
        'x' : '\\xi',
        'y' : '\\psi',
        'z' : '\\zeta',
        'A' : '\\forall',
        'E' : '\\exists',
        'D' : '\\Delta',
        'F' : '\\Phi',
        'G' : '\\Gamma',
        'L' : '\\Lambda',
        'N' : '\\nabla',
        'P' : '\\Pi',
        'Q' : '\\Theta',
        'S' : '\\Sigma',
        'U' : '\\Upsiln',
        'W' : '\\Omega',
        'X' : '\\Xi',
        'Y' : '\\Psi',
        've': '\\varepsilon',
        'vf': '\\varphi',
        'vk': '\\varkappa',
        'vq': '\\vartheta',
        'vr': '\\varrho',
        '~' : '\\tilde',
        '^' : '\\wedge',
        '|' : '\\perp',
        '-' : '\\top',
        'o' : '\\circ',
        'O' : '\\otimes',
        '2' : '\\sqrt',
        '6' : '\\partial',
        '8' : '\\infty',
        '0' : '\\emptyset',
        '\\': '\\setminus',
        '=' : '\\equiv',
        '.' : '\\cdot',
        '*' : '\\times',
        '<' : '\\langle',
        '>' : '\\rangle',
        '[' : '\\subseteq',
        ']' : '\\supseteq',
        '(' : '\\subset',
        ')' : '\\supset',
        'jj': '\\downarrow',
        'jJ': '\\Downarrow',
        'jk': '\\uparrow',
        'jK': '\\Uparrow',
        'jh': '\\leftarrow',
        'jH': '\\Leftarrow',
        'jl': '\\rightarrow',
        'jL': '\\Rightarrow'
    }
    return alphabeta[latin]

endglobal

#redefine begin environment
snippet "b(egin)?" "begin{} / end{}" br
\begin{${1}`!p
benv =complete( t[1], ['equation', 'align*', 'split', 'multline*', 'cases', 'proof', 'frame', 'thm', 'lem', 'cor', 'prop', 'defn', 'rmk', 'claim'] )
if (t[1]+benv) == 'equation':
    labstr = 'eq'
else:
    labstr = t[1]+benv
snip.rv =benv`}`!p
if (t[1]+benv) in ('thm', 'lem', 'cor', 'prop', 'defn', 'equation'): 
    labstrb = '\label{' + labstr +':'
    labstre = '}'
elif t[1]+benv == 'frame':
        labstrb = '{'
        labstre = '}'
else:
    labstrb = ''
    labstre = ''`${2:${VISUAL}`!p
snip.rv = labstrb`$3`!p snip.rv = labstre`}
    ${0:${VISUAL}}
\end{$1`!p snip.rv=benv`}
endsnippet


snippet "\\la(bel)?" "\label{}" rA
\label{$1`!p snip.rv=complete(t[1], ['eq:', 'thm:', 'lem:', 'cor:', 'prop:', 'item:'])`$2}
endsnippet

snippet "`([a-zA-Z^|\-0268\\=.*<>\[\]()~]+)" "Greeks" rA
`!p m= match.group(1)
snip.rv = alphabeta_map(m)`
endsnippet

Share this Post

Leave a Comment

您的电子邮箱地址不会被公开。 必填项已用*标注

*
*

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据