Ultisnip自动补全数学环境与符号
下面的代码可以自动补全数学环境与符号.
# 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
本作品采用创作共用版权协议, 要求署名、非商业用途和保持一致. 转载本站内容必须也遵循署名-非商业用途-保持一致的创作共用协议.

发表回复