blob: 83f6f82547684c4273e353ab952d669602018236 [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001" Vim syntax file
2" Language: TeX
Bram Moolenaar1d9215b2020-01-25 13:27:42 +01003" Maintainer: Charles E. Campbell <NcampObell@SdrPchip.AorgM-NOSPAM>
4" Last Change: Jan 24, 2020
5" Version: 116
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 Moolenaar1d9215b2020-01-25 13:27:42 +0100150if exists("g:tex_excludematcher")
151 let s:tex_excludematcher= g:tex_excludematcher
152else
153 let s:tex_excludematcher= 0
154endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000155
156" Clusters: {{{1
157" --------
Bram Moolenaarbc8801c2016-08-02 21:04:33 +0200158syn 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 +0100159if !s:tex_no_error
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100160 syn cluster texCmdGroup add=texMathError
Bram Moolenaar071d4272004-06-13 20:20:40 +0000161endif
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100162syn cluster texEnvGroup contains=texMatcher,texMathDelim,texSpecialChar,texStatement
Bram Moolenaar723dd942019-04-04 13:11:03 +0200163syn 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 Moolenaar1d9215b2020-01-25 13:27:42 +0100164syn cluster texBoldGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texInputFile,texLength,texLigature,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
165syn cluster texItalGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texInputFile,texLength,texLigature,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
166if !s:tex_excludematcher
167 syn cluster texBoldGroup add=texMatcher
168 syn cluster texItalGroup add=texMatcher
169endif
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100170if !s:tex_nospell
Bram Moolenaarb730f0c2018-11-25 03:56:26 +0100171 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
172 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
173 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 +0200174else
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100175 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 +0200176 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 +0100177 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 +0200178endif
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +0200179syn 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 +0100180syn cluster texRefGroup contains=texMatcher,texComment,texDelimiter
Bram Moolenaare2719092015-01-10 15:09:25 +0100181if !exists("g:tex_no_math")
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +0200182 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 +0100183 syn cluster texMathZones contains=texMathZoneV,texMathZoneW,texMathZoneX,texMathZoneY,texMathZoneZ
184 syn cluster texMatchGroup add=@texMathZones
185 syn cluster texMathDelimGroup contains=texMathDelimBad,texMathDelimKey,texMathDelimSet1,texMathDelimSet2
186 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
187 syn cluster texMathZoneGroup contains=texComment,texDelimiter,texLength,texMathDelim,texMathMatcher,texMathOper,texMathSymbol,texMathText,texRefZone,texSpecialChar,texStatement,texTypeSize,texTypeStyle
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100188 if !s:tex_no_error
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100189 syn cluster texMathMatchGroup add=texMathError
190 syn cluster texMathZoneGroup add=texMathError
Bram Moolenaar071d4272004-06-13 20:20:40 +0000191 endif
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100192 syn cluster texMathZoneGroup add=@NoSpell
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +0000193 " following used in the \part \chapter \section \subsection \subsubsection
194 " \paragraph \subparagraph \author \title highlighting
195 syn cluster texDocGroup contains=texPartZone,@texPartGroup
196 syn cluster texPartGroup contains=texChapterZone,texSectionZone,texParaZone
197 syn cluster texChapterGroup contains=texSectionZone,texParaZone
198 syn cluster texSectionGroup contains=texSubSectionZone,texParaZone
199 syn cluster texSubSectionGroup contains=texSubSubSectionZone,texParaZone
200 syn cluster texSubSubSectionGroup contains=texParaZone
201 syn cluster texParaGroup contains=texSubParaZone
Bram Moolenaarb2c03502010-07-02 20:20:09 +0200202 if has("conceal") && &enc == 'utf-8'
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100203 syn cluster texMathZoneGroup add=texGreek,texSuperscript,texSubscript,texMathSymbol
204 syn cluster texMathMatchGroup add=texGreek,texSuperscript,texSubscript,texMathSymbol
Bram Moolenaarb2c03502010-07-02 20:20:09 +0200205 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000206endif
207
208" Try to flag {} and () mismatches: {{{1
Bram Moolenaarf3913272016-02-25 00:00:01 +0100209if s:tex_fast =~# 'm'
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100210 if !s:tex_no_error
Bram Moolenaar802a0d92016-06-26 16:17:58 +0200211 syn region texMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" transparent contains=@texMatchGroup,texError
212 syn region texMatcher matchgroup=Delimiter start="\[" end="]" transparent contains=@texMatchGroup,texError,@NoSpell
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +0200213 syn region texMatcherNM matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" transparent contains=@texMatchNMGroup,texError
214 syn region texMatcherNM matchgroup=Delimiter start="\[" end="]" transparent contains=@texMatchNMGroup,texError,@NoSpell
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100215 else
Bram Moolenaar802a0d92016-06-26 16:17:58 +0200216 syn region texMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" transparent contains=@texMatchGroup
217 syn region texMatcher matchgroup=Delimiter start="\[" end="]" transparent contains=@texMatchGroup
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +0200218 syn region texMatcherNM matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" transparent contains=@texMatchNMGroup
219 syn region texMatcherNM matchgroup=Delimiter start="\[" end="]" transparent contains=@texMatchNMGroup
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100220 endif
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100221 if !s:tex_nospell
Bram Moolenaar802a0d92016-06-26 16:17:58 +0200222 syn region texParen start="(" end=")" transparent contains=@texMatchGroup,@Spell
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100223 else
Bram Moolenaar802a0d92016-06-26 16:17:58 +0200224 syn region texParen start="(" end=")" transparent contains=@texMatchGroup
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100225 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000226endif
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100227if !s:tex_no_error
Bram Moolenaar071d4272004-06-13 20:20:40 +0000228 syn match texError "[}\])]"
229endif
Bram Moolenaarf3913272016-02-25 00:00:01 +0100230if s:tex_fast =~# 'M'
Bram Moolenaare2719092015-01-10 15:09:25 +0100231 if !exists("g:tex_no_math")
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100232 if !s:tex_no_error
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100233 syn match texMathError "}" contained
234 endif
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100235 syn region texMathMatcher matchgroup=Delimiter start="{" skip="\%(\\\\\)*\\}" end="}" end="%stopzone\>" contained contains=@texMathMatchGroup
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100236 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000237endif
238
239" TeX/LaTeX keywords: {{{1
240" Instead of trying to be All Knowing, I just match \..alphameric..
241" Note that *.tex files may not have "@" in their \commands
242if exists("g:tex_tex") || b:tex_stylish
243 syn match texStatement "\\[a-zA-Z@]\+"
244else
245 syn match texStatement "\\\a\+"
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100246 if !s:tex_no_error
Bram Moolenaar071d4272004-06-13 20:20:40 +0000247 syn match texError "\\\a*@[a-zA-Z@]*"
248 endif
249endif
250
251" TeX/LaTeX delimiters: {{{1
252syn match texDelimiter "&"
253syn match texDelimiter "\\\\"
254
255" Tex/Latex Options: {{{1
Bram Moolenaard38b0552012-04-25 19:07:41 +0200256syn match texOption "[^\\]\zs#\d\+\|^#\d\+"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000257
258" texAccent (tnx to Karim Belabas) avoids annoying highlighting for accents: {{{1
259if b:tex_stylish
260 syn match texAccent "\\[bcdvuH][^a-zA-Z@]"me=e-1
261 syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)[^a-zA-Z@]"me=e-1
262else
263 syn match texAccent "\\[bcdvuH]\A"me=e-1
264 syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)\A"me=e-1
265endif
266syn match texAccent "\\[bcdvuH]$"
267syn match texAccent +\\[=^.\~"`']+
268syn match texAccent +\\['=t'.c^ud"vb~Hr]{\a}+
269syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)$"
270
Bram Moolenaarb0d45e72017-11-05 18:19:24 +0100271
Bram Moolenaar071d4272004-06-13 20:20:40 +0000272" \begin{}/\end{} section markers: {{{1
Bram Moolenaard38b0552012-04-25 19:07:41 +0200273syn match texBeginEnd "\\begin\>\|\\end\>" nextgroup=texBeginEndName
Bram Moolenaarf3913272016-02-25 00:00:01 +0100274if s:tex_fast =~# 'm'
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100275 syn region texBeginEndName matchgroup=Delimiter start="{" end="}" contained nextgroup=texBeginEndModifier contains=texComment
Bram Moolenaar802a0d92016-06-26 16:17:58 +0200276 syn region texBeginEndModifier matchgroup=Delimiter start="\[" end="]" contained contains=texComment,@texMathZones,@NoSpell
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100277endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000278
279" \documentclass, \documentstyle, \usepackage: {{{1
Bram Moolenaard38b0552012-04-25 19:07:41 +0200280syn match texDocType "\\documentclass\>\|\\documentstyle\>\|\\usepackage\>" nextgroup=texBeginEndName,texDocTypeArgs
Bram Moolenaarf3913272016-02-25 00:00:01 +0100281if s:tex_fast =~# 'm'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100282 syn region texDocTypeArgs matchgroup=Delimiter start="\[" end="]" contained nextgroup=texBeginEndName contains=texComment,@NoSpell
283endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000284
Bram Moolenaara9a568c2006-03-14 23:04:27 +0000285" Preamble syntax-based folding support: {{{1
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100286if s:tex_fold_enabled && has("folding")
Bram Moolenaard38b0552012-04-25 19:07:41 +0200287 syn region texPreamble transparent fold start='\zs\\documentclass\>' end='\ze\\begin{document}' contains=texStyle,@texPreambleMatchGroup
Bram Moolenaara9a568c2006-03-14 23:04:27 +0000288endif
289
Bram Moolenaar071d4272004-06-13 20:20:40 +0000290" TeX input: {{{1
291syn match texInput "\\input\s\+[a-zA-Z/.0-9_^]\+"hs=s+7 contains=texStatement
Bram Moolenaar5c736222010-01-06 20:54:52 +0100292syn match texInputFile "\\include\(graphics\|list\)\=\(\[.\{-}\]\)\=\s*{.\{-}}" contains=texStatement,texInputCurlies,texInputFileOpt
Bram Moolenaar071d4272004-06-13 20:20:40 +0000293syn match texInputFile "\\\(epsfig\|input\|usepackage\)\s*\(\[.*\]\)\={.\{-}}" contains=texStatement,texInputCurlies,texInputFileOpt
294syn match texInputCurlies "[{}]" contained
Bram Moolenaarf3913272016-02-25 00:00:01 +0100295if s:tex_fast =~# 'm'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100296 syn region texInputFileOpt matchgroup=Delimiter start="\[" end="\]" contained contains=texComment
297endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000298
299" Type Styles (LaTeX 2.09): {{{1
300syn match texTypeStyle "\\rm\>"
301syn match texTypeStyle "\\em\>"
302syn match texTypeStyle "\\bf\>"
303syn match texTypeStyle "\\it\>"
304syn match texTypeStyle "\\sl\>"
305syn match texTypeStyle "\\sf\>"
306syn match texTypeStyle "\\sc\>"
307syn match texTypeStyle "\\tt\>"
308
309" Type Styles: attributes, commands, families, etc (LaTeX2E): {{{1
Bram Moolenaar7db8f6f2016-03-29 23:12:46 +0200310if s:tex_conceal !~# 'b'
Bram Moolenaard38b0552012-04-25 19:07:41 +0200311 syn match texTypeStyle "\\textbf\>"
312 syn match texTypeStyle "\\textit\>"
Bram Moolenaar723dd942019-04-04 13:11:03 +0200313 syn match texTypeStyle "\\emph\>"
Bram Moolenaard38b0552012-04-25 19:07:41 +0200314endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000315syn match texTypeStyle "\\textmd\>"
316syn match texTypeStyle "\\textrm\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000317
318syn match texTypeStyle "\\mathbb\>"
319syn match texTypeStyle "\\mathbf\>"
320syn match texTypeStyle "\\mathcal\>"
321syn match texTypeStyle "\\mathfrak\>"
322syn match texTypeStyle "\\mathit\>"
323syn match texTypeStyle "\\mathnormal\>"
324syn match texTypeStyle "\\mathrm\>"
325syn match texTypeStyle "\\mathsf\>"
326syn match texTypeStyle "\\mathtt\>"
327
328syn match texTypeStyle "\\rmfamily\>"
329syn match texTypeStyle "\\sffamily\>"
330syn match texTypeStyle "\\ttfamily\>"
331
332syn match texTypeStyle "\\itshape\>"
333syn match texTypeStyle "\\scshape\>"
334syn match texTypeStyle "\\slshape\>"
335syn match texTypeStyle "\\upshape\>"
336
337syn match texTypeStyle "\\bfseries\>"
338syn match texTypeStyle "\\mdseries\>"
339
340" Some type sizes: {{{1
341syn match texTypeSize "\\tiny\>"
342syn match texTypeSize "\\scriptsize\>"
343syn match texTypeSize "\\footnotesize\>"
344syn match texTypeSize "\\small\>"
345syn match texTypeSize "\\normalsize\>"
346syn match texTypeSize "\\large\>"
347syn match texTypeSize "\\Large\>"
348syn match texTypeSize "\\LARGE\>"
349syn match texTypeSize "\\huge\>"
350syn match texTypeSize "\\Huge\>"
351
352" Spacecodes (TeX'isms): {{{1
353" \mathcode`\^^@="2201 \delcode`\(="028300 \sfcode`\)=0 \uccode`X=`X \lccode`x=`x
354syn match texSpaceCode "\\\(math\|cat\|del\|lc\|sf\|uc\)code`"me=e-1 nextgroup=texSpaceCodeChar
355syn match texSpaceCodeChar "`\\\=.\(\^.\)\==\(\d\|\"\x\{1,6}\|`.\)" contained
356
357" Sections, subsections, etc: {{{1
Bram Moolenaarf3913272016-02-25 00:00:01 +0100358if s:tex_fast =~# 'p'
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100359 if !s:tex_nospell
360 TexFold syn region texDocZone matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}' contains=@texFoldGroup,@texDocGroup,@Spell
361 TexFold syn region texPartZone matchgroup=texSection start='\\part\>' end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texPartGroup,@Spell
362 TexFold syn region texChapterZone matchgroup=texSection start='\\chapter\>' end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texChapterGroup,@Spell
363 TexFold syn region texSectionZone matchgroup=texSection start='\\section\>' end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSectionGroup,@Spell
364 TexFold syn region texSubSectionZone matchgroup=texSection start='\\subsection\>' end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSectionGroup,@Spell
365 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
366 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
367 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
368 TexFold syn region texTitle matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}' contains=@texFoldGroup,@Spell
369 TexFold syn region texAbstract matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}' contains=@texFoldGroup,@Spell
370 else
371 TexFold syn region texDocZone matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}' contains=@texFoldGroup,@texDocGroup
372 TexFold syn region texPartZone matchgroup=texSection start='\\part\>' end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texPartGroup
373 TexFold syn region texChapterZone matchgroup=texSection start='\\chapter\>' end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texChapterGroup
374 TexFold syn region texSectionZone matchgroup=texSection start='\\section\>' end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSectionGroup
375 TexFold syn region texSubSectionZone matchgroup=texSection start='\\subsection\>' end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSectionGroup
376 TexFold syn region texSubSubSectionZone matchgroup=texSection start='\\subsubsection\>' end='\ze\s*\\\%(\%(sub\)\{,2}section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSubSectionGroup
377 TexFold syn region texParaZone matchgroup=texSection start='\\paragraph\>' end='\ze\s*\\\%(paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texParaGroup
378 TexFold syn region texSubParaZone matchgroup=texSection start='\\subparagraph\>' end='\ze\s*\\\%(\%(sub\)\=paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup
379 TexFold syn region texTitle matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}' contains=@texFoldGroup
380 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 +0100381 endif
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000382endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000383
Bram Moolenaard38b0552012-04-25 19:07:41 +0200384" particular support for bold and italic {{{1
Bram Moolenaarf3913272016-02-25 00:00:01 +0100385if s:tex_fast =~# 'b'
386 if s:tex_conceal =~# 'b'
Bram Moolenaar83d1b192015-04-13 14:22:40 +0200387 if !exists("g:tex_nospell") || !g:tex_nospell
Bram Moolenaar541f92d2015-06-19 13:27:23 +0200388 syn region texBoldStyle matchgroup=texTypeStyle start="\\textbf\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup,@Spell
389 syn region texBoldItalStyle matchgroup=texTypeStyle start="\\textit\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup,@Spell
390 syn region texItalStyle matchgroup=texTypeStyle start="\\textit\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup,@Spell
391 syn region texItalBoldStyle matchgroup=texTypeStyle start="\\textbf\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup,@Spell
Bram Moolenaar723dd942019-04-04 13:11:03 +0200392 syn region texEmphStyle matchgroup=texTypeStyle start="\\emph\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup,@Spell
Bram Moolenaar1d9215b2020-01-25 13:27:42 +0100393 syn region texEmphStyle matchgroup=texTypeStyle start="\\texts[cfl]\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup,@Spell
394 syn region texEmphStyle matchgroup=texTypeStyle start="\\textup\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup,@Spell
395 syn region texEmphStyle matchgroup=texTypeStyle start="\\texttt\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup,@Spell
Bram Moolenaar541f92d2015-06-19 13:27:23 +0200396 else
397 syn region texBoldStyle matchgroup=texTypeStyle start="\\textbf\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup
398 syn region texBoldItalStyle matchgroup=texTypeStyle start="\\textit\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup
399 syn region texItalStyle matchgroup=texTypeStyle start="\\textit\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup
400 syn region texItalBoldStyle matchgroup=texTypeStyle start="\\textbf\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup
Bram Moolenaar723dd942019-04-04 13:11:03 +0200401 syn region texEmphStyle matchgroup=texTypeStyle start="\\emph\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup
Bram Moolenaar1d9215b2020-01-25 13:27:42 +0100402 syn region texEmphStyle matchgroup=texTypeStyle start="\\texts[cfl]\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texEmphGroup
403 syn region texEmphStyle matchgroup=texTypeStyle start="\\textup\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texEmphGroup
404 syn region texEmphStyle matchgroup=texTypeStyle start="\\texttt\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texEmphGroup
Bram Moolenaar83d1b192015-04-13 14:22:40 +0200405 endif
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100406 endif
Bram Moolenaard38b0552012-04-25 19:07:41 +0200407endif
408
Bram Moolenaar071d4272004-06-13 20:20:40 +0000409" Bad Math (mismatched): {{{1
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100410if !exists("g:tex_no_math") && !s:tex_no_error
Bram Moolenaar51ad4ea2018-04-06 11:14:11 +0200411 syn match texBadMath "\\end\s*{\s*\(array\|[bBpvV]matrix\|split\|smallmatrix\)\s*}"
Bram Moolenaarf0b03c42017-12-17 17:17:07 +0100412 syn match texBadMath "\\end\s*{\s*\(displaymath\|equation\|eqnarray\|math\)\*\=\s*}"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000413 syn match texBadMath "\\[\])]"
414endif
415
416" Math Zones: {{{1
Bram Moolenaare2719092015-01-10 15:09:25 +0100417if !exists("g:tex_no_math")
Bram Moolenaar488c6512005-08-11 20:09:58 +0000418 " TexNewMathZone: function creates a mathzone with the given suffix and mathzone name. {{{2
Bram Moolenaar071d4272004-06-13 20:20:40 +0000419 " Starred forms are created if starform is true. Starred
420 " forms have syntax group and synchronization groups with a
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +0200421 " "S" appended. Handles: cluster, syntax, sync, and highlighting.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000422 fun! TexNewMathZone(sfx,mathzone,starform)
423 let grpname = "texMathZone".a:sfx
424 let syncname = "texSyncMathZone".a:sfx
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100425 if s:tex_fold_enabled
Bram Moolenaar3577c6f2008-06-24 21:16:56 +0000426 let foldcmd= " fold"
427 else
428 let foldcmd= ""
429 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000430 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 if a:starform
438 let grpname = "texMathZone".a:sfx.'S'
439 let syncname = "texSyncMathZone".a:sfx.'S'
440 exe "syn cluster texMathZones add=".grpname
Bram Moolenaarf3913272016-02-25 00:00:01 +0100441 if s:tex_fast =~# 'M'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100442 exe 'syn region '.grpname.' start='."'".'\\begin\s*{\s*'.a:mathzone.'\*\s*}'."'".' end='."'".'\\end\s*{\s*'.a:mathzone.'\*\s*}'."'".' keepend contains=@texMathZoneGroup'.foldcmd
443 exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
444 exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
445 endif
Bram Moolenaar5c736222010-01-06 20:54:52 +0100446 exe 'hi def link '.grpname.' texMath'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000447 endif
448 endfun
449
450 " Standard Math Zones: {{{2
Bram Moolenaarf0b03c42017-12-17 17:17:07 +0100451 call TexNewMathZone("A","displaymath",1)
452 call TexNewMathZone("B","eqnarray",1)
453 call TexNewMathZone("C","equation",1)
454 call TexNewMathZone("D","math",1)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000455
456 " Inline Math Zones: {{{2
Bram Moolenaarf3913272016-02-25 00:00:01 +0100457 if s:tex_fast =~# 'M'
458 if has("conceal") && &enc == 'utf-8' && s:tex_conceal =~# 'd'
Bram Moolenaar541f92d2015-06-19 13:27:23 +0200459 syn region texMathZoneV matchgroup=Delimiter start="\\(" matchgroup=Delimiter end="\\)\|%stopzone\>" keepend concealends contains=@texMathZoneGroup
460 syn region texMathZoneW matchgroup=Delimiter start="\\\[" matchgroup=Delimiter end="\\]\|%stopzone\>" keepend concealends contains=@texMathZoneGroup
461 syn region texMathZoneX matchgroup=Delimiter start="\$" skip="\\\\\|\\\$" matchgroup=Delimiter end="\$" end="%stopzone\>" concealends contains=@texMathZoneGroup
462 syn region texMathZoneY matchgroup=Delimiter start="\$\$" matchgroup=Delimiter end="\$\$" end="%stopzone\>" keepend concealends contains=@texMathZoneGroup
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100463 else
Bram Moolenaar541f92d2015-06-19 13:27:23 +0200464 syn region texMathZoneV matchgroup=Delimiter start="\\(" matchgroup=Delimiter end="\\)\|%stopzone\>" keepend contains=@texMathZoneGroup
465 syn region texMathZoneW matchgroup=Delimiter start="\\\[" matchgroup=Delimiter end="\\]\|%stopzone\>" keepend contains=@texMathZoneGroup
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100466 syn region texMathZoneX matchgroup=Delimiter start="\$" skip="\%(\\\\\)*\\\$" matchgroup=Delimiter end="\$" end="%stopzone\>" contains=@texMathZoneGroup
Bram Moolenaar541f92d2015-06-19 13:27:23 +0200467 syn region texMathZoneY matchgroup=Delimiter start="\$\$" matchgroup=Delimiter end="\$\$" end="%stopzone\>" keepend contains=@texMathZoneGroup
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100468 endif
Bram Moolenaar541f92d2015-06-19 13:27:23 +0200469 syn region texMathZoneZ matchgroup=texStatement start="\\ensuremath\s*{" matchgroup=texStatement end="}" end="%stopzone\>" contains=@texMathZoneGroup
Bram Moolenaare0021c72010-07-28 17:25:21 +0200470 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000471
472 syn match texMathOper "[_^=]" contained
473
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200474 " Text Inside Math Zones: {{{2
Bram Moolenaarf3913272016-02-25 00:00:01 +0100475 if s:tex_fast =~# 'M'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100476 if !exists("g:tex_nospell") || !g:tex_nospell
477 syn region texMathText matchgroup=texStatement start='\\\(\(inter\)\=text\|mbox\)\s*{' end='}' contains=@texFoldGroup,@Spell
478 else
479 syn region texMathText matchgroup=texStatement start='\\\(\(inter\)\=text\|mbox\)\s*{' end='}' contains=@texFoldGroup
480 endif
Bram Moolenaard960d762011-09-21 19:22:10 +0200481 endif
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200482
Bram Moolenaar071d4272004-06-13 20:20:40 +0000483 " \left..something.. and \right..something.. support: {{{2
484 syn match texMathDelimBad contained "\S"
Bram Moolenaarf3913272016-02-25 00:00:01 +0100485 if has("conceal") && &enc == 'utf-8' && s:tex_conceal =~# 'm'
Bram Moolenaarbc8801c2016-08-02 21:04:33 +0200486 syn match texMathDelim contained "\\left\["
487 syn match texMathDelim contained "\\left\\{" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad contains=texMathSymbol cchar={
488 syn match texMathDelim contained "\\right\\}" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad contains=texMathSymbol cchar=}
Bram Moolenaaradc21822011-04-01 18:03:16 +0200489 let s:texMathDelimList=[
490 \ ['<' , '<'] ,
491 \ ['>' , '>'] ,
492 \ ['(' , '('] ,
493 \ [')' , ')'] ,
494 \ ['\[' , '['] ,
495 \ [']' , ']'] ,
496 \ ['\\{' , '{'] ,
497 \ ['\\}' , '}'] ,
498 \ ['|' , '|'] ,
499 \ ['\\|' , '‖'] ,
500 \ ['\\backslash' , '\'] ,
501 \ ['\\downarrow' , '↓'] ,
502 \ ['\\Downarrow' , '⇓'] ,
Bram Moolenaaradc21822011-04-01 18:03:16 +0200503 \ ['\\lbrace' , '['] ,
504 \ ['\\lceil' , '⌈'] ,
505 \ ['\\lfloor' , '⌊'] ,
506 \ ['\\lgroup' , '⌊'] ,
507 \ ['\\lmoustache' , '⎛'] ,
Bram Moolenaaradc21822011-04-01 18:03:16 +0200508 \ ['\\rbrace' , ']'] ,
509 \ ['\\rceil' , '⌉'] ,
510 \ ['\\rfloor' , '⌋'] ,
511 \ ['\\rgroup' , '⌋'] ,
512 \ ['\\rmoustache' , '⎞'] ,
513 \ ['\\uparrow' , '↑'] ,
514 \ ['\\Uparrow' , '↑'] ,
515 \ ['\\updownarrow', '↕'] ,
516 \ ['\\Updownarrow', '⇕']]
Bram Moolenaar690afe12017-01-28 18:34:47 +0100517 if &ambw == "double" || exists("g:tex_usedblwidth")
518 let s:texMathDelimList= s:texMathDelimList + [
519 \ ['\\langle' , '〈'] ,
Bram Moolenaar7f2e9d72017-11-11 20:58:53 +0100520 \ ['\\rangle' , '〉']]
Bram Moolenaar690afe12017-01-28 18:34:47 +0100521 else
522 let s:texMathDelimList= s:texMathDelimList + [
523 \ ['\\langle' , '<'] ,
524 \ ['\\rangle' , '>']]
525 endif
Bram Moolenaaradc21822011-04-01 18:03:16 +0200526 syn match texMathDelim '\\[bB]igg\=[lr]' contained nextgroup=texMathDelimBad
527 for texmath in s:texMathDelimList
528 exe "syn match texMathDelim '\\\\[bB]igg\\=[lr]\\=".texmath[0]."' contained conceal cchar=".texmath[1]
529 endfor
530
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200531 else
532 syn match texMathDelim contained "\\\(left\|right\)\>" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad
Bram Moolenaaradc21822011-04-01 18:03:16 +0200533 syn match texMathDelim contained "\\[bB]igg\=[lr]\=\>" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad
534 syn match texMathDelimSet2 contained "\\" nextgroup=texMathDelimKey,texMathDelimBad
535 syn match texMathDelimSet1 contained "[<>()[\]|/.]\|\\[{}|]"
536 syn keyword texMathDelimKey contained backslash lceil lVert rgroup uparrow
537 syn keyword texMathDelimKey contained downarrow lfloor rangle rmoustache Uparrow
538 syn keyword texMathDelimKey contained Downarrow lgroup rbrace rvert updownarrow
539 syn keyword texMathDelimKey contained langle lmoustache rceil rVert Updownarrow
540 syn keyword texMathDelimKey contained lbrace lvert rfloor
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200541 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000542 syn match texMathDelim contained "\\\(left\|right\)arrow\>\|\<\([aA]rrow\|brace\)\=vert\>"
543 syn match texMathDelim contained "\\lefteqn\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000544endif
545
546" Special TeX characters ( \$ \& \% \# \{ \} \_ \S \P ) : {{{1
547syn match texSpecialChar "\\[$&%#{}_]"
548if b:tex_stylish
549 syn match texSpecialChar "\\[SP@][^a-zA-Z@]"me=e-1
550else
551 syn match texSpecialChar "\\[SP@]\A"me=e-1
552endif
553syn match texSpecialChar "\\\\"
Bram Moolenaare2719092015-01-10 15:09:25 +0100554if !exists("g:tex_no_math")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000555 syn match texOnlyMath "[_^]"
556endif
557syn match texSpecialChar "\^\^[0-9a-f]\{2}\|\^\^\S"
Bram Moolenaar7db8f6f2016-03-29 23:12:46 +0200558if s:tex_conceal !~# 'S'
Bram Moolenaarbc488a72013-07-05 21:01:22 +0200559 syn match texSpecialChar '\\glq\>' contained conceal cchar=‚
560 syn match texSpecialChar '\\grq\>' contained conceal cchar=‘
561 syn match texSpecialChar '\\glqq\>' contained conceal cchar=„
562 syn match texSpecialChar '\\grqq\>' contained conceal cchar=“
563 syn match texSpecialChar '\\hyp\>' contained conceal cchar=-
564endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000565
566" Comments: {{{1
567" Normal TeX LaTeX : %....
568" Documented TeX Format: ^^A... -and- leading %s (only)
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100569if !s:tex_comment_nospell
Bram Moolenaar3577c6f2008-06-24 21:16:56 +0000570 syn cluster texCommentGroup contains=texTodo,@Spell
571else
572 syn cluster texCommentGroup contains=texTodo,@NoSpell
573endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000574syn case ignore
Bram Moolenaar18144c82006-04-12 21:52:12 +0000575syn keyword texTodo contained combak fixme todo xxx
Bram Moolenaar071d4272004-06-13 20:20:40 +0000576syn case match
Bram Moolenaar81af9252010-12-10 20:35:50 +0100577if s:extfname == "dtx"
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100578 syn match texComment "\^\^A.*$" contains=@texCommentGroup
579 syn match texComment "^%\+" contains=@texCommentGroup
Bram Moolenaar071d4272004-06-13 20:20:40 +0000580else
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100581 if s:tex_fold_enabled
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100582 " allows syntax-folding of 2 or more contiguous comment lines
583 " single-line comments are not folded
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100584 syn match texComment "%.*$" contains=@texCommentGroup
Bram Moolenaarf3913272016-02-25 00:00:01 +0100585 if s:tex_fast =~# 'c'
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100586 TexFold syn region texComment start="^\zs\s*%.*\_s*%" skip="^\s*%" end='^\ze\s*[^%]' contains=@texCommentGroup
587 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 +0000588 endif
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100589 else
590 syn match texComment "%.*$" contains=@texCommentGroup
Bram Moolenaarf3913272016-02-25 00:00:01 +0100591 if s:tex_fast =~# 'c'
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100592 syn region texNoSpell contained matchgroup=texComment start="%\s*nospell\s*{" end="%\s*nospell\s*}" contains=@texFoldGroup,@NoSpell
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100593 endif
594 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000595endif
596
Bram Moolenaarb0d45e72017-11-05 18:19:24 +0100597" %begin-include ... %end-include acts like a texDocZone for \include'd files. Permits spell checking, for example, in such files.
598if !s:tex_nospell
599 TexFold syn region texDocZone matchgroup=texSection start='^\s*%begin-include\>' end='^\s*%end-include\>' contains=@texFoldGroup,@texDocGroup,@Spell
600else
601 TexFold syn region texDocZone matchgroup=texSection start='^\s*%begin-include\>' end='^\s*%end-include\>' contains=@texFoldGroup,@texDocGroup
602endif
603
Bram Moolenaar071d4272004-06-13 20:20:40 +0000604" Separate lines used for verb` and verb# so that the end conditions {{{1
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200605" will appropriately terminate.
606" If g:tex_verbspell exists, then verbatim texZones will permit spellchecking there.
Bram Moolenaarf3913272016-02-25 00:00:01 +0100607if s:tex_fast =~# 'v'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100608 if exists("g:tex_verbspell") && g:tex_verbspell
609 syn region texZone start="\\begin{[vV]erbatim}" end="\\end{[vV]erbatim}\|%stopzone\>" contains=@Spell
Bram Moolenaarb0d45e72017-11-05 18:19:24 +0100610 " listings package:
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200611 if b:tex_stylish
612 syn region texZone start="\\verb\*\=\z([^\ta-zA-Z@]\)" end="\z1\|%stopzone\>" contains=@Spell
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200613 else
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200614 syn region texZone start="\\verb\*\=\z([^\ta-zA-Z]\)" end="\z1\|%stopzone\>" contains=@Spell
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200615 endif
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100616 else
617 syn region texZone start="\\begin{[vV]erbatim}" end="\\end{[vV]erbatim}\|%stopzone\>"
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200618 if b:tex_stylish
619 syn region texZone start="\\verb\*\=\z([^\ta-zA-Z@]\)" end="\z1\|%stopzone\>"
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200620 else
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200621 syn region texZone start="\\verb\*\=\z([^\ta-zA-Z]\)" end="\z1\|%stopzone\>"
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200622 endif
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100623 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000624endif
625
626" Tex Reference Zones: {{{1
Bram Moolenaarf3913272016-02-25 00:00:01 +0100627if s:tex_fast =~# 'r'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100628 syn region texZone matchgroup=texStatement start="@samp{" end="}\|%stopzone\>" contains=@texRefGroup
629 syn region texRefZone matchgroup=texStatement start="\\nocite{" end="}\|%stopzone\>" contains=@texRefGroup
630 syn region texRefZone matchgroup=texStatement start="\\bibliography{" end="}\|%stopzone\>" contains=@texRefGroup
631 syn region texRefZone matchgroup=texStatement start="\\label{" end="}\|%stopzone\>" contains=@texRefGroup
632 syn region texRefZone matchgroup=texStatement start="\\\(page\|eq\)ref{" end="}\|%stopzone\>" contains=@texRefGroup
633 syn region texRefZone matchgroup=texStatement start="\\v\=ref{" end="}\|%stopzone\>" contains=@texRefGroup
634 syn region texRefOption contained matchgroup=Delimiter start='\[' end=']' contains=@texRefGroup,texRefZone nextgroup=texRefOption,texCite
Bram Moolenaar6e932462014-09-09 18:48:09 +0200635 syn region texCite contained matchgroup=Delimiter start='{' end='}' contains=@texRefGroup,texRefZone,texCite
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100636endif
Bram Moolenaar1d9215b2020-01-25 13:27:42 +0100637syn match texRefZone '\\cite\%([tp]\*\=\)\=\>' nextgroup=texRefOption,texCite
Bram Moolenaar071d4272004-06-13 20:20:40 +0000638
639" Handle newcommand, newenvironment : {{{1
640syn match texNewCmd "\\newcommand\>" nextgroup=texCmdName skipwhite skipnl
Bram Moolenaarf3913272016-02-25 00:00:01 +0100641if s:tex_fast =~# 'V'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100642 syn region texCmdName contained matchgroup=Delimiter start="{"rs=s+1 end="}" nextgroup=texCmdArgs,texCmdBody skipwhite skipnl
643 syn region texCmdArgs contained matchgroup=Delimiter start="\["rs=s+1 end="]" nextgroup=texCmdBody skipwhite skipnl
644 syn region texCmdBody contained matchgroup=Delimiter start="{"rs=s+1 skip="\\\\\|\\[{}]" matchgroup=Delimiter end="}" contains=@texCmdGroup
645endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000646syn match texNewEnv "\\newenvironment\>" nextgroup=texEnvName skipwhite skipnl
Bram Moolenaarf3913272016-02-25 00:00:01 +0100647if s:tex_fast =~# 'V'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100648 syn region texEnvName contained matchgroup=Delimiter start="{"rs=s+1 end="}" nextgroup=texEnvBgn skipwhite skipnl
649 syn region texEnvBgn contained matchgroup=Delimiter start="{"rs=s+1 end="}" nextgroup=texEnvEnd skipwhite skipnl contains=@texEnvGroup
650 syn region texEnvEnd contained matchgroup=Delimiter start="{"rs=s+1 end="}" skipwhite skipnl contains=@texEnvGroup
651endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000652
653" Definitions/Commands: {{{1
654syn match texDefCmd "\\def\>" nextgroup=texDefName skipwhite skipnl
655if b:tex_stylish
656 syn match texDefName contained "\\[a-zA-Z@]\+" nextgroup=texDefParms,texCmdBody skipwhite skipnl
657 syn match texDefName contained "\\[^a-zA-Z@]" nextgroup=texDefParms,texCmdBody skipwhite skipnl
658else
659 syn match texDefName contained "\\\a\+" nextgroup=texDefParms,texCmdBody skipwhite skipnl
660 syn match texDefName contained "\\\A" nextgroup=texDefParms,texCmdBody skipwhite skipnl
661endif
662syn match texDefParms contained "#[^{]*" contains=texDefParm nextgroup=texCmdBody skipwhite skipnl
663syn match texDefParm contained "#\d\+"
664
665" TeX Lengths: {{{1
Bram Moolenaar9964e462007-05-05 17:54:07 +0000666syn 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 +0000667
668" TeX String Delimiters: {{{1
669syn match texString "\(``\|''\|,,\)"
670
Bram Moolenaar5c736222010-01-06 20:54:52 +0100671" makeatletter -- makeatother sections
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100672if !s:tex_no_error
Bram Moolenaarf3913272016-02-25 00:00:01 +0100673 if s:tex_fast =~# 'S'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100674 syn region texStyle matchgroup=texStatement start='\\makeatletter' end='\\makeatother' contains=@texStyleGroup contained
675 endif
Bram Moolenaar5c736222010-01-06 20:54:52 +0100676 syn match texStyleStatement "\\[a-zA-Z@]\+" contained
Bram Moolenaarf3913272016-02-25 00:00:01 +0100677 if s:tex_fast =~# 'S'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100678 syn region texStyleMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" contains=@texStyleGroup,texError contained
679 syn region texStyleMatcher matchgroup=Delimiter start="\[" end="]" contains=@texStyleGroup,texError contained
680 endif
Bram Moolenaar5c736222010-01-06 20:54:52 +0100681endif
682
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200683" Conceal mode support (supports set cole=2) {{{1
Bram Moolenaarb2c03502010-07-02 20:20:09 +0200684if has("conceal") && &enc == 'utf-8'
Bram Moolenaar611df5b2010-07-26 22:51:56 +0200685
686 " Math Symbols {{{2
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200687 " (many of these symbols were contributed by Björn Winckler)
Bram Moolenaarf3913272016-02-25 00:00:01 +0100688 if s:tex_conceal =~# 'm'
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200689 let s:texMathList=[
Bram Moolenaaradc21822011-04-01 18:03:16 +0200690 \ ['|' , '‖'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200691 \ ['aleph' , 'ℵ'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100692 \ ['amalg' , '∐'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200693 \ ['angle' , '∠'],
694 \ ['approx' , '≈'],
695 \ ['ast' , '∗'],
696 \ ['asymp' , '≍'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200697 \ ['backslash' , '∖'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200698 \ ['bigcap' , '∩'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100699 \ ['bigcirc' , '○'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200700 \ ['bigcup' , '∪'],
701 \ ['bigodot' , '⊙'],
702 \ ['bigoplus' , '⊕'],
703 \ ['bigotimes' , '⊗'],
704 \ ['bigsqcup' , '⊔'],
705 \ ['bigtriangledown', '∇'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100706 \ ['bigtriangleup' , '∆'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200707 \ ['bigvee' , '⋁'],
708 \ ['bigwedge' , '⋀'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200709 \ ['bot' , '⊥'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100710 \ ['bowtie' , '⋈'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100711 \ ['bullet' , '•'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200712 \ ['cap' , '∩'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200713 \ ['cdot' , '·'],
714 \ ['cdots' , '⋯'],
715 \ ['circ' , '∘'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200716 \ ['clubsuit' , '♣'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200717 \ ['cong' , '≅'],
718 \ ['coprod' , '∐'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200719 \ ['copyright' , '©'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200720 \ ['cup' , '∪'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100721 \ ['dagger' , '†'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200722 \ ['dashv' , '⊣'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100723 \ ['ddagger' , '‡'],
724 \ ['ddots' , '⋱'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200725 \ ['diamond' , '⋄'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200726 \ ['diamondsuit' , '♢'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200727 \ ['div' , '÷'],
728 \ ['doteq' , '≐'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100729 \ ['dots' , '…'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200730 \ ['downarrow' , '↓'],
731 \ ['Downarrow' , '⇓'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100732 \ ['ell' , 'ℓ'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200733 \ ['emptyset' , '∅'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200734 \ ['equiv' , '≡'],
735 \ ['exists' , '∃'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200736 \ ['flat' , '♭'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200737 \ ['forall' , '∀'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100738 \ ['frown' , '⁔'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200739 \ ['ge' , '≥'],
740 \ ['geq' , '≥'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200741 \ ['gets' , '←'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100742 \ ['gg' , '⟫'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200743 \ ['hbar' , 'ℏ'],
744 \ ['heartsuit' , '♡'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200745 \ ['hookleftarrow' , '↩'],
746 \ ['hookrightarrow' , '↪'],
Bram Moolenaar690afe12017-01-28 18:34:47 +0100747 \ ['iff' , '⇔'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200748 \ ['Im' , 'ℑ'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200749 \ ['imath' , 'ɩ'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200750 \ ['in' , '∈'],
751 \ ['infty' , '∞'],
752 \ ['int' , '∫'],
Bram Moolenaar690afe12017-01-28 18:34:47 +0100753 \ ['jmath' , '𝚥'],
754 \ ['land' , '∧'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200755 \ ['lceil' , '⌈'],
756 \ ['ldots' , '…'],
757 \ ['le' , '≤'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200758 \ ['left(' , '('],
759 \ ['left\[' , '['],
760 \ ['left\\{' , '{'],
Bram Moolenaare2719092015-01-10 15:09:25 +0100761 \ ['leftarrow' , '←'],
762 \ ['Leftarrow' , '⇐'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100763 \ ['leftharpoondown', '↽'],
764 \ ['leftharpoonup' , '↼'],
Bram Moolenaar97d62492012-11-15 21:28:22 +0100765 \ ['leftrightarrow' , '↔'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100766 \ ['Leftrightarrow' , '⇔'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200767 \ ['leq' , '≤'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100768 \ ['leq' , '≤'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200769 \ ['lfloor' , '⌊'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100770 \ ['ll' , '≪'],
Bram Moolenaaradc21822011-04-01 18:03:16 +0200771 \ ['lmoustache' , '╭'],
Bram Moolenaar690afe12017-01-28 18:34:47 +0100772 \ ['lor' , '∨'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200773 \ ['mapsto' , '↦'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200774 \ ['mid' , '∣'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100775 \ ['models' , '╞'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200776 \ ['mp' , '∓'],
777 \ ['nabla' , '∇'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200778 \ ['natural' , '♮'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200779 \ ['ne' , '≠'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100780 \ ['nearrow' , '↗'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200781 \ ['neg' , '¬'],
782 \ ['neq' , '≠'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200783 \ ['ni' , '∋'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200784 \ ['notin' , '∉'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200785 \ ['nwarrow' , '↖'],
786 \ ['odot' , '⊙'],
787 \ ['oint' , '∮'],
788 \ ['ominus' , '⊖'],
789 \ ['oplus' , '⊕'],
790 \ ['oslash' , '⊘'],
791 \ ['otimes' , '⊗'],
792 \ ['owns' , '∋'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200793 \ ['P' , '¶'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100794 \ ['parallel' , '║'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200795 \ ['partial' , '∂'],
796 \ ['perp' , '⊥'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200797 \ ['pm' , '±'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200798 \ ['prec' , '≺'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200799 \ ['preceq' , '⪯'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200800 \ ['prime' , '′'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200801 \ ['prod' , '∏'],
802 \ ['propto' , '∝'],
803 \ ['rceil' , '⌉'],
804 \ ['Re' , 'ℜ'],
Bram Moolenaar723dd942019-04-04 13:11:03 +0200805 \ ['quad' , ' '],
806 \ ['qquad' , ' '],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200807 \ ['rfloor' , '⌋'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200808 \ ['right)' , ')'],
809 \ ['right]' , ']'],
810 \ ['right\\}' , '}'],
Bram Moolenaare2719092015-01-10 15:09:25 +0100811 \ ['rightarrow' , '→'],
812 \ ['Rightarrow' , '⇒'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100813 \ ['rightleftharpoons', '⇌'],
Bram Moolenaaradc21822011-04-01 18:03:16 +0200814 \ ['rmoustache' , '╮'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200815 \ ['S' , '§'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200816 \ ['searrow' , '↘'],
817 \ ['setminus' , '∖'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200818 \ ['sharp' , '♯'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200819 \ ['sim' , '∼'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100820 \ ['simeq' , '⋍'],
821 \ ['smile' , '‿'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200822 \ ['spadesuit' , '♠'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200823 \ ['sqcap' , '⊓'],
824 \ ['sqcup' , '⊔'],
825 \ ['sqsubset' , '⊏'],
826 \ ['sqsubseteq' , '⊑'],
827 \ ['sqsupset' , '⊐'],
828 \ ['sqsupseteq' , '⊒'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100829 \ ['star' , '✫'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200830 \ ['subset' , '⊂'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200831 \ ['subseteq' , '⊆'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200832 \ ['succ' , '≻'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200833 \ ['succeq' , '⪰'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200834 \ ['sum' , '∑'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100835 \ ['supset' , '⊃'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200836 \ ['supseteq' , '⊇'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200837 \ ['surd' , '√'],
838 \ ['swarrow' , '↙'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200839 \ ['times' , '×'],
840 \ ['to' , '→'],
841 \ ['top' , '⊤'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200842 \ ['triangle' , '∆'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200843 \ ['triangleleft' , '⊲'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200844 \ ['triangleright' , '⊳'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200845 \ ['uparrow' , '↑'],
846 \ ['Uparrow' , '⇑'],
847 \ ['updownarrow' , '↕'],
848 \ ['Updownarrow' , '⇕'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200849 \ ['vdash' , '⊢'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200850 \ ['vdots' , '⋮'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200851 \ ['vee' , '∨'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200852 \ ['wedge' , '∧'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200853 \ ['wp' , '℘'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200854 \ ['wr' , '≀']]
Bram Moolenaar690afe12017-01-28 18:34:47 +0100855 if &ambw == "double" || exists("g:tex_usedblwidth")
856 let s:texMathList= s:texMathList + [
857 \ ['right\\rangle' , '〉'],
858 \ ['left\\langle' , '〈']]
859 else
860 let s:texMathList= s:texMathList + [
861 \ ['right\\rangle' , '>'],
862 \ ['left\\langle' , '<']]
863 endif
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200864 for texmath in s:texMathList
Bram Moolenaarf3913272016-02-25 00:00:01 +0100865 if texmath[0] =~# '\w$'
Bram Moolenaar81af9252010-12-10 20:35:50 +0100866 exe "syn match texMathSymbol '\\\\".texmath[0]."\\>' contained conceal cchar=".texmath[1]
867 else
868 exe "syn match texMathSymbol '\\\\".texmath[0]."' contained conceal cchar=".texmath[1]
869 endif
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200870 endfor
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200871
872 if &ambw == "double"
873 syn match texMathSymbol '\\gg\>' contained conceal cchar=≫
874 syn match texMathSymbol '\\ll\>' contained conceal cchar=≪
875 else
876 syn match texMathSymbol '\\gg\>' contained conceal cchar=⟫
877 syn match texMathSymbol '\\ll\>' contained conceal cchar=⟪
878 endif
Bram Moolenaard960d762011-09-21 19:22:10 +0200879
880 syn match texMathSymbol '\\hat{a}' contained conceal cchar=â
881 syn match texMathSymbol '\\hat{A}' contained conceal cchar=Â
882 syn match texMathSymbol '\\hat{c}' contained conceal cchar=ĉ
883 syn match texMathSymbol '\\hat{C}' contained conceal cchar=Ĉ
884 syn match texMathSymbol '\\hat{e}' contained conceal cchar=ê
885 syn match texMathSymbol '\\hat{E}' contained conceal cchar=Ê
886 syn match texMathSymbol '\\hat{g}' contained conceal cchar=ĝ
887 syn match texMathSymbol '\\hat{G}' contained conceal cchar=Ĝ
888 syn match texMathSymbol '\\hat{i}' contained conceal cchar=î
889 syn match texMathSymbol '\\hat{I}' contained conceal cchar=Î
890 syn match texMathSymbol '\\hat{o}' contained conceal cchar=ô
891 syn match texMathSymbol '\\hat{O}' contained conceal cchar=Ô
892 syn match texMathSymbol '\\hat{s}' contained conceal cchar=ŝ
893 syn match texMathSymbol '\\hat{S}' contained conceal cchar=Ŝ
894 syn match texMathSymbol '\\hat{u}' contained conceal cchar=û
895 syn match texMathSymbol '\\hat{U}' contained conceal cchar=Û
896 syn match texMathSymbol '\\hat{w}' contained conceal cchar=ŵ
897 syn match texMathSymbol '\\hat{W}' contained conceal cchar=Ŵ
898 syn match texMathSymbol '\\hat{y}' contained conceal cchar=ŷ
899 syn match texMathSymbol '\\hat{Y}' contained conceal cchar=Ŷ
Bram Moolenaare2719092015-01-10 15:09:25 +0100900" syn match texMathSymbol '\\bar{a}' contained conceal cchar=a̅
Bram Moolenaar51ad4ea2018-04-06 11:14:11 +0200901
902 syn match texMathSymbol '\\dot{B}' contained conceal cchar=Ḃ
903 syn match texMathSymbol '\\dot{b}' contained conceal cchar=ḃ
904 syn match texMathSymbol '\\dot{D}' contained conceal cchar=Ḋ
905 syn match texMathSymbol '\\dot{d}' contained conceal cchar=ḋ
906 syn match texMathSymbol '\\dot{F}' contained conceal cchar=Ḟ
907 syn match texMathSymbol '\\dot{f}' contained conceal cchar=ḟ
908 syn match texMathSymbol '\\dot{H}' contained conceal cchar=Ḣ
909 syn match texMathSymbol '\\dot{h}' contained conceal cchar=ḣ
910 syn match texMathSymbol '\\dot{M}' contained conceal cchar=Ṁ
911 syn match texMathSymbol '\\dot{m}' contained conceal cchar=ṁ
912 syn match texMathSymbol '\\dot{N}' contained conceal cchar=Ṅ
913 syn match texMathSymbol '\\dot{n}' contained conceal cchar=ṅ
914 syn match texMathSymbol '\\dot{P}' contained conceal cchar=Ṗ
915 syn match texMathSymbol '\\dot{p}' contained conceal cchar=ṗ
916 syn match texMathSymbol '\\dot{R}' contained conceal cchar=Ṙ
917 syn match texMathSymbol '\\dot{r}' contained conceal cchar=ṙ
918 syn match texMathSymbol '\\dot{S}' contained conceal cchar=Ṡ
919 syn match texMathSymbol '\\dot{s}' contained conceal cchar=ṡ
920 syn match texMathSymbol '\\dot{T}' contained conceal cchar=Ṫ
921 syn match texMathSymbol '\\dot{t}' contained conceal cchar=ṫ
922 syn match texMathSymbol '\\dot{W}' contained conceal cchar=Ẇ
923 syn match texMathSymbol '\\dot{w}' contained conceal cchar=ẇ
924 syn match texMathSymbol '\\dot{X}' contained conceal cchar=Ẋ
925 syn match texMathSymbol '\\dot{x}' contained conceal cchar=ẋ
926 syn match texMathSymbol '\\dot{Y}' contained conceal cchar=Ẏ
927 syn match texMathSymbol '\\dot{y}' contained conceal cchar=ẏ
928 syn match texMathSymbol '\\dot{Z}' contained conceal cchar=Ż
929 syn match texMathSymbol '\\dot{z}' contained conceal cchar=ż
930
931 syn match texMathSymbol '\\dot{C}' contained conceal cchar=Ċ
932 syn match texMathSymbol '\\dot{c}' contained conceal cchar=ċ
933 syn match texMathSymbol '\\dot{E}' contained conceal cchar=Ė
934 syn match texMathSymbol '\\dot{e}' contained conceal cchar=ė
935 syn match texMathSymbol '\\dot{G}' contained conceal cchar=Ġ
936 syn match texMathSymbol '\\dot{g}' contained conceal cchar=ġ
937 syn match texMathSymbol '\\dot{I}' contained conceal cchar=İ
938
939 syn match texMathSymbol '\\dot{A}' contained conceal cchar=Ȧ
940 syn match texMathSymbol '\\dot{a}' contained conceal cchar=ȧ
941 syn match texMathSymbol '\\dot{O}' contained conceal cchar=Ȯ
942 syn match texMathSymbol '\\dot{o}' contained conceal cchar=ȯ
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200943 endif
Bram Moolenaar611df5b2010-07-26 22:51:56 +0200944
945 " Greek {{{2
Bram Moolenaarf3913272016-02-25 00:00:01 +0100946 if s:tex_conceal =~# 'g'
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200947 fun! s:Greek(group,pat,cchar)
948 exe 'syn match '.a:group." '".a:pat."' contained conceal cchar=".a:cchar
949 endfun
950 call s:Greek('texGreek','\\alpha\>' ,'α')
951 call s:Greek('texGreek','\\beta\>' ,'β')
952 call s:Greek('texGreek','\\gamma\>' ,'γ')
953 call s:Greek('texGreek','\\delta\>' ,'δ')
954 call s:Greek('texGreek','\\epsilon\>' ,'ϵ')
955 call s:Greek('texGreek','\\varepsilon\>' ,'ε')
956 call s:Greek('texGreek','\\zeta\>' ,'ζ')
957 call s:Greek('texGreek','\\eta\>' ,'η')
958 call s:Greek('texGreek','\\theta\>' ,'θ')
Bram Moolenaare2719092015-01-10 15:09:25 +0100959 call s:Greek('texGreek','\\vartheta\>' ,'ϑ')
Bram Moolenaar6c1e1572019-06-22 02:13:00 +0200960 call s:Greek('texGreek','\\iota\>' ,'ι')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200961 call s:Greek('texGreek','\\kappa\>' ,'κ')
962 call s:Greek('texGreek','\\lambda\>' ,'λ')
963 call s:Greek('texGreek','\\mu\>' ,'μ')
964 call s:Greek('texGreek','\\nu\>' ,'ν')
965 call s:Greek('texGreek','\\xi\>' ,'ξ')
966 call s:Greek('texGreek','\\pi\>' ,'π')
967 call s:Greek('texGreek','\\varpi\>' ,'ϖ')
968 call s:Greek('texGreek','\\rho\>' ,'ρ')
969 call s:Greek('texGreek','\\varrho\>' ,'ϱ')
970 call s:Greek('texGreek','\\sigma\>' ,'σ')
Bram Moolenaare2719092015-01-10 15:09:25 +0100971 call s:Greek('texGreek','\\varsigma\>' ,'ς')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200972 call s:Greek('texGreek','\\tau\>' ,'τ')
973 call s:Greek('texGreek','\\upsilon\>' ,'υ')
Bram Moolenaare2719092015-01-10 15:09:25 +0100974 call s:Greek('texGreek','\\phi\>' ,'ϕ')
975 call s:Greek('texGreek','\\varphi\>' ,'φ')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200976 call s:Greek('texGreek','\\chi\>' ,'χ')
977 call s:Greek('texGreek','\\psi\>' ,'ψ')
978 call s:Greek('texGreek','\\omega\>' ,'ω')
979 call s:Greek('texGreek','\\Gamma\>' ,'Γ')
980 call s:Greek('texGreek','\\Delta\>' ,'Δ')
981 call s:Greek('texGreek','\\Theta\>' ,'Θ')
982 call s:Greek('texGreek','\\Lambda\>' ,'Λ')
Bram Moolenaar6c1e1572019-06-22 02:13:00 +0200983 call s:Greek('texGreek','\\Xi\>' ,'Ξ')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200984 call s:Greek('texGreek','\\Pi\>' ,'Π')
985 call s:Greek('texGreek','\\Sigma\>' ,'Σ')
986 call s:Greek('texGreek','\\Upsilon\>' ,'Υ')
987 call s:Greek('texGreek','\\Phi\>' ,'Φ')
Bram Moolenaar6c1e1572019-06-22 02:13:00 +0200988 call s:Greek('texGreek','\\Chi\>' ,'Χ')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200989 call s:Greek('texGreek','\\Psi\>' ,'Ψ')
990 call s:Greek('texGreek','\\Omega\>' ,'Ω')
991 delfun s:Greek
992 endif
Bram Moolenaar611df5b2010-07-26 22:51:56 +0200993
994 " Superscripts/Subscripts {{{2
Bram Moolenaarf3913272016-02-25 00:00:01 +0100995 if s:tex_conceal =~# 's'
996 if s:tex_fast =~# 's'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100997 syn region texSuperscript matchgroup=Delimiter start='\^{' skip="\\\\\|\\[{}]" end='}' contained concealends contains=texSpecialChar,texSuperscripts,texStatement,texSubscript,texSuperscript,texMathMatcher
998 syn region texSubscript matchgroup=Delimiter start='_{' skip="\\\\\|\\[{}]" end='}' contained concealends contains=texSpecialChar,texSubscripts,texStatement,texSubscript,texSuperscript,texMathMatcher
999 endif
Bram Moolenaar541f92d2015-06-19 13:27:23 +02001000 " s:SuperSub:
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001001 fun! s:SuperSub(group,leader,pat,cchar)
Bram Moolenaar03413f42016-04-12 21:07:15 +02001002 if a:pat =~# '^\\' || (a:leader == '\^' && a:pat =~# s:tex_superscripts) || (a:leader == '_' && a:pat =~# s:tex_subscripts)
Bram Moolenaar6e932462014-09-09 18:48:09 +02001003" call Decho("SuperSub: group<".a:group."> leader<".a:leader."> pat<".a:pat."> cchar<".a:cchar.">")
1004 exe 'syn match '.a:group." '".a:leader.a:pat."' contained conceal cchar=".a:cchar
Bram Moolenaar541f92d2015-06-19 13:27:23 +02001005 exe 'syn match '.a:group."s '".a:pat ."' contained conceal cchar=".a:cchar.' nextgroup='.a:group.'s'
Bram Moolenaar6e932462014-09-09 18:48:09 +02001006 endif
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001007 endfun
1008 call s:SuperSub('texSuperscript','\^','0','⁰')
1009 call s:SuperSub('texSuperscript','\^','1','¹')
1010 call s:SuperSub('texSuperscript','\^','2','²')
1011 call s:SuperSub('texSuperscript','\^','3','³')
1012 call s:SuperSub('texSuperscript','\^','4','⁴')
1013 call s:SuperSub('texSuperscript','\^','5','⁵')
1014 call s:SuperSub('texSuperscript','\^','6','⁶')
1015 call s:SuperSub('texSuperscript','\^','7','⁷')
1016 call s:SuperSub('texSuperscript','\^','8','⁸')
1017 call s:SuperSub('texSuperscript','\^','9','⁹')
1018 call s:SuperSub('texSuperscript','\^','a','ᵃ')
1019 call s:SuperSub('texSuperscript','\^','b','ᵇ')
1020 call s:SuperSub('texSuperscript','\^','c','ᶜ')
1021 call s:SuperSub('texSuperscript','\^','d','ᵈ')
1022 call s:SuperSub('texSuperscript','\^','e','ᵉ')
1023 call s:SuperSub('texSuperscript','\^','f','ᶠ')
1024 call s:SuperSub('texSuperscript','\^','g','ᵍ')
1025 call s:SuperSub('texSuperscript','\^','h','ʰ')
1026 call s:SuperSub('texSuperscript','\^','i','ⁱ')
1027 call s:SuperSub('texSuperscript','\^','j','ʲ')
1028 call s:SuperSub('texSuperscript','\^','k','ᵏ')
1029 call s:SuperSub('texSuperscript','\^','l','ˡ')
1030 call s:SuperSub('texSuperscript','\^','m','ᵐ')
1031 call s:SuperSub('texSuperscript','\^','n','ⁿ')
1032 call s:SuperSub('texSuperscript','\^','o','ᵒ')
1033 call s:SuperSub('texSuperscript','\^','p','ᵖ')
1034 call s:SuperSub('texSuperscript','\^','r','ʳ')
1035 call s:SuperSub('texSuperscript','\^','s','ˢ')
1036 call s:SuperSub('texSuperscript','\^','t','ᵗ')
1037 call s:SuperSub('texSuperscript','\^','u','ᵘ')
1038 call s:SuperSub('texSuperscript','\^','v','ᵛ')
1039 call s:SuperSub('texSuperscript','\^','w','ʷ')
1040 call s:SuperSub('texSuperscript','\^','x','ˣ')
1041 call s:SuperSub('texSuperscript','\^','y','ʸ')
1042 call s:SuperSub('texSuperscript','\^','z','ᶻ')
1043 call s:SuperSub('texSuperscript','\^','A','ᴬ')
1044 call s:SuperSub('texSuperscript','\^','B','ᴮ')
1045 call s:SuperSub('texSuperscript','\^','D','ᴰ')
1046 call s:SuperSub('texSuperscript','\^','E','ᴱ')
1047 call s:SuperSub('texSuperscript','\^','G','ᴳ')
1048 call s:SuperSub('texSuperscript','\^','H','ᴴ')
1049 call s:SuperSub('texSuperscript','\^','I','ᴵ')
1050 call s:SuperSub('texSuperscript','\^','J','ᴶ')
1051 call s:SuperSub('texSuperscript','\^','K','ᴷ')
1052 call s:SuperSub('texSuperscript','\^','L','ᴸ')
1053 call s:SuperSub('texSuperscript','\^','M','ᴹ')
1054 call s:SuperSub('texSuperscript','\^','N','ᴺ')
1055 call s:SuperSub('texSuperscript','\^','O','ᴼ')
1056 call s:SuperSub('texSuperscript','\^','P','ᴾ')
1057 call s:SuperSub('texSuperscript','\^','R','ᴿ')
1058 call s:SuperSub('texSuperscript','\^','T','ᵀ')
1059 call s:SuperSub('texSuperscript','\^','U','ᵁ')
1060 call s:SuperSub('texSuperscript','\^','W','ᵂ')
Bram Moolenaar6be7f872012-01-20 21:08:56 +01001061 call s:SuperSub('texSuperscript','\^',',','︐')
1062 call s:SuperSub('texSuperscript','\^',':','︓')
1063 call s:SuperSub('texSuperscript','\^',';','︔')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001064 call s:SuperSub('texSuperscript','\^','+','⁺')
1065 call s:SuperSub('texSuperscript','\^','-','⁻')
1066 call s:SuperSub('texSuperscript','\^','<','˂')
1067 call s:SuperSub('texSuperscript','\^','>','˃')
1068 call s:SuperSub('texSuperscript','\^','/','ˊ')
1069 call s:SuperSub('texSuperscript','\^','(','⁽')
1070 call s:SuperSub('texSuperscript','\^',')','⁾')
1071 call s:SuperSub('texSuperscript','\^','\.','˙')
1072 call s:SuperSub('texSuperscript','\^','=','˭')
1073 call s:SuperSub('texSubscript','_','0','₀')
1074 call s:SuperSub('texSubscript','_','1','₁')
1075 call s:SuperSub('texSubscript','_','2','₂')
1076 call s:SuperSub('texSubscript','_','3','₃')
1077 call s:SuperSub('texSubscript','_','4','₄')
1078 call s:SuperSub('texSubscript','_','5','₅')
1079 call s:SuperSub('texSubscript','_','6','₆')
1080 call s:SuperSub('texSubscript','_','7','₇')
1081 call s:SuperSub('texSubscript','_','8','₈')
1082 call s:SuperSub('texSubscript','_','9','₉')
1083 call s:SuperSub('texSubscript','_','a','ₐ')
1084 call s:SuperSub('texSubscript','_','e','ₑ')
Bram Moolenaar802a0d92016-06-26 16:17:58 +02001085 call s:SuperSub('texSubscript','_','h','ₕ')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001086 call s:SuperSub('texSubscript','_','i','ᵢ')
Bram Moolenaar802a0d92016-06-26 16:17:58 +02001087 call s:SuperSub('texSubscript','_','j','ⱼ')
1088 call s:SuperSub('texSubscript','_','k','ₖ')
1089 call s:SuperSub('texSubscript','_','l','ₗ')
1090 call s:SuperSub('texSubscript','_','m','ₘ')
1091 call s:SuperSub('texSubscript','_','n','ₙ')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001092 call s:SuperSub('texSubscript','_','o','ₒ')
Bram Moolenaar802a0d92016-06-26 16:17:58 +02001093 call s:SuperSub('texSubscript','_','p','ₚ')
1094 call s:SuperSub('texSubscript','_','r','ᵣ')
1095 call s:SuperSub('texSubscript','_','s','ₛ')
1096 call s:SuperSub('texSubscript','_','t','ₜ')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001097 call s:SuperSub('texSubscript','_','u','ᵤ')
Bram Moolenaar802a0d92016-06-26 16:17:58 +02001098 call s:SuperSub('texSubscript','_','v','ᵥ')
1099 call s:SuperSub('texSubscript','_','x','ₓ')
Bram Moolenaar6be7f872012-01-20 21:08:56 +01001100 call s:SuperSub('texSubscript','_',',','︐')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001101 call s:SuperSub('texSubscript','_','+','₊')
1102 call s:SuperSub('texSubscript','_','-','₋')
1103 call s:SuperSub('texSubscript','_','/','ˏ')
1104 call s:SuperSub('texSubscript','_','(','₍')
1105 call s:SuperSub('texSubscript','_',')','₎')
1106 call s:SuperSub('texSubscript','_','\.','‸')
1107 call s:SuperSub('texSubscript','_','r','ᵣ')
1108 call s:SuperSub('texSubscript','_','v','ᵥ')
1109 call s:SuperSub('texSubscript','_','x','ₓ')
1110 call s:SuperSub('texSubscript','_','\\beta\>' ,'ᵦ')
1111 call s:SuperSub('texSubscript','_','\\delta\>','ᵨ')
1112 call s:SuperSub('texSubscript','_','\\phi\>' ,'ᵩ')
1113 call s:SuperSub('texSubscript','_','\\gamma\>','ᵧ')
1114 call s:SuperSub('texSubscript','_','\\chi\>' ,'ᵪ')
Bram Moolenaar802a0d92016-06-26 16:17:58 +02001115
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001116 delfun s:SuperSub
1117 endif
Bram Moolenaar611df5b2010-07-26 22:51:56 +02001118
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01001119 " Accented characters and Ligatures: {{{2
Bram Moolenaarf3913272016-02-25 00:00:01 +01001120 if s:tex_conceal =~# 'a'
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001121 if b:tex_stylish
1122 syn match texAccent "\\[bcdvuH][^a-zA-Z@]"me=e-1
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01001123 syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)[^a-zA-Z@]"me=e-1
1124 syn match texLigature '--'
1125 syn match texLigature '---'
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001126 else
1127 fun! s:Accents(chr,...)
1128 let i= 1
Bram Moolenaara6878372014-03-22 21:02:50 +01001129 for accent in ["`","\\'","^",'"','\~','\.','=',"c","H","k","r","u","v"]
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001130 if i > a:0
1131 break
1132 endif
Bram Moolenaar7fc0c062010-08-10 21:43:35 +02001133 if strlen(a:{i}) == 0 || a:{i} == ' ' || a:{i} == '?'
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001134 let i= i + 1
1135 continue
1136 endif
Bram Moolenaarf3913272016-02-25 00:00:01 +01001137 if accent =~# '\a'
Bram Moolenaar7fc0c062010-08-10 21:43:35 +02001138 exe "syn match texAccent '".'\\'.accent.'\(\s*{'.a:chr.'}\|\s\+'.a:chr.'\)'."' conceal cchar=".a:{i}
1139 else
1140 exe "syn match texAccent '".'\\'.accent.'\s*\({'.a:chr.'}\|'.a:chr.'\)'."' conceal cchar=".a:{i}
1141 endif
Bram Moolenaare0021c72010-07-28 17:25:21 +02001142 let i= i + 1
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001143 endfor
1144 endfun
Bram Moolenaar6e932462014-09-09 18:48:09 +02001145 " \` \' \^ \" \~ \. \= \c \H \k \r \u \v
1146 call s:Accents('a','à','á','â','ä','ã','ȧ','ā',' ',' ','ą','å','ă','ǎ')
1147 call s:Accents('A','À','Á','Â','Ä','Ã','Ȧ','Ā',' ',' ','Ą','Å','Ă','Ǎ')
1148 call s:Accents('c',' ','ć','ĉ',' ',' ','ċ',' ','ç',' ',' ',' ',' ','č')
1149 call s:Accents('C',' ','Ć','Ĉ',' ',' ','Ċ',' ','Ç',' ',' ',' ',' ','Č')
1150 call s:Accents('d',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ď')
1151 call s:Accents('D',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','Ď')
1152 call s:Accents('e','è','é','ê','ë','ẽ','ė','ē','ȩ',' ','ę',' ','ĕ','ě')
1153 call s:Accents('E','È','É','Ê','Ë','Ẽ','Ė','Ē','Ȩ',' ','Ę',' ','Ĕ','Ě')
1154 call s:Accents('g',' ','ǵ','ĝ',' ',' ','ġ',' ','ģ',' ',' ',' ','ğ','ǧ')
1155 call s:Accents('G',' ','Ǵ','Ĝ',' ',' ','Ġ',' ','Ģ',' ',' ',' ','Ğ','Ǧ')
1156 call s:Accents('h',' ',' ','ĥ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ȟ')
1157 call s:Accents('H',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','Ȟ')
1158 call s:Accents('i','ì','í','î','ï','ĩ','į','ī',' ',' ','į',' ','ĭ','ǐ')
1159 call s:Accents('I','Ì','Í','Î','Ï','Ĩ','İ','Ī',' ',' ','Į',' ','Ĭ','Ǐ')
1160 call s:Accents('J',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ǰ')
1161 call s:Accents('k',' ',' ',' ',' ',' ',' ',' ','ķ',' ',' ',' ',' ','ǩ')
1162 call s:Accents('K',' ',' ',' ',' ',' ',' ',' ','Ķ',' ',' ',' ',' ','Ǩ')
1163 call s:Accents('l',' ','ĺ','ľ',' ',' ',' ',' ','ļ',' ',' ',' ',' ','ľ')
1164 call s:Accents('L',' ','Ĺ','Ľ',' ',' ',' ',' ','Ļ',' ',' ',' ',' ','Ľ')
1165 call s:Accents('n',' ','ń',' ',' ','ñ',' ',' ','ņ',' ',' ',' ',' ','ň')
1166 call s:Accents('N',' ','Ń',' ',' ','Ñ',' ',' ','Ņ',' ',' ',' ',' ','Ň')
1167 call s:Accents('o','ò','ó','ô','ö','õ','ȯ','ō',' ','ő','ǫ',' ','ŏ','ǒ')
1168 call s:Accents('O','Ò','Ó','Ô','Ö','Õ','Ȯ','Ō',' ','Ő','Ǫ',' ','Ŏ','Ǒ')
1169 call s:Accents('r',' ','ŕ',' ',' ',' ',' ',' ','ŗ',' ',' ',' ',' ','ř')
1170 call s:Accents('R',' ','Ŕ',' ',' ',' ',' ',' ','Ŗ',' ',' ',' ',' ','Ř')
1171 call s:Accents('s',' ','ś','ŝ',' ',' ',' ',' ','ş',' ','ȿ',' ',' ','š')
1172 call s:Accents('S',' ','Ś','Ŝ',' ',' ',' ',' ','Ş',' ',' ',' ',' ','Š')
1173 call s:Accents('t',' ',' ',' ',' ',' ',' ',' ','ţ',' ',' ',' ',' ','ť')
1174 call s:Accents('T',' ',' ',' ',' ',' ',' ',' ','Ţ',' ',' ',' ',' ','Ť')
1175 call s:Accents('u','ù','ú','û','ü','ũ',' ','ū',' ','ű','ų','ů','ŭ','ǔ')
1176 call s:Accents('U','Ù','Ú','Û','Ü','Ũ',' ','Ū',' ','Ű','Ų','Ů','Ŭ','Ǔ')
1177 call s:Accents('w',' ',' ','ŵ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ')
1178 call s:Accents('W',' ',' ','Ŵ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ')
1179 call s:Accents('y','ỳ','ý','ŷ','ÿ','ỹ',' ',' ',' ',' ',' ',' ',' ',' ')
1180 call s:Accents('Y','Ỳ','Ý','Ŷ','Ÿ','Ỹ',' ',' ',' ',' ',' ',' ',' ',' ')
1181 call s:Accents('z',' ','ź',' ',' ',' ','ż',' ',' ',' ',' ',' ',' ','ž')
1182 call s:Accents('Z',' ','Ź',' ',' ',' ','Ż',' ',' ',' ',' ',' ',' ','Ž')
Bram Moolenaara6878372014-03-22 21:02:50 +01001183 call s:Accents('\\i','ì','í','î','ï','ĩ','į',' ',' ',' ',' ',' ','ĭ',' ')
1184 " \` \' \^ \" \~ \. \= \c \H \k \r \u \v
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001185 delfun s:Accents
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01001186 syn match texAccent '\\aa\>' conceal cchar=å
1187 syn match texAccent '\\AA\>' conceal cchar=Å
1188 syn match texAccent '\\o\>' conceal cchar=ø
1189 syn match texAccent '\\O\>' conceal cchar=Ø
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001190 syn match texLigature '\\AE\>' conceal cchar=Æ
1191 syn match texLigature '\\ae\>' conceal cchar=æ
1192 syn match texLigature '\\oe\>' conceal cchar=œ
1193 syn match texLigature '\\OE\>' conceal cchar=Œ
1194 syn match texLigature '\\ss\>' conceal cchar=ß
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01001195 syn match texLigature '--' conceal cchar=–
1196 syn match texLigature '---' conceal cchar=—
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001197 endif
Bram Moolenaar611df5b2010-07-26 22:51:56 +02001198 endif
Bram Moolenaarb2c03502010-07-02 20:20:09 +02001199endif
1200
1201" ---------------------------------------------------------------------
Bram Moolenaar071d4272004-06-13 20:20:40 +00001202" LaTeX synchronization: {{{1
1203syn sync maxlines=200
1204syn sync minlines=50
1205
1206syn sync match texSyncStop groupthere NONE "%stopzone\>"
1207
1208" Synchronization: {{{1
1209" The $..$ and $$..$$ make for impossible sync patterns
1210" (one can't tell if a "$$" starts or stops a math zone by itself)
1211" The following grouptheres coupled with minlines above
1212" help improve the odds of good syncing.
Bram Moolenaare2719092015-01-10 15:09:25 +01001213if !exists("g:tex_no_math")
Bram Moolenaar071d4272004-06-13 20:20:40 +00001214 syn sync match texSyncMathZoneA groupthere NONE "\\end{abstract}"
1215 syn sync match texSyncMathZoneA groupthere NONE "\\end{center}"
1216 syn sync match texSyncMathZoneA groupthere NONE "\\end{description}"
1217 syn sync match texSyncMathZoneA groupthere NONE "\\end{enumerate}"
1218 syn sync match texSyncMathZoneA groupthere NONE "\\end{itemize}"
1219 syn sync match texSyncMathZoneA groupthere NONE "\\end{table}"
1220 syn sync match texSyncMathZoneA groupthere NONE "\\end{tabular}"
1221 syn sync match texSyncMathZoneA groupthere NONE "\\\(sub\)*section\>"
1222endif
1223
Bram Moolenaarb2c03502010-07-02 20:20:09 +02001224" ---------------------------------------------------------------------
Bram Moolenaar071d4272004-06-13 20:20:40 +00001225" Highlighting: {{{1
Bram Moolenaarf37506f2016-08-31 22:22:10 +02001226
1227" Define the default highlighting. {{{1
1228if !exists("skip_tex_syntax_inits")
1229
Bram Moolenaar071d4272004-06-13 20:20:40 +00001230 " TeX highlighting groups which should share similar highlighting
Bram Moolenaar6e932462014-09-09 18:48:09 +02001231 if !exists("g:tex_no_error")
Bram Moolenaar543b7ef2013-06-01 14:50:56 +02001232 if !exists("g:tex_no_math")
Bram Moolenaarf37506f2016-08-31 22:22:10 +02001233 hi def link texBadMath texError
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +02001234 hi def link texMathDelimBad texError
Bram Moolenaarf37506f2016-08-31 22:22:10 +02001235 hi def link texMathError texError
Bram Moolenaar071d4272004-06-13 20:20:40 +00001236 if !b:tex_stylish
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +02001237 hi def link texOnlyMath texError
Bram Moolenaar071d4272004-06-13 20:20:40 +00001238 endif
1239 endif
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +02001240 hi def link texError Error
Bram Moolenaar071d4272004-06-13 20:20:40 +00001241 endif
1242
Bram Moolenaard38b0552012-04-25 19:07:41 +02001243 hi texBoldStyle gui=bold cterm=bold
1244 hi texItalStyle gui=italic cterm=italic
1245 hi texBoldItalStyle gui=bold,italic cterm=bold,italic
1246 hi texItalBoldStyle gui=bold,italic cterm=bold,italic
Bram Moolenaar723dd942019-04-04 13:11:03 +02001247 hi def link texEmphStyle texItalStyle
Bram Moolenaarf37506f2016-08-31 22:22:10 +02001248 hi def link texCite texRefZone
1249 hi def link texDefCmd texDef
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +02001250 hi def link texDefName texDef
1251 hi def link texDocType texCmdName
1252 hi def link texDocTypeArgs texCmdArgs
Bram Moolenaarf37506f2016-08-31 22:22:10 +02001253 hi def link texInputFileOpt texCmdArgs
1254 hi def link texInputCurlies texDelimiter
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +02001255 hi def link texLigature texSpecialChar
Bram Moolenaare2719092015-01-10 15:09:25 +01001256 if !exists("g:tex_no_math")
Bram Moolenaarf37506f2016-08-31 22:22:10 +02001257 hi def link texMathDelimSet1 texMathDelim
1258 hi def link texMathDelimSet2 texMathDelim
1259 hi def link texMathDelimKey texMathDelim
1260 hi def link texMathMatcher texMath
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +02001261 hi def link texAccent texStatement
Bram Moolenaarf37506f2016-08-31 22:22:10 +02001262 hi def link texGreek texStatement
1263 hi def link texSuperscript texStatement
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +02001264 hi def link texSubscript texStatement
Bram Moolenaarf37506f2016-08-31 22:22:10 +02001265 hi def link texSuperscripts texSuperscript
1266 hi def link texSubscripts texSubscript
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +02001267 hi def link texMathSymbol texStatement
1268 hi def link texMathZoneV texMath
1269 hi def link texMathZoneW texMath
1270 hi def link texMathZoneX texMath
1271 hi def link texMathZoneY texMath
1272 hi def link texMathZoneV texMath
1273 hi def link texMathZoneZ texMath
Bram Moolenaar071d4272004-06-13 20:20:40 +00001274 endif
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +02001275 hi def link texBeginEnd texCmdName
Bram Moolenaarf37506f2016-08-31 22:22:10 +02001276 hi def link texBeginEndName texSection
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +02001277 hi def link texSpaceCode texStatement
Bram Moolenaarf37506f2016-08-31 22:22:10 +02001278 hi def link texStyleStatement texStatement
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +02001279 hi def link texTypeSize texType
1280 hi def link texTypeStyle texType
Bram Moolenaar071d4272004-06-13 20:20:40 +00001281
1282 " Basic TeX highlighting groups
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +02001283 hi def link texCmdArgs Number
1284 hi def link texCmdName Statement
1285 hi def link texComment Comment
1286 hi def link texDef Statement
1287 hi def link texDefParm Special
1288 hi def link texDelimiter Delimiter
Bram Moolenaarf37506f2016-08-31 22:22:10 +02001289 hi def link texInput Special
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +02001290 hi def link texInputFile Special
Bram Moolenaarf37506f2016-08-31 22:22:10 +02001291 hi def link texLength Number
1292 hi def link texMath Special
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +02001293 hi def link texMathDelim Statement
1294 hi def link texMathOper Operator
Bram Moolenaarf37506f2016-08-31 22:22:10 +02001295 hi def link texNewCmd Statement
1296 hi def link texNewEnv Statement
1297 hi def link texOption Number
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +02001298 hi def link texRefZone Special
1299 hi def link texSection PreCondit
Bram Moolenaarf37506f2016-08-31 22:22:10 +02001300 hi def link texSpaceCodeChar Special
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +02001301 hi def link texSpecialChar SpecialChar
1302 hi def link texStatement Statement
Bram Moolenaarf37506f2016-08-31 22:22:10 +02001303 hi def link texString String
1304 hi def link texTodo Todo
1305 hi def link texType Type
1306 hi def link texZone PreCondit
Bram Moolenaar071d4272004-06-13 20:20:40 +00001307
Bram Moolenaar071d4272004-06-13 20:20:40 +00001308endif
1309
Bram Moolenaar15146672011-10-20 22:22:38 +02001310" Cleanup: {{{1
Bram Moolenaara0f849e2015-10-30 14:37:44 +01001311delc TexFold
Bram Moolenaar81af9252010-12-10 20:35:50 +01001312unlet s:extfname
Bram Moolenaar071d4272004-06-13 20:20:40 +00001313let b:current_syntax = "tex"
Bram Moolenaar15146672011-10-20 22:22:38 +02001314let &cpo = s:keepcpo
1315unlet s:keepcpo
Bram Moolenaare90ee312010-08-05 22:08:47 +02001316" vim: ts=8 fdm=marker