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