xref: /vim-8.2.3635/runtime/syntax/tex.vim (revision c3d2c447)
1" Vim syntax file
2" Language:	TeX
3" Maintainer:	Dr. Charles E. Campbell, Jr. <[email protected]>
4" Last Change:	Aug 04, 2010
5" Version:	55
6" URL:		http://mysite.verizon.net/astronaut/vim/index.html#vimlinks_syntax
7"
8" Notes: {{{1
9"
10" 1. If you have a \begin{verbatim} that appears to overrun its boundaries,
11"    use %stopzone.
12"
13" 2. Run-on equations ($..$ and $$..$$, particularly) can also be stopped
14"    by suitable use of %stopzone.
15"
16" 3. If you have a slow computer, you may wish to modify
17"
18"	syn sync maxlines=200
19"	syn sync minlines=50
20"
21"    to values that are more to your liking.
22"
23" 4. There is no match-syncing for $...$ and $$...$$; hence large
24"    equation blocks constructed that way may exhibit syncing problems.
25"    (there's no difference between begin/end patterns)
26"
27" 5. If you have the variable "g:tex_no_error" defined then none of the
28"    lexical error-checking will be done.
29"
30"    ie. let g:tex_no_error=1
31
32" Version Clears: {{{1
33" For version 5.x: Clear all syntax items
34" For version 6.x: Quit when a syntax file was already loaded
35if version < 600
36  syntax clear
37elseif exists("b:current_syntax")
38  finish
39endif
40scriptencoding utf-8
41
42" Define the default highlighting. {{{1
43" For version 5.7 and earlier: only when not done already
44" For version 5.8 and later: only when an item doesn't have highlighting yet
45if version >= 508 || !exists("did_tex_syntax_inits")
46 let did_tex_syntax_inits = 1
47 if version < 508
48  command -nargs=+ HiLink hi link <args>
49 else
50  command -nargs=+ HiLink hi def link <args>
51 endif
52endif
53if exists("g:tex_tex") && !exists("g:tex_no_error")
54 let g:tex_no_error= 1
55endif
56
57" let user determine which classes of concealment will be supported
58"   a=accents/ligatures  m=math symbols  g=Greek  s=superscripts/subscripts
59if !exists("g:tex_conceal")
60 let s:tex_conceal= 'amgs'
61else
62 let s:tex_conceal= g:tex_conceal
63endif
64
65" Determine whether or not to use "*.sty" mode {{{1
66" The user may override the normal determination by setting
67"   g:tex_stylish to 1      (for    "*.sty" mode)
68"    or to           0 else (normal "*.tex" mode)
69" or on a buffer-by-buffer basis with b:tex_stylish
70let b:extfname=expand("%:e")
71if exists("g:tex_stylish")
72 let b:tex_stylish= g:tex_stylish
73elseif !exists("b:tex_stylish")
74 if b:extfname == "sty" || b:extfname == "cls" || b:extfname == "clo" || b:extfname == "dtx" || b:extfname == "ltx"
75  let b:tex_stylish= 1
76 else
77  let b:tex_stylish= 0
78 endif
79endif
80
81" handle folding {{{1
82if !exists("g:tex_fold_enabled")
83 let g:tex_fold_enabled= 0
84elseif g:tex_fold_enabled && !has("folding")
85 let g:tex_fold_enabled= 0
86 echomsg "Ignoring g:tex_fold_enabled=".g:tex_fold_enabled."; need to re-compile vim for +fold support"
87endif
88if g:tex_fold_enabled && &fdm == "manual"
89 setl fdm=syntax
90endif
91
92" (La)TeX keywords: only use the letters a-zA-Z {{{1
93" but _ is the only one that causes problems.
94if version < 600
95  set isk-=_
96  if b:tex_stylish
97    set isk+=@
98  endif
99else
100  setlocal isk-=_
101  if b:tex_stylish
102    setlocal isk+=@
103  endif
104endif
105
106" Clusters: {{{1
107" --------
108syn cluster texCmdGroup		contains=texCmdBody,texComment,texDefParm,texDelimiter,texDocType,texInput,texLength,texLigature,texMathDelim,texMathOper,texNewCmd,texNewEnv,texRefZone,texSection,texSectionMarker,texSectionName,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle
109if !exists("g:tex_no_error")
110 syn cluster texCmdGroup	add=texMathError
111endif
112syn cluster texEnvGroup		contains=texMatcher,texMathDelim,texSpecialChar,texStatement
113syn 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,texSectionMarker,texSectionZone,texSpaceCode,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,@texMathZones,texTitle,texAbstract
114syn 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
115syn 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
116syn cluster texRefGroup		contains=texMatcher,texComment,texDelimiter
117if !exists("tex_no_math")
118 syn cluster texMathZones	contains=texMathZoneV,texMathZoneW,texMathZoneX,texMathZoneY,texMathZoneZ
119 syn cluster texMatchGroup	add=@texMathZones
120 syn cluster texMathDelimGroup	contains=texMathDelimBad,texMathDelimKey,texMathDelimSet1,texMathDelimSet2
121 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
122 syn cluster texMathZoneGroup	contains=texComment,texDelimiter,texLength,texMathDelim,texMathMatcher,texMathOper,texMathSymbol,texMathText,texRefZone,texSpecialChar,texStatement,texTypeSize,texTypeStyle
123 if !exists("g:tex_no_error")
124  syn cluster texMathMatchGroup	add=texMathError
125  syn cluster texMathZoneGroup	add=texMathError
126 endif
127 syn cluster texMathZoneGroup add=@NoSpell
128 " following used in the \part \chapter \section \subsection \subsubsection
129 " \paragraph \subparagraph \author \title highlighting
130 syn cluster texDocGroup		contains=texPartZone,@texPartGroup
131 syn cluster texPartGroup		contains=texChapterZone,texSectionZone,texParaZone
132 syn cluster texChapterGroup		contains=texSectionZone,texParaZone
133 syn cluster texSectionGroup		contains=texSubSectionZone,texParaZone
134 syn cluster texSubSectionGroup		contains=texSubSubSectionZone,texParaZone
135 syn cluster texSubSubSectionGroup	contains=texParaZone
136 syn cluster texParaGroup		contains=texSubParaZone
137 if has("conceal") && &enc == 'utf-8'
138  syn cluster texMathZoneGroup	add=texGreek,texSuperscript,texSubscript,texMathSymbol
139  syn cluster texMathMatchGroup	add=texGreek,texSuperscript,texSubscript,texMathSymbol
140 endif
141endif
142
143" Try to flag {} and () mismatches: {{{1
144if !exists("g:tex_no_error")
145 syn region texMatcher		matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]"	end="}"		contains=@texMatchGroup,texError
146 syn region texMatcher		matchgroup=Delimiter start="\["				end="]"		contains=@texMatchGroup,texError
147else
148 syn region texMatcher		matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]"	end="}"		contains=@texMatchGroup
149 syn region texMatcher		matchgroup=Delimiter start="\["				end="]"		contains=@texMatchGroup
150endif
151syn region texParen		start="("						end=")"		contains=@texMatchGroup,@Spell
152if !exists("g:tex_no_error")
153 syn match  texError		"[}\])]"
154endif
155if !exists("tex_no_math")
156 if !exists("g:tex_no_error")
157  syn match  texMathError	"}"	contained
158 endif
159 syn region texMathMatcher	matchgroup=Delimiter start="{"  skip="\\\\\|\\}"  end="}" end="%stopzone\>" contained contains=@texMathMatchGroup
160endif
161
162" TeX/LaTeX keywords: {{{1
163" Instead of trying to be All Knowing, I just match \..alphameric..
164" Note that *.tex files may not have "@" in their \commands
165if exists("g:tex_tex") || b:tex_stylish
166  syn match texStatement	"\\[a-zA-Z@]\+"
167else
168  syn match texStatement	"\\\a\+"
169  if !exists("g:tex_no_error")
170   syn match texError		"\\\a*@[a-zA-Z@]*"
171  endif
172endif
173
174" TeX/LaTeX delimiters: {{{1
175syn match texDelimiter		"&"
176syn match texDelimiter		"\\\\"
177
178" Tex/Latex Options: {{{1
179syn match texOption	"[^\\]\zs#\d\+\|^#\d\+"
180
181" texAccent (tnx to Karim Belabas) avoids annoying highlighting for accents: {{{1
182if b:tex_stylish
183  syn match texAccent		"\\[bcdvuH][^a-zA-Z@]"me=e-1
184  syn match texLigature		"\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)[^a-zA-Z@]"me=e-1
185else
186  syn match texAccent		"\\[bcdvuH]\A"me=e-1
187  syn match texLigature		"\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)\A"me=e-1
188endif
189syn match texAccent		"\\[bcdvuH]$"
190syn match texAccent		+\\[=^.\~"`']+
191syn match texAccent		+\\['=t'.c^ud"vb~Hr]{\a}+
192syn match texLigature		"\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)$"
193
194" \begin{}/\end{} section markers: {{{1
195syn match  texSectionMarker	"\\begin\>\|\\end\>" nextgroup=texSectionName
196syn region texSectionName	matchgroup=Delimiter start="{" end="}"  contained	nextgroup=texSectionModifier	contains=texComment
197syn region texSectionModifier	matchgroup=Delimiter start="\[" end="]" contained	contains=texComment
198
199" \documentclass, \documentstyle, \usepackage: {{{1
200syn match  texDocType		"\\documentclass\>\|\\documentstyle\>\|\\usepackage\>"	nextgroup=texSectionName,texDocTypeArgs
201syn region texDocTypeArgs	matchgroup=Delimiter start="\[" end="]"			contained	nextgroup=texSectionName	contains=texComment
202
203" Preamble syntax-based folding support: {{{1
204if g:tex_fold_enabled && has("folding")
205 syn region texPreamble	transparent fold	start='\zs\\documentclass\>' end='\ze\\begin{document}'	contains=texStyle,@texMatchGroup
206endif
207
208" TeX input: {{{1
209syn match texInput		"\\input\s\+[a-zA-Z/.0-9_^]\+"hs=s+7				contains=texStatement
210syn match texInputFile		"\\include\(graphics\|list\)\=\(\[.\{-}\]\)\=\s*{.\{-}}"	contains=texStatement,texInputCurlies,texInputFileOpt
211syn match texInputFile		"\\\(epsfig\|input\|usepackage\)\s*\(\[.*\]\)\={.\{-}}"		contains=texStatement,texInputCurlies,texInputFileOpt
212syn match texInputCurlies	"[{}]"								contained
213syn region texInputFileOpt	matchgroup=Delimiter start="\[" end="\]"			contained	contains=texComment
214
215" Type Styles (LaTeX 2.09): {{{1
216syn match texTypeStyle		"\\rm\>"
217syn match texTypeStyle		"\\em\>"
218syn match texTypeStyle		"\\bf\>"
219syn match texTypeStyle		"\\it\>"
220syn match texTypeStyle		"\\sl\>"
221syn match texTypeStyle		"\\sf\>"
222syn match texTypeStyle		"\\sc\>"
223syn match texTypeStyle		"\\tt\>"
224
225" Type Styles: attributes, commands, families, etc (LaTeX2E): {{{1
226syn match texTypeStyle		"\\textbf\>"
227syn match texTypeStyle		"\\textit\>"
228syn match texTypeStyle		"\\textmd\>"
229syn match texTypeStyle		"\\textrm\>"
230syn match texTypeStyle		"\\textsc\>"
231syn match texTypeStyle		"\\textsf\>"
232syn match texTypeStyle		"\\textsl\>"
233syn match texTypeStyle		"\\texttt\>"
234syn match texTypeStyle		"\\textup\>"
235syn match texTypeStyle		"\\emph\>"
236
237syn match texTypeStyle		"\\mathbb\>"
238syn match texTypeStyle		"\\mathbf\>"
239syn match texTypeStyle		"\\mathcal\>"
240syn match texTypeStyle		"\\mathfrak\>"
241syn match texTypeStyle		"\\mathit\>"
242syn match texTypeStyle		"\\mathnormal\>"
243syn match texTypeStyle		"\\mathrm\>"
244syn match texTypeStyle		"\\mathsf\>"
245syn match texTypeStyle		"\\mathtt\>"
246
247syn match texTypeStyle		"\\rmfamily\>"
248syn match texTypeStyle		"\\sffamily\>"
249syn match texTypeStyle		"\\ttfamily\>"
250
251syn match texTypeStyle		"\\itshape\>"
252syn match texTypeStyle		"\\scshape\>"
253syn match texTypeStyle		"\\slshape\>"
254syn match texTypeStyle		"\\upshape\>"
255
256syn match texTypeStyle		"\\bfseries\>"
257syn match texTypeStyle		"\\mdseries\>"
258
259" Some type sizes: {{{1
260syn match texTypeSize		"\\tiny\>"
261syn match texTypeSize		"\\scriptsize\>"
262syn match texTypeSize		"\\footnotesize\>"
263syn match texTypeSize		"\\small\>"
264syn match texTypeSize		"\\normalsize\>"
265syn match texTypeSize		"\\large\>"
266syn match texTypeSize		"\\Large\>"
267syn match texTypeSize		"\\LARGE\>"
268syn match texTypeSize		"\\huge\>"
269syn match texTypeSize		"\\Huge\>"
270
271" Spacecodes (TeX'isms): {{{1
272" \mathcode`\^^@="2201  \delcode`\(="028300  \sfcode`\)=0 \uccode`X=`X  \lccode`x=`x
273syn match texSpaceCode		"\\\(math\|cat\|del\|lc\|sf\|uc\)code`"me=e-1 nextgroup=texSpaceCodeChar
274syn match texSpaceCodeChar    "`\\\=.\(\^.\)\==\(\d\|\"\x\{1,6}\|`.\)"	contained
275
276" Sections, subsections, etc: {{{1
277if g:tex_fold_enabled && has("folding")
278 syn region texDocZone			matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}'											fold contains=@texFoldGroup,@texDocGroup,@Spell
279 syn region texPartZone			matchgroup=texSection start='\\part\>'			 end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)'								fold contains=@texFoldGroup,@texPartGroup,@Spell
280 syn region texChapterZone		matchgroup=texSection start='\\chapter\>'		 end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)'							fold contains=@texFoldGroup,@texChapterGroup,@Spell
281 syn region texSectionZone		matchgroup=texSection start='\\section\>'		 end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'					fold contains=@texFoldGroup,@texSectionGroup,@Spell
282 syn region texSubSectionZone		matchgroup=texSection start='\\subsection\>'		 end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'				fold contains=@texFoldGroup,@texSubSectionGroup,@Spell
283 syn region texSubSubSectionZone	matchgroup=texSection start='\\subsubsection\>'		 end='\ze\s*\\\%(\%(sub\)\{,2}section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'				fold contains=@texFoldGroup,@texSubSubSectionGroup,@Spell
284 syn region texParaZone			matchgroup=texSection start='\\paragraph\>'		 end='\ze\s*\\\%(paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'			fold contains=@texFoldGroup,@texParaGroup,@Spell
285 syn region texSubParaZone		matchgroup=texSection start='\\subparagraph\>'		 end='\ze\s*\\\%(\%(sub\)\=paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'	fold contains=@texFoldGroup,@Spell
286 syn region texTitle			matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}'													fold contains=@texFoldGroup,@Spell
287 syn region texAbstract			matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}'											fold contains=@texFoldGroup,@Spell
288else
289 syn region texDocZone			matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}'											contains=@texFoldGroup,@texDocGroup,@Spell
290 syn region texPartZone			matchgroup=texSection start='\\part\>'			 end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)'								contains=@texFoldGroup,@texPartGroup,@Spell
291 syn region texChapterZone		matchgroup=texSection start='\\chapter\>'		 end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)'							contains=@texFoldGroup,@texChapterGroup,@Spell
292 syn region texSectionZone		matchgroup=texSection start='\\section\>'		 end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'					contains=@texFoldGroup,@texSectionGroup,@Spell
293 syn region texSubSectionZone		matchgroup=texSection start='\\subsection\>'		 end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'				contains=@texFoldGroup,@texSubSectionGroup,@Spell
294 syn region texSubSubSectionZone	matchgroup=texSection start='\\subsubsection\>'		 end='\ze\s*\\\%(\%(sub\)\{,2}section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'				contains=@texFoldGroup,@texSubSubSectionGroup,@Spell
295 syn region texParaZone			matchgroup=texSection start='\\paragraph\>'		 end='\ze\s*\\\%(paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'			contains=@texFoldGroup,@texParaGroup,@Spell
296 syn region texSubParaZone		matchgroup=texSection start='\\subparagraph\>'		 end='\ze\s*\\\%(\%(sub\)\=paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'	contains=@texFoldGroup,@Spell
297 syn region texTitle			matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}'													contains=@texFoldGroup,@Spell
298 syn region texAbstract			matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}'											contains=@texFoldGroup,@Spell
299endif
300
301" Bad Math (mismatched): {{{1
302if !exists("tex_no_math")
303 syn match texBadMath		"\\end\s*{\s*\(array\|gathered\|bBpvV]matrix\|split\|subequations\|smallmatrix\|xxalignat\)\s*}"
304 syn match texBadMath		"\\end\s*{\s*\(align\|alignat\|displaymath\|displaymath\|eqnarray\|equation\|flalign\|gather\|math\|multline\|xalignat\)\*\=\s*}"
305 syn match texBadMath		"\\[\])]"
306endif
307
308" Math Zones: {{{1
309if !exists("tex_no_math")
310 " TexNewMathZone: function creates a mathzone with the given suffix and mathzone name. {{{2
311 "                 Starred forms are created if starform is true.  Starred
312 "                 forms have syntax group and synchronization groups with a
313 "                 "S" appended.  Handles: cluster, syntax, sync, and HiLink.
314 fun! TexNewMathZone(sfx,mathzone,starform)
315   let grpname  = "texMathZone".a:sfx
316   let syncname = "texSyncMathZone".a:sfx
317   if g:tex_fold_enabled
318    let foldcmd= " fold"
319   else
320    let foldcmd= ""
321   endif
322   exe "syn cluster texMathZones add=".grpname
323   exe 'syn region '.grpname.' start='."'".'\\begin\s*{\s*'.a:mathzone.'\s*}'."'".' end='."'".'\\end\s*{\s*'.a:mathzone.'\s*}'."'".' keepend contains=@texMathZoneGroup'.foldcmd
324   exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
325   exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
326   exe 'hi def link '.grpname.' texMath'
327   if a:starform
328    let grpname  = "texMathZone".a:sfx.'S'
329    let syncname = "texSyncMathZone".a:sfx.'S'
330    exe "syn cluster texMathZones add=".grpname
331    exe 'syn region '.grpname.' start='."'".'\\begin\s*{\s*'.a:mathzone.'\*\s*}'."'".' end='."'".'\\end\s*{\s*'.a:mathzone.'\*\s*}'."'".' keepend contains=@texMathZoneGroup'.foldcmd
332    exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
333    exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
334    exe 'hi def link '.grpname.' texMath'
335   endif
336 endfun
337
338 " Standard Math Zones: {{{2
339 call TexNewMathZone("A","align",1)
340 call TexNewMathZone("B","alignat",1)
341 call TexNewMathZone("C","displaymath",1)
342 call TexNewMathZone("D","eqnarray",1)
343 call TexNewMathZone("E","equation",1)
344 call TexNewMathZone("F","flalign",1)
345 call TexNewMathZone("G","gather",1)
346 call TexNewMathZone("H","math",1)
347 call TexNewMathZone("I","multline",1)
348 call TexNewMathZone("J","subequations",0)
349 call TexNewMathZone("K","xalignat",1)
350 call TexNewMathZone("L","xxalignat",0)
351
352 " Inline Math Zones: {{{2
353 if has("conceal") && &enc == 'utf-8'
354  syn region texMathZoneV	matchgroup=Delimiter start="\\("			matchgroup=Delimiter end="\\)\|%stopzone\>"	keepend concealends contains=@texMathZoneGroup
355  syn region texMathZoneW	matchgroup=Delimiter start="\\\["			matchgroup=Delimiter end="\\]\|%stopzone\>"	keepend concealends contains=@texMathZoneGroup
356  syn region texMathZoneX	matchgroup=Delimiter start="\$" skip="\\\\\|\\\$"	matchgroup=Delimiter end="\$" end="%stopzone\>"		concealends contains=@texMathZoneGroup
357  syn region texMathZoneY	matchgroup=Delimiter start="\$\$" 			matchgroup=Delimiter end="\$\$" end="%stopzone\>"	concealends keepend		contains=@texMathZoneGroup
358 else
359  syn region texMathZoneV	matchgroup=Delimiter start="\\("			matchgroup=Delimiter end="\\)\|%stopzone\>"	keepend contains=@texMathZoneGroup
360  syn region texMathZoneW	matchgroup=Delimiter start="\\\["			matchgroup=Delimiter end="\\]\|%stopzone\>"	keepend contains=@texMathZoneGroup
361  syn region texMathZoneX	matchgroup=Delimiter start="\$" skip="\\\\\|\\\$"	matchgroup=Delimiter end="\$" end="%stopzone\>"	contains=@texMathZoneGroup
362  syn region texMathZoneY	matchgroup=Delimiter start="\$\$" 			matchgroup=Delimiter end="\$\$" end="%stopzone\>"	keepend		contains=@texMathZoneGroup
363 endif
364 syn region texMathZoneZ	matchgroup=texStatement start="\\ensuremath\s*{"	matchgroup=texStatement end="}" end="%stopzone\>"	contains=@texMathZoneGroup
365
366 syn match texMathOper		"[_^=]" contained
367
368 " Text Inside Math Zones: {{{2
369 syn region texMathText matchgroup=texStatement start='\\\(\(inter\)\=text\|mbox\)\s*{'	end='}'	contains=@texFoldGroup,@Spell
370
371 " \left..something.. and \right..something.. support: {{{2
372 syn match   texMathDelimBad	contained		"\S"
373 if has("conceal") && &enc == 'utf-8' && s:tex_conceal =~ 'm'
374  syn match   texMathDelim	contained		"\\left\\{\>"	skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad contains=texMathSymbol cchar={
375  syn match   texMathDelim	contained		"\\right\\}\>"	skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad contains=texMathSymbol cchar=}
376 else
377  syn match   texMathDelim	contained		"\\\(left\|right\)\>"	skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad
378 endif
379 syn match   texMathDelim	contained		"\\\([bB]igg\=[lr]\)\>"			skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad
380 syn match   texMathDelim	contained		"\\\(left\|right\)arrow\>\|\<\([aA]rrow\|brace\)\=vert\>"
381 syn match   texMathDelim	contained		"\\lefteqn\>"
382 syn match   texMathDelimSet2	contained	"\\"		nextgroup=texMathDelimKey,texMathDelimBad
383 syn match   texMathDelimSet1	contained	"[<>()[\]|/.]\|\\[{}|]"
384 syn keyword texMathDelimKey	contained	backslash       lceil           lVert           rgroup          uparrow
385 syn keyword texMathDelimKey	contained	downarrow       lfloor          rangle          rmoustache      Uparrow
386 syn keyword texMathDelimKey	contained	Downarrow       lgroup          rbrace          rvert           updownarrow
387 syn keyword texMathDelimKey	contained	langle          lmoustache      rceil           rVert           Updownarrow
388 syn keyword texMathDelimKey	contained	lbrace          lvert           rfloor
389endif
390
391" Special TeX characters  ( \$ \& \% \# \{ \} \_ \S \P ) : {{{1
392syn match texSpecialChar	"\\[$&%#{}_]"
393if b:tex_stylish
394  syn match texSpecialChar	"\\[SP@][^a-zA-Z@]"me=e-1
395else
396  syn match texSpecialChar	"\\[SP@]\A"me=e-1
397endif
398syn match texSpecialChar	"\\\\"
399if !exists("tex_no_math")
400 syn match texOnlyMath		"[_^]"
401endif
402syn match texSpecialChar	"\^\^[0-9a-f]\{2}\|\^\^\S"
403
404" Comments: {{{1
405"    Normal TeX LaTeX     :   %....
406"    Documented TeX Format:  ^^A...	-and-	leading %s (only)
407if !exists("g:tex_comment_nospell") || !g:tex_comment_nospell
408 syn cluster texCommentGroup	contains=texTodo,@Spell
409else
410 syn cluster texCommentGroup	contains=texTodo,@NoSpell
411endif
412syn case ignore
413syn keyword texTodo		contained		combak	fixme	todo	xxx
414syn case match
415if b:extfname == "dtx"
416  syn match texComment		"\^\^A.*$"	contains=@texCommentGroup
417  syn match texComment		"^%\+"		contains=@texCommentGroup
418else
419  if g:tex_fold_enabled
420   " allows syntax-folding of 2 or more contiguous comment lines
421   " single-line comments are not folded
422   syn match  texComment	"%.*$"		contains=@texCommentGroup
423   syn region texComment	start="^\zs\s*%.*\_s*%"	skip="^\s*%"	end='^\ze\s*[^%]' fold
424  else
425   syn match texComment		"%.*$"		contains=@texCommentGroup
426  endif
427endif
428
429" Separate lines used for verb` and verb# so that the end conditions {{{1
430" will appropriately terminate.
431" If g:tex_verbspell exists, then verbatim texZones will permit spellchecking there.
432if exists("g:tex_verbspell") && g:tex_verbspell
433 syn region texZone		start="\\begin{[vV]erbatim}"		end="\\end{[vV]erbatim}\|%stopzone\>"	contains=@Spell
434 " listings package:
435 syn region texZone		start="\\begin{lstlisting}"		end="\\end{lstlisting}\|%stopzone\>"	contains=@Spell
436 " moreverb package:
437 syn region texZone		start="\\begin{verbatimtab}"		end="\\end{verbatimtab}\|%stopzone\>"	contains=@Spell
438 syn region texZone		start="\\begin{verbatimwrite}"		end="\\end{verbatimwrite}\|%stopzone\>"	contains=@Spell
439 syn region texZone		start="\\begin{boxedverbatim}"		end="\\end{boxedverbatim}\|%stopzone\>"	contains=@Spell
440 if version < 600
441  syn region texZone		start="\\verb\*\=`"			end="`\|%stopzone\>"			contains=@Spell
442  syn region texZone		start="\\verb\*\=#"			end="#\|%stopzone\>"			contains=@Spell
443 else
444   if b:tex_stylish
445    syn region texZone		start="\\verb\*\=\z([^\ta-zA-Z@]\)"	end="\z1\|%stopzone\>"			contains=@Spell
446   else
447    syn region texZone		start="\\verb\*\=\z([^\ta-zA-Z]\)"	end="\z1\|%stopzone\>"			contains=@Spell
448   endif
449 endif
450else
451 syn region texZone		start="\\begin{[vV]erbatim}"		end="\\end{[vV]erbatim}\|%stopzone\>"
452 " listings package:
453 syn region texZone		start="\\begin{lstlisting}"		end="\\end{lstlisting}\|%stopzone\>"
454 " moreverb package:
455 syn region texZone		start="\\begin{verbatimtab}"		end="\\end{verbatimtab}\|%stopzone\>"
456 syn region texZone		start="\\begin{verbatimwrite}"		end="\\end{verbatimwrite}\|%stopzone\>"
457 syn region texZone		start="\\begin{boxedverbatim}"		end="\\end{boxedverbatim}\|%stopzone\>"
458 if version < 600
459  syn region texZone		start="\\verb\*\=`"			end="`\|%stopzone\>"
460  syn region texZone		start="\\verb\*\=#"			end="#\|%stopzone\>"
461 else
462   if b:tex_stylish
463     syn region texZone		start="\\verb\*\=\z([^\ta-zA-Z@]\)"	end="\z1\|%stopzone\>"
464   else
465     syn region texZone		start="\\verb\*\=\z([^\ta-zA-Z]\)"	end="\z1\|%stopzone\>"
466   endif
467 endif
468endif
469
470" Tex Reference Zones: {{{1
471syn region texZone		matchgroup=texStatement start="@samp{"			end="}\|%stopzone\>"	contains=@texRefGroup
472syn region texRefZone		matchgroup=texStatement start="\\nocite{"		end="}\|%stopzone\>"	contains=@texRefGroup
473syn region texRefZone		matchgroup=texStatement start="\\bibliography{"		end="}\|%stopzone\>"	contains=@texRefGroup
474syn region texRefZone		matchgroup=texStatement start="\\label{"		end="}\|%stopzone\>"	contains=@texRefGroup
475syn region texRefZone		matchgroup=texStatement start="\\\(page\|eq\)ref{"	end="}\|%stopzone\>"	contains=@texRefGroup
476syn region texRefZone		matchgroup=texStatement start="\\v\=ref{"		end="}\|%stopzone\>"	contains=@texRefGroup
477syn match  texRefZone		'\\cite\%([tp]\*\=\)\=' nextgroup=texRefOption,texCite
478syn region texRefOption	contained	matchgroup=Delimiter start='\[' end=']'		contains=@texRefGroup,texRefZone	nextgroup=texRefOption,texCite
479syn region texCite	contained	matchgroup=Delimiter start='{' end='}'		contains=@texRefGroup,texRefZone,texCite
480
481" Handle newcommand, newenvironment : {{{1
482syn match  texNewCmd				"\\newcommand\>"			nextgroup=texCmdName skipwhite skipnl
483syn region texCmdName contained matchgroup=Delimiter start="{"rs=s+1  end="}"		nextgroup=texCmdArgs,texCmdBody skipwhite skipnl
484syn region texCmdArgs contained matchgroup=Delimiter start="\["rs=s+1 end="]"		nextgroup=texCmdBody skipwhite skipnl
485syn region texCmdBody contained matchgroup=Delimiter start="{"rs=s+1 skip="\\\\\|\\[{}]"	matchgroup=Delimiter end="}" contains=@texCmdGroup
486syn match  texNewEnv				"\\newenvironment\>"			nextgroup=texEnvName skipwhite skipnl
487syn region texEnvName contained matchgroup=Delimiter start="{"rs=s+1  end="}"		nextgroup=texEnvBgn skipwhite skipnl
488syn region texEnvBgn  contained matchgroup=Delimiter start="{"rs=s+1  end="}"		nextgroup=texEnvEnd skipwhite skipnl contains=@texEnvGroup
489syn region texEnvEnd  contained matchgroup=Delimiter start="{"rs=s+1  end="}"		skipwhite skipnl contains=@texEnvGroup
490
491" Definitions/Commands: {{{1
492syn match texDefCmd				"\\def\>"				nextgroup=texDefName skipwhite skipnl
493if b:tex_stylish
494  syn match texDefName contained		"\\[a-zA-Z@]\+"				nextgroup=texDefParms,texCmdBody skipwhite skipnl
495  syn match texDefName contained		"\\[^a-zA-Z@]"				nextgroup=texDefParms,texCmdBody skipwhite skipnl
496else
497  syn match texDefName contained		"\\\a\+"				nextgroup=texDefParms,texCmdBody skipwhite skipnl
498  syn match texDefName contained		"\\\A"					nextgroup=texDefParms,texCmdBody skipwhite skipnl
499endif
500syn match texDefParms  contained		"#[^{]*"	contains=texDefParm	nextgroup=texCmdBody skipwhite skipnl
501syn match  texDefParm  contained		"#\d\+"
502
503" TeX Lengths: {{{1
504syn match  texLength		"\<\d\+\([.,]\d\+\)\=\s*\(true\)\=\s*\(bp\|cc\|cm\|dd\|em\|ex\|in\|mm\|pc\|pt\|sp\)\>"
505
506" TeX String Delimiters: {{{1
507syn match texString		"\(``\|''\|,,\)"
508
509" makeatletter -- makeatother sections
510if !exists("g:tex_no_error")
511 syn region texStyle			matchgroup=texStatement start='\\makeatletter' end='\\makeatother'	contains=@texStyleGroup contained
512 syn match  texStyleStatement		"\\[a-zA-Z@]\+"	contained
513 syn region texStyleMatcher		matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]"	end="}"		contains=@texStyleGroup,texError	contained
514 syn region texStyleMatcher		matchgroup=Delimiter start="\["				end="]"		contains=@texStyleGroup,texError	contained
515endif
516
517" Conceal mode support (supports set cole=1) {{{1
518if has("conceal") && &enc == 'utf-8'
519
520 " Math Symbols {{{2
521 if s:tex_conceal =~ 'm'
522  syn match texMathSymbol '\\angle\>'			contained conceal cchar=∠
523  syn match texMathSymbol '\\approx\>'			contained conceal cchar=≈
524  syn match texMathSymbol '\\ast\>'			contained conceal cchar=∗
525  syn match texMathSymbol '\\asymp\>'			contained conceal cchar=≍
526  syn match texMathSymbol '\\backepsilon\>'		contained conceal cchar=∍
527  syn match texMathSymbol '\\backsimeq\>'		contained conceal cchar=≃
528  syn match texMathSymbol '\\barwedge\>'		contained conceal cchar=⊼
529  syn match texMathSymbol '\\because\>'			contained conceal cchar=∵
530  syn match texMathSymbol '\\between\>'			contained conceal cchar=≬
531  syn match texMathSymbol '\\bigcap\>'			contained conceal cchar=∩
532  syn match texMathSymbol '\\bigcup\>'			contained conceal cchar=∪
533  syn match texMathSymbol '\\bigodot\>'			contained conceal cchar=⊙
534  syn match texMathSymbol '\\bigoplus\>'		contained conceal cchar=⊕
535  syn match texMathSymbol '\\bigotimes\>'		contained conceal cchar=⊗
536  syn match texMathSymbol '\\bigsqcup\>'		contained conceal cchar=⊔
537  syn match texMathSymbol '\\bigtriangledown\>'		contained conceal cchar=∇
538  syn match texMathSymbol '\\bigvee\>'			contained conceal cchar=⋁
539  syn match texMathSymbol '\\bigwedge\>'		contained conceal cchar=⋀
540  syn match texMathSymbol '\\blacksquare\>'		contained conceal cchar=∎
541  syn match texMathSymbol '\\bot\>'			contained conceal cchar=⊥
542  syn match texMathSymbol '\\boxdot\>'			contained conceal cchar=⊡
543  syn match texMathSymbol '\\boxminus\>'		contained conceal cchar=⊟
544  syn match texMathSymbol '\\boxplus\>'			contained conceal cchar=⊞
545  syn match texMathSymbol '\\boxtimes\>'		contained conceal cchar=⊠
546  syn match texMathSymbol '\\bumpeq\>'			contained conceal cchar=≏
547  syn match texMathSymbol '\\Bumpeq\>'			contained conceal cchar=≎
548  syn match texMathSymbol '\\cap\>'			contained conceal cchar=∩
549  syn match texMathSymbol '\\Cap\>'			contained conceal cchar=⋒
550  syn match texMathSymbol '\\cdot\>'			contained conceal cchar=·
551  syn match texMathSymbol '\\cdots\>'			contained conceal cchar=⋯
552  syn match texMathSymbol '\\circ\>'			contained conceal cchar=∘
553  syn match texMathSymbol '\\circeq\>'			contained conceal cchar=≗
554  syn match texMathSymbol '\\circledast\>'		contained conceal cchar=⊛
555  syn match texMathSymbol '\\circledcirc\>'		contained conceal cchar=⊚
556  syn match texMathSymbol '\\complement\>'		contained conceal cchar=∁
557  syn match texMathSymbol '\\cong\>'			contained conceal cchar=≅
558  syn match texMathSymbol '\\coprod\>'			contained conceal cchar=∐
559  syn match texMathSymbol '\\cup\>'			contained conceal cchar=∪
560  syn match texMathSymbol '\\Cup\>'			contained conceal cchar=⋓
561  syn match texMathSymbol '\\curlyeqprec\>'		contained conceal cchar=⋞
562  syn match texMathSymbol '\\curlyeqsucc\>'		contained conceal cchar=⋟
563  syn match texMathSymbol '\\curlyvee\>'		contained conceal cchar=⋎
564  syn match texMathSymbol '\\curlywedge\>'		contained conceal cchar=⋏
565  syn match texMathSymbol '\\dashv\>'			contained conceal cchar=⊣
566  syn match texMathSymbol '\\diamond\>'			contained conceal cchar=⋄
567  syn match texMathSymbol '\\div\>'			contained conceal cchar=÷
568  syn match texMathSymbol '\\doteq\>'			contained conceal cchar=≐
569  syn match texMathSymbol '\\doteqdot\>'		contained conceal cchar=≑
570  syn match texMathSymbol '\\dotplus\>'			contained conceal cchar=∔
571  syn match texMathSymbol '\\dotsb\>'			contained conceal cchar=⋯
572  syn match texMathSymbol '\\dotsc\>'			contained conceal cchar=…
573  syn match texMathSymbol '\\dots\>'			contained conceal cchar=…
574  syn match texMathSymbol '\\dotsi\>'			contained conceal cchar=⋯
575  syn match texMathSymbol '\\dotso\>'			contained conceal cchar=…
576  syn match texMathSymbol '\\doublebarwedge\>'		contained conceal cchar=⩞
577  syn match texMathSymbol '\\emptyset\>'		contained conceal cchar=∅
578  syn match texMathSymbol '\\eqcirc\>'			contained conceal cchar=≖
579  syn match texMathSymbol '\\eqsim\>'			contained conceal cchar=≂
580  syn match texMathSymbol '\\eqslantgtr\>'		contained conceal cchar=⪖
581  syn match texMathSymbol '\\eqslantless\>'		contained conceal cchar=⪕
582  syn match texMathSymbol '\\equiv\>'			contained conceal cchar=≡
583  syn match texMathSymbol '\\exists\>'			contained conceal cchar=∃
584  syn match texMathSymbol '\\fallingdotseq\>'		contained conceal cchar=≒
585  syn match texMathSymbol '\\forall\>'			contained conceal cchar=∀
586  syn match texMathSymbol '\\ge\>'			contained conceal cchar=≥
587  syn match texMathSymbol '\\geq\>'			contained conceal cchar=≥
588  syn match texMathSymbol '\\geqq\>'			contained conceal cchar=≧
589  syn match texMathSymbol '\\gneqq\>'			contained conceal cchar=≩
590  syn match texMathSymbol '\\gtrdot\>'			contained conceal cchar=⋗
591  syn match texMathSymbol '\\gtreqless\>'		contained conceal cchar=⋛
592  syn match texMathSymbol '\\gtrless\>'			contained conceal cchar=≷
593  syn match texMathSymbol '\\gtrsim\>'			contained conceal cchar=≳
594  syn match texMathSymbol '\\iiint\>'			contained conceal cchar=∭
595  syn match texMathSymbol '\\iint\>'			contained conceal cchar=∬
596  syn match texMathSymbol '\\Im\>'			contained conceal cchar=ℑ
597  syn match texMathSymbol '\\in\>'			contained conceal cchar=∈
598  syn match texMathSymbol '\\infty\>'			contained conceal cchar=∞
599  syn match texMathSymbol '\\int\>'			contained conceal cchar=∫
600  syn match texMathSymbol '\\lceil\>'			contained conceal cchar=⌈
601  syn match texMathSymbol '\\ldots\>'			contained conceal cchar=…
602  syn match texMathSymbol '\\le\>'			contained conceal cchar=≤
603  syn match texMathSymbol '\\leftarrow\>'		contained conceal cchar=⟵
604  syn match texMathSymbol '\\Leftarrow\>'		contained conceal cchar=⟸
605  syn match texMathSymbol '\\left('			contained conceal cchar=(
606  syn match texMathSymbol '\\left\['			contained conceal cchar=[
607  syn match texMathSymbol '\\left\\{'			contained conceal cchar={
608  syn match texMathSymbol '\\leftthreetimes\>'		contained conceal cchar=⋋
609  syn match texMathSymbol '\\leq\>'			contained conceal cchar=≤
610  syn match texMathSymbol '\\leqq\>'			contained conceal cchar=≦
611  syn match texMathSymbol '\\lessdot\>'			contained conceal cchar=⋖
612  syn match texMathSymbol '\\lesseqgtr\>'		contained conceal cchar=⋚
613  syn match texMathSymbol '\\lesssim\>'			contained conceal cchar=≲
614  syn match texMathSymbol '\\lfloor\>'			contained conceal cchar=⌊
615  syn match texMathSymbol '\\lneqq\>'			contained conceal cchar=≨
616  syn match texMathSymbol '\\ltimes\>'			contained conceal cchar=⋉
617  syn match texMathSymbol '\\mapsto\>'			contained conceal cchar=↦
618  syn match texMathSymbol '\\measuredangle\>'		contained conceal cchar=∡
619  syn match texMathSymbol '\\mid\>'			contained conceal cchar=∣
620  syn match texMathSymbol '\\mp\>'			contained conceal cchar=∓
621  syn match texMathSymbol '\\nabla\>'			contained conceal cchar=∇
622  syn match texMathSymbol '\\ncong\>'			contained conceal cchar=≇
623  syn match texMathSymbol '\\ne\>'			contained conceal cchar=≠
624  syn match texMathSymbol '\\neg\>'			contained conceal cchar=¬
625  syn match texMathSymbol '\\neq\>'			contained conceal cchar=≠
626  syn match texMathSymbol '\\nexists\>'			contained conceal cchar=∄
627  syn match texMathSymbol '\\ngeq\>'			contained conceal cchar=≱
628  syn match texMathSymbol '\\ngeqq\>'			contained conceal cchar=≱
629  syn match texMathSymbol '\\ngtr\>'			contained conceal cchar=≯
630  syn match texMathSymbol '\\ni\>'			contained conceal cchar=∋
631  syn match texMathSymbol '\\nleq\>'			contained conceal cchar=≰
632  syn match texMathSymbol '\\nleqq\>'			contained conceal cchar=≰
633  syn match texMathSymbol '\\nless\>'			contained conceal cchar=≮
634  syn match texMathSymbol '\\nmid\>'			contained conceal cchar=∤
635  syn match texMathSymbol '\\notin\>'			contained conceal cchar=∉
636  syn match texMathSymbol '\\nprec\>'			contained conceal cchar=⊀
637  syn match texMathSymbol '\\nsim\>'			contained conceal cchar=≁
638  syn match texMathSymbol '\\nsucc\>'			contained conceal cchar=⊁
639  syn match texMathSymbol '\\ntriangleleft\>'		contained conceal cchar=⋪
640  syn match texMathSymbol '\\ntrianglelefteq\>'		contained conceal cchar=⋬
641  syn match texMathSymbol '\\ntriangleright\>'		contained conceal cchar=⋫
642  syn match texMathSymbol '\\ntrianglerighteq\>'	contained conceal cchar=⋭
643  syn match texMathSymbol '\\nvdash\>'			contained conceal cchar=⊬
644  syn match texMathSymbol '\\nvDash\>'			contained conceal cchar=⊭
645  syn match texMathSymbol '\\nVdash\>'			contained conceal cchar=⊮
646  syn match texMathSymbol '\\odot\>'			contained conceal cchar=⊙
647  syn match texMathSymbol '\\oint\>'			contained conceal cchar=∮
648  syn match texMathSymbol '\\ominus\>'			contained conceal cchar=⊖
649  syn match texMathSymbol '\\oplus\>'			contained conceal cchar=⊕
650  syn match texMathSymbol '\\oslash\>'			contained conceal cchar=⊘
651  syn match texMathSymbol '\\otimes\>'			contained conceal cchar=⊗
652  syn match texMathSymbol '\\owns\>'			contained conceal cchar=∋
653  syn match texMathSymbol '\\partial\>'			contained conceal cchar=∂
654  syn match texMathSymbol '\\perp\>'			contained conceal cchar=⊥
655  syn match texMathSymbol '\\pitchfork\>'		contained conceal cchar=⋔
656  syn match texMathSymbol '\\pm\>'			contained conceal cchar=±
657  syn match texMathSymbol '\\precapprox\>'		contained conceal cchar=⪷
658  syn match texMathSymbol '\\prec\>'			contained conceal cchar=≺
659  syn match texMathSymbol '\\preccurlyeq\>'		contained conceal cchar=≼
660  syn match texMathSymbol '\\preceq\>'			contained conceal cchar=⪯
661  syn match texMathSymbol '\\precnapprox\>'		contained conceal cchar=⪹
662  syn match texMathSymbol '\\precneqq\>'		contained conceal cchar=⪵
663  syn match texMathSymbol '\\precsim\>'			contained conceal cchar=≾
664  syn match texMathSymbol '\\prod\>'			contained conceal cchar=∏
665  syn match texMathSymbol '\\propto\>'			contained conceal cchar=∝
666  syn match texMathSymbol '\\rceil\>'			contained conceal cchar=⌉
667  syn match texMathSymbol '\\Re\>'			contained conceal cchar=ℜ
668  syn match texMathSymbol '\\rfloor\>'			contained conceal cchar=⌋
669  syn match texMathSymbol '\\rightarrow\>'		contained conceal cchar=⟶
670  syn match texMathSymbol '\\Rightarrow\>'		contained conceal cchar=⟹
671  syn match texMathSymbol '\\right)'			contained conceal cchar=)
672  syn match texMathSymbol '\\right]'			contained conceal cchar=]
673  syn match texMathSymbol '\\right\\}'			contained conceal cchar=}
674  syn match texMathSymbol '\\rightthreetimes\>'		contained conceal cchar=⋌
675  syn match texMathSymbol '\\risingdotseq\>'		contained conceal cchar=≓
676  syn match texMathSymbol '\\rtimes\>'			contained conceal cchar=⋊
677  syn match texMathSymbol '\\setminus\>'		contained conceal cchar=∖
678  syn match texMathSymbol '\\sim\>'			contained conceal cchar=∼
679  syn match texMathSymbol '\\sphericalangle\>'		contained conceal cchar=∢
680  syn match texMathSymbol '\\sqcap\>'			contained conceal cchar=⊓
681  syn match texMathSymbol '\\sqcup\>'			contained conceal cchar=⊔
682  syn match texMathSymbol '\\sqsubset\>'		contained conceal cchar=⊏
683  syn match texMathSymbol '\\sqsubseteq\>'		contained conceal cchar=⊑
684  syn match texMathSymbol '\\sqsupset\>'		contained conceal cchar=⊐
685  syn match texMathSymbol '\\sqsupseteq\>'		contained conceal cchar=⊒
686  syn match texMathSymbol '\\subset\>'			contained conceal cchar=⊂
687  syn match texMathSymbol '\\Subset\>'			contained conceal cchar=⋐
688  syn match texMathSymbol '\\subseteq\>'		contained conceal cchar=⊆
689  syn match texMathSymbol '\\subseteqq\>'		contained conceal cchar=⫅
690  syn match texMathSymbol '\\subsetneq\>'		contained conceal cchar=⊊
691  syn match texMathSymbol '\\subsetneqq\>'		contained conceal cchar=⫋
692  syn match texMathSymbol '\\succapprox\>'		contained conceal cchar=⪸
693  syn match texMathSymbol '\\succ\>'			contained conceal cchar=≻
694  syn match texMathSymbol '\\succcurlyeq\>'		contained conceal cchar=≽
695  syn match texMathSymbol '\\succeq\>'			contained conceal cchar=⪰
696  syn match texMathSymbol '\\succnapprox\>'		contained conceal cchar=⪺
697  syn match texMathSymbol '\\succneqq\>'		contained conceal cchar=⪶
698  syn match texMathSymbol '\\succsim\>'			contained conceal cchar=≿
699  syn match texMathSymbol '\\sum\>'			contained conceal cchar=∑
700  syn match texMathSymbol '\\Supset\>'			contained conceal cchar=⋑
701  syn match texMathSymbol '\\supseteq\>'		contained conceal cchar=⊇
702  syn match texMathSymbol '\\supseteqq\>'		contained conceal cchar=⫆
703  syn match texMathSymbol '\\supsetneq\>'		contained conceal cchar=⊋
704  syn match texMathSymbol '\\supsetneqq\>'		contained conceal cchar=⫌
705  syn match texMathSymbol '\\surd\>'			contained conceal cchar=√
706  syn match texMathSymbol '\\therefore\>'		contained conceal cchar=∴
707  syn match texMathSymbol '\\times\>'			contained conceal cchar=×
708  syn match texMathSymbol '\\to\>'			contained conceal cchar=→
709  syn match texMathSymbol '\\top\>'			contained conceal cchar=⊤
710  syn match texMathSymbol '\\triangleleft\>'		contained conceal cchar=⊲
711  syn match texMathSymbol '\\trianglelefteq\>'		contained conceal cchar=⊴
712  syn match texMathSymbol '\\triangleq\>'		contained conceal cchar=≜
713  syn match texMathSymbol '\\triangleright\>'		contained conceal cchar=⊳
714  syn match texMathSymbol '\\trianglerighteq\>'		contained conceal cchar=⊵
715  syn match texMathSymbol '\\varnothing\>'		contained conceal cchar=∅
716  syn match texMathSymbol '\\vartriangle\>'		contained conceal cchar=∆
717  syn match texMathSymbol '\\vdash\>'			contained conceal cchar=⊢
718  syn match texMathSymbol '\\vDash\>'			contained conceal cchar=⊨
719  syn match texMathSymbol '\\Vdash\>'			contained conceal cchar=⊩
720  syn match texMathSymbol '\\vdots\>'			contained conceal cchar=⋮
721  syn match texMathSymbol '\\veebar\>'			contained conceal cchar=⊻
722  syn match texMathSymbol '\\vee\>'			contained conceal cchar=∨
723  syn match texMathSymbol '\\Vvdash\>'			contained conceal cchar=⊪
724  syn match texMathSymbol '\\wedge\>'			contained conceal cchar=∧
725  syn match texMathSymbol '\\wr\>'			contained conceal cchar=≀
726
727  if &ambw == "double"
728   syn match texMathSymbol '\\gg\>'			contained conceal cchar=≫
729   syn match texMathSymbol '\\ll\>'			contained conceal cchar=≪
730  else
731   syn match texMathSymbol '\\gg\>'			contained conceal cchar=⟫
732   syn match texMathSymbol '\\ll\>'			contained conceal cchar=⟪
733  endif
734 endif
735
736 " Greek {{{2
737 if s:tex_conceal =~ 'g'
738  fun! s:Greek(group,pat,cchar)
739    exe 'syn match '.a:group." '".a:pat."' contained conceal cchar=".a:cchar
740  endfun
741  call s:Greek('texGreek','\\alpha\>'		,'α')
742  call s:Greek('texGreek','\\beta\>'		,'β')
743  call s:Greek('texGreek','\\gamma\>'		,'γ')
744  call s:Greek('texGreek','\\delta\>'		,'δ')
745  call s:Greek('texGreek','\\epsilon\>'		,'ϵ')
746  call s:Greek('texGreek','\\varepsilon\>'	,'ε')
747  call s:Greek('texGreek','\\zeta\>'		,'ζ')
748  call s:Greek('texGreek','\\eta\>'		,'η')
749  call s:Greek('texGreek','\\theta\>'		,'θ')
750  call s:Greek('texGreek','\\vartheta\>'		,'ϑ')
751  call s:Greek('texGreek','\\kappa\>'		,'κ')
752  call s:Greek('texGreek','\\lambda\>'		,'λ')
753  call s:Greek('texGreek','\\mu\>'		,'μ')
754  call s:Greek('texGreek','\\nu\>'		,'ν')
755  call s:Greek('texGreek','\\xi\>'		,'ξ')
756  call s:Greek('texGreek','\\pi\>'		,'π')
757  call s:Greek('texGreek','\\varpi\>'		,'ϖ')
758  call s:Greek('texGreek','\\rho\>'		,'ρ')
759  call s:Greek('texGreek','\\varrho\>'		,'ϱ')
760  call s:Greek('texGreek','\\sigma\>'		,'σ')
761  call s:Greek('texGreek','\\varsigma\>'		,'ς')
762  call s:Greek('texGreek','\\tau\>'		,'τ')
763  call s:Greek('texGreek','\\upsilon\>'		,'υ')
764  call s:Greek('texGreek','\\phi\>'		,'φ')
765  call s:Greek('texGreek','\\varphi\>'		,'ϕ')
766  call s:Greek('texGreek','\\chi\>'		,'χ')
767  call s:Greek('texGreek','\\psi\>'		,'ψ')
768  call s:Greek('texGreek','\\omega\>'		,'ω')
769  call s:Greek('texGreek','\\Gamma\>'		,'Γ')
770  call s:Greek('texGreek','\\Delta\>'		,'Δ')
771  call s:Greek('texGreek','\\Theta\>'		,'Θ')
772  call s:Greek('texGreek','\\Lambda\>'		,'Λ')
773  call s:Greek('texGreek','\\Xi\>'		,'Χ')
774  call s:Greek('texGreek','\\Pi\>'		,'Π')
775  call s:Greek('texGreek','\\Sigma\>'		,'Σ')
776  call s:Greek('texGreek','\\Upsilon\>'		,'Υ')
777  call s:Greek('texGreek','\\Phi\>'		,'Φ')
778  call s:Greek('texGreek','\\Psi\>'		,'Ψ')
779  call s:Greek('texGreek','\\Omega\>'		,'Ω')
780  delfun s:Greek
781 endif
782
783 " Superscripts/Subscripts {{{2
784 if s:tex_conceal =~ 's'
785  syn region texSuperscript	matchgroup=Delimiter start='\^{'	end='}'	contained concealends contains=texSuperscripts,texStatement
786  syn region texSubscript	matchgroup=Delimiter start='_{'		end='}'	contained concealends contains=texSubscripts,texStatement
787  fun! s:SuperSub(group,leader,pat,cchar)
788    exe 'syn match '.a:group." '".a:leader.a:pat."' contained conceal cchar=".a:cchar
789    exe 'syn match '.a:group."s '".a:pat."' contained conceal cchar=".a:cchar.' nextgroup='.a:group.'s'
790  endfun
791  call s:SuperSub('texSuperscript','\^','0','⁰')
792  call s:SuperSub('texSuperscript','\^','1','¹')
793  call s:SuperSub('texSuperscript','\^','2','²')
794  call s:SuperSub('texSuperscript','\^','3','³')
795  call s:SuperSub('texSuperscript','\^','4','⁴')
796  call s:SuperSub('texSuperscript','\^','5','⁵')
797  call s:SuperSub('texSuperscript','\^','6','⁶')
798  call s:SuperSub('texSuperscript','\^','7','⁷')
799  call s:SuperSub('texSuperscript','\^','8','⁸')
800  call s:SuperSub('texSuperscript','\^','9','⁹')
801  call s:SuperSub('texSuperscript','\^','a','ᵃ')
802  call s:SuperSub('texSuperscript','\^','b','ᵇ')
803  call s:SuperSub('texSuperscript','\^','c','ᶜ')
804  call s:SuperSub('texSuperscript','\^','d','ᵈ')
805  call s:SuperSub('texSuperscript','\^','e','ᵉ')
806  call s:SuperSub('texSuperscript','\^','f','ᶠ')
807  call s:SuperSub('texSuperscript','\^','g','ᵍ')
808  call s:SuperSub('texSuperscript','\^','h','ʰ')
809  call s:SuperSub('texSuperscript','\^','i','ⁱ')
810  call s:SuperSub('texSuperscript','\^','j','ʲ')
811  call s:SuperSub('texSuperscript','\^','k','ᵏ')
812  call s:SuperSub('texSuperscript','\^','l','ˡ')
813  call s:SuperSub('texSuperscript','\^','m','ᵐ')
814  call s:SuperSub('texSuperscript','\^','n','ⁿ')
815  call s:SuperSub('texSuperscript','\^','o','ᵒ')
816  call s:SuperSub('texSuperscript','\^','p','ᵖ')
817  call s:SuperSub('texSuperscript','\^','r','ʳ')
818  call s:SuperSub('texSuperscript','\^','s','ˢ')
819  call s:SuperSub('texSuperscript','\^','t','ᵗ')
820  call s:SuperSub('texSuperscript','\^','u','ᵘ')
821  call s:SuperSub('texSuperscript','\^','v','ᵛ')
822  call s:SuperSub('texSuperscript','\^','w','ʷ')
823  call s:SuperSub('texSuperscript','\^','x','ˣ')
824  call s:SuperSub('texSuperscript','\^','y','ʸ')
825  call s:SuperSub('texSuperscript','\^','z','ᶻ')
826  call s:SuperSub('texSuperscript','\^','A','ᴬ')
827  call s:SuperSub('texSuperscript','\^','B','ᴮ')
828  call s:SuperSub('texSuperscript','\^','D','ᴰ')
829  call s:SuperSub('texSuperscript','\^','E','ᴱ')
830  call s:SuperSub('texSuperscript','\^','G','ᴳ')
831  call s:SuperSub('texSuperscript','\^','H','ᴴ')
832  call s:SuperSub('texSuperscript','\^','I','ᴵ')
833  call s:SuperSub('texSuperscript','\^','J','ᴶ')
834  call s:SuperSub('texSuperscript','\^','K','ᴷ')
835  call s:SuperSub('texSuperscript','\^','L','ᴸ')
836  call s:SuperSub('texSuperscript','\^','M','ᴹ')
837  call s:SuperSub('texSuperscript','\^','N','ᴺ')
838  call s:SuperSub('texSuperscript','\^','O','ᴼ')
839  call s:SuperSub('texSuperscript','\^','P','ᴾ')
840  call s:SuperSub('texSuperscript','\^','R','ᴿ')
841  call s:SuperSub('texSuperscript','\^','T','ᵀ')
842  call s:SuperSub('texSuperscript','\^','U','ᵁ')
843  call s:SuperSub('texSuperscript','\^','W','ᵂ')
844  call s:SuperSub('texSuperscript','\^','+','⁺')
845  call s:SuperSub('texSuperscript','\^','-','⁻')
846  call s:SuperSub('texSuperscript','\^','<','˂')
847  call s:SuperSub('texSuperscript','\^','>','˃')
848  call s:SuperSub('texSuperscript','\^','/','ˊ')
849  call s:SuperSub('texSuperscript','\^','(','⁽')
850  call s:SuperSub('texSuperscript','\^',')','⁾')
851  call s:SuperSub('texSuperscript','\^','\.','˙')
852  call s:SuperSub('texSuperscript','\^','=','˭')
853  call s:SuperSub('texSubscript','_','0','₀')
854  call s:SuperSub('texSubscript','_','1','₁')
855  call s:SuperSub('texSubscript','_','2','₂')
856  call s:SuperSub('texSubscript','_','3','₃')
857  call s:SuperSub('texSubscript','_','4','₄')
858  call s:SuperSub('texSubscript','_','5','₅')
859  call s:SuperSub('texSubscript','_','6','₆')
860  call s:SuperSub('texSubscript','_','7','₇')
861  call s:SuperSub('texSubscript','_','8','₈')
862  call s:SuperSub('texSubscript','_','9','₉')
863  call s:SuperSub('texSubscript','_','a','ₐ')
864  call s:SuperSub('texSubscript','_','e','ₑ')
865  call s:SuperSub('texSubscript','_','i','ᵢ')
866  call s:SuperSub('texSubscript','_','o','ₒ')
867  call s:SuperSub('texSubscript','_','u','ᵤ')
868  call s:SuperSub('texSubscript','_','+','₊')
869  call s:SuperSub('texSubscript','_','-','₋')
870  call s:SuperSub('texSubscript','_','/','ˏ')
871  call s:SuperSub('texSubscript','_','(','₍')
872  call s:SuperSub('texSubscript','_',')','₎')
873  call s:SuperSub('texSubscript','_','\.','‸')
874  call s:SuperSub('texSubscript','_','r','ᵣ')
875  call s:SuperSub('texSubscript','_','v','ᵥ')
876  call s:SuperSub('texSubscript','_','x','ₓ')
877  call s:SuperSub('texSubscript','_','\\beta\>' ,'ᵦ')
878  call s:SuperSub('texSubscript','_','\\delta\>','ᵨ')
879  call s:SuperSub('texSubscript','_','\\phi\>'  ,'ᵩ')
880  call s:SuperSub('texSubscript','_','\\gamma\>','ᵧ')
881  call s:SuperSub('texSubscript','_','\\chi\>'  ,'ᵪ')
882  delfun s:SuperSub
883 endif
884
885 " Accented characters: {{{2
886 if s:tex_conceal =~ 'a'
887  if b:tex_stylish
888   syn match texAccent		"\\[bcdvuH][^a-zA-Z@]"me=e-1
889   syn match texLigature		"\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)[^a-zA-Z@]"me=e-1
890  else
891   fun! s:Accents(chr,...)
892     let i= 1
893     for accent in ["`","\\'","^",'"','\~',"r","v"]
894      if i > a:0
895       break
896      endif
897      if strlen(a:{i}) == 0
898       let i= i + 1
899       continue
900      endif
901      exe "syn match texAccent '\\\\".accent."{".a:chr."}' conceal cchar=".a:{i}
902      let i= i + 1
903     endfor
904   endfun
905   call s:Accents('a','à','á','â','ä','ã','å','ă')
906   call s:Accents('A','À','Á','Â','Ä','Ã','Å','Ă')
907   call s:Accents('C',"" ,'Ć','Ĉ',"" ,"" ,"" ,'Ć')
908   call s:Accents('e','è','é','ê','ë','ẽ',"" ,'ĕ')
909   call s:Accents('E','È','É','Ê','Ë','Ẽ',"" ,'Ė')
910   call s:Accents('i','ì','í','î','ï','ĩ',"" ,"ĭ")
911   call s:Accents('I','Ì','Í','Î','Ï','Ĩ',"" ,'Ĭ')
912   call s:Accents('o','ò','ó','ô','ö','õ',"" ,'ŏ')
913   call s:Accents('O','Ò','Ó','Ô','Ö','Õ',"" ,'Ŏ')
914   call s:Accents('r',"" ,'ŕ',"" ,"" ,"" ,"" ,'ř')
915   call s:Accents('R',"" ,'Ŕ',"" ,"" ,"" ,"" ,'Ř')
916   call s:Accents('s',"" ,'ś','ŝ',"" ,"" ,"" ,'š')
917   call s:Accents('S',"" ,'Ś','Ŝ',"" ,"" ,"" ,'Š')
918   call s:Accents('u','ù','ú','û','ü','ũ',"" ,'ŭ')
919   call s:Accents('U','Ù','Ú','Û','Ü','Ũ',"" ,'Ŭ')
920   call s:Accents('y','ỳ','ý','ŷ','ÿ','ỹ',"" ,"" )
921   call s:Accents('Y','Ỳ','Ý','Ŷ','Ÿ','Ỹ',"" ,"" )
922   delfun s:Accents
923   syn match texAccent   '\\aa\>'	conceal cchar=å
924   syn match texAccent   '\\AA\>'	conceal cchar=Å
925   syn match texAccent	'\\k{a}'	conceal cchar=ą
926   syn match texAccent	'\\k{A}'	conceal cchar=Ą
927   syn match texAccent	'\\c{C}'	conceal cchar=Ç
928   syn match texAccent	'\\c{c}'	conceal cchar=ç
929   syn match texAccent	'\\\~{n}'	conceal cchar=ñ
930   syn match texAccent	'\\\~{N}'	conceal cchar=Ñ
931   syn match texAccent	'\\o\>'		conceal cchar=ø
932   syn match texAccent	'\\O\>'		conceal cchar=Ø
933   syn match texAccent	'\\H{o}'	conceal cchar=ő
934   syn match texAccent	'\\H{O}'	conceal cchar=Ő
935   syn match texAccent	'\\c{r}'	conceal cchar=ŗ
936   syn match texLigature	'\\AE\>'	conceal cchar=Æ
937   syn match texLigature	'\\ae\>'	conceal cchar=æ
938   syn match texLigature	'\\oe\>'	conceal cchar=œ
939   syn match texLigature	'\\OE\>'	conceal cchar=Œ
940   syn match texLigature	'\\ss\>'	conceal cchar=ß
941  endif
942 endif
943endif
944
945" ---------------------------------------------------------------------
946" LaTeX synchronization: {{{1
947syn sync maxlines=200
948syn sync minlines=50
949
950syn  sync match texSyncStop			groupthere NONE		"%stopzone\>"
951
952" Synchronization: {{{1
953" The $..$ and $$..$$ make for impossible sync patterns
954" (one can't tell if a "$$" starts or stops a math zone by itself)
955" The following grouptheres coupled with minlines above
956" help improve the odds of good syncing.
957if !exists("tex_no_math")
958 syn sync match texSyncMathZoneA		groupthere NONE		"\\end{abstract}"
959 syn sync match texSyncMathZoneA		groupthere NONE		"\\end{center}"
960 syn sync match texSyncMathZoneA		groupthere NONE		"\\end{description}"
961 syn sync match texSyncMathZoneA		groupthere NONE		"\\end{enumerate}"
962 syn sync match texSyncMathZoneA		groupthere NONE		"\\end{itemize}"
963 syn sync match texSyncMathZoneA		groupthere NONE		"\\end{table}"
964 syn sync match texSyncMathZoneA		groupthere NONE		"\\end{tabular}"
965 syn sync match texSyncMathZoneA		groupthere NONE		"\\\(sub\)*section\>"
966endif
967
968" ---------------------------------------------------------------------
969" Highlighting: {{{1
970if did_tex_syntax_inits == 1
971 let did_tex_syntax_inits= 2
972  " TeX highlighting groups which should share similar highlighting
973  if !exists("g:tex_no_error")
974   if !exists("tex_no_math")
975    HiLink texBadMath		texError
976    HiLink texMathDelimBad	texError
977    HiLink texMathError		texError
978    if !b:tex_stylish
979      HiLink texOnlyMath	texError
980    endif
981   endif
982   HiLink texError		Error
983  endif
984
985  HiLink texCite		texRefZone
986  HiLink texDefCmd		texDef
987  HiLink texDefName		texDef
988  HiLink texDocType		texCmdName
989  HiLink texDocTypeArgs		texCmdArgs
990  HiLink texInputFileOpt	texCmdArgs
991  HiLink texInputCurlies	texDelimiter
992  HiLink texLigature		texSpecialChar
993  if !exists("tex_no_math")
994   HiLink texMathDelimSet1	texMathDelim
995   HiLink texMathDelimSet2	texMathDelim
996   HiLink texMathDelimKey	texMathDelim
997   HiLink texMathMatcher	texMath
998   HiLink texMathZoneV		texMath
999   HiLink texMathZoneW		texMath
1000   HiLink texMathZoneX		texMath
1001   HiLink texMathZoneY		texMath
1002   HiLink texMathZoneV		texMath
1003   HiLink texMathZoneZ		texMath
1004  endif
1005  HiLink texSectionMarker	texCmdName
1006  HiLink texSectionName		texSection
1007  HiLink texSpaceCode		texStatement
1008  HiLink texStyleStatement	texStatement
1009  HiLink texTypeSize		texType
1010  HiLink texTypeStyle		texType
1011
1012   " Basic TeX highlighting groups
1013  HiLink texCmdArgs		Number
1014  HiLink texCmdName		Statement
1015  HiLink texComment		Comment
1016  HiLink texDef			Statement
1017  HiLink texDefParm		Special
1018  HiLink texDelimiter		Delimiter
1019  HiLink texInput		Special
1020  HiLink texInputFile		Special
1021  HiLink texLength		Number
1022  HiLink texMath		Special
1023  HiLink texMathDelim		Statement
1024  HiLink texMathOper		Operator
1025  HiLink texNewCmd		Statement
1026  HiLink texNewEnv		Statement
1027  HiLink texOption		Number
1028  HiLink texRefZone		Special
1029  HiLink texSection		PreCondit
1030  HiLink texSpaceCodeChar	Special
1031  HiLink texSpecialChar		SpecialChar
1032  HiLink texStatement		Statement
1033  HiLink texString		String
1034  HiLink texTodo		Todo
1035  HiLink texType		Type
1036  HiLink texZone		PreCondit
1037
1038  delcommand HiLink
1039endif
1040
1041" Current Syntax: {{{1
1042unlet b:extfname
1043let   b:current_syntax = "tex"
1044" vim: ts=8 fdm=marker
1045