From 74b0b99a0a7954fdb921646f5ab4abea45a45ba3 Mon Sep 17 00:00:00 2001 From: Anhgelus Morhtuuzh Date: Tue, 29 Aug 2023 14:01:39 +0200 Subject: [PATCH] feat(nvim): better support of latex --- config/nvim/UltiSnips/tex.snippets | 673 +++++++++++++++++++++++++++++ config/nvim/init.vim | 18 +- 2 files changed, 687 insertions(+), 4 deletions(-) create mode 100644 config/nvim/UltiSnips/tex.snippets diff --git a/config/nvim/UltiSnips/tex.snippets b/config/nvim/UltiSnips/tex.snippets new file mode 100644 index 0000000..6971a63 --- /dev/null +++ b/config/nvim/UltiSnips/tex.snippets @@ -0,0 +1,673 @@ +global !p +texMathZones = ['texMathZone'+x for x in ['A', 'AS', 'B', 'BS', 'C', 'CS', 'D', 'DS', 'E', 'ES', 'F', 'FS', 'G', 'GS', 'H', 'HS', 'I', 'IS', 'J', 'JS', 'K', 'KS', 'L', 'LS', 'DS', 'V', 'W', 'X', 'Y', 'Z']] + +texIgnoreMathZones = ['texMathText'] + +texMathZoneIds = vim.eval('map('+str(texMathZones)+", 'hlID(v:val)')") +texIgnoreMathZoneIds = vim.eval('map('+str(texIgnoreMathZones)+", 'hlID(v:val)')") + +ignore = texIgnoreMathZoneIds[0] + +def math(): + synstackids = vim.eval("synstack(line('.'), col('.') - (col('.')>=2 ? 1 : 0))") + try: + first = next(i for i in reversed(synstackids) if i in texIgnoreMathZoneIds or i in texMathZoneIds) + return first != ignore + except StopIteration: + return False +endglobal + +snippet template "Basic template" b +\documentclass[a4paper]{article} + +\usepackage[utf8]{inputenc} +\usepackage[T1]{fontenc} +\usepackage{textcomp} +\usepackage[dutch]{babel} +\usepackage{amsmath, amssymb} + + +% figure support +\usepackage{import} +\usepackage{xifthen} +\pdfminorversion=7 +\usepackage{pdfpages} +\usepackage{transparent} +\newcommand{\incfig}[1]{% + \def\svgwidth{\columnwidth} + \import{./figures/}{#1.pdf_tex} +} + +\pdfsuppresswarningpagegroup=1 + +\begin{document} + $0 +\end{document} +endsnippet + +snippet beg "begin{} / end{}" bA +\\begin{$1} + $0 +\\end{$1} +endsnippet + +priority 100 +snippet ... "ldots" iA +\ldots +endsnippet + +snippet table "Table environment" b +\begin{table}[${1:htpb}] + \centering + \caption{${2:caption}} + \label{tab:${3:label}} + \begin{tabular}{${5:c}} + $0${5/((?<=.)c|l|r)|./(?1: & )/g} + \end{tabular} +\end{table} +endsnippet + +snippet fig "Figure environment" b +\begin{figure}[${1:htpb}] + \centering + ${2:\includegraphics[width=0.8\textwidth]{$3}} + \caption{${4:$3}} + \label{fig:${5:${3/\W+/-/g}}} +\end{figure} +endsnippet + +snippet enum "Enumerate" bA +\begin{enumerate} + \item $0 +\end{enumerate} +endsnippet + +snippet item "Itemize" bA +\begin{itemize} + \item $0 +\end{itemize} +endsnippet + +snippet desc "Description" b +\begin{description} + \item[$1] $0 +\end{description} +endsnippet + +snippet pac "Package" b +\usepackage[${1:options}]{${2:package}}$0 +endsnippet + +snippet => "implies" Ai +\implies +endsnippet + +snippet <=> "equivalent" Ai +\iff +endsnippet + +snippet =< "implied by" Ai +\impliedby +endsnippet + +context "math()" +snippet iff "iff" Ai +\iff +endsnippet + +snippet mk "Math" wA +$${1}$`!p +if t[2] and t[2][0] not in [',', '.', '?', '-', ' ']: + snip.rv = ' ' +else: + snip.rv = '' +`$2 +endsnippet + +snippet dm "Math" wA +\[ +${1:${VISUAL}} +\] $0 +endsnippet + +snippet ali "Align" bA +\begin{align*} + ${1:${VISUAL}} +.\end{align*} +endsnippet + + +context "math()" +snippet // "Fraction" iA +\\frac{$1}{$2}$0 +endsnippet + +snippet / "Fraction" i +\\frac{${VISUAL}}{$1}$0 +endsnippet + +context "math()" +snippet '((\d+)|(\d*)(\\)?([A-Za-z]+)((\^|_)(\{\d+\}|\d))*)/' "symbol frac" wrA +\\frac{`!p snip.rv = match.group(1)`}{$1}$0 +endsnippet + +priority 1000 +context "math()" +snippet '^.*\)/' "() frac" wrA +`!p +stripped = match.string[:-1] +depth = 0 +i = len(stripped) - 1 +while True: + if stripped[i] == ')': depth += 1 + if stripped[i] == '(': depth -= 1 + if depth == 0: break; + i-=1 +snip.rv = stripped[0:i] + "\\frac{" + stripped[i+1:-1] + "}" +`{$1}$0 +endsnippet + +context "math()" +snippet '([A-Za-z])(\d)' "auto subscript" wrA +`!p snip.rv = match.group(1)`_`!p snip.rv = match.group(2)` +endsnippet + +context "math()" +snippet '([A-Za-z])_(\d|[a-z]|\\)' "auto subscript2" wrA +`!p snip.rv = match.group(1)`_{`!p snip.rv = match.group(2)`$0} +endsnippet + + +snippet sympy "sympyblock " w +sympy $1 sympy$0 +endsnippet + +priority 10000 +snippet 'sympy(.*)sympy' "sympy" wr +`!p +from sympy import * +x, y, z, t = symbols('x y z t') +k, m, n = symbols('k m n', integer=True) +f, g, h = symbols('f g h', cls=Function) +init_printing() +snip.rv = eval('latex(' + match.group(1).replace('\\', '').replace('^', '**').replace('{', '(').replace('}', ')') + ')') +` +endsnippet + +priority 1000 +snippet math "mathematicablock" w +math $1 math$0 +endsnippet + +priority 10000 +snippet 'math(.*)math' "math" wr +`!p +import subprocess +code = match.group(1) +code = 'ToString[' + code + ', TeXForm]' +snip.rv = subprocess.check_output(['wolframscript', '-code', code]) +` +endsnippet + +snippet == "equals" iA +&= $1 \\\\ +endsnippet + +snippet != "equals" iA +\neq +endsnippet + +context "math()" +snippet ceil "ceil" iA +\left\lceil $1 \right\rceil $0 +endsnippet + +context "math()" +snippet floor "floor" iA +\left\lfloor $1 \right\rfloor$0 +endsnippet + +snippet pmat "pmat" iA +\begin{pmatrix} $1 \end{pmatrix} $0 +endsnippet + +snippet bmat "bmat" iA +\begin{bmatrix} $1 \end{bmatrix} $0 +endsnippet + +snippet ( "parens ()" iA +($0) +endsnippet + +snippet lr "left( right)" i +\left( ${1:${VISUAL}} \right) $0 +endsnippet + +snippet lr( "left( right)" i +\left( ${1:${VISUAL}} \right) $0 +endsnippet + +snippet lr| "left| right|" i +\left| ${1:${VISUAL}} \right| $0 +endsnippet + +snippet lr{ "left\{ right\}" i +\left\\{ ${1:${VISUAL}} \right\\} $0 +endsnippet + +snippet lrb "left\{ right\}" i +\left\\{ ${1:${VISUAL}} \right\\} $0 +endsnippet + +snippet lr[ "left[ right]" i +\left[ ${1:${VISUAL}} \right] $0 +endsnippet + +snippet lra "leftangle rightangle" iA +\left<${1:${VISUAL}} \right>$0 +endsnippet + +context "math()" +snippet conj "conjugate" iA +\overline{$1}$0 +endsnippet + +snippet sum "sum" w +\sum_{${1:i=1}}^{${2:\infty}} ${3:a_n z^n} +endsnippet + +snippet taylor "taylor" w +\sum_{${1:k}=${2:0}}^{${3:\infty}} ${4:c_$1} (x-a)^$1 $0 +endsnippet + +snippet lim "limit" w +\lim_{${1:n} \to ${2:\infty}} +endsnippet + +snippet limsup "limsup" w +\limsup_{${1:n} \to ${2:\infty}} +endsnippet + +snippet prod "product" w +\prod_{${1:n=${2:1}}}^{${3:\infty}} ${4:${VISUAL}} $0 +endsnippet + +snippet part "d/dx" w +\frac{\partial ${1:V}}{\partial ${2:x}} $0 +endsnippet + +context "math()" +snippet sq "\sqrt{}" iA +\sqrt{${1:${VISUAL}}} $0 +endsnippet + +context "math()" +snippet sr "^2" iA +^2 +endsnippet + +context "math()" +snippet cb "^3" iA +^3 +endsnippet + +context "math()" +snippet td "to the ... power" iA +^{$1}$0 +endsnippet + +context "math()" +snippet rd "to the ... power" iA +^{($1)}$0 +endsnippet + +snippet __ "subscript" iA +_{$1}$0 +endsnippet + +snippet ooo "\infty" iA +\infty +endsnippet + +snippet rij "mrij" i +(${1:x}_${2:n})_{${3:$2}\\in${4:\\N}}$0 +endsnippet + +snippet <= "leq" iA +\le +endsnippet + +snippet >= "geq" iA +\ge +endsnippet + +context "math()" +snippet EE "geq" iA +\exists +endsnippet + +context "math()" +snippet AA "forall" iA +\forall +endsnippet + +context "math()" +snippet xnn "xn" iA +x_{n} +endsnippet + +context "math()" +snippet ynn "yn" iA +y_{n} +endsnippet + + +context "math()" +snippet xii "xi" iA +x_{i} +endsnippet + +context "math()" +snippet yii "yi" iA +y_{i} +endsnippet + +context "math()" +snippet xjj "xj" iA +x_{j} +endsnippet + +context "math()" +snippet yjj "yj" iA +y_{j} +endsnippet + +context "math()" +snippet xp1 "x" iA +x_{n+1} +endsnippet + +context "math()" +snippet xmm "x" iA +x_{m} +endsnippet + +snippet R0+ "R0+" iA +\\R_0^+ +endsnippet + +snippet plot "Plot" w +\begin{figure}[$1] + \centering + \begin{tikzpicture} + \begin{axis}[ + xmin= ${2:-10}, xmax= ${3:10}, + ymin= ${4:-10}, ymax = ${5:10}, + axis lines = middle, + ] + \addplot[domain=$2:$3, samples=${6:100}]{$7}; + \end{axis} + \end{tikzpicture} + \caption{$8} + \label{${9:$8}} +\end{figure} +endsnippet + +snippet nn "Tikz node" w +\node[$5] (${1/[^0-9a-zA-Z]//g}${2}) ${3:at (${4:0,0}) }{$${1}$}; +$0 +endsnippet + +context "math()" +snippet mcal "mathcal" iA +\mathcal{$1}$0 +endsnippet + +snippet lll "l" iA +\ell +endsnippet + +context "math()" +snippet nabl "nabla" iA +\nabla +endsnippet + +context "math()" +snippet xx "cross" iA +\times +endsnippet + +priority 100 +snippet ** "cdot" iA +\cdot +endsnippet + +context "math()" +snippet norm "norm" iA +\|$1\|$0 +endsnippet + +priority 100 +context "math()" +snippet '(? "to" iA +\to +endsnippet + +priority 200 +context "math()" +snippet <-> "leftrightarrow" iA +\leftrightarrow +endsnippet + +context "math()" +snippet !> "mapsto" iA +\mapsto +endsnippet + +context "math()" +snippet invs "inverse" iA +^{-1} +endsnippet + +context "math()" +snippet compl "complement" iA +^{c} +endsnippet + +context "math()" +snippet \\\ "setminus" iA +\setminus +endsnippet + +snippet >> ">>" iA +\gg +endsnippet + +snippet << "<<" iA +\ll +endsnippet + + +snippet ~~ "~" iA +\sim +endsnippet + +context "math()" +snippet set "set" wA +\\{$1\\} $0 +endsnippet + +snippet || "mid" iA + \mid +endsnippet + + +context "math()" +snippet cc "subset" Ai +\subset +endsnippet + +snippet notin "not in " iA +\not\in +endsnippet + +context "math()" +snippet inn "in " iA +\in +endsnippet + +snippet NN "n" iA +\N +endsnippet + +snippet Nn "cap" iA +\cap +endsnippet + +snippet UU "cup" iA +\cup +endsnippet + +snippet uuu "bigcup" iA +\bigcup_{${1:i \in ${2: I}}} $0 +endsnippet + +snippet nnn "bigcap" iA +\bigcap_{${1:i \in ${2: I}}} $0 +endsnippet + +snippet OO "emptyset" iA +\O +endsnippet + +snippet RR "real" iA +\R +endsnippet + +snippet QQ "Q" iA +\Q +endsnippet + +snippet ZZ "Z" iA +\Z +endsnippet + +snippet "hokje" iA +\diamond +endsnippet + + +context "math()" +snippet '(?' + let g:UltiSnipsJumpForwardTrigger = '' + let g:UltiSnipsJumpBackwardTrigger = '' +Plugin 'lervag/vimtex' + let g:tex_flavor='latex' + let g:vimtex_view_method='zathura' + let g:vimtex_quickfix_mode=0 + set conceallevel=1 + let g:tex_conceal='abdmg' call vundle#end() " required filetype plugin indent on " required -:colorscheme onedark +:colorscheme purify :set number relativenumber :set autoindent @@ -80,7 +90,9 @@ let g:airline_symbols.linenr = '' :command Ttp !pdflatex %:t "" JS/TS/Node -:command NpmInstall !pnpm i +:command NpmInstall !npm install +:command TscWatch !npm run ts-watch +:command NodemonStart !npm run start "" Git :command -nargs=1 -bar GitignoreCreate !curl https://www.toptal.com/developers/gitignore/api/ | tee -a .gitignore @@ -94,10 +106,8 @@ inoremap pumvisible() ? coc#_select_confirm() : "" set shell=/bin/bash - " Highlight augroup twig_ft au! autocmd BufNewFile,BufRead *.mcfunction set syntax=mcfunction augroup END -