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