blob: 6381028de5bfae6c485d8622af7774a9468ad0eb [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001" Vim syntax file
2" Language: TeX
Bram Moolenaar97d62492012-11-15 21:28:22 +01003" Maintainer: Charles E. Campbell <NdrchipO@ScampbellPfamily.AbizM>
Bram Moolenaar723dd942019-04-04 13:11:03 +02004" Last Change: Apr 01, 2019
5" Version: 113
Bram Moolenaarac7bd632013-03-19 11:35:58 +01006" URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_TEX
Bram Moolenaar071d4272004-06-13 20:20:40 +00007"
8" Notes: {{{1
9"
10" 1. If you have a \begin{verbatim} that appears to overrun its boundaries,
11" use %stopzone.
12"
13" 2. Run-on equations ($..$ and $$..$$, particularly) can also be stopped
14" by suitable use of %stopzone.
15"
16" 3. If you have a slow computer, you may wish to modify
17"
18" syn sync maxlines=200
19" syn sync minlines=50
20"
21" to values that are more to your liking.
22"
23" 4. There is no match-syncing for $...$ and $$...$$; hence large
24" equation blocks constructed that way may exhibit syncing problems.
25" (there's no difference between begin/end patterns)
26"
27" 5. If you have the variable "g:tex_no_error" defined then none of the
28" lexical error-checking will be done.
29"
30" ie. let g:tex_no_error=1
Bram Moolenaara6878372014-03-22 21:02:50 +010031"
32" 6. Please see :help latex-syntax for information on
33" syntax folding :help tex-folding
34" spell checking :help tex-nospell
35" commands and mathzones :help tex-runon
36" new command highlighting :help tex-morecommands
37" error highlighting :help tex-error
38" new math groups :help tex-math
39" new styles :help tex-style
40" using conceal mode :help tex-conceal
Bram Moolenaar071d4272004-06-13 20:20:40 +000041
42" Version Clears: {{{1
Bram Moolenaar89bcfda2016-08-30 23:26:57 +020043" quit when a syntax file was already loaded
44if exists("b:current_syntax")
Bram Moolenaar071d4272004-06-13 20:20:40 +000045 finish
46endif
Bram Moolenaar15146672011-10-20 22:22:38 +020047let s:keepcpo= &cpo
48set cpo&vim
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +020049scriptencoding utf-8
Bram Moolenaar071d4272004-06-13 20:20:40 +000050
Bram Moolenaar543b7ef2013-06-01 14:50:56 +020051" by default, enable all region-based highlighting
52let s:tex_fast= "bcmMprsSvV"
53if exists("g:tex_fast")
54 if type(g:tex_fast) != 1
55 " g:tex_fast exists and is not a string, so
56 " turn off all optional region-based highighting
57 let s:tex_fast= ""
58 else
59 let s:tex_fast= g:tex_fast
60 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +000061endif
62
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +020063" let user determine which classes of concealment will be supported
Bram Moolenaar7fc0c062010-08-10 21:43:35 +020064" a=accents/ligatures d=delimiters m=math symbols g=Greek s=superscripts/subscripts
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +020065if !exists("g:tex_conceal")
Bram Moolenaarbc488a72013-07-05 21:01:22 +020066 let s:tex_conceal= 'abdmgsS'
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +020067else
68 let s:tex_conceal= g:tex_conceal
69endif
Bram Moolenaar6e932462014-09-09 18:48:09 +020070if !exists("g:tex_superscripts")
Bram Moolenaar802a0d92016-06-26 16:17:58 +020071 let s:tex_superscripts= '[0-9a-zA-W.,:;+-<>/()=]'
Bram Moolenaar03413f42016-04-12 21:07:15 +020072else
73 let s:tex_superscripts= g:tex_superscripts
Bram Moolenaar6e932462014-09-09 18:48:09 +020074endif
75if !exists("g:tex_subscripts")
Bram Moolenaar802a0d92016-06-26 16:17:58 +020076 let s:tex_subscripts= '[0-9aehijklmnoprstuvx,+-/().]'
Bram Moolenaar03413f42016-04-12 21:07:15 +020077else
78 let s:tex_subscripts= g:tex_subscripts
Bram Moolenaar6e932462014-09-09 18:48:09 +020079endif
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +020080
Bram Moolenaarf1f8bc52005-03-07 23:20:08 +000081" Determine whether or not to use "*.sty" mode {{{1
Bram Moolenaar071d4272004-06-13 20:20:40 +000082" The user may override the normal determination by setting
83" g:tex_stylish to 1 (for "*.sty" mode)
84" or to 0 else (normal "*.tex" mode)
85" or on a buffer-by-buffer basis with b:tex_stylish
Bram Moolenaar81af9252010-12-10 20:35:50 +010086let s:extfname=expand("%:e")
Bram Moolenaar071d4272004-06-13 20:20:40 +000087if exists("g:tex_stylish")
88 let b:tex_stylish= g:tex_stylish
89elseif !exists("b:tex_stylish")
Bram Moolenaar81af9252010-12-10 20:35:50 +010090 if s:extfname == "sty" || s:extfname == "cls" || s:extfname == "clo" || s:extfname == "dtx" || s:extfname == "ltx"
Bram Moolenaar071d4272004-06-13 20:20:40 +000091 let b:tex_stylish= 1
92 else
93 let b:tex_stylish= 0
94 endif
95endif
96
Bram Moolenaarf1f8bc52005-03-07 23:20:08 +000097" handle folding {{{1
98if !exists("g:tex_fold_enabled")
Bram Moolenaarb4ff5182015-11-10 21:15:48 +010099 let s:tex_fold_enabled= 0
Bram Moolenaarf1f8bc52005-03-07 23:20:08 +0000100elseif g:tex_fold_enabled && !has("folding")
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100101 let s:tex_fold_enabled= 0
Bram Moolenaarf1f8bc52005-03-07 23:20:08 +0000102 echomsg "Ignoring g:tex_fold_enabled=".g:tex_fold_enabled."; need to re-compile vim for +fold support"
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100103else
104 let s:tex_fold_enabled= 1
Bram Moolenaarf1f8bc52005-03-07 23:20:08 +0000105endif
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100106if s:tex_fold_enabled && &fdm == "manual"
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200107 setl fdm=syntax
Bram Moolenaarf1f8bc52005-03-07 23:20:08 +0000108endif
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100109if s:tex_fold_enabled && has("folding")
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100110 com! -nargs=* TexFold <args> fold
111else
112 com! -nargs=* TexFold <args>
113endif
Bram Moolenaarf1f8bc52005-03-07 23:20:08 +0000114
Bram Moolenaaradc21822011-04-01 18:03:16 +0200115" (La)TeX keywords: uses the characters 0-9,a-z,A-Z,192-255 only... {{{1
Bram Moolenaar071d4272004-06-13 20:20:40 +0000116" but _ is the only one that causes problems.
Bram Moolenaaradc21822011-04-01 18:03:16 +0200117" One may override this iskeyword setting by providing
118" g:tex_isk
119if exists("g:tex_isk")
Bram Moolenaarbc8801c2016-08-02 21:04:33 +0200120 if b:tex_stylish && g:tex_isk !~ '@'
121 let b:tex_isk= '@,'.g:tex_isk
122 else
123 let b:tex_isk= g:tex_isk
124 endif
125elseif b:tex_stylish
126 let b:tex_isk="@,48-57,a-z,A-Z,192-255"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000127else
Bram Moolenaarbc8801c2016-08-02 21:04:33 +0200128 let b:tex_isk="48-57,a-z,A-Z,192-255"
Bram Moolenaaradc21822011-04-01 18:03:16 +0200129endif
Bram Moolenaar723dd942019-04-04 13:11:03 +0200130if (v:version == 704 && has("patch-7.4.1142")) || v:version > 704
Bram Moolenaarbc8801c2016-08-02 21:04:33 +0200131 exe "syn iskeyword ".b:tex_isk
132else
133 exe "setl isk=".b:tex_isk
Bram Moolenaar071d4272004-06-13 20:20:40 +0000134endif
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100135if exists("g:tex_no_error") && g:tex_no_error
136 let s:tex_no_error= 1
137else
138 let s:tex_no_error= 0
139endif
140if exists("g:tex_comment_nospell") && g:tex_comment_nospell
141 let s:tex_comment_nospell= 1
142else
143 let s:tex_comment_nospell= 0
144endif
145if exists("g:tex_nospell") && g:tex_nospell
146 let s:tex_nospell = 1
147else
148 let s:tex_nospell = 0
Bram Moolenaard960d762011-09-21 19:22:10 +0200149endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000150
151" Clusters: {{{1
152" --------
Bram Moolenaarbc8801c2016-08-02 21:04:33 +0200153syn cluster texCmdGroup contains=texCmdBody,texComment,texDefParm,texDelimiter,texDocType,texInput,texLength,texLigature,texMathDelim,texMathOper,texNewCmd,texNewEnv,texRefZone,texSection,texBeginEnd,texBeginEndName,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,@texMathZones
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100154if !s:tex_no_error
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100155 syn cluster texCmdGroup add=texMathError
Bram Moolenaar071d4272004-06-13 20:20:40 +0000156endif
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100157syn cluster texEnvGroup contains=texMatcher,texMathDelim,texSpecialChar,texStatement
Bram Moolenaar723dd942019-04-04 13:11:03 +0200158syn cluster texFoldGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texInputFile,texLength,texLigature,texMatcher,texMathZoneV,texMathZoneW,texMathZoneX,texMathZoneY,texMathZoneZ,texNewCmd,texNewEnv,texOnlyMath,texOption,texParen,texRefZone,texSection,texBeginEnd,texSectionZone,texSpaceCode,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,@texMathZones,texTitle,texAbstract,texBoldStyle,texItalStyle,texEmphStyle,texNoSpell
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100159syn cluster texBoldGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texInputFile,texLength,texLigature,texMatcher,texMathZoneV,texMathZoneW,texMathZoneX,texMathZoneY,texMathZoneZ,texNewCmd,texNewEnv,texOnlyMath,texOption,texParen,texRefZone,texSection,texBeginEnd,texSectionZone,texSpaceCode,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,@texMathZones,texTitle,texAbstract,texBoldStyle,texBoldItalStyle,texNoSpell
Bram Moolenaar723dd942019-04-04 13:11:03 +0200160syn cluster texItalGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texInputFile,texLength,texLigature,texMatcher,texMathZoneV,texMathZoneW,texMathZoneX,texMathZoneY,texMathZoneZ,texNewCmd,texNewEnv,texOnlyMath,texOption,texParen,texRefZone,texSection,texBeginEnd,texSectionZone,texSpaceCode,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,@texMathZones,texTitle,texAbstract,texItalStyle,texEmphStyle,texItalBoldStyle,texNoSpell
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100161if !s:tex_nospell
Bram Moolenaarb730f0c2018-11-25 03:56:26 +0100162 syn cluster texMatchGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texMatcher,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texBoldStyle,texBoldItalStyle,texItalStyle,texItalBoldStyle,texZone,texInputFile,texOption,@Spell
163 syn cluster texMatchNMGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texMatcherNM,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texBoldStyle,texBoldItalStyle,texItalStyle,texItalBoldStyle,texZone,texInputFile,texOption,@Spell
164 syn cluster texStyleGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texBoldStyle,texBoldItalStyle,texItalStyle,texItalBoldStyle,texZone,texInputFile,texOption,texStyleStatement,texStyleMatcher,@Spell
Bram Moolenaard960d762011-09-21 19:22:10 +0200165else
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100166 syn cluster texMatchGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texMatcher,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,texInputFile,texOption
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +0200167 syn cluster texMatchNMGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texMatcherNM,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,texInputFile,texOption
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100168 syn cluster texStyleGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,texInputFile,texOption,texStyleStatement,texStyleMatcher
Bram Moolenaard960d762011-09-21 19:22:10 +0200169endif
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +0200170syn cluster texPreambleMatchGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texMatcherNM,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTitle,texTypeSize,texTypeStyle,texZone,texInputFile,texOption,texMathZoneZ
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100171syn cluster texRefGroup contains=texMatcher,texComment,texDelimiter
Bram Moolenaare2719092015-01-10 15:09:25 +0100172if !exists("g:tex_no_math")
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +0200173 syn cluster texPreambleMatchGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texMatcherNM,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTitle,texTypeSize,texTypeStyle,texZone,texInputFile,texOption,texMathZoneZ
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100174 syn cluster texMathZones contains=texMathZoneV,texMathZoneW,texMathZoneX,texMathZoneY,texMathZoneZ
175 syn cluster texMatchGroup add=@texMathZones
176 syn cluster texMathDelimGroup contains=texMathDelimBad,texMathDelimKey,texMathDelimSet1,texMathDelimSet2
177 syn cluster texMathMatchGroup contains=@texMathZones,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texMathDelim,texMathMatcher,texMathOper,texNewCmd,texNewEnv,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone
178 syn cluster texMathZoneGroup contains=texComment,texDelimiter,texLength,texMathDelim,texMathMatcher,texMathOper,texMathSymbol,texMathText,texRefZone,texSpecialChar,texStatement,texTypeSize,texTypeStyle
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100179 if !s:tex_no_error
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100180 syn cluster texMathMatchGroup add=texMathError
181 syn cluster texMathZoneGroup add=texMathError
Bram Moolenaar071d4272004-06-13 20:20:40 +0000182 endif
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100183 syn cluster texMathZoneGroup add=@NoSpell
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +0000184 " following used in the \part \chapter \section \subsection \subsubsection
185 " \paragraph \subparagraph \author \title highlighting
186 syn cluster texDocGroup contains=texPartZone,@texPartGroup
187 syn cluster texPartGroup contains=texChapterZone,texSectionZone,texParaZone
188 syn cluster texChapterGroup contains=texSectionZone,texParaZone
189 syn cluster texSectionGroup contains=texSubSectionZone,texParaZone
190 syn cluster texSubSectionGroup contains=texSubSubSectionZone,texParaZone
191 syn cluster texSubSubSectionGroup contains=texParaZone
192 syn cluster texParaGroup contains=texSubParaZone
Bram Moolenaarb2c03502010-07-02 20:20:09 +0200193 if has("conceal") && &enc == 'utf-8'
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100194 syn cluster texMathZoneGroup add=texGreek,texSuperscript,texSubscript,texMathSymbol
195 syn cluster texMathMatchGroup add=texGreek,texSuperscript,texSubscript,texMathSymbol
Bram Moolenaarb2c03502010-07-02 20:20:09 +0200196 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000197endif
198
199" Try to flag {} and () mismatches: {{{1
Bram Moolenaarf3913272016-02-25 00:00:01 +0100200if s:tex_fast =~# 'm'
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100201 if !s:tex_no_error
Bram Moolenaar802a0d92016-06-26 16:17:58 +0200202 syn region texMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" transparent contains=@texMatchGroup,texError
203 syn region texMatcher matchgroup=Delimiter start="\[" end="]" transparent contains=@texMatchGroup,texError,@NoSpell
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +0200204 syn region texMatcherNM matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" transparent contains=@texMatchNMGroup,texError
205 syn region texMatcherNM matchgroup=Delimiter start="\[" end="]" transparent contains=@texMatchNMGroup,texError,@NoSpell
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100206 else
Bram Moolenaar802a0d92016-06-26 16:17:58 +0200207 syn region texMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" transparent contains=@texMatchGroup
208 syn region texMatcher matchgroup=Delimiter start="\[" end="]" transparent contains=@texMatchGroup
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +0200209 syn region texMatcherNM matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" transparent contains=@texMatchNMGroup
210 syn region texMatcherNM matchgroup=Delimiter start="\[" end="]" transparent contains=@texMatchNMGroup
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100211 endif
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100212 if !s:tex_nospell
Bram Moolenaar802a0d92016-06-26 16:17:58 +0200213 syn region texParen start="(" end=")" transparent contains=@texMatchGroup,@Spell
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100214 else
Bram Moolenaar802a0d92016-06-26 16:17:58 +0200215 syn region texParen start="(" end=")" transparent contains=@texMatchGroup
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100216 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000217endif
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100218if !s:tex_no_error
Bram Moolenaar071d4272004-06-13 20:20:40 +0000219 syn match texError "[}\])]"
220endif
Bram Moolenaarf3913272016-02-25 00:00:01 +0100221if s:tex_fast =~# 'M'
Bram Moolenaare2719092015-01-10 15:09:25 +0100222 if !exists("g:tex_no_math")
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100223 if !s:tex_no_error
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100224 syn match texMathError "}" contained
225 endif
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100226 syn region texMathMatcher matchgroup=Delimiter start="{" skip="\%(\\\\\)*\\}" end="}" end="%stopzone\>" contained contains=@texMathMatchGroup
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100227 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000228endif
229
230" TeX/LaTeX keywords: {{{1
231" Instead of trying to be All Knowing, I just match \..alphameric..
232" Note that *.tex files may not have "@" in their \commands
233if exists("g:tex_tex") || b:tex_stylish
234 syn match texStatement "\\[a-zA-Z@]\+"
235else
236 syn match texStatement "\\\a\+"
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100237 if !s:tex_no_error
Bram Moolenaar071d4272004-06-13 20:20:40 +0000238 syn match texError "\\\a*@[a-zA-Z@]*"
239 endif
240endif
241
242" TeX/LaTeX delimiters: {{{1
243syn match texDelimiter "&"
244syn match texDelimiter "\\\\"
245
246" Tex/Latex Options: {{{1
Bram Moolenaard38b0552012-04-25 19:07:41 +0200247syn match texOption "[^\\]\zs#\d\+\|^#\d\+"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000248
249" texAccent (tnx to Karim Belabas) avoids annoying highlighting for accents: {{{1
250if b:tex_stylish
251 syn match texAccent "\\[bcdvuH][^a-zA-Z@]"me=e-1
252 syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)[^a-zA-Z@]"me=e-1
253else
254 syn match texAccent "\\[bcdvuH]\A"me=e-1
255 syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)\A"me=e-1
256endif
257syn match texAccent "\\[bcdvuH]$"
258syn match texAccent +\\[=^.\~"`']+
259syn match texAccent +\\['=t'.c^ud"vb~Hr]{\a}+
260syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)$"
261
Bram Moolenaarb0d45e72017-11-05 18:19:24 +0100262
Bram Moolenaar071d4272004-06-13 20:20:40 +0000263" \begin{}/\end{} section markers: {{{1
Bram Moolenaard38b0552012-04-25 19:07:41 +0200264syn match texBeginEnd "\\begin\>\|\\end\>" nextgroup=texBeginEndName
Bram Moolenaarf3913272016-02-25 00:00:01 +0100265if s:tex_fast =~# 'm'
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100266 syn region texBeginEndName matchgroup=Delimiter start="{" end="}" contained nextgroup=texBeginEndModifier contains=texComment
Bram Moolenaar802a0d92016-06-26 16:17:58 +0200267 syn region texBeginEndModifier matchgroup=Delimiter start="\[" end="]" contained contains=texComment,@texMathZones,@NoSpell
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100268endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000269
270" \documentclass, \documentstyle, \usepackage: {{{1
Bram Moolenaard38b0552012-04-25 19:07:41 +0200271syn match texDocType "\\documentclass\>\|\\documentstyle\>\|\\usepackage\>" nextgroup=texBeginEndName,texDocTypeArgs
Bram Moolenaarf3913272016-02-25 00:00:01 +0100272if s:tex_fast =~# 'm'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100273 syn region texDocTypeArgs matchgroup=Delimiter start="\[" end="]" contained nextgroup=texBeginEndName contains=texComment,@NoSpell
274endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000275
Bram Moolenaara9a568c2006-03-14 23:04:27 +0000276" Preamble syntax-based folding support: {{{1
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100277if s:tex_fold_enabled && has("folding")
Bram Moolenaard38b0552012-04-25 19:07:41 +0200278 syn region texPreamble transparent fold start='\zs\\documentclass\>' end='\ze\\begin{document}' contains=texStyle,@texPreambleMatchGroup
Bram Moolenaara9a568c2006-03-14 23:04:27 +0000279endif
280
Bram Moolenaar071d4272004-06-13 20:20:40 +0000281" TeX input: {{{1
282syn match texInput "\\input\s\+[a-zA-Z/.0-9_^]\+"hs=s+7 contains=texStatement
Bram Moolenaar5c736222010-01-06 20:54:52 +0100283syn match texInputFile "\\include\(graphics\|list\)\=\(\[.\{-}\]\)\=\s*{.\{-}}" contains=texStatement,texInputCurlies,texInputFileOpt
Bram Moolenaar071d4272004-06-13 20:20:40 +0000284syn match texInputFile "\\\(epsfig\|input\|usepackage\)\s*\(\[.*\]\)\={.\{-}}" contains=texStatement,texInputCurlies,texInputFileOpt
285syn match texInputCurlies "[{}]" contained
Bram Moolenaarf3913272016-02-25 00:00:01 +0100286if s:tex_fast =~# 'm'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100287 syn region texInputFileOpt matchgroup=Delimiter start="\[" end="\]" contained contains=texComment
288endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000289
290" Type Styles (LaTeX 2.09): {{{1
291syn match texTypeStyle "\\rm\>"
292syn match texTypeStyle "\\em\>"
293syn match texTypeStyle "\\bf\>"
294syn match texTypeStyle "\\it\>"
295syn match texTypeStyle "\\sl\>"
296syn match texTypeStyle "\\sf\>"
297syn match texTypeStyle "\\sc\>"
298syn match texTypeStyle "\\tt\>"
299
300" Type Styles: attributes, commands, families, etc (LaTeX2E): {{{1
Bram Moolenaar7db8f6f2016-03-29 23:12:46 +0200301if s:tex_conceal !~# 'b'
Bram Moolenaard38b0552012-04-25 19:07:41 +0200302 syn match texTypeStyle "\\textbf\>"
303 syn match texTypeStyle "\\textit\>"
Bram Moolenaar723dd942019-04-04 13:11:03 +0200304 syn match texTypeStyle "\\emph\>"
Bram Moolenaard38b0552012-04-25 19:07:41 +0200305endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000306syn match texTypeStyle "\\textmd\>"
307syn match texTypeStyle "\\textrm\>"
308syn match texTypeStyle "\\textsc\>"
309syn match texTypeStyle "\\textsf\>"
310syn match texTypeStyle "\\textsl\>"
311syn match texTypeStyle "\\texttt\>"
312syn match texTypeStyle "\\textup\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000313
314syn match texTypeStyle "\\mathbb\>"
315syn match texTypeStyle "\\mathbf\>"
316syn match texTypeStyle "\\mathcal\>"
317syn match texTypeStyle "\\mathfrak\>"
318syn match texTypeStyle "\\mathit\>"
319syn match texTypeStyle "\\mathnormal\>"
320syn match texTypeStyle "\\mathrm\>"
321syn match texTypeStyle "\\mathsf\>"
322syn match texTypeStyle "\\mathtt\>"
323
324syn match texTypeStyle "\\rmfamily\>"
325syn match texTypeStyle "\\sffamily\>"
326syn match texTypeStyle "\\ttfamily\>"
327
328syn match texTypeStyle "\\itshape\>"
329syn match texTypeStyle "\\scshape\>"
330syn match texTypeStyle "\\slshape\>"
331syn match texTypeStyle "\\upshape\>"
332
333syn match texTypeStyle "\\bfseries\>"
334syn match texTypeStyle "\\mdseries\>"
335
336" Some type sizes: {{{1
337syn match texTypeSize "\\tiny\>"
338syn match texTypeSize "\\scriptsize\>"
339syn match texTypeSize "\\footnotesize\>"
340syn match texTypeSize "\\small\>"
341syn match texTypeSize "\\normalsize\>"
342syn match texTypeSize "\\large\>"
343syn match texTypeSize "\\Large\>"
344syn match texTypeSize "\\LARGE\>"
345syn match texTypeSize "\\huge\>"
346syn match texTypeSize "\\Huge\>"
347
348" Spacecodes (TeX'isms): {{{1
349" \mathcode`\^^@="2201 \delcode`\(="028300 \sfcode`\)=0 \uccode`X=`X \lccode`x=`x
350syn match texSpaceCode "\\\(math\|cat\|del\|lc\|sf\|uc\)code`"me=e-1 nextgroup=texSpaceCodeChar
351syn match texSpaceCodeChar "`\\\=.\(\^.\)\==\(\d\|\"\x\{1,6}\|`.\)" contained
352
353" Sections, subsections, etc: {{{1
Bram Moolenaarf3913272016-02-25 00:00:01 +0100354if s:tex_fast =~# 'p'
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100355 if !s:tex_nospell
356 TexFold syn region texDocZone matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}' contains=@texFoldGroup,@texDocGroup,@Spell
357 TexFold syn region texPartZone matchgroup=texSection start='\\part\>' end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texPartGroup,@Spell
358 TexFold syn region texChapterZone matchgroup=texSection start='\\chapter\>' end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texChapterGroup,@Spell
359 TexFold syn region texSectionZone matchgroup=texSection start='\\section\>' end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSectionGroup,@Spell
360 TexFold syn region texSubSectionZone matchgroup=texSection start='\\subsection\>' end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSectionGroup,@Spell
361 TexFold syn region texSubSubSectionZone matchgroup=texSection start='\\subsubsection\>' end='\ze\s*\\\%(\%(sub\)\{,2}section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSubSectionGroup,@Spell
362 TexFold syn region texParaZone matchgroup=texSection start='\\paragraph\>' end='\ze\s*\\\%(paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texParaGroup,@Spell
363 TexFold syn region texSubParaZone matchgroup=texSection start='\\subparagraph\>' end='\ze\s*\\\%(\%(sub\)\=paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@Spell
364 TexFold syn region texTitle matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}' contains=@texFoldGroup,@Spell
365 TexFold syn region texAbstract matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}' contains=@texFoldGroup,@Spell
366 else
367 TexFold syn region texDocZone matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}' contains=@texFoldGroup,@texDocGroup
368 TexFold syn region texPartZone matchgroup=texSection start='\\part\>' end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texPartGroup
369 TexFold syn region texChapterZone matchgroup=texSection start='\\chapter\>' end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texChapterGroup
370 TexFold syn region texSectionZone matchgroup=texSection start='\\section\>' end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSectionGroup
371 TexFold syn region texSubSectionZone matchgroup=texSection start='\\subsection\>' end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSectionGroup
372 TexFold syn region texSubSubSectionZone matchgroup=texSection start='\\subsubsection\>' end='\ze\s*\\\%(\%(sub\)\{,2}section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSubSectionGroup
373 TexFold syn region texParaZone matchgroup=texSection start='\\paragraph\>' end='\ze\s*\\\%(paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texParaGroup
374 TexFold syn region texSubParaZone matchgroup=texSection start='\\subparagraph\>' end='\ze\s*\\\%(\%(sub\)\=paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup
375 TexFold syn region texTitle matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}' contains=@texFoldGroup
376 TexFold syn region texAbstract matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}' contains=@texFoldGroup
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100377 endif
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000378endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000379
Bram Moolenaard38b0552012-04-25 19:07:41 +0200380" particular support for bold and italic {{{1
Bram Moolenaarf3913272016-02-25 00:00:01 +0100381if s:tex_fast =~# 'b'
382 if s:tex_conceal =~# 'b'
Bram Moolenaar83d1b192015-04-13 14:22:40 +0200383 if !exists("g:tex_nospell") || !g:tex_nospell
Bram Moolenaar541f92d2015-06-19 13:27:23 +0200384 syn region texBoldStyle matchgroup=texTypeStyle start="\\textbf\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup,@Spell
385 syn region texBoldItalStyle matchgroup=texTypeStyle start="\\textit\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup,@Spell
386 syn region texItalStyle matchgroup=texTypeStyle start="\\textit\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup,@Spell
387 syn region texItalBoldStyle matchgroup=texTypeStyle start="\\textbf\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup,@Spell
Bram Moolenaar723dd942019-04-04 13:11:03 +0200388 syn region texEmphStyle matchgroup=texTypeStyle start="\\emph\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup,@Spell
Bram Moolenaar541f92d2015-06-19 13:27:23 +0200389 else
390 syn region texBoldStyle matchgroup=texTypeStyle start="\\textbf\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup
391 syn region texBoldItalStyle matchgroup=texTypeStyle start="\\textit\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup
392 syn region texItalStyle matchgroup=texTypeStyle start="\\textit\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup
393 syn region texItalBoldStyle matchgroup=texTypeStyle start="\\textbf\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup
Bram Moolenaar723dd942019-04-04 13:11:03 +0200394 syn region texEmphStyle matchgroup=texTypeStyle start="\\emph\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup
Bram Moolenaar83d1b192015-04-13 14:22:40 +0200395 endif
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100396 endif
Bram Moolenaard38b0552012-04-25 19:07:41 +0200397endif
398
Bram Moolenaar071d4272004-06-13 20:20:40 +0000399" Bad Math (mismatched): {{{1
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100400if !exists("g:tex_no_math") && !s:tex_no_error
Bram Moolenaar51ad4ea2018-04-06 11:14:11 +0200401 syn match texBadMath "\\end\s*{\s*\(array\|[bBpvV]matrix\|split\|smallmatrix\)\s*}"
Bram Moolenaarf0b03c42017-12-17 17:17:07 +0100402 syn match texBadMath "\\end\s*{\s*\(displaymath\|equation\|eqnarray\|math\)\*\=\s*}"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000403 syn match texBadMath "\\[\])]"
404endif
405
406" Math Zones: {{{1
Bram Moolenaare2719092015-01-10 15:09:25 +0100407if !exists("g:tex_no_math")
Bram Moolenaar488c6512005-08-11 20:09:58 +0000408 " TexNewMathZone: function creates a mathzone with the given suffix and mathzone name. {{{2
Bram Moolenaar071d4272004-06-13 20:20:40 +0000409 " Starred forms are created if starform is true. Starred
410 " forms have syntax group and synchronization groups with a
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +0200411 " "S" appended. Handles: cluster, syntax, sync, and highlighting.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000412 fun! TexNewMathZone(sfx,mathzone,starform)
413 let grpname = "texMathZone".a:sfx
414 let syncname = "texSyncMathZone".a:sfx
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100415 if s:tex_fold_enabled
Bram Moolenaar3577c6f2008-06-24 21:16:56 +0000416 let foldcmd= " fold"
417 else
418 let foldcmd= ""
419 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000420 exe "syn cluster texMathZones add=".grpname
Bram Moolenaarf3913272016-02-25 00:00:01 +0100421 if s:tex_fast =~# 'M'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100422 exe 'syn region '.grpname.' start='."'".'\\begin\s*{\s*'.a:mathzone.'\s*}'."'".' end='."'".'\\end\s*{\s*'.a:mathzone.'\s*}'."'".' keepend contains=@texMathZoneGroup'.foldcmd
423 exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
424 exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
425 endif
Bram Moolenaar5c736222010-01-06 20:54:52 +0100426 exe 'hi def link '.grpname.' texMath'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000427 if a:starform
428 let grpname = "texMathZone".a:sfx.'S'
429 let syncname = "texSyncMathZone".a:sfx.'S'
430 exe "syn cluster texMathZones add=".grpname
Bram Moolenaarf3913272016-02-25 00:00:01 +0100431 if s:tex_fast =~# 'M'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100432 exe 'syn region '.grpname.' start='."'".'\\begin\s*{\s*'.a:mathzone.'\*\s*}'."'".' end='."'".'\\end\s*{\s*'.a:mathzone.'\*\s*}'."'".' keepend contains=@texMathZoneGroup'.foldcmd
433 exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
434 exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
435 endif
Bram Moolenaar5c736222010-01-06 20:54:52 +0100436 exe 'hi def link '.grpname.' texMath'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000437 endif
438 endfun
439
440 " Standard Math Zones: {{{2
Bram Moolenaarf0b03c42017-12-17 17:17:07 +0100441 call TexNewMathZone("A","displaymath",1)
442 call TexNewMathZone("B","eqnarray",1)
443 call TexNewMathZone("C","equation",1)
444 call TexNewMathZone("D","math",1)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000445
446 " Inline Math Zones: {{{2
Bram Moolenaarf3913272016-02-25 00:00:01 +0100447 if s:tex_fast =~# 'M'
448 if has("conceal") && &enc == 'utf-8' && s:tex_conceal =~# 'd'
Bram Moolenaar541f92d2015-06-19 13:27:23 +0200449 syn region texMathZoneV matchgroup=Delimiter start="\\(" matchgroup=Delimiter end="\\)\|%stopzone\>" keepend concealends contains=@texMathZoneGroup
450 syn region texMathZoneW matchgroup=Delimiter start="\\\[" matchgroup=Delimiter end="\\]\|%stopzone\>" keepend concealends contains=@texMathZoneGroup
451 syn region texMathZoneX matchgroup=Delimiter start="\$" skip="\\\\\|\\\$" matchgroup=Delimiter end="\$" end="%stopzone\>" concealends contains=@texMathZoneGroup
452 syn region texMathZoneY matchgroup=Delimiter start="\$\$" matchgroup=Delimiter end="\$\$" end="%stopzone\>" keepend concealends contains=@texMathZoneGroup
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100453 else
Bram Moolenaar541f92d2015-06-19 13:27:23 +0200454 syn region texMathZoneV matchgroup=Delimiter start="\\(" matchgroup=Delimiter end="\\)\|%stopzone\>" keepend contains=@texMathZoneGroup
455 syn region texMathZoneW matchgroup=Delimiter start="\\\[" matchgroup=Delimiter end="\\]\|%stopzone\>" keepend contains=@texMathZoneGroup
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100456 syn region texMathZoneX matchgroup=Delimiter start="\$" skip="\%(\\\\\)*\\\$" matchgroup=Delimiter end="\$" end="%stopzone\>" contains=@texMathZoneGroup
Bram Moolenaar541f92d2015-06-19 13:27:23 +0200457 syn region texMathZoneY matchgroup=Delimiter start="\$\$" matchgroup=Delimiter end="\$\$" end="%stopzone\>" keepend contains=@texMathZoneGroup
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100458 endif
Bram Moolenaar541f92d2015-06-19 13:27:23 +0200459 syn region texMathZoneZ matchgroup=texStatement start="\\ensuremath\s*{" matchgroup=texStatement end="}" end="%stopzone\>" contains=@texMathZoneGroup
Bram Moolenaare0021c72010-07-28 17:25:21 +0200460 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000461
462 syn match texMathOper "[_^=]" contained
463
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200464 " Text Inside Math Zones: {{{2
Bram Moolenaarf3913272016-02-25 00:00:01 +0100465 if s:tex_fast =~# 'M'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100466 if !exists("g:tex_nospell") || !g:tex_nospell
467 syn region texMathText matchgroup=texStatement start='\\\(\(inter\)\=text\|mbox\)\s*{' end='}' contains=@texFoldGroup,@Spell
468 else
469 syn region texMathText matchgroup=texStatement start='\\\(\(inter\)\=text\|mbox\)\s*{' end='}' contains=@texFoldGroup
470 endif
Bram Moolenaard960d762011-09-21 19:22:10 +0200471 endif
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200472
Bram Moolenaar071d4272004-06-13 20:20:40 +0000473 " \left..something.. and \right..something.. support: {{{2
474 syn match texMathDelimBad contained "\S"
Bram Moolenaarf3913272016-02-25 00:00:01 +0100475 if has("conceal") && &enc == 'utf-8' && s:tex_conceal =~# 'm'
Bram Moolenaarbc8801c2016-08-02 21:04:33 +0200476 syn match texMathDelim contained "\\left\["
477 syn match texMathDelim contained "\\left\\{" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad contains=texMathSymbol cchar={
478 syn match texMathDelim contained "\\right\\}" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad contains=texMathSymbol cchar=}
Bram Moolenaaradc21822011-04-01 18:03:16 +0200479 let s:texMathDelimList=[
480 \ ['<' , '<'] ,
481 \ ['>' , '>'] ,
482 \ ['(' , '('] ,
483 \ [')' , ')'] ,
484 \ ['\[' , '['] ,
485 \ [']' , ']'] ,
486 \ ['\\{' , '{'] ,
487 \ ['\\}' , '}'] ,
488 \ ['|' , '|'] ,
489 \ ['\\|' , '‖'] ,
490 \ ['\\backslash' , '\'] ,
491 \ ['\\downarrow' , '↓'] ,
492 \ ['\\Downarrow' , '⇓'] ,
Bram Moolenaaradc21822011-04-01 18:03:16 +0200493 \ ['\\lbrace' , '['] ,
494 \ ['\\lceil' , '⌈'] ,
495 \ ['\\lfloor' , '⌊'] ,
496 \ ['\\lgroup' , '⌊'] ,
497 \ ['\\lmoustache' , '⎛'] ,
Bram Moolenaaradc21822011-04-01 18:03:16 +0200498 \ ['\\rbrace' , ']'] ,
499 \ ['\\rceil' , '⌉'] ,
500 \ ['\\rfloor' , '⌋'] ,
501 \ ['\\rgroup' , '⌋'] ,
502 \ ['\\rmoustache' , '⎞'] ,
503 \ ['\\uparrow' , '↑'] ,
504 \ ['\\Uparrow' , '↑'] ,
505 \ ['\\updownarrow', '↕'] ,
506 \ ['\\Updownarrow', '⇕']]
Bram Moolenaar690afe12017-01-28 18:34:47 +0100507 if &ambw == "double" || exists("g:tex_usedblwidth")
508 let s:texMathDelimList= s:texMathDelimList + [
509 \ ['\\langle' , '〈'] ,
Bram Moolenaar7f2e9d72017-11-11 20:58:53 +0100510 \ ['\\rangle' , '〉']]
Bram Moolenaar690afe12017-01-28 18:34:47 +0100511 else
512 let s:texMathDelimList= s:texMathDelimList + [
513 \ ['\\langle' , '<'] ,
514 \ ['\\rangle' , '>']]
515 endif
Bram Moolenaaradc21822011-04-01 18:03:16 +0200516 syn match texMathDelim '\\[bB]igg\=[lr]' contained nextgroup=texMathDelimBad
517 for texmath in s:texMathDelimList
518 exe "syn match texMathDelim '\\\\[bB]igg\\=[lr]\\=".texmath[0]."' contained conceal cchar=".texmath[1]
519 endfor
520
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200521 else
522 syn match texMathDelim contained "\\\(left\|right\)\>" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad
Bram Moolenaaradc21822011-04-01 18:03:16 +0200523 syn match texMathDelim contained "\\[bB]igg\=[lr]\=\>" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad
524 syn match texMathDelimSet2 contained "\\" nextgroup=texMathDelimKey,texMathDelimBad
525 syn match texMathDelimSet1 contained "[<>()[\]|/.]\|\\[{}|]"
526 syn keyword texMathDelimKey contained backslash lceil lVert rgroup uparrow
527 syn keyword texMathDelimKey contained downarrow lfloor rangle rmoustache Uparrow
528 syn keyword texMathDelimKey contained Downarrow lgroup rbrace rvert updownarrow
529 syn keyword texMathDelimKey contained langle lmoustache rceil rVert Updownarrow
530 syn keyword texMathDelimKey contained lbrace lvert rfloor
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200531 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000532 syn match texMathDelim contained "\\\(left\|right\)arrow\>\|\<\([aA]rrow\|brace\)\=vert\>"
533 syn match texMathDelim contained "\\lefteqn\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000534endif
535
536" Special TeX characters ( \$ \& \% \# \{ \} \_ \S \P ) : {{{1
537syn match texSpecialChar "\\[$&%#{}_]"
538if b:tex_stylish
539 syn match texSpecialChar "\\[SP@][^a-zA-Z@]"me=e-1
540else
541 syn match texSpecialChar "\\[SP@]\A"me=e-1
542endif
543syn match texSpecialChar "\\\\"
Bram Moolenaare2719092015-01-10 15:09:25 +0100544if !exists("g:tex_no_math")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000545 syn match texOnlyMath "[_^]"
546endif
547syn match texSpecialChar "\^\^[0-9a-f]\{2}\|\^\^\S"
Bram Moolenaar7db8f6f2016-03-29 23:12:46 +0200548if s:tex_conceal !~# 'S'
Bram Moolenaarbc488a72013-07-05 21:01:22 +0200549 syn match texSpecialChar '\\glq\>' contained conceal cchar=‚
550 syn match texSpecialChar '\\grq\>' contained conceal cchar=‘
551 syn match texSpecialChar '\\glqq\>' contained conceal cchar=„
552 syn match texSpecialChar '\\grqq\>' contained conceal cchar=“
553 syn match texSpecialChar '\\hyp\>' contained conceal cchar=-
554endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000555
556" Comments: {{{1
557" Normal TeX LaTeX : %....
558" Documented TeX Format: ^^A... -and- leading %s (only)
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100559if !s:tex_comment_nospell
Bram Moolenaar3577c6f2008-06-24 21:16:56 +0000560 syn cluster texCommentGroup contains=texTodo,@Spell
561else
562 syn cluster texCommentGroup contains=texTodo,@NoSpell
563endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000564syn case ignore
Bram Moolenaar18144c82006-04-12 21:52:12 +0000565syn keyword texTodo contained combak fixme todo xxx
Bram Moolenaar071d4272004-06-13 20:20:40 +0000566syn case match
Bram Moolenaar81af9252010-12-10 20:35:50 +0100567if s:extfname == "dtx"
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100568 syn match texComment "\^\^A.*$" contains=@texCommentGroup
569 syn match texComment "^%\+" contains=@texCommentGroup
Bram Moolenaar071d4272004-06-13 20:20:40 +0000570else
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100571 if s:tex_fold_enabled
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100572 " allows syntax-folding of 2 or more contiguous comment lines
573 " single-line comments are not folded
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100574 syn match texComment "%.*$" contains=@texCommentGroup
Bram Moolenaarf3913272016-02-25 00:00:01 +0100575 if s:tex_fast =~# 'c'
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100576 TexFold syn region texComment start="^\zs\s*%.*\_s*%" skip="^\s*%" end='^\ze\s*[^%]' contains=@texCommentGroup
577 TexFold syn region texNoSpell contained matchgroup=texComment start="%\s*nospell\s*{" end="%\s*nospell\s*}" contains=@texFoldGroup,@NoSpell
Bram Moolenaarfd2ac762006-03-01 22:09:21 +0000578 endif
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100579 else
580 syn match texComment "%.*$" contains=@texCommentGroup
Bram Moolenaarf3913272016-02-25 00:00:01 +0100581 if s:tex_fast =~# 'c'
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100582 syn region texNoSpell contained matchgroup=texComment start="%\s*nospell\s*{" end="%\s*nospell\s*}" contains=@texFoldGroup,@NoSpell
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100583 endif
584 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000585endif
586
Bram Moolenaarb0d45e72017-11-05 18:19:24 +0100587" %begin-include ... %end-include acts like a texDocZone for \include'd files. Permits spell checking, for example, in such files.
588if !s:tex_nospell
589 TexFold syn region texDocZone matchgroup=texSection start='^\s*%begin-include\>' end='^\s*%end-include\>' contains=@texFoldGroup,@texDocGroup,@Spell
590else
591 TexFold syn region texDocZone matchgroup=texSection start='^\s*%begin-include\>' end='^\s*%end-include\>' contains=@texFoldGroup,@texDocGroup
592endif
593
Bram Moolenaar071d4272004-06-13 20:20:40 +0000594" Separate lines used for verb` and verb# so that the end conditions {{{1
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200595" will appropriately terminate.
596" If g:tex_verbspell exists, then verbatim texZones will permit spellchecking there.
Bram Moolenaarf3913272016-02-25 00:00:01 +0100597if s:tex_fast =~# 'v'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100598 if exists("g:tex_verbspell") && g:tex_verbspell
599 syn region texZone start="\\begin{[vV]erbatim}" end="\\end{[vV]erbatim}\|%stopzone\>" contains=@Spell
Bram Moolenaarb0d45e72017-11-05 18:19:24 +0100600 " listings package:
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200601 if b:tex_stylish
602 syn region texZone start="\\verb\*\=\z([^\ta-zA-Z@]\)" end="\z1\|%stopzone\>" contains=@Spell
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200603 else
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200604 syn region texZone start="\\verb\*\=\z([^\ta-zA-Z]\)" end="\z1\|%stopzone\>" contains=@Spell
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200605 endif
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100606 else
607 syn region texZone start="\\begin{[vV]erbatim}" end="\\end{[vV]erbatim}\|%stopzone\>"
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200608 if b:tex_stylish
609 syn region texZone start="\\verb\*\=\z([^\ta-zA-Z@]\)" end="\z1\|%stopzone\>"
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200610 else
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200611 syn region texZone start="\\verb\*\=\z([^\ta-zA-Z]\)" end="\z1\|%stopzone\>"
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200612 endif
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100613 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000614endif
615
616" Tex Reference Zones: {{{1
Bram Moolenaarf3913272016-02-25 00:00:01 +0100617if s:tex_fast =~# 'r'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100618 syn region texZone matchgroup=texStatement start="@samp{" end="}\|%stopzone\>" contains=@texRefGroup
619 syn region texRefZone matchgroup=texStatement start="\\nocite{" end="}\|%stopzone\>" contains=@texRefGroup
620 syn region texRefZone matchgroup=texStatement start="\\bibliography{" end="}\|%stopzone\>" contains=@texRefGroup
621 syn region texRefZone matchgroup=texStatement start="\\label{" end="}\|%stopzone\>" contains=@texRefGroup
622 syn region texRefZone matchgroup=texStatement start="\\\(page\|eq\)ref{" end="}\|%stopzone\>" contains=@texRefGroup
623 syn region texRefZone matchgroup=texStatement start="\\v\=ref{" end="}\|%stopzone\>" contains=@texRefGroup
624 syn region texRefOption contained matchgroup=Delimiter start='\[' end=']' contains=@texRefGroup,texRefZone nextgroup=texRefOption,texCite
Bram Moolenaar6e932462014-09-09 18:48:09 +0200625 syn region texCite contained matchgroup=Delimiter start='{' end='}' contains=@texRefGroup,texRefZone,texCite
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100626endif
Bram Moolenaard960d762011-09-21 19:22:10 +0200627syn match texRefZone '\\cite\%([tp]\*\=\)\=' nextgroup=texRefOption,texCite
Bram Moolenaar071d4272004-06-13 20:20:40 +0000628
629" Handle newcommand, newenvironment : {{{1
630syn match texNewCmd "\\newcommand\>" nextgroup=texCmdName skipwhite skipnl
Bram Moolenaarf3913272016-02-25 00:00:01 +0100631if s:tex_fast =~# 'V'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100632 syn region texCmdName contained matchgroup=Delimiter start="{"rs=s+1 end="}" nextgroup=texCmdArgs,texCmdBody skipwhite skipnl
633 syn region texCmdArgs contained matchgroup=Delimiter start="\["rs=s+1 end="]" nextgroup=texCmdBody skipwhite skipnl
634 syn region texCmdBody contained matchgroup=Delimiter start="{"rs=s+1 skip="\\\\\|\\[{}]" matchgroup=Delimiter end="}" contains=@texCmdGroup
635endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000636syn match texNewEnv "\\newenvironment\>" nextgroup=texEnvName skipwhite skipnl
Bram Moolenaarf3913272016-02-25 00:00:01 +0100637if s:tex_fast =~# 'V'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100638 syn region texEnvName contained matchgroup=Delimiter start="{"rs=s+1 end="}" nextgroup=texEnvBgn skipwhite skipnl
639 syn region texEnvBgn contained matchgroup=Delimiter start="{"rs=s+1 end="}" nextgroup=texEnvEnd skipwhite skipnl contains=@texEnvGroup
640 syn region texEnvEnd contained matchgroup=Delimiter start="{"rs=s+1 end="}" skipwhite skipnl contains=@texEnvGroup
641endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000642
643" Definitions/Commands: {{{1
644syn match texDefCmd "\\def\>" nextgroup=texDefName skipwhite skipnl
645if b:tex_stylish
646 syn match texDefName contained "\\[a-zA-Z@]\+" nextgroup=texDefParms,texCmdBody skipwhite skipnl
647 syn match texDefName contained "\\[^a-zA-Z@]" nextgroup=texDefParms,texCmdBody skipwhite skipnl
648else
649 syn match texDefName contained "\\\a\+" nextgroup=texDefParms,texCmdBody skipwhite skipnl
650 syn match texDefName contained "\\\A" nextgroup=texDefParms,texCmdBody skipwhite skipnl
651endif
652syn match texDefParms contained "#[^{]*" contains=texDefParm nextgroup=texCmdBody skipwhite skipnl
653syn match texDefParm contained "#\d\+"
654
655" TeX Lengths: {{{1
Bram Moolenaar9964e462007-05-05 17:54:07 +0000656syn match texLength "\<\d\+\([.,]\d\+\)\=\s*\(true\)\=\s*\(bp\|cc\|cm\|dd\|em\|ex\|in\|mm\|pc\|pt\|sp\)\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000657
658" TeX String Delimiters: {{{1
659syn match texString "\(``\|''\|,,\)"
660
Bram Moolenaar5c736222010-01-06 20:54:52 +0100661" makeatletter -- makeatother sections
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100662if !s:tex_no_error
Bram Moolenaarf3913272016-02-25 00:00:01 +0100663 if s:tex_fast =~# 'S'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100664 syn region texStyle matchgroup=texStatement start='\\makeatletter' end='\\makeatother' contains=@texStyleGroup contained
665 endif
Bram Moolenaar5c736222010-01-06 20:54:52 +0100666 syn match texStyleStatement "\\[a-zA-Z@]\+" contained
Bram Moolenaarf3913272016-02-25 00:00:01 +0100667 if s:tex_fast =~# 'S'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100668 syn region texStyleMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" contains=@texStyleGroup,texError contained
669 syn region texStyleMatcher matchgroup=Delimiter start="\[" end="]" contains=@texStyleGroup,texError contained
670 endif
Bram Moolenaar5c736222010-01-06 20:54:52 +0100671endif
672
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200673" Conceal mode support (supports set cole=2) {{{1
Bram Moolenaarb2c03502010-07-02 20:20:09 +0200674if has("conceal") && &enc == 'utf-8'
Bram Moolenaar611df5b2010-07-26 22:51:56 +0200675
676 " Math Symbols {{{2
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200677 " (many of these symbols were contributed by Björn Winckler)
Bram Moolenaarf3913272016-02-25 00:00:01 +0100678 if s:tex_conceal =~# 'm'
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200679 let s:texMathList=[
Bram Moolenaaradc21822011-04-01 18:03:16 +0200680 \ ['|' , '‖'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200681 \ ['aleph' , 'ℵ'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100682 \ ['amalg' , '∐'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200683 \ ['angle' , '∠'],
684 \ ['approx' , '≈'],
685 \ ['ast' , '∗'],
686 \ ['asymp' , '≍'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200687 \ ['backslash' , '∖'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200688 \ ['bigcap' , '∩'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100689 \ ['bigcirc' , '○'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200690 \ ['bigcup' , '∪'],
691 \ ['bigodot' , '⊙'],
692 \ ['bigoplus' , '⊕'],
693 \ ['bigotimes' , '⊗'],
694 \ ['bigsqcup' , '⊔'],
695 \ ['bigtriangledown', '∇'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100696 \ ['bigtriangleup' , '∆'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200697 \ ['bigvee' , '⋁'],
698 \ ['bigwedge' , '⋀'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200699 \ ['bot' , '⊥'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100700 \ ['bowtie' , '⋈'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100701 \ ['bullet' , '•'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200702 \ ['cap' , '∩'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200703 \ ['cdot' , '·'],
704 \ ['cdots' , '⋯'],
705 \ ['circ' , '∘'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200706 \ ['clubsuit' , '♣'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200707 \ ['cong' , '≅'],
708 \ ['coprod' , '∐'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200709 \ ['copyright' , '©'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200710 \ ['cup' , '∪'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100711 \ ['dagger' , '†'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200712 \ ['dashv' , '⊣'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100713 \ ['ddagger' , '‡'],
714 \ ['ddots' , '⋱'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200715 \ ['diamond' , '⋄'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200716 \ ['diamondsuit' , '♢'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200717 \ ['div' , '÷'],
718 \ ['doteq' , '≐'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100719 \ ['dots' , '…'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200720 \ ['downarrow' , '↓'],
721 \ ['Downarrow' , '⇓'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100722 \ ['ell' , 'ℓ'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200723 \ ['emptyset' , '∅'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200724 \ ['equiv' , '≡'],
725 \ ['exists' , '∃'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200726 \ ['flat' , '♭'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200727 \ ['forall' , '∀'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100728 \ ['frown' , '⁔'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200729 \ ['ge' , '≥'],
730 \ ['geq' , '≥'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200731 \ ['gets' , '←'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100732 \ ['gg' , '⟫'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200733 \ ['hbar' , 'ℏ'],
734 \ ['heartsuit' , '♡'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200735 \ ['hookleftarrow' , '↩'],
736 \ ['hookrightarrow' , '↪'],
Bram Moolenaar690afe12017-01-28 18:34:47 +0100737 \ ['iff' , '⇔'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200738 \ ['Im' , 'ℑ'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200739 \ ['imath' , 'ɩ'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200740 \ ['in' , '∈'],
741 \ ['infty' , '∞'],
742 \ ['int' , '∫'],
Bram Moolenaar690afe12017-01-28 18:34:47 +0100743 \ ['jmath' , '𝚥'],
744 \ ['land' , '∧'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200745 \ ['lceil' , '⌈'],
746 \ ['ldots' , '…'],
747 \ ['le' , '≤'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200748 \ ['left(' , '('],
749 \ ['left\[' , '['],
750 \ ['left\\{' , '{'],
Bram Moolenaare2719092015-01-10 15:09:25 +0100751 \ ['leftarrow' , '←'],
752 \ ['Leftarrow' , '⇐'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100753 \ ['leftharpoondown', '↽'],
754 \ ['leftharpoonup' , '↼'],
Bram Moolenaar97d62492012-11-15 21:28:22 +0100755 \ ['leftrightarrow' , '↔'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100756 \ ['Leftrightarrow' , '⇔'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200757 \ ['leq' , '≤'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100758 \ ['leq' , '≤'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200759 \ ['lfloor' , '⌊'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100760 \ ['ll' , '≪'],
Bram Moolenaaradc21822011-04-01 18:03:16 +0200761 \ ['lmoustache' , '╭'],
Bram Moolenaar690afe12017-01-28 18:34:47 +0100762 \ ['lor' , '∨'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200763 \ ['mapsto' , '↦'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200764 \ ['mid' , '∣'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100765 \ ['models' , '╞'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200766 \ ['mp' , '∓'],
767 \ ['nabla' , '∇'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200768 \ ['natural' , '♮'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200769 \ ['ne' , '≠'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100770 \ ['nearrow' , '↗'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200771 \ ['neg' , '¬'],
772 \ ['neq' , '≠'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200773 \ ['ni' , '∋'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200774 \ ['notin' , '∉'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200775 \ ['nwarrow' , '↖'],
776 \ ['odot' , '⊙'],
777 \ ['oint' , '∮'],
778 \ ['ominus' , '⊖'],
779 \ ['oplus' , '⊕'],
780 \ ['oslash' , '⊘'],
781 \ ['otimes' , '⊗'],
782 \ ['owns' , '∋'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200783 \ ['P' , '¶'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100784 \ ['parallel' , '║'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200785 \ ['partial' , '∂'],
786 \ ['perp' , '⊥'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200787 \ ['pm' , '±'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200788 \ ['prec' , '≺'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200789 \ ['preceq' , '⪯'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200790 \ ['prime' , '′'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200791 \ ['prod' , '∏'],
792 \ ['propto' , '∝'],
793 \ ['rceil' , '⌉'],
794 \ ['Re' , 'ℜ'],
Bram Moolenaar723dd942019-04-04 13:11:03 +0200795 \ ['quad' , ' '],
796 \ ['qquad' , ' '],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200797 \ ['rfloor' , '⌋'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200798 \ ['right)' , ')'],
799 \ ['right]' , ']'],
800 \ ['right\\}' , '}'],
Bram Moolenaare2719092015-01-10 15:09:25 +0100801 \ ['rightarrow' , '→'],
802 \ ['Rightarrow' , '⇒'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100803 \ ['rightleftharpoons', '⇌'],
Bram Moolenaaradc21822011-04-01 18:03:16 +0200804 \ ['rmoustache' , '╮'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200805 \ ['S' , '§'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200806 \ ['searrow' , '↘'],
807 \ ['setminus' , '∖'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200808 \ ['sharp' , '♯'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200809 \ ['sim' , '∼'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100810 \ ['simeq' , '⋍'],
811 \ ['smile' , '‿'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200812 \ ['spadesuit' , '♠'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200813 \ ['sqcap' , '⊓'],
814 \ ['sqcup' , '⊔'],
815 \ ['sqsubset' , '⊏'],
816 \ ['sqsubseteq' , '⊑'],
817 \ ['sqsupset' , '⊐'],
818 \ ['sqsupseteq' , '⊒'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100819 \ ['star' , '✫'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200820 \ ['subset' , '⊂'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200821 \ ['subseteq' , '⊆'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200822 \ ['succ' , '≻'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200823 \ ['succeq' , '⪰'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200824 \ ['sum' , '∑'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100825 \ ['supset' , '⊃'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200826 \ ['supseteq' , '⊇'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200827 \ ['surd' , '√'],
828 \ ['swarrow' , '↙'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200829 \ ['times' , '×'],
830 \ ['to' , '→'],
831 \ ['top' , '⊤'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200832 \ ['triangle' , '∆'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200833 \ ['triangleleft' , '⊲'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200834 \ ['triangleright' , '⊳'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200835 \ ['uparrow' , '↑'],
836 \ ['Uparrow' , '⇑'],
837 \ ['updownarrow' , '↕'],
838 \ ['Updownarrow' , '⇕'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200839 \ ['vdash' , '⊢'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200840 \ ['vdots' , '⋮'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200841 \ ['vee' , '∨'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200842 \ ['wedge' , '∧'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200843 \ ['wp' , '℘'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200844 \ ['wr' , '≀']]
Bram Moolenaar690afe12017-01-28 18:34:47 +0100845 if &ambw == "double" || exists("g:tex_usedblwidth")
846 let s:texMathList= s:texMathList + [
847 \ ['right\\rangle' , '〉'],
848 \ ['left\\langle' , '〈']]
849 else
850 let s:texMathList= s:texMathList + [
851 \ ['right\\rangle' , '>'],
852 \ ['left\\langle' , '<']]
853 endif
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200854 for texmath in s:texMathList
Bram Moolenaarf3913272016-02-25 00:00:01 +0100855 if texmath[0] =~# '\w$'
Bram Moolenaar81af9252010-12-10 20:35:50 +0100856 exe "syn match texMathSymbol '\\\\".texmath[0]."\\>' contained conceal cchar=".texmath[1]
857 else
858 exe "syn match texMathSymbol '\\\\".texmath[0]."' contained conceal cchar=".texmath[1]
859 endif
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200860 endfor
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200861
862 if &ambw == "double"
863 syn match texMathSymbol '\\gg\>' contained conceal cchar=≫
864 syn match texMathSymbol '\\ll\>' contained conceal cchar=≪
865 else
866 syn match texMathSymbol '\\gg\>' contained conceal cchar=⟫
867 syn match texMathSymbol '\\ll\>' contained conceal cchar=⟪
868 endif
Bram Moolenaard960d762011-09-21 19:22:10 +0200869
870 syn match texMathSymbol '\\hat{a}' contained conceal cchar=â
871 syn match texMathSymbol '\\hat{A}' contained conceal cchar=Â
872 syn match texMathSymbol '\\hat{c}' contained conceal cchar=ĉ
873 syn match texMathSymbol '\\hat{C}' contained conceal cchar=Ĉ
874 syn match texMathSymbol '\\hat{e}' contained conceal cchar=ê
875 syn match texMathSymbol '\\hat{E}' contained conceal cchar=Ê
876 syn match texMathSymbol '\\hat{g}' contained conceal cchar=ĝ
877 syn match texMathSymbol '\\hat{G}' contained conceal cchar=Ĝ
878 syn match texMathSymbol '\\hat{i}' contained conceal cchar=î
879 syn match texMathSymbol '\\hat{I}' contained conceal cchar=Î
880 syn match texMathSymbol '\\hat{o}' contained conceal cchar=ô
881 syn match texMathSymbol '\\hat{O}' contained conceal cchar=Ô
882 syn match texMathSymbol '\\hat{s}' contained conceal cchar=ŝ
883 syn match texMathSymbol '\\hat{S}' contained conceal cchar=Ŝ
884 syn match texMathSymbol '\\hat{u}' contained conceal cchar=û
885 syn match texMathSymbol '\\hat{U}' contained conceal cchar=Û
886 syn match texMathSymbol '\\hat{w}' contained conceal cchar=ŵ
887 syn match texMathSymbol '\\hat{W}' contained conceal cchar=Ŵ
888 syn match texMathSymbol '\\hat{y}' contained conceal cchar=ŷ
889 syn match texMathSymbol '\\hat{Y}' contained conceal cchar=Ŷ
Bram Moolenaare2719092015-01-10 15:09:25 +0100890" syn match texMathSymbol '\\bar{a}' contained conceal cchar=a̅
Bram Moolenaar51ad4ea2018-04-06 11:14:11 +0200891
892 syn match texMathSymbol '\\dot{B}' contained conceal cchar=Ḃ
893 syn match texMathSymbol '\\dot{b}' contained conceal cchar=ḃ
894 syn match texMathSymbol '\\dot{D}' contained conceal cchar=Ḋ
895 syn match texMathSymbol '\\dot{d}' contained conceal cchar=ḋ
896 syn match texMathSymbol '\\dot{F}' contained conceal cchar=Ḟ
897 syn match texMathSymbol '\\dot{f}' contained conceal cchar=ḟ
898 syn match texMathSymbol '\\dot{H}' contained conceal cchar=Ḣ
899 syn match texMathSymbol '\\dot{h}' contained conceal cchar=ḣ
900 syn match texMathSymbol '\\dot{M}' contained conceal cchar=Ṁ
901 syn match texMathSymbol '\\dot{m}' contained conceal cchar=ṁ
902 syn match texMathSymbol '\\dot{N}' contained conceal cchar=Ṅ
903 syn match texMathSymbol '\\dot{n}' contained conceal cchar=ṅ
904 syn match texMathSymbol '\\dot{P}' contained conceal cchar=Ṗ
905 syn match texMathSymbol '\\dot{p}' contained conceal cchar=ṗ
906 syn match texMathSymbol '\\dot{R}' contained conceal cchar=Ṙ
907 syn match texMathSymbol '\\dot{r}' contained conceal cchar=ṙ
908 syn match texMathSymbol '\\dot{S}' contained conceal cchar=Ṡ
909 syn match texMathSymbol '\\dot{s}' contained conceal cchar=ṡ
910 syn match texMathSymbol '\\dot{T}' contained conceal cchar=Ṫ
911 syn match texMathSymbol '\\dot{t}' contained conceal cchar=ṫ
912 syn match texMathSymbol '\\dot{W}' contained conceal cchar=Ẇ
913 syn match texMathSymbol '\\dot{w}' contained conceal cchar=ẇ
914 syn match texMathSymbol '\\dot{X}' contained conceal cchar=Ẋ
915 syn match texMathSymbol '\\dot{x}' contained conceal cchar=ẋ
916 syn match texMathSymbol '\\dot{Y}' contained conceal cchar=Ẏ
917 syn match texMathSymbol '\\dot{y}' contained conceal cchar=ẏ
918 syn match texMathSymbol '\\dot{Z}' contained conceal cchar=Ż
919 syn match texMathSymbol '\\dot{z}' contained conceal cchar=ż
920
921 syn match texMathSymbol '\\dot{C}' contained conceal cchar=Ċ
922 syn match texMathSymbol '\\dot{c}' contained conceal cchar=ċ
923 syn match texMathSymbol '\\dot{E}' contained conceal cchar=Ė
924 syn match texMathSymbol '\\dot{e}' contained conceal cchar=ė
925 syn match texMathSymbol '\\dot{G}' contained conceal cchar=Ġ
926 syn match texMathSymbol '\\dot{g}' contained conceal cchar=ġ
927 syn match texMathSymbol '\\dot{I}' contained conceal cchar=İ
928
929 syn match texMathSymbol '\\dot{A}' contained conceal cchar=Ȧ
930 syn match texMathSymbol '\\dot{a}' contained conceal cchar=ȧ
931 syn match texMathSymbol '\\dot{O}' contained conceal cchar=Ȯ
932 syn match texMathSymbol '\\dot{o}' contained conceal cchar=ȯ
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200933 endif
Bram Moolenaar611df5b2010-07-26 22:51:56 +0200934
935 " Greek {{{2
Bram Moolenaarf3913272016-02-25 00:00:01 +0100936 if s:tex_conceal =~# 'g'
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200937 fun! s:Greek(group,pat,cchar)
938 exe 'syn match '.a:group." '".a:pat."' contained conceal cchar=".a:cchar
939 endfun
940 call s:Greek('texGreek','\\alpha\>' ,'α')
941 call s:Greek('texGreek','\\beta\>' ,'β')
942 call s:Greek('texGreek','\\gamma\>' ,'γ')
943 call s:Greek('texGreek','\\delta\>' ,'δ')
944 call s:Greek('texGreek','\\epsilon\>' ,'ϵ')
945 call s:Greek('texGreek','\\varepsilon\>' ,'ε')
946 call s:Greek('texGreek','\\zeta\>' ,'ζ')
947 call s:Greek('texGreek','\\eta\>' ,'η')
948 call s:Greek('texGreek','\\theta\>' ,'θ')
Bram Moolenaare2719092015-01-10 15:09:25 +0100949 call s:Greek('texGreek','\\vartheta\>' ,'ϑ')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200950 call s:Greek('texGreek','\\kappa\>' ,'κ')
951 call s:Greek('texGreek','\\lambda\>' ,'λ')
952 call s:Greek('texGreek','\\mu\>' ,'μ')
953 call s:Greek('texGreek','\\nu\>' ,'ν')
954 call s:Greek('texGreek','\\xi\>' ,'ξ')
955 call s:Greek('texGreek','\\pi\>' ,'π')
956 call s:Greek('texGreek','\\varpi\>' ,'ϖ')
957 call s:Greek('texGreek','\\rho\>' ,'ρ')
958 call s:Greek('texGreek','\\varrho\>' ,'ϱ')
959 call s:Greek('texGreek','\\sigma\>' ,'σ')
Bram Moolenaare2719092015-01-10 15:09:25 +0100960 call s:Greek('texGreek','\\varsigma\>' ,'ς')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200961 call s:Greek('texGreek','\\tau\>' ,'τ')
962 call s:Greek('texGreek','\\upsilon\>' ,'υ')
Bram Moolenaare2719092015-01-10 15:09:25 +0100963 call s:Greek('texGreek','\\phi\>' ,'ϕ')
964 call s:Greek('texGreek','\\varphi\>' ,'φ')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200965 call s:Greek('texGreek','\\chi\>' ,'χ')
966 call s:Greek('texGreek','\\psi\>' ,'ψ')
967 call s:Greek('texGreek','\\omega\>' ,'ω')
968 call s:Greek('texGreek','\\Gamma\>' ,'Γ')
969 call s:Greek('texGreek','\\Delta\>' ,'Δ')
970 call s:Greek('texGreek','\\Theta\>' ,'Θ')
971 call s:Greek('texGreek','\\Lambda\>' ,'Λ')
972 call s:Greek('texGreek','\\Xi\>' ,'Χ')
973 call s:Greek('texGreek','\\Pi\>' ,'Π')
974 call s:Greek('texGreek','\\Sigma\>' ,'Σ')
975 call s:Greek('texGreek','\\Upsilon\>' ,'Υ')
976 call s:Greek('texGreek','\\Phi\>' ,'Φ')
977 call s:Greek('texGreek','\\Psi\>' ,'Ψ')
978 call s:Greek('texGreek','\\Omega\>' ,'Ω')
979 delfun s:Greek
980 endif
Bram Moolenaar611df5b2010-07-26 22:51:56 +0200981
982 " Superscripts/Subscripts {{{2
Bram Moolenaarf3913272016-02-25 00:00:01 +0100983 if s:tex_conceal =~# 's'
984 if s:tex_fast =~# 's'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100985 syn region texSuperscript matchgroup=Delimiter start='\^{' skip="\\\\\|\\[{}]" end='}' contained concealends contains=texSpecialChar,texSuperscripts,texStatement,texSubscript,texSuperscript,texMathMatcher
986 syn region texSubscript matchgroup=Delimiter start='_{' skip="\\\\\|\\[{}]" end='}' contained concealends contains=texSpecialChar,texSubscripts,texStatement,texSubscript,texSuperscript,texMathMatcher
987 endif
Bram Moolenaar541f92d2015-06-19 13:27:23 +0200988 " s:SuperSub:
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200989 fun! s:SuperSub(group,leader,pat,cchar)
Bram Moolenaar03413f42016-04-12 21:07:15 +0200990 if a:pat =~# '^\\' || (a:leader == '\^' && a:pat =~# s:tex_superscripts) || (a:leader == '_' && a:pat =~# s:tex_subscripts)
Bram Moolenaar6e932462014-09-09 18:48:09 +0200991" call Decho("SuperSub: group<".a:group."> leader<".a:leader."> pat<".a:pat."> cchar<".a:cchar.">")
992 exe 'syn match '.a:group." '".a:leader.a:pat."' contained conceal cchar=".a:cchar
Bram Moolenaar541f92d2015-06-19 13:27:23 +0200993 exe 'syn match '.a:group."s '".a:pat ."' contained conceal cchar=".a:cchar.' nextgroup='.a:group.'s'
Bram Moolenaar6e932462014-09-09 18:48:09 +0200994 endif
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200995 endfun
996 call s:SuperSub('texSuperscript','\^','0','⁰')
997 call s:SuperSub('texSuperscript','\^','1','¹')
998 call s:SuperSub('texSuperscript','\^','2','²')
999 call s:SuperSub('texSuperscript','\^','3','³')
1000 call s:SuperSub('texSuperscript','\^','4','⁴')
1001 call s:SuperSub('texSuperscript','\^','5','⁵')
1002 call s:SuperSub('texSuperscript','\^','6','⁶')
1003 call s:SuperSub('texSuperscript','\^','7','⁷')
1004 call s:SuperSub('texSuperscript','\^','8','⁸')
1005 call s:SuperSub('texSuperscript','\^','9','⁹')
1006 call s:SuperSub('texSuperscript','\^','a','ᵃ')
1007 call s:SuperSub('texSuperscript','\^','b','ᵇ')
1008 call s:SuperSub('texSuperscript','\^','c','ᶜ')
1009 call s:SuperSub('texSuperscript','\^','d','ᵈ')
1010 call s:SuperSub('texSuperscript','\^','e','ᵉ')
1011 call s:SuperSub('texSuperscript','\^','f','ᶠ')
1012 call s:SuperSub('texSuperscript','\^','g','ᵍ')
1013 call s:SuperSub('texSuperscript','\^','h','ʰ')
1014 call s:SuperSub('texSuperscript','\^','i','ⁱ')
1015 call s:SuperSub('texSuperscript','\^','j','ʲ')
1016 call s:SuperSub('texSuperscript','\^','k','ᵏ')
1017 call s:SuperSub('texSuperscript','\^','l','ˡ')
1018 call s:SuperSub('texSuperscript','\^','m','ᵐ')
1019 call s:SuperSub('texSuperscript','\^','n','ⁿ')
1020 call s:SuperSub('texSuperscript','\^','o','ᵒ')
1021 call s:SuperSub('texSuperscript','\^','p','ᵖ')
1022 call s:SuperSub('texSuperscript','\^','r','ʳ')
1023 call s:SuperSub('texSuperscript','\^','s','ˢ')
1024 call s:SuperSub('texSuperscript','\^','t','ᵗ')
1025 call s:SuperSub('texSuperscript','\^','u','ᵘ')
1026 call s:SuperSub('texSuperscript','\^','v','ᵛ')
1027 call s:SuperSub('texSuperscript','\^','w','ʷ')
1028 call s:SuperSub('texSuperscript','\^','x','ˣ')
1029 call s:SuperSub('texSuperscript','\^','y','ʸ')
1030 call s:SuperSub('texSuperscript','\^','z','ᶻ')
1031 call s:SuperSub('texSuperscript','\^','A','ᴬ')
1032 call s:SuperSub('texSuperscript','\^','B','ᴮ')
1033 call s:SuperSub('texSuperscript','\^','D','ᴰ')
1034 call s:SuperSub('texSuperscript','\^','E','ᴱ')
1035 call s:SuperSub('texSuperscript','\^','G','ᴳ')
1036 call s:SuperSub('texSuperscript','\^','H','ᴴ')
1037 call s:SuperSub('texSuperscript','\^','I','ᴵ')
1038 call s:SuperSub('texSuperscript','\^','J','ᴶ')
1039 call s:SuperSub('texSuperscript','\^','K','ᴷ')
1040 call s:SuperSub('texSuperscript','\^','L','ᴸ')
1041 call s:SuperSub('texSuperscript','\^','M','ᴹ')
1042 call s:SuperSub('texSuperscript','\^','N','ᴺ')
1043 call s:SuperSub('texSuperscript','\^','O','ᴼ')
1044 call s:SuperSub('texSuperscript','\^','P','ᴾ')
1045 call s:SuperSub('texSuperscript','\^','R','ᴿ')
1046 call s:SuperSub('texSuperscript','\^','T','ᵀ')
1047 call s:SuperSub('texSuperscript','\^','U','ᵁ')
1048 call s:SuperSub('texSuperscript','\^','W','ᵂ')
Bram Moolenaar6be7f872012-01-20 21:08:56 +01001049 call s:SuperSub('texSuperscript','\^',',','︐')
1050 call s:SuperSub('texSuperscript','\^',':','︓')
1051 call s:SuperSub('texSuperscript','\^',';','︔')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001052 call s:SuperSub('texSuperscript','\^','+','⁺')
1053 call s:SuperSub('texSuperscript','\^','-','⁻')
1054 call s:SuperSub('texSuperscript','\^','<','˂')
1055 call s:SuperSub('texSuperscript','\^','>','˃')
1056 call s:SuperSub('texSuperscript','\^','/','ˊ')
1057 call s:SuperSub('texSuperscript','\^','(','⁽')
1058 call s:SuperSub('texSuperscript','\^',')','⁾')
1059 call s:SuperSub('texSuperscript','\^','\.','˙')
1060 call s:SuperSub('texSuperscript','\^','=','˭')
1061 call s:SuperSub('texSubscript','_','0','₀')
1062 call s:SuperSub('texSubscript','_','1','₁')
1063 call s:SuperSub('texSubscript','_','2','₂')
1064 call s:SuperSub('texSubscript','_','3','₃')
1065 call s:SuperSub('texSubscript','_','4','₄')
1066 call s:SuperSub('texSubscript','_','5','₅')
1067 call s:SuperSub('texSubscript','_','6','₆')
1068 call s:SuperSub('texSubscript','_','7','₇')
1069 call s:SuperSub('texSubscript','_','8','₈')
1070 call s:SuperSub('texSubscript','_','9','₉')
1071 call s:SuperSub('texSubscript','_','a','ₐ')
1072 call s:SuperSub('texSubscript','_','e','ₑ')
Bram Moolenaar802a0d92016-06-26 16:17:58 +02001073 call s:SuperSub('texSubscript','_','h','ₕ')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001074 call s:SuperSub('texSubscript','_','i','ᵢ')
Bram Moolenaar802a0d92016-06-26 16:17:58 +02001075 call s:SuperSub('texSubscript','_','j','ⱼ')
1076 call s:SuperSub('texSubscript','_','k','ₖ')
1077 call s:SuperSub('texSubscript','_','l','ₗ')
1078 call s:SuperSub('texSubscript','_','m','ₘ')
1079 call s:SuperSub('texSubscript','_','n','ₙ')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001080 call s:SuperSub('texSubscript','_','o','ₒ')
Bram Moolenaar802a0d92016-06-26 16:17:58 +02001081 call s:SuperSub('texSubscript','_','p','ₚ')
1082 call s:SuperSub('texSubscript','_','r','ᵣ')
1083 call s:SuperSub('texSubscript','_','s','ₛ')
1084 call s:SuperSub('texSubscript','_','t','ₜ')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001085 call s:SuperSub('texSubscript','_','u','ᵤ')
Bram Moolenaar802a0d92016-06-26 16:17:58 +02001086 call s:SuperSub('texSubscript','_','v','ᵥ')
1087 call s:SuperSub('texSubscript','_','x','ₓ')
Bram Moolenaar6be7f872012-01-20 21:08:56 +01001088 call s:SuperSub('texSubscript','_',',','︐')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001089 call s:SuperSub('texSubscript','_','+','₊')
1090 call s:SuperSub('texSubscript','_','-','₋')
1091 call s:SuperSub('texSubscript','_','/','ˏ')
1092 call s:SuperSub('texSubscript','_','(','₍')
1093 call s:SuperSub('texSubscript','_',')','₎')
1094 call s:SuperSub('texSubscript','_','\.','‸')
1095 call s:SuperSub('texSubscript','_','r','ᵣ')
1096 call s:SuperSub('texSubscript','_','v','ᵥ')
1097 call s:SuperSub('texSubscript','_','x','ₓ')
1098 call s:SuperSub('texSubscript','_','\\beta\>' ,'ᵦ')
1099 call s:SuperSub('texSubscript','_','\\delta\>','ᵨ')
1100 call s:SuperSub('texSubscript','_','\\phi\>' ,'ᵩ')
1101 call s:SuperSub('texSubscript','_','\\gamma\>','ᵧ')
1102 call s:SuperSub('texSubscript','_','\\chi\>' ,'ᵪ')
Bram Moolenaar802a0d92016-06-26 16:17:58 +02001103
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001104 delfun s:SuperSub
1105 endif
Bram Moolenaar611df5b2010-07-26 22:51:56 +02001106
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01001107 " Accented characters and Ligatures: {{{2
Bram Moolenaarf3913272016-02-25 00:00:01 +01001108 if s:tex_conceal =~# 'a'
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001109 if b:tex_stylish
1110 syn match texAccent "\\[bcdvuH][^a-zA-Z@]"me=e-1
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01001111 syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)[^a-zA-Z@]"me=e-1
1112 syn match texLigature '--'
1113 syn match texLigature '---'
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001114 else
1115 fun! s:Accents(chr,...)
1116 let i= 1
Bram Moolenaara6878372014-03-22 21:02:50 +01001117 for accent in ["`","\\'","^",'"','\~','\.','=',"c","H","k","r","u","v"]
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001118 if i > a:0
1119 break
1120 endif
Bram Moolenaar7fc0c062010-08-10 21:43:35 +02001121 if strlen(a:{i}) == 0 || a:{i} == ' ' || a:{i} == '?'
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001122 let i= i + 1
1123 continue
1124 endif
Bram Moolenaarf3913272016-02-25 00:00:01 +01001125 if accent =~# '\a'
Bram Moolenaar7fc0c062010-08-10 21:43:35 +02001126 exe "syn match texAccent '".'\\'.accent.'\(\s*{'.a:chr.'}\|\s\+'.a:chr.'\)'."' conceal cchar=".a:{i}
1127 else
1128 exe "syn match texAccent '".'\\'.accent.'\s*\({'.a:chr.'}\|'.a:chr.'\)'."' conceal cchar=".a:{i}
1129 endif
Bram Moolenaare0021c72010-07-28 17:25:21 +02001130 let i= i + 1
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001131 endfor
1132 endfun
Bram Moolenaar6e932462014-09-09 18:48:09 +02001133 " \` \' \^ \" \~ \. \= \c \H \k \r \u \v
1134 call s:Accents('a','à','á','â','ä','ã','ȧ','ā',' ',' ','ą','å','ă','ǎ')
1135 call s:Accents('A','À','Á','Â','Ä','Ã','Ȧ','Ā',' ',' ','Ą','Å','Ă','Ǎ')
1136 call s:Accents('c',' ','ć','ĉ',' ',' ','ċ',' ','ç',' ',' ',' ',' ','č')
1137 call s:Accents('C',' ','Ć','Ĉ',' ',' ','Ċ',' ','Ç',' ',' ',' ',' ','Č')
1138 call s:Accents('d',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ď')
1139 call s:Accents('D',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','Ď')
1140 call s:Accents('e','è','é','ê','ë','ẽ','ė','ē','ȩ',' ','ę',' ','ĕ','ě')
1141 call s:Accents('E','È','É','Ê','Ë','Ẽ','Ė','Ē','Ȩ',' ','Ę',' ','Ĕ','Ě')
1142 call s:Accents('g',' ','ǵ','ĝ',' ',' ','ġ',' ','ģ',' ',' ',' ','ğ','ǧ')
1143 call s:Accents('G',' ','Ǵ','Ĝ',' ',' ','Ġ',' ','Ģ',' ',' ',' ','Ğ','Ǧ')
1144 call s:Accents('h',' ',' ','ĥ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ȟ')
1145 call s:Accents('H',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','Ȟ')
1146 call s:Accents('i','ì','í','î','ï','ĩ','į','ī',' ',' ','į',' ','ĭ','ǐ')
1147 call s:Accents('I','Ì','Í','Î','Ï','Ĩ','İ','Ī',' ',' ','Į',' ','Ĭ','Ǐ')
1148 call s:Accents('J',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ǰ')
1149 call s:Accents('k',' ',' ',' ',' ',' ',' ',' ','ķ',' ',' ',' ',' ','ǩ')
1150 call s:Accents('K',' ',' ',' ',' ',' ',' ',' ','Ķ',' ',' ',' ',' ','Ǩ')
1151 call s:Accents('l',' ','ĺ','ľ',' ',' ',' ',' ','ļ',' ',' ',' ',' ','ľ')
1152 call s:Accents('L',' ','Ĺ','Ľ',' ',' ',' ',' ','Ļ',' ',' ',' ',' ','Ľ')
1153 call s:Accents('n',' ','ń',' ',' ','ñ',' ',' ','ņ',' ',' ',' ',' ','ň')
1154 call s:Accents('N',' ','Ń',' ',' ','Ñ',' ',' ','Ņ',' ',' ',' ',' ','Ň')
1155 call s:Accents('o','ò','ó','ô','ö','õ','ȯ','ō',' ','ő','ǫ',' ','ŏ','ǒ')
1156 call s:Accents('O','Ò','Ó','Ô','Ö','Õ','Ȯ','Ō',' ','Ő','Ǫ',' ','Ŏ','Ǒ')
1157 call s:Accents('r',' ','ŕ',' ',' ',' ',' ',' ','ŗ',' ',' ',' ',' ','ř')
1158 call s:Accents('R',' ','Ŕ',' ',' ',' ',' ',' ','Ŗ',' ',' ',' ',' ','Ř')
1159 call s:Accents('s',' ','ś','ŝ',' ',' ',' ',' ','ş',' ','ȿ',' ',' ','š')
1160 call s:Accents('S',' ','Ś','Ŝ',' ',' ',' ',' ','Ş',' ',' ',' ',' ','Š')
1161 call s:Accents('t',' ',' ',' ',' ',' ',' ',' ','ţ',' ',' ',' ',' ','ť')
1162 call s:Accents('T',' ',' ',' ',' ',' ',' ',' ','Ţ',' ',' ',' ',' ','Ť')
1163 call s:Accents('u','ù','ú','û','ü','ũ',' ','ū',' ','ű','ų','ů','ŭ','ǔ')
1164 call s:Accents('U','Ù','Ú','Û','Ü','Ũ',' ','Ū',' ','Ű','Ų','Ů','Ŭ','Ǔ')
1165 call s:Accents('w',' ',' ','ŵ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ')
1166 call s:Accents('W',' ',' ','Ŵ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ')
1167 call s:Accents('y','ỳ','ý','ŷ','ÿ','ỹ',' ',' ',' ',' ',' ',' ',' ',' ')
1168 call s:Accents('Y','Ỳ','Ý','Ŷ','Ÿ','Ỹ',' ',' ',' ',' ',' ',' ',' ',' ')
1169 call s:Accents('z',' ','ź',' ',' ',' ','ż',' ',' ',' ',' ',' ',' ','ž')
1170 call s:Accents('Z',' ','Ź',' ',' ',' ','Ż',' ',' ',' ',' ',' ',' ','Ž')
Bram Moolenaara6878372014-03-22 21:02:50 +01001171 call s:Accents('\\i','ì','í','î','ï','ĩ','į',' ',' ',' ',' ',' ','ĭ',' ')
1172 " \` \' \^ \" \~ \. \= \c \H \k \r \u \v
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001173 delfun s:Accents
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01001174 syn match texAccent '\\aa\>' conceal cchar=å
1175 syn match texAccent '\\AA\>' conceal cchar=Å
1176 syn match texAccent '\\o\>' conceal cchar=ø
1177 syn match texAccent '\\O\>' conceal cchar=Ø
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001178 syn match texLigature '\\AE\>' conceal cchar=Æ
1179 syn match texLigature '\\ae\>' conceal cchar=æ
1180 syn match texLigature '\\oe\>' conceal cchar=œ
1181 syn match texLigature '\\OE\>' conceal cchar=Œ
1182 syn match texLigature '\\ss\>' conceal cchar=ß
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01001183 syn match texLigature '--' conceal cchar=–
1184 syn match texLigature '---' conceal cchar=—
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001185 endif
Bram Moolenaar611df5b2010-07-26 22:51:56 +02001186 endif
Bram Moolenaarb2c03502010-07-02 20:20:09 +02001187endif
1188
1189" ---------------------------------------------------------------------
Bram Moolenaar071d4272004-06-13 20:20:40 +00001190" LaTeX synchronization: {{{1
1191syn sync maxlines=200
1192syn sync minlines=50
1193
1194syn sync match texSyncStop groupthere NONE "%stopzone\>"
1195
1196" Synchronization: {{{1
1197" The $..$ and $$..$$ make for impossible sync patterns
1198" (one can't tell if a "$$" starts or stops a math zone by itself)
1199" The following grouptheres coupled with minlines above
1200" help improve the odds of good syncing.
Bram Moolenaare2719092015-01-10 15:09:25 +01001201if !exists("g:tex_no_math")
Bram Moolenaar071d4272004-06-13 20:20:40 +00001202 syn sync match texSyncMathZoneA groupthere NONE "\\end{abstract}"
1203 syn sync match texSyncMathZoneA groupthere NONE "\\end{center}"
1204 syn sync match texSyncMathZoneA groupthere NONE "\\end{description}"
1205 syn sync match texSyncMathZoneA groupthere NONE "\\end{enumerate}"
1206 syn sync match texSyncMathZoneA groupthere NONE "\\end{itemize}"
1207 syn sync match texSyncMathZoneA groupthere NONE "\\end{table}"
1208 syn sync match texSyncMathZoneA groupthere NONE "\\end{tabular}"
1209 syn sync match texSyncMathZoneA groupthere NONE "\\\(sub\)*section\>"
1210endif
1211
Bram Moolenaarb2c03502010-07-02 20:20:09 +02001212" ---------------------------------------------------------------------
Bram Moolenaar071d4272004-06-13 20:20:40 +00001213" Highlighting: {{{1
Bram Moolenaarf37506f2016-08-31 22:22:10 +02001214
1215" Define the default highlighting. {{{1
1216if !exists("skip_tex_syntax_inits")
1217
Bram Moolenaar071d4272004-06-13 20:20:40 +00001218 " TeX highlighting groups which should share similar highlighting
Bram Moolenaar6e932462014-09-09 18:48:09 +02001219 if !exists("g:tex_no_error")
Bram Moolenaar543b7ef2013-06-01 14:50:56 +02001220 if !exists("g:tex_no_math")
Bram Moolenaarf37506f2016-08-31 22:22:10 +02001221 hi def link texBadMath texError
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +02001222 hi def link texMathDelimBad texError
Bram Moolenaarf37506f2016-08-31 22:22:10 +02001223 hi def link texMathError texError
Bram Moolenaar071d4272004-06-13 20:20:40 +00001224 if !b:tex_stylish
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +02001225 hi def link texOnlyMath texError
Bram Moolenaar071d4272004-06-13 20:20:40 +00001226 endif
1227 endif
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +02001228 hi def link texError Error
Bram Moolenaar071d4272004-06-13 20:20:40 +00001229 endif
1230
Bram Moolenaard38b0552012-04-25 19:07:41 +02001231 hi texBoldStyle gui=bold cterm=bold
1232 hi texItalStyle gui=italic cterm=italic
1233 hi texBoldItalStyle gui=bold,italic cterm=bold,italic
1234 hi texItalBoldStyle gui=bold,italic cterm=bold,italic
Bram Moolenaar723dd942019-04-04 13:11:03 +02001235 hi def link texEmphStyle texItalStyle
Bram Moolenaarf37506f2016-08-31 22:22:10 +02001236 hi def link texCite texRefZone
1237 hi def link texDefCmd texDef
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +02001238 hi def link texDefName texDef
1239 hi def link texDocType texCmdName
1240 hi def link texDocTypeArgs texCmdArgs
Bram Moolenaarf37506f2016-08-31 22:22:10 +02001241 hi def link texInputFileOpt texCmdArgs
1242 hi def link texInputCurlies texDelimiter
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +02001243 hi def link texLigature texSpecialChar
Bram Moolenaare2719092015-01-10 15:09:25 +01001244 if !exists("g:tex_no_math")
Bram Moolenaarf37506f2016-08-31 22:22:10 +02001245 hi def link texMathDelimSet1 texMathDelim
1246 hi def link texMathDelimSet2 texMathDelim
1247 hi def link texMathDelimKey texMathDelim
1248 hi def link texMathMatcher texMath
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +02001249 hi def link texAccent texStatement
Bram Moolenaarf37506f2016-08-31 22:22:10 +02001250 hi def link texGreek texStatement
1251 hi def link texSuperscript texStatement
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +02001252 hi def link texSubscript texStatement
Bram Moolenaarf37506f2016-08-31 22:22:10 +02001253 hi def link texSuperscripts texSuperscript
1254 hi def link texSubscripts texSubscript
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +02001255 hi def link texMathSymbol texStatement
1256 hi def link texMathZoneV texMath
1257 hi def link texMathZoneW texMath
1258 hi def link texMathZoneX texMath
1259 hi def link texMathZoneY texMath
1260 hi def link texMathZoneV texMath
1261 hi def link texMathZoneZ texMath
Bram Moolenaar071d4272004-06-13 20:20:40 +00001262 endif
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +02001263 hi def link texBeginEnd texCmdName
Bram Moolenaarf37506f2016-08-31 22:22:10 +02001264 hi def link texBeginEndName texSection
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +02001265 hi def link texSpaceCode texStatement
Bram Moolenaarf37506f2016-08-31 22:22:10 +02001266 hi def link texStyleStatement texStatement
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +02001267 hi def link texTypeSize texType
1268 hi def link texTypeStyle texType
Bram Moolenaar071d4272004-06-13 20:20:40 +00001269
1270 " Basic TeX highlighting groups
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +02001271 hi def link texCmdArgs Number
1272 hi def link texCmdName Statement
1273 hi def link texComment Comment
1274 hi def link texDef Statement
1275 hi def link texDefParm Special
1276 hi def link texDelimiter Delimiter
Bram Moolenaarf37506f2016-08-31 22:22:10 +02001277 hi def link texInput Special
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +02001278 hi def link texInputFile Special
Bram Moolenaarf37506f2016-08-31 22:22:10 +02001279 hi def link texLength Number
1280 hi def link texMath Special
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +02001281 hi def link texMathDelim Statement
1282 hi def link texMathOper Operator
Bram Moolenaarf37506f2016-08-31 22:22:10 +02001283 hi def link texNewCmd Statement
1284 hi def link texNewEnv Statement
1285 hi def link texOption Number
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +02001286 hi def link texRefZone Special
1287 hi def link texSection PreCondit
Bram Moolenaarf37506f2016-08-31 22:22:10 +02001288 hi def link texSpaceCodeChar Special
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +02001289 hi def link texSpecialChar SpecialChar
1290 hi def link texStatement Statement
Bram Moolenaarf37506f2016-08-31 22:22:10 +02001291 hi def link texString String
1292 hi def link texTodo Todo
1293 hi def link texType Type
1294 hi def link texZone PreCondit
Bram Moolenaar071d4272004-06-13 20:20:40 +00001295
Bram Moolenaar071d4272004-06-13 20:20:40 +00001296endif
1297
Bram Moolenaar15146672011-10-20 22:22:38 +02001298" Cleanup: {{{1
Bram Moolenaara0f849e2015-10-30 14:37:44 +01001299delc TexFold
Bram Moolenaar81af9252010-12-10 20:35:50 +01001300unlet s:extfname
Bram Moolenaar071d4272004-06-13 20:20:40 +00001301let b:current_syntax = "tex"
Bram Moolenaar15146672011-10-20 22:22:38 +02001302let &cpo = s:keepcpo
1303unlet s:keepcpo
Bram Moolenaare90ee312010-08-05 22:08:47 +02001304" vim: ts=8 fdm=marker