xref: /vim-8.2.3635/runtime/syntax/tex.vim (revision dfb18411)
1" Vim syntax file
2" Language:	TeX
3" Maintainer:	Charles E. Campbell <[email protected]>
4" Last Change:	Jun 24, 2013
5" Version:	79
6" URL:		http://www.drchip.org/astronaut/vim/index.html#SYNTAX_TEX
7"
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
31
32" Version Clears: {{{1
33" For version 5.x: Clear all syntax items
34" For version 6.x: Quit when a syntax file was already loaded
35if version < 600
36  syntax clear
37elseif exists("b:current_syntax")
38  finish
39endif
40let s:keepcpo= &cpo
41set cpo&vim
42scriptencoding utf-8
43
44" Define the default highlighting. {{{1
45" For version 5.7 and earlier: only when not done already
46" For version 5.8 and later: only when an item doesn't have highlighting yet
47if version >= 508 || !exists("did_tex_syntax_inits")
48 let did_tex_syntax_inits = 1
49 if version < 508
50  command -nargs=+ HiLink hi link <args>
51 else
52  command -nargs=+ HiLink hi def link <args>
53 endif
54endif
55if exists("g:tex_no_error") && g:tex_no_error
56 let s:tex_no_error= 1
57endif
58
59" by default, enable all region-based highlighting
60let s:tex_fast= "bcmMprsSvV"
61if exists("g:tex_fast")
62 if type(g:tex_fast) != 1
63  " g:tex_fast exists and is not a string, so
64  " turn off all optional region-based highighting
65  let s:tex_fast= ""
66 else
67  let s:tex_fast= g:tex_fast
68 endif
69 let s:tex_no_error= 1
70else
71 let s:tex_fast= "bcmMprsSvV"
72endif
73
74" let user determine which classes of concealment will be supported
75"   a=accents/ligatures d=delimiters m=math symbols  g=Greek  s=superscripts/subscripts
76if !exists("g:tex_conceal")
77 let s:tex_conceal= 'abdmgsS'
78else
79 let s:tex_conceal= g:tex_conceal
80endif
81
82" Determine whether or not to use "*.sty" mode {{{1
83" The user may override the normal determination by setting
84"   g:tex_stylish to 1      (for    "*.sty" mode)
85"    or to           0 else (normal "*.tex" mode)
86" or on a buffer-by-buffer basis with b:tex_stylish
87let s:extfname=expand("%:e")
88if exists("g:tex_stylish")
89 let b:tex_stylish= g:tex_stylish
90elseif !exists("b:tex_stylish")
91 if s:extfname == "sty" || s:extfname == "cls" || s:extfname == "clo" || s:extfname == "dtx" || s:extfname == "ltx"
92  let b:tex_stylish= 1
93 else
94  let b:tex_stylish= 0
95 endif
96endif
97
98" handle folding {{{1
99if !exists("g:tex_fold_enabled")
100 let g:tex_fold_enabled= 0
101elseif g:tex_fold_enabled && !has("folding")
102 let g:tex_fold_enabled= 0
103 echomsg "Ignoring g:tex_fold_enabled=".g:tex_fold_enabled."; need to re-compile vim for +fold support"
104endif
105if g:tex_fold_enabled && &fdm == "manual"
106 setl fdm=syntax
107endif
108
109" (La)TeX keywords: uses the characters 0-9,a-z,A-Z,192-255 only... {{{1
110" but _ is the only one that causes problems.
111" One may override this iskeyword setting by providing
112" g:tex_isk
113if exists("g:tex_isk")
114 exe "setlocal isk=".g:tex_isk
115else
116 setlocal isk=48-57,a-z,A-Z,192-255
117endif
118if b:tex_stylish
119  setlocal isk+=@-@
120endif
121if exists("g:tex_nospell") && g:tex_nospell && !exists("g:tex_comment_nospell")
122 let g:tex_comment_nospell= 1
123endif
124
125" Clusters: {{{1
126" --------
127syn cluster texCmdGroup		contains=texCmdBody,texComment,texDefParm,texDelimiter,texDocType,texInput,texLength,texLigature,texMathDelim,texMathOper,texNewCmd,texNewEnv,texRefZone,texSection,texBeginEnd,texBeginEndName,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle
128if !exists("s:tex_no_error")
129 syn cluster texCmdGroup	add=texMathError
130endif
131syn cluster texEnvGroup		contains=texMatcher,texMathDelim,texSpecialChar,texStatement
132syn 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
133syn 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
134syn 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
135if !exists("g:tex_nospell") || !g:tex_nospell
136 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
137 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
138else
139 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
140 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
141endif
142syn cluster texPreambleMatchGroup	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
143syn cluster texRefGroup		contains=texMatcher,texComment,texDelimiter
144if !exists("tex_no_math")
145 syn cluster texMathZones	contains=texMathZoneV,texMathZoneW,texMathZoneX,texMathZoneY,texMathZoneZ
146 syn cluster texMatchGroup	add=@texMathZones
147 syn cluster texMathDelimGroup	contains=texMathDelimBad,texMathDelimKey,texMathDelimSet1,texMathDelimSet2
148 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
149 syn cluster texMathZoneGroup	contains=texComment,texDelimiter,texLength,texMathDelim,texMathMatcher,texMathOper,texMathSymbol,texMathText,texRefZone,texSpecialChar,texStatement,texTypeSize,texTypeStyle
150 if !exists("s:tex_no_error")
151  syn cluster texMathMatchGroup	add=texMathError
152  syn cluster texMathZoneGroup	add=texMathError
153 endif
154 syn cluster texMathZoneGroup add=@NoSpell
155 " following used in the \part \chapter \section \subsection \subsubsection
156 " \paragraph \subparagraph \author \title highlighting
157 syn cluster texDocGroup		contains=texPartZone,@texPartGroup
158 syn cluster texPartGroup		contains=texChapterZone,texSectionZone,texParaZone
159 syn cluster texChapterGroup		contains=texSectionZone,texParaZone
160 syn cluster texSectionGroup		contains=texSubSectionZone,texParaZone
161 syn cluster texSubSectionGroup		contains=texSubSubSectionZone,texParaZone
162 syn cluster texSubSubSectionGroup	contains=texParaZone
163 syn cluster texParaGroup		contains=texSubParaZone
164 if has("conceal") && &enc == 'utf-8'
165  syn cluster texMathZoneGroup	add=texGreek,texSuperscript,texSubscript,texMathSymbol
166  syn cluster texMathMatchGroup	add=texGreek,texSuperscript,texSubscript,texMathSymbol
167 endif
168endif
169
170" Try to flag {} and () mismatches: {{{1
171if s:tex_fast =~ 'm'
172  if !exists("s:tex_no_error")
173   syn region texMatcher		matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]"	end="}"		contains=@texMatchGroup,texError
174   syn region texMatcher		matchgroup=Delimiter start="\["				end="]"		contains=@texMatchGroup,texError,@NoSpell
175  else
176   syn region texMatcher		matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]"	end="}"		contains=@texMatchGroup
177   syn region texMatcher		matchgroup=Delimiter start="\["				end="]"		contains=@texMatchGroup
178  endif
179  if !exists("g:tex_nospell") || !g:tex_nospell
180   syn region texParen		start="("						end=")"		contains=@texMatchGroup,@Spell
181  else
182   syn region texParen		start="("						end=")"		contains=@texMatchGroup
183  endif
184endif
185if !exists("s:tex_no_error")
186 syn match  texError		"[}\])]"
187endif
188if s:tex_fast =~ 'M'
189  if !exists("tex_no_math")
190   if !exists("s:tex_no_error")
191    syn match  texMathError	"}"	contained
192   endif
193   syn region texMathMatcher	matchgroup=Delimiter	start="{"          skip="\\\\\|\\}"     end="}" end="%stopzone\>"	contained contains=@texMathMatchGroup
194  endif
195endif
196
197" TeX/LaTeX keywords: {{{1
198" Instead of trying to be All Knowing, I just match \..alphameric..
199" Note that *.tex files may not have "@" in their \commands
200if exists("g:tex_tex") || b:tex_stylish
201  syn match texStatement	"\\[a-zA-Z@]\+"
202else
203  syn match texStatement	"\\\a\+"
204  if !exists("s:tex_no_error")
205   syn match texError		"\\\a*@[a-zA-Z@]*"
206  endif
207endif
208
209" TeX/LaTeX delimiters: {{{1
210syn match texDelimiter		"&"
211syn match texDelimiter		"\\\\"
212syn match texDelimiter		"[{}]"
213
214" Tex/Latex Options: {{{1
215syn match texOption		"[^\\]\zs#\d\+\|^#\d\+"
216
217" texAccent (tnx to Karim Belabas) avoids annoying highlighting for accents: {{{1
218if b:tex_stylish
219  syn match texAccent		"\\[bcdvuH][^a-zA-Z@]"me=e-1
220  syn match texLigature		"\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)[^a-zA-Z@]"me=e-1
221else
222  syn match texAccent		"\\[bcdvuH]\A"me=e-1
223  syn match texLigature		"\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)\A"me=e-1
224endif
225syn match texAccent		"\\[bcdvuH]$"
226syn match texAccent		+\\[=^.\~"`']+
227syn match texAccent		+\\['=t'.c^ud"vb~Hr]{\a}+
228syn match texLigature		"\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)$"
229
230" \begin{}/\end{} section markers: {{{1
231syn match  texBeginEnd		"\\begin\>\|\\end\>" nextgroup=texBeginEndName
232if s:tex_fast =~ 'm'
233  syn region texBeginEndName	matchgroup=Delimiter	start="{"		end="}"	contained	nextgroup=texBeginEndModifier	contains=texComment
234  syn region texBeginEndModifier	matchgroup=Delimiter	start="\["		end="]"	contained	contains=texComment,@NoSpell
235endif
236
237" \documentclass, \documentstyle, \usepackage: {{{1
238syn match  texDocType		"\\documentclass\>\|\\documentstyle\>\|\\usepackage\>"	nextgroup=texBeginEndName,texDocTypeArgs
239if s:tex_fast =~ 'm'
240  syn region texDocTypeArgs	matchgroup=Delimiter start="\[" end="]"			contained	nextgroup=texBeginEndName	contains=texComment,@NoSpell
241endif
242
243" Preamble syntax-based folding support: {{{1
244if g:tex_fold_enabled && has("folding")
245 syn region texPreamble	transparent fold	start='\zs\\documentclass\>' end='\ze\\begin{document}'	contains=texStyle,@texPreambleMatchGroup
246endif
247
248" TeX input: {{{1
249syn match texInput		"\\input\s\+[a-zA-Z/.0-9_^]\+"hs=s+7				contains=texStatement
250syn match texInputFile		"\\include\(graphics\|list\)\=\(\[.\{-}\]\)\=\s*{.\{-}}"	contains=texStatement,texInputCurlies,texInputFileOpt
251syn match texInputFile		"\\\(epsfig\|input\|usepackage\)\s*\(\[.*\]\)\={.\{-}}"		contains=texStatement,texInputCurlies,texInputFileOpt
252syn match texInputCurlies	"[{}]"								contained
253if s:tex_fast =~ 'm'
254 syn region texInputFileOpt	matchgroup=Delimiter start="\[" end="\]"			contained	contains=texComment
255endif
256
257" Type Styles (LaTeX 2.09): {{{1
258syn match texTypeStyle		"\\rm\>"
259syn match texTypeStyle		"\\em\>"
260syn match texTypeStyle		"\\bf\>"
261syn match texTypeStyle		"\\it\>"
262syn match texTypeStyle		"\\sl\>"
263syn match texTypeStyle		"\\sf\>"
264syn match texTypeStyle		"\\sc\>"
265syn match texTypeStyle		"\\tt\>"
266
267" Type Styles: attributes, commands, families, etc (LaTeX2E): {{{1
268if s:tex_conceal !~ 'b'
269 syn match texTypeStyle		"\\textbf\>"
270 syn match texTypeStyle		"\\textit\>"
271endif
272syn match texTypeStyle		"\\textmd\>"
273syn match texTypeStyle		"\\textrm\>"
274syn match texTypeStyle		"\\textsc\>"
275syn match texTypeStyle		"\\textsf\>"
276syn match texTypeStyle		"\\textsl\>"
277syn match texTypeStyle		"\\texttt\>"
278syn match texTypeStyle		"\\textup\>"
279syn match texTypeStyle		"\\emph\>"
280
281syn match texTypeStyle		"\\mathbb\>"
282syn match texTypeStyle		"\\mathbf\>"
283syn match texTypeStyle		"\\mathcal\>"
284syn match texTypeStyle		"\\mathfrak\>"
285syn match texTypeStyle		"\\mathit\>"
286syn match texTypeStyle		"\\mathnormal\>"
287syn match texTypeStyle		"\\mathrm\>"
288syn match texTypeStyle		"\\mathsf\>"
289syn match texTypeStyle		"\\mathtt\>"
290
291syn match texTypeStyle		"\\rmfamily\>"
292syn match texTypeStyle		"\\sffamily\>"
293syn match texTypeStyle		"\\ttfamily\>"
294
295syn match texTypeStyle		"\\itshape\>"
296syn match texTypeStyle		"\\scshape\>"
297syn match texTypeStyle		"\\slshape\>"
298syn match texTypeStyle		"\\upshape\>"
299
300syn match texTypeStyle		"\\bfseries\>"
301syn match texTypeStyle		"\\mdseries\>"
302
303" Some type sizes: {{{1
304syn match texTypeSize		"\\tiny\>"
305syn match texTypeSize		"\\scriptsize\>"
306syn match texTypeSize		"\\footnotesize\>"
307syn match texTypeSize		"\\small\>"
308syn match texTypeSize		"\\normalsize\>"
309syn match texTypeSize		"\\large\>"
310syn match texTypeSize		"\\Large\>"
311syn match texTypeSize		"\\LARGE\>"
312syn match texTypeSize		"\\huge\>"
313syn match texTypeSize		"\\Huge\>"
314
315" Spacecodes (TeX'isms): {{{1
316" \mathcode`\^^@="2201  \delcode`\(="028300  \sfcode`\)=0 \uccode`X=`X  \lccode`x=`x
317syn match texSpaceCode		"\\\(math\|cat\|del\|lc\|sf\|uc\)code`"me=e-1 nextgroup=texSpaceCodeChar
318syn match texSpaceCodeChar    "`\\\=.\(\^.\)\==\(\d\|\"\x\{1,6}\|`.\)"	contained
319
320" Sections, subsections, etc: {{{1
321if s:tex_fast =~ 'p'
322  if !exists("g:tex_nospell") || !g:tex_nospell
323   if g:tex_fold_enabled && has("folding")
324    syn region texDocZone			matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}'											fold contains=@texFoldGroup,@texDocGroup,@Spell
325    syn region texPartZone		matchgroup=texSection start='\\part\>'			 end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)'								fold contains=@texFoldGroup,@texPartGroup,@Spell
326    syn region texChapterZone		matchgroup=texSection start='\\chapter\>'		 end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)'							fold contains=@texFoldGroup,@texChapterGroup,@Spell
327    syn region texSectionZone		matchgroup=texSection start='\\section\>'		 end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'					fold contains=@texFoldGroup,@texSectionGroup,@Spell
328    syn region texSubSectionZone		matchgroup=texSection start='\\subsection\>'		 end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'				fold contains=@texFoldGroup,@texSubSectionGroup,@Spell
329    syn region texSubSubSectionZone	matchgroup=texSection start='\\subsubsection\>'		 end='\ze\s*\\\%(\%(sub\)\{,2}section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'				fold contains=@texFoldGroup,@texSubSubSectionGroup,@Spell
330    syn region texParaZone		matchgroup=texSection start='\\paragraph\>'		 end='\ze\s*\\\%(paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'			fold contains=@texFoldGroup,@texParaGroup,@Spell
331    syn region texSubParaZone		matchgroup=texSection start='\\subparagraph\>'		 end='\ze\s*\\\%(\%(sub\)\=paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'	fold contains=@texFoldGroup,@Spell
332    syn region texTitle			matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}'													fold contains=@texFoldGroup,@Spell
333    syn region texAbstract		matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}'											fold contains=@texFoldGroup,@Spell
334   else
335    syn region texDocZone			matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}'											contains=@texFoldGroup,@texDocGroup,@Spell
336    syn region texPartZone		matchgroup=texSection start='\\part\>'			 end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)'								contains=@texFoldGroup,@texPartGroup,@Spell
337    syn region texChapterZone		matchgroup=texSection start='\\chapter\>'		 end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)'							contains=@texFoldGroup,@texChapterGroup,@Spell
338    syn region texSectionZone		matchgroup=texSection start='\\section\>'		 end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'					contains=@texFoldGroup,@texSectionGroup,@Spell
339    syn region texSubSectionZone		matchgroup=texSection start='\\subsection\>'		 end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'				contains=@texFoldGroup,@texSubSectionGroup,@Spell
340    syn region texSubSubSectionZone	matchgroup=texSection start='\\subsubsection\>'		 end='\ze\s*\\\%(\%(sub\)\{,2}section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'				contains=@texFoldGroup,@texSubSubSectionGroup,@Spell
341    syn region texParaZone		matchgroup=texSection start='\\paragraph\>'		 end='\ze\s*\\\%(paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'			contains=@texFoldGroup,@texParaGroup,@Spell
342    syn region texSubParaZone		matchgroup=texSection start='\\subparagraph\>'		 end='\ze\s*\\\%(\%(sub\)\=paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'	contains=@texFoldGroup,@Spell
343    syn region texTitle			matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}'													contains=@texFoldGroup,@Spell
344    syn region texAbstract		matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}'											contains=@texFoldGroup,@Spell
345   endif
346  else
347   if g:tex_fold_enabled && has("folding")
348    syn region texDocZone			matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}'											fold contains=@texFoldGroup,@texDocGroup
349    syn region texPartZone		matchgroup=texSection start='\\part\>'			 end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)'								fold contains=@texFoldGroup,@texPartGroup
350    syn region texChapterZone		matchgroup=texSection start='\\chapter\>'		 end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)'							fold contains=@texFoldGroup,@texChapterGroup
351    syn region texSectionZone		matchgroup=texSection start='\\section\>'		 end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'					fold contains=@texFoldGroup,@texSectionGroup
352    syn region texSubSectionZone		matchgroup=texSection start='\\subsection\>'		 end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'				fold contains=@texFoldGroup,@texSubSectionGroup
353    syn region texSubSubSectionZone	matchgroup=texSection start='\\subsubsection\>'		 end='\ze\s*\\\%(\%(sub\)\{,2}section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'				fold contains=@texFoldGroup,@texSubSubSectionGroup
354    syn region texParaZone		matchgroup=texSection start='\\paragraph\>'		 end='\ze\s*\\\%(paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'			fold contains=@texFoldGroup,@texParaGroup
355    syn region texSubParaZone		matchgroup=texSection start='\\subparagraph\>'		 end='\ze\s*\\\%(\%(sub\)\=paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'	fold contains=@texFoldGroup
356    syn region texTitle			matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}'													fold contains=@texFoldGroup
357    syn region texAbstract		matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}'											fold contains=@texFoldGroup
358   else
359    syn region texDocZone			matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}'											contains=@texFoldGroup,@texDocGroup
360    syn region texPartZone		matchgroup=texSection start='\\part\>'			 end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)'								contains=@texFoldGroup,@texPartGroup
361    syn region texChapterZone		matchgroup=texSection start='\\chapter\>'		 end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)'							contains=@texFoldGroup,@texChapterGroup
362    syn region texSectionZone		matchgroup=texSection start='\\section\>'		 end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'					contains=@texFoldGroup,@texSectionGroup
363    syn region texSubSectionZone		matchgroup=texSection start='\\subsection\>'		 end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'				contains=@texFoldGroup,@texSubSectionGroup
364    syn region texSubSubSectionZone	matchgroup=texSection start='\\subsubsection\>'		 end='\ze\s*\\\%(\%(sub\)\{,2}section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'				contains=@texFoldGroup,@texSubSubSectionGroup
365    syn region texParaZone		matchgroup=texSection start='\\paragraph\>'		 end='\ze\s*\\\%(paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'			contains=@texFoldGroup,@texParaGroup
366    syn region texSubParaZone		matchgroup=texSection start='\\subparagraph\>'		 end='\ze\s*\\\%(\%(sub\)\=paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'	contains=@texFoldGroup
367    syn region texTitle			matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}'													contains=@texFoldGroup
368    syn region texAbstract		matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}'											contains=@texFoldGroup
369   endif
370  endif
371endif
372
373" particular support for bold and italic {{{1
374if s:tex_fast =~ 'b'
375  if s:tex_conceal =~ 'b'
376   syn region texBoldStyle	matchgroup=texTypeStyle start="\\textbf\s*{" end="}" concealends contains=@texBoldGroup
377   syn region texBoldItalStyle	matchgroup=texTypeStyle start="\\textit\s*{" end="}" concealends contains=@texItalGroup
378   syn region texItalStyle	matchgroup=texTypeStyle start="\\textit\s*{" end="}" concealends contains=@texItalGroup
379   syn region texItalBoldStyle	matchgroup=texTypeStyle start="\\textbf\s*{" end="}" concealends contains=@texBoldGroup
380  endif
381endif
382
383" Bad Math (mismatched): {{{1
384if !exists("g:tex_no_math") && !exists("s:tex_no_error")
385 syn match texBadMath		"\\end\s*{\s*\(array\|gathered\|bBpvV]matrix\|split\|subequations\|smallmatrix\|xxalignat\)\s*}"
386 syn match texBadMath		"\\end\s*{\s*\(align\|alignat\|displaymath\|displaymath\|eqnarray\|equation\|flalign\|gather\|math\|multline\|xalignat\)\*\=\s*}"
387 syn match texBadMath		"\\[\])]"
388endif
389
390" Math Zones: {{{1
391if !exists("tex_no_math")
392 " TexNewMathZone: function creates a mathzone with the given suffix and mathzone name. {{{2
393 "                 Starred forms are created if starform is true.  Starred
394 "                 forms have syntax group and synchronization groups with a
395 "                 "S" appended.  Handles: cluster, syntax, sync, and HiLink.
396 fun! TexNewMathZone(sfx,mathzone,starform)
397   let grpname  = "texMathZone".a:sfx
398   let syncname = "texSyncMathZone".a:sfx
399   if g:tex_fold_enabled
400    let foldcmd= " fold"
401   else
402    let foldcmd= ""
403   endif
404   exe "syn cluster texMathZones add=".grpname
405   if s:tex_fast =~ 'M'
406    exe 'syn region '.grpname.' start='."'".'\\begin\s*{\s*'.a:mathzone.'\s*}'."'".' end='."'".'\\end\s*{\s*'.a:mathzone.'\s*}'."'".' keepend contains=@texMathZoneGroup'.foldcmd
407    exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
408    exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
409   endif
410   exe 'hi def link '.grpname.' texMath'
411   if a:starform
412    let grpname  = "texMathZone".a:sfx.'S'
413    let syncname = "texSyncMathZone".a:sfx.'S'
414    exe "syn cluster texMathZones add=".grpname
415    if s:tex_fast =~ 'M'
416     exe 'syn region '.grpname.' start='."'".'\\begin\s*{\s*'.a:mathzone.'\*\s*}'."'".' end='."'".'\\end\s*{\s*'.a:mathzone.'\*\s*}'."'".' keepend contains=@texMathZoneGroup'.foldcmd
417     exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
418     exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
419    endif
420    exe 'hi def link '.grpname.' texMath'
421   endif
422 endfun
423
424 " Standard Math Zones: {{{2
425 call TexNewMathZone("A","align",1)
426 call TexNewMathZone("B","alignat",1)
427 call TexNewMathZone("C","displaymath",1)
428 call TexNewMathZone("D","eqnarray",1)
429 call TexNewMathZone("E","equation",1)
430 call TexNewMathZone("F","flalign",1)
431 call TexNewMathZone("G","gather",1)
432 call TexNewMathZone("H","math",1)
433 call TexNewMathZone("I","multline",1)
434 call TexNewMathZone("J","subequations",0)
435 call TexNewMathZone("K","xalignat",1)
436 call TexNewMathZone("L","xxalignat",0)
437
438 " Inline Math Zones: {{{2
439 if s:tex_fast =~ 'M'
440  if has("conceal") && &enc == 'utf-8' && s:tex_conceal =~ 'd'
441   syn region texMathZoneV	matchgroup=Delimiter start="\\("			matchgroup=Delimiter end="\\)\|%stopzone\>"	keepend concealends contains=@texMathZoneGroup
442   syn region texMathZoneW	matchgroup=Delimiter start="\\\["			matchgroup=Delimiter end="\\]\|%stopzone\>"	keepend concealends contains=@texMathZoneGroup
443   syn region texMathZoneX	matchgroup=Delimiter start="\$" skip="\\\\\|\\\$"	matchgroup=Delimiter end="\$" end="%stopzone\>"		concealends contains=@texMathZoneGroup
444   syn region texMathZoneY	matchgroup=Delimiter start="\$\$" 			matchgroup=Delimiter end="\$\$" end="%stopzone\>"	concealends keepend		contains=@texMathZoneGroup
445  else
446   syn region texMathZoneV	matchgroup=Delimiter start="\\("			matchgroup=Delimiter end="\\)\|%stopzone\>"	keepend contains=@texMathZoneGroup
447   syn region texMathZoneW	matchgroup=Delimiter start="\\\["			matchgroup=Delimiter end="\\]\|%stopzone\>"	keepend contains=@texMathZoneGroup
448   syn region texMathZoneX	matchgroup=Delimiter start="\$" skip="\\\\\|\\\$"	matchgroup=Delimiter end="\$" end="%stopzone\>"	contains=@texMathZoneGroup
449   syn region texMathZoneY	matchgroup=Delimiter start="\$\$" 			matchgroup=Delimiter end="\$\$" end="%stopzone\>"	keepend		contains=@texMathZoneGroup
450  endif
451  syn region texMathZoneZ	matchgroup=texStatement start="\\ensuremath\s*{"	matchgroup=texStatement end="}" end="%stopzone\>"	contains=@texMathZoneGroup
452 endif
453
454 syn match texMathOper		"[_^=]" contained
455
456 " Text Inside Math Zones: {{{2
457 if s:tex_fast =~ 'M'
458  if !exists("g:tex_nospell") || !g:tex_nospell
459   syn region texMathText matchgroup=texStatement start='\\\(\(inter\)\=text\|mbox\)\s*{'	end='}'	contains=@texFoldGroup,@Spell
460  else
461   syn region texMathText matchgroup=texStatement start='\\\(\(inter\)\=text\|mbox\)\s*{'	end='}'	contains=@texFoldGroup
462  endif
463 endif
464
465 " \left..something.. and \right..something.. support: {{{2
466 syn match   texMathDelimBad	contained		"\S"
467 if has("conceal") && &enc == 'utf-8' && s:tex_conceal =~ 'm'
468  syn match   texMathDelim	contained		"\\left\\{\>"	skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad contains=texMathSymbol cchar={
469  syn match   texMathDelim	contained		"\\right\\}\>"	skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad contains=texMathSymbol cchar=}
470  let s:texMathDelimList=[
471     \ ['<'            , '<'] ,
472     \ ['>'            , '>'] ,
473     \ ['('            , '('] ,
474     \ [')'            , ')'] ,
475     \ ['\['           , '['] ,
476     \ [']'            , ']'] ,
477     \ ['\\{'          , '{'] ,
478     \ ['\\}'          , '}'] ,
479     \ ['|'            , '|'] ,
480     \ ['\\|'          , '‖'] ,
481     \ ['\\backslash'  , '\'] ,
482     \ ['\\downarrow'  , '↓'] ,
483     \ ['\\Downarrow'  , '⇓'] ,
484     \ ['\\langle'     , '<'] ,
485     \ ['\\lbrace'     , '['] ,
486     \ ['\\lceil'      , '⌈'] ,
487     \ ['\\lfloor'     , '⌊'] ,
488     \ ['\\lgroup'     , '⌊'] ,
489     \ ['\\lmoustache' , '⎛'] ,
490     \ ['\\rangle'     , '>'] ,
491     \ ['\\rbrace'     , ']'] ,
492     \ ['\\rceil'      , '⌉'] ,
493     \ ['\\rfloor'     , '⌋'] ,
494     \ ['\\rgroup'     , '⌋'] ,
495     \ ['\\rmoustache' , '⎞'] ,
496     \ ['\\uparrow'    , '↑'] ,
497     \ ['\\Uparrow'    , '↑'] ,
498     \ ['\\updownarrow', '↕'] ,
499     \ ['\\Updownarrow', '⇕']]
500  syn match texMathDelim	'\\[bB]igg\=[lr]' contained nextgroup=texMathDelimBad
501  for texmath in s:texMathDelimList
502   exe "syn match texMathDelim	'\\\\[bB]igg\\=[lr]\\=".texmath[0]."'	contained conceal cchar=".texmath[1]
503  endfor
504
505 else
506  syn match   texMathDelim	contained		"\\\(left\|right\)\>"	skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad
507  syn match   texMathDelim	contained		"\\[bB]igg\=[lr]\=\>"	skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad
508  syn match   texMathDelimSet2	contained	"\\"		nextgroup=texMathDelimKey,texMathDelimBad
509  syn match   texMathDelimSet1	contained	"[<>()[\]|/.]\|\\[{}|]"
510  syn keyword texMathDelimKey	contained	backslash       lceil           lVert           rgroup          uparrow
511  syn keyword texMathDelimKey	contained	downarrow       lfloor          rangle          rmoustache      Uparrow
512  syn keyword texMathDelimKey	contained	Downarrow       lgroup          rbrace          rvert           updownarrow
513  syn keyword texMathDelimKey	contained	langle          lmoustache      rceil           rVert           Updownarrow
514  syn keyword texMathDelimKey	contained	lbrace          lvert           rfloor
515 endif
516 syn match   texMathDelim	contained		"\\\(left\|right\)arrow\>\|\<\([aA]rrow\|brace\)\=vert\>"
517 syn match   texMathDelim	contained		"\\lefteqn\>"
518endif
519
520" Special TeX characters  ( \$ \& \% \# \{ \} \_ \S \P ) : {{{1
521syn match texSpecialChar	"\\[$&%#{}_]"
522if b:tex_stylish
523  syn match texSpecialChar	"\\[SP@][^a-zA-Z@]"me=e-1
524else
525  syn match texSpecialChar	"\\[SP@]\A"me=e-1
526endif
527syn match texSpecialChar	"\\\\"
528if !exists("tex_no_math")
529 syn match texOnlyMath		"[_^]"
530endif
531syn match texSpecialChar	"\^\^[0-9a-f]\{2}\|\^\^\S"
532if s:tex_conceal !~ 'S'
533 syn match texSpecialChar	'\\glq\>'	contained conceal cchar=‚
534 syn match texSpecialChar	'\\grq\>'	contained conceal cchar=‘
535 syn match texSpecialChar	'\\glqq\>'	contained conceal cchar=„
536 syn match texSpecialChar	'\\grqq\>'	contained conceal cchar=“
537 syn match texSpecialChar	'\\hyp\>'	contained conceal cchar=-
538endif
539
540" Comments: {{{1
541"    Normal TeX LaTeX     :   %....
542"    Documented TeX Format:  ^^A...	-and-	leading %s (only)
543if !exists("g:tex_comment_nospell") || !g:tex_comment_nospell
544 syn cluster texCommentGroup	contains=texTodo,@Spell
545else
546 syn cluster texCommentGroup	contains=texTodo,@NoSpell
547endif
548syn case ignore
549syn keyword texTodo		contained		combak	fixme	todo	xxx
550syn case match
551if s:extfname == "dtx"
552  syn match texComment		"\^\^A.*$"	contains=@texCommentGroup
553  syn match texComment		"^%\+"		contains=@texCommentGroup
554else
555  if g:tex_fold_enabled
556   " allows syntax-folding of 2 or more contiguous comment lines
557   " single-line comments are not folded
558   syn match  texComment	"%.*$"			contains=@texCommentGroup
559   if s:tex_fast =~ 'c'
560    syn region texComment	start="^\zs\s*%.*\_s*%"	skip="^\s*%"	end='^\ze\s*[^%]' fold
561    syn region texNoSpell	contained fold		matchgroup=texComment start="%\s*nospell\s*{"	end="%\s*nospell\s*}"	contains=@texFoldGroup,@NoSpell
562   endif
563  else
564   syn match texComment		"%.*$"			contains=@texCommentGroup
565   if s:tex_fast =~ 'c'
566    syn region texNoSpell	contained		matchgroup=texComment start="%\s*nospell\s*{"	end="%\s*nospell\s*}"	contains=@texFoldGroup,@NoSpell
567   endif
568  endif
569endif
570
571" Separate lines used for verb` and verb# so that the end conditions {{{1
572" will appropriately terminate.
573" If g:tex_verbspell exists, then verbatim texZones will permit spellchecking there.
574if s:tex_fast =~ 'v'
575  if exists("g:tex_verbspell") && g:tex_verbspell
576   syn region texZone		start="\\begin{[vV]erbatim}"		end="\\end{[vV]erbatim}\|%stopzone\>"	contains=@Spell
577   " listings package:
578   syn region texZone		start="\\begin{lstlisting}"		end="\\end{lstlisting}\|%stopzone\>"	contains=@Spell
579   if version < 600
580    syn region texZone		start="\\verb\*\=`"			end="`\|%stopzone\>"			contains=@Spell
581    syn region texZone		start="\\verb\*\=#"			end="#\|%stopzone\>"			contains=@Spell
582   else
583     if b:tex_stylish
584      syn region texZone		start="\\verb\*\=\z([^\ta-zA-Z@]\)"	end="\z1\|%stopzone\>"			contains=@Spell
585     else
586      syn region texZone		start="\\verb\*\=\z([^\ta-zA-Z]\)"	end="\z1\|%stopzone\>"			contains=@Spell
587     endif
588   endif
589  else
590   syn region texZone		start="\\begin{[vV]erbatim}"		end="\\end{[vV]erbatim}\|%stopzone\>"
591   if version < 600
592    syn region texZone		start="\\verb\*\=`"			end="`\|%stopzone\>"
593    syn region texZone		start="\\verb\*\=#"			end="#\|%stopzone\>"
594   else
595     if b:tex_stylish
596       syn region texZone		start="\\verb\*\=\z([^\ta-zA-Z@]\)"	end="\z1\|%stopzone\>"
597     else
598       syn region texZone		start="\\verb\*\=\z([^\ta-zA-Z]\)"	end="\z1\|%stopzone\>"
599     endif
600   endif
601  endif
602endif
603
604" Tex Reference Zones: {{{1
605if s:tex_fast =~ 'r'
606  syn region texZone		matchgroup=texStatement start="@samp{"			end="}\|%stopzone\>"	contains=@texRefGroup
607  syn region texRefZone		matchgroup=texStatement start="\\nocite{"		end="}\|%stopzone\>"	contains=@texRefGroup
608  syn region texRefZone		matchgroup=texStatement start="\\bibliography{"		end="}\|%stopzone\>"	contains=@texRefGroup
609  syn region texRefZone		matchgroup=texStatement start="\\label{"		end="}\|%stopzone\>"	contains=@texRefGroup
610  syn region texRefZone		matchgroup=texStatement start="\\\(page\|eq\)ref{"	end="}\|%stopzone\>"	contains=@texRefGroup
611  syn region texRefZone		matchgroup=texStatement start="\\v\=ref{"		end="}\|%stopzone\>"	contains=@texRefGroup
612  syn region texRefOption	contained	matchgroup=Delimiter start='\[' end=']'		contains=@texRefGroup,texRefZone	nextgroup=texRefOption,texCite
613  syn region texCite	contained	matchgroup=Delimiter start='{' end='}'		contains=@texRefGroup,texRefZone,texCite
614endif
615syn match  texRefZone		'\\cite\%([tp]\*\=\)\=' nextgroup=texRefOption,texCite
616
617" Handle newcommand, newenvironment : {{{1
618syn match  texNewCmd				"\\newcommand\>"			nextgroup=texCmdName skipwhite skipnl
619if s:tex_fast =~ 'V'
620  syn region texCmdName contained matchgroup=Delimiter start="{"rs=s+1  end="}"		nextgroup=texCmdArgs,texCmdBody skipwhite skipnl
621  syn region texCmdArgs contained matchgroup=Delimiter start="\["rs=s+1 end="]"		nextgroup=texCmdBody skipwhite skipnl
622  syn region texCmdBody contained matchgroup=Delimiter start="{"rs=s+1 skip="\\\\\|\\[{}]"	matchgroup=Delimiter end="}" contains=@texCmdGroup
623endif
624syn match  texNewEnv				"\\newenvironment\>"			nextgroup=texEnvName skipwhite skipnl
625if s:tex_fast =~ 'V'
626  syn region texEnvName contained matchgroup=Delimiter start="{"rs=s+1  end="}"		nextgroup=texEnvBgn skipwhite skipnl
627  syn region texEnvBgn  contained matchgroup=Delimiter start="{"rs=s+1  end="}"		nextgroup=texEnvEnd skipwhite skipnl contains=@texEnvGroup
628  syn region texEnvEnd  contained matchgroup=Delimiter start="{"rs=s+1  end="}"		skipwhite skipnl contains=@texEnvGroup
629endif
630
631" Definitions/Commands: {{{1
632syn match texDefCmd				"\\def\>"				nextgroup=texDefName skipwhite skipnl
633if b:tex_stylish
634  syn match texDefName contained		"\\[a-zA-Z@]\+"				nextgroup=texDefParms,texCmdBody skipwhite skipnl
635  syn match texDefName contained		"\\[^a-zA-Z@]"				nextgroup=texDefParms,texCmdBody skipwhite skipnl
636else
637  syn match texDefName contained		"\\\a\+"				nextgroup=texDefParms,texCmdBody skipwhite skipnl
638  syn match texDefName contained		"\\\A"					nextgroup=texDefParms,texCmdBody skipwhite skipnl
639endif
640syn match texDefParms  contained		"#[^{]*"	contains=texDefParm	nextgroup=texCmdBody skipwhite skipnl
641syn match  texDefParm  contained		"#\d\+"
642
643" TeX Lengths: {{{1
644syn match  texLength		"\<\d\+\([.,]\d\+\)\=\s*\(true\)\=\s*\(bp\|cc\|cm\|dd\|em\|ex\|in\|mm\|pc\|pt\|sp\)\>"
645
646" TeX String Delimiters: {{{1
647syn match texString		"\(``\|''\|,,\)"
648
649" makeatletter -- makeatother sections
650if !exists("s:tex_no_error")
651 if s:tex_fast =~ 'S'
652  syn region texStyle			matchgroup=texStatement start='\\makeatletter' end='\\makeatother'	contains=@texStyleGroup contained
653 endif
654 syn match  texStyleStatement		"\\[a-zA-Z@]\+"	contained
655 if s:tex_fast =~ 'S'
656  syn region texStyleMatcher		matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]"	end="}"		contains=@texStyleGroup,texError	contained
657  syn region texStyleMatcher		matchgroup=Delimiter start="\["				end="]"		contains=@texStyleGroup,texError	contained
658 endif
659endif
660
661" Conceal mode support (supports set cole=2) {{{1
662if has("conceal") && &enc == 'utf-8'
663
664 " Math Symbols {{{2
665 " (many of these symbols were contributed by Björn Winckler)
666 if s:tex_conceal =~ 'm'
667  let s:texMathList=[
668    \ ['|'		, '‖'],
669    \ ['aleph'		, 'ℵ'],
670    \ ['amalg'		, '∐'],
671    \ ['angle'		, '∠'],
672    \ ['approx'		, '≈'],
673    \ ['ast'		, '∗'],
674    \ ['asymp'		, '≍'],
675    \ ['backepsilon'	, '∍'],
676    \ ['backsimeq'	, '≃'],
677    \ ['backslash'	, '∖'],
678    \ ['barwedge'	, '⊼'],
679    \ ['because'	, '∵'],
680    \ ['between'	, '≬'],
681    \ ['bigcap'		, '∩'],
682    \ ['bigcirc'	, '○'],
683    \ ['bigcup'		, '∪'],
684    \ ['bigodot'	, '⊙'],
685    \ ['bigoplus'	, '⊕'],
686    \ ['bigotimes'	, '⊗'],
687    \ ['bigsqcup'	, '⊔'],
688    \ ['bigtriangledown', '∇'],
689    \ ['bigtriangleup'	, '∆'],
690    \ ['bigvee'		, '⋁'],
691    \ ['bigwedge'	, '⋀'],
692    \ ['blacksquare'	, '∎'],
693    \ ['bot'		, '⊥'],
694    \ ['bowtie'	        , '⋈'],
695    \ ['boxdot'		, '⊡'],
696    \ ['boxminus'	, '⊟'],
697    \ ['boxplus'	, '⊞'],
698    \ ['boxtimes'	, '⊠'],
699    \ ['bullet'	        , '•'],
700    \ ['bumpeq'		, '≏'],
701    \ ['Bumpeq'		, '≎'],
702    \ ['cap'		, '∩'],
703    \ ['Cap'		, '⋒'],
704    \ ['cdot'		, '·'],
705    \ ['cdots'		, '⋯'],
706    \ ['circ'		, '∘'],
707    \ ['circeq'		, '≗'],
708    \ ['circlearrowleft', '↺'],
709    \ ['circlearrowright', '↻'],
710    \ ['circledast'	, '⊛'],
711    \ ['circledcirc'	, '⊚'],
712    \ ['clubsuit'	, '♣'],
713    \ ['complement'	, '∁'],
714    \ ['cong'		, '≅'],
715    \ ['coprod'		, '∐'],
716    \ ['copyright'	, '©'],
717    \ ['cup'		, '∪'],
718    \ ['Cup'		, '⋓'],
719    \ ['curlyeqprec'	, '⋞'],
720    \ ['curlyeqsucc'	, '⋟'],
721    \ ['curlyvee'	, '⋎'],
722    \ ['curlywedge'	, '⋏'],
723    \ ['dagger'	        , '†'],
724    \ ['dashv'		, '⊣'],
725    \ ['ddagger'	, '‡'],
726    \ ['ddots'	        , '⋱'],
727    \ ['diamond'	, '⋄'],
728    \ ['diamondsuit'	, '♢'],
729    \ ['div'		, '÷'],
730    \ ['doteq'		, '≐'],
731    \ ['doteqdot'	, '≑'],
732    \ ['dotplus'	, '∔'],
733    \ ['dots'		, '…'],
734    \ ['dotsb'		, '⋯'],
735    \ ['dotsc'		, '…'],
736    \ ['dotsi'		, '⋯'],
737    \ ['dotso'		, '…'],
738    \ ['doublebarwedge'	, '⩞'],
739    \ ['downarrow'	, '↓'],
740    \ ['Downarrow'	, '⇓'],
741    \ ['ell'		, 'ℓ'],
742    \ ['emptyset'	, '∅'],
743    \ ['eqcirc'		, '≖'],
744    \ ['eqsim'		, '≂'],
745    \ ['eqslantgtr'	, '⪖'],
746    \ ['eqslantless'	, '⪕'],
747    \ ['equiv'		, '≡'],
748    \ ['exists'		, '∃'],
749    \ ['fallingdotseq'	, '≒'],
750    \ ['flat'		, '♭'],
751    \ ['forall'		, '∀'],
752    \ ['frown'		, '⁔'],
753    \ ['ge'		, '≥'],
754    \ ['geq'		, '≥'],
755    \ ['geqq'		, '≧'],
756    \ ['gets'		, '←'],
757    \ ['gg'		, '⟫'],
758    \ ['gneqq'		, '≩'],
759    \ ['gtrdot'		, '⋗'],
760    \ ['gtreqless'	, '⋛'],
761    \ ['gtrless'	, '≷'],
762    \ ['gtrsim'		, '≳'],
763    \ ['hbar'		, 'ℏ'],
764    \ ['heartsuit'	, '♡'],
765    \ ['hookleftarrow'	, '↩'],
766    \ ['hookrightarrow'	, '↪'],
767    \ ['iiint'		, '∭'],
768    \ ['iint'		, '∬'],
769    \ ['Im'		, 'ℑ'],
770    \ ['imath'		, 'ɩ'],
771    \ ['in'		, '∈'],
772    \ ['infty'		, '∞'],
773    \ ['int'		, '∫'],
774    \ ['lceil'		, '⌈'],
775    \ ['ldots'		, '…'],
776    \ ['le'		, '≤'],
777    \ ['leadsto'	, '↝'],
778    \ ['left('		, '('],
779    \ ['left\['		, '['],
780    \ ['left\\{'	, '{'],
781    \ ['leftarrow'	, '⟵'],
782    \ ['Leftarrow'	, '⟸'],
783    \ ['leftarrowtail'	, '↢'],
784    \ ['leftharpoondown', '↽'],
785    \ ['leftharpoonup'	, '↼'],
786    \ ['leftrightarrow'	, '↔'],
787    \ ['Leftrightarrow'	, '⇔'],
788    \ ['leftrightsquigarrow', '↭'],
789    \ ['leftthreetimes'	, '⋋'],
790    \ ['leq'		, '≤'],
791    \ ['leq'		, '≤'],
792    \ ['leqq'		, '≦'],
793    \ ['lessdot'	, '⋖'],
794    \ ['lesseqgtr'	, '⋚'],
795    \ ['lesssim'	, '≲'],
796    \ ['lfloor'		, '⌊'],
797    \ ['ll'		, '≪'],
798    \ ['lmoustache'     , '╭'],
799    \ ['lneqq'		, '≨'],
800    \ ['ltimes'		, '⋉'],
801    \ ['mapsto'		, '↦'],
802    \ ['measuredangle'	, '∡'],
803    \ ['mid'		, '∣'],
804    \ ['models'		, '╞'],
805    \ ['mp'		, '∓'],
806    \ ['nabla'		, '∇'],
807    \ ['natural'	, '♮'],
808    \ ['ncong'		, '≇'],
809    \ ['ne'		, '≠'],
810    \ ['nearrow'	, '↗'],
811    \ ['neg'		, '¬'],
812    \ ['neq'		, '≠'],
813    \ ['nexists'	, '∄'],
814    \ ['ngeq'		, '≱'],
815    \ ['ngeqq'		, '≱'],
816    \ ['ngtr'		, '≯'],
817    \ ['ni'		, '∋'],
818    \ ['nleftarrow'	, '↚'],
819    \ ['nLeftarrow'	, '⇍'],
820    \ ['nLeftrightarrow', '⇎'],
821    \ ['nleq'		, '≰'],
822    \ ['nleqq'		, '≰'],
823    \ ['nless'		, '≮'],
824    \ ['nmid'		, '∤'],
825    \ ['notin'		, '∉'],
826    \ ['nprec'		, '⊀'],
827    \ ['nrightarrow'	, '↛'],
828    \ ['nRightarrow'	, '⇏'],
829    \ ['nsim'		, '≁'],
830    \ ['nsucc'		, '⊁'],
831    \ ['ntriangleleft'	, '⋪'],
832    \ ['ntrianglelefteq', '⋬'],
833    \ ['ntriangleright'	, '⋫'],
834    \ ['ntrianglerighteq', '⋭'],
835    \ ['nvdash'		, '⊬'],
836    \ ['nvDash'		, '⊭'],
837    \ ['nVdash'		, '⊮'],
838    \ ['nwarrow'	, '↖'],
839    \ ['odot'		, '⊙'],
840    \ ['oint'		, '∮'],
841    \ ['ominus'		, '⊖'],
842    \ ['oplus'		, '⊕'],
843    \ ['oslash'		, '⊘'],
844    \ ['otimes'		, '⊗'],
845    \ ['owns'		, '∋'],
846    \ ['P'	        , '¶'],
847    \ ['parallel'	, '║'],
848    \ ['partial'	, '∂'],
849    \ ['perp'		, '⊥'],
850    \ ['pitchfork'	, '⋔'],
851    \ ['pm'		, '±'],
852    \ ['prec'		, '≺'],
853    \ ['precapprox'	, '⪷'],
854    \ ['preccurlyeq'	, '≼'],
855    \ ['preceq'		, '⪯'],
856    \ ['precnapprox'	, '⪹'],
857    \ ['precneqq'	, '⪵'],
858    \ ['precsim'	, '≾'],
859    \ ['prime'		, '′'],
860    \ ['prod'		, '∏'],
861    \ ['propto'		, '∝'],
862    \ ['rceil'		, '⌉'],
863    \ ['Re'		, 'ℜ'],
864    \ ['rfloor'		, '⌋'],
865    \ ['right)'		, ')'],
866    \ ['right]'		, ']'],
867    \ ['right\\}'	, '}'],
868    \ ['rightarrow'	, '⟶'],
869    \ ['Rightarrow'	, '⟹'],
870    \ ['rightarrowtail'	, '↣'],
871    \ ['rightleftharpoons', '⇌'],
872    \ ['rightsquigarrow', '↝'],
873    \ ['rightthreetimes', '⋌'],
874    \ ['risingdotseq'	, '≓'],
875    \ ['rmoustache'     , '╮'],
876    \ ['rtimes'		, '⋊'],
877    \ ['S'	        , '§'],
878    \ ['searrow'	, '↘'],
879    \ ['setminus'	, '∖'],
880    \ ['sharp'		, '♯'],
881    \ ['sim'		, '∼'],
882    \ ['simeq'		, '⋍'],
883    \ ['smile'		, '‿'],
884    \ ['spadesuit'	, '♠'],
885    \ ['sphericalangle'	, '∢'],
886    \ ['sqcap'		, '⊓'],
887    \ ['sqcup'		, '⊔'],
888    \ ['sqsubset'	, '⊏'],
889    \ ['sqsubseteq'	, '⊑'],
890    \ ['sqsupset'	, '⊐'],
891    \ ['sqsupseteq'	, '⊒'],
892    \ ['star'		, '✫'],
893    \ ['subset'		, '⊂'],
894    \ ['Subset'		, '⋐'],
895    \ ['subseteq'	, '⊆'],
896    \ ['subseteqq'	, '⫅'],
897    \ ['subsetneq'	, '⊊'],
898    \ ['subsetneqq'	, '⫋'],
899    \ ['succ'		, '≻'],
900    \ ['succapprox'	, '⪸'],
901    \ ['succcurlyeq'	, '≽'],
902    \ ['succeq'		, '⪰'],
903    \ ['succnapprox'	, '⪺'],
904    \ ['succneqq'	, '⪶'],
905    \ ['succsim'	, '≿'],
906    \ ['sum'		, '∑'],
907    \ ['supset'		, '⊃'],
908    \ ['Supset'		, '⋑'],
909    \ ['supseteq'	, '⊇'],
910    \ ['supseteqq'	, '⫆'],
911    \ ['supsetneq'	, '⊋'],
912    \ ['supsetneqq'	, '⫌'],
913    \ ['surd'		, '√'],
914    \ ['swarrow'	, '↙'],
915    \ ['therefore'	, '∴'],
916    \ ['times'		, '×'],
917    \ ['to'		, '→'],
918    \ ['top'		, '⊤'],
919    \ ['triangle'	, '∆'],
920    \ ['triangleleft'	, '⊲'],
921    \ ['trianglelefteq'	, '⊴'],
922    \ ['triangleq'	, '≜'],
923    \ ['triangleright'	, '⊳'],
924    \ ['trianglerighteq', '⊵'],
925    \ ['twoheadleftarrow', '↞'],
926    \ ['twoheadrightarrow', '↠'],
927    \ ['uparrow'	, '↑'],
928    \ ['Uparrow'	, '⇑'],
929    \ ['updownarrow'	, '↕'],
930    \ ['Updownarrow'	, '⇕'],
931    \ ['varnothing'	, '∅'],
932    \ ['vartriangle'	, '∆'],
933    \ ['vdash'		, '⊢'],
934    \ ['vDash'		, '⊨'],
935    \ ['Vdash'		, '⊩'],
936    \ ['vdots'		, '⋮'],
937    \ ['vee'		, '∨'],
938    \ ['veebar'		, '⊻'],
939    \ ['Vvdash'		, '⊪'],
940    \ ['wedge'		, '∧'],
941    \ ['wp'		, '℘'],
942    \ ['wr'		, '≀']]
943"    \ ['jmath'		, 'X']
944"    \ ['uminus'	, 'X']
945"    \ ['uplus'		, 'X']
946  for texmath in s:texMathList
947   if texmath[0] =~ '\w$'
948    exe "syn match texMathSymbol '\\\\".texmath[0]."\\>' contained conceal cchar=".texmath[1]
949   else
950    exe "syn match texMathSymbol '\\\\".texmath[0]."' contained conceal cchar=".texmath[1]
951   endif
952  endfor
953
954  if &ambw == "double"
955   syn match texMathSymbol '\\gg\>'			contained conceal cchar=≫
956   syn match texMathSymbol '\\ll\>'			contained conceal cchar=≪
957  else
958   syn match texMathSymbol '\\gg\>'			contained conceal cchar=⟫
959   syn match texMathSymbol '\\ll\>'			contained conceal cchar=⟪
960  endif
961
962  syn match texMathSymbol '\\hat{a}' contained conceal cchar=â
963  syn match texMathSymbol '\\hat{A}' contained conceal cchar=Â
964  syn match texMathSymbol '\\hat{c}' contained conceal cchar=ĉ
965  syn match texMathSymbol '\\hat{C}' contained conceal cchar=Ĉ
966  syn match texMathSymbol '\\hat{e}' contained conceal cchar=ê
967  syn match texMathSymbol '\\hat{E}' contained conceal cchar=Ê
968  syn match texMathSymbol '\\hat{g}' contained conceal cchar=ĝ
969  syn match texMathSymbol '\\hat{G}' contained conceal cchar=Ĝ
970  syn match texMathSymbol '\\hat{i}' contained conceal cchar=î
971  syn match texMathSymbol '\\hat{I}' contained conceal cchar=Î
972  syn match texMathSymbol '\\hat{o}' contained conceal cchar=ô
973  syn match texMathSymbol '\\hat{O}' contained conceal cchar=Ô
974  syn match texMathSymbol '\\hat{s}' contained conceal cchar=ŝ
975  syn match texMathSymbol '\\hat{S}' contained conceal cchar=Ŝ
976  syn match texMathSymbol '\\hat{u}' contained conceal cchar=û
977  syn match texMathSymbol '\\hat{U}' contained conceal cchar=Û
978  syn match texMathSymbol '\\hat{w}' contained conceal cchar=ŵ
979  syn match texMathSymbol '\\hat{W}' contained conceal cchar=Ŵ
980  syn match texMathSymbol '\\hat{y}' contained conceal cchar=ŷ
981  syn match texMathSymbol '\\hat{Y}' contained conceal cchar=Ŷ
982 endif
983
984 " Greek {{{2
985 if s:tex_conceal =~ 'g'
986  fun! s:Greek(group,pat,cchar)
987    exe 'syn match '.a:group." '".a:pat."' contained conceal cchar=".a:cchar
988  endfun
989  call s:Greek('texGreek','\\alpha\>'		,'α')
990  call s:Greek('texGreek','\\beta\>'		,'β')
991  call s:Greek('texGreek','\\gamma\>'		,'γ')
992  call s:Greek('texGreek','\\delta\>'		,'δ')
993  call s:Greek('texGreek','\\epsilon\>'		,'ϵ')
994  call s:Greek('texGreek','\\varepsilon\>'	,'ε')
995  call s:Greek('texGreek','\\zeta\>'		,'ζ')
996  call s:Greek('texGreek','\\eta\>'		,'η')
997  call s:Greek('texGreek','\\theta\>'		,'θ')
998  call s:Greek('texGreek','\\vartheta\>'		,'ϑ')
999  call s:Greek('texGreek','\\kappa\>'		,'κ')
1000  call s:Greek('texGreek','\\lambda\>'		,'λ')
1001  call s:Greek('texGreek','\\mu\>'		,'μ')
1002  call s:Greek('texGreek','\\nu\>'		,'ν')
1003  call s:Greek('texGreek','\\xi\>'		,'ξ')
1004  call s:Greek('texGreek','\\pi\>'		,'π')
1005  call s:Greek('texGreek','\\varpi\>'		,'ϖ')
1006  call s:Greek('texGreek','\\rho\>'		,'ρ')
1007  call s:Greek('texGreek','\\varrho\>'		,'ϱ')
1008  call s:Greek('texGreek','\\sigma\>'		,'σ')
1009  call s:Greek('texGreek','\\varsigma\>'		,'ς')
1010  call s:Greek('texGreek','\\tau\>'		,'τ')
1011  call s:Greek('texGreek','\\upsilon\>'		,'υ')
1012  call s:Greek('texGreek','\\phi\>'		,'φ')
1013  call s:Greek('texGreek','\\varphi\>'		,'ϕ')
1014  call s:Greek('texGreek','\\chi\>'		,'χ')
1015  call s:Greek('texGreek','\\psi\>'		,'ψ')
1016  call s:Greek('texGreek','\\omega\>'		,'ω')
1017  call s:Greek('texGreek','\\Gamma\>'		,'Γ')
1018  call s:Greek('texGreek','\\Delta\>'		,'Δ')
1019  call s:Greek('texGreek','\\Theta\>'		,'Θ')
1020  call s:Greek('texGreek','\\Lambda\>'		,'Λ')
1021  call s:Greek('texGreek','\\Xi\>'		,'Χ')
1022  call s:Greek('texGreek','\\Pi\>'		,'Π')
1023  call s:Greek('texGreek','\\Sigma\>'		,'Σ')
1024  call s:Greek('texGreek','\\Upsilon\>'		,'Υ')
1025  call s:Greek('texGreek','\\Phi\>'		,'Φ')
1026  call s:Greek('texGreek','\\Psi\>'		,'Ψ')
1027  call s:Greek('texGreek','\\Omega\>'		,'Ω')
1028  delfun s:Greek
1029 endif
1030
1031 " Superscripts/Subscripts {{{2
1032 if s:tex_conceal =~ 's'
1033  if s:tex_fast =~ 's'
1034   syn region texSuperscript	matchgroup=Delimiter start='\^{'	skip="\\\\\|\\[{}]" end='}'	contained concealends contains=texSpecialChar,texSuperscripts,texStatement,texSubscript,texSuperscript,texMathMatcher
1035   syn region texSubscript	matchgroup=Delimiter start='_{'		skip="\\\\\|\\[{}]" end='}'	contained concealends contains=texSpecialChar,texSubscripts,texStatement,texSubscript,texSuperscript,texMathMatcher
1036  endif
1037  fun! s:SuperSub(group,leader,pat,cchar)
1038    exe 'syn match '.a:group." '".a:leader.a:pat."' contained conceal cchar=".a:cchar
1039    exe 'syn match '.a:group."s '".a:pat."' contained conceal cchar=".a:cchar.' nextgroup='.a:group.'s'
1040  endfun
1041  call s:SuperSub('texSuperscript','\^','0','⁰')
1042  call s:SuperSub('texSuperscript','\^','1','¹')
1043  call s:SuperSub('texSuperscript','\^','2','²')
1044  call s:SuperSub('texSuperscript','\^','3','³')
1045  call s:SuperSub('texSuperscript','\^','4','⁴')
1046  call s:SuperSub('texSuperscript','\^','5','⁵')
1047  call s:SuperSub('texSuperscript','\^','6','⁶')
1048  call s:SuperSub('texSuperscript','\^','7','⁷')
1049  call s:SuperSub('texSuperscript','\^','8','⁸')
1050  call s:SuperSub('texSuperscript','\^','9','⁹')
1051  call s:SuperSub('texSuperscript','\^','a','ᵃ')
1052  call s:SuperSub('texSuperscript','\^','b','ᵇ')
1053  call s:SuperSub('texSuperscript','\^','c','ᶜ')
1054  call s:SuperSub('texSuperscript','\^','d','ᵈ')
1055  call s:SuperSub('texSuperscript','\^','e','ᵉ')
1056  call s:SuperSub('texSuperscript','\^','f','ᶠ')
1057  call s:SuperSub('texSuperscript','\^','g','ᵍ')
1058  call s:SuperSub('texSuperscript','\^','h','ʰ')
1059  call s:SuperSub('texSuperscript','\^','i','ⁱ')
1060  call s:SuperSub('texSuperscript','\^','j','ʲ')
1061  call s:SuperSub('texSuperscript','\^','k','ᵏ')
1062  call s:SuperSub('texSuperscript','\^','l','ˡ')
1063  call s:SuperSub('texSuperscript','\^','m','ᵐ')
1064  call s:SuperSub('texSuperscript','\^','n','ⁿ')
1065  call s:SuperSub('texSuperscript','\^','o','ᵒ')
1066  call s:SuperSub('texSuperscript','\^','p','ᵖ')
1067  call s:SuperSub('texSuperscript','\^','r','ʳ')
1068  call s:SuperSub('texSuperscript','\^','s','ˢ')
1069  call s:SuperSub('texSuperscript','\^','t','ᵗ')
1070  call s:SuperSub('texSuperscript','\^','u','ᵘ')
1071  call s:SuperSub('texSuperscript','\^','v','ᵛ')
1072  call s:SuperSub('texSuperscript','\^','w','ʷ')
1073  call s:SuperSub('texSuperscript','\^','x','ˣ')
1074  call s:SuperSub('texSuperscript','\^','y','ʸ')
1075  call s:SuperSub('texSuperscript','\^','z','ᶻ')
1076  call s:SuperSub('texSuperscript','\^','A','ᴬ')
1077  call s:SuperSub('texSuperscript','\^','B','ᴮ')
1078  call s:SuperSub('texSuperscript','\^','D','ᴰ')
1079  call s:SuperSub('texSuperscript','\^','E','ᴱ')
1080  call s:SuperSub('texSuperscript','\^','G','ᴳ')
1081  call s:SuperSub('texSuperscript','\^','H','ᴴ')
1082  call s:SuperSub('texSuperscript','\^','I','ᴵ')
1083  call s:SuperSub('texSuperscript','\^','J','ᴶ')
1084  call s:SuperSub('texSuperscript','\^','K','ᴷ')
1085  call s:SuperSub('texSuperscript','\^','L','ᴸ')
1086  call s:SuperSub('texSuperscript','\^','M','ᴹ')
1087  call s:SuperSub('texSuperscript','\^','N','ᴺ')
1088  call s:SuperSub('texSuperscript','\^','O','ᴼ')
1089  call s:SuperSub('texSuperscript','\^','P','ᴾ')
1090  call s:SuperSub('texSuperscript','\^','R','ᴿ')
1091  call s:SuperSub('texSuperscript','\^','T','ᵀ')
1092  call s:SuperSub('texSuperscript','\^','U','ᵁ')
1093  call s:SuperSub('texSuperscript','\^','W','ᵂ')
1094  call s:SuperSub('texSuperscript','\^',',','︐')
1095  call s:SuperSub('texSuperscript','\^',':','︓')
1096  call s:SuperSub('texSuperscript','\^',';','︔')
1097  call s:SuperSub('texSuperscript','\^','+','⁺')
1098  call s:SuperSub('texSuperscript','\^','-','⁻')
1099  call s:SuperSub('texSuperscript','\^','<','˂')
1100  call s:SuperSub('texSuperscript','\^','>','˃')
1101  call s:SuperSub('texSuperscript','\^','/','ˊ')
1102  call s:SuperSub('texSuperscript','\^','(','⁽')
1103  call s:SuperSub('texSuperscript','\^',')','⁾')
1104  call s:SuperSub('texSuperscript','\^','\.','˙')
1105  call s:SuperSub('texSuperscript','\^','=','˭')
1106  call s:SuperSub('texSubscript','_','0','₀')
1107  call s:SuperSub('texSubscript','_','1','₁')
1108  call s:SuperSub('texSubscript','_','2','₂')
1109  call s:SuperSub('texSubscript','_','3','₃')
1110  call s:SuperSub('texSubscript','_','4','₄')
1111  call s:SuperSub('texSubscript','_','5','₅')
1112  call s:SuperSub('texSubscript','_','6','₆')
1113  call s:SuperSub('texSubscript','_','7','₇')
1114  call s:SuperSub('texSubscript','_','8','₈')
1115  call s:SuperSub('texSubscript','_','9','₉')
1116  call s:SuperSub('texSubscript','_','a','ₐ')
1117  call s:SuperSub('texSubscript','_','e','ₑ')
1118  call s:SuperSub('texSubscript','_','i','ᵢ')
1119  call s:SuperSub('texSubscript','_','o','ₒ')
1120  call s:SuperSub('texSubscript','_','u','ᵤ')
1121  call s:SuperSub('texSubscript','_',',','︐')
1122  call s:SuperSub('texSubscript','_','+','₊')
1123  call s:SuperSub('texSubscript','_','-','₋')
1124  call s:SuperSub('texSubscript','_','/','ˏ')
1125  call s:SuperSub('texSubscript','_','(','₍')
1126  call s:SuperSub('texSubscript','_',')','₎')
1127  call s:SuperSub('texSubscript','_','\.','‸')
1128  call s:SuperSub('texSubscript','_','r','ᵣ')
1129  call s:SuperSub('texSubscript','_','v','ᵥ')
1130  call s:SuperSub('texSubscript','_','x','ₓ')
1131  call s:SuperSub('texSubscript','_','\\beta\>' ,'ᵦ')
1132  call s:SuperSub('texSubscript','_','\\delta\>','ᵨ')
1133  call s:SuperSub('texSubscript','_','\\phi\>'  ,'ᵩ')
1134  call s:SuperSub('texSubscript','_','\\gamma\>','ᵧ')
1135  call s:SuperSub('texSubscript','_','\\chi\>'  ,'ᵪ')
1136  delfun s:SuperSub
1137 endif
1138
1139 " Accented characters: {{{2
1140 if s:tex_conceal =~ 'a'
1141  if b:tex_stylish
1142   syn match texAccent		"\\[bcdvuH][^a-zA-Z@]"me=e-1
1143   syn match texLigature		"\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)[^a-zA-Z@]"me=e-1
1144  else
1145   fun! s:Accents(chr,...)
1146     let i= 1
1147     for accent in ["`","\\'","^",'"','\~','\.',"c","H","k","r","u","v"]
1148      if i > a:0
1149       break
1150      endif
1151      if strlen(a:{i}) == 0 || a:{i} == ' ' || a:{i} == '?'
1152       let i= i + 1
1153       continue
1154      endif
1155      if accent =~ '\a'
1156       exe "syn match texAccent '".'\\'.accent.'\(\s*{'.a:chr.'}\|\s\+'.a:chr.'\)'."' conceal cchar=".a:{i}
1157      else
1158       exe "syn match texAccent '".'\\'.accent.'\s*\({'.a:chr.'}\|'.a:chr.'\)'."' conceal cchar=".a:{i}
1159      endif
1160      let i= i + 1
1161     endfor
1162   endfun
1163   "                  \`  \'  \^  \"  \~  \.  \c  \H  \k  \r  \u  \v
1164   call s:Accents('a','à','á','â','ä','ã','ȧ',' ',' ','ą','å','ă','ă')
1165   call s:Accents('A','À','Á','Â','Ä','Ã','Ȧ',' ',' ','Ą','Å','Ă','Ă')
1166   call s:Accents('c',' ','ć','ĉ',' ',' ','ċ','ç',' ',' ',' ',' ','č')
1167   call s:Accents('C',' ','Ć','Ĉ',' ',' ','Ċ','Ç',' ',' ',' ',' ','Č')
1168   call s:Accents('d',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ď')
1169   call s:Accents('D',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','Ď')
1170   call s:Accents('e','è','é','ê','ë','ẽ','ė','ȩ',' ','ę',' ','ĕ','ě')
1171   call s:Accents('E','È','É','Ê','Ë','Ẽ','Ė','Ȩ',' ','Ę',' ','Ĕ','Ě')
1172   call s:Accents('g',' ','ǵ','ĝ',' ',' ','ġ','ģ',' ',' ',' ','ğ',' ')
1173   call s:Accents('G',' ','Ǵ','Ĝ',' ',' ','Ġ','Ģ',' ',' ',' ','Ğ',' ')
1174   call s:Accents('h',' ',' ','ĥ',' ',' ',' ',' ',' ',' ',' ',' ','ȟ')
1175   call s:Accents('H',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','Ȟ')
1176   call s:Accents('i','ì','í','î','ï','ĩ','į',' ',' ',' ',' ','ĭ',' ')
1177   call s:Accents('I','Ì','Í','Î','Ï','Ĩ','İ',' ',' ',' ',' ','Ĭ',' ')
1178   call s:Accents('J',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ǰ')
1179   call s:Accents('k',' ',' ',' ',' ',' ',' ','ķ',' ',' ',' ',' ',' ')
1180   call s:Accents('K',' ',' ',' ',' ',' ',' ','Ķ',' ',' ',' ',' ',' ')
1181   call s:Accents('l',' ','ĺ','ľ',' ',' ',' ','ļ',' ',' ',' ',' ','ľ')
1182   call s:Accents('L',' ','Ĺ','Ľ',' ',' ',' ','Ļ',' ',' ',' ',' ','Ľ')
1183   call s:Accents('n',' ','ń',' ',' ','ñ',' ','ņ',' ',' ',' ',' ','ň')
1184   call s:Accents('N',' ','Ń',' ',' ','Ñ',' ','Ņ',' ',' ',' ',' ','Ň')
1185   call s:Accents('o','ò','ó','ô','ö','õ','ȯ',' ','ő','ǫ',' ','ŏ',' ')
1186   call s:Accents('O','Ò','Ó','Ô','Ö','Õ','Ȯ',' ','Ő','Ǫ',' ','Ŏ',' ')
1187   call s:Accents('r',' ','ŕ',' ',' ',' ',' ','ŗ',' ',' ',' ',' ','ř')
1188   call s:Accents('R',' ','Ŕ',' ',' ',' ',' ','Ŗ',' ',' ',' ',' ','Ř')
1189   call s:Accents('s',' ','ś','ŝ',' ',' ',' ','ş',' ','ȿ',' ',' ','š')
1190   call s:Accents('S',' ','Ś','Ŝ',' ',' ',' ','Ş',' ',' ',' ',' ','Š')
1191   call s:Accents('t',' ',' ',' ',' ',' ',' ','ţ',' ',' ',' ',' ','ť')
1192   call s:Accents('T',' ',' ',' ',' ',' ',' ','Ţ',' ',' ',' ',' ','Ť')
1193   call s:Accents('u','ù','ú','û','ü','ũ',' ',' ','ű','ų','ů','ŭ','ǔ')
1194   call s:Accents('U','Ù','Ú','Û','Ü','Ũ',' ',' ','Ű','Ų','Ů','Ŭ','Ǔ')
1195   call s:Accents('w',' ',' ','ŵ',' ',' ',' ',' ',' ',' ',' ',' ',' ')
1196   call s:Accents('W',' ',' ','Ŵ',' ',' ',' ',' ',' ',' ',' ',' ',' ')
1197   call s:Accents('y','ỳ','ý','ŷ','ÿ','ỹ',' ',' ',' ',' ',' ',' ',' ')
1198   call s:Accents('Y','Ỳ','Ý','Ŷ','Ÿ','Ỹ',' ',' ',' ',' ',' ',' ',' ')
1199   call s:Accents('z',' ','ź',' ',' ',' ','ż',' ',' ',' ',' ',' ','ž')
1200   call s:Accents('Z',' ','Ź',' ',' ',' ','Ż',' ',' ',' ',' ',' ','Ž')
1201   call s:Accents('\\i','ì','í','î','ï','ĩ','į',' ',' ',' ',' ','ĭ',' ')
1202   "                  \`  \'  \^  \"  \~  \.  \c  \H  \k  \r  \u  \v
1203   delfun s:Accents
1204   syn match texAccent   '\\aa\>'	conceal cchar=å
1205   syn match texAccent   '\\AA\>'	conceal cchar=Å
1206   syn match texAccent	'\\o\>'		conceal cchar=ø
1207   syn match texAccent	'\\O\>'		conceal cchar=Ø
1208   syn match texLigature	'\\AE\>'	conceal cchar=Æ
1209   syn match texLigature	'\\ae\>'	conceal cchar=æ
1210   syn match texLigature	'\\oe\>'	conceal cchar=œ
1211   syn match texLigature	'\\OE\>'	conceal cchar=Œ
1212   syn match texLigature	'\\ss\>'	conceal cchar=ß
1213  endif
1214 endif
1215endif
1216
1217" ---------------------------------------------------------------------
1218" LaTeX synchronization: {{{1
1219syn sync maxlines=200
1220syn sync minlines=50
1221
1222syn  sync match texSyncStop			groupthere NONE		"%stopzone\>"
1223
1224" Synchronization: {{{1
1225" The $..$ and $$..$$ make for impossible sync patterns
1226" (one can't tell if a "$$" starts or stops a math zone by itself)
1227" The following grouptheres coupled with minlines above
1228" help improve the odds of good syncing.
1229if !exists("tex_no_math")
1230 syn sync match texSyncMathZoneA		groupthere NONE		"\\end{abstract}"
1231 syn sync match texSyncMathZoneA		groupthere NONE		"\\end{center}"
1232 syn sync match texSyncMathZoneA		groupthere NONE		"\\end{description}"
1233 syn sync match texSyncMathZoneA		groupthere NONE		"\\end{enumerate}"
1234 syn sync match texSyncMathZoneA		groupthere NONE		"\\end{itemize}"
1235 syn sync match texSyncMathZoneA		groupthere NONE		"\\end{table}"
1236 syn sync match texSyncMathZoneA		groupthere NONE		"\\end{tabular}"
1237 syn sync match texSyncMathZoneA		groupthere NONE		"\\\(sub\)*section\>"
1238endif
1239
1240" ---------------------------------------------------------------------
1241" Highlighting: {{{1
1242if did_tex_syntax_inits == 1
1243 let did_tex_syntax_inits= 2
1244  " TeX highlighting groups which should share similar highlighting
1245  if !exists("s:tex_no_error")
1246   if !exists("g:tex_no_math")
1247    HiLink texBadMath		texError
1248    HiLink texMathDelimBad	texError
1249    HiLink texMathError		texError
1250    if !b:tex_stylish
1251      HiLink texOnlyMath	texError
1252    endif
1253   endif
1254   HiLink texError		Error
1255  endif
1256
1257  hi texBoldStyle		gui=bold	cterm=bold
1258  hi texItalStyle		gui=italic	cterm=italic
1259  hi texBoldItalStyle		gui=bold,italic cterm=bold,italic
1260  hi texItalBoldStyle		gui=bold,italic cterm=bold,italic
1261  HiLink texCite		texRefZone
1262  HiLink texDefCmd		texDef
1263  HiLink texDefName		texDef
1264  HiLink texDocType		texCmdName
1265  HiLink texDocTypeArgs		texCmdArgs
1266  HiLink texInputFileOpt	texCmdArgs
1267  HiLink texInputCurlies	texDelimiter
1268  HiLink texLigature		texSpecialChar
1269  if !exists("tex_no_math")
1270   HiLink texMathDelimSet1	texMathDelim
1271   HiLink texMathDelimSet2	texMathDelim
1272   HiLink texMathDelimKey	texMathDelim
1273   HiLink texMathMatcher	texMath
1274   HiLink texAccent		texStatement
1275   HiLink texGreek		texStatement
1276   HiLink texSuperscript	texStatement
1277   HiLink texSubscript		texStatement
1278   HiLink texSuperscripts 	texSuperscript
1279   HiLink texSubscripts 	texSubscript
1280   HiLink texMathSymbol		texStatement
1281   HiLink texMathZoneV		texMath
1282   HiLink texMathZoneW		texMath
1283   HiLink texMathZoneX		texMath
1284   HiLink texMathZoneY		texMath
1285   HiLink texMathZoneV		texMath
1286   HiLink texMathZoneZ		texMath
1287  endif
1288  HiLink texBeginEnd		texCmdName
1289  HiLink texBeginEndName	texSection
1290  HiLink texSpaceCode		texStatement
1291  HiLink texStyleStatement	texStatement
1292  HiLink texTypeSize		texType
1293  HiLink texTypeStyle		texType
1294
1295   " Basic TeX highlighting groups
1296  HiLink texCmdArgs		Number
1297  HiLink texCmdName		Statement
1298  HiLink texComment		Comment
1299  HiLink texDef			Statement
1300  HiLink texDefParm		Special
1301  HiLink texDelimiter		Delimiter
1302  HiLink texInput		Special
1303  HiLink texInputFile		Special
1304  HiLink texLength		Number
1305  HiLink texMath		Special
1306  HiLink texMathDelim		Statement
1307  HiLink texMathOper		Operator
1308  HiLink texNewCmd		Statement
1309  HiLink texNewEnv		Statement
1310  HiLink texOption		Number
1311  HiLink texRefZone		Special
1312  HiLink texSection		PreCondit
1313  HiLink texSpaceCodeChar	Special
1314  HiLink texSpecialChar		SpecialChar
1315  HiLink texStatement		Statement
1316  HiLink texString		String
1317  HiLink texTodo		Todo
1318  HiLink texType		Type
1319  HiLink texZone		PreCondit
1320
1321  delcommand HiLink
1322endif
1323
1324" Cleanup: {{{1
1325unlet s:extfname
1326let   b:current_syntax = "tex"
1327let &cpo               = s:keepcpo
1328unlet s:keepcpo
1329" vim: ts=8 fdm=marker
1330