xref: /vim-8.2.3635/runtime/syntax/tex.vim (revision 0fa313a7)
1" Vim syntax file
2" Language:	TeX
3" Maintainer:	Dr. Charles E. Campbell, Jr. <[email protected]>
4" Last Change:	Mar 02, 2005
5" Version:	27
6" URL:		http://www.erols.com/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
40
41" Define the default highlighting. {{{1
42" For version 5.7 and earlier: only when not done already
43" For version 5.8 and later: only when an item doesn't have highlighting yet
44if version >= 508 || !exists("did_tex_syntax_inits")
45 let did_tex_syntax_inits = 1
46 if version < 508
47  command -nargs=+ HiLink hi link <args>
48 else
49  command -nargs=+ HiLink hi def link <args>
50 endif
51endif
52if exists("g:tex_tex") && !exists("g:tex_no_error")
53 let g:tex_no_error= 1
54endif
55
56" Determine whether or not to use "*.sty" mode {{{1
57" The user may override the normal determination by setting
58"   g:tex_stylish to 1      (for    "*.sty" mode)
59"    or to           0 else (normal "*.tex" mode)
60" or on a buffer-by-buffer basis with b:tex_stylish
61let b:extfname=expand("%:e")
62if exists("g:tex_stylish")
63 let b:tex_stylish= g:tex_stylish
64elseif !exists("b:tex_stylish")
65 if b:extfname == "sty" || b:extfname == "cls" || b:extfname == "clo" || b:extfname == "dtx" || b:extfname == "ltx"
66  let b:tex_stylish= 1
67 else
68  let b:tex_stylish= 0
69 endif
70endif
71
72" handle folding {{{1
73if !exists("g:tex_fold_enabled")
74 let g:tex_fold_enabled= 0
75elseif g:tex_fold_enabled && !has("folding")
76 let g:sh_fold_enabled= 0;
77 echomsg "Ignoring g:tex_fold_enabled=".g:tex_fold_enabled."; need to re-compile vim for +fold support"
78endif
79if g:tex_fold_enabled && &fdm == "manual"
80 set fdm=syntax
81endif
82
83
84" (La)TeX keywords: only use the letters a-zA-Z {{{1
85" but _ is the only one that causes problems.
86if version < 600
87  set isk-=_
88  if b:tex_stylish
89    set isk+=@
90  endif
91else
92  setlocal isk-=_
93  if b:tex_stylish
94    setlocal isk+=@
95  endif
96endif
97
98" Clusters: {{{1
99" --------
100syn cluster texCmdGroup		contains=texCmdBody,texComment,texDefParm,texDelimiter,texDocType,texInput,texLength,texLigature,texMathDelim,texMathOper,texNewCmd,texNewEnv,texRefZone,texSection,texSectionMarker,texSectionName,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle
101if !exists("g:tex_no_error")
102 syn cluster texCmdGroup	add=texMathError
103endif
104syn cluster texEnvGroup		contains=texMatcher,texMathDelim,texSpecialChar,texStatement
105syn 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
106syn cluster texRefGroup		contains=texMatcher,texComment,texDelimiter
107if !exists("tex_no_math")
108 syn cluster texMathZones	contains=texMathZoneV,texMathZoneW,texMathZoneX,texMathZoneY,texMathZoneZ
109 syn cluster texMatchGroup	add=@texMathZones
110 syn cluster texMathDelimGroup	contains=texMathDelimBad,texMathDelimKey,texMathDelimSet1,texMathDelimSet2
111 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
112 syn cluster texMathZoneGroup	contains=texComment,texDelimiter,texLength,texMathDelim,texMathMatcher,texMathOper,texRefZone,texSpecialChar,texStatement,texTypeSize,texTypeStyle
113 if !exists("g:tex_no_error")
114  syn cluster texMathMatchGroup	add=texMathError
115  syn cluster texMathZoneGroup	add=texMathError
116 endif
117endif
118
119" Try to flag {} and () mismatches: {{{1
120if !exists("g:tex_no_error")
121 syn region texMatcher		matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]"	end="}"		contains=@texMatchGroup,texError
122 syn region texMatcher		matchgroup=Delimiter start="\["				end="]"		contains=@texMatchGroup,texError
123else
124 syn region texMatcher		matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]"	end="}"		contains=@texMatchGroup
125 syn region texMatcher		matchgroup=Delimiter start="\["				end="]"		contains=@texMatchGroup
126endif
127syn region texParen		start="("						end=")"		contains=@texMatchGroup,@Spell
128if !exists("g:tex_no_error")
129 syn match  texError		"[}\])]"
130endif
131if !exists("tex_no_math")
132 if !exists("g:tex_no_error")
133  syn match  texMathError	"}"	contained
134 endif
135 syn region texMathMatcher	matchgroup=Delimiter start="{"  skip="\\\\\|\\}"  end="}" end="%stopzone\>" contained contains=@texMathMatchGroup
136endif
137
138" TeX/LaTeX keywords: {{{1
139" Instead of trying to be All Knowing, I just match \..alphameric..
140" Note that *.tex files may not have "@" in their \commands
141if exists("g:tex_tex") || b:tex_stylish
142  syn match texStatement	"\\[a-zA-Z@]\+"
143else
144  syn match texStatement	"\\\a\+"
145  if !exists("g:tex_no_error")
146   syn match texError		"\\\a*@[a-zA-Z@]*"
147  endif
148endif
149
150" TeX/LaTeX delimiters: {{{1
151syn match texDelimiter		"&"
152syn match texDelimiter		"\\\\"
153
154" Tex/Latex Options: {{{1
155syn match texOption	"[^\\]\zs#\d\+\|^#\d\+"
156
157" texAccent (tnx to Karim Belabas) avoids annoying highlighting for accents: {{{1
158if b:tex_stylish
159  syn match texAccent		"\\[bcdvuH][^a-zA-Z@]"me=e-1
160  syn match texLigature		"\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)[^a-zA-Z@]"me=e-1
161else
162  syn match texAccent		"\\[bcdvuH]\A"me=e-1
163  syn match texLigature		"\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)\A"me=e-1
164endif
165syn match texAccent		"\\[bcdvuH]$"
166syn match texAccent		+\\[=^.\~"`']+
167syn match texAccent		+\\['=t'.c^ud"vb~Hr]{\a}+
168syn match texLigature		"\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)$"
169
170" \begin{}/\end{} section markers: {{{1
171syn match  texSectionMarker	"\\begin\>\|\\end\>" nextgroup=texSectionName
172syn region texSectionName	matchgroup=Delimiter start="{" end="}"  contained nextgroup=texSectionModifier
173syn region texSectionModifier	matchgroup=Delimiter start="\[" end="]" contained
174
175" \documentclass, \documentstyle, \usepackage: {{{1
176syn match  texDocType		"\\documentclass\>\|\\documentstyle\>\|\\usepackage\>"	nextgroup=texSectionName,texDocTypeArgs
177syn region texDocTypeArgs	matchgroup=Delimiter start="\[" end="]"			contained	nextgroup=texSectionName
178
179" TeX input: {{{1
180syn match texInput		"\\input\s\+[a-zA-Z/.0-9_^]\+"hs=s+7				contains=texStatement
181syn match texInputFile		"\\include\(graphics\|list\)\=\(\[.\{-}\]\)\=\s*{.\{-}}"	contains=texStatement,texInputCurlies
182syn match texInputFile		"\\\(epsfig\|input\|usepackage\)\s*\(\[.*\]\)\={.\{-}}"		contains=texStatement,texInputCurlies,texInputFileOpt
183syn match texInputCurlies	"[{}]"								contained
184syn region texInputFileOpt	matchgroup=Delimiter start="\[" end="\]"			contained
185
186" Type Styles (LaTeX 2.09): {{{1
187syn match texTypeStyle		"\\rm\>"
188syn match texTypeStyle		"\\em\>"
189syn match texTypeStyle		"\\bf\>"
190syn match texTypeStyle		"\\it\>"
191syn match texTypeStyle		"\\sl\>"
192syn match texTypeStyle		"\\sf\>"
193syn match texTypeStyle		"\\sc\>"
194syn match texTypeStyle		"\\tt\>"
195
196" Type Styles: attributes, commands, families, etc (LaTeX2E): {{{1
197syn match texTypeStyle		"\\textbf\>"
198syn match texTypeStyle		"\\textit\>"
199syn match texTypeStyle		"\\textmd\>"
200syn match texTypeStyle		"\\textrm\>"
201syn match texTypeStyle		"\\textsc\>"
202syn match texTypeStyle		"\\textsf\>"
203syn match texTypeStyle		"\\textsl\>"
204syn match texTypeStyle		"\\texttt\>"
205syn match texTypeStyle		"\\textup\>"
206syn match texTypeStyle		"\\emph\>"
207
208syn match texTypeStyle		"\\mathbb\>"
209syn match texTypeStyle		"\\mathbf\>"
210syn match texTypeStyle		"\\mathcal\>"
211syn match texTypeStyle		"\\mathfrak\>"
212syn match texTypeStyle		"\\mathit\>"
213syn match texTypeStyle		"\\mathnormal\>"
214syn match texTypeStyle		"\\mathrm\>"
215syn match texTypeStyle		"\\mathsf\>"
216syn match texTypeStyle		"\\mathtt\>"
217
218syn match texTypeStyle		"\\rmfamily\>"
219syn match texTypeStyle		"\\sffamily\>"
220syn match texTypeStyle		"\\ttfamily\>"
221
222syn match texTypeStyle		"\\itshape\>"
223syn match texTypeStyle		"\\scshape\>"
224syn match texTypeStyle		"\\slshape\>"
225syn match texTypeStyle		"\\upshape\>"
226
227syn match texTypeStyle		"\\bfseries\>"
228syn match texTypeStyle		"\\mdseries\>"
229
230" Some type sizes: {{{1
231syn match texTypeSize		"\\tiny\>"
232syn match texTypeSize		"\\scriptsize\>"
233syn match texTypeSize		"\\footnotesize\>"
234syn match texTypeSize		"\\small\>"
235syn match texTypeSize		"\\normalsize\>"
236syn match texTypeSize		"\\large\>"
237syn match texTypeSize		"\\Large\>"
238syn match texTypeSize		"\\LARGE\>"
239syn match texTypeSize		"\\huge\>"
240syn match texTypeSize		"\\Huge\>"
241
242" Spacecodes (TeX'isms): {{{1
243" \mathcode`\^^@="2201  \delcode`\(="028300  \sfcode`\)=0 \uccode`X=`X  \lccode`x=`x
244syn match texSpaceCode		"\\\(math\|cat\|del\|lc\|sf\|uc\)code`"me=e-1 nextgroup=texSpaceCodeChar
245syn match texSpaceCodeChar    "`\\\=.\(\^.\)\==\(\d\|\"\x\{1,6}\|`.\)"	contained
246
247" Sections, subsections, etc: {{{1
248if g:tex_fold_enabled && has("folding")
249 syn region texSectionZone	matchgroup=texSection start="\\\(sub\)*\(section\|author\|part\|chapter\|paragraph\)\*\=\>"	end="\ze\\\(sub\)*\(section\|author\|part\|chapter\|paragraph\)\*\=\>" end="%\s*stopzone\>"	contains=TOP fold
250 syn region texSectionZone	matchgroup=texSection start="\\begin\s*{\s*abstract\s*}"	end="\\end\s*{\s*abstract\s*}"  contains=TOP fold
251else
252 syn match texSection		"\\\(sub\)*section\*\=\>"
253 syn match texSection		"\\\(title\|author\|part\|chapter\|paragraph\|subparagraph\)\>"
254 syn match texSection		"\\begin\s*{\s*abstract\s*}\|\\end\s*{\s*abstract\s*}"
255endif
256
257" Bad Math (mismatched): {{{1
258if !exists("tex_no_math")
259 syn match texBadMath		"\\end\s*{\s*\(array\|gathered\|bBpvV]matrix\|split\|subequations\|smallmatrix\|xxalignat\)\s*}"
260 syn match texBadMath		"\\end\s*{\s*\(align\|alignat\|displaymath\|displaymath\|eqnarray\|equation\|flalign\|gather\|math\|multline\|xalignat\)\*\=\s*}"
261 syn match texBadMath		"\\[\])]"
262endif
263
264" Math Zones: {{{1
265if !exists("tex_no_math")
266 " TexNewMathZone: creates a mathzone with the given suffix and mathzone name. {{{2
267 "                 Starred forms are created if starform is true.  Starred
268 "                 forms have syntax group and synchronization groups with a
269 "                 "S" appended.  Handles: cluster, syntax, sync, and HiLink.
270 fun! TexNewMathZone(sfx,mathzone,starform)
271   let grpname  = "texMathZone".a:sfx
272   let syncname = "texSyncMathZone".a:sfx
273   exe "syn cluster texMathZones add=".grpname
274   exe 'syn region '.grpname.' start='."'".'\\begin\s*{\s*'.a:mathzone.'\s*}'."'".' end='."'".'\\end\s*{\s*'.a:mathzone.'\s*}'."'".' keepend contains=@texMathZoneGroup'
275   exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
276   exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
277   exe 'HiLink '.grpname.' texMath'
278   if a:starform
279    let grpname  = "texMathZone".a:sfx.'S'
280    let syncname = "texSyncMathZone".a:sfx.'S'
281    exe "syn cluster texMathZones add=".grpname
282    exe 'syn region '.grpname.' start='."'".'\\begin\s*{\s*'.a:mathzone.'\*\s*}'."'".' end='."'".'\\end\s*{\s*'.a:mathzone.'\*\s*}'."'".' keepend contains=@texMathZoneGroup'
283    exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
284    exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
285    exe 'HiLink '.grpname.' texMath'
286   endif
287 endfun
288
289 " Standard Math Zones: {{{2
290 call TexNewMathZone("A","align",1)
291 call TexNewMathZone("B","alignat",1)
292 call TexNewMathZone("C","displaymath",1)
293 call TexNewMathZone("D","eqnarray",1)
294 call TexNewMathZone("E","equation",1)
295 call TexNewMathZone("F","flalign",1)
296 call TexNewMathZone("G","gather",1)
297 call TexNewMathZone("H","math",1)
298 call TexNewMathZone("I","multline",1)
299 call TexNewMathZone("J","subequations",0)
300 call TexNewMathZone("K","xalignat",1)
301 call TexNewMathZone("L","xxalignat",0)
302
303 " Inline Math Zones: {{{2
304 syn region texMathZoneV	matchgroup=Delimiter start="\\("	matchgroup=Delimiter end="\\)\|%stopzone\>"	keepend contains=@texMathZoneGroup
305 syn region texMathZoneW	matchgroup=Delimiter start="\\\["	matchgroup=Delimiter end="\\]\|%stopzone\>"	keepend contains=@texMathZoneGroup
306 syn region texMathZoneX	matchgroup=Delimiter start="\$" skip="\\\\\|\\\$" matchgroup=Delimiter end="\$" end="%stopzone\>"	contains=@texMathZoneGroup
307 syn region texMathZoneY	matchgroup=Delimiter start="\$\$" matchgroup=Delimiter end="\$\$" end="%stopzone\>"	keepend		contains=@texMathZoneGroup
308 syn region texMathZoneZ	matchgroup=texStatement start="\\ensuremath\s*{" matchgroup=texStatement end="}" end="%stopzone\>"	contains=@texMathZoneGroup
309
310 syn match texMathOper		"[_^=]" contained
311
312 " \left..something.. and \right..something.. support: {{{2
313 syn match   texMathDelimBad	contained		"\S"
314 syn match   texMathDelim	contained		"\\\(left\|right\|[bB]igg\=[lr]\)\>"	skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad
315 syn match   texMathDelim	contained		"\\\(left\|right\)arrow\>\|\<\([aA]rrow\|brace\)\=vert\>"
316 syn match   texMathDelim	contained		"\\lefteqn\>"
317 syn match   texMathDelimSet2	contained	"\\"		nextgroup=texMathDelimKey,texMathDelimBad
318 syn match   texMathDelimSet1	contained	"[<>()[\]|/.]\|\\[{}|]"
319 syn keyword texMathDelimKey	contained	backslash       lceil           lVert           rgroup          uparrow
320 syn keyword texMathDelimKey	contained	downarrow       lfloor          rangle          rmoustache      Uparrow
321 syn keyword texMathDelimKey	contained	Downarrow       lgroup          rbrace          rvert           updownarrow
322 syn keyword texMathDelimKey	contained	langle          lmoustache      rceil           rVert           Updownarrow
323 syn keyword texMathDelimKey	contained	lbrace          lvert           rfloor
324endif
325
326" Special TeX characters  ( \$ \& \% \# \{ \} \_ \S \P ) : {{{1
327syn match texSpecialChar	"\\[$&%#{}_]"
328if b:tex_stylish
329  syn match texSpecialChar	"\\[SP@][^a-zA-Z@]"me=e-1
330else
331  syn match texSpecialChar	"\\[SP@]\A"me=e-1
332endif
333syn match texSpecialChar	"\\\\"
334if !exists("tex_no_math")
335 syn match texOnlyMath		"[_^]"
336endif
337syn match texSpecialChar	"\^\^[0-9a-f]\{2}\|\^\^\S"
338
339" Comments: {{{1
340"    Normal TeX LaTeX     :   %....
341"    Documented TeX Format:  ^^A...	-and-	leading %s (only)
342syn cluster texCommentGroup	contains=texTodo,@Spell
343syn case ignore
344syn keyword texTodo		contained		combak	fixme	todo
345syn case match
346if b:extfname == "dtx"
347  syn match texComment		"\^\^A.*$"	contains=@texCommentGroup
348  syn match texComment		"^%\+"		contains=@texCommentGroup
349else
350  syn match texComment		"%.*$"		contains=@texCommentGroup
351endif
352
353" Separate lines used for verb` and verb# so that the end conditions {{{1
354" will appropriately terminate.  Ideally vim would let me save a
355" character from the start pattern and re-use it in the end-pattern.
356syn region texZone		start="\\begin{verbatim}"		end="\\end{verbatim}\|%stopzone\>"
357if version < 600
358 syn region texZone		start="\\verb\*\=`"			end="`\|%stopzone\>"
359 syn region texZone		start="\\verb\*\=#"			end="#\|%stopzone\>"
360else
361  if b:tex_stylish
362    syn region texZone		start="\\verb\*\=\z([^\ta-zA-Z@]\)"	end="\z1\|%stopzone\>"
363  else
364    syn region texZone		start="\\verb\*\=\z([^\ta-zA-Z]\)"	end="\z1\|%stopzone\>"
365  endif
366endif
367
368" Tex Reference Zones: {{{1
369syn region texZone		matchgroup=texStatement start="@samp{"			end="}\|%stopzone\>"	contains=@texRefGroup
370syn region texRefZone		matchgroup=texStatement start="\\nocite{"		end="}\|%stopzone\>"	contains=@texRefGroup
371syn region texRefZone		matchgroup=texStatement start="\\bibliography{"		end="}\|%stopzone\>"	contains=@texRefGroup
372syn region texRefZone		matchgroup=texStatement start="\\cite\([tp]\*\=\)\={"	end="}\|%stopzone\>"	contains=@texRefGroup
373syn region texRefZone		matchgroup=texStatement start="\\label{"		end="}\|%stopzone\>"	contains=@texRefGroup
374syn region texRefZone		matchgroup=texStatement start="\\\(page\|eq\)ref{"	end="}\|%stopzone\>"	contains=@texRefGroup
375syn region texRefZone		matchgroup=texStatement start="\\v\=ref{"		end="}\|%stopzone\>"	contains=@texRefGroup
376
377" Handle newcommand, newenvironment : {{{1
378syn match  texNewCmd				"\\newcommand\>"			nextgroup=texCmdName skipwhite skipnl
379syn region texCmdName contained matchgroup=Delimiter start="{"rs=s+1  end="}"		nextgroup=texCmdArgs,texCmdBody skipwhite skipnl
380syn region texCmdArgs contained matchgroup=Delimiter start="\["rs=s+1 end="]"		nextgroup=texCmdBody skipwhite skipnl
381syn region texCmdBody contained matchgroup=Delimiter start="{"rs=s+1 skip="\\\\\|\\[{}]"	matchgroup=Delimiter end="}" contains=@texCmdGroup
382syn match  texNewEnv				"\\newenvironment\>"			nextgroup=texEnvName skipwhite skipnl
383syn region texEnvName contained matchgroup=Delimiter start="{"rs=s+1  end="}"		nextgroup=texEnvBgn skipwhite skipnl
384syn region texEnvBgn  contained matchgroup=Delimiter start="{"rs=s+1  end="}"		nextgroup=texEnvEnd skipwhite skipnl contains=@texEnvGroup
385syn region texEnvEnd  contained matchgroup=Delimiter start="{"rs=s+1  end="}"		skipwhite skipnl contains=@texEnvGroup
386
387" Definitions/Commands: {{{1
388syn match texDefCmd				"\\def\>"				nextgroup=texDefName skipwhite skipnl
389if b:tex_stylish
390  syn match texDefName contained		"\\[a-zA-Z@]\+"				nextgroup=texDefParms,texCmdBody skipwhite skipnl
391  syn match texDefName contained		"\\[^a-zA-Z@]"				nextgroup=texDefParms,texCmdBody skipwhite skipnl
392else
393  syn match texDefName contained		"\\\a\+"				nextgroup=texDefParms,texCmdBody skipwhite skipnl
394  syn match texDefName contained		"\\\A"					nextgroup=texDefParms,texCmdBody skipwhite skipnl
395endif
396syn match texDefParms  contained		"#[^{]*"	contains=texDefParm	nextgroup=texCmdBody skipwhite skipnl
397syn match  texDefParm  contained		"#\d\+"
398
399" TeX Lengths: {{{1
400syn match  texLength		"\<\d\+\(\.\d\+\)\=\s*\(true\)\=\s*\(bp\|cc\|cm\|dd\|em\|ex\|in\|mm\|pc\|pt\|sp\)\>"
401
402" TeX String Delimiters: {{{1
403syn match texString		"\(``\|''\|,,\)"
404
405" LaTeX synchronization: {{{1
406syn sync maxlines=200
407syn sync minlines=50
408
409syn  sync match texSyncStop			groupthere NONE		"%stopzone\>"
410
411" Synchronization: {{{1
412" The $..$ and $$..$$ make for impossible sync patterns
413" (one can't tell if a "$$" starts or stops a math zone by itself)
414" The following grouptheres coupled with minlines above
415" help improve the odds of good syncing.
416if !exists("tex_no_math")
417 syn sync match texSyncMathZoneA		groupthere NONE		"\\end{abstract}"
418 syn sync match texSyncMathZoneA		groupthere NONE		"\\end{center}"
419 syn sync match texSyncMathZoneA		groupthere NONE		"\\end{description}"
420 syn sync match texSyncMathZoneA		groupthere NONE		"\\end{enumerate}"
421 syn sync match texSyncMathZoneA		groupthere NONE		"\\end{itemize}"
422 syn sync match texSyncMathZoneA		groupthere NONE		"\\end{table}"
423 syn sync match texSyncMathZoneA		groupthere NONE		"\\end{tabular}"
424 syn sync match texSyncMathZoneA		groupthere NONE		"\\\(sub\)*section\>"
425endif
426
427" Highlighting: {{{1
428if did_tex_syntax_inits == 1
429 let did_tex_syntax_inits= 2
430  " TeX highlighting groups which should share similar highlighting
431  if !exists("g:tex_no_error")
432   if !exists("tex_no_math")
433    HiLink texBadMath		texError
434    HiLink texMathDelimBad	texError
435    HiLink texMathError		texError
436    if !b:tex_stylish
437      HiLink texOnlyMath	texError
438    endif
439   endif
440   HiLink texError		Error
441  endif
442
443  HiLink texDefCmd		texDef
444  HiLink texDefName		texDef
445  HiLink texDocType		texCmdName
446  HiLink texDocTypeArgs		texCmdArgs
447  HiLink texInputFileOpt	texCmdArgs
448  HiLink texInputCurlies	texDelimiter
449  HiLink texLigature		texSpecialChar
450  if !exists("tex_no_math")
451   HiLink texMathDelimSet1	texMathDelim
452   HiLink texMathDelimSet2	texMathDelim
453   HiLink texMathDelimKey	texMathDelim
454   HiLink texMathMatcher	texMath
455   HiLink texMathZoneW		texMath
456   HiLink texMathZoneX		texMath
457   HiLink texMathZoneY		texMath
458   HiLink texMathZoneZ		texMath
459  endif
460  HiLink texSectionMarker	texCmdName
461  HiLink texSectionName		texSection
462  HiLink texSpaceCode		texStatement
463  HiLink texTypeSize		texType
464  HiLink texTypeStyle		texType
465
466   " Basic TeX highlighting groups
467  HiLink texCmdArgs		Number
468  HiLink texCmdName		Statement
469  HiLink texComment		Comment
470  HiLink texDef			Statement
471  HiLink texDefParm		Special
472  HiLink texDelimiter		Delimiter
473  HiLink texInput		Special
474  HiLink texInputFile		Special
475  HiLink texLength		Number
476  HiLink texMath		Special
477  HiLink texMathDelim		Statement
478  HiLink texMathOper		Operator
479  HiLink texNewCmd		Statement
480  HiLink texNewEnv		Statement
481  HiLink texOption		Number
482  HiLink texRefZone		Special
483  HiLink texSection		PreCondit
484  HiLink texSpaceCodeChar	Special
485  HiLink texSpecialChar		SpecialChar
486  HiLink texStatement		Statement
487  HiLink texString		String
488  HiLink texTodo		Todo
489  HiLink texType		Type
490  HiLink texZone		PreCondit
491
492  delcommand HiLink
493endif
494
495" Current Syntax: {{{1
496unlet b:extfname
497let   b:current_syntax = "tex"
498" vim: ts=8 fdm=marker
499