kickstart.nvim/LuaSnip/tex/math.lua

543 lines
14 KiB
Lua

local helpers = require('personal.luasnip-helper-funcs')
local get_visual = helpers.get_visual
-- Math context detection
local tex = {}
tex.in_mathzone = function() return vim.fn['vimtex#syntax#in_mathzone']() == 1 end
tex.in_text = function() return not tex.in_mathzone() end
-- Return snippet tables
return
{
-- SUPERSCRIPT
s({trig = "([%w%)%]%}])'", wordTrig=false, regTrig = true, snippetType="autosnippet"},
fmta(
"<>^{<>}",
{
f( function(_, snip) return snip.captures[1] end ),
d(1, get_visual),
}
),
{condition = tex.in_mathzone}
),
-- SUBSCRIPT
s({trig = "([%w%)%]%}]);", wordTrig=false, regTrig = true, snippetType="autosnippet"},
fmta(
"<>_{<>}",
{
f( function(_, snip) return snip.captures[1] end ),
d(1, get_visual),
}
),
{condition = tex.in_mathzone}
),
-- SUBSCRIPT AND SUPERSCRIPT
s({trig = "([%w%)%]%}])__", wordTrig=false, regTrig = true, snippetType="autosnippet"},
fmta(
"<>^{<>}_{<>}",
{
f( function(_, snip) return snip.captures[1] end ),
i(1),
i(2),
}
),
{condition = tex.in_mathzone}
),
-- TEXT SUBSCRIPT
s({trig = 'sd', snippetType="autosnippet", wordTrig=false},
fmta("_{\\mathrm{<>}}",
{ d(1, get_visual) }
),
{condition = tex.in_mathzone}
),
-- SUPERSCRIPT SHORTCUT
-- Places the first alphanumeric character after the trigger into a superscript.
s({trig = '([%w%)%]%}])"([%w])', regTrig = true, wordTrig = false, snippetType="autosnippet"},
fmta(
"<>^{<>}",
{
f( function(_, snip) return snip.captures[1] end ),
f( function(_, snip) return snip.captures[2] end ),
}
),
{condition = tex.in_mathzone}
),
-- SUBSCRIPT SHORTCUT
-- Places the first alphanumeric character after the trigger into a subscript.
s({trig = '([%w%)%]%}]):([%w])', regTrig = true, wordTrig = false, snippetType="autosnippet"},
fmta(
"<>_{<>}",
{
f( function(_, snip) return snip.captures[1] end ),
f( function(_, snip) return snip.captures[2] end ),
}
),
{condition = tex.in_mathzone}
),
-- EULER'S NUMBER SUPERSCRIPT SHORTCUT
s({trig = '([^%a])ee', regTrig = true, wordTrig = false, snippetType="autosnippet"},
fmta(
"<>e^{<>}",
{
f( function(_, snip) return snip.captures[1] end ),
d(1, get_visual)
}
),
{condition = tex.in_mathzone}
),
-- ZERO SUBSCRIPT SHORTCUT
s({trig = '([%a%)%]%}])00', regTrig = true, wordTrig = false, snippetType="autosnippet"},
fmta(
"<>_{<>}",
{
f( function(_, snip) return snip.captures[1] end ),
t("0")
}
),
{condition = tex.in_mathzone}
),
-- MINUS ONE SUPERSCRIPT SHORTCUT
s({trig = '([%a%)%]%}])11', regTrig = true, wordTrig = false, snippetType="autosnippet"},
fmta(
"<>_{<>}",
{
f( function(_, snip) return snip.captures[1] end ),
t("-1")
}
),
{condition = tex.in_mathzone}
),
-- J SUBSCRIPT SHORTCUT (since jk triggers snippet jump forward)
s({trig = '([%a%)%]%}])JJ', wordTrig = false, regTrig = true, snippetType="autosnippet"},
fmta(
"<>_{<>}",
{
f( function(_, snip) return snip.captures[1] end ),
t("j")
}
),
{condition = tex.in_mathzone}
),
-- PLUS SUPERSCRIPT SHORTCUT
s({trig = '([%a%)%]%}])%+%+', regTrig = true, wordTrig = false, snippetType="autosnippet"},
fmta(
"<>^{<>}",
{
f( function(_, snip) return snip.captures[1] end ),
t("+")
}
),
{condition = tex.in_mathzone}
),
-- COMPLEMENT SUPERSCRIPT
s({trig = '([%a%)%]%}])CC', regTrig = true, wordTrig = false, snippetType="autosnippet"},
fmta(
"<>^{<>}",
{
f( function(_, snip) return snip.captures[1] end ),
t("\\complement")
}
),
{condition = tex.in_mathzone}
),
-- CONJUGATE (STAR) SUPERSCRIPT SHORTCUT
s({trig = '([%a%)%]%}])%*%*', regTrig = true, wordTrig = false, snippetType="autosnippet"},
fmta(
"<>^{<>}",
{
f( function(_, snip) return snip.captures[1] end ),
t("*")
}
),
{condition = tex.in_mathzone}
),
-- VECTOR, i.e. \vec
s({trig = "([^%a])vv", wordTrig = false, regTrig = true, snippetType="autosnippet"},
fmta(
"<>\\vec{<>}",
{
f( function(_, snip) return snip.captures[1] end ),
d(1, get_visual),
}
),
{condition = tex.in_mathzone}
),
-- DEFAULT UNIT VECTOR WITH SUBSCRIPT, i.e. \unitvector_{}
s({trig = "([^%a])ue", wordTrig = false, regTrig = true, snippetType="autosnippet"},
fmta(
"<>\\unitvector_{<>}",
{
f( function(_, snip) return snip.captures[1] end ),
d(1, get_visual),
}
),
{condition = tex.in_mathzone}
),
-- UNIT VECTOR WITH HAT, i.e. \uvec{}
s({trig = "([^%a])uv", wordTrig = false, regTrig = true, snippetType="autosnippet"},
fmta(
"<>\\uvec{<>}",
{
f( function(_, snip) return snip.captures[1] end ),
d(1, get_visual),
}
),
{condition = tex.in_mathzone}
),
-- MATRIX, i.e. \vec
s({trig = "([^%a])mt", wordTrig = false, regTrig = true, snippetType="autosnippet"},
fmta(
"<>\\mat{<>}",
{
f( function(_, snip) return snip.captures[1] end ),
d(1, get_visual),
}
),
{condition = tex.in_mathzone}
),
-- FRACTION
s({trig = "([^%a])ff", wordTrig = false, regTrig = true, snippetType="autosnippet"},
fmta(
"<>\\frac{<>}{<>}",
{
f( function(_, snip) return snip.captures[1] end ),
d(1, get_visual),
i(2),
}
),
{condition = tex.in_mathzone}
),
-- ANGLE
s({trig = "([^%a])gg", regTrig = true, wordTrig = false, snippetType="autosnippet"},
fmta(
"<>\\ang{<>}",
{
f( function(_, snip) return snip.captures[1] end ),
d(1, get_visual),
}
),
{condition = tex.in_mathzone}
),
-- ABSOLUTE VALUE
s({trig = "([^%a])aa", regTrig = true, wordTrig = false, snippetType="autosnippet"},
fmta(
"<>\\abs{<>}",
{
f( function(_, snip) return snip.captures[1] end ),
d(1, get_visual),
}
),
{condition = tex.in_mathzone}
),
-- SQUARE ROOT
s({trig = "([^%\\])sq", wordTrig = false, regTrig = true, snippetType="autosnippet"},
fmta(
"<>\\sqrt{<>}",
{
f( function(_, snip) return snip.captures[1] end ),
d(1, get_visual),
}
),
{condition = tex.in_mathzone}
),
-- BINOMIAL SYMBOL
s({trig = "([^%\\])bnn", wordTrig = false, regTrig = true, snippetType="autosnippet"},
fmta(
"<>\\binom{<>}{<>}",
{
f( function(_, snip) return snip.captures[1] end ),
i(1),
i(2),
}
),
{condition = tex.in_mathzone}
),
-- LOGARITHM WITH BASE SUBSCRIPT
s({trig = "([^%a%\\])ll", wordTrig = false, regTrig = true, snippetType="autosnippet"},
fmta(
"<>\\log_{<>}",
{
f( function(_, snip) return snip.captures[1] end ),
i(1),
}
),
{condition = tex.in_mathzone}
),
-- DERIVATIVE with denominator only
s({trig = "([^%a])dV", wordTrig = false, regTrig = true, snippetType="autosnippet"},
fmta(
"<>\\dvOne{<>}",
{
f( function(_, snip) return snip.captures[1] end ),
d(1, get_visual),
}
),
{condition = tex.in_mathzone}
),
-- DERIVATIVE with numerator and denominator
s({trig = "([^%a])dvv", wordTrig = false, regTrig = true, snippetType="autosnippet"},
fmta(
"<>\\dv{<>}{<>}",
{
f( function(_, snip) return snip.captures[1] end ),
i(1),
i(2)
}
),
{condition = tex.in_mathzone}
),
-- DERIVATIVE with numerator, denominator, and higher-order argument
s({trig = "([^%a])ddv", wordTrig = false, regTrig = true, snippetType="autosnippet"},
fmta(
"<>\\dvN{<>}{<>}{<>}",
{
f( function(_, snip) return snip.captures[1] end ),
i(1),
i(2),
i(3),
}
),
{condition = tex.in_mathzone}
),
-- PARTIAL DERIVATIVE with denominator only
s({trig = "([^%a])pV", wordTrig = false, regTrig = true, snippetType="autosnippet"},
fmta(
"<>\\pdvOne{<>}",
{
f( function(_, snip) return snip.captures[1] end ),
d(1, get_visual),
}
),
{condition = tex.in_mathzone}
),
-- PARTIAL DERIVATIVE with numerator and denominator
s({trig = "([^%a])pvv", wordTrig = false, regTrig = true, snippetType="autosnippet"},
fmta(
"<>\\pdv{<>}{<>}",
{
f( function(_, snip) return snip.captures[1] end ),
i(1),
i(2)
}
),
{condition = tex.in_mathzone}
),
-- PARTIAL DERIVATIVE with numerator, denominator, and higher-order argument
s({trig = "([^%a])ppv", wordTrig = false, regTrig = true, snippetType="autosnippet"},
fmta(
"<>\\pdvN{<>}{<>}{<>}",
{
f( function(_, snip) return snip.captures[1] end ),
i(1),
i(2),
i(3),
}
),
{condition = tex.in_mathzone}
),
-- SUM with lower limit
s({trig = "([^%a])sM", wordTrig = false, regTrig = true, snippetType="autosnippet"},
fmta(
"<>\\sum_{<>}",
{
f( function(_, snip) return snip.captures[1] end ),
i(1),
}
),
{condition = tex.in_mathzone}
),
-- SUM with upper and lower limit
s({trig = "([^%a])smm", wordTrig = false, regTrig = true, snippetType="autosnippet"},
fmta(
"<>\\sum_{<>}^{<>}",
{
f( function(_, snip) return snip.captures[1] end ),
i(1),
i(2),
}
),
{condition = tex.in_mathzone}
),
-- INTEGRAL with upper and lower limit
s({trig = "([^%a])intt", wordTrig = false, regTrig = true, snippetType="autosnippet"},
fmta(
"<>\\int_{<>}^{<>}",
{
f( function(_, snip) return snip.captures[1] end ),
i(1),
i(2),
}
),
{condition = tex.in_mathzone}
),
-- INTEGRAL from positive to negative infinity
s({trig = "([^%a])intf", wordTrig = false, regTrig = true, snippetType="autosnippet"},
fmta(
"<>\\int_{\\infty}^{\\infty}",
{
f( function(_, snip) return snip.captures[1] end ),
}
),
{condition = tex.in_mathzone}
),
-- BOXED command
s({trig = "([^%a])bb", wordTrig = false, regTrig = true, snippetType="autosnippet"},
fmta(
"<>\\boxed{<>}",
{
f( function(_, snip) return snip.captures[1] end ),
d(1, get_visual)
}
),
{condition = tex.in_mathzone}
),
--
-- BEGIN STATIC SNIPPETS
--
-- DIFFERENTIAL, i.e. \diff
s({trig = "df", snippetType="autosnippet", priority=2000, snippetType="autosnippet"},
{
t("\\diff"),
},
{condition = tex.in_mathzone}
),
-- BASIC INTEGRAL SYMBOL, i.e. \int
s({trig = "in1", snippetType="autosnippet"},
{
t("\\int"),
},
{condition = tex.in_mathzone}
),
-- DOUBLE INTEGRAL, i.e. \iint
s({trig = "in2", snippetType="autosnippet"},
{
t("\\iint"),
},
{condition = tex.in_mathzone}
),
-- TRIPLE INTEGRAL, i.e. \iiint
s({trig = "in3", snippetType="autosnippet"},
{
t("\\iiint"),
},
{condition = tex.in_mathzone}
),
-- CLOSED SINGLE INTEGRAL, i.e. \oint
s({trig = "oi1", snippetType="autosnippet"},
{
t("\\oint"),
},
{condition = tex.in_mathzone}
),
-- CLOSED DOUBLE INTEGRAL, i.e. \oiint
s({trig = "oi2", snippetType="autosnippet"},
{
t("\\oiint"),
},
{condition = tex.in_mathzone}
),
-- GRADIENT OPERATOR, i.e. \grad
s({trig = "gdd", snippetType="autosnippet"},
{
t("\\grad "),
},
{condition = tex.in_mathzone}
),
-- CURL OPERATOR, i.e. \curl
s({trig = "cll", snippetType="autosnippet"},
{
t("\\curl "),
},
{condition = tex.in_mathzone}
),
-- DIVERGENCE OPERATOR, i.e. \divergence
s({trig = "DI", snippetType="autosnippet"},
{
t("\\div "),
},
{condition = tex.in_mathzone}
),
-- LAPLACIAN OPERATOR, i.e. \laplacian
s({trig = "laa", snippetType="autosnippet"},
{
t("\\laplacian "),
},
{condition = tex.in_mathzone}
),
-- PARALLEL SYMBOL, i.e. \parallel
s({trig = "||", snippetType="autosnippet"},
{
t("\\parallel"),
}
),
-- CDOTS, i.e. \cdots
s({trig = "cdd", snippetType="autosnippet"},
{
t("\\cdots"),
}
),
-- LDOTS, i.e. \ldots
s({trig = "ldd", snippetType="autosnippet"},
{
t("\\ldots"),
}
),
-- EQUIV, i.e. \equiv
s({trig = "eqq", snippetType="autosnippet"},
{
t("\\equiv "),
}
),
-- SETMINUS, i.e. \setminus
s({trig = "stm", snippetType="autosnippet"},
{
t("\\setminus "),
}
),
-- SUBSET, i.e. \subset
s({trig = "sbb", snippetType="autosnippet"},
{
t("\\subset "),
}
),
-- APPROX, i.e. \approx
s({trig = "px", snippetType="autosnippet"},
{
t("\\approx "),
},
{condition = tex.in_mathzone}
),
-- PROPTO, i.e. \propto
s({trig = "pt", snippetType="autosnippet"},
{
t("\\propto "),
},
{condition = tex.in_mathzone}
),
-- COLON, i.e. \colon
s({trig = "::", snippetType="autosnippet"},
{
t("\\colon "),
}
),
-- IMPLIES, i.e. \implies
s({trig = ">>", snippetType="autosnippet"},
{
t("\\implies "),
}
),
-- DOT PRODUCT, i.e. \cdot
s({trig = ",.", snippetType="autosnippet"},
{
t("\\cdot "),
}
),
-- CROSS PRODUCT, i.e. \times
s({trig = "xx", snippetType="autosnippet"},
{
t("\\times "),
}
),
}