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