syntaxes/LaTeX.tmLanguage.json

Thu, 25 Jun 2020 15:11:15 -0500

author
Tuomo Valkonen <tuomov@iki.fi>
date
Thu, 25 Jun 2020 15:11:15 -0500
changeset 26
c8a6390ebc58
parent 24
7c7d9c0a314d
child 27
f34b09beada4
permissions
-rw-r--r--

Basic changes-package support.
(\replaced does not do second argument yet. Not sure if it is even feasible.)

{
  "fileTypes": [
    "tex"
  ],
  "firstLineMatch": "^\\\\documentclass(\\[.*\\])?\\{.*\\}",
  "keyEquivalent": "^~L",
  "name": "LaTeX+",
  "patterns": [
    {
      "comment": "This scope identifies partially typed commands such as `\\tab`. We use this to trigger “Command Completion” only when it makes sense.",
      "match": "(?<=\\\\[\\w@]|\\\\[\\w@]{2}|\\\\[\\w@]{3}|\\\\[\\w@]{4}|\\\\[\\w@]{5}|\\\\[\\w@]{6})\\s",
      "name": "meta.space-after-command.latex"
    },
    {
      "begin": "((\\\\)(?:usepackage|documentclass))((?:\\[[^\\[]*?\\])*)(\\{)",
      "beginCaptures": {
        "1": {
          "name": "keyword.control.preamble.latex"
        },
        "2": {
          "name": "punctuation.definition.function.latex"
        },
        "3": {
          "patterns": [
            {
              "include": "#optional-arg"
            }
          ]
        },
        "4": {
          "name": "punctuation.definition.arguments.begin.latex"
        }
      },
      "contentName": "support.class.latex",
      "end": "\\}",
      "endCaptures": {
        "0": {
          "name": "punctuation.definition.arguments.end.latex"
        }
      },
      "name": "meta.preamble.latex",
      "patterns": [
        {
          "include": "$self"
        }
      ]
    },
    {
      "begin": "((\\\\)(?:include|input))(\\{)",
      "beginCaptures": {
        "1": {
          "name": "keyword.control.include.latex"
        },
        "2": {
          "name": "punctuation.definition.function.latex"
        },
        "3": {
          "name": "punctuation.definition.arguments.begin.latex"
        }
      },
      "contentName": "support.class.latex",
      "end": "\\}",
      "endCaptures": {
        "0": {
          "name": "punctuation.definition.arguments.end.latex"
        }
      },
      "name": "meta.include.latex",
      "patterns": [
        {
          "include": "$self"
        }
      ]
    },
    {
      "begin": "((\\\\)((?:sub){0,2}section|(?:sub)?paragraph|chapter|part|addpart|addchap|addsec|minisec|frametitle)(?:\\*)?)((?:\\[[^\\[]*?\\]){0,2})(\\{)",
      "beginCaptures": {
        "1": {
          "name": "support.function.section.latex"
        },
        "2": {
          "name": "punctuation.definition.function.latex"
        },
        "4": {
          "patterns": [
            {
              "include": "#optional-arg"
            }
          ]
        },
        "5": {
          "name": "punctuation.definition.arguments.begin.latex"
        }
      },
      "comment": "this works OK with all kinds of crazy stuff as long as section is one line",
      "contentName": "entity.name.section.latex",
      "end": "\\}",
      "endCaptures": {
        "0": {
          "name": "punctuation.definition.arguments.end.latex"
        }
      },
      "name": "meta.function.section.$3.latex",
      "patterns": [
        {
          "include": "text.tex#braces"
        },
        {
          "include": "$base"
        }
      ]
    },
    {
      "begin": "(^\\s*)?(?=\\\\begin\\{(lstlisting|minted|pyglist)\\})",
      "beginCaptures": {
        "0": {
          "name": "punctuation.whitespace.embedded.leading.latex"
        }
      },
      "end": "(?!\\G)(\\s*$\\n?)?",
      "endCaptures": {
        "0": {
          "name": "punctuation.whitespace.embedded.trailing.latex"
        }
      },
      "patterns": [
        {
          "begin": "(\\\\begin\\{minted\\}(?:\\[.*\\])?\\{(?:cpp|c)\\})",
          "captures": {
            "1": {
              "patterns": [
                {
                  "include": "#minted-env"
                }
              ]
            }
          },
          "contentName": "source.cpp.embedded.latex",
          "patterns": [
            {
              "include": "source.cpp.embedded.latex"
            }
          ],
          "end": "(\\\\end\\{minted\\})"
        },
        {
          "begin": "(\\\\begin\\{minted\\}(?:\\[.*\\])?\\{css\\})",
          "captures": {
            "1": {
              "patterns": [
                {
                  "include": "#minted-env"
                }
              ]
            }
          },
          "contentName": "source.css",
          "patterns": [
            {
              "include": "source.css"
            }
          ],
          "end": "(\\\\end\\{minted\\})"
        },
        {
          "begin": "(\\\\begin\\{minted\\}(?:\\[.*\\])?\\{html\\})",
          "captures": {
            "1": {
              "patterns": [
                {
                  "include": "#minted-env"
                }
              ]
            }
          },
          "contentName": "text.html",
          "patterns": [
            {
              "include": "text.html"
            }
          ],
          "end": "(\\\\end\\{minted\\})"
        },
        {
          "begin": "(\\\\begin\\{minted\\}(?:\\[.*\\])?\\{java\\})",
          "captures": {
            "1": {
              "patterns": [
                {
                  "include": "#minted-env"
                }
              ]
            }
          },
          "contentName": "source.java",
          "patterns": [
            {
              "include": "source.java"
            }
          ],
          "end": "(\\\\end\\{minted\\})"
        },
        {
          "begin": "(\\\\begin\\{minted\\}(?:\\[.*\\])?\\{(?:js|javascript)\\})",
          "captures": {
            "1": {
              "patterns": [
                {
                  "include": "#minted-env"
                }
              ]
            }
          },
          "contentName": "source.js",
          "patterns": [
            {
              "include": "source.js"
            }
          ],
          "end": "(\\\\end\\{minted\\})"
        },
        {
          "begin": "(\\\\begin\\{minted\\}(?:\\[.*\\])?\\{lua\\})",
          "captures": {
            "1": {
              "patterns": [
                {
                  "include": "#minted-env"
                }
              ]
            }
          },
          "contentName": "source.lua",
          "patterns": [
            {
              "include": "source.lua"
            }
          ],
          "end": "(\\\\end\\{minted\\})"
        },
        {
          "begin": "(\\\\begin\\{minted\\}(?:\\[.*\\])?\\{(?:python|py)\\})",
          "captures": {
            "1": {
              "patterns": [
                {
                  "include": "#minted-env"
                }
              ]
            }
          },
          "contentName": "source.python",
          "patterns": [
            {
              "include": "source.python"
            }
          ],
          "end": "(\\\\end\\{minted\\})"
        },
        {
          "begin": "(\\\\begin\\{minted\\}(?:\\[.*\\])?\\{xml\\})",
          "captures": {
            "1": {
              "patterns": [
                {
                  "include": "#minted-env"
                }
              ]
            }
          },
          "contentName": "yaml.xml",
          "patterns": [
            {
              "include": "yaml.xml"
            }
          ],
          "end": "(\\\\end\\{minted\\})"
        },
        {
          "begin": "(\\\\begin\\{minted\\}(?:\\[.*\\])?\\{yaml\\})",
          "captures": {
            "1": {
              "patterns": [
                {
                  "include": "#minted-env"
                }
              ]
            }
          },
          "contentName": "source.yaml",
          "patterns": [
            {
              "include": "source.yaml"
            }
          ],
          "end": "(\\\\end\\{minted\\})"
        },
        {
          "begin": "(\\\\begin\\{(?:lstlisting|minted|pyglist)\\}(?:\\[.*\\])?)",
          "captures": {
            "1": {
              "patterns": [
                {
                  "include": "#minted-env"
                }
              ]
            }
          },
          "contentName": "meta.function.embedded.latex",
          "end": "(\\\\end\\{(?:lstlisting|minted|pyglist)\\})",
          "name": "meta.embedded.block.generic"
        }
      ]
    },
    {
      "begin": "((?:\\s*)\\\\begin\\{(cppcode(?:\\*)?)\\}(?:\\[.*\\])?)",
      "captures": {
        "1": {
          "patterns": [
            {
              "include": "#code-env"
            }
          ]
        }
      },
      "contentName": "source.cpp.embedded.latex",
      "patterns": [
        {
          "include": "source.cpp.embedded.latex"
        },
        {
          "include": "source.cpp"
        }
      ],
      "end": "(\\\\end\\{\\2\\}(?:\\s*\\n)?)"
    },
    {
      "begin": "((?:\\s*)\\\\begin\\{(hscode(?:\\*)?)\\}(?:\\[.*\\])?)",
      "captures": {
        "1": {
          "patterns": [
            {
              "include": "#code-env"
            }
          ]
        }
      },
      "contentName": "source.haskell",
      "patterns": [
        {
          "include": "source.haskell"
        }
      ],
      "end": "(\\\\end\\{\\2\\}(?:\\s*\\n)?)"
    },
    {
      "begin": "((?:\\s*)\\\\begin\\{(luacode(?:\\*)?)\\}(?:\\[.*\\])?)",
      "captures": {
        "1": {
          "patterns": [
            {
              "include": "#code-env"
            }
          ]
        }
      },
      "contentName": "source.lua",
      "patterns": [
        {
          "include": "source.lua"
        }
      ],
      "end": "(\\\\end\\{\\2\\}(?:\\s*\\n)?)"
    },
    {
      "begin": "((?:\\s*)\\\\begin\\{((?:pycode|sageblock|sagesilent|sageverbatim|sageexample|sagecommandline)(?:\\*)?)\\}(?:\\[.*\\])?)",
      "captures": {
        "1": {
          "patterns": [
            {
              "include": "#code-env"
            }
          ]
        }
      },
      "contentName": "source.python",
      "patterns": [
        {
          "include": "source.python"
        }
      ],
      "end": "(\\\\end\\{\\2\\}(?:\\s*\\n)?)"
    },
    {
      "begin": "((?:\\s*)\\\\begin\\{(scalacode(?:\\*)?)\\}(?:\\[.*\\])?)",
      "captures": {
        "1": {
          "patterns": [
            {
              "include": "#code-env"
            }
          ]
        }
      },
      "contentName": "source.scala",
      "patterns": [
        {
          "include": "source.scala"
        }
      ],
      "end": "(\\\\end\\{\\2\\}(?:\\s*\\n)?)"
    },
    {
      "begin": "((?:\\s*)\\\\begin\\{([a-z]*code(?:\\*)?)\\}(?:\\[.*\\])?)",
      "captures": {
        "1": {
          "patterns": [
            {
              "include": "#code-env"
            }
          ]
        }
      },
      "end": "(\\\\end\\{\\2\\}(?:\\s*\\n)?)"
    },
    {
      "begin": "((?:\\s*)\\\\begin\\{asy\\}(?:\\[.*\\])?)",
      "captures": {
        "1": {
          "patterns": [
            {
              "include": "#code-env"
            }
          ]
        }
      },
      "contentName": "source.asymptote",
      "patterns": [
        {
          "include": "source.asymptote"
        }
      ],
      "end": "(\\\\end\\{asy\\}(?:\\s*\\n)?)"
    },
    {
      "begin": "((?:\\s*)\\\\begin\\{dot2tex\\}(?:\\[.*\\])?)",
      "captures": {
        "1": {
          "patterns": [
            {
              "include": "#code-env"
            }
          ]
        }
      },
      "contentName": "source.dot",
      "patterns": [
        {
          "include": "source.dot"
        }
      ],
      "end": "(\\\\end\\{dot2tex\\}(?:\\s*\\n)?)"
    },
    {
      "begin": "((?:\\s*)\\\\begin\\{gnuplot\\}(?:\\[.*\\])?)",
      "captures": {
        "1": {
          "patterns": [
            {
              "include": "#code-env"
            }
          ]
        }
      },
      "contentName": "source.gnuplot",
      "patterns": [
        {
          "include": "source.gnuplot"
        }
      ],
      "end": "(\\\\end\\{gnuplot\\}(?:\\s*\\n)?)"
    },
    {
      "begin": "(?:\\s*)((\\\\)begin)(\\{)((?:fboxv|boxedv|V|v)erbatim)(\\})",
      "captures": {
        "1": {
          "name": "support.function.be.latex"
        },
        "2": {
          "name": "punctuation.definition.function.latex"
        },
        "3": {
          "name": "punctuation.definition.arguments.begin.latex"
        },
        "4": {
          "name": "variable.parameter.function.latex"
        },
        "5": {
          "name": "punctuation.definition.arguments.end.latex"
        }
      },
      "contentName": "markup.raw.verbatim.latex",
      "end": "((\\\\)end)(\\{)(\\4)(\\})",
      "name": "meta.function.verbatim.latex"
    },
    {
      "begin": "(?:\\s*)((\\\\)begin)(\\{)(VerbatimOut)(\\})(\\{)([^\\}]*)(\\})",
      "captures": {
        "1": {
          "name": "support.function.be.latex"
        },
        "2": {
          "name": "punctuation.definition.function.latex"
        },
        "3": {
          "name": "punctuation.definition.arguments.begin.latex"
        },
        "4": {
          "name": "variable.parameter.function.latex"
        },
        "5": {
          "name": "punctuation.definition.arguments.end.latex"
        },
        "6": {
          "name": "punctuation.definition.arguments.begin.latex"
        },
        "7": {
          "name": "support.class.latex"
        },
        "8": {
          "name": "punctuation.definition.arguments.end.latex"
        }
      },
      "contentName": "markup.raw.verbatim.latex",
      "end": "((\\\\)end)(\\{)(\\VerbatimOut)(\\})",
      "name": "meta.function.verbatim.latex"
    },
    {
      "begin": "(?:\\s*)((\\\\)begin)(\\{)(alltt)(\\})",
      "captures": {
        "1": {
          "name": "support.function.be.latex"
        },
        "2": {
          "name": "punctuation.definition.function.latex"
        },
        "3": {
          "name": "punctuation.definition.arguments.begin.latex"
        },
        "4": {
          "name": "variable.parameter.function.latex"
        },
        "5": {
          "name": "punctuation.definition.arguments.end.latex"
        }
      },
      "contentName": "markup.raw.verbatim.latex",
      "end": "((\\\\)end)(\\{)(alltt)(\\})",
      "name": "meta.function.alltt.latex",
      "patterns": [
        {
          "captures": {
            "1": {
              "name": "punctuation.definition.function.tex"
            }
          },
          "match": "(\\\\)[A-Za-z]+",
          "name": "support.function.general.tex"
        }
      ]
    },
    {
      "begin": "(?:\\s*)((\\\\)begin)(\\{)((?:C|c)omment)(\\})",
      "captures": {
        "1": {
          "name": "support.function.be.latex"
        },
        "2": {
          "name": "punctuation.definition.function.latex"
        },
        "3": {
          "name": "punctuation.definition.arguments.begin.latex"
        },
        "4": {
          "name": "variable.parameter.function.latex"
        },
        "5": {
          "name": "punctuation.definition.arguments.end.latex"
        }
      },
      "contentName": "comment.block.environment.tex",
      "end": "((\\\\)end)(\\{)(\\4)(\\})",
      "name": "meta.function.verbatim.latex"
    },
    {
      "captures": {
        "1": {
          "name": "support.function.url.latex"
        },
        "2": {
          "name": "punctuation.definition.function.latex"
        },
        "3": {
          "name": "punctuation.definition.arguments.begin.latex"
        },
        "4": {
          "name": "markup.underline.link.latex"
        },
        "5": {
          "name": "punctuation.definition.arguments.end.latex"
        }
      },
      "match": "(?:\\s*)((\\\\)(?:url|href))(\\{)([^}]*)(\\})",
      "name": "meta.function.link.url.latex"
    },
    {
      "captures": {
        "1": {
          "name": "support.function.be.latex"
        },
        "2": {
          "name": "punctuation.definition.function.latex"
        },
        "3": {
          "name": "punctuation.definition.arguments.begin.latex"
        },
        "4": {
          "name": "variable.parameter.function.latex"
        },
        "5": {
          "name": "punctuation.definition.arguments.end.latex"
        }
      },
      "comment": "These two patterns match the \\begin{document} and \\end{document} commands, so that the environment matching pattern following them will ignore those commands.",
      "match": "(?:\\s*)((\\\\)begin)(\\{)(document)(\\})",
      "name": "meta.function.begin-document.latex"
    },
    {
      "captures": {
        "1": {
          "name": "support.function.be.latex"
        },
        "2": {
          "name": "punctuation.definition.function.latex"
        },
        "3": {
          "name": "punctuation.definition.arguments.begin.latex"
        },
        "4": {
          "name": "variable.parameter.function.latex"
        },
        "5": {
          "name": "punctuation.definition.arguments.end.latex"
        }
      },
      "match": "(?:\\s*)((\\\\)end)(\\{)(document)(\\})",
      "name": "meta.function.end-document.latex"
    },
    {
      "begin": "(?:\\s*)((\\\\)begin)(\\{)((?:align|equation|(?:IEEE)?eqnarray|multline|aligned|alignat|split|gather|gathered|cases|displaymath|[a-zA-Z]*matrix)(?:\\*)?)(\\})(\\s*\\n)?",
      "captures": {
        "1": {
          "name": "support.function.be.latex"
        },
        "2": {
          "name": "punctuation.definition.function.latex"
        },
        "3": {
          "name": "punctuation.definition.arguments.begin.latex"
        },
        "4": {
          "name": "variable.parameter.function.latex"
        },
        "5": {
          "name": "punctuation.definition.arguments.end.latex"
        }
      },
      "contentName": "support.class.math.block.environment.latex",
      "end": "(?:\\s*)((\\\\)end)(\\{)(\\4)(\\})(?:\\s*\\n)?",
      "name": "meta.function.environment.math.latex",
      "patterns": [
        {
          "match": "(?<!\\\\)&",
          "name": "keyword.control.equation.align.latex"
        },
        {
          "match": "\\\\\\\\",
          "name": "keyword.control.equation.newline.latex"
        },
        {
          "include": "#definition-label"
        },
        {
          "include": "text.tex#math"
        },
        {
          "include": "$base"
        }
      ]
    },
    {
      "begin": "(?:\\s*)((\\\\)begin)(\\{)(array|tabular[xy*]?|xltabular)(\\})(\\s*\\n)?",
      "captures": {
        "1": {
          "name": "support.function.be.latex"
        },
        "2": {
          "name": "punctuation.definition.function.latex"
        },
        "3": {
          "name": "punctuation.definition.arguments.begin.latex"
        },
        "4": {
          "name": "variable.parameter.function.latex"
        },
        "5": {
          "name": "punctuation.definition.arguments.end.latex"
        }
      },
      "contentName": "meta.data.environment.tabular.latex",
      "end": "(?:\\s*)((\\\\)end)(\\{)(\\4)(\\})(?:\\s*\\n)?",
      "name": "meta.function.environment.tabular.latex",
      "patterns": [
        {
          "match": "(?<!\\\\)&",
          "name": "keyword.control.table.cell.latex"
        },
        {
          "match": "\\\\\\\\",
          "name": "keyword.control.table.newline.latex"
        },
        {
          "include": "$base"
        }
      ]
    },
    {
      "begin": "(?:\\s*)((\\\\)begin)(\\{)(itemize|enumerate|description|list)(\\})",
      "captures": {
        "1": {
          "name": "support.function.be.latex"
        },
        "2": {
          "name": "punctuation.definition.function.latex"
        },
        "3": {
          "name": "punctuation.definition.arguments.begin.latex"
        },
        "4": {
          "name": "variable.parameter.function.latex"
        },
        "5": {
          "name": "punctuation.definition.arguments.end.latex"
        }
      },
      "end": "((\\\\)end)(\\{)(\\4)(\\})(?:\\s*\\n)?",
      "name": "meta.function.environment.list.latex",
      "patterns": [
        {
          "include": "$base"
        }
      ]
    },
    {
      "begin": "(?:\\s*)((\\\\)begin)(\\{)(tikzpicture)(\\})",
      "captures": {
        "1": {
          "name": "support.function.be.latex"
        },
        "2": {
          "name": "punctuation.definition.function.latex"
        },
        "3": {
          "name": "punctuation.definition.arguments.begin.latex"
        },
        "4": {
          "name": "variable.parameter.function.latex"
        },
        "5": {
          "name": "punctuation.definition.arguments.end.latex"
        }
      },
      "end": "((\\\\)end)(\\{)(tikzpicture)(\\})(?:\\s*\\n)?",
      "name": "meta.function.environment.latex.tikz",
      "patterns": [
        {
          "include": "$base"
        }
      ]
    },
    {
      "begin": "(?:\\s*)((\\\\)begin)(\\{)(frame)(\\})",
      "captures": {
        "1": {
          "name": "support.function.be.latex"
        },
        "2": {
          "name": "punctuation.definition.function.latex"
        },
        "3": {
          "name": "punctuation.definition.arguments.begin.latex"
        },
        "4": {
          "name": "variable.parameter.function.latex"
        },
        "5": {
          "name": "punctuation.definition.arguments.end.latex"
        }
      },
      "end": "((\\\\)end)(\\{)(frame)(\\})",
      "name": "meta.function.environment.frame.latex",
      "patterns": [
        {
          "include": "$base"
        }
      ]
    },
    {
      "begin": "(?:\\s*)((\\\\)begin)(\\{)(mpost[*]?)(\\})",
      "captures": {
        "1": {
          "name": "support.function.be.latex"
        },
        "2": {
          "name": "punctuation.definition.function.latex"
        },
        "3": {
          "name": "punctuation.definition.arguments.begin.latex"
        },
        "4": {
          "name": "variable.parameter.function.latex"
        },
        "5": {
          "name": "punctuation.definition.arguments.end.latex"
        }
      },
      "end": "((\\\\)end)(\\{)(\\4)(\\})(?:\\s*\\n)?",
      "name": "meta.function.environment.latex.mpost"
    },{
      "begin": "(?:\\s*)((\\\\)begin)(\\{)(\\w+[*]?)(\\})",
      "captures": {
        "1": {
          "name": "support.function.be.latex"
        },
        "2": {
          "name": "punctuation.definition.function.latex"
        },
        "3": {
          "name": "punctuation.definition.arguments.begin.latex"
        },
        "4": {
          "name": "variable.parameter.function.latex"
        },
        "5": {
          "name": "punctuation.definition.arguments.end.latex"
        }
      },
      "end": "((\\\\)end)(\\{)(\\4)(\\})(?:\\s*\\n)?",
      "name": "meta.function.environment.general.latex",
      "patterns": [
        {
          "include": "$base"
        }
      ]
    },
    {
      "captures": {
        "1": {
          "name": "storage.type.function.latex"
        },
        "2": {
          "name": "punctuation.definition.function.latex"
        },
        "3": {
          "name": "punctuation.definition.begin.latex"
        },
        "4": {
          "name": "support.function.general.tex"
        },
        "5": {
          "name": "punctuation.definition.function.latex"
        },
        "6": {
          "name": "punctuation.definition.end.latex"
        }
      },
      "match": "((\\\\)(?:newcommand|renewcommand|(?:re)?newrobustcmd|DeclareRobustCommand))\\*?({)((\\\\)[^}]*)(})"
    },
    {
      "begin": "((\\\\)marginpar)((?:\\[[^\\[]*?\\])*)(\\{)",
      "beginCaptures": {
        "1": {
          "name": "support.function.marginpar.latex"
        },
        "2": {
          "name": "punctuation.definition.function.latex"
        },
        "3": {
          "patterns": [
            {
              "include": "#optional-arg"
            }
          ]
        },
        "4": {
          "name": "punctuation.definition.marginpar.begin.latex"
        }
      },
      "contentName": "meta.paragraph.margin.latex",
      "end": "\\}",
      "endCaptures": {
        "0": {
          "name": "punctuation.definition.marginpar.end.latex"
        }
      },
      "patterns": [
        {
          "include": "text.tex#braces"
        },
        {
          "include": "$base"
        }
      ]
    },
    {
      "begin": "((\\\\)footnote(?:mark|text|))((?:\\[[^\\[]*?\\])*)(\\{)",
      "beginCaptures": {
        "1": {
          "name": "support.function.footnote.latex"
        },
        "2": {
          "name": "punctuation.definition.function.latex"
        },
        "3": {
          "patterns": [
            {
              "include": "#optional-arg"
            }
          ]
        },
        "4": {
          "name": "punctuation.definition.footnote.begin.latex"
        }
      },
      "contentName": "entity.name.footnote.latex",
      "end": "\\}",
      "endCaptures": {
        "0": {
          "name": "punctuation.definition.footnote.end.latex"
        }
      },
      "patterns": [
        {
          "include": "text.tex#braces"
        },
        {
          "include": "$base"
        }
      ]
    },
    {
      "begin": "((\\\\)(?:[a-zA-Z][a-zA-Z])?todo)((?:\\[[^\\[]*?\\])*)(\\{)",
      "beginCaptures": {
        "1": {
          "name": "support.function.todo.latex"
        },
        "2": {
          "name": "punctuation.definition.function.latex"
        },
        "3": {
          "patterns": [
            {
              "include": "#optional-arg"
            }
          ]
        },
        "4": {
          "name": "punctuation.definition.todo.begin.latex"
        }
      },
      "contentName": "entity.name.todo.latex",
      "end": "\\}",
      "endCaptures": {
        "0": {
          "name": "punctuation.definition.todo.end.latex"
        }
      },
      "patterns": [
        {
          "include": "text.tex#braces"
        },
        {
          "include": "$base"
        }
      ]
    },
    {
      "begin": "((\\\\)(?:[a-zA-Z][a-zA-Z])?reply)((?:\\[[^\\[]*?\\])*)(\\{)",
      "beginCaptures": {
        "1": {
          "name": "support.function.todo.reply.latex"
        },
        "2": {
          "name": "punctuation.definition.function.latex"
        },
        "3": {
          "patterns": [
            {
              "include": "#optional-arg"
            }
          ]
        },
        "4": {
          "name": "punctuation.definition.todo.reply.begin.latex"
        }
      },
      "contentName": "entity.name.todo.reply.latex",
      "end": "\\}",
      "endCaptures": {
        "0": {
          "name": "punctuation.definition.todo.reply.end.latex"
        }
      },
      "patterns": [
        {
          "include": "text.tex#braces"
        },
        {
          "include": "$base"
        }
      ]
    },
    {
      "begin": "((\\\\)(?:added|replaced))((?:\\[[^\\[]*?\\])*)(\\{)",
      "beginCaptures": {
        "1": {
          "name": "support.function.changes.added.latex"
        },
        "2": {
          "name": "punctuation.definition.function.latex"
        },
        "3": {
          "patterns": [
            {
              "include": "#optional-arg"
            }
          ]
        },
        "4": {
          "name": "punctuation.definition.changes.added.begin.latex"
        }
      },
      "contentName": "entity.name.changes.added.latex",
      "end": "\\}",
      "endCaptures": {
        "0": {
          "name": "punctuation.definition.changes.added.end.latex"
        }
      },
      "patterns": [
        {
          "include": "text.tex#braces"
        },
        {
          "include": "$base"
        }
      ]
    },
    {
      "begin": "((\\\\)deleted)((?:\\[[^\\[]*?\\])*)(\\{)",
      "beginCaptures": {
        "1": {
          "name": "support.function.changes.deleted.latex"
        },
        "2": {
          "name": "punctuation.definition.function.latex"
        },
        "3": {
          "patterns": [
            {
              "include": "#optional-arg"
            }
          ]
        },
        "4": {
          "name": "punctuation.definition.changes.deleted.begin.latex"
        }
      },
      "contentName": "entity.name.changes.deleted.latex",
      "end": "\\}",
      "endCaptures": {
        "0": {
          "name": "punctuation.definition.changes.deleted.end.latex"
        }
      },
      "patterns": [
        {
          "include": "text.tex#braces"
        },
        {
          "include": "$base"
        }
      ]
    },
    {
      "begin": "((\\\\)emph)(\\{)",
      "beginCaptures": {
        "1": {
          "name": "support.function.emph.latex"
        },
        "2": {
          "name": "punctuation.definition.function.latex"
        },
        "3": {
          "name": "punctuation.definition.emph.begin.latex"
        }
      },
      "contentName": "markup.italic.emph.latex",
      "end": "\\}",
      "endCaptures": {
        "0": {
          "name": "punctuation.definition.emph.end.latex"
        }
      },
      "name": "meta.function.emph.latex",
      "patterns": [
        {
          "include": "text.tex#braces"
        },
        {
          "include": "$base"
        }
      ]
    },
    {
      "begin": "((\\\\)textit)(\\{)",
      "captures": {
        "1": {
          "name": "support.function.textit.latex"
        },
        "2": {
          "name": "punctuation.definition.function.latex"
        },
        "3": {
          "name": "punctuation.definition.textit.begin.latex"
        }
      },
      "comment": "We put the keyword in a capture and name this capture, so that disabling spell checking for “keyword” won't be inherited by the argument to \\textit{...}.\n\nPut specific matches for particular LaTeX keyword.functions before the last two more general functions",
      "contentName": "markup.italic.textit.latex",
      "end": "\\}",
      "endCaptures": {
        "0": {
          "name": "punctuation.definition.textit.end.latex"
        }
      },
      "name": "meta.function.textit.latex",
      "patterns": [
        {
          "include": "text.tex#braces"
        },
        {
          "include": "$base"
        }
      ]
    },
    {
      "begin": "((\\\\)textbf)(\\{)",
      "captures": {
        "1": {
          "name": "support.function.textbf.latex"
        },
        "2": {
          "name": "punctuation.definition.function.latex"
        },
        "3": {
          "name": "punctuation.definition.textbf.begin.latex"
        }
      },
      "contentName": "markup.bold.textbf.latex",
      "end": "\\}",
      "endCaptures": {
        "0": {
          "name": "punctuation.definition.textbf.end.latex"
        }
      },
      "name": "meta.function.textbf.latex",
      "patterns": [
        {
          "include": "text.tex#braces"
        },
        {
          "include": "$base"
        }
      ]
    },
    {
      "begin": "((\\\\)texttt)(\\{)",
      "captures": {
        "1": {
          "name": "support.function.texttt.latex"
        },
        "2": {
          "name": "punctuation.definition.function.latex"
        },
        "3": {
          "name": "punctuation.definition.texttt.begin.latex"
        }
      },
      "contentName": "markup.raw.texttt.latex",
      "end": "\\}",
      "endCaptures": {
        "0": {
          "name": "punctuation.definition.texttt.end.latex"
        }
      },
      "name": "meta.function.texttt.latex",
      "patterns": [
        {
          "include": "text.tex#braces"
        },
        {
          "include": "$base"
        }
      ]
    },
    {
      "captures": {
        "0": {
          "name": "keyword.other.item.latex"
        },
        "1": {
          "name": "punctuation.definition.keyword.latex"
        }
      },
      "match": "(\\\\)item\\b",
      "name": "meta.scope.item.latex"
    },
    {
      "begin": "((\\\\)(?:auto|foot|full|no|short|text|paren)?[cC]ite(?:al)?(?:p|s|t|author|year(?:par)?|title)?[ANP]*\\*?)((?:(?:\\[[^\\]]*\\]){0,2}\\{[\\w:.]+\\})*)(?:(\\[)[^\\]]*(\\]))?(?:(\\[)[^\\]]*(\\]))?(\\{)",
      "captures": {
        "1": {
          "name": "keyword.control.cite.latex"
        },
        "2": {
          "name": "punctuation.definition.keyword.latex"
        },
        "3": {
          "patterns": [
            {
              "include": "#autocites-arg"
            }
          ]
        },
        "4": {
          "name": "punctuation.definition.arguments.optional.begin.latex"
        },
        "5": {
          "name": "punctuation.definition.arguments.optional.end.latex"
        },
        "6": {
          "name": "punctuation.definition.arguments.optional.begin.latex"
        },
        "7": {
          "name": "punctuation.definition.arguments.optional.end.latex"
        },
        "8": {
          "name": "punctuation.definition.arguments.begin.latex"
        }
      },
      "end": "\\}",
      "endCaptures": {
        "0": {
          "name": "punctuation.definition.arguments.end.latex"
        }
      },
      "name": "meta.citation.latex",
      "patterns": [
        {
          "match": "[\\w:.]+",
          "name": "constant.other.reference.citation.latex"
        }
      ]
    },
    {
      "begin": "((\\\\)(?:\\w*[r|R]ef\\*?))(\\{)",
      "beginCaptures": {
        "1": {
          "name": "keyword.control.ref.latex"
        },
        "2": {
          "name": "punctuation.definition.keyword.latex"
        },
        "3": {
          "name": "punctuation.definition.arguments.begin.latex"
        }
      },
      "end": "\\}",
      "endCaptures": {
        "0": {
          "name": "punctuation.definition.arguments.end.latex"
        }
      },
      "name": "meta.reference.label.latex",
      "patterns": [
        {
          "match": "[a-zA-Z0-9\\.,:/*!^_-]",
          "name": "constant.other.reference.label.latex"
        }
      ]
    },
    {
      "include": "#definition-label"
    },
    {
      "begin": "((\\\\)verb[\\*]?)\\s*((\\\\)scantokens)(\\{)",
      "beginCaptures": {
        "1": {
          "name": "support.function.verb.latex"
        },
        "2": {
          "name": "punctuation.definition.function.latex"
        },
        "3": {
          "name": "support.function.verb.latex"
        },
        "4": {
          "name": "punctuation.definition.verb.latex"
        },
        "5": {
          "name": "punctuation.definition.begin.latex"
        }
      },
      "contentName": "markup.raw.verb.latex",
      "end": "(\\})",
      "endCaptures": {
        "1": {
          "name": "punctuation.definition.end.latex"
        }
      },
      "name": "meta.function.verb.latex",
      "patterns": [
        {
          "include": "$self"
        }
      ]
    },
    {
      "captures": {
        "1": {
          "name": "support.function.verb.latex"
        },
        "2": {
          "name": "punctuation.definition.function.latex"
        },
        "3": {
          "name": "punctuation.definition.verb.latex"
        },
        "4": {
          "name": "markup.raw.verb.latex"
        },
        "5": {
          "name": "punctuation.definition.verb.latex"
        }
      },
      "match": "((\\\\)verb[\\*]?)\\s*((?<=\\s)\\S|[^a-zA-Z])(.*?)(\\3|$)",
      "name": "meta.function.verb.latex"
    },
    {
      "captures": {
        "1": {
          "name": "support.function.verb.latex"
        },
        "2": {
          "name": "punctuation.definition.function.latex"
        },
        "3": {
          "patterns": [
            {
              "include": "#optional-arg"
            }
          ]
        },
        "4": {
          "name": "punctuation.definition.arguments.begin.latex"
        },
        "5": {
          "name": "punctuation.definition.arguments.end.latex"
        },
        "6": {
          "name": "punctuation.definition.verb.latex"
        },
        "7": {
          "name": "markup.raw.verb.latex"
        },
        "8": {
          "name": "punctuation.definition.verb.latex"
        },
        "9": {
          "name": "punctuation.definition.verb.latex"
        },
        "10": {
          "name": "markup.raw.verb.latex"
        },
        "11": {
          "name": "punctuation.definition.verb.latex"
        }
      },
      "match": "((\\\\)(?:mint|mintinline))((?:\\[[^\\[]*?\\])?)(\\{)[a-zA-Z]*(\\})(?:(?:([^a-zA-Z\\{])(.*?)(\\6))|(?:(\\{)(.*?)(\\})))",
      "name": "meta.function.verb.latex"
    },
    {
      "captures": {
        "1": {
          "name": "support.function.verb.latex"
        },
        "2": {
          "name": "punctuation.definition.function.latex"
        },
        "3": {
          "patterns": [
            {
              "include": "#optional-arg"
            }
          ]
        },
        "4": {
          "name": "punctuation.definition.verb.latex"
        },
        "5": {
          "name": "markup.raw.verb.latex"
        },
        "6": {
          "name": "punctuation.definition.verb.latex"
        },
        "7": {
          "name": "punctuation.definition.verb.latex"
        },
        "8": {
          "name": "markup.raw.verb.latex"
        },
        "9": {
          "name": "punctuation.definition.verb.latex"
        }
      },
      "match": "((\\\\)[a-z]+inline)((?:\\[[^\\[]*?\\])?)(?:(?:([^a-zA-Z\\{])(.*?)(\\4))|(?:(\\{)(.*?)(\\})))",
      "name": "meta.function.verb.latex"
    },
    {
      "match": "\\\\(?:newline|pagebreak|clearpage|linebreak|pause)(?:\\b)",
      "name": "keyword.control.layout.tex"
    },
    {
      "begin": "\\\\\\(",
      "beginCaptures": {
        "0": {
          "name": "punctuation.definition.string.begin.latex"
        }
      },
      "end": "\\\\\\)",
      "endCaptures": {
        "0": {
          "name": "punctuation.definition.string.end.latex"
        }
      },
      "name": "support.class.math.latex",
      "patterns": [
        {
          "include": "text.tex#math"
        },
        {
          "include": "$base"
        }
      ]
    },
    {
      "begin": "\\$\\$",
      "beginCaptures": {
        "0": {
          "name": "punctuation.definition.string.begin.latex"
        }
      },
      "end": "\\$\\$",
      "endCaptures": {
        "0": {
          "name": "punctuation.definition.string.end.latex"
        }
      },
      "name": "support.class.math.latex",
      "patterns": [
        {
          "match": "\\\\\\$",
          "name": "constant.character.escape.tex"
        },
        {
          "include": "text.tex#math"
        },
        {
          "include": "$base"
        }
      ]
    },
    {
      "begin": "\\\\\\[",
      "beginCaptures": {
        "0": {
          "name": "punctuation.definition.string.begin.latex"
        }
      },
      "end": "\\\\\\]",
      "endCaptures": {
        "0": {
          "name": "punctuation.definition.string.end.latex"
        }
      },
      "name": "support.class.math.latex",
      "patterns": [
        {
          "include": "text.tex#math"
        },
        {
          "include": "$base"
        }
      ]
    },
    {
      "captures": {
        "1": {
          "name": "punctuation.definition.constant.latex"
        }
      },
      "match": "(\\\\)(text(s(terling|ixoldstyle|urd|e(ction|venoldstyle|rvicemark))|yen|n(ineoldstyle|umero|aira)|c(ircledP|o(py(left|right)|lonmonetary)|urrency|e(nt(oldstyle)?|lsius))|t(hree(superior|oldstyle|quarters(emdash)?)|i(ldelow|mes)|w(o(superior|oldstyle)|elveudash)|rademark)|interrobang(down)?|zerooldstyle|o(hm|ne(superior|half|oldstyle|quarter)|penbullet|rd(feminine|masculine))|d(i(scount|ed|v(orced)?)|o(ng|wnarrow|llar(oldstyle)?)|egree|agger(dbl)?|blhyphen(char)?)|uparrow|p(ilcrow|e(so|r(t(housand|enthousand)|iodcentered))|aragraph|m)|e(stimated|ightoldstyle|uro)|quotes(traight(dblbase|base)|ingle)|f(iveoldstyle|ouroldstyle|lorin|ractionsolidus)|won|l(not|ira|e(ftarrow|af)|quill|angle|brackdbl)|a(s(cii(caron|dieresis|acute|grave|macron|breve)|teriskcentered)|cutedbl)|r(ightarrow|e(cipe|ferencemark|gistered)|quill|angle|brackdbl)|g(uarani|ravedbl)|m(ho|inus|u(sicalnote)?|arried)|b(igcircle|orn|ullet|lank|a(ht|rdbl)|rokenbar)))\\b",
      "name": "constant.character.latex"
    },
    {
      "captures": {
        "1": {
          "name": "punctuation.definition.column-specials.begin.latex"
        },
        "2": {
          "name": "punctuation.definition.column-specials.end.latex"
        }
      },
      "match": "(?:<|>)(\\{)\\$(\\})",
      "name": "meta.column-specials.latex"
    },
    {
      "include": "text.tex"
    }
  ],
  "repository": {
    "optional-arg": {
      "patterns": [
        {
          "captures": {
            "1": {
              "name": "punctuation.definition.optional.arguments.begin.latex"
            },
            "2": {
              "name": "variable.parameter.latex"
            },
            "3": {
              "name": "punctuation.definition.optional.arguments.end.latex"
            }
          },
          "match": "(\\[)([^\\[]*?)(\\])"
        }
      ]
    },
    "autocites-arg": {
      "patterns": [
        {
          "captures": {
            "1": {
              "name": "punctuation.definition.arguments.optional.begin.latex"
            },
            "2": {
              "name": "punctuation.definition.arguments.optional.end.latex"
            },
            "3": {
              "name": "punctuation.definition.arguments.optional.begin.latex"
            },
            "4": {
              "name": "punctuation.definition.arguments.optional.end.latex"
            },
            "5": {
              "name": "punctuation.definition.arguments.begin.latex"
            },
            "6": {
              "name": "constant.other.reference.citation.latex"
            },
            "7": {
              "name": "punctuation.definition.arguments.end.latex"
            },
            "8": {
              "patterns": [
                {
                  "include": "#autocites-arg"
                }
              ]
            }
          },
          "match": "(?:(\\[)[^\\]]*(\\]))?(?:(\\[)[^\\]]*(\\]))?(\\{)([\\w:.]+)(\\})(.*)"
        }
      ]
    },
    "minted-env": {
      "captures": {
        "1": {
          "name": "support.function.be.latex"
        },
        "2": {
          "name": "punctuation.definition.function.latex"
        },
        "3": {
          "name": "punctuation.definition.arguments.begin.latex"
        },
        "4": {
          "name": "variable.parameter.function.latex"
        },
        "5": {
          "name": "punctuation.definition.arguments.end.latex"
        },
        "6": {
          "name": "punctuation.definition.arguments.optional.begin.latex"
        },
        "7": {
          "name": "punctuation.definition.arguments.optional.end.latex"
        },
        "8": {
          "name": "punctuation.definition.arguments.begin.latex"
        },
        "9": {
          "name": "variable.parameter.function.latex"
        },
        "10": {
          "name": "punctuation.definition.arguments.end.latex"
        }
      },
      "match": "((\\\\)(?:begin|end))(\\{)(lstlisting|minted|pyglist)(\\})(?:(\\[).*(\\]))?(?:(\\{)([a-z]*)(\\}))?"
    },
    "code-env": {
      "captures": {
        "1": {
          "name": "support.function.be.latex"
        },
        "2": {
          "name": "punctuation.definition.function.latex"
        },
        "3": {
          "name": "punctuation.definition.arguments.begin.latex"
        },
        "4": {
          "name": "variable.parameter.function.latex"
        },
        "5": {
          "name": "punctuation.definition.arguments.end.latex"
        },
        "6": {
          "name": "punctuation.definition.arguments.optional.begin.latex"
        },
        "7": {
          "name": "punctuation.definition.arguments.optional.end.latex"
        }
      },
      "match": "(?:\\s*)((\\\\)(?:begin|end))(\\{)([a-z]*code(?:\\*)?|gnuplot|dot2tex|asy|sage[a-z]*)(\\})(?:(\\[).*(\\]))?"
    },
    "definition-label": {
      "begin": "((\\\\)label)(\\{)",
      "beginCaptures": {
        "1": {
          "name": "keyword.control.label.latex"
        },
        "2": {
          "name": "punctuation.definition.keyword.latex"
        },
        "3": {
          "name": "punctuation.definition.arguments.begin.latex"
        }
      },
      "end": "\\}",
      "endCaptures": {
        "0": {
          "name": "punctuation.definition.arguments.end.latex"
        }
      },
      "name": "meta.definition.label.latex",
      "patterns": [
        {
          "match": "[a-zA-Z0-9\\.,:/*!^_-]",
          "name": "variable.parameter.definition.label.latex"
        }
      ]
    }
  },
  "scopeName": "text.tex.latex"
}

mercurial