blob: ab19da329b7466686c5e8547a91636814ef50bf7 [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 Moolenaar3df01732017-02-17 22:47:16 +01004" Last Change: Jan 31, 2017
5" Version: 103
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 Moolenaarbc8801c2016-08-02 21:04:33 +0200130if v:version > 704 || (v:version == 704 && has("patch-7.4.1142"))
131 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
158syn 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,texNoSpell
159syn 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
160syn 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,texItalBoldStyle,texNoSpell
161if !s:tex_nospell
162 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,@Spell
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +0200163 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,@Spell
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100164 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,@Spell,texStyleMatcher
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
262" \begin{}/\end{} section markers: {{{1
Bram Moolenaard38b0552012-04-25 19:07:41 +0200263syn match texBeginEnd "\\begin\>\|\\end\>" nextgroup=texBeginEndName
Bram Moolenaarf3913272016-02-25 00:00:01 +0100264if s:tex_fast =~# 'm'
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100265 syn region texBeginEndName matchgroup=Delimiter start="{" end="}" contained nextgroup=texBeginEndModifier contains=texComment
Bram Moolenaar802a0d92016-06-26 16:17:58 +0200266 syn region texBeginEndModifier matchgroup=Delimiter start="\[" end="]" contained contains=texComment,@texMathZones,@NoSpell
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100267endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000268
269" \documentclass, \documentstyle, \usepackage: {{{1
Bram Moolenaard38b0552012-04-25 19:07:41 +0200270syn match texDocType "\\documentclass\>\|\\documentstyle\>\|\\usepackage\>" nextgroup=texBeginEndName,texDocTypeArgs
Bram Moolenaarf3913272016-02-25 00:00:01 +0100271if s:tex_fast =~# 'm'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100272 syn region texDocTypeArgs matchgroup=Delimiter start="\[" end="]" contained nextgroup=texBeginEndName contains=texComment,@NoSpell
273endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000274
Bram Moolenaara9a568c2006-03-14 23:04:27 +0000275" Preamble syntax-based folding support: {{{1
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100276if s:tex_fold_enabled && has("folding")
Bram Moolenaard38b0552012-04-25 19:07:41 +0200277 syn region texPreamble transparent fold start='\zs\\documentclass\>' end='\ze\\begin{document}' contains=texStyle,@texPreambleMatchGroup
Bram Moolenaara9a568c2006-03-14 23:04:27 +0000278endif
279
Bram Moolenaar071d4272004-06-13 20:20:40 +0000280" TeX input: {{{1
281syn match texInput "\\input\s\+[a-zA-Z/.0-9_^]\+"hs=s+7 contains=texStatement
Bram Moolenaar5c736222010-01-06 20:54:52 +0100282syn match texInputFile "\\include\(graphics\|list\)\=\(\[.\{-}\]\)\=\s*{.\{-}}" contains=texStatement,texInputCurlies,texInputFileOpt
Bram Moolenaar071d4272004-06-13 20:20:40 +0000283syn match texInputFile "\\\(epsfig\|input\|usepackage\)\s*\(\[.*\]\)\={.\{-}}" contains=texStatement,texInputCurlies,texInputFileOpt
284syn match texInputCurlies "[{}]" contained
Bram Moolenaarf3913272016-02-25 00:00:01 +0100285if s:tex_fast =~# 'm'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100286 syn region texInputFileOpt matchgroup=Delimiter start="\[" end="\]" contained contains=texComment
287endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000288
289" Type Styles (LaTeX 2.09): {{{1
290syn match texTypeStyle "\\rm\>"
291syn match texTypeStyle "\\em\>"
292syn match texTypeStyle "\\bf\>"
293syn match texTypeStyle "\\it\>"
294syn match texTypeStyle "\\sl\>"
295syn match texTypeStyle "\\sf\>"
296syn match texTypeStyle "\\sc\>"
297syn match texTypeStyle "\\tt\>"
298
299" Type Styles: attributes, commands, families, etc (LaTeX2E): {{{1
Bram Moolenaar7db8f6f2016-03-29 23:12:46 +0200300if s:tex_conceal !~# 'b'
Bram Moolenaard38b0552012-04-25 19:07:41 +0200301 syn match texTypeStyle "\\textbf\>"
302 syn match texTypeStyle "\\textit\>"
303endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000304syn match texTypeStyle "\\textmd\>"
305syn match texTypeStyle "\\textrm\>"
306syn match texTypeStyle "\\textsc\>"
307syn match texTypeStyle "\\textsf\>"
308syn match texTypeStyle "\\textsl\>"
309syn match texTypeStyle "\\texttt\>"
310syn match texTypeStyle "\\textup\>"
311syn match texTypeStyle "\\emph\>"
312
313syn match texTypeStyle "\\mathbb\>"
314syn match texTypeStyle "\\mathbf\>"
315syn match texTypeStyle "\\mathcal\>"
316syn match texTypeStyle "\\mathfrak\>"
317syn match texTypeStyle "\\mathit\>"
318syn match texTypeStyle "\\mathnormal\>"
319syn match texTypeStyle "\\mathrm\>"
320syn match texTypeStyle "\\mathsf\>"
321syn match texTypeStyle "\\mathtt\>"
322
323syn match texTypeStyle "\\rmfamily\>"
324syn match texTypeStyle "\\sffamily\>"
325syn match texTypeStyle "\\ttfamily\>"
326
327syn match texTypeStyle "\\itshape\>"
328syn match texTypeStyle "\\scshape\>"
329syn match texTypeStyle "\\slshape\>"
330syn match texTypeStyle "\\upshape\>"
331
332syn match texTypeStyle "\\bfseries\>"
333syn match texTypeStyle "\\mdseries\>"
334
335" Some type sizes: {{{1
336syn match texTypeSize "\\tiny\>"
337syn match texTypeSize "\\scriptsize\>"
338syn match texTypeSize "\\footnotesize\>"
339syn match texTypeSize "\\small\>"
340syn match texTypeSize "\\normalsize\>"
341syn match texTypeSize "\\large\>"
342syn match texTypeSize "\\Large\>"
343syn match texTypeSize "\\LARGE\>"
344syn match texTypeSize "\\huge\>"
345syn match texTypeSize "\\Huge\>"
346
347" Spacecodes (TeX'isms): {{{1
348" \mathcode`\^^@="2201 \delcode`\(="028300 \sfcode`\)=0 \uccode`X=`X \lccode`x=`x
349syn match texSpaceCode "\\\(math\|cat\|del\|lc\|sf\|uc\)code`"me=e-1 nextgroup=texSpaceCodeChar
350syn match texSpaceCodeChar "`\\\=.\(\^.\)\==\(\d\|\"\x\{1,6}\|`.\)" contained
351
352" Sections, subsections, etc: {{{1
Bram Moolenaarf3913272016-02-25 00:00:01 +0100353if s:tex_fast =~# 'p'
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100354 if !s:tex_nospell
355 TexFold syn region texDocZone matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}' contains=@texFoldGroup,@texDocGroup,@Spell
356 TexFold syn region texPartZone matchgroup=texSection start='\\part\>' end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texPartGroup,@Spell
357 TexFold syn region texChapterZone matchgroup=texSection start='\\chapter\>' end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texChapterGroup,@Spell
358 TexFold syn region texSectionZone matchgroup=texSection start='\\section\>' end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSectionGroup,@Spell
359 TexFold syn region texSubSectionZone matchgroup=texSection start='\\subsection\>' end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSectionGroup,@Spell
360 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
361 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
362 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
363 TexFold syn region texTitle matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}' contains=@texFoldGroup,@Spell
364 TexFold syn region texAbstract matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}' contains=@texFoldGroup,@Spell
365 else
366 TexFold syn region texDocZone matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}' contains=@texFoldGroup,@texDocGroup
367 TexFold syn region texPartZone matchgroup=texSection start='\\part\>' end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texPartGroup
368 TexFold syn region texChapterZone matchgroup=texSection start='\\chapter\>' end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texChapterGroup
369 TexFold syn region texSectionZone matchgroup=texSection start='\\section\>' end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSectionGroup
370 TexFold syn region texSubSectionZone matchgroup=texSection start='\\subsection\>' end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSectionGroup
371 TexFold syn region texSubSubSectionZone matchgroup=texSection start='\\subsubsection\>' end='\ze\s*\\\%(\%(sub\)\{,2}section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSubSectionGroup
372 TexFold syn region texParaZone matchgroup=texSection start='\\paragraph\>' end='\ze\s*\\\%(paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texParaGroup
373 TexFold syn region texSubParaZone matchgroup=texSection start='\\subparagraph\>' end='\ze\s*\\\%(\%(sub\)\=paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup
374 TexFold syn region texTitle matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}' contains=@texFoldGroup
375 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 +0100376 endif
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000377endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000378
Bram Moolenaard38b0552012-04-25 19:07:41 +0200379" particular support for bold and italic {{{1
Bram Moolenaarf3913272016-02-25 00:00:01 +0100380if s:tex_fast =~# 'b'
381 if s:tex_conceal =~# 'b'
Bram Moolenaar83d1b192015-04-13 14:22:40 +0200382 if !exists("g:tex_nospell") || !g:tex_nospell
Bram Moolenaar541f92d2015-06-19 13:27:23 +0200383 syn region texBoldStyle matchgroup=texTypeStyle start="\\textbf\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup,@Spell
384 syn region texBoldItalStyle matchgroup=texTypeStyle start="\\textit\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup,@Spell
385 syn region texItalStyle matchgroup=texTypeStyle start="\\textit\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup,@Spell
386 syn region texItalBoldStyle matchgroup=texTypeStyle start="\\textbf\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup,@Spell
387 else
388 syn region texBoldStyle matchgroup=texTypeStyle start="\\textbf\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup
389 syn region texBoldItalStyle matchgroup=texTypeStyle start="\\textit\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup
390 syn region texItalStyle matchgroup=texTypeStyle start="\\textit\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup
391 syn region texItalBoldStyle matchgroup=texTypeStyle start="\\textbf\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup
Bram Moolenaar83d1b192015-04-13 14:22:40 +0200392 endif
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100393 endif
Bram Moolenaard38b0552012-04-25 19:07:41 +0200394endif
395
Bram Moolenaar071d4272004-06-13 20:20:40 +0000396" Bad Math (mismatched): {{{1
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100397if !exists("g:tex_no_math") && !s:tex_no_error
398 syn match texBadMath "\\end\s*{\s*\(array\|gathered\|bBpvV]matrix\|split\|subequations\|smallmatrix\|xxalignat\)\s*}"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000399 syn match texBadMath "\\end\s*{\s*\(align\|alignat\|displaymath\|displaymath\|eqnarray\|equation\|flalign\|gather\|math\|multline\|xalignat\)\*\=\s*}"
400 syn match texBadMath "\\[\])]"
401endif
402
403" Math Zones: {{{1
Bram Moolenaare2719092015-01-10 15:09:25 +0100404if !exists("g:tex_no_math")
Bram Moolenaar488c6512005-08-11 20:09:58 +0000405 " TexNewMathZone: function creates a mathzone with the given suffix and mathzone name. {{{2
Bram Moolenaar071d4272004-06-13 20:20:40 +0000406 " Starred forms are created if starform is true. Starred
407 " forms have syntax group and synchronization groups with a
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +0200408 " "S" appended. Handles: cluster, syntax, sync, and highlighting.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000409 fun! TexNewMathZone(sfx,mathzone,starform)
410 let grpname = "texMathZone".a:sfx
411 let syncname = "texSyncMathZone".a:sfx
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100412 if s:tex_fold_enabled
Bram Moolenaar3577c6f2008-06-24 21:16:56 +0000413 let foldcmd= " fold"
414 else
415 let foldcmd= ""
416 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000417 exe "syn cluster texMathZones add=".grpname
Bram Moolenaarf3913272016-02-25 00:00:01 +0100418 if s:tex_fast =~# 'M'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100419 exe 'syn region '.grpname.' start='."'".'\\begin\s*{\s*'.a:mathzone.'\s*}'."'".' end='."'".'\\end\s*{\s*'.a:mathzone.'\s*}'."'".' keepend contains=@texMathZoneGroup'.foldcmd
420 exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
421 exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
422 endif
Bram Moolenaar5c736222010-01-06 20:54:52 +0100423 exe 'hi def link '.grpname.' texMath'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000424 if a:starform
425 let grpname = "texMathZone".a:sfx.'S'
426 let syncname = "texSyncMathZone".a:sfx.'S'
427 exe "syn cluster texMathZones add=".grpname
Bram Moolenaarf3913272016-02-25 00:00:01 +0100428 if s:tex_fast =~# 'M'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100429 exe 'syn region '.grpname.' start='."'".'\\begin\s*{\s*'.a:mathzone.'\*\s*}'."'".' end='."'".'\\end\s*{\s*'.a:mathzone.'\*\s*}'."'".' keepend contains=@texMathZoneGroup'.foldcmd
430 exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
431 exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
432 endif
Bram Moolenaar5c736222010-01-06 20:54:52 +0100433 exe 'hi def link '.grpname.' texMath'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000434 endif
435 endfun
436
437 " Standard Math Zones: {{{2
438 call TexNewMathZone("A","align",1)
439 call TexNewMathZone("B","alignat",1)
440 call TexNewMathZone("C","displaymath",1)
441 call TexNewMathZone("D","eqnarray",1)
442 call TexNewMathZone("E","equation",1)
443 call TexNewMathZone("F","flalign",1)
444 call TexNewMathZone("G","gather",1)
445 call TexNewMathZone("H","math",1)
446 call TexNewMathZone("I","multline",1)
Bram Moolenaarbc8801c2016-08-02 21:04:33 +0200447 call TexNewMathZone("J","xalignat",1)
448 call TexNewMathZone("K","xxalignat",0)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000449
450 " Inline Math Zones: {{{2
Bram Moolenaarf3913272016-02-25 00:00:01 +0100451 if s:tex_fast =~# 'M'
452 if has("conceal") && &enc == 'utf-8' && s:tex_conceal =~# 'd'
Bram Moolenaar541f92d2015-06-19 13:27:23 +0200453 syn region texMathZoneV matchgroup=Delimiter start="\\(" matchgroup=Delimiter end="\\)\|%stopzone\>" keepend concealends contains=@texMathZoneGroup
454 syn region texMathZoneW matchgroup=Delimiter start="\\\[" matchgroup=Delimiter end="\\]\|%stopzone\>" keepend concealends contains=@texMathZoneGroup
455 syn region texMathZoneX matchgroup=Delimiter start="\$" skip="\\\\\|\\\$" matchgroup=Delimiter end="\$" end="%stopzone\>" concealends contains=@texMathZoneGroup
456 syn region texMathZoneY matchgroup=Delimiter start="\$\$" matchgroup=Delimiter end="\$\$" end="%stopzone\>" keepend concealends contains=@texMathZoneGroup
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100457 else
Bram Moolenaar541f92d2015-06-19 13:27:23 +0200458 syn region texMathZoneV matchgroup=Delimiter start="\\(" matchgroup=Delimiter end="\\)\|%stopzone\>" keepend contains=@texMathZoneGroup
459 syn region texMathZoneW matchgroup=Delimiter start="\\\[" matchgroup=Delimiter end="\\]\|%stopzone\>" keepend contains=@texMathZoneGroup
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100460 syn region texMathZoneX matchgroup=Delimiter start="\$" skip="\%(\\\\\)*\\\$" matchgroup=Delimiter end="\$" end="%stopzone\>" contains=@texMathZoneGroup
Bram Moolenaar541f92d2015-06-19 13:27:23 +0200461 syn region texMathZoneY matchgroup=Delimiter start="\$\$" matchgroup=Delimiter end="\$\$" end="%stopzone\>" keepend contains=@texMathZoneGroup
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100462 endif
Bram Moolenaar541f92d2015-06-19 13:27:23 +0200463 syn region texMathZoneZ matchgroup=texStatement start="\\ensuremath\s*{" matchgroup=texStatement end="}" end="%stopzone\>" contains=@texMathZoneGroup
Bram Moolenaare0021c72010-07-28 17:25:21 +0200464 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000465
466 syn match texMathOper "[_^=]" contained
467
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200468 " Text Inside Math Zones: {{{2
Bram Moolenaarf3913272016-02-25 00:00:01 +0100469 if s:tex_fast =~# 'M'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100470 if !exists("g:tex_nospell") || !g:tex_nospell
471 syn region texMathText matchgroup=texStatement start='\\\(\(inter\)\=text\|mbox\)\s*{' end='}' contains=@texFoldGroup,@Spell
472 else
473 syn region texMathText matchgroup=texStatement start='\\\(\(inter\)\=text\|mbox\)\s*{' end='}' contains=@texFoldGroup
474 endif
Bram Moolenaard960d762011-09-21 19:22:10 +0200475 endif
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200476
Bram Moolenaar071d4272004-06-13 20:20:40 +0000477 " \left..something.. and \right..something.. support: {{{2
478 syn match texMathDelimBad contained "\S"
Bram Moolenaarf3913272016-02-25 00:00:01 +0100479 if has("conceal") && &enc == 'utf-8' && s:tex_conceal =~# 'm'
Bram Moolenaarbc8801c2016-08-02 21:04:33 +0200480 syn match texMathDelim contained "\\left\["
481 syn match texMathDelim contained "\\left\\{" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad contains=texMathSymbol cchar={
482 syn match texMathDelim contained "\\right\\}" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad contains=texMathSymbol cchar=}
Bram Moolenaaradc21822011-04-01 18:03:16 +0200483 let s:texMathDelimList=[
484 \ ['<' , '<'] ,
485 \ ['>' , '>'] ,
486 \ ['(' , '('] ,
487 \ [')' , ')'] ,
488 \ ['\[' , '['] ,
489 \ [']' , ']'] ,
490 \ ['\\{' , '{'] ,
491 \ ['\\}' , '}'] ,
492 \ ['|' , '|'] ,
493 \ ['\\|' , '‖'] ,
494 \ ['\\backslash' , '\'] ,
495 \ ['\\downarrow' , '↓'] ,
496 \ ['\\Downarrow' , '⇓'] ,
Bram Moolenaaradc21822011-04-01 18:03:16 +0200497 \ ['\\lbrace' , '['] ,
498 \ ['\\lceil' , '⌈'] ,
499 \ ['\\lfloor' , '⌊'] ,
500 \ ['\\lgroup' , '⌊'] ,
501 \ ['\\lmoustache' , '⎛'] ,
Bram Moolenaaradc21822011-04-01 18:03:16 +0200502 \ ['\\rbrace' , ']'] ,
503 \ ['\\rceil' , '⌉'] ,
504 \ ['\\rfloor' , '⌋'] ,
505 \ ['\\rgroup' , '⌋'] ,
506 \ ['\\rmoustache' , '⎞'] ,
507 \ ['\\uparrow' , '↑'] ,
508 \ ['\\Uparrow' , '↑'] ,
509 \ ['\\updownarrow', '↕'] ,
510 \ ['\\Updownarrow', '⇕']]
Bram Moolenaar690afe12017-01-28 18:34:47 +0100511 if &ambw == "double" || exists("g:tex_usedblwidth")
512 let s:texMathDelimList= s:texMathDelimList + [
513 \ ['\\langle' , '〈'] ,
Bram Moolenaar3df01732017-02-17 22:47:16 +0100514 \ ['\\rangle' , '〉']]
Bram Moolenaar690afe12017-01-28 18:34:47 +0100515 else
516 let s:texMathDelimList= s:texMathDelimList + [
517 \ ['\\langle' , '<'] ,
518 \ ['\\rangle' , '>']]
519 endif
Bram Moolenaaradc21822011-04-01 18:03:16 +0200520 syn match texMathDelim '\\[bB]igg\=[lr]' contained nextgroup=texMathDelimBad
521 for texmath in s:texMathDelimList
522 exe "syn match texMathDelim '\\\\[bB]igg\\=[lr]\\=".texmath[0]."' contained conceal cchar=".texmath[1]
523 endfor
524
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200525 else
526 syn match texMathDelim contained "\\\(left\|right\)\>" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad
Bram Moolenaaradc21822011-04-01 18:03:16 +0200527 syn match texMathDelim contained "\\[bB]igg\=[lr]\=\>" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad
528 syn match texMathDelimSet2 contained "\\" nextgroup=texMathDelimKey,texMathDelimBad
529 syn match texMathDelimSet1 contained "[<>()[\]|/.]\|\\[{}|]"
530 syn keyword texMathDelimKey contained backslash lceil lVert rgroup uparrow
531 syn keyword texMathDelimKey contained downarrow lfloor rangle rmoustache Uparrow
532 syn keyword texMathDelimKey contained Downarrow lgroup rbrace rvert updownarrow
533 syn keyword texMathDelimKey contained langle lmoustache rceil rVert Updownarrow
534 syn keyword texMathDelimKey contained lbrace lvert rfloor
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200535 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000536 syn match texMathDelim contained "\\\(left\|right\)arrow\>\|\<\([aA]rrow\|brace\)\=vert\>"
537 syn match texMathDelim contained "\\lefteqn\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000538endif
539
540" Special TeX characters ( \$ \& \% \# \{ \} \_ \S \P ) : {{{1
541syn match texSpecialChar "\\[$&%#{}_]"
542if b:tex_stylish
543 syn match texSpecialChar "\\[SP@][^a-zA-Z@]"me=e-1
544else
545 syn match texSpecialChar "\\[SP@]\A"me=e-1
546endif
547syn match texSpecialChar "\\\\"
Bram Moolenaare2719092015-01-10 15:09:25 +0100548if !exists("g:tex_no_math")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000549 syn match texOnlyMath "[_^]"
550endif
551syn match texSpecialChar "\^\^[0-9a-f]\{2}\|\^\^\S"
Bram Moolenaar7db8f6f2016-03-29 23:12:46 +0200552if s:tex_conceal !~# 'S'
Bram Moolenaarbc488a72013-07-05 21:01:22 +0200553 syn match texSpecialChar '\\glq\>' contained conceal cchar=‚
554 syn match texSpecialChar '\\grq\>' contained conceal cchar=‘
555 syn match texSpecialChar '\\glqq\>' contained conceal cchar=„
556 syn match texSpecialChar '\\grqq\>' contained conceal cchar=“
557 syn match texSpecialChar '\\hyp\>' contained conceal cchar=-
558endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000559
560" Comments: {{{1
561" Normal TeX LaTeX : %....
562" Documented TeX Format: ^^A... -and- leading %s (only)
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100563if !s:tex_comment_nospell
Bram Moolenaar3577c6f2008-06-24 21:16:56 +0000564 syn cluster texCommentGroup contains=texTodo,@Spell
565else
566 syn cluster texCommentGroup contains=texTodo,@NoSpell
567endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000568syn case ignore
Bram Moolenaar18144c82006-04-12 21:52:12 +0000569syn keyword texTodo contained combak fixme todo xxx
Bram Moolenaar071d4272004-06-13 20:20:40 +0000570syn case match
Bram Moolenaar81af9252010-12-10 20:35:50 +0100571if s:extfname == "dtx"
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100572 syn match texComment "\^\^A.*$" contains=@texCommentGroup
573 syn match texComment "^%\+" contains=@texCommentGroup
Bram Moolenaar071d4272004-06-13 20:20:40 +0000574else
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100575 if s:tex_fold_enabled
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100576 " allows syntax-folding of 2 or more contiguous comment lines
577 " single-line comments are not folded
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100578 syn match texComment "%.*$" contains=@texCommentGroup
Bram Moolenaarf3913272016-02-25 00:00:01 +0100579 if s:tex_fast =~# 'c'
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100580 TexFold syn region texComment start="^\zs\s*%.*\_s*%" skip="^\s*%" end='^\ze\s*[^%]' contains=@texCommentGroup
581 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 +0000582 endif
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100583 else
584 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 syn region texNoSpell contained matchgroup=texComment start="%\s*nospell\s*{" end="%\s*nospell\s*}" contains=@texFoldGroup,@NoSpell
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100587 endif
588 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000589endif
590
591" Separate lines used for verb` and verb# so that the end conditions {{{1
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200592" will appropriately terminate.
593" If g:tex_verbspell exists, then verbatim texZones will permit spellchecking there.
Bram Moolenaarf3913272016-02-25 00:00:01 +0100594if s:tex_fast =~# 'v'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100595 if exists("g:tex_verbspell") && g:tex_verbspell
596 syn region texZone start="\\begin{[vV]erbatim}" end="\\end{[vV]erbatim}\|%stopzone\>" contains=@Spell
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200597 if b:tex_stylish
598 syn region texZone start="\\verb\*\=\z([^\ta-zA-Z@]\)" end="\z1\|%stopzone\>" contains=@Spell
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200599 else
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200600 syn region texZone start="\\verb\*\=\z([^\ta-zA-Z]\)" end="\z1\|%stopzone\>" contains=@Spell
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200601 endif
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100602 else
603 syn region texZone start="\\begin{[vV]erbatim}" end="\\end{[vV]erbatim}\|%stopzone\>"
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200604 if b:tex_stylish
605 syn region texZone start="\\verb\*\=\z([^\ta-zA-Z@]\)" end="\z1\|%stopzone\>"
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200606 else
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200607 syn region texZone start="\\verb\*\=\z([^\ta-zA-Z]\)" end="\z1\|%stopzone\>"
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200608 endif
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100609 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000610endif
611
612" Tex Reference Zones: {{{1
Bram Moolenaarf3913272016-02-25 00:00:01 +0100613if s:tex_fast =~# 'r'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100614 syn region texZone matchgroup=texStatement start="@samp{" end="}\|%stopzone\>" contains=@texRefGroup
615 syn region texRefZone matchgroup=texStatement start="\\nocite{" end="}\|%stopzone\>" contains=@texRefGroup
616 syn region texRefZone matchgroup=texStatement start="\\bibliography{" end="}\|%stopzone\>" contains=@texRefGroup
617 syn region texRefZone matchgroup=texStatement start="\\label{" end="}\|%stopzone\>" contains=@texRefGroup
618 syn region texRefZone matchgroup=texStatement start="\\\(page\|eq\)ref{" end="}\|%stopzone\>" contains=@texRefGroup
619 syn region texRefZone matchgroup=texStatement start="\\v\=ref{" end="}\|%stopzone\>" contains=@texRefGroup
620 syn region texRefOption contained matchgroup=Delimiter start='\[' end=']' contains=@texRefGroup,texRefZone nextgroup=texRefOption,texCite
Bram Moolenaar6e932462014-09-09 18:48:09 +0200621 syn region texCite contained matchgroup=Delimiter start='{' end='}' contains=@texRefGroup,texRefZone,texCite
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100622endif
Bram Moolenaard960d762011-09-21 19:22:10 +0200623syn match texRefZone '\\cite\%([tp]\*\=\)\=' nextgroup=texRefOption,texCite
Bram Moolenaar071d4272004-06-13 20:20:40 +0000624
625" Handle newcommand, newenvironment : {{{1
626syn match texNewCmd "\\newcommand\>" nextgroup=texCmdName skipwhite skipnl
Bram Moolenaarf3913272016-02-25 00:00:01 +0100627if s:tex_fast =~# 'V'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100628 syn region texCmdName contained matchgroup=Delimiter start="{"rs=s+1 end="}" nextgroup=texCmdArgs,texCmdBody skipwhite skipnl
629 syn region texCmdArgs contained matchgroup=Delimiter start="\["rs=s+1 end="]" nextgroup=texCmdBody skipwhite skipnl
630 syn region texCmdBody contained matchgroup=Delimiter start="{"rs=s+1 skip="\\\\\|\\[{}]" matchgroup=Delimiter end="}" contains=@texCmdGroup
631endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000632syn match texNewEnv "\\newenvironment\>" nextgroup=texEnvName skipwhite skipnl
Bram Moolenaarf3913272016-02-25 00:00:01 +0100633if s:tex_fast =~# 'V'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100634 syn region texEnvName contained matchgroup=Delimiter start="{"rs=s+1 end="}" nextgroup=texEnvBgn skipwhite skipnl
635 syn region texEnvBgn contained matchgroup=Delimiter start="{"rs=s+1 end="}" nextgroup=texEnvEnd skipwhite skipnl contains=@texEnvGroup
636 syn region texEnvEnd contained matchgroup=Delimiter start="{"rs=s+1 end="}" skipwhite skipnl contains=@texEnvGroup
637endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000638
639" Definitions/Commands: {{{1
640syn match texDefCmd "\\def\>" nextgroup=texDefName skipwhite skipnl
641if b:tex_stylish
642 syn match texDefName contained "\\[a-zA-Z@]\+" nextgroup=texDefParms,texCmdBody skipwhite skipnl
643 syn match texDefName contained "\\[^a-zA-Z@]" nextgroup=texDefParms,texCmdBody skipwhite skipnl
644else
645 syn match texDefName contained "\\\a\+" nextgroup=texDefParms,texCmdBody skipwhite skipnl
646 syn match texDefName contained "\\\A" nextgroup=texDefParms,texCmdBody skipwhite skipnl
647endif
648syn match texDefParms contained "#[^{]*" contains=texDefParm nextgroup=texCmdBody skipwhite skipnl
649syn match texDefParm contained "#\d\+"
650
651" TeX Lengths: {{{1
Bram Moolenaar9964e462007-05-05 17:54:07 +0000652syn 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 +0000653
654" TeX String Delimiters: {{{1
655syn match texString "\(``\|''\|,,\)"
656
Bram Moolenaar5c736222010-01-06 20:54:52 +0100657" makeatletter -- makeatother sections
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100658if !s:tex_no_error
Bram Moolenaarf3913272016-02-25 00:00:01 +0100659 if s:tex_fast =~# 'S'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100660 syn region texStyle matchgroup=texStatement start='\\makeatletter' end='\\makeatother' contains=@texStyleGroup contained
661 endif
Bram Moolenaar5c736222010-01-06 20:54:52 +0100662 syn match texStyleStatement "\\[a-zA-Z@]\+" contained
Bram Moolenaarf3913272016-02-25 00:00:01 +0100663 if s:tex_fast =~# 'S'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100664 syn region texStyleMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" contains=@texStyleGroup,texError contained
665 syn region texStyleMatcher matchgroup=Delimiter start="\[" end="]" contains=@texStyleGroup,texError contained
666 endif
Bram Moolenaar5c736222010-01-06 20:54:52 +0100667endif
668
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200669" Conceal mode support (supports set cole=2) {{{1
Bram Moolenaarb2c03502010-07-02 20:20:09 +0200670if has("conceal") && &enc == 'utf-8'
Bram Moolenaar611df5b2010-07-26 22:51:56 +0200671
672 " Math Symbols {{{2
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200673 " (many of these symbols were contributed by Björn Winckler)
Bram Moolenaarf3913272016-02-25 00:00:01 +0100674 if s:tex_conceal =~# 'm'
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200675 let s:texMathList=[
Bram Moolenaaradc21822011-04-01 18:03:16 +0200676 \ ['|' , '‖'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200677 \ ['aleph' , 'ℵ'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100678 \ ['amalg' , '∐'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200679 \ ['angle' , '∠'],
680 \ ['approx' , '≈'],
681 \ ['ast' , '∗'],
682 \ ['asymp' , '≍'],
683 \ ['backepsilon' , '∍'],
684 \ ['backsimeq' , '≃'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200685 \ ['backslash' , '∖'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200686 \ ['barwedge' , '⊼'],
687 \ ['because' , '∵'],
Bram Moolenaar690afe12017-01-28 18:34:47 +0100688 \ ['beth' , 'ܒ'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200689 \ ['between' , '≬'],
690 \ ['bigcap' , '∩'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100691 \ ['bigcirc' , '○'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200692 \ ['bigcup' , '∪'],
693 \ ['bigodot' , '⊙'],
694 \ ['bigoplus' , '⊕'],
695 \ ['bigotimes' , '⊗'],
696 \ ['bigsqcup' , '⊔'],
697 \ ['bigtriangledown', '∇'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100698 \ ['bigtriangleup' , '∆'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200699 \ ['bigvee' , '⋁'],
700 \ ['bigwedge' , '⋀'],
701 \ ['blacksquare' , '∎'],
702 \ ['bot' , '⊥'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100703 \ ['bowtie' , '⋈'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200704 \ ['boxdot' , '⊡'],
705 \ ['boxminus' , '⊟'],
706 \ ['boxplus' , '⊞'],
707 \ ['boxtimes' , '⊠'],
Bram Moolenaar690afe12017-01-28 18:34:47 +0100708 \ ['Box' , '☐'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100709 \ ['bullet' , '•'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200710 \ ['bumpeq' , '≏'],
711 \ ['Bumpeq' , '≎'],
712 \ ['cap' , '∩'],
713 \ ['Cap' , '⋒'],
714 \ ['cdot' , '·'],
715 \ ['cdots' , '⋯'],
716 \ ['circ' , '∘'],
717 \ ['circeq' , '≗'],
718 \ ['circlearrowleft', '↺'],
719 \ ['circlearrowright', '↻'],
720 \ ['circledast' , '⊛'],
721 \ ['circledcirc' , '⊚'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200722 \ ['clubsuit' , '♣'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200723 \ ['complement' , '∁'],
724 \ ['cong' , '≅'],
725 \ ['coprod' , '∐'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200726 \ ['copyright' , '©'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200727 \ ['cup' , '∪'],
728 \ ['Cup' , '⋓'],
729 \ ['curlyeqprec' , '⋞'],
730 \ ['curlyeqsucc' , '⋟'],
731 \ ['curlyvee' , '⋎'],
732 \ ['curlywedge' , '⋏'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100733 \ ['dagger' , '†'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200734 \ ['dashv' , '⊣'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100735 \ ['ddagger' , '‡'],
736 \ ['ddots' , '⋱'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200737 \ ['diamond' , '⋄'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200738 \ ['diamondsuit' , '♢'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200739 \ ['div' , '÷'],
740 \ ['doteq' , '≐'],
741 \ ['doteqdot' , '≑'],
742 \ ['dotplus' , '∔'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100743 \ ['dots' , '…'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200744 \ ['dotsb' , '⋯'],
745 \ ['dotsc' , '…'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200746 \ ['dotsi' , '⋯'],
747 \ ['dotso' , '…'],
748 \ ['doublebarwedge' , '⩞'],
749 \ ['downarrow' , '↓'],
750 \ ['Downarrow' , '⇓'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100751 \ ['ell' , 'ℓ'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200752 \ ['emptyset' , '∅'],
753 \ ['eqcirc' , '≖'],
754 \ ['eqsim' , '≂'],
755 \ ['eqslantgtr' , '⪖'],
756 \ ['eqslantless' , '⪕'],
757 \ ['equiv' , '≡'],
Bram Moolenaar690afe12017-01-28 18:34:47 +0100758 \ ['eth' , 'ð'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200759 \ ['exists' , '∃'],
760 \ ['fallingdotseq' , '≒'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200761 \ ['flat' , '♭'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200762 \ ['forall' , '∀'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100763 \ ['frown' , '⁔'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200764 \ ['ge' , '≥'],
765 \ ['geq' , '≥'],
766 \ ['geqq' , '≧'],
767 \ ['gets' , '←'],
Bram Moolenaar690afe12017-01-28 18:34:47 +0100768 \ ['gimel' , 'ℷ'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100769 \ ['gg' , '⟫'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200770 \ ['gneqq' , '≩'],
771 \ ['gtrdot' , '⋗'],
772 \ ['gtreqless' , '⋛'],
773 \ ['gtrless' , '≷'],
774 \ ['gtrsim' , '≳'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200775 \ ['hbar' , 'ℏ'],
776 \ ['heartsuit' , '♡'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200777 \ ['hookleftarrow' , '↩'],
778 \ ['hookrightarrow' , '↪'],
Bram Moolenaar690afe12017-01-28 18:34:47 +0100779 \ ['iff' , '⇔'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200780 \ ['iiint' , '∭'],
781 \ ['iint' , '∬'],
782 \ ['Im' , 'ℑ'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200783 \ ['imath' , 'ɩ'],
Bram Moolenaar690afe12017-01-28 18:34:47 +0100784 \ ['implies' , '⇒'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200785 \ ['in' , '∈'],
786 \ ['infty' , '∞'],
787 \ ['int' , '∫'],
Bram Moolenaar690afe12017-01-28 18:34:47 +0100788 \ ['jmath' , '𝚥'],
789 \ ['land' , '∧'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200790 \ ['lceil' , '⌈'],
791 \ ['ldots' , '…'],
792 \ ['le' , '≤'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100793 \ ['leadsto' , '↝'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200794 \ ['left(' , '('],
795 \ ['left\[' , '['],
796 \ ['left\\{' , '{'],
Bram Moolenaare2719092015-01-10 15:09:25 +0100797 \ ['leftarrow' , '←'],
798 \ ['Leftarrow' , '⇐'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100799 \ ['leftarrowtail' , '↢'],
800 \ ['leftharpoondown', '↽'],
801 \ ['leftharpoonup' , '↼'],
Bram Moolenaar97d62492012-11-15 21:28:22 +0100802 \ ['leftrightarrow' , '↔'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100803 \ ['Leftrightarrow' , '⇔'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200804 \ ['leftrightsquigarrow', '↭'],
805 \ ['leftthreetimes' , '⋋'],
806 \ ['leq' , '≤'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100807 \ ['leq' , '≤'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200808 \ ['leqq' , '≦'],
809 \ ['lessdot' , '⋖'],
810 \ ['lesseqgtr' , '⋚'],
811 \ ['lesssim' , '≲'],
812 \ ['lfloor' , '⌊'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100813 \ ['ll' , '≪'],
Bram Moolenaaradc21822011-04-01 18:03:16 +0200814 \ ['lmoustache' , '╭'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200815 \ ['lneqq' , '≨'],
Bram Moolenaar690afe12017-01-28 18:34:47 +0100816 \ ['lor' , '∨'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200817 \ ['ltimes' , '⋉'],
818 \ ['mapsto' , '↦'],
819 \ ['measuredangle' , '∡'],
820 \ ['mid' , '∣'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100821 \ ['models' , '╞'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200822 \ ['mp' , '∓'],
823 \ ['nabla' , '∇'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200824 \ ['natural' , '♮'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200825 \ ['ncong' , '≇'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200826 \ ['ne' , '≠'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100827 \ ['nearrow' , '↗'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200828 \ ['neg' , '¬'],
829 \ ['neq' , '≠'],
830 \ ['nexists' , '∄'],
831 \ ['ngeq' , '≱'],
832 \ ['ngeqq' , '≱'],
833 \ ['ngtr' , '≯'],
834 \ ['ni' , '∋'],
835 \ ['nleftarrow' , '↚'],
836 \ ['nLeftarrow' , '⇍'],
837 \ ['nLeftrightarrow', '⇎'],
838 \ ['nleq' , '≰'],
839 \ ['nleqq' , '≰'],
840 \ ['nless' , '≮'],
841 \ ['nmid' , '∤'],
842 \ ['notin' , '∉'],
Bram Moolenaar690afe12017-01-28 18:34:47 +0100843 \ ['nparallel' , '∦'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200844 \ ['nprec' , '⊀'],
845 \ ['nrightarrow' , '↛'],
846 \ ['nRightarrow' , '⇏'],
847 \ ['nsim' , '≁'],
848 \ ['nsucc' , '⊁'],
849 \ ['ntriangleleft' , '⋪'],
850 \ ['ntrianglelefteq', '⋬'],
851 \ ['ntriangleright' , '⋫'],
852 \ ['ntrianglerighteq', '⋭'],
853 \ ['nvdash' , '⊬'],
854 \ ['nvDash' , '⊭'],
855 \ ['nVdash' , '⊮'],
856 \ ['nwarrow' , '↖'],
857 \ ['odot' , '⊙'],
858 \ ['oint' , '∮'],
859 \ ['ominus' , '⊖'],
860 \ ['oplus' , '⊕'],
861 \ ['oslash' , '⊘'],
862 \ ['otimes' , '⊗'],
863 \ ['owns' , '∋'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200864 \ ['P' , '¶'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100865 \ ['parallel' , '║'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200866 \ ['partial' , '∂'],
867 \ ['perp' , '⊥'],
868 \ ['pitchfork' , '⋔'],
869 \ ['pm' , '±'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200870 \ ['prec' , '≺'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100871 \ ['precapprox' , '⪷'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200872 \ ['preccurlyeq' , '≼'],
873 \ ['preceq' , '⪯'],
874 \ ['precnapprox' , '⪹'],
875 \ ['precneqq' , '⪵'],
876 \ ['precsim' , '≾'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200877 \ ['prime' , '′'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200878 \ ['prod' , '∏'],
879 \ ['propto' , '∝'],
880 \ ['rceil' , '⌉'],
881 \ ['Re' , 'ℜ'],
882 \ ['rfloor' , '⌋'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200883 \ ['right)' , ')'],
884 \ ['right]' , ']'],
885 \ ['right\\}' , '}'],
Bram Moolenaare2719092015-01-10 15:09:25 +0100886 \ ['rightarrow' , '→'],
887 \ ['Rightarrow' , '⇒'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100888 \ ['rightarrowtail' , '↣'],
889 \ ['rightleftharpoons', '⇌'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200890 \ ['rightsquigarrow', '↝'],
891 \ ['rightthreetimes', '⋌'],
892 \ ['risingdotseq' , '≓'],
Bram Moolenaaradc21822011-04-01 18:03:16 +0200893 \ ['rmoustache' , '╮'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200894 \ ['rtimes' , '⋊'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200895 \ ['S' , '§'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200896 \ ['searrow' , '↘'],
897 \ ['setminus' , '∖'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200898 \ ['sharp' , '♯'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200899 \ ['sim' , '∼'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100900 \ ['simeq' , '⋍'],
901 \ ['smile' , '‿'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200902 \ ['spadesuit' , '♠'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200903 \ ['sphericalangle' , '∢'],
904 \ ['sqcap' , '⊓'],
905 \ ['sqcup' , '⊔'],
906 \ ['sqsubset' , '⊏'],
907 \ ['sqsubseteq' , '⊑'],
908 \ ['sqsupset' , '⊐'],
909 \ ['sqsupseteq' , '⊒'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100910 \ ['star' , '✫'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200911 \ ['subset' , '⊂'],
912 \ ['Subset' , '⋐'],
913 \ ['subseteq' , '⊆'],
914 \ ['subseteqq' , '⫅'],
915 \ ['subsetneq' , '⊊'],
916 \ ['subsetneqq' , '⫋'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200917 \ ['succ' , '≻'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100918 \ ['succapprox' , '⪸'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200919 \ ['succcurlyeq' , '≽'],
920 \ ['succeq' , '⪰'],
921 \ ['succnapprox' , '⪺'],
922 \ ['succneqq' , '⪶'],
923 \ ['succsim' , '≿'],
924 \ ['sum' , '∑'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100925 \ ['supset' , '⊃'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200926 \ ['Supset' , '⋑'],
927 \ ['supseteq' , '⊇'],
928 \ ['supseteqq' , '⫆'],
929 \ ['supsetneq' , '⊋'],
930 \ ['supsetneqq' , '⫌'],
931 \ ['surd' , '√'],
932 \ ['swarrow' , '↙'],
933 \ ['therefore' , '∴'],
934 \ ['times' , '×'],
935 \ ['to' , '→'],
936 \ ['top' , '⊤'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200937 \ ['triangle' , '∆'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200938 \ ['triangleleft' , '⊲'],
939 \ ['trianglelefteq' , '⊴'],
940 \ ['triangleq' , '≜'],
941 \ ['triangleright' , '⊳'],
942 \ ['trianglerighteq', '⊵'],
943 \ ['twoheadleftarrow', '↞'],
944 \ ['twoheadrightarrow', '↠'],
Bram Moolenaar690afe12017-01-28 18:34:47 +0100945 \ ['ulcorner' , '⌜'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200946 \ ['uparrow' , '↑'],
947 \ ['Uparrow' , '⇑'],
948 \ ['updownarrow' , '↕'],
949 \ ['Updownarrow' , '⇕'],
Bram Moolenaar690afe12017-01-28 18:34:47 +0100950 \ ['urcorner' , '⌝'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200951 \ ['varnothing' , '∅'],
952 \ ['vartriangle' , '∆'],
953 \ ['vdash' , '⊢'],
954 \ ['vDash' , '⊨'],
955 \ ['Vdash' , '⊩'],
956 \ ['vdots' , '⋮'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200957 \ ['vee' , '∨'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100958 \ ['veebar' , '⊻'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200959 \ ['Vvdash' , '⊪'],
960 \ ['wedge' , '∧'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200961 \ ['wp' , '℘'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200962 \ ['wr' , '≀']]
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100963" \ ['jmath' , 'X']
964" \ ['uminus' , 'X']
965" \ ['uplus' , 'X']
Bram Moolenaar690afe12017-01-28 18:34:47 +0100966 if &ambw == "double" || exists("g:tex_usedblwidth")
967 let s:texMathList= s:texMathList + [
968 \ ['right\\rangle' , '〉'],
969 \ ['left\\langle' , '〈']]
970 else
971 let s:texMathList= s:texMathList + [
972 \ ['right\\rangle' , '>'],
973 \ ['left\\langle' , '<']]
974 endif
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200975 for texmath in s:texMathList
Bram Moolenaarf3913272016-02-25 00:00:01 +0100976 if texmath[0] =~# '\w$'
Bram Moolenaar81af9252010-12-10 20:35:50 +0100977 exe "syn match texMathSymbol '\\\\".texmath[0]."\\>' contained conceal cchar=".texmath[1]
978 else
979 exe "syn match texMathSymbol '\\\\".texmath[0]."' contained conceal cchar=".texmath[1]
980 endif
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200981 endfor
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200982
983 if &ambw == "double"
984 syn match texMathSymbol '\\gg\>' contained conceal cchar=≫
985 syn match texMathSymbol '\\ll\>' contained conceal cchar=≪
986 else
987 syn match texMathSymbol '\\gg\>' contained conceal cchar=⟫
988 syn match texMathSymbol '\\ll\>' contained conceal cchar=⟪
989 endif
Bram Moolenaard960d762011-09-21 19:22:10 +0200990
991 syn match texMathSymbol '\\hat{a}' contained conceal cchar=â
992 syn match texMathSymbol '\\hat{A}' contained conceal cchar=Â
993 syn match texMathSymbol '\\hat{c}' contained conceal cchar=ĉ
994 syn match texMathSymbol '\\hat{C}' contained conceal cchar=Ĉ
995 syn match texMathSymbol '\\hat{e}' contained conceal cchar=ê
996 syn match texMathSymbol '\\hat{E}' contained conceal cchar=Ê
997 syn match texMathSymbol '\\hat{g}' contained conceal cchar=ĝ
998 syn match texMathSymbol '\\hat{G}' contained conceal cchar=Ĝ
999 syn match texMathSymbol '\\hat{i}' contained conceal cchar=î
1000 syn match texMathSymbol '\\hat{I}' contained conceal cchar=Î
1001 syn match texMathSymbol '\\hat{o}' contained conceal cchar=ô
1002 syn match texMathSymbol '\\hat{O}' contained conceal cchar=Ô
1003 syn match texMathSymbol '\\hat{s}' contained conceal cchar=ŝ
1004 syn match texMathSymbol '\\hat{S}' contained conceal cchar=Ŝ
1005 syn match texMathSymbol '\\hat{u}' contained conceal cchar=û
1006 syn match texMathSymbol '\\hat{U}' contained conceal cchar=Û
1007 syn match texMathSymbol '\\hat{w}' contained conceal cchar=ŵ
1008 syn match texMathSymbol '\\hat{W}' contained conceal cchar=Ŵ
1009 syn match texMathSymbol '\\hat{y}' contained conceal cchar=ŷ
1010 syn match texMathSymbol '\\hat{Y}' contained conceal cchar=Ŷ
Bram Moolenaare2719092015-01-10 15:09:25 +01001011" syn match texMathSymbol '\\bar{a}' contained conceal cchar=a̅
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001012 endif
Bram Moolenaar611df5b2010-07-26 22:51:56 +02001013
1014 " Greek {{{2
Bram Moolenaarf3913272016-02-25 00:00:01 +01001015 if s:tex_conceal =~# 'g'
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001016 fun! s:Greek(group,pat,cchar)
1017 exe 'syn match '.a:group." '".a:pat."' contained conceal cchar=".a:cchar
1018 endfun
1019 call s:Greek('texGreek','\\alpha\>' ,'α')
1020 call s:Greek('texGreek','\\beta\>' ,'β')
1021 call s:Greek('texGreek','\\gamma\>' ,'γ')
1022 call s:Greek('texGreek','\\delta\>' ,'δ')
1023 call s:Greek('texGreek','\\epsilon\>' ,'ϵ')
1024 call s:Greek('texGreek','\\varepsilon\>' ,'ε')
1025 call s:Greek('texGreek','\\zeta\>' ,'ζ')
1026 call s:Greek('texGreek','\\eta\>' ,'η')
1027 call s:Greek('texGreek','\\theta\>' ,'θ')
Bram Moolenaare2719092015-01-10 15:09:25 +01001028 call s:Greek('texGreek','\\vartheta\>' ,'ϑ')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001029 call s:Greek('texGreek','\\kappa\>' ,'κ')
1030 call s:Greek('texGreek','\\lambda\>' ,'λ')
1031 call s:Greek('texGreek','\\mu\>' ,'μ')
1032 call s:Greek('texGreek','\\nu\>' ,'ν')
1033 call s:Greek('texGreek','\\xi\>' ,'ξ')
1034 call s:Greek('texGreek','\\pi\>' ,'π')
1035 call s:Greek('texGreek','\\varpi\>' ,'ϖ')
1036 call s:Greek('texGreek','\\rho\>' ,'ρ')
1037 call s:Greek('texGreek','\\varrho\>' ,'ϱ')
1038 call s:Greek('texGreek','\\sigma\>' ,'σ')
Bram Moolenaare2719092015-01-10 15:09:25 +01001039 call s:Greek('texGreek','\\varsigma\>' ,'ς')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001040 call s:Greek('texGreek','\\tau\>' ,'τ')
1041 call s:Greek('texGreek','\\upsilon\>' ,'υ')
Bram Moolenaare2719092015-01-10 15:09:25 +01001042 call s:Greek('texGreek','\\phi\>' ,'ϕ')
1043 call s:Greek('texGreek','\\varphi\>' ,'φ')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001044 call s:Greek('texGreek','\\chi\>' ,'χ')
1045 call s:Greek('texGreek','\\psi\>' ,'ψ')
1046 call s:Greek('texGreek','\\omega\>' ,'ω')
1047 call s:Greek('texGreek','\\Gamma\>' ,'Γ')
1048 call s:Greek('texGreek','\\Delta\>' ,'Δ')
1049 call s:Greek('texGreek','\\Theta\>' ,'Θ')
1050 call s:Greek('texGreek','\\Lambda\>' ,'Λ')
1051 call s:Greek('texGreek','\\Xi\>' ,'Χ')
1052 call s:Greek('texGreek','\\Pi\>' ,'Π')
1053 call s:Greek('texGreek','\\Sigma\>' ,'Σ')
1054 call s:Greek('texGreek','\\Upsilon\>' ,'Υ')
1055 call s:Greek('texGreek','\\Phi\>' ,'Φ')
1056 call s:Greek('texGreek','\\Psi\>' ,'Ψ')
1057 call s:Greek('texGreek','\\Omega\>' ,'Ω')
1058 delfun s:Greek
1059 endif
Bram Moolenaar611df5b2010-07-26 22:51:56 +02001060
1061 " Superscripts/Subscripts {{{2
Bram Moolenaarf3913272016-02-25 00:00:01 +01001062 if s:tex_conceal =~# 's'
1063 if s:tex_fast =~# 's'
Bram Moolenaarac7bd632013-03-19 11:35:58 +01001064 syn region texSuperscript matchgroup=Delimiter start='\^{' skip="\\\\\|\\[{}]" end='}' contained concealends contains=texSpecialChar,texSuperscripts,texStatement,texSubscript,texSuperscript,texMathMatcher
1065 syn region texSubscript matchgroup=Delimiter start='_{' skip="\\\\\|\\[{}]" end='}' contained concealends contains=texSpecialChar,texSubscripts,texStatement,texSubscript,texSuperscript,texMathMatcher
1066 endif
Bram Moolenaar541f92d2015-06-19 13:27:23 +02001067 " s:SuperSub:
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001068 fun! s:SuperSub(group,leader,pat,cchar)
Bram Moolenaar03413f42016-04-12 21:07:15 +02001069 if a:pat =~# '^\\' || (a:leader == '\^' && a:pat =~# s:tex_superscripts) || (a:leader == '_' && a:pat =~# s:tex_subscripts)
Bram Moolenaar6e932462014-09-09 18:48:09 +02001070" call Decho("SuperSub: group<".a:group."> leader<".a:leader."> pat<".a:pat."> cchar<".a:cchar.">")
1071 exe 'syn match '.a:group." '".a:leader.a:pat."' contained conceal cchar=".a:cchar
Bram Moolenaar541f92d2015-06-19 13:27:23 +02001072 exe 'syn match '.a:group."s '".a:pat ."' contained conceal cchar=".a:cchar.' nextgroup='.a:group.'s'
Bram Moolenaar6e932462014-09-09 18:48:09 +02001073 endif
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001074 endfun
1075 call s:SuperSub('texSuperscript','\^','0','⁰')
1076 call s:SuperSub('texSuperscript','\^','1','¹')
1077 call s:SuperSub('texSuperscript','\^','2','²')
1078 call s:SuperSub('texSuperscript','\^','3','³')
1079 call s:SuperSub('texSuperscript','\^','4','⁴')
1080 call s:SuperSub('texSuperscript','\^','5','⁵')
1081 call s:SuperSub('texSuperscript','\^','6','⁶')
1082 call s:SuperSub('texSuperscript','\^','7','⁷')
1083 call s:SuperSub('texSuperscript','\^','8','⁸')
1084 call s:SuperSub('texSuperscript','\^','9','⁹')
1085 call s:SuperSub('texSuperscript','\^','a','ᵃ')
1086 call s:SuperSub('texSuperscript','\^','b','ᵇ')
1087 call s:SuperSub('texSuperscript','\^','c','ᶜ')
1088 call s:SuperSub('texSuperscript','\^','d','ᵈ')
1089 call s:SuperSub('texSuperscript','\^','e','ᵉ')
1090 call s:SuperSub('texSuperscript','\^','f','ᶠ')
1091 call s:SuperSub('texSuperscript','\^','g','ᵍ')
1092 call s:SuperSub('texSuperscript','\^','h','ʰ')
1093 call s:SuperSub('texSuperscript','\^','i','ⁱ')
1094 call s:SuperSub('texSuperscript','\^','j','ʲ')
1095 call s:SuperSub('texSuperscript','\^','k','ᵏ')
1096 call s:SuperSub('texSuperscript','\^','l','ˡ')
1097 call s:SuperSub('texSuperscript','\^','m','ᵐ')
1098 call s:SuperSub('texSuperscript','\^','n','ⁿ')
1099 call s:SuperSub('texSuperscript','\^','o','ᵒ')
1100 call s:SuperSub('texSuperscript','\^','p','ᵖ')
1101 call s:SuperSub('texSuperscript','\^','r','ʳ')
1102 call s:SuperSub('texSuperscript','\^','s','ˢ')
1103 call s:SuperSub('texSuperscript','\^','t','ᵗ')
1104 call s:SuperSub('texSuperscript','\^','u','ᵘ')
1105 call s:SuperSub('texSuperscript','\^','v','ᵛ')
1106 call s:SuperSub('texSuperscript','\^','w','ʷ')
1107 call s:SuperSub('texSuperscript','\^','x','ˣ')
1108 call s:SuperSub('texSuperscript','\^','y','ʸ')
1109 call s:SuperSub('texSuperscript','\^','z','ᶻ')
1110 call s:SuperSub('texSuperscript','\^','A','ᴬ')
1111 call s:SuperSub('texSuperscript','\^','B','ᴮ')
1112 call s:SuperSub('texSuperscript','\^','D','ᴰ')
1113 call s:SuperSub('texSuperscript','\^','E','ᴱ')
1114 call s:SuperSub('texSuperscript','\^','G','ᴳ')
1115 call s:SuperSub('texSuperscript','\^','H','ᴴ')
1116 call s:SuperSub('texSuperscript','\^','I','ᴵ')
1117 call s:SuperSub('texSuperscript','\^','J','ᴶ')
1118 call s:SuperSub('texSuperscript','\^','K','ᴷ')
1119 call s:SuperSub('texSuperscript','\^','L','ᴸ')
1120 call s:SuperSub('texSuperscript','\^','M','ᴹ')
1121 call s:SuperSub('texSuperscript','\^','N','ᴺ')
1122 call s:SuperSub('texSuperscript','\^','O','ᴼ')
1123 call s:SuperSub('texSuperscript','\^','P','ᴾ')
1124 call s:SuperSub('texSuperscript','\^','R','ᴿ')
1125 call s:SuperSub('texSuperscript','\^','T','ᵀ')
1126 call s:SuperSub('texSuperscript','\^','U','ᵁ')
1127 call s:SuperSub('texSuperscript','\^','W','ᵂ')
Bram Moolenaar6be7f872012-01-20 21:08:56 +01001128 call s:SuperSub('texSuperscript','\^',',','︐')
1129 call s:SuperSub('texSuperscript','\^',':','︓')
1130 call s:SuperSub('texSuperscript','\^',';','︔')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001131 call s:SuperSub('texSuperscript','\^','+','⁺')
1132 call s:SuperSub('texSuperscript','\^','-','⁻')
1133 call s:SuperSub('texSuperscript','\^','<','˂')
1134 call s:SuperSub('texSuperscript','\^','>','˃')
1135 call s:SuperSub('texSuperscript','\^','/','ˊ')
1136 call s:SuperSub('texSuperscript','\^','(','⁽')
1137 call s:SuperSub('texSuperscript','\^',')','⁾')
1138 call s:SuperSub('texSuperscript','\^','\.','˙')
1139 call s:SuperSub('texSuperscript','\^','=','˭')
1140 call s:SuperSub('texSubscript','_','0','₀')
1141 call s:SuperSub('texSubscript','_','1','₁')
1142 call s:SuperSub('texSubscript','_','2','₂')
1143 call s:SuperSub('texSubscript','_','3','₃')
1144 call s:SuperSub('texSubscript','_','4','₄')
1145 call s:SuperSub('texSubscript','_','5','₅')
1146 call s:SuperSub('texSubscript','_','6','₆')
1147 call s:SuperSub('texSubscript','_','7','₇')
1148 call s:SuperSub('texSubscript','_','8','₈')
1149 call s:SuperSub('texSubscript','_','9','₉')
1150 call s:SuperSub('texSubscript','_','a','ₐ')
1151 call s:SuperSub('texSubscript','_','e','ₑ')
Bram Moolenaar802a0d92016-06-26 16:17:58 +02001152 call s:SuperSub('texSubscript','_','h','ₕ')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001153 call s:SuperSub('texSubscript','_','i','ᵢ')
Bram Moolenaar802a0d92016-06-26 16:17:58 +02001154 call s:SuperSub('texSubscript','_','j','ⱼ')
1155 call s:SuperSub('texSubscript','_','k','ₖ')
1156 call s:SuperSub('texSubscript','_','l','ₗ')
1157 call s:SuperSub('texSubscript','_','m','ₘ')
1158 call s:SuperSub('texSubscript','_','n','ₙ')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001159 call s:SuperSub('texSubscript','_','o','ₒ')
Bram Moolenaar802a0d92016-06-26 16:17:58 +02001160 call s:SuperSub('texSubscript','_','p','ₚ')
1161 call s:SuperSub('texSubscript','_','r','ᵣ')
1162 call s:SuperSub('texSubscript','_','s','ₛ')
1163 call s:SuperSub('texSubscript','_','t','ₜ')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001164 call s:SuperSub('texSubscript','_','u','ᵤ')
Bram Moolenaar802a0d92016-06-26 16:17:58 +02001165 call s:SuperSub('texSubscript','_','v','ᵥ')
1166 call s:SuperSub('texSubscript','_','x','ₓ')
Bram Moolenaar6be7f872012-01-20 21:08:56 +01001167 call s:SuperSub('texSubscript','_',',','︐')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001168 call s:SuperSub('texSubscript','_','+','₊')
1169 call s:SuperSub('texSubscript','_','-','₋')
1170 call s:SuperSub('texSubscript','_','/','ˏ')
1171 call s:SuperSub('texSubscript','_','(','₍')
1172 call s:SuperSub('texSubscript','_',')','₎')
1173 call s:SuperSub('texSubscript','_','\.','‸')
1174 call s:SuperSub('texSubscript','_','r','ᵣ')
1175 call s:SuperSub('texSubscript','_','v','ᵥ')
1176 call s:SuperSub('texSubscript','_','x','ₓ')
1177 call s:SuperSub('texSubscript','_','\\beta\>' ,'ᵦ')
1178 call s:SuperSub('texSubscript','_','\\delta\>','ᵨ')
1179 call s:SuperSub('texSubscript','_','\\phi\>' ,'ᵩ')
1180 call s:SuperSub('texSubscript','_','\\gamma\>','ᵧ')
1181 call s:SuperSub('texSubscript','_','\\chi\>' ,'ᵪ')
Bram Moolenaar802a0d92016-06-26 16:17:58 +02001182
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001183 delfun s:SuperSub
1184 endif
Bram Moolenaar611df5b2010-07-26 22:51:56 +02001185
1186 " Accented characters: {{{2
Bram Moolenaarf3913272016-02-25 00:00:01 +01001187 if s:tex_conceal =~# 'a'
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001188 if b:tex_stylish
1189 syn match texAccent "\\[bcdvuH][^a-zA-Z@]"me=e-1
1190 syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)[^a-zA-Z@]"me=e-1
1191 else
1192 fun! s:Accents(chr,...)
1193 let i= 1
Bram Moolenaara6878372014-03-22 21:02:50 +01001194 for accent in ["`","\\'","^",'"','\~','\.','=',"c","H","k","r","u","v"]
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001195 if i > a:0
1196 break
1197 endif
Bram Moolenaar7fc0c062010-08-10 21:43:35 +02001198 if strlen(a:{i}) == 0 || a:{i} == ' ' || a:{i} == '?'
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001199 let i= i + 1
1200 continue
1201 endif
Bram Moolenaarf3913272016-02-25 00:00:01 +01001202 if accent =~# '\a'
Bram Moolenaar7fc0c062010-08-10 21:43:35 +02001203 exe "syn match texAccent '".'\\'.accent.'\(\s*{'.a:chr.'}\|\s\+'.a:chr.'\)'."' conceal cchar=".a:{i}
1204 else
1205 exe "syn match texAccent '".'\\'.accent.'\s*\({'.a:chr.'}\|'.a:chr.'\)'."' conceal cchar=".a:{i}
1206 endif
Bram Moolenaare0021c72010-07-28 17:25:21 +02001207 let i= i + 1
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001208 endfor
1209 endfun
Bram Moolenaar6e932462014-09-09 18:48:09 +02001210 " \` \' \^ \" \~ \. \= \c \H \k \r \u \v
1211 call s:Accents('a','à','á','â','ä','ã','ȧ','ā',' ',' ','ą','å','ă','ǎ')
1212 call s:Accents('A','À','Á','Â','Ä','Ã','Ȧ','Ā',' ',' ','Ą','Å','Ă','Ǎ')
1213 call s:Accents('c',' ','ć','ĉ',' ',' ','ċ',' ','ç',' ',' ',' ',' ','č')
1214 call s:Accents('C',' ','Ć','Ĉ',' ',' ','Ċ',' ','Ç',' ',' ',' ',' ','Č')
1215 call s:Accents('d',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ď')
1216 call s:Accents('D',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','Ď')
1217 call s:Accents('e','è','é','ê','ë','ẽ','ė','ē','ȩ',' ','ę',' ','ĕ','ě')
1218 call s:Accents('E','È','É','Ê','Ë','Ẽ','Ė','Ē','Ȩ',' ','Ę',' ','Ĕ','Ě')
1219 call s:Accents('g',' ','ǵ','ĝ',' ',' ','ġ',' ','ģ',' ',' ',' ','ğ','ǧ')
1220 call s:Accents('G',' ','Ǵ','Ĝ',' ',' ','Ġ',' ','Ģ',' ',' ',' ','Ğ','Ǧ')
1221 call s:Accents('h',' ',' ','ĥ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ȟ')
1222 call s:Accents('H',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','Ȟ')
1223 call s:Accents('i','ì','í','î','ï','ĩ','į','ī',' ',' ','į',' ','ĭ','ǐ')
1224 call s:Accents('I','Ì','Í','Î','Ï','Ĩ','İ','Ī',' ',' ','Į',' ','Ĭ','Ǐ')
1225 call s:Accents('J',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ǰ')
1226 call s:Accents('k',' ',' ',' ',' ',' ',' ',' ','ķ',' ',' ',' ',' ','ǩ')
1227 call s:Accents('K',' ',' ',' ',' ',' ',' ',' ','Ķ',' ',' ',' ',' ','Ǩ')
1228 call s:Accents('l',' ','ĺ','ľ',' ',' ',' ',' ','ļ',' ',' ',' ',' ','ľ')
1229 call s:Accents('L',' ','Ĺ','Ľ',' ',' ',' ',' ','Ļ',' ',' ',' ',' ','Ľ')
1230 call s:Accents('n',' ','ń',' ',' ','ñ',' ',' ','ņ',' ',' ',' ',' ','ň')
1231 call s:Accents('N',' ','Ń',' ',' ','Ñ',' ',' ','Ņ',' ',' ',' ',' ','Ň')
1232 call s:Accents('o','ò','ó','ô','ö','õ','ȯ','ō',' ','ő','ǫ',' ','ŏ','ǒ')
1233 call s:Accents('O','Ò','Ó','Ô','Ö','Õ','Ȯ','Ō',' ','Ő','Ǫ',' ','Ŏ','Ǒ')
1234 call s:Accents('r',' ','ŕ',' ',' ',' ',' ',' ','ŗ',' ',' ',' ',' ','ř')
1235 call s:Accents('R',' ','Ŕ',' ',' ',' ',' ',' ','Ŗ',' ',' ',' ',' ','Ř')
1236 call s:Accents('s',' ','ś','ŝ',' ',' ',' ',' ','ş',' ','ȿ',' ',' ','š')
1237 call s:Accents('S',' ','Ś','Ŝ',' ',' ',' ',' ','Ş',' ',' ',' ',' ','Š')
1238 call s:Accents('t',' ',' ',' ',' ',' ',' ',' ','ţ',' ',' ',' ',' ','ť')
1239 call s:Accents('T',' ',' ',' ',' ',' ',' ',' ','Ţ',' ',' ',' ',' ','Ť')
1240 call s:Accents('u','ù','ú','û','ü','ũ',' ','ū',' ','ű','ų','ů','ŭ','ǔ')
1241 call s:Accents('U','Ù','Ú','Û','Ü','Ũ',' ','Ū',' ','Ű','Ų','Ů','Ŭ','Ǔ')
1242 call s:Accents('w',' ',' ','ŵ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ')
1243 call s:Accents('W',' ',' ','Ŵ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ')
1244 call s:Accents('y','ỳ','ý','ŷ','ÿ','ỹ',' ',' ',' ',' ',' ',' ',' ',' ')
1245 call s:Accents('Y','Ỳ','Ý','Ŷ','Ÿ','Ỹ',' ',' ',' ',' ',' ',' ',' ',' ')
1246 call s:Accents('z',' ','ź',' ',' ',' ','ż',' ',' ',' ',' ',' ',' ','ž')
1247 call s:Accents('Z',' ','Ź',' ',' ',' ','Ż',' ',' ',' ',' ',' ',' ','Ž')
Bram Moolenaara6878372014-03-22 21:02:50 +01001248 call s:Accents('\\i','ì','í','î','ï','ĩ','į',' ',' ',' ',' ',' ','ĭ',' ')
1249 " \` \' \^ \" \~ \. \= \c \H \k \r \u \v
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001250 delfun s:Accents
1251 syn match texAccent '\\aa\>' conceal cchar=å
1252 syn match texAccent '\\AA\>' conceal cchar=Å
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001253 syn match texAccent '\\o\>' conceal cchar=ø
1254 syn match texAccent '\\O\>' conceal cchar=Ø
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001255 syn match texLigature '\\AE\>' conceal cchar=Æ
1256 syn match texLigature '\\ae\>' conceal cchar=æ
1257 syn match texLigature '\\oe\>' conceal cchar=œ
1258 syn match texLigature '\\OE\>' conceal cchar=Œ
1259 syn match texLigature '\\ss\>' conceal cchar=ß
1260 endif
Bram Moolenaar611df5b2010-07-26 22:51:56 +02001261 endif
Bram Moolenaarb2c03502010-07-02 20:20:09 +02001262endif
1263
1264" ---------------------------------------------------------------------
Bram Moolenaar071d4272004-06-13 20:20:40 +00001265" LaTeX synchronization: {{{1
1266syn sync maxlines=200
1267syn sync minlines=50
1268
1269syn sync match texSyncStop groupthere NONE "%stopzone\>"
1270
1271" Synchronization: {{{1
1272" The $..$ and $$..$$ make for impossible sync patterns
1273" (one can't tell if a "$$" starts or stops a math zone by itself)
1274" The following grouptheres coupled with minlines above
1275" help improve the odds of good syncing.
Bram Moolenaare2719092015-01-10 15:09:25 +01001276if !exists("g:tex_no_math")
Bram Moolenaar071d4272004-06-13 20:20:40 +00001277 syn sync match texSyncMathZoneA groupthere NONE "\\end{abstract}"
1278 syn sync match texSyncMathZoneA groupthere NONE "\\end{center}"
1279 syn sync match texSyncMathZoneA groupthere NONE "\\end{description}"
1280 syn sync match texSyncMathZoneA groupthere NONE "\\end{enumerate}"
1281 syn sync match texSyncMathZoneA groupthere NONE "\\end{itemize}"
1282 syn sync match texSyncMathZoneA groupthere NONE "\\end{table}"
1283 syn sync match texSyncMathZoneA groupthere NONE "\\end{tabular}"
1284 syn sync match texSyncMathZoneA groupthere NONE "\\\(sub\)*section\>"
1285endif
1286
Bram Moolenaarb2c03502010-07-02 20:20:09 +02001287" ---------------------------------------------------------------------
Bram Moolenaar071d4272004-06-13 20:20:40 +00001288" Highlighting: {{{1
Bram Moolenaarf37506f2016-08-31 22:22:10 +02001289
1290" Define the default highlighting. {{{1
1291if !exists("skip_tex_syntax_inits")
1292
Bram Moolenaar071d4272004-06-13 20:20:40 +00001293 " TeX highlighting groups which should share similar highlighting
Bram Moolenaar6e932462014-09-09 18:48:09 +02001294 if !exists("g:tex_no_error")
Bram Moolenaar543b7ef2013-06-01 14:50:56 +02001295 if !exists("g:tex_no_math")
Bram Moolenaarf37506f2016-08-31 22:22:10 +02001296 hi def link texBadMath texError
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +02001297 hi def link texMathDelimBad texError
Bram Moolenaarf37506f2016-08-31 22:22:10 +02001298 hi def link texMathError texError
Bram Moolenaar071d4272004-06-13 20:20:40 +00001299 if !b:tex_stylish
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +02001300 hi def link texOnlyMath texError
Bram Moolenaar071d4272004-06-13 20:20:40 +00001301 endif
1302 endif
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +02001303 hi def link texError Error
Bram Moolenaar071d4272004-06-13 20:20:40 +00001304 endif
1305
Bram Moolenaard38b0552012-04-25 19:07:41 +02001306 hi texBoldStyle gui=bold cterm=bold
1307 hi texItalStyle gui=italic cterm=italic
1308 hi texBoldItalStyle gui=bold,italic cterm=bold,italic
1309 hi texItalBoldStyle gui=bold,italic cterm=bold,italic
Bram Moolenaarf37506f2016-08-31 22:22:10 +02001310 hi def link texCite texRefZone
1311 hi def link texDefCmd texDef
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +02001312 hi def link texDefName texDef
1313 hi def link texDocType texCmdName
1314 hi def link texDocTypeArgs texCmdArgs
Bram Moolenaarf37506f2016-08-31 22:22:10 +02001315 hi def link texInputFileOpt texCmdArgs
1316 hi def link texInputCurlies texDelimiter
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +02001317 hi def link texLigature texSpecialChar
Bram Moolenaare2719092015-01-10 15:09:25 +01001318 if !exists("g:tex_no_math")
Bram Moolenaarf37506f2016-08-31 22:22:10 +02001319 hi def link texMathDelimSet1 texMathDelim
1320 hi def link texMathDelimSet2 texMathDelim
1321 hi def link texMathDelimKey texMathDelim
1322 hi def link texMathMatcher texMath
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +02001323 hi def link texAccent texStatement
Bram Moolenaarf37506f2016-08-31 22:22:10 +02001324 hi def link texGreek texStatement
1325 hi def link texSuperscript texStatement
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +02001326 hi def link texSubscript texStatement
Bram Moolenaarf37506f2016-08-31 22:22:10 +02001327 hi def link texSuperscripts texSuperscript
1328 hi def link texSubscripts texSubscript
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +02001329 hi def link texMathSymbol texStatement
1330 hi def link texMathZoneV texMath
1331 hi def link texMathZoneW texMath
1332 hi def link texMathZoneX texMath
1333 hi def link texMathZoneY texMath
1334 hi def link texMathZoneV texMath
1335 hi def link texMathZoneZ texMath
Bram Moolenaar071d4272004-06-13 20:20:40 +00001336 endif
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +02001337 hi def link texBeginEnd texCmdName
Bram Moolenaarf37506f2016-08-31 22:22:10 +02001338 hi def link texBeginEndName texSection
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +02001339 hi def link texSpaceCode texStatement
Bram Moolenaarf37506f2016-08-31 22:22:10 +02001340 hi def link texStyleStatement texStatement
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +02001341 hi def link texTypeSize texType
1342 hi def link texTypeStyle texType
Bram Moolenaar071d4272004-06-13 20:20:40 +00001343
1344 " Basic TeX highlighting groups
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +02001345 hi def link texCmdArgs Number
1346 hi def link texCmdName Statement
1347 hi def link texComment Comment
1348 hi def link texDef Statement
1349 hi def link texDefParm Special
1350 hi def link texDelimiter Delimiter
Bram Moolenaarf37506f2016-08-31 22:22:10 +02001351 hi def link texInput Special
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +02001352 hi def link texInputFile Special
Bram Moolenaarf37506f2016-08-31 22:22:10 +02001353 hi def link texLength Number
1354 hi def link texMath Special
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +02001355 hi def link texMathDelim Statement
1356 hi def link texMathOper Operator
Bram Moolenaarf37506f2016-08-31 22:22:10 +02001357 hi def link texNewCmd Statement
1358 hi def link texNewEnv Statement
1359 hi def link texOption Number
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +02001360 hi def link texRefZone Special
1361 hi def link texSection PreCondit
Bram Moolenaarf37506f2016-08-31 22:22:10 +02001362 hi def link texSpaceCodeChar Special
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +02001363 hi def link texSpecialChar SpecialChar
1364 hi def link texStatement Statement
Bram Moolenaarf37506f2016-08-31 22:22:10 +02001365 hi def link texString String
1366 hi def link texTodo Todo
1367 hi def link texType Type
1368 hi def link texZone PreCondit
Bram Moolenaar071d4272004-06-13 20:20:40 +00001369
Bram Moolenaar071d4272004-06-13 20:20:40 +00001370endif
1371
Bram Moolenaar15146672011-10-20 22:22:38 +02001372" Cleanup: {{{1
Bram Moolenaara0f849e2015-10-30 14:37:44 +01001373delc TexFold
Bram Moolenaar81af9252010-12-10 20:35:50 +01001374unlet s:extfname
Bram Moolenaar071d4272004-06-13 20:20:40 +00001375let b:current_syntax = "tex"
Bram Moolenaar15146672011-10-20 22:22:38 +02001376let &cpo = s:keepcpo
1377unlet s:keepcpo
Bram Moolenaare90ee312010-08-05 22:08:47 +02001378" vim: ts=8 fdm=marker