├── .gitattributes ├── .gitignore ├── LICENSE ├── README.md ├── demo_media └── demo.gif ├── lib ├── index.css ├── index.d.ts ├── index.js ├── index.js.map └── macros.json ├── package-lock.json ├── package.json ├── src ├── index.css ├── index.ts └── macros.json └── tsconfig.json /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 jun-sheaf 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | > This hinter is no longer required in CodeMirror 6. Please see [lezer-tex](https://github.com/mu-io/lezer-tex) for a grammar plugin for CodeMirror 6. 2 | > Since CodeMirror 6 is in beta, this repository is deprecated. 3 | 4 | # LaTeX Snippet Hinter for CodeMirror 5 | 6 | This is a hinter function for use with [CodeMirror](https://codemirror.net)'s [showHint.js](https://codemirror.net/doc/manual.html#addon_show-hint) plugin. This is based on [TeXStudio](https://github.com/texstudio-org/texstudio)'s autocompletion mechanism. 7 | 8 | # Features 9 | Pressing `tab` allows users to move to the next argument of a macro. It also highlights user input in the list of matched hints. 10 | 11 | 12 | 13 | # Installation 14 | ``` 15 | npm install codemirror-latex-hint codemirror 16 | ``` 17 | 18 | # To Use 19 | ```javascript 20 | import LaTeXHint from "codemirror-latex-hint"; 21 | import macros from "codemirror-latex-hint/lib/macros.json"; 22 | import "codemirror-latex-hint/lib/index.css"; 23 | 24 | CodeMirror.registerHelper("hint", "stex", (cm) => LaTeXHint(cm, macros)); 25 | ``` 26 | 27 | # Customization 28 | The list of macros in the package contains all MathJaX macros and environments. You can import your own list of macros (with the format given in `macros.json`) rather than the packaged one. 29 | -------------------------------------------------------------------------------- /demo_media/demo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jrandolf/codemirror-latex-hint/98261442eb9c8f7161f62d28b590ebec5f9f9d49/demo_media/demo.gif -------------------------------------------------------------------------------- /lib/index.css: -------------------------------------------------------------------------------- 1 | .CodeMirror-hints { 2 | position: absolute; 3 | z-index: 10; 4 | overflow: hidden; 5 | list-style: none; 6 | 7 | margin: 0; 8 | padding: 0; 9 | 10 | border: 1px solid silver; 11 | 12 | background: white; 13 | font-size: 90%; 14 | font-family: "Fira Code"; 15 | 16 | max-height: 20em; 17 | overflow-y: auto; 18 | } 19 | 20 | .CodeMirror-hint { 21 | margin: 0; 22 | padding: 0 4px; 23 | border-radius: 2px; 24 | white-space: pre; 25 | color: black; 26 | cursor: pointer; 27 | } 28 | .CodeMirror-hint-entered { 29 | color: #170; 30 | } 31 | .CodeMirror-hint-arg { 32 | color: gray; 33 | } 34 | li.CodeMirror-hint-active { 35 | background: rgb(201, 233, 195); 36 | } 37 | -------------------------------------------------------------------------------- /lib/index.d.ts: -------------------------------------------------------------------------------- 1 | import CodeMirror from "codemirror"; 2 | import "codemirror/addon/hint/show-hint"; 3 | interface LaTeXMacro { 4 | text: string; 5 | snippet: string; 6 | } 7 | /** 8 | * The hinter function 9 | * @param cm CodeMirror instance 10 | * @param macros A list of LaTeX macros 11 | */ 12 | declare const LaTeXHint: (cm: CodeMirror.Editor, macros: LaTeXMacro[]) => CodeMirror.Hints; 13 | export default LaTeXHint; 14 | -------------------------------------------------------------------------------- /lib/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __importDefault = (this && this.__importDefault) || function (mod) { 3 | return (mod && mod.__esModule) ? mod : { "default": mod }; 4 | }; 5 | Object.defineProperty(exports, "__esModule", { value: true }); 6 | const codemirror_1 = __importDefault(require("codemirror")); 7 | require("codemirror/addon/hint/show-hint"); 8 | /** 9 | * Binary operation that compares Positions by library order 10 | * @param left Left Position 11 | * @param right Right Position 12 | */ 13 | const comparePos = (left, right) => { 14 | if (left.line < right.line) { 15 | return true; 16 | } 17 | else if (left.line > right.line) { 18 | return false; 19 | } 20 | else if (left.ch < right.ch) { 21 | return true; 22 | } 23 | else if (left.ch > right.ch) { 24 | return false; 25 | } 26 | else 27 | return false; 28 | }; 29 | /** 30 | * The rendering function for when the hint IS chosen. 31 | * @param cm CodeMirror instance 32 | * @param self The list of LaTeX macros closest to user input 33 | * @param data A LaTeX macro 34 | */ 35 | const intelliSense = (cm, self, data) => { 36 | const { text } = data; 37 | const dissectedSnippet = []; 38 | let snipPart = ""; 39 | for (let i = 0; i < text.length; i++) { 40 | if (text[i] === "#") { 41 | dissectedSnippet.push(snipPart); 42 | snipPart = ""; 43 | i++; 44 | } 45 | else { 46 | snipPart += text[i]; 47 | } 48 | } 49 | dissectedSnippet.push(snipPart); 50 | const start = { 51 | line: self.from.line + (dissectedSnippet[0].match(/\n/g) || []).length, 52 | ch: self.from.ch + dissectedSnippet[0].length, 53 | }; 54 | let content = [start.ch]; 55 | const calculateEnd = () => { 56 | return { 57 | line: start.line + content.length - 1, 58 | ch: content[content.length - 1], 59 | }; 60 | }; 61 | const checkCursorPosition = (cm) => { 62 | const cursorPos = cm.getCursor(); 63 | if (comparePos(calculateEnd(), cursorPos) || comparePos(cursorPos, start)) { 64 | stopSnippet(); 65 | } 66 | }; 67 | const stopSnippet = () => { 68 | cm.removeKeyMap(moveToNextLocation); 69 | cm.off("change", setCurrentPosition); 70 | cm.off("cursorActivity", checkCursorPosition); 71 | }; 72 | const setCurrentPosition = (cm, { from, text, removed }) => { 73 | let origin = from.line - start.line; 74 | if (removed) { 75 | let len = removed.length - 1; 76 | if (len > 0) { 77 | content[origin + len] -= removed[len].length; 78 | content[origin] += content[origin + len] - removed[0].length; 79 | content.splice(origin + 1, len); 80 | } 81 | else { 82 | content[origin] -= removed[0].length; 83 | } 84 | } 85 | if (text) { 86 | let len = text.length - 1; 87 | if (len > 0) { 88 | const diff = content[origin] - from.ch; 89 | content[origin] = content[origin] + text[0].length - diff; 90 | for (let i = 1; i < len; i++) { 91 | content.splice(origin + i, 0, 0); 92 | content[origin + i] = content[origin + i] + text[i].length; 93 | } 94 | content.splice(origin + len, 0, 0); 95 | content[origin + len] = content[origin + len] + text[len].length + diff; 96 | } 97 | else { 98 | content[origin] += text[0].length; 99 | } 100 | } 101 | }; 102 | const moveToNextLocation = { 103 | Tab: (cm) => { 104 | if (dissectedSnippet.length > 0) { 105 | let end = calculateEnd(); 106 | start.line = end.line + (dissectedSnippet[0].match(/\n/g) || []).length; 107 | start.ch = end.ch + dissectedSnippet[0].length; 108 | content = [start.ch]; 109 | cm.setCursor(start); 110 | } 111 | dissectedSnippet.shift(); 112 | if (dissectedSnippet.length === 0) { 113 | return stopSnippet(); 114 | } 115 | }, 116 | }; 117 | cm.replaceRange(dissectedSnippet.join(""), data.from || self.from, data.to || self.to, "complete"); 118 | cm.setCursor(calculateEnd()); 119 | if (text.includes("#1")) { 120 | cm.addKeyMap(moveToNextLocation); 121 | cm.on("change", setCurrentPosition); 122 | cm.on("cursorActivity", checkCursorPosition); 123 | } 124 | dissectedSnippet.shift(); 125 | }; 126 | /** 127 | * The hinter function 128 | * @param cm CodeMirror instance 129 | * @param macros A list of LaTeX macros 130 | */ 131 | const LaTeXHint = (cm, macros) => { 132 | let cur = cm.getCursor(); 133 | let token = cm.getTokenAt(cur); 134 | let start = token.start; 135 | let end = cur.ch; 136 | let word = token.string.slice(0, end - start); 137 | if (word === "\\\\") { 138 | cm.state.completionActive.close(); 139 | return { 140 | list: [], 141 | from: codemirror_1.default.Pos(cur.line, start), 142 | to: codemirror_1.default.Pos(cur.line, end), 143 | }; 144 | } 145 | if (/[^\w\\]/.test(word)) { 146 | word = ""; 147 | start = end = cur.ch; 148 | } 149 | const hints = { 150 | list: [], 151 | from: codemirror_1.default.Pos(cur.line, start), 152 | to: codemirror_1.default.Pos(cur.line, end), 153 | }; 154 | if (token.type == "tag") { 155 | for (const macro of macros) { 156 | if (!word || macro.text.lastIndexOf(word, 0) === 0) { 157 | hints.list.push({ 158 | displayText: macro.text, 159 | text: macro.snippet, 160 | render: (element, data, cur) => { 161 | let entered = element.appendChild(document.createElement("span")); 162 | entered.classList.add("CodeMirror-hint-entered"); 163 | entered.textContent = word; 164 | element.appendChild(document.createElement("span")).innerHTML = cur.displayText 165 | .slice(word.length) 166 | .replace(/(\#[1-9])/g, (_, arg) => `${arg}`); 167 | }, 168 | hint: intelliSense, 169 | }); 170 | } 171 | } 172 | } 173 | return hints; 174 | }; 175 | exports.default = LaTeXHint; 176 | //# sourceMappingURL=index.js.map -------------------------------------------------------------------------------- /lib/index.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"} -------------------------------------------------------------------------------- /lib/macros.json: -------------------------------------------------------------------------------- 1 | [ 2 | { "text": "\\Arrowvert", "snippet": "\\Arrowvert" }, 3 | { "text": "\\Bbbk", "snippet": "\\Bbbk" }, 4 | { "text": "\\Big", "snippet": "\\Big" }, 5 | { "text": "\\Bigg", "snippet": "\\Bigg" }, 6 | { "text": "\\Biggl", "snippet": "\\Biggl" }, 7 | { "text": "\\Biggr", "snippet": "\\Biggr" }, 8 | { "text": "\\Bigl", "snippet": "\\Bigl" }, 9 | { "text": "\\Bigm", "snippet": "\\Bigm" }, 10 | { "text": "\\Bigr", "snippet": "\\Bigr" }, 11 | { "text": "\\Box", "snippet": "\\Box" }, 12 | { "text": "\\Bumpeq", "snippet": "\\Bumpeq" }, 13 | { "text": "\\Cap", "snippet": "\\Cap" }, 14 | { "text": "\\cite[#1]{#2}", "snippet": "\\cite[#1]{#2}" }, 15 | { "text": "\\cite{#1}", "snippet": "\\cite{#1}" }, 16 | { "text": "\\Cup", "snippet": "\\Cup" }, 17 | { "text": "\\DeclareMathOperator{#1}{#2}", "snippet": "\\DeclareMathOperator{#1}{#2}" }, 18 | { "text": "\\Delta", "snippet": "\\Delta" }, 19 | { "text": "\\Downarrow", "snippet": "\\Downarrow" }, 20 | { "text": "\\Finv", "snippet": "\\Finv" }, 21 | { "text": "\\Game", "snippet": "\\Game" }, 22 | { "text": "\\Gamma", "snippet": "\\Gamma" }, 23 | { "text": "\\Im", "snippet": "\\Im" }, 24 | { "text": "\\Lambda", "snippet": "\\Lambda" }, 25 | { "text": "\\Leftarrow", "snippet": "\\Leftarrow" }, 26 | { "text": "\\Leftrightarrow", "snippet": "\\Leftrightarrow" }, 27 | { "text": "\\Lleftarrow", "snippet": "\\Lleftarrow" }, 28 | { "text": "\\Longleftarrow", "snippet": "\\Longleftarrow" }, 29 | { "text": "\\Longleftrightarrow", "snippet": "\\Longleftrightarrow" }, 30 | { "text": "\\Longrightarrow", "snippet": "\\Longrightarrow" }, 31 | { "text": "\\Lsh", "snippet": "\\Lsh" }, 32 | { "text": "\\Omega", "snippet": "\\Omega" }, 33 | { "text": "\\Phi", "snippet": "\\Phi" }, 34 | { "text": "\\Pi", "snippet": "\\Pi" }, 35 | { "text": "\\Pr", "snippet": "\\Pr" }, 36 | { "text": "\\Psi", "snippet": "\\Psi" }, 37 | { "text": "\\Re", "snippet": "\\Re" }, 38 | { "text": "\\Rightarrow", "snippet": "\\Rightarrow" }, 39 | { "text": "\\Rrightarrow", "snippet": "\\Rrightarrow" }, 40 | { "text": "\\Rsh", "snippet": "\\Rsh" }, 41 | { "text": "\\S", "snippet": "\\S" }, 42 | { "text": "\\Sigma", "snippet": "\\Sigma" }, 43 | { "text": "\\Subset", "snippet": "\\Subset" }, 44 | { "text": "\\Supset", "snippet": "\\Supset" }, 45 | { "text": "\\TeX", "snippet": "\\TeX" }, 46 | { "text": "\\Theta", "snippet": "\\Theta" }, 47 | { "text": "\\Uparrow", "snippet": "\\Uparrow" }, 48 | { "text": "\\Updownarrow", "snippet": "\\Updownarrow" }, 49 | { "text": "\\Upsilon", "snippet": "\\Upsilon" }, 50 | { "text": "\\Vdash", "snippet": "\\Vdash" }, 51 | { "text": "\\Vert", "snippet": "\\Vert" }, 52 | { "text": "\\Vvdash", "snippet": "\\Vvdash" }, 53 | { "text": "\\Xi", "snippet": "\\Xi" }, 54 | { "text": "\\above", "snippet": "\\above" }, 55 | { "text": "\\abovewithdelims", "snippet": "\\abovewithdelims" }, 56 | { "text": "\\acute{#1}", "snippet": "\\acute{#1}" }, 57 | { "text": "\\aleph", "snippet": "\\aleph" }, 58 | { "text": "\\alpha", "snippet": "\\alpha" }, 59 | { "text": "\\amalg", "snippet": "\\amalg" }, 60 | { "text": "\\angle", "snippet": "\\angle" }, 61 | { "text": "\\approx", "snippet": "\\approx" }, 62 | { "text": "\\approxeq", "snippet": "\\approxeq" }, 63 | { "text": "\\arccos", "snippet": "\\arccos" }, 64 | { "text": "\\arcsin", "snippet": "\\arcsin" }, 65 | { "text": "\\arctan", "snippet": "\\arctan" }, 66 | { "text": "\\arg", "snippet": "\\arg" }, 67 | { "text": "\\arrowvert", "snippet": "\\arrowvert" }, 68 | { "text": "\\ast", "snippet": "\\ast" }, 69 | { "text": "\\asymp", "snippet": "\\asymp" }, 70 | { "text": "\\atop", "snippet": "\\atop" }, 71 | { "text": "\\atopwithdelims", "snippet": "\\atopwithdelims" }, 72 | { "text": "\\backepsilon", "snippet": "\\backepsilon" }, 73 | { "text": "\\backprime", "snippet": "\\backprime" }, 74 | { "text": "\\backsim", "snippet": "\\backsim" }, 75 | { "text": "\\backsimeq", "snippet": "\\backsimeq" }, 76 | { "text": "\\backslash", "snippet": "\\backslash" }, 77 | { "text": "\\bar{#1}", "snippet": "\\bar{#1}" }, 78 | { "text": "\\barwedge", "snippet": "\\barwedge" }, 79 | { "text": "\\because", "snippet": "\\because" }, 80 | { "text": "\\beta", "snippet": "\\beta" }, 81 | { "text": "\\beth", "snippet": "\\beth" }, 82 | { "text": "\\between", "snippet": "\\between" }, 83 | { "text": "\\bf", "snippet": "\\bf" }, 84 | { "text": "\\big", "snippet": "\\big" }, 85 | { "text": "\\bigcap", "snippet": "\\bigcap" }, 86 | { "text": "\\bigcirc", "snippet": "\\bigcirc" }, 87 | { "text": "\\bigcup", "snippet": "\\bigcup" }, 88 | { "text": "\\bigg", "snippet": "\\bigg" }, 89 | { "text": "\\biggl", "snippet": "\\biggl" }, 90 | { "text": "\\biggm", "snippet": "\\biggm" }, 91 | { "text": "\\biggr", "snippet": "\\biggr" }, 92 | { "text": "\\bigl", "snippet": "\\bigl" }, 93 | { "text": "\\bigm", "snippet": "\\bigm" }, 94 | { "text": "\\bigodot", "snippet": "\\bigodot" }, 95 | { "text": "\\bigoplus", "snippet": "\\bigoplus" }, 96 | { "text": "\\bigotimes", "snippet": "\\bigotimes" }, 97 | { "text": "\\bigr\\}", "snippet": "\\bigr\\}" }, 98 | { "text": "\\bigsqcup", "snippet": "\\bigsqcup" }, 99 | { "text": "\\bigstar", "snippet": "\\bigstar" }, 100 | { "text": "\\bigtriangledown", "snippet": "\\bigtriangledown" }, 101 | { "text": "\\bigtriangleup", "snippet": "\\bigtriangleup" }, 102 | { "text": "\\biguplus", "snippet": "\\biguplus" }, 103 | { "text": "\\bigvee", "snippet": "\\bigvee" }, 104 | { "text": "\\bigwedge", "snippet": "\\bigwedge" }, 105 | { "text": "\\binom{#1}{#2}", "snippet": "\\binom{#1}{#2}" }, 106 | { "text": "\\blacklozenge", "snippet": "\\blacklozenge" }, 107 | { "text": "\\blacksquare", "snippet": "\\blacksquare" }, 108 | { "text": "\\blacktriangle", "snippet": "\\blacktriangle" }, 109 | { "text": "\\blacktriangledown", "snippet": "\\blacktriangledown" }, 110 | { "text": "\\blacktriangleleft", "snippet": "\\blacktriangleleft" }, 111 | { "text": "\\blacktriangleright", "snippet": "\\blacktriangleright" }, 112 | { "text": "\\bmod", "snippet": "\\bmod" }, 113 | { "text": "\\boldsymbol{#1}", "snippet": "\\boldsymbol{#1}" }, 114 | { "text": "\\bot", "snippet": "\\bot" }, 115 | { "text": "\\bowtie", "snippet": "\\bowtie" }, 116 | { "text": "\\boxdot", "snippet": "\\boxdot" }, 117 | { "text": "\\boxed{#1}", "snippet": "\\boxed{#1}" }, 118 | { "text": "\\boxminus", "snippet": "\\boxminus" }, 119 | { "text": "\\boxplus", "snippet": "\\boxplus" }, 120 | { "text": "\\boxtimes", "snippet": "\\boxtimes" }, 121 | { "text": "\\brace", "snippet": "\\brace" }, 122 | { "text": "\\bracevert", "snippet": "\\bracevert" }, 123 | { "text": "\\brack", "snippet": "\\brack" }, 124 | { "text": "\\breve{#1}", "snippet": "\\breve{#1}" }, 125 | { "text": "\\buildrel", "snippet": "\\buildrel" }, 126 | { "text": "\\bullet", "snippet": "\\bullet" }, 127 | { "text": "\\bumpeq", "snippet": "\\bumpeq" }, 128 | { "text": "\\cal", "snippet": "\\cal" }, 129 | { "text": "\\cap", "snippet": "\\cap" }, 130 | { "text": "\\cases{#1}", "snippet": "\\cases{#1}" }, 131 | { "text": "\\cdot", "snippet": "\\cdot" }, 132 | { "text": "\\cdotp", "snippet": "\\cdotp" }, 133 | { "text": "\\cdots", "snippet": "\\cdots" }, 134 | { "text": "\\centerdot", "snippet": "\\centerdot" }, 135 | { "text": "\\cfrac{#1}{#2}", "snippet": "\\cfrac{#1}{#2}" }, 136 | { "text": "\\check{#1}", "snippet": "\\check{#1}" }, 137 | { "text": "\\checkmark", "snippet": "\\checkmark" }, 138 | { "text": "\\chi", "snippet": "\\chi" }, 139 | { "text": "\\choose", "snippet": "\\choose" }, 140 | { "text": "\\circ", "snippet": "\\circ" }, 141 | { "text": "\\circeq", "snippet": "\\circeq" }, 142 | { "text": "\\circlearrowleft", "snippet": "\\circlearrowleft" }, 143 | { "text": "\\circlearrowright", "snippet": "\\circlearrowright" }, 144 | { "text": "\\circledS", "snippet": "\\circledS" }, 145 | { "text": "\\circledast", "snippet": "\\circledast" }, 146 | { "text": "\\circledcirc", "snippet": "\\circledcirc" }, 147 | { "text": "\\circleddash", "snippet": "\\circleddash" }, 148 | { "text": "\\clubsuit", "snippet": "\\clubsuit" }, 149 | { "text": "\\colon", "snippet": "\\colon" }, 150 | { "text": "\\complement", "snippet": "\\complement" }, 151 | { "text": "\\cong", "snippet": "\\cong" }, 152 | { "text": "\\coprod", "snippet": "\\coprod" }, 153 | { "text": "\\cos", "snippet": "\\cos" }, 154 | { "text": "\\cosh", "snippet": "\\cosh" }, 155 | { "text": "\\cot", "snippet": "\\cot" }, 156 | { "text": "\\coth", "snippet": "\\coth" }, 157 | { "text": "\\cr", "snippet": "\\cr" }, 158 | { "text": "\\csc", "snippet": "\\csc" }, 159 | { "text": "\\cup", "snippet": "\\cup" }, 160 | { "text": "\\curlyeqprec", "snippet": "\\curlyeqprec" }, 161 | { "text": "\\curlyeqsucc", "snippet": "\\curlyeqsucc" }, 162 | { "text": "\\curlyvee", "snippet": "\\curlyvee" }, 163 | { "text": "\\curlywedge", "snippet": "\\curlywedge" }, 164 | { "text": "\\curvearrowleft", "snippet": "\\curvearrowleft" }, 165 | { "text": "\\curvearrowright", "snippet": "\\curvearrowright" }, 166 | { "text": "\\dagger", "snippet": "\\dagger" }, 167 | { "text": "\\daleth", "snippet": "\\daleth" }, 168 | { "text": "\\dashleftarrow", "snippet": "\\dashleftarrow" }, 169 | { "text": "\\dashrightarrow", "snippet": "\\dashrightarrow" }, 170 | { "text": "\\dashv", "snippet": "\\dashv" }, 171 | { "text": "\\dbinom{#1}{#2}", "snippet": "\\dbinom{#1}{#2}" }, 172 | { "text": "\\ddagger", "snippet": "\\ddagger" }, 173 | { "text": "\\ddddot{#1}", "snippet": "\\ddddot{#1}" }, 174 | { "text": "\\dddot{#1}", "snippet": "\\dddot{#1}" }, 175 | { "text": "\\ddot{#1}", "snippet": "\\ddot{#1}" }, 176 | { "text": "\\ddots", "snippet": "\\ddots" }, 177 | { "text": "\\def", "snippet": "\\def" }, 178 | { "text": "\\deg", "snippet": "\\deg" }, 179 | { "text": "\\delta", "snippet": "\\delta" }, 180 | { "text": "\\det", "snippet": "\\det" }, 181 | { "text": "\\dfrac{#1}{#2}", "snippet": "\\dfrac{#1}{#2}" }, 182 | { "text": "\\diagdown", "snippet": "\\diagdown" }, 183 | { "text": "\\diagup", "snippet": "\\diagup" }, 184 | { "text": "\\diamond", "snippet": "\\diamond" }, 185 | { "text": "\\diamondsuit", "snippet": "\\diamondsuit" }, 186 | { "text": "\\digamma", "snippet": "\\digamma" }, 187 | { "text": "\\dim", "snippet": "\\dim" }, 188 | { "text": "\\displaylines", "snippet": "\\displaylines" }, 189 | { "text": "\\displaystyle", "snippet": "\\displaystyle" }, 190 | { "text": "\\div", "snippet": "\\div" }, 191 | { "text": "\\divideontimes", "snippet": "\\divideontimes" }, 192 | { "text": "\\dot{#1}", "snippet": "\\dot{#1}" }, 193 | { "text": "\\doteq", "snippet": "\\doteq" }, 194 | { "text": "\\doteqdot", "snippet": "\\doteqdot" }, 195 | { "text": "\\dotplus", "snippet": "\\dotplus" }, 196 | { "text": "\\dots", "snippet": "\\dots" }, 197 | { "text": "\\dotsb", "snippet": "\\dotsb" }, 198 | { "text": "\\dotsc", "snippet": "\\dotsc" }, 199 | { "text": "\\dotsi", "snippet": "\\dotsi" }, 200 | { "text": "\\dotsm", "snippet": "\\dotsm" }, 201 | { "text": "\\dotso", "snippet": "\\dotso" }, 202 | { "text": "\\doublebarwedge", "snippet": "\\doublebarwedge" }, 203 | { "text": "\\downarrow", "snippet": "\\downarrow" }, 204 | { "text": "\\downdownarrows", "snippet": "\\downdownarrows" }, 205 | { "text": "\\downharpoonleft", "snippet": "\\downharpoonleft" }, 206 | { "text": "\\downharpoonright", "snippet": "\\downharpoonright" }, 207 | { "text": "\\ell", "snippet": "\\ell" }, 208 | { "text": "\\emptyset", "snippet": "\\emptyset" }, 209 | { "text": "\\enspace", "snippet": "\\enspace" }, 210 | { "text": "\\epsilon", "snippet": "\\epsilon" }, 211 | { "text": "\\eqalign{#1}", "snippet": "\\eqalign{#1}" }, 212 | { "text": "\\eqalignno{#1}", "snippet": "\\eqalignno{#1}" }, 213 | { "text": "\\eqcirc", "snippet": "\\eqcirc" }, 214 | { "text": "\\eqref{#1}", "snippet": "\\eqref{#1}" }, 215 | { "text": "\\eqsim", "snippet": "\\eqsim" }, 216 | { "text": "\\eqslantgtr", "snippet": "\\eqslantgtr" }, 217 | { "text": "\\eqslantless", "snippet": "\\eqslantless" }, 218 | { "text": "\\equiv", "snippet": "\\equiv" }, 219 | { "text": "\\eta", "snippet": "\\eta" }, 220 | { "text": "\\eth", "snippet": "\\eth" }, 221 | { "text": "\\exists", "snippet": "\\exists" }, 222 | { "text": "\\exp", "snippet": "\\exp" }, 223 | { "text": "\\fallingdotseq", "snippet": "\\fallingdotseq" }, 224 | { "text": "\\flat", "snippet": "\\flat" }, 225 | { "text": "\\forall", "snippet": "\\forall" }, 226 | { "text": "\\frown", "snippet": "\\frown" }, 227 | { "text": "\\gamma", "snippet": "\\gamma" }, 228 | { "text": "\\gcd", "snippet": "\\gcd" }, 229 | { "text": "\\ge", "snippet": "\\ge" }, 230 | { "text": "\\geq", "snippet": "\\geq" }, 231 | { "text": "\\geqq", "snippet": "\\geqq" }, 232 | { "text": "\\geqslant", "snippet": "\\geqslant" }, 233 | { "text": "\\gets", "snippet": "\\gets" }, 234 | { "text": "\\gg", "snippet": "\\gg" }, 235 | { "text": "\\ggg", "snippet": "\\ggg" }, 236 | { "text": "\\gimel", "snippet": "\\gimel" }, 237 | { "text": "\\gnapprox", "snippet": "\\gnapprox" }, 238 | { "text": "\\gneq", "snippet": "\\gneq" }, 239 | { "text": "\\gneqq", "snippet": "\\gneqq" }, 240 | { "text": "\\gnsim", "snippet": "\\gnsim" }, 241 | { "text": "\\grave{#1}", "snippet": "\\grave{#1}" }, 242 | { "text": "\\gtrapprox", "snippet": "\\gtrapprox" }, 243 | { "text": "\\gtrdot", "snippet": "\\gtrdot" }, 244 | { "text": "\\gtreqless", "snippet": "\\gtreqless" }, 245 | { "text": "\\gtreqqless", "snippet": "\\gtreqqless" }, 246 | { "text": "\\gtrless", "snippet": "\\gtrless" }, 247 | { "text": "\\gtrsim", "snippet": "\\gtrsim" }, 248 | { "text": "\\gvertneqq", "snippet": "\\gvertneqq" }, 249 | { "text": "\\hat{#1}", "snippet": "\\hat{#1}" }, 250 | { "text": "\\hbar", "snippet": "\\hbar" }, 251 | { "text": "\\hbox", "snippet": "\\hbox" }, 252 | { "text": "\\heartsuit", "snippet": "\\heartsuit" }, 253 | { "text": "\\hfil", "snippet": "\\hfil" }, 254 | { "text": "\\hfill", "snippet": "\\hfill" }, 255 | { "text": "\\hom", "snippet": "\\hom" }, 256 | { "text": "\\hookleftarrow", "snippet": "\\hookleftarrow" }, 257 | { "text": "\\hookrightarrow", "snippet": "\\hookrightarrow" }, 258 | { "text": "\\hphantom{#1}", "snippet": "\\hphantom{#1}" }, 259 | { "text": "\\hskip", "snippet": "\\hskip" }, 260 | { "text": "\\hslash", "snippet": "\\hslash" }, 261 | { "text": "\\idotsint", "snippet": "\\idotsint" }, 262 | { "text": "\\iff", "snippet": "\\iff" }, 263 | { "text": "\\iiiint", "snippet": "\\iiiint" }, 264 | { "text": "\\iiint", "snippet": "\\iiint" }, 265 | { "text": "\\iint", "snippet": "\\iint" }, 266 | { "text": "\\imath", "snippet": "\\imath" }, 267 | { "text": "\\impliedby", "snippet": "\\impliedby" }, 268 | { "text": "\\implies", "snippet": "\\implies" }, 269 | { "text": "\\in", "snippet": "\\in" }, 270 | { "text": "\\inf", "snippet": "\\inf" }, 271 | { "text": "\\infty", "snippet": "\\infty" }, 272 | { "text": "\\injlim", "snippet": "\\injlim" }, 273 | { "text": "\\int\\limits_{#1}^{#2}", "snippet": "\\int\\limits_{#1}^{#2}" }, 274 | { "text": "\\intercal", "snippet": "\\intercal" }, 275 | { "text": "\\iota", "snippet": "\\iota" }, 276 | { "text": "\\it", "snippet": "\\it" }, 277 | { "text": "\\jmath", "snippet": "\\jmath" }, 278 | { "text": "\\kappa", "snippet": "\\kappa" }, 279 | { "text": "\\ker", "snippet": "\\ker" }, 280 | { "text": "\\kern", "snippet": "\\kern" }, 281 | { "text": "\\lVert", "snippet": "\\lVert" }, 282 | { "text": "\\lambda", "snippet": "\\lambda" }, 283 | { "text": "\\land", "snippet": "\\land" }, 284 | { "text": "\\langle", "snippet": "\\langle" }, 285 | { "text": "\\lbrace", "snippet": "\\lbrace" }, 286 | { "text": "\\lbrack", "snippet": "\\lbrack" }, 287 | { "text": "\\lceil", "snippet": "\\lceil" }, 288 | { "text": "\\ldotp", "snippet": "\\ldotp" }, 289 | { "text": "\\ldots", "snippet": "\\ldots" }, 290 | { "text": "\\le", "snippet": "\\le" }, 291 | { "text": "\\left", "snippet": "\\left" }, 292 | { "text": "\\leftarrow", "snippet": "\\leftarrow" }, 293 | { "text": "\\leftarrowtail", "snippet": "\\leftarrowtail" }, 294 | { "text": "\\leftharpoondown", "snippet": "\\leftharpoondown" }, 295 | { "text": "\\leftharpoonup", "snippet": "\\leftharpoonup" }, 296 | { "text": "\\leftleftarrows", "snippet": "\\leftleftarrows" }, 297 | { "text": "\\leftrightarrow", "snippet": "\\leftrightarrow" }, 298 | { "text": "\\leftrightarrows", "snippet": "\\leftrightarrows" }, 299 | { "text": "\\leftrightharpoons", "snippet": "\\leftrightharpoons" }, 300 | { "text": "\\leftrightsquigarrow", "snippet": "\\leftrightsquigarrow" }, 301 | { "text": "\\leftroot{#1}", "snippet": "\\leftroot{#1}" }, 302 | { "text": "\\leftthreetimes", "snippet": "\\leftthreetimes" }, 303 | { "text": "\\leq", "snippet": "\\leq" }, 304 | { "text": "\\leqalignno{#1}", "snippet": "\\leqalignno{#1}" }, 305 | { "text": "\\leqq", "snippet": "\\leqq" }, 306 | { "text": "\\leqslant", "snippet": "\\leqslant" }, 307 | { "text": "\\lessapprox", "snippet": "\\lessapprox" }, 308 | { "text": "\\lessdot", "snippet": "\\lessdot" }, 309 | { "text": "\\lesseqgtr", "snippet": "\\lesseqgtr" }, 310 | { "text": "\\lesseqqgtr", "snippet": "\\lesseqqgtr" }, 311 | { "text": "\\lessgtr", "snippet": "\\lessgtr" }, 312 | { "text": "\\lesssim", "snippet": "\\lesssim" }, 313 | { "text": "\\let{#1}{#2}", "snippet": "\\let{#1}{#2}" }, 314 | { "text": "\\lfloor", "snippet": "\\lfloor" }, 315 | { "text": "\\lg", "snippet": "\\lg" }, 316 | { "text": "\\lgroup", "snippet": "\\lgroup" }, 317 | { "text": "\\lhd", "snippet": "\\lhd" }, 318 | { "text": "\\lim", "snippet": "\\lim" }, 319 | { "text": "\\liminf", "snippet": "\\liminf" }, 320 | { "text": "\\limits_{#1}^{#b}", "snippet": "\\limits_{#1}^{#b}" }, 321 | { "text": "\\limsup", "snippet": "\\limsup" }, 322 | { "text": "\\ll", "snippet": "\\ll" }, 323 | { "text": "\\llap{#1}", "snippet": "\\llap{#1}" }, 324 | { "text": "\\llcorner", "snippet": "\\llcorner" }, 325 | { "text": "\\lll", "snippet": "\\lll" }, 326 | { "text": "\\lmoustache", "snippet": "\\lmoustache" }, 327 | { "text": "\\ln", "snippet": "\\ln" }, 328 | { "text": "\\lnapprox", "snippet": "\\lnapprox" }, 329 | { "text": "\\lneq", "snippet": "\\lneq" }, 330 | { "text": "\\lneqq", "snippet": "\\lneqq" }, 331 | { "text": "\\lnot", "snippet": "\\lnot" }, 332 | { "text": "\\lnsim", "snippet": "\\lnsim" }, 333 | { "text": "\\log", "snippet": "\\log" }, 334 | { "text": "\\longleftarrow", "snippet": "\\longleftarrow" }, 335 | { "text": "\\longleftrightarrow", "snippet": "\\longleftrightarrow" }, 336 | { "text": "\\longmapsto", "snippet": "\\longmapsto" }, 337 | { "text": "\\longrightarrow", "snippet": "\\longrightarrow" }, 338 | { "text": "\\looparrowleft", "snippet": "\\looparrowleft" }, 339 | { "text": "\\looparrowright", "snippet": "\\looparrowright" }, 340 | { "text": "\\lor", "snippet": "\\lor" }, 341 | { "text": "\\lower", "snippet": "\\lower" }, 342 | { "text": "\\lozenge", "snippet": "\\lozenge" }, 343 | { "text": "\\lrcorner", "snippet": "\\lrcorner" }, 344 | { "text": "\\ltimes", "snippet": "\\ltimes" }, 345 | { "text": "\\lvert", "snippet": "\\lvert" }, 346 | { "text": "\\lvertneqq", "snippet": "\\lvertneqq" }, 347 | { "text": "\\maltese", "snippet": "\\maltese" }, 348 | { "text": "\\mapsto", "snippet": "\\mapsto" }, 349 | { "text": "\\mathbb{#1}", "snippet": "\\mathbb{#1}" }, 350 | { "text": "\\mathbf{#1}", "snippet": "\\mathbf{#1}" }, 351 | { "text": "\\mathbin", "snippet": "\\mathbin" }, 352 | { "text": "\\mathchoice", "snippet": "\\mathchoice" }, 353 | { "text": "\\mathclose", "snippet": "\\mathclose" }, 354 | { "text": "\\mathfrak{#1}", "snippet": "\\mathfrak{#1}" }, 355 | { "text": "\\mathinner", "snippet": "\\mathinner" }, 356 | { "text": "\\mathop", "snippet": "\\mathop" }, 357 | { "text": "\\mathopen", "snippet": "\\mathopen" }, 358 | { "text": "\\mathord", "snippet": "\\mathord" }, 359 | { "text": "\\mathpunct", "snippet": "\\mathpunct" }, 360 | { "text": "\\mathrel", "snippet": "\\mathrel" }, 361 | { "text": "\\mathstrut", "snippet": "\\mathstrut" }, 362 | { "text": "\\matrix{#1}", "snippet": "\\matrix{#1}" }, 363 | { "text": "\\max", "snippet": "\\max" }, 364 | { "text": "\\measuredangle", "snippet": "\\measuredangle" }, 365 | { "text": "\\mho", "snippet": "\\mho" }, 366 | { "text": "\\mid", "snippet": "\\mid" }, 367 | { "text": "\\middle", "snippet": "\\middle" }, 368 | { "text": "\\min", "snippet": "\\min" }, 369 | { "text": "\\mit", "snippet": "\\mit" }, 370 | { "text": "\\mkern", "snippet": "\\mkern" }, 371 | { "text": "\\mod", "snippet": "\\mod" }, 372 | { "text": "\\models", "snippet": "\\models" }, 373 | { "text": "\\moveleft", "snippet": "\\moveleft" }, 374 | { "text": "\\moveright", "snippet": "\\moveright" }, 375 | { "text": "\\mp", "snippet": "\\mp" }, 376 | { "text": "\\mskip", "snippet": "\\mskip" }, 377 | { "text": "\\mspace{#1}", "snippet": "\\mspace{#1}" }, 378 | { "text": "\\mu", "snippet": "\\mu" }, 379 | { "text": "\\multimap", "snippet": "\\multimap" }, 380 | { "text": "\\nLeftarrow", "snippet": "\\nLeftarrow" }, 381 | { "text": "\\nLeftrightarrow", "snippet": "\\nLeftrightarrow" }, 382 | { "text": "\\nRightarrow", "snippet": "\\nRightarrow" }, 383 | { "text": "\\nVDash", "snippet": "\\nVDash" }, 384 | { "text": "\\nVdash", "snippet": "\\nVdash" }, 385 | { "text": "\\nabla", "snippet": "\\nabla" }, 386 | { "text": "\\natural", "snippet": "\\natural" }, 387 | { "text": "\\ncong", "snippet": "\\ncong" }, 388 | { "text": "\\ne", "snippet": "\\ne" }, 389 | { "text": "\\nearrow", "snippet": "\\nearrow" }, 390 | { "text": "\\neg", "snippet": "\\neg" }, 391 | { "text": "\\negmedspace", "snippet": "\\negmedspace" }, 392 | { "text": "\\negthickspace", "snippet": "\\negthickspace" }, 393 | { "text": "\\negthinspace", "snippet": "\\negthinspace" }, 394 | { "text": "\\neq", "snippet": "\\neq" }, 395 | { "text": "\\nexists", "snippet": "\\nexists" }, 396 | { "text": "\\ngeq", "snippet": "\\ngeq" }, 397 | { "text": "\\ngeqq", "snippet": "\\ngeqq" }, 398 | { "text": "\\ngeqslant", "snippet": "\\ngeqslant" }, 399 | { "text": "\\ngtr", "snippet": "\\ngtr" }, 400 | { "text": "\\ni", "snippet": "\\ni" }, 401 | { "text": "\\nleftarrow", "snippet": "\\nleftarrow" }, 402 | { "text": "\\nleftrightarrow", "snippet": "\\nleftrightarrow" }, 403 | { "text": "\\nleq", "snippet": "\\nleq" }, 404 | { "text": "\\nleqq", "snippet": "\\nleqq" }, 405 | { "text": "\\nleqslant", "snippet": "\\nleqslant" }, 406 | { "text": "\\nless", "snippet": "\\nless" }, 407 | { "text": "\\nmid", "snippet": "\\nmid" }, 408 | { "text": "\\nolimits_{#1}^{#2}", "snippet": "\\nolimits_{#1}^{#2}" }, 409 | { "text": "\\not", "snippet": "\\not" }, 410 | { "text": "\\notag", "snippet": "\\notag" }, 411 | { "text": "\\notin", "snippet": "\\notin" }, 412 | { "text": "\\nparallel", "snippet": "\\nparallel" }, 413 | { "text": "\\nprec", "snippet": "\\nprec" }, 414 | { "text": "\\npreceq", "snippet": "\\npreceq" }, 415 | { "text": "\\nrightarrow", "snippet": "\\nrightarrow" }, 416 | { "text": "\\nshortmid", "snippet": "\\nshortmid" }, 417 | { "text": "\\nshortparallel", "snippet": "\\nshortparallel" }, 418 | { "text": "\\nsim", "snippet": "\\nsim" }, 419 | { "text": "\\nsubseteq", "snippet": "\\nsubseteq" }, 420 | { "text": "\\nsubseteqq", "snippet": "\\nsubseteqq" }, 421 | { "text": "\\nsucc", "snippet": "\\nsucc" }, 422 | { "text": "\\nsucceq", "snippet": "\\nsucceq" }, 423 | { "text": "\\nsupseteq", "snippet": "\\nsupseteq" }, 424 | { "text": "\\nsupseteqq", "snippet": "\\nsupseteqq" }, 425 | { "text": "\\ntriangleleft", "snippet": "\\ntriangleleft" }, 426 | { "text": "\\ntrianglelefteq", "snippet": "\\ntrianglelefteq" }, 427 | { "text": "\\ntriangleright", "snippet": "\\ntriangleright" }, 428 | { "text": "\\ntrianglerighteq", "snippet": "\\ntrianglerighteq" }, 429 | { "text": "\\nu", "snippet": "\\nu" }, 430 | { "text": "\\nvDash", "snippet": "\\nvDash" }, 431 | { "text": "\\nvdash", "snippet": "\\nvdash" }, 432 | { "text": "\\nwarrow", "snippet": "\\nwarrow" }, 433 | { "text": "\\odot", "snippet": "\\odot" }, 434 | { "text": "\\oint", "snippet": "\\oint" }, 435 | { "text": "\\oldstyle", "snippet": "\\oldstyle" }, 436 | { "text": "\\omega", "snippet": "\\omega" }, 437 | { "text": "\\ominus", "snippet": "\\ominus" }, 438 | { "text": "\\operatorname{#1}", "snippet": "\\operatorname{#1}" }, 439 | { "text": "\\oplus", "snippet": "\\oplus" }, 440 | { "text": "\\oslash", "snippet": "\\oslash" }, 441 | { "text": "\\otimes", "snippet": "\\otimes" }, 442 | { "text": "\\over", "snippet": "\\over" }, 443 | { "text": "\\overbrace{#1}", "snippet": "\\overbrace{#1}" }, 444 | { "text": "\\overleftarrow{#1}", "snippet": "\\overleftarrow{#1}" }, 445 | { "text": "\\overleftrightarrow{#1}", "snippet": "\\overleftrightarrow{#1}" }, 446 | { "text": "\\overline{#1}", "snippet": "\\overline{#1}" }, 447 | { "text": "\\overrightarrow{#1}", "snippet": "\\overrightarrow{#1}" }, 448 | { "text": "\\overset{#1}{#2}", "snippet": "\\overset{#1}{#2}" }, 449 | { "text": "\\overwithdelims", "snippet": "\\overwithdelims" }, 450 | { "text": "\\owns", "snippet": "\\owns" }, 451 | { "text": "\\parallel", "snippet": "\\parallel" }, 452 | { "text": "\\partial", "snippet": "\\partial" }, 453 | { "text": "\\perp", "snippet": "\\perp" }, 454 | { "text": "\\phantom{#1}", "snippet": "\\phantom{#1}" }, 455 | { "text": "\\phi", "snippet": "\\phi" }, 456 | { "text": "\\pi", "snippet": "\\pi" }, 457 | { "text": "\\pitchfork", "snippet": "\\pitchfork" }, 458 | { "text": "\\pm", "snippet": "\\pm" }, 459 | { "text": "\\pmatrix{#1}", "snippet": "\\pmatrix{#1}" }, 460 | { "text": "\\pmb{#1}", "snippet": "\\pmb{#1}" }, 461 | { "text": "\\pmod", "snippet": "\\pmod" }, 462 | { "text": "\\pod", "snippet": "\\pod" }, 463 | { "text": "\\prec", "snippet": "\\prec" }, 464 | { "text": "\\precapprox", "snippet": "\\precapprox" }, 465 | { "text": "\\preccurlyeq", "snippet": "\\preccurlyeq" }, 466 | { "text": "\\preceq", "snippet": "\\preceq" }, 467 | { "text": "\\precnapprox", "snippet": "\\precnapprox" }, 468 | { "text": "\\precneqq", "snippet": "\\precneqq" }, 469 | { "text": "\\precnsim", "snippet": "\\precnsim" }, 470 | { "text": "\\precsim", "snippet": "\\precsim" }, 471 | { "text": "\\prime", "snippet": "\\prime" }, 472 | { "text": "\\prod\\limits_{#1}^{#2}", "snippet": "\\prod\\limits_{#1}^{#2}" }, 473 | { "text": "\\projlim", "snippet": "\\projlim" }, 474 | { "text": "\\propto", "snippet": "\\propto" }, 475 | { "text": "\\psi", "snippet": "\\psi" }, 476 | { "text": "\\qquad", "snippet": "\\qquad" }, 477 | { "text": "\\quad", "snippet": "\\quad" }, 478 | { "text": "\\rVert", "snippet": "\\rVert" }, 479 | { "text": "\\raise", "snippet": "\\raise" }, 480 | { "text": "\\rangle", "snippet": "\\rangle" }, 481 | { "text": "\\rbrace", "snippet": "\\rbrace" }, 482 | { "text": "\\rbrack", "snippet": "\\rbrack" }, 483 | { "text": "\\rceil", "snippet": "\\rceil" }, 484 | { "text": "\\rfloor", "snippet": "\\rfloor" }, 485 | { "text": "\\rgroup", "snippet": "\\rgroup" }, 486 | { "text": "\\rhd", "snippet": "\\rhd" }, 487 | { "text": "\\rho", "snippet": "\\rho" }, 488 | { "text": "\\right", "snippet": "\\right" }, 489 | { "text": "\\rightarrow", "snippet": "\\rightarrow" }, 490 | { "text": "\\rightarrowtail", "snippet": "\\rightarrowtail" }, 491 | { "text": "\\rightharpoondown", "snippet": "\\rightharpoondown" }, 492 | { "text": "\\rightharpoonup", "snippet": "\\rightharpoonup" }, 493 | { "text": "\\rightleftarrows", "snippet": "\\rightleftarrows" }, 494 | { "text": "\\rightleftharpoons", "snippet": "\\rightleftharpoons" }, 495 | { "text": "\\rightrightarrows", "snippet": "\\rightrightarrows" }, 496 | { "text": "\\rightsquigarrow", "snippet": "\\rightsquigarrow" }, 497 | { "text": "\\rightthreetimes", "snippet": "\\rightthreetimes" }, 498 | { "text": "\\risingdotseq", "snippet": "\\risingdotseq" }, 499 | { "text": "\\rlap{#1}", "snippet": "\\rlap{#1}" }, 500 | { "text": "\\rm", "snippet": "\\rm" }, 501 | { "text": "\\rmoustache", "snippet": "\\rmoustache" }, 502 | { "text": "\\root #1 \\of #2", "snippet": "\\root #1 \\of #2" }, 503 | { "text": "\\rtimes", "snippet": "\\rtimes" }, 504 | { "text": "\\rvert", "snippet": "\\rvert" }, 505 | { "text": "\\scriptscriptstyle", "snippet": "\\scriptscriptstyle" }, 506 | { "text": "\\scriptstyle", "snippet": "\\scriptstyle" }, 507 | { "text": "\\searrow", "snippet": "\\searrow" }, 508 | { "text": "\\sec", "snippet": "\\sec" }, 509 | { "text": "\\setminus", "snippet": "\\setminus" }, 510 | { "text": "\\sharp", "snippet": "\\sharp" }, 511 | { "text": "\\shortmid", "snippet": "\\shortmid" }, 512 | { "text": "\\shortparallel", "snippet": "\\shortparallel" }, 513 | { "text": "\\sideset{#1}{#2}{#3}", "snippet": "\\sideset{#1}{#2}{#3}" }, 514 | { "text": "\\sigma", "snippet": "\\sigma" }, 515 | { "text": "\\sim", "snippet": "\\sim" }, 516 | { "text": "\\simeq", "snippet": "\\simeq" }, 517 | { "text": "\\sin", "snippet": "\\sin" }, 518 | { "text": "\\sinh", "snippet": "\\sinh" }, 519 | { "text": "\\skew{#1}{#2}{#3}", "snippet": "\\skew{#1}{#2}{#3}" }, 520 | { "text": "\\smallfrown", "snippet": "\\smallfrown" }, 521 | { "text": "\\smallint", "snippet": "\\smallint" }, 522 | { "text": "\\smallsetminus", "snippet": "\\smallsetminus" }, 523 | { "text": "\\smallsmile", "snippet": "\\smallsmile" }, 524 | { "text": "\\smash{#1}", "snippet": "\\smash{#1}" }, 525 | { "text": "\\smile", "snippet": "\\smile" }, 526 | { "text": "\\space", "snippet": "\\space" }, 527 | { "text": "\\spadesuit", "snippet": "\\spadesuit" }, 528 | { "text": "\\sphericalangle", "snippet": "\\sphericalangle" }, 529 | { "text": "\\sqcap", "snippet": "\\sqcap" }, 530 | { "text": "\\sqcup", "snippet": "\\sqcup" }, 531 | { "text": "\\sqrt{#1}", "snippet": "\\sqrt{#1}" }, 532 | { "text": "\\sqsubset", "snippet": "\\sqsubset" }, 533 | { "text": "\\sqsubseteq", "snippet": "\\sqsubseteq" }, 534 | { "text": "\\sqsupset", "snippet": "\\sqsupset" }, 535 | { "text": "\\sqsupseteq", "snippet": "\\sqsupseteq" }, 536 | { "text": "\\square", "snippet": "\\square" }, 537 | { "text": "\\star", "snippet": "\\star" }, 538 | { "text": "\\strut", "snippet": "\\strut" }, 539 | { "text": "\\subset", "snippet": "\\subset" }, 540 | { "text": "\\subseteq", "snippet": "\\subseteq" }, 541 | { "text": "\\subseteqq", "snippet": "\\subseteqq" }, 542 | { "text": "\\subsetneq", "snippet": "\\subsetneq" }, 543 | { "text": "\\subsetneqq", "snippet": "\\subsetneqq" }, 544 | { "text": "\\substack{#1}", "snippet": "\\substack{#1}" }, 545 | { "text": "\\succ", "snippet": "\\succ" }, 546 | { "text": "\\succapprox", "snippet": "\\succapprox" }, 547 | { "text": "\\succcurlyeq", "snippet": "\\succcurlyeq" }, 548 | { "text": "\\succeq", "snippet": "\\succeq" }, 549 | { "text": "\\succnapprox", "snippet": "\\succnapprox" }, 550 | { "text": "\\succneqq", "snippet": "\\succneqq" }, 551 | { "text": "\\succnsim", "snippet": "\\succnsim" }, 552 | { "text": "\\succsim", "snippet": "\\succsim" }, 553 | { "text": "\\sum\\limits_{#1}^{#2}", "snippet": "\\sum\\limits_{#1}^{#2}" }, 554 | { "text": "\\sup", "snippet": "\\sup" }, 555 | { "text": "\\supset", "snippet": "\\supset" }, 556 | { "text": "\\supseteq", "snippet": "\\supseteq" }, 557 | { "text": "\\supseteqq", "snippet": "\\supseteqq" }, 558 | { "text": "\\supsetneq", "snippet": "\\supsetneq" }, 559 | { "text": "\\supsetneqq", "snippet": "\\supsetneqq" }, 560 | { "text": "\\surd", "snippet": "\\surd" }, 561 | { "text": "\\swarrow", "snippet": "\\swarrow" }, 562 | { "text": "\\tag{#1}", "snippet": "\\tag{#1}" }, 563 | { "text": "\\tan", "snippet": "\\tan" }, 564 | { "text": "\\tanh", "snippet": "\\tanh" }, 565 | { "text": "\\tau", "snippet": "\\tau" }, 566 | { "text": "\\tbinom{#1}{#2}", "snippet": "\\tbinom{#1}{#2}" }, 567 | { "text": "\\text{#1}", "snippet": "\\text{#1}" }, 568 | { "text": "\\textstyle", "snippet": "\\textstyle" }, 569 | { "text": "\\tfrac{#1}{#2}", "snippet": "\\tfrac{#1}{#2}" }, 570 | { "text": "\\therefore", "snippet": "\\therefore" }, 571 | { "text": "\\theta", "snippet": "\\theta" }, 572 | { "text": "\\thickapprox", "snippet": "\\thickapprox" }, 573 | { "text": "\\thicksim", "snippet": "\\thicksim" }, 574 | { "text": "\\thinspace", "snippet": "\\thinspace" }, 575 | { "text": "\\tilde{#1}", "snippet": "\\tilde{#1}" }, 576 | { "text": "\\times", "snippet": "\\times" }, 577 | { "text": "\\to", "snippet": "\\to" }, 578 | { "text": "\\top", "snippet": "\\top" }, 579 | { "text": "\\triangle", "snippet": "\\triangle" }, 580 | { "text": "\\triangledown", "snippet": "\\triangledown" }, 581 | { "text": "\\triangleleft", "snippet": "\\triangleleft" }, 582 | { "text": "\\trianglelefteq", "snippet": "\\trianglelefteq" }, 583 | { "text": "\\triangleq", "snippet": "\\triangleq" }, 584 | { "text": "\\triangleright", "snippet": "\\triangleright" }, 585 | { "text": "\\trianglerighteq", "snippet": "\\trianglerighteq" }, 586 | { "text": "\\tt", "snippet": "\\tt" }, 587 | { "text": "\\twoheadleftarrow", "snippet": "\\twoheadleftarrow" }, 588 | { "text": "\\twoheadrightarrow", "snippet": "\\twoheadrightarrow" }, 589 | { "text": "\\ulcorner", "snippet": "\\ulcorner" }, 590 | { "text": "\\underbrace{#1}", "snippet": "\\underbrace{#1}" }, 591 | { "text": "\\underleftarrow{#1}", "snippet": "\\underleftarrow{#1}" }, 592 | { "text": "\\underleftrightarrow{#1}", "snippet": "\\underleftrightarrow{#1}" }, 593 | { "text": "\\underline{#1}", "snippet": "\\underline{#1}" }, 594 | { "text": "\\underrightarrow{#1}", "snippet": "\\underrightarrow{#1}" }, 595 | { "text": "\\underset{#1}{#2}", "snippet": "\\underset{#1}{#2}" }, 596 | { "text": "\\unlhd", "snippet": "\\unlhd" }, 597 | { "text": "\\unrhd", "snippet": "\\unrhd" }, 598 | { "text": "\\uparrow", "snippet": "\\uparrow" }, 599 | { "text": "\\updownarrow", "snippet": "\\updownarrow" }, 600 | { "text": "\\upharpoonleft", "snippet": "\\upharpoonleft" }, 601 | { "text": "\\upharpoonright", "snippet": "\\upharpoonright" }, 602 | { "text": "\\uplus", "snippet": "\\uplus" }, 603 | { "text": "\\uproot{#1}", "snippet": "\\uproot{#1}" }, 604 | { "text": "\\upsilon", "snippet": "\\upsilon" }, 605 | { "text": "\\upuparrows", "snippet": "\\upuparrows" }, 606 | { "text": "\\urcorner", "snippet": "\\urcorner" }, 607 | { "text": "\\vDash", "snippet": "\\vDash" }, 608 | { "text": "\\varDelta", "snippet": "\\varDelta" }, 609 | { "text": "\\varGamma", "snippet": "\\varGamma" }, 610 | { "text": "\\varLambda", "snippet": "\\varLambda" }, 611 | { "text": "\\varOmega", "snippet": "\\varOmega" }, 612 | { "text": "\\varPhi", "snippet": "\\varPhi" }, 613 | { "text": "\\varPi", "snippet": "\\varPi" }, 614 | { "text": "\\varPsi", "snippet": "\\varPsi" }, 615 | { "text": "\\varSigma", "snippet": "\\varSigma" }, 616 | { "text": "\\varTheta", "snippet": "\\varTheta" }, 617 | { "text": "\\varUpsilon", "snippet": "\\varUpsilon" }, 618 | { "text": "\\varXi", "snippet": "\\varXi" }, 619 | { "text": "\\varepsilon", "snippet": "\\varepsilon" }, 620 | { "text": "\\varinjlim", "snippet": "\\varinjlim" }, 621 | { "text": "\\varkappa", "snippet": "\\varkappa" }, 622 | { "text": "\\varliminf", "snippet": "\\varliminf" }, 623 | { "text": "\\varlimsup", "snippet": "\\varlimsup" }, 624 | { "text": "\\varnothing", "snippet": "\\varnothing" }, 625 | { "text": "\\varphi", "snippet": "\\varphi" }, 626 | { "text": "\\varpi", "snippet": "\\varpi" }, 627 | { "text": "\\varprojlim", "snippet": "\\varprojlim" }, 628 | { "text": "\\varpropto", "snippet": "\\varpropto" }, 629 | { "text": "\\varrho", "snippet": "\\varrho" }, 630 | { "text": "\\varsigma", "snippet": "\\varsigma" }, 631 | { "text": "\\varsubsetneq", "snippet": "\\varsubsetneq" }, 632 | { "text": "\\varsubsetneqq", "snippet": "\\varsubsetneqq" }, 633 | { "text": "\\varsupsetneq", "snippet": "\\varsupsetneq" }, 634 | { "text": "\\varsupsetneqq", "snippet": "\\varsupsetneqq" }, 635 | { "text": "\\vartheta", "snippet": "\\vartheta" }, 636 | { "text": "\\vartriangle", "snippet": "\\vartriangle" }, 637 | { "text": "\\vartriangleleft", "snippet": "\\vartriangleleft" }, 638 | { "text": "\\vartriangleright", "snippet": "\\vartriangleright" }, 639 | { "text": "\\vcenter", "snippet": "\\vcenter" }, 640 | { "text": "\\vdash", "snippet": "\\vdash" }, 641 | { "text": "\\vec{#1}", "snippet": "\\vec{#1}" }, 642 | { "text": "\\vee", "snippet": "\\vee" }, 643 | { "text": "\\veebar", "snippet": "\\veebar" }, 644 | { "text": "\\vert", "snippet": "\\vert" }, 645 | { "text": "\\vphantom{#1}", "snippet": "\\vphantom{#1}" }, 646 | { "text": "\\wedge", "snippet": "\\wedge" }, 647 | { "text": "\\widehat{#1}", "snippet": "\\widehat{#1}" }, 648 | { "text": "\\widetilde{#1}", "snippet": "\\widetilde{#1}" }, 649 | { "text": "\\wp", "snippet": "\\wp" }, 650 | { "text": "\\wr", "snippet": "\\wr" }, 651 | { "text": "\\xi", "snippet": "\\xi" }, 652 | { "text": "\\xleftarrow{#1}", "snippet": "\\xleftarrow{#1}" }, 653 | { "text": "\\xrightarrow{#1}", "snippet": "\\xrightarrow{#1}" }, 654 | { "text": "\\zeta", "snippet": "\\zeta" }, 655 | { "text": "\\begin{definition}", "snippet": "\\begin{definition}\n#1\n\\end{definition}" }, 656 | { "text": "\\begin{tikzcd}", "snippet": "\\begin{tikzcd}[#1]\n#2\n\\end{tikzcd}" }, 657 | { "text": "\\begin{tikzpicture}", "snippet": "\\begin{tikzpicture}[#1]\n#2\n\\end{tikzpicture}" }, 658 | { "text": "\\begin{align}", "snippet": "\\begin{align}\n#1\n\\end{align}" }, 659 | { "text": "\\begin{align*}", "snippet": "\\begin{align*}\n#1\n\\end{align*}" }, 660 | { "text": "\\begin{alignat}", "snippet": "\\begin{alignat}\n#1\n\\end{alignat}" }, 661 | { "text": "\\begin{alignat*}", "snippet": "\\begin{alignat*}\n#1\n\\end{alignat*}" }, 662 | { "text": "\\begin{aligned}", "snippet": "\\begin{aligned}\n#1\n\\end{aligned}" }, 663 | { "text": "\\begin{alignedat}", "snippet": "\\begin{alignedat}\n#1\n\\end{alignedat}" }, 664 | { "text": "\\begin{array}", "snippet": "\\begin{array}\n#1\n\\end{array}" }, 665 | { "text": "\\begin{Bmatrix}", "snippet": "\\begin{Bmatrix}\n#1\n\\end{Bmatrix}" }, 666 | { "text": "\\begin{bmatrix}", "snippet": "\\begin{bmatrix}\n#1\n\\end{bmatrix}" }, 667 | { "text": "\\begin{cases}", "snippet": "\\begin{cases}\n#1\n\\end{cases}" }, 668 | { "text": "\\begin{CD}", "snippet": "\\begin{CD}\n#1\n\\end{CD}" }, 669 | { "text": "\\begin{eqnarray}", "snippet": "\\begin{eqnarray}\n#1\n\\end{eqnarray}" }, 670 | { "text": "\\begin{eqnarray*}", "snippet": "\\begin{eqnarray*}\n#1\n\\end{eqnarray*}" }, 671 | { "text": "\\begin{equation}", "snippet": "\\begin{equation}\n#1\n\\end{equation}" }, 672 | { "text": "\\begin{equation*}", "snippet": "\\begin{equation*}\n#1\n\\end{equation*}" }, 673 | { "text": "\\begin{gather}", "snippet": "\\begin{gather}\n#1\n\\end{gather}" }, 674 | { "text": "\\begin{gather*}", "snippet": "\\begin{gather*}\n#1\n\\end{gather*}" }, 675 | { "text": "\\begin{gathered}", "snippet": "\\begin{gathered}\n#1\n\\end{gathered}" }, 676 | { "text": "\\begin{matrix}", "snippet": "\\begin{matrix}\n#1\n\\end{matrix}" }, 677 | { "text": "\\begin{multline}", "snippet": "\\begin{multline}\n#1\n\\end{multline}" }, 678 | { "text": "\\begin{multline*}", "snippet": "\\begin{multline*}\n#1\n\\end{multline*}" }, 679 | { "text": "\\begin{pmatrix}", "snippet": "\\begin{pmatrix}\n#1\n\\end{pmatrix}" }, 680 | { "text": "\\begin{smallmatrix}", "snippet": "\\begin{smallmatrix}\n#1\n\\end{smallmatrix}" }, 681 | { "text": "\\begin{split}", "snippet": "\\begin{split}\n#1\n\\end{split}" }, 682 | { "text": "\\begin{subarray}", "snippet": "\\begin{subarray}\n#1\n\\end{subarray}" }, 683 | { "text": "\\begin{Vmatrix}", "snippet": "\\begin{Vmatrix}\n#1\n\\end{Vmatrix}" }, 684 | { "text": "\\begin{vmatrix}", "snippet": "\\begin{vmatrix}\n#1\n\\end{vmatrix}" } 685 | ] 686 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "codemirror-latex-hint", 3 | "version": "1.0.4", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@types/codemirror": { 8 | "version": "0.0.82", 9 | "resolved": "https://registry.npmjs.org/@types/codemirror/-/codemirror-0.0.82.tgz", 10 | "integrity": "sha512-EVlPrt1rB256CRTlhNCXXLYaN24n3qZNStM6dRWaV6sUYyJA1SC5hvDSCHEHDg1SB93X8TwAGWRjEVdmUWPHmQ==", 11 | "dev": true, 12 | "requires": { 13 | "@types/tern": "*" 14 | } 15 | }, 16 | "@types/estree": { 17 | "version": "0.0.42", 18 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.42.tgz", 19 | "integrity": "sha512-K1DPVvnBCPxzD+G51/cxVIoc2X8uUVl1zpJeE6iKcgHMj4+tbat5Xu4TjV7v2QSDbIeAfLi2hIk+u2+s0MlpUQ==", 20 | "dev": true 21 | }, 22 | "@types/tern": { 23 | "version": "0.23.3", 24 | "resolved": "https://registry.npmjs.org/@types/tern/-/tern-0.23.3.tgz", 25 | "integrity": "sha512-imDtS4TAoTcXk0g7u4kkWqedB3E4qpjXzCpD2LU5M5NAXHzCDsypyvXSaG7mM8DKYkCRa7tFp4tS/lp/Wo7Q3w==", 26 | "dev": true, 27 | "requires": { 28 | "@types/estree": "*" 29 | } 30 | }, 31 | "codemirror": { 32 | "version": "5.51.0", 33 | "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.51.0.tgz", 34 | "integrity": "sha512-vyuYYRv3eXL0SCuZA4spRFlKNzQAewHcipRQCOKgRy7VNAvZxTKzbItdbCl4S5AgPZ5g3WkHp+ibWQwv9TLG7Q==" 35 | }, 36 | "typescript": { 37 | "version": "3.7.5", 38 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.7.5.tgz", 39 | "integrity": "sha512-/P5lkRXkWHNAbcJIiHPfRoKqyd7bsyCma1hZNUGfn20qm64T6ZBlrzprymeu918H+mB/0rIg2gGK/BXkhhYgBw==", 40 | "dev": true 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "codemirror-latex-hint", 3 | "version": "1.0.4", 4 | "description": "An IntelliSense-like hinter for CodeMirror", 5 | "main": "lib/index.js", 6 | "peerDependencies": { 7 | "codemirror": ">5.0.0" 8 | }, 9 | "devDependencies": { 10 | "@types/codemirror": "0.0.82", 11 | "typescript": "^3.7.5" 12 | }, 13 | "scripts": { 14 | "build": "tsc", 15 | "test": "echo \"Error: no test specified\" && exit 1" 16 | }, 17 | "repository": { 18 | "type": "git", 19 | "url": "git+https://github.com/jun-sheaf/codemirror-latex-hint.git" 20 | }, 21 | "keywords": [ 22 | "codemirror", 23 | "autocomplete", 24 | "hint", 25 | "snippet", 26 | "intellisense" 27 | ], 28 | "author": "jun-sheaf", 29 | "license": "MIT", 30 | "bugs": { 31 | "url": "https://github.com/jun-sheaf/codemirror-latex-hint/issues" 32 | }, 33 | "homepage": "https://github.com/jun-sheaf/codemirror-latex-hint#readme", 34 | "dependencies": { 35 | "codemirror": "^5.51.0" 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/index.css: -------------------------------------------------------------------------------- 1 | .CodeMirror-hints { 2 | position: absolute; 3 | z-index: 10; 4 | overflow: hidden; 5 | list-style: none; 6 | 7 | margin: 0; 8 | padding: 0; 9 | 10 | border: 1px solid silver; 11 | 12 | background: white; 13 | font-size: 90%; 14 | 15 | max-height: 20em; 16 | overflow-y: auto; 17 | } 18 | 19 | .CodeMirror-hint { 20 | margin: 0; 21 | padding: 0 4px; 22 | border-radius: 2px; 23 | white-space: pre; 24 | color: black; 25 | cursor: pointer; 26 | } 27 | .CodeMirror-hint-entered { 28 | color: #170; 29 | } 30 | .CodeMirror-hint-arg { 31 | color: gray; 32 | } 33 | li.CodeMirror-hint-active { 34 | background: rgb(201, 233, 195); 35 | } 36 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import CodeMirror, { 2 | Hints, 3 | Hint, 4 | Editor, 5 | EditorChangeLinkedList, 6 | Position 7 | } from "codemirror"; 8 | import "codemirror/addon/hint/show-hint" 9 | import macros from "./macros.json"; 10 | 11 | interface LaTeXMacro { 12 | text: string, 13 | snippet: string 14 | } 15 | 16 | /** 17 | * Binary operation that compares Positions by library order 18 | * @param left Left Position 19 | * @param right Right Position 20 | */ 21 | const comparePos = (left: Position, right: Position) => { 22 | if (left.line < right.line) { 23 | return true; 24 | } else if (left.line > right.line) { 25 | return false; 26 | } else if (left.ch < right.ch) { 27 | return true; 28 | } else if (left.ch > right.ch) { 29 | return false; 30 | } else return false; 31 | }; 32 | 33 | /** 34 | * The rendering function for when the hint IS chosen. 35 | * @param cm CodeMirror instance 36 | * @param self The list of LaTeX macros closest to user input 37 | * @param data A LaTeX macro 38 | */ 39 | const intelliSense: Hint["hint"] = (cm, self, data) => { 40 | const { text } = data; 41 | const dissectedSnippet: string[] = []; 42 | let snipPart = ""; 43 | for (let i = 0; i < text.length; i++) { 44 | if (text[i] === "#") { 45 | dissectedSnippet.push(snipPart); 46 | snipPart = ""; 47 | i++; 48 | } else { 49 | snipPart += text[i]; 50 | } 51 | } 52 | dissectedSnippet.push(snipPart); 53 | const start = { 54 | line: self.from.line + (dissectedSnippet[0].match(/\n/g) || []).length, 55 | ch: self.from.ch + dissectedSnippet[0].length, 56 | }; 57 | let content = [start.ch]; 58 | const calculateEnd = () => { 59 | return { 60 | line: start.line + content.length - 1, 61 | ch: content[content.length - 1], 62 | }; 63 | }; 64 | const checkCursorPosition = (cm: Editor) => { 65 | const cursorPos = cm.getCursor(); 66 | if (comparePos(calculateEnd(), cursorPos) || comparePos(cursorPos, start)) { 67 | stopSnippet(); 68 | } 69 | }; 70 | const stopSnippet = () => { 71 | cm.removeKeyMap(moveToNextLocation); 72 | cm.off("change", setCurrentPosition); 73 | cm.off("cursorActivity", checkCursorPosition); 74 | }; 75 | const setCurrentPosition = (cm: Editor, { from, text, removed }: EditorChangeLinkedList) => { 76 | let origin = from.line - start.line; 77 | if (removed) { 78 | let len = removed.length - 1; 79 | if (len > 0) { 80 | content[origin + len] -= removed[len].length; 81 | content[origin] += content[origin + len] - removed[0].length; 82 | content.splice(origin + 1, len); 83 | } else { 84 | content[origin] -= removed[0].length; 85 | } 86 | } 87 | 88 | if (text) { 89 | let len = text.length - 1; 90 | if (len > 0) { 91 | const diff = content[origin] - from.ch; 92 | content[origin] = content[origin] + text[0].length - diff; 93 | for (let i = 1; i < len; i++) { 94 | content.splice(origin + i, 0, 0); 95 | content[origin + i] = content[origin + i] + text[i].length; 96 | } 97 | content.splice(origin + len, 0, 0); 98 | content[origin + len] = content[origin + len] + text[len].length + diff; 99 | } else { 100 | content[origin] += text[0].length; 101 | } 102 | } 103 | }; 104 | const moveToNextLocation = { 105 | Tab: (cm: Editor) => { 106 | if (dissectedSnippet.length > 0) { 107 | let end = calculateEnd(); 108 | start.line = end.line + (dissectedSnippet[0].match(/\n/g) || []).length; 109 | start.ch = end.ch + dissectedSnippet[0].length; 110 | content = [start.ch]; 111 | cm.setCursor(start); 112 | } 113 | dissectedSnippet.shift(); 114 | if (dissectedSnippet.length === 0) { 115 | return stopSnippet(); 116 | } 117 | }, 118 | }; 119 | cm.replaceRange(dissectedSnippet.join(""), data.from || self.from, data.to || self.to, "complete"); 120 | cm.setCursor(calculateEnd()); 121 | if (text.includes("#1")) { 122 | cm.addKeyMap(moveToNextLocation); 123 | cm.on("change", setCurrentPosition); 124 | cm.on("cursorActivity", checkCursorPosition); 125 | } 126 | dissectedSnippet.shift(); 127 | }; 128 | 129 | /** 130 | * The hinter function 131 | * @param cm CodeMirror instance 132 | * @param macros A list of LaTeX macros 133 | */ 134 | const LaTeXHint = (cm: Editor, macros: LaTeXMacro[]) => { 135 | let cur = cm.getCursor(); 136 | let token = cm.getTokenAt(cur); 137 | 138 | let start = token.start; 139 | let end = cur.ch; 140 | let word = token.string.slice(0, end - start); 141 | if (word === "\\\\") { 142 | cm.state.completionActive.close(); 143 | return { 144 | list: [], 145 | from: CodeMirror.Pos(cur.line, start), 146 | to: CodeMirror.Pos(cur.line, end), 147 | }; 148 | } 149 | if (/[^\w\\]/.test(word)) { 150 | word = ""; 151 | start = end = cur.ch; 152 | } 153 | 154 | const hints: Hints = { 155 | list: [], 156 | from: CodeMirror.Pos(cur.line, start), 157 | to: CodeMirror.Pos(cur.line, end), 158 | }; 159 | 160 | if (token.type == "tag") { 161 | for (const macro of macros) { 162 | if (!word || macro.text.lastIndexOf(word, 0) === 0) { 163 | hints.list.push({ 164 | displayText: macro.text, 165 | text: macro.snippet, 166 | render: (element, data, cur) => { 167 | let entered = element.appendChild(document.createElement("span")); 168 | entered.classList.add("CodeMirror-hint-entered"); 169 | entered.textContent = word; 170 | 171 | element.appendChild( 172 | document.createElement("span") 173 | ).innerHTML = (cur.displayText as string) 174 | .slice(word.length) 175 | .replace(/(\#[1-9])/g, (_, arg) => `${arg}`); 176 | }, 177 | hint: intelliSense, 178 | }); 179 | } 180 | } 181 | } 182 | return hints; 183 | }; 184 | 185 | export default LaTeXHint; -------------------------------------------------------------------------------- /src/macros.json: -------------------------------------------------------------------------------- 1 | [ 2 | { "text": "\\Arrowvert", "snippet": "\\Arrowvert" }, 3 | { "text": "\\Bbbk", "snippet": "\\Bbbk" }, 4 | { "text": "\\Big", "snippet": "\\Big" }, 5 | { "text": "\\Bigg", "snippet": "\\Bigg" }, 6 | { "text": "\\Biggl", "snippet": "\\Biggl" }, 7 | { "text": "\\Biggr", "snippet": "\\Biggr" }, 8 | { "text": "\\Bigl", "snippet": "\\Bigl" }, 9 | { "text": "\\Bigm", "snippet": "\\Bigm" }, 10 | { "text": "\\Bigr", "snippet": "\\Bigr" }, 11 | { "text": "\\Box", "snippet": "\\Box" }, 12 | { "text": "\\Bumpeq", "snippet": "\\Bumpeq" }, 13 | { "text": "\\Cap", "snippet": "\\Cap" }, 14 | { "text": "\\cite[#1]{#2}", "snippet": "\\cite[#1]{#2}" }, 15 | { "text": "\\cite{#1}", "snippet": "\\cite{#1}" }, 16 | { "text": "\\Cup", "snippet": "\\Cup" }, 17 | { "text": "\\DeclareMathOperator{#1}{#2}", "snippet": "\\DeclareMathOperator{#1}{#2}" }, 18 | { "text": "\\Delta", "snippet": "\\Delta" }, 19 | { "text": "\\Downarrow", "snippet": "\\Downarrow" }, 20 | { "text": "\\Finv", "snippet": "\\Finv" }, 21 | { "text": "\\Game", "snippet": "\\Game" }, 22 | { "text": "\\Gamma", "snippet": "\\Gamma" }, 23 | { "text": "\\Im", "snippet": "\\Im" }, 24 | { "text": "\\Lambda", "snippet": "\\Lambda" }, 25 | { "text": "\\Leftarrow", "snippet": "\\Leftarrow" }, 26 | { "text": "\\Leftrightarrow", "snippet": "\\Leftrightarrow" }, 27 | { "text": "\\Lleftarrow", "snippet": "\\Lleftarrow" }, 28 | { "text": "\\Longleftarrow", "snippet": "\\Longleftarrow" }, 29 | { "text": "\\Longleftrightarrow", "snippet": "\\Longleftrightarrow" }, 30 | { "text": "\\Longrightarrow", "snippet": "\\Longrightarrow" }, 31 | { "text": "\\Lsh", "snippet": "\\Lsh" }, 32 | { "text": "\\Omega", "snippet": "\\Omega" }, 33 | { "text": "\\Phi", "snippet": "\\Phi" }, 34 | { "text": "\\Pi", "snippet": "\\Pi" }, 35 | { "text": "\\Pr", "snippet": "\\Pr" }, 36 | { "text": "\\Psi", "snippet": "\\Psi" }, 37 | { "text": "\\Re", "snippet": "\\Re" }, 38 | { "text": "\\Rightarrow", "snippet": "\\Rightarrow" }, 39 | { "text": "\\Rrightarrow", "snippet": "\\Rrightarrow" }, 40 | { "text": "\\Rsh", "snippet": "\\Rsh" }, 41 | { "text": "\\S", "snippet": "\\S" }, 42 | { "text": "\\Sigma", "snippet": "\\Sigma" }, 43 | { "text": "\\Subset", "snippet": "\\Subset" }, 44 | { "text": "\\Supset", "snippet": "\\Supset" }, 45 | { "text": "\\TeX", "snippet": "\\TeX" }, 46 | { "text": "\\Theta", "snippet": "\\Theta" }, 47 | { "text": "\\Uparrow", "snippet": "\\Uparrow" }, 48 | { "text": "\\Updownarrow", "snippet": "\\Updownarrow" }, 49 | { "text": "\\Upsilon", "snippet": "\\Upsilon" }, 50 | { "text": "\\Vdash", "snippet": "\\Vdash" }, 51 | { "text": "\\Vert", "snippet": "\\Vert" }, 52 | { "text": "\\Vvdash", "snippet": "\\Vvdash" }, 53 | { "text": "\\Xi", "snippet": "\\Xi" }, 54 | { "text": "\\above", "snippet": "\\above" }, 55 | { "text": "\\abovewithdelims", "snippet": "\\abovewithdelims" }, 56 | { "text": "\\acute{#1}", "snippet": "\\acute{#1}" }, 57 | { "text": "\\aleph", "snippet": "\\aleph" }, 58 | { "text": "\\alpha", "snippet": "\\alpha" }, 59 | { "text": "\\amalg", "snippet": "\\amalg" }, 60 | { "text": "\\angle", "snippet": "\\angle" }, 61 | { "text": "\\approx", "snippet": "\\approx" }, 62 | { "text": "\\approxeq", "snippet": "\\approxeq" }, 63 | { "text": "\\arccos", "snippet": "\\arccos" }, 64 | { "text": "\\arcsin", "snippet": "\\arcsin" }, 65 | { "text": "\\arctan", "snippet": "\\arctan" }, 66 | { "text": "\\arg", "snippet": "\\arg" }, 67 | { "text": "\\arrowvert", "snippet": "\\arrowvert" }, 68 | { "text": "\\ast", "snippet": "\\ast" }, 69 | { "text": "\\asymp", "snippet": "\\asymp" }, 70 | { "text": "\\atop", "snippet": "\\atop" }, 71 | { "text": "\\atopwithdelims", "snippet": "\\atopwithdelims" }, 72 | { "text": "\\backepsilon", "snippet": "\\backepsilon" }, 73 | { "text": "\\backprime", "snippet": "\\backprime" }, 74 | { "text": "\\backsim", "snippet": "\\backsim" }, 75 | { "text": "\\backsimeq", "snippet": "\\backsimeq" }, 76 | { "text": "\\backslash", "snippet": "\\backslash" }, 77 | { "text": "\\bar{#1}", "snippet": "\\bar{#1}" }, 78 | { "text": "\\barwedge", "snippet": "\\barwedge" }, 79 | { "text": "\\because", "snippet": "\\because" }, 80 | { "text": "\\beta", "snippet": "\\beta" }, 81 | { "text": "\\beth", "snippet": "\\beth" }, 82 | { "text": "\\between", "snippet": "\\between" }, 83 | { "text": "\\bf", "snippet": "\\bf" }, 84 | { "text": "\\big", "snippet": "\\big" }, 85 | { "text": "\\bigcap", "snippet": "\\bigcap" }, 86 | { "text": "\\bigcirc", "snippet": "\\bigcirc" }, 87 | { "text": "\\bigcup", "snippet": "\\bigcup" }, 88 | { "text": "\\bigg", "snippet": "\\bigg" }, 89 | { "text": "\\biggl", "snippet": "\\biggl" }, 90 | { "text": "\\biggm", "snippet": "\\biggm" }, 91 | { "text": "\\biggr", "snippet": "\\biggr" }, 92 | { "text": "\\bigl", "snippet": "\\bigl" }, 93 | { "text": "\\bigm", "snippet": "\\bigm" }, 94 | { "text": "\\bigodot", "snippet": "\\bigodot" }, 95 | { "text": "\\bigoplus", "snippet": "\\bigoplus" }, 96 | { "text": "\\bigotimes", "snippet": "\\bigotimes" }, 97 | { "text": "\\bigr\\}", "snippet": "\\bigr\\}" }, 98 | { "text": "\\bigsqcup", "snippet": "\\bigsqcup" }, 99 | { "text": "\\bigstar", "snippet": "\\bigstar" }, 100 | { "text": "\\bigtriangledown", "snippet": "\\bigtriangledown" }, 101 | { "text": "\\bigtriangleup", "snippet": "\\bigtriangleup" }, 102 | { "text": "\\biguplus", "snippet": "\\biguplus" }, 103 | { "text": "\\bigvee", "snippet": "\\bigvee" }, 104 | { "text": "\\bigwedge", "snippet": "\\bigwedge" }, 105 | { "text": "\\binom{#1}{#2}", "snippet": "\\binom{#1}{#2}" }, 106 | { "text": "\\blacklozenge", "snippet": "\\blacklozenge" }, 107 | { "text": "\\blacksquare", "snippet": "\\blacksquare" }, 108 | { "text": "\\blacktriangle", "snippet": "\\blacktriangle" }, 109 | { "text": "\\blacktriangledown", "snippet": "\\blacktriangledown" }, 110 | { "text": "\\blacktriangleleft", "snippet": "\\blacktriangleleft" }, 111 | { "text": "\\blacktriangleright", "snippet": "\\blacktriangleright" }, 112 | { "text": "\\bmod", "snippet": "\\bmod" }, 113 | { "text": "\\boldsymbol{#1}", "snippet": "\\boldsymbol{#1}" }, 114 | { "text": "\\bot", "snippet": "\\bot" }, 115 | { "text": "\\bowtie", "snippet": "\\bowtie" }, 116 | { "text": "\\boxdot", "snippet": "\\boxdot" }, 117 | { "text": "\\boxed{#1}", "snippet": "\\boxed{#1}" }, 118 | { "text": "\\boxminus", "snippet": "\\boxminus" }, 119 | { "text": "\\boxplus", "snippet": "\\boxplus" }, 120 | { "text": "\\boxtimes", "snippet": "\\boxtimes" }, 121 | { "text": "\\brace", "snippet": "\\brace" }, 122 | { "text": "\\bracevert", "snippet": "\\bracevert" }, 123 | { "text": "\\brack", "snippet": "\\brack" }, 124 | { "text": "\\breve{#1}", "snippet": "\\breve{#1}" }, 125 | { "text": "\\buildrel", "snippet": "\\buildrel" }, 126 | { "text": "\\bullet", "snippet": "\\bullet" }, 127 | { "text": "\\bumpeq", "snippet": "\\bumpeq" }, 128 | { "text": "\\cal", "snippet": "\\cal" }, 129 | { "text": "\\cap", "snippet": "\\cap" }, 130 | { "text": "\\cases{#1}", "snippet": "\\cases{#1}" }, 131 | { "text": "\\cdot", "snippet": "\\cdot" }, 132 | { "text": "\\cdotp", "snippet": "\\cdotp" }, 133 | { "text": "\\cdots", "snippet": "\\cdots" }, 134 | { "text": "\\centerdot", "snippet": "\\centerdot" }, 135 | { "text": "\\cfrac{#1}{#2}", "snippet": "\\cfrac{#1}{#2}" }, 136 | { "text": "\\check{#1}", "snippet": "\\check{#1}" }, 137 | { "text": "\\checkmark", "snippet": "\\checkmark" }, 138 | { "text": "\\chi", "snippet": "\\chi" }, 139 | { "text": "\\choose", "snippet": "\\choose" }, 140 | { "text": "\\circ", "snippet": "\\circ" }, 141 | { "text": "\\circeq", "snippet": "\\circeq" }, 142 | { "text": "\\circlearrowleft", "snippet": "\\circlearrowleft" }, 143 | { "text": "\\circlearrowright", "snippet": "\\circlearrowright" }, 144 | { "text": "\\circledS", "snippet": "\\circledS" }, 145 | { "text": "\\circledast", "snippet": "\\circledast" }, 146 | { "text": "\\circledcirc", "snippet": "\\circledcirc" }, 147 | { "text": "\\circleddash", "snippet": "\\circleddash" }, 148 | { "text": "\\clubsuit", "snippet": "\\clubsuit" }, 149 | { "text": "\\colon", "snippet": "\\colon" }, 150 | { "text": "\\complement", "snippet": "\\complement" }, 151 | { "text": "\\cong", "snippet": "\\cong" }, 152 | { "text": "\\coprod", "snippet": "\\coprod" }, 153 | { "text": "\\cos", "snippet": "\\cos" }, 154 | { "text": "\\cosh", "snippet": "\\cosh" }, 155 | { "text": "\\cot", "snippet": "\\cot" }, 156 | { "text": "\\coth", "snippet": "\\coth" }, 157 | { "text": "\\cr", "snippet": "\\cr" }, 158 | { "text": "\\csc", "snippet": "\\csc" }, 159 | { "text": "\\cup", "snippet": "\\cup" }, 160 | { "text": "\\curlyeqprec", "snippet": "\\curlyeqprec" }, 161 | { "text": "\\curlyeqsucc", "snippet": "\\curlyeqsucc" }, 162 | { "text": "\\curlyvee", "snippet": "\\curlyvee" }, 163 | { "text": "\\curlywedge", "snippet": "\\curlywedge" }, 164 | { "text": "\\curvearrowleft", "snippet": "\\curvearrowleft" }, 165 | { "text": "\\curvearrowright", "snippet": "\\curvearrowright" }, 166 | { "text": "\\dagger", "snippet": "\\dagger" }, 167 | { "text": "\\daleth", "snippet": "\\daleth" }, 168 | { "text": "\\dashleftarrow", "snippet": "\\dashleftarrow" }, 169 | { "text": "\\dashrightarrow", "snippet": "\\dashrightarrow" }, 170 | { "text": "\\dashv", "snippet": "\\dashv" }, 171 | { "text": "\\dbinom{#1}{#2}", "snippet": "\\dbinom{#1}{#2}" }, 172 | { "text": "\\ddagger", "snippet": "\\ddagger" }, 173 | { "text": "\\ddddot{#1}", "snippet": "\\ddddot{#1}" }, 174 | { "text": "\\dddot{#1}", "snippet": "\\dddot{#1}" }, 175 | { "text": "\\ddot{#1}", "snippet": "\\ddot{#1}" }, 176 | { "text": "\\ddots", "snippet": "\\ddots" }, 177 | { "text": "\\def", "snippet": "\\def" }, 178 | { "text": "\\deg", "snippet": "\\deg" }, 179 | { "text": "\\delta", "snippet": "\\delta" }, 180 | { "text": "\\det", "snippet": "\\det" }, 181 | { "text": "\\dfrac{#1}{#2}", "snippet": "\\dfrac{#1}{#2}" }, 182 | { "text": "\\diagdown", "snippet": "\\diagdown" }, 183 | { "text": "\\diagup", "snippet": "\\diagup" }, 184 | { "text": "\\diamond", "snippet": "\\diamond" }, 185 | { "text": "\\diamondsuit", "snippet": "\\diamondsuit" }, 186 | { "text": "\\digamma", "snippet": "\\digamma" }, 187 | { "text": "\\dim", "snippet": "\\dim" }, 188 | { "text": "\\displaylines", "snippet": "\\displaylines" }, 189 | { "text": "\\displaystyle", "snippet": "\\displaystyle" }, 190 | { "text": "\\div", "snippet": "\\div" }, 191 | { "text": "\\divideontimes", "snippet": "\\divideontimes" }, 192 | { "text": "\\dot{#1}", "snippet": "\\dot{#1}" }, 193 | { "text": "\\doteq", "snippet": "\\doteq" }, 194 | { "text": "\\doteqdot", "snippet": "\\doteqdot" }, 195 | { "text": "\\dotplus", "snippet": "\\dotplus" }, 196 | { "text": "\\dots", "snippet": "\\dots" }, 197 | { "text": "\\dotsb", "snippet": "\\dotsb" }, 198 | { "text": "\\dotsc", "snippet": "\\dotsc" }, 199 | { "text": "\\dotsi", "snippet": "\\dotsi" }, 200 | { "text": "\\dotsm", "snippet": "\\dotsm" }, 201 | { "text": "\\dotso", "snippet": "\\dotso" }, 202 | { "text": "\\doublebarwedge", "snippet": "\\doublebarwedge" }, 203 | { "text": "\\downarrow", "snippet": "\\downarrow" }, 204 | { "text": "\\downdownarrows", "snippet": "\\downdownarrows" }, 205 | { "text": "\\downharpoonleft", "snippet": "\\downharpoonleft" }, 206 | { "text": "\\downharpoonright", "snippet": "\\downharpoonright" }, 207 | { "text": "\\ell", "snippet": "\\ell" }, 208 | { "text": "\\emptyset", "snippet": "\\emptyset" }, 209 | { "text": "\\enspace", "snippet": "\\enspace" }, 210 | { "text": "\\epsilon", "snippet": "\\epsilon" }, 211 | { "text": "\\eqalign{#1}", "snippet": "\\eqalign{#1}" }, 212 | { "text": "\\eqalignno{#1}", "snippet": "\\eqalignno{#1}" }, 213 | { "text": "\\eqcirc", "snippet": "\\eqcirc" }, 214 | { "text": "\\eqref{#1}", "snippet": "\\eqref{#1}" }, 215 | { "text": "\\eqsim", "snippet": "\\eqsim" }, 216 | { "text": "\\eqslantgtr", "snippet": "\\eqslantgtr" }, 217 | { "text": "\\eqslantless", "snippet": "\\eqslantless" }, 218 | { "text": "\\equiv", "snippet": "\\equiv" }, 219 | { "text": "\\eta", "snippet": "\\eta" }, 220 | { "text": "\\eth", "snippet": "\\eth" }, 221 | { "text": "\\exists", "snippet": "\\exists" }, 222 | { "text": "\\exp", "snippet": "\\exp" }, 223 | { "text": "\\fallingdotseq", "snippet": "\\fallingdotseq" }, 224 | { "text": "\\flat", "snippet": "\\flat" }, 225 | { "text": "\\forall", "snippet": "\\forall" }, 226 | { "text": "\\frown", "snippet": "\\frown" }, 227 | { "text": "\\gamma", "snippet": "\\gamma" }, 228 | { "text": "\\gcd", "snippet": "\\gcd" }, 229 | { "text": "\\ge", "snippet": "\\ge" }, 230 | { "text": "\\geq", "snippet": "\\geq" }, 231 | { "text": "\\geqq", "snippet": "\\geqq" }, 232 | { "text": "\\geqslant", "snippet": "\\geqslant" }, 233 | { "text": "\\gets", "snippet": "\\gets" }, 234 | { "text": "\\gg", "snippet": "\\gg" }, 235 | { "text": "\\ggg", "snippet": "\\ggg" }, 236 | { "text": "\\gimel", "snippet": "\\gimel" }, 237 | { "text": "\\gnapprox", "snippet": "\\gnapprox" }, 238 | { "text": "\\gneq", "snippet": "\\gneq" }, 239 | { "text": "\\gneqq", "snippet": "\\gneqq" }, 240 | { "text": "\\gnsim", "snippet": "\\gnsim" }, 241 | { "text": "\\grave{#1}", "snippet": "\\grave{#1}" }, 242 | { "text": "\\gtrapprox", "snippet": "\\gtrapprox" }, 243 | { "text": "\\gtrdot", "snippet": "\\gtrdot" }, 244 | { "text": "\\gtreqless", "snippet": "\\gtreqless" }, 245 | { "text": "\\gtreqqless", "snippet": "\\gtreqqless" }, 246 | { "text": "\\gtrless", "snippet": "\\gtrless" }, 247 | { "text": "\\gtrsim", "snippet": "\\gtrsim" }, 248 | { "text": "\\gvertneqq", "snippet": "\\gvertneqq" }, 249 | { "text": "\\hat{#1}", "snippet": "\\hat{#1}" }, 250 | { "text": "\\hbar", "snippet": "\\hbar" }, 251 | { "text": "\\hbox", "snippet": "\\hbox" }, 252 | { "text": "\\heartsuit", "snippet": "\\heartsuit" }, 253 | { "text": "\\hfil", "snippet": "\\hfil" }, 254 | { "text": "\\hfill", "snippet": "\\hfill" }, 255 | { "text": "\\hom", "snippet": "\\hom" }, 256 | { "text": "\\hookleftarrow", "snippet": "\\hookleftarrow" }, 257 | { "text": "\\hookrightarrow", "snippet": "\\hookrightarrow" }, 258 | { "text": "\\hphantom{#1}", "snippet": "\\hphantom{#1}" }, 259 | { "text": "\\hskip", "snippet": "\\hskip" }, 260 | { "text": "\\hslash", "snippet": "\\hslash" }, 261 | { "text": "\\idotsint", "snippet": "\\idotsint" }, 262 | { "text": "\\iff", "snippet": "\\iff" }, 263 | { "text": "\\iiiint", "snippet": "\\iiiint" }, 264 | { "text": "\\iiint", "snippet": "\\iiint" }, 265 | { "text": "\\iint", "snippet": "\\iint" }, 266 | { "text": "\\imath", "snippet": "\\imath" }, 267 | { "text": "\\impliedby", "snippet": "\\impliedby" }, 268 | { "text": "\\implies", "snippet": "\\implies" }, 269 | { "text": "\\in", "snippet": "\\in" }, 270 | { "text": "\\inf", "snippet": "\\inf" }, 271 | { "text": "\\infty", "snippet": "\\infty" }, 272 | { "text": "\\injlim", "snippet": "\\injlim" }, 273 | { "text": "\\int\\limits_{#1}^{#2}", "snippet": "\\int\\limits_{#1}^{#2}" }, 274 | { "text": "\\intercal", "snippet": "\\intercal" }, 275 | { "text": "\\iota", "snippet": "\\iota" }, 276 | { "text": "\\it", "snippet": "\\it" }, 277 | { "text": "\\jmath", "snippet": "\\jmath" }, 278 | { "text": "\\kappa", "snippet": "\\kappa" }, 279 | { "text": "\\ker", "snippet": "\\ker" }, 280 | { "text": "\\kern", "snippet": "\\kern" }, 281 | { "text": "\\lVert", "snippet": "\\lVert" }, 282 | { "text": "\\lambda", "snippet": "\\lambda" }, 283 | { "text": "\\land", "snippet": "\\land" }, 284 | { "text": "\\langle", "snippet": "\\langle" }, 285 | { "text": "\\lbrace", "snippet": "\\lbrace" }, 286 | { "text": "\\lbrack", "snippet": "\\lbrack" }, 287 | { "text": "\\lceil", "snippet": "\\lceil" }, 288 | { "text": "\\ldotp", "snippet": "\\ldotp" }, 289 | { "text": "\\ldots", "snippet": "\\ldots" }, 290 | { "text": "\\le", "snippet": "\\le" }, 291 | { "text": "\\left", "snippet": "\\left" }, 292 | { "text": "\\leftarrow", "snippet": "\\leftarrow" }, 293 | { "text": "\\leftarrowtail", "snippet": "\\leftarrowtail" }, 294 | { "text": "\\leftharpoondown", "snippet": "\\leftharpoondown" }, 295 | { "text": "\\leftharpoonup", "snippet": "\\leftharpoonup" }, 296 | { "text": "\\leftleftarrows", "snippet": "\\leftleftarrows" }, 297 | { "text": "\\leftrightarrow", "snippet": "\\leftrightarrow" }, 298 | { "text": "\\leftrightarrows", "snippet": "\\leftrightarrows" }, 299 | { "text": "\\leftrightharpoons", "snippet": "\\leftrightharpoons" }, 300 | { "text": "\\leftrightsquigarrow", "snippet": "\\leftrightsquigarrow" }, 301 | { "text": "\\leftroot{#1}", "snippet": "\\leftroot{#1}" }, 302 | { "text": "\\leftthreetimes", "snippet": "\\leftthreetimes" }, 303 | { "text": "\\leq", "snippet": "\\leq" }, 304 | { "text": "\\leqalignno{#1}", "snippet": "\\leqalignno{#1}" }, 305 | { "text": "\\leqq", "snippet": "\\leqq" }, 306 | { "text": "\\leqslant", "snippet": "\\leqslant" }, 307 | { "text": "\\lessapprox", "snippet": "\\lessapprox" }, 308 | { "text": "\\lessdot", "snippet": "\\lessdot" }, 309 | { "text": "\\lesseqgtr", "snippet": "\\lesseqgtr" }, 310 | { "text": "\\lesseqqgtr", "snippet": "\\lesseqqgtr" }, 311 | { "text": "\\lessgtr", "snippet": "\\lessgtr" }, 312 | { "text": "\\lesssim", "snippet": "\\lesssim" }, 313 | { "text": "\\let{#1}{#2}", "snippet": "\\let{#1}{#2}" }, 314 | { "text": "\\lfloor", "snippet": "\\lfloor" }, 315 | { "text": "\\lg", "snippet": "\\lg" }, 316 | { "text": "\\lgroup", "snippet": "\\lgroup" }, 317 | { "text": "\\lhd", "snippet": "\\lhd" }, 318 | { "text": "\\lim", "snippet": "\\lim" }, 319 | { "text": "\\liminf", "snippet": "\\liminf" }, 320 | { "text": "\\limits_{#1}^{#b}", "snippet": "\\limits_{#1}^{#b}" }, 321 | { "text": "\\limsup", "snippet": "\\limsup" }, 322 | { "text": "\\ll", "snippet": "\\ll" }, 323 | { "text": "\\llap{#1}", "snippet": "\\llap{#1}" }, 324 | { "text": "\\llcorner", "snippet": "\\llcorner" }, 325 | { "text": "\\lll", "snippet": "\\lll" }, 326 | { "text": "\\lmoustache", "snippet": "\\lmoustache" }, 327 | { "text": "\\ln", "snippet": "\\ln" }, 328 | { "text": "\\lnapprox", "snippet": "\\lnapprox" }, 329 | { "text": "\\lneq", "snippet": "\\lneq" }, 330 | { "text": "\\lneqq", "snippet": "\\lneqq" }, 331 | { "text": "\\lnot", "snippet": "\\lnot" }, 332 | { "text": "\\lnsim", "snippet": "\\lnsim" }, 333 | { "text": "\\log", "snippet": "\\log" }, 334 | { "text": "\\longleftarrow", "snippet": "\\longleftarrow" }, 335 | { "text": "\\longleftrightarrow", "snippet": "\\longleftrightarrow" }, 336 | { "text": "\\longmapsto", "snippet": "\\longmapsto" }, 337 | { "text": "\\longrightarrow", "snippet": "\\longrightarrow" }, 338 | { "text": "\\looparrowleft", "snippet": "\\looparrowleft" }, 339 | { "text": "\\looparrowright", "snippet": "\\looparrowright" }, 340 | { "text": "\\lor", "snippet": "\\lor" }, 341 | { "text": "\\lower", "snippet": "\\lower" }, 342 | { "text": "\\lozenge", "snippet": "\\lozenge" }, 343 | { "text": "\\lrcorner", "snippet": "\\lrcorner" }, 344 | { "text": "\\ltimes", "snippet": "\\ltimes" }, 345 | { "text": "\\lvert", "snippet": "\\lvert" }, 346 | { "text": "\\lvertneqq", "snippet": "\\lvertneqq" }, 347 | { "text": "\\maltese", "snippet": "\\maltese" }, 348 | { "text": "\\mapsto", "snippet": "\\mapsto" }, 349 | { "text": "\\mathbb{#1}", "snippet": "\\mathbb{#1}" }, 350 | { "text": "\\mathbf{#1}", "snippet": "\\mathbf{#1}" }, 351 | { "text": "\\mathbin", "snippet": "\\mathbin" }, 352 | { "text": "\\mathchoice", "snippet": "\\mathchoice" }, 353 | { "text": "\\mathclose", "snippet": "\\mathclose" }, 354 | { "text": "\\mathfrak{#1}", "snippet": "\\mathfrak{#1}" }, 355 | { "text": "\\mathinner", "snippet": "\\mathinner" }, 356 | { "text": "\\mathop", "snippet": "\\mathop" }, 357 | { "text": "\\mathopen", "snippet": "\\mathopen" }, 358 | { "text": "\\mathord", "snippet": "\\mathord" }, 359 | { "text": "\\mathpunct", "snippet": "\\mathpunct" }, 360 | { "text": "\\mathrel", "snippet": "\\mathrel" }, 361 | { "text": "\\mathstrut", "snippet": "\\mathstrut" }, 362 | { "text": "\\matrix{#1}", "snippet": "\\matrix{#1}" }, 363 | { "text": "\\max", "snippet": "\\max" }, 364 | { "text": "\\measuredangle", "snippet": "\\measuredangle" }, 365 | { "text": "\\mho", "snippet": "\\mho" }, 366 | { "text": "\\mid", "snippet": "\\mid" }, 367 | { "text": "\\middle", "snippet": "\\middle" }, 368 | { "text": "\\min", "snippet": "\\min" }, 369 | { "text": "\\mit", "snippet": "\\mit" }, 370 | { "text": "\\mkern", "snippet": "\\mkern" }, 371 | { "text": "\\mod", "snippet": "\\mod" }, 372 | { "text": "\\models", "snippet": "\\models" }, 373 | { "text": "\\moveleft", "snippet": "\\moveleft" }, 374 | { "text": "\\moveright", "snippet": "\\moveright" }, 375 | { "text": "\\mp", "snippet": "\\mp" }, 376 | { "text": "\\mskip", "snippet": "\\mskip" }, 377 | { "text": "\\mspace{#1}", "snippet": "\\mspace{#1}" }, 378 | { "text": "\\mu", "snippet": "\\mu" }, 379 | { "text": "\\multimap", "snippet": "\\multimap" }, 380 | { "text": "\\nLeftarrow", "snippet": "\\nLeftarrow" }, 381 | { "text": "\\nLeftrightarrow", "snippet": "\\nLeftrightarrow" }, 382 | { "text": "\\nRightarrow", "snippet": "\\nRightarrow" }, 383 | { "text": "\\nVDash", "snippet": "\\nVDash" }, 384 | { "text": "\\nVdash", "snippet": "\\nVdash" }, 385 | { "text": "\\nabla", "snippet": "\\nabla" }, 386 | { "text": "\\natural", "snippet": "\\natural" }, 387 | { "text": "\\ncong", "snippet": "\\ncong" }, 388 | { "text": "\\ne", "snippet": "\\ne" }, 389 | { "text": "\\nearrow", "snippet": "\\nearrow" }, 390 | { "text": "\\neg", "snippet": "\\neg" }, 391 | { "text": "\\negmedspace", "snippet": "\\negmedspace" }, 392 | { "text": "\\negthickspace", "snippet": "\\negthickspace" }, 393 | { "text": "\\negthinspace", "snippet": "\\negthinspace" }, 394 | { "text": "\\neq", "snippet": "\\neq" }, 395 | { "text": "\\nexists", "snippet": "\\nexists" }, 396 | { "text": "\\ngeq", "snippet": "\\ngeq" }, 397 | { "text": "\\ngeqq", "snippet": "\\ngeqq" }, 398 | { "text": "\\ngeqslant", "snippet": "\\ngeqslant" }, 399 | { "text": "\\ngtr", "snippet": "\\ngtr" }, 400 | { "text": "\\ni", "snippet": "\\ni" }, 401 | { "text": "\\nleftarrow", "snippet": "\\nleftarrow" }, 402 | { "text": "\\nleftrightarrow", "snippet": "\\nleftrightarrow" }, 403 | { "text": "\\nleq", "snippet": "\\nleq" }, 404 | { "text": "\\nleqq", "snippet": "\\nleqq" }, 405 | { "text": "\\nleqslant", "snippet": "\\nleqslant" }, 406 | { "text": "\\nless", "snippet": "\\nless" }, 407 | { "text": "\\nmid", "snippet": "\\nmid" }, 408 | { "text": "\\nolimits_{#1}^{#2}", "snippet": "\\nolimits_{#1}^{#2}" }, 409 | { "text": "\\not", "snippet": "\\not" }, 410 | { "text": "\\notag", "snippet": "\\notag" }, 411 | { "text": "\\notin", "snippet": "\\notin" }, 412 | { "text": "\\nparallel", "snippet": "\\nparallel" }, 413 | { "text": "\\nprec", "snippet": "\\nprec" }, 414 | { "text": "\\npreceq", "snippet": "\\npreceq" }, 415 | { "text": "\\nrightarrow", "snippet": "\\nrightarrow" }, 416 | { "text": "\\nshortmid", "snippet": "\\nshortmid" }, 417 | { "text": "\\nshortparallel", "snippet": "\\nshortparallel" }, 418 | { "text": "\\nsim", "snippet": "\\nsim" }, 419 | { "text": "\\nsubseteq", "snippet": "\\nsubseteq" }, 420 | { "text": "\\nsubseteqq", "snippet": "\\nsubseteqq" }, 421 | { "text": "\\nsucc", "snippet": "\\nsucc" }, 422 | { "text": "\\nsucceq", "snippet": "\\nsucceq" }, 423 | { "text": "\\nsupseteq", "snippet": "\\nsupseteq" }, 424 | { "text": "\\nsupseteqq", "snippet": "\\nsupseteqq" }, 425 | { "text": "\\ntriangleleft", "snippet": "\\ntriangleleft" }, 426 | { "text": "\\ntrianglelefteq", "snippet": "\\ntrianglelefteq" }, 427 | { "text": "\\ntriangleright", "snippet": "\\ntriangleright" }, 428 | { "text": "\\ntrianglerighteq", "snippet": "\\ntrianglerighteq" }, 429 | { "text": "\\nu", "snippet": "\\nu" }, 430 | { "text": "\\nvDash", "snippet": "\\nvDash" }, 431 | { "text": "\\nvdash", "snippet": "\\nvdash" }, 432 | { "text": "\\nwarrow", "snippet": "\\nwarrow" }, 433 | { "text": "\\odot", "snippet": "\\odot" }, 434 | { "text": "\\oint", "snippet": "\\oint" }, 435 | { "text": "\\oldstyle", "snippet": "\\oldstyle" }, 436 | { "text": "\\omega", "snippet": "\\omega" }, 437 | { "text": "\\ominus", "snippet": "\\ominus" }, 438 | { "text": "\\operatorname{#1}", "snippet": "\\operatorname{#1}" }, 439 | { "text": "\\oplus", "snippet": "\\oplus" }, 440 | { "text": "\\oslash", "snippet": "\\oslash" }, 441 | { "text": "\\otimes", "snippet": "\\otimes" }, 442 | { "text": "\\over", "snippet": "\\over" }, 443 | { "text": "\\overbrace{#1}", "snippet": "\\overbrace{#1}" }, 444 | { "text": "\\overleftarrow{#1}", "snippet": "\\overleftarrow{#1}" }, 445 | { "text": "\\overleftrightarrow{#1}", "snippet": "\\overleftrightarrow{#1}" }, 446 | { "text": "\\overline{#1}", "snippet": "\\overline{#1}" }, 447 | { "text": "\\overrightarrow{#1}", "snippet": "\\overrightarrow{#1}" }, 448 | { "text": "\\overset{#1}{#2}", "snippet": "\\overset{#1}{#2}" }, 449 | { "text": "\\overwithdelims", "snippet": "\\overwithdelims" }, 450 | { "text": "\\owns", "snippet": "\\owns" }, 451 | { "text": "\\parallel", "snippet": "\\parallel" }, 452 | { "text": "\\partial", "snippet": "\\partial" }, 453 | { "text": "\\perp", "snippet": "\\perp" }, 454 | { "text": "\\phantom{#1}", "snippet": "\\phantom{#1}" }, 455 | { "text": "\\phi", "snippet": "\\phi" }, 456 | { "text": "\\pi", "snippet": "\\pi" }, 457 | { "text": "\\pitchfork", "snippet": "\\pitchfork" }, 458 | { "text": "\\pm", "snippet": "\\pm" }, 459 | { "text": "\\pmatrix{#1}", "snippet": "\\pmatrix{#1}" }, 460 | { "text": "\\pmb{#1}", "snippet": "\\pmb{#1}" }, 461 | { "text": "\\pmod", "snippet": "\\pmod" }, 462 | { "text": "\\pod", "snippet": "\\pod" }, 463 | { "text": "\\prec", "snippet": "\\prec" }, 464 | { "text": "\\precapprox", "snippet": "\\precapprox" }, 465 | { "text": "\\preccurlyeq", "snippet": "\\preccurlyeq" }, 466 | { "text": "\\preceq", "snippet": "\\preceq" }, 467 | { "text": "\\precnapprox", "snippet": "\\precnapprox" }, 468 | { "text": "\\precneqq", "snippet": "\\precneqq" }, 469 | { "text": "\\precnsim", "snippet": "\\precnsim" }, 470 | { "text": "\\precsim", "snippet": "\\precsim" }, 471 | { "text": "\\prime", "snippet": "\\prime" }, 472 | { "text": "\\prod\\limits_{#1}^{#2}", "snippet": "\\prod\\limits_{#1}^{#2}" }, 473 | { "text": "\\projlim", "snippet": "\\projlim" }, 474 | { "text": "\\propto", "snippet": "\\propto" }, 475 | { "text": "\\psi", "snippet": "\\psi" }, 476 | { "text": "\\qquad", "snippet": "\\qquad" }, 477 | { "text": "\\quad", "snippet": "\\quad" }, 478 | { "text": "\\rVert", "snippet": "\\rVert" }, 479 | { "text": "\\raise", "snippet": "\\raise" }, 480 | { "text": "\\rangle", "snippet": "\\rangle" }, 481 | { "text": "\\rbrace", "snippet": "\\rbrace" }, 482 | { "text": "\\rbrack", "snippet": "\\rbrack" }, 483 | { "text": "\\rceil", "snippet": "\\rceil" }, 484 | { "text": "\\rfloor", "snippet": "\\rfloor" }, 485 | { "text": "\\rgroup", "snippet": "\\rgroup" }, 486 | { "text": "\\rhd", "snippet": "\\rhd" }, 487 | { "text": "\\rho", "snippet": "\\rho" }, 488 | { "text": "\\right", "snippet": "\\right" }, 489 | { "text": "\\rightarrow", "snippet": "\\rightarrow" }, 490 | { "text": "\\rightarrowtail", "snippet": "\\rightarrowtail" }, 491 | { "text": "\\rightharpoondown", "snippet": "\\rightharpoondown" }, 492 | { "text": "\\rightharpoonup", "snippet": "\\rightharpoonup" }, 493 | { "text": "\\rightleftarrows", "snippet": "\\rightleftarrows" }, 494 | { "text": "\\rightleftharpoons", "snippet": "\\rightleftharpoons" }, 495 | { "text": "\\rightrightarrows", "snippet": "\\rightrightarrows" }, 496 | { "text": "\\rightsquigarrow", "snippet": "\\rightsquigarrow" }, 497 | { "text": "\\rightthreetimes", "snippet": "\\rightthreetimes" }, 498 | { "text": "\\risingdotseq", "snippet": "\\risingdotseq" }, 499 | { "text": "\\rlap{#1}", "snippet": "\\rlap{#1}" }, 500 | { "text": "\\rm", "snippet": "\\rm" }, 501 | { "text": "\\rmoustache", "snippet": "\\rmoustache" }, 502 | { "text": "\\root #1 \\of #2", "snippet": "\\root #1 \\of #2" }, 503 | { "text": "\\rtimes", "snippet": "\\rtimes" }, 504 | { "text": "\\rvert", "snippet": "\\rvert" }, 505 | { "text": "\\scriptscriptstyle", "snippet": "\\scriptscriptstyle" }, 506 | { "text": "\\scriptstyle", "snippet": "\\scriptstyle" }, 507 | { "text": "\\searrow", "snippet": "\\searrow" }, 508 | { "text": "\\sec", "snippet": "\\sec" }, 509 | { "text": "\\setminus", "snippet": "\\setminus" }, 510 | { "text": "\\sharp", "snippet": "\\sharp" }, 511 | { "text": "\\shortmid", "snippet": "\\shortmid" }, 512 | { "text": "\\shortparallel", "snippet": "\\shortparallel" }, 513 | { "text": "\\sideset{#1}{#2}{#3}", "snippet": "\\sideset{#1}{#2}{#3}" }, 514 | { "text": "\\sigma", "snippet": "\\sigma" }, 515 | { "text": "\\sim", "snippet": "\\sim" }, 516 | { "text": "\\simeq", "snippet": "\\simeq" }, 517 | { "text": "\\sin", "snippet": "\\sin" }, 518 | { "text": "\\sinh", "snippet": "\\sinh" }, 519 | { "text": "\\skew{#1}{#2}{#3}", "snippet": "\\skew{#1}{#2}{#3}" }, 520 | { "text": "\\smallfrown", "snippet": "\\smallfrown" }, 521 | { "text": "\\smallint", "snippet": "\\smallint" }, 522 | { "text": "\\smallsetminus", "snippet": "\\smallsetminus" }, 523 | { "text": "\\smallsmile", "snippet": "\\smallsmile" }, 524 | { "text": "\\smash{#1}", "snippet": "\\smash{#1}" }, 525 | { "text": "\\smile", "snippet": "\\smile" }, 526 | { "text": "\\space", "snippet": "\\space" }, 527 | { "text": "\\spadesuit", "snippet": "\\spadesuit" }, 528 | { "text": "\\sphericalangle", "snippet": "\\sphericalangle" }, 529 | { "text": "\\sqcap", "snippet": "\\sqcap" }, 530 | { "text": "\\sqcup", "snippet": "\\sqcup" }, 531 | { "text": "\\sqrt{#1}", "snippet": "\\sqrt{#1}" }, 532 | { "text": "\\sqsubset", "snippet": "\\sqsubset" }, 533 | { "text": "\\sqsubseteq", "snippet": "\\sqsubseteq" }, 534 | { "text": "\\sqsupset", "snippet": "\\sqsupset" }, 535 | { "text": "\\sqsupseteq", "snippet": "\\sqsupseteq" }, 536 | { "text": "\\square", "snippet": "\\square" }, 537 | { "text": "\\star", "snippet": "\\star" }, 538 | { "text": "\\strut", "snippet": "\\strut" }, 539 | { "text": "\\subset", "snippet": "\\subset" }, 540 | { "text": "\\subseteq", "snippet": "\\subseteq" }, 541 | { "text": "\\subseteqq", "snippet": "\\subseteqq" }, 542 | { "text": "\\subsetneq", "snippet": "\\subsetneq" }, 543 | { "text": "\\subsetneqq", "snippet": "\\subsetneqq" }, 544 | { "text": "\\substack{#1}", "snippet": "\\substack{#1}" }, 545 | { "text": "\\succ", "snippet": "\\succ" }, 546 | { "text": "\\succapprox", "snippet": "\\succapprox" }, 547 | { "text": "\\succcurlyeq", "snippet": "\\succcurlyeq" }, 548 | { "text": "\\succeq", "snippet": "\\succeq" }, 549 | { "text": "\\succnapprox", "snippet": "\\succnapprox" }, 550 | { "text": "\\succneqq", "snippet": "\\succneqq" }, 551 | { "text": "\\succnsim", "snippet": "\\succnsim" }, 552 | { "text": "\\succsim", "snippet": "\\succsim" }, 553 | { "text": "\\sum\\limits_{#1}^{#2}", "snippet": "\\sum\\limits_{#1}^{#2}" }, 554 | { "text": "\\sup", "snippet": "\\sup" }, 555 | { "text": "\\supset", "snippet": "\\supset" }, 556 | { "text": "\\supseteq", "snippet": "\\supseteq" }, 557 | { "text": "\\supseteqq", "snippet": "\\supseteqq" }, 558 | { "text": "\\supsetneq", "snippet": "\\supsetneq" }, 559 | { "text": "\\supsetneqq", "snippet": "\\supsetneqq" }, 560 | { "text": "\\surd", "snippet": "\\surd" }, 561 | { "text": "\\swarrow", "snippet": "\\swarrow" }, 562 | { "text": "\\tag{#1}", "snippet": "\\tag{#1}" }, 563 | { "text": "\\tan", "snippet": "\\tan" }, 564 | { "text": "\\tanh", "snippet": "\\tanh" }, 565 | { "text": "\\tau", "snippet": "\\tau" }, 566 | { "text": "\\tbinom{#1}{#2}", "snippet": "\\tbinom{#1}{#2}" }, 567 | { "text": "\\text{#1}", "snippet": "\\text{#1}" }, 568 | { "text": "\\textstyle", "snippet": "\\textstyle" }, 569 | { "text": "\\tfrac{#1}{#2}", "snippet": "\\tfrac{#1}{#2}" }, 570 | { "text": "\\therefore", "snippet": "\\therefore" }, 571 | { "text": "\\theta", "snippet": "\\theta" }, 572 | { "text": "\\thickapprox", "snippet": "\\thickapprox" }, 573 | { "text": "\\thicksim", "snippet": "\\thicksim" }, 574 | { "text": "\\thinspace", "snippet": "\\thinspace" }, 575 | { "text": "\\tilde{#1}", "snippet": "\\tilde{#1}" }, 576 | { "text": "\\times", "snippet": "\\times" }, 577 | { "text": "\\to", "snippet": "\\to" }, 578 | { "text": "\\top", "snippet": "\\top" }, 579 | { "text": "\\triangle", "snippet": "\\triangle" }, 580 | { "text": "\\triangledown", "snippet": "\\triangledown" }, 581 | { "text": "\\triangleleft", "snippet": "\\triangleleft" }, 582 | { "text": "\\trianglelefteq", "snippet": "\\trianglelefteq" }, 583 | { "text": "\\triangleq", "snippet": "\\triangleq" }, 584 | { "text": "\\triangleright", "snippet": "\\triangleright" }, 585 | { "text": "\\trianglerighteq", "snippet": "\\trianglerighteq" }, 586 | { "text": "\\tt", "snippet": "\\tt" }, 587 | { "text": "\\twoheadleftarrow", "snippet": "\\twoheadleftarrow" }, 588 | { "text": "\\twoheadrightarrow", "snippet": "\\twoheadrightarrow" }, 589 | { "text": "\\ulcorner", "snippet": "\\ulcorner" }, 590 | { "text": "\\underbrace{#1}", "snippet": "\\underbrace{#1}" }, 591 | { "text": "\\underleftarrow{#1}", "snippet": "\\underleftarrow{#1}" }, 592 | { "text": "\\underleftrightarrow{#1}", "snippet": "\\underleftrightarrow{#1}" }, 593 | { "text": "\\underline{#1}", "snippet": "\\underline{#1}" }, 594 | { "text": "\\underrightarrow{#1}", "snippet": "\\underrightarrow{#1}" }, 595 | { "text": "\\underset{#1}{#2}", "snippet": "\\underset{#1}{#2}" }, 596 | { "text": "\\unlhd", "snippet": "\\unlhd" }, 597 | { "text": "\\unrhd", "snippet": "\\unrhd" }, 598 | { "text": "\\uparrow", "snippet": "\\uparrow" }, 599 | { "text": "\\updownarrow", "snippet": "\\updownarrow" }, 600 | { "text": "\\upharpoonleft", "snippet": "\\upharpoonleft" }, 601 | { "text": "\\upharpoonright", "snippet": "\\upharpoonright" }, 602 | { "text": "\\uplus", "snippet": "\\uplus" }, 603 | { "text": "\\uproot{#1}", "snippet": "\\uproot{#1}" }, 604 | { "text": "\\upsilon", "snippet": "\\upsilon" }, 605 | { "text": "\\upuparrows", "snippet": "\\upuparrows" }, 606 | { "text": "\\urcorner", "snippet": "\\urcorner" }, 607 | { "text": "\\vDash", "snippet": "\\vDash" }, 608 | { "text": "\\varDelta", "snippet": "\\varDelta" }, 609 | { "text": "\\varGamma", "snippet": "\\varGamma" }, 610 | { "text": "\\varLambda", "snippet": "\\varLambda" }, 611 | { "text": "\\varOmega", "snippet": "\\varOmega" }, 612 | { "text": "\\varPhi", "snippet": "\\varPhi" }, 613 | { "text": "\\varPi", "snippet": "\\varPi" }, 614 | { "text": "\\varPsi", "snippet": "\\varPsi" }, 615 | { "text": "\\varSigma", "snippet": "\\varSigma" }, 616 | { "text": "\\varTheta", "snippet": "\\varTheta" }, 617 | { "text": "\\varUpsilon", "snippet": "\\varUpsilon" }, 618 | { "text": "\\varXi", "snippet": "\\varXi" }, 619 | { "text": "\\varepsilon", "snippet": "\\varepsilon" }, 620 | { "text": "\\varinjlim", "snippet": "\\varinjlim" }, 621 | { "text": "\\varkappa", "snippet": "\\varkappa" }, 622 | { "text": "\\varliminf", "snippet": "\\varliminf" }, 623 | { "text": "\\varlimsup", "snippet": "\\varlimsup" }, 624 | { "text": "\\varnothing", "snippet": "\\varnothing" }, 625 | { "text": "\\varphi", "snippet": "\\varphi" }, 626 | { "text": "\\varpi", "snippet": "\\varpi" }, 627 | { "text": "\\varprojlim", "snippet": "\\varprojlim" }, 628 | { "text": "\\varpropto", "snippet": "\\varpropto" }, 629 | { "text": "\\varrho", "snippet": "\\varrho" }, 630 | { "text": "\\varsigma", "snippet": "\\varsigma" }, 631 | { "text": "\\varsubsetneq", "snippet": "\\varsubsetneq" }, 632 | { "text": "\\varsubsetneqq", "snippet": "\\varsubsetneqq" }, 633 | { "text": "\\varsupsetneq", "snippet": "\\varsupsetneq" }, 634 | { "text": "\\varsupsetneqq", "snippet": "\\varsupsetneqq" }, 635 | { "text": "\\vartheta", "snippet": "\\vartheta" }, 636 | { "text": "\\vartriangle", "snippet": "\\vartriangle" }, 637 | { "text": "\\vartriangleleft", "snippet": "\\vartriangleleft" }, 638 | { "text": "\\vartriangleright", "snippet": "\\vartriangleright" }, 639 | { "text": "\\vcenter", "snippet": "\\vcenter" }, 640 | { "text": "\\vdash", "snippet": "\\vdash" }, 641 | { "text": "\\vec{#1}", "snippet": "\\vec{#1}" }, 642 | { "text": "\\vee", "snippet": "\\vee" }, 643 | { "text": "\\veebar", "snippet": "\\veebar" }, 644 | { "text": "\\vert", "snippet": "\\vert" }, 645 | { "text": "\\vphantom{#1}", "snippet": "\\vphantom{#1}" }, 646 | { "text": "\\wedge", "snippet": "\\wedge" }, 647 | { "text": "\\widehat{#1}", "snippet": "\\widehat{#1}" }, 648 | { "text": "\\widetilde{#1}", "snippet": "\\widetilde{#1}" }, 649 | { "text": "\\wp", "snippet": "\\wp" }, 650 | { "text": "\\wr", "snippet": "\\wr" }, 651 | { "text": "\\xi", "snippet": "\\xi" }, 652 | { "text": "\\xleftarrow{#1}", "snippet": "\\xleftarrow{#1}" }, 653 | { "text": "\\xrightarrow{#1}", "snippet": "\\xrightarrow{#1}" }, 654 | { "text": "\\zeta", "snippet": "\\zeta" }, 655 | { "text": "\\begin{definition}", "snippet": "\\begin{definition}\n#1\n\\end{definition}" }, 656 | { "text": "\\begin{tikzcd}", "snippet": "\\begin{tikzcd}[#1]\n#2\n\\end{tikzcd}" }, 657 | { "text": "\\begin{tikzpicture}", "snippet": "\\begin{tikzpicture}[#1]\n#2\n\\end{tikzpicture}" }, 658 | { "text": "\\begin{align}", "snippet": "\\begin{align}\n#1\n\\end{align}" }, 659 | { "text": "\\begin{align*}", "snippet": "\\begin{align*}\n#1\n\\end{align*}" }, 660 | { "text": "\\begin{alignat}", "snippet": "\\begin{alignat}\n#1\n\\end{alignat}" }, 661 | { "text": "\\begin{alignat*}", "snippet": "\\begin{alignat*}\n#1\n\\end{alignat*}" }, 662 | { "text": "\\begin{aligned}", "snippet": "\\begin{aligned}\n#1\n\\end{aligned}" }, 663 | { "text": "\\begin{alignedat}", "snippet": "\\begin{alignedat}\n#1\n\\end{alignedat}" }, 664 | { "text": "\\begin{array}", "snippet": "\\begin{array}\n#1\n\\end{array}" }, 665 | { "text": "\\begin{Bmatrix}", "snippet": "\\begin{Bmatrix}\n#1\n\\end{Bmatrix}" }, 666 | { "text": "\\begin{bmatrix}", "snippet": "\\begin{bmatrix}\n#1\n\\end{bmatrix}" }, 667 | { "text": "\\begin{cases}", "snippet": "\\begin{cases}\n#1\n\\end{cases}" }, 668 | { "text": "\\begin{CD}", "snippet": "\\begin{CD}\n#1\n\\end{CD}" }, 669 | { "text": "\\begin{eqnarray}", "snippet": "\\begin{eqnarray}\n#1\n\\end{eqnarray}" }, 670 | { "text": "\\begin{eqnarray*}", "snippet": "\\begin{eqnarray*}\n#1\n\\end{eqnarray*}" }, 671 | { "text": "\\begin{equation}", "snippet": "\\begin{equation}\n#1\n\\end{equation}" }, 672 | { "text": "\\begin{equation*}", "snippet": "\\begin{equation*}\n#1\n\\end{equation*}" }, 673 | { "text": "\\begin{gather}", "snippet": "\\begin{gather}\n#1\n\\end{gather}" }, 674 | { "text": "\\begin{gather*}", "snippet": "\\begin{gather*}\n#1\n\\end{gather*}" }, 675 | { "text": "\\begin{gathered}", "snippet": "\\begin{gathered}\n#1\n\\end{gathered}" }, 676 | { "text": "\\begin{matrix}", "snippet": "\\begin{matrix}\n#1\n\\end{matrix}" }, 677 | { "text": "\\begin{multline}", "snippet": "\\begin{multline}\n#1\n\\end{multline}" }, 678 | { "text": "\\begin{multline*}", "snippet": "\\begin{multline*}\n#1\n\\end{multline*}" }, 679 | { "text": "\\begin{pmatrix}", "snippet": "\\begin{pmatrix}\n#1\n\\end{pmatrix}" }, 680 | { "text": "\\begin{smallmatrix}", "snippet": "\\begin{smallmatrix}\n#1\n\\end{smallmatrix}" }, 681 | { "text": "\\begin{split}", "snippet": "\\begin{split}\n#1\n\\end{split}" }, 682 | { "text": "\\begin{subarray}", "snippet": "\\begin{subarray}\n#1\n\\end{subarray}" }, 683 | { "text": "\\begin{Vmatrix}", "snippet": "\\begin{Vmatrix}\n#1\n\\end{Vmatrix}" }, 684 | { "text": "\\begin{vmatrix}", "snippet": "\\begin{vmatrix}\n#1\n\\end{vmatrix}" } 685 | ] 686 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES2016", 4 | "module": "commonjs", 5 | "moduleResolution": "node", 6 | "strictPropertyInitialization": true, 7 | "sourceMap": true, 8 | "noImplicitAny": true, 9 | "noImplicitThis": true, 10 | "noImplicitReturns": true, 11 | "declaration": true, 12 | "outDir": "./lib", 13 | "strict": true, 14 | "esModuleInterop": true, 15 | "resolveJsonModule": true, 16 | "allowSyntheticDefaultImports": true 17 | }, 18 | "include": ["src"], 19 | "exclude": ["node_modules", "**/__tests__/*"] 20 | } 21 | --------------------------------------------------------------------------------