All patches and comments are welcome. Please squash your changes to logical
commits before using git-format-patch and git-send-email to
patches@git.madduck.net.
If you'd read over the Git project's submission guidelines and adhered to them,
I'd be especially grateful.
3 " Maintainer: Dr. Charles E. Campbell, Jr. <NdrchipO@ScampbellPfamily.AbizM>
4 " Last Change: Feb 27, 2007
6 " URL: http://mysite.verizon.net/astronaut/vim/index.html#vimlinks_syntax
10 " 1. If you have a \begin{verbatim} that appears to overrun its boundaries,
13 " 2. Run-on equations ($..$ and $$..$$, particularly) can also be stopped
14 " by suitable use of %stopzone.
16 " 3. If you have a slow computer, you may wish to modify
18 " syn sync maxlines=200
19 " syn sync minlines=50
21 " to values that are more to your liking.
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)
27 " 5. If you have the variable "g:tex_no_error" defined then none of the
28 " lexical error-checking will be done.
30 " ie. let g:tex_no_error=1
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
37 elseif exists("b:current_syntax")
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
44 if version >= 508 || !exists("did_tex_syntax_inits")
45 let did_tex_syntax_inits = 1
47 command -nargs=+ HiLink hi link <args>
49 command -nargs=+ HiLink hi def link <args>
52 if exists("g:tex_tex") && !exists("g:tex_no_error")
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
61 let b:extfname=expand("%:e")
62 if exists("g:tex_stylish")
63 let b:tex_stylish= g:tex_stylish
64 elseif !exists("b:tex_stylish")
65 if b:extfname == "sty" || b:extfname == "cls" || b:extfname == "clo" || b:extfname == "dtx" || b:extfname == "ltx"
73 if !exists("g:tex_fold_enabled")
74 let g:tex_fold_enabled= 0
75 elseif g:tex_fold_enabled && !has("folding")
76 let g:tex_fold_enabled= 0
77 echomsg "Ignoring g:tex_fold_enabled=".g:tex_fold_enabled."; need to re-compile vim for +fold support"
79 if g:tex_fold_enabled && &fdm == "manual"
83 " (La)TeX keywords: only use the letters a-zA-Z {{{1
84 " but _ is the only one that causes problems.
99 syn cluster texCmdGroup contains=texCmdBody,texComment,texDefParm,texDelimiter,texDocType,texInput,texLength,texLigature,texMathDelim,texMathOper,texNewCmd,texNewEnv,texRefZone,texSection,texSectionMarker,texSectionName,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texURLZone,texAcroZone
100 if !exists("g:tex_no_error")
101 syn cluster texCmdGroup add=texMathError
103 syn cluster texEnvGroup contains=texMatcher,texMathDelim,texSpecialChar,texStatement
104 syn 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,texURLZone,texAcroZone
105 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,texURLZone,texAcroZone,@Spell
106 syn cluster texRefGroup contains=texMatcher,texComment,texDelimiter
107 if !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
117 syn cluster texMathZoneGroup add=@NoSpell
118 " following used in the \part \chapter \section \subsection \subsubsection
119 " \paragraph \subparagraph \author \title highlighting
120 syn cluster texDocGroup contains=texPartZone,@texPartGroup
121 syn cluster texPartGroup contains=texChapterZone,texSectionZone,texParaZone
122 syn cluster texChapterGroup contains=texSectionZone,texParaZone
123 syn cluster texSectionGroup contains=texSubSectionZone,texParaZone
124 syn cluster texSubSectionGroup contains=texSubSubSectionZone,texParaZone
125 syn cluster texSubSubSectionGroup contains=texParaZone
126 syn cluster texParaGroup contains=texSubParaZone
128 syn cluster texURLGroup contains=texMatcher,@NoSpell
129 syn cluster texAcroGroup contains=texMatcher,@NoSpell
131 " Try to flag {} and () mismatches: {{{1
132 if !exists("g:tex_no_error")
133 syn region texMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" contains=@texMatchGroup,texError
134 syn region texMatcher matchgroup=Delimiter start="\[" end="]" contains=@texMatchGroup,texError
136 syn region texMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" contains=@texMatchGroup
137 syn region texMatcher matchgroup=Delimiter start="\[" end="]" contains=@texMatchGroup
139 syn region texParen start="(" end=")" contains=@texMatchGroup,@Spell
140 if !exists("g:tex_no_error")
141 syn match texError "[}\])]"
143 if !exists("tex_no_math")
144 if !exists("g:tex_no_error")
145 syn match texMathError "}" contained
147 syn region texMathMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\}" end="}" end="%stopzone\>" contained contains=@texMathMatchGroup
150 " TeX/LaTeX keywords: {{{1
151 " Instead of trying to be All Knowing, I just match \..alphameric..
152 " Note that *.tex files may not have "@" in their \commands
153 if exists("g:tex_tex") || b:tex_stylish
154 syn match texStatement "\\[a-zA-Z@]\+"
156 syn match texStatement "\\\a\+"
157 if !exists("g:tex_no_error")
158 syn match texError "\\\a*@[a-zA-Z@]*"
162 " TeX/LaTeX delimiters: {{{1
163 syn match texDelimiter "&"
164 syn match texDelimiter "\\\\"
166 " Tex/Latex Options: {{{1
167 syn match texOption "[^\\]\zs#\d\+\|^#\d\+"
169 " texAccent (tnx to Karim Belabas) avoids annoying highlighting for accents: {{{1
171 syn match texAccent "\\[bcdvuH][^a-zA-Z@]"me=e-1
172 syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)[^a-zA-Z@]"me=e-1
174 syn match texAccent "\\[bcdvuH]\A"me=e-1
175 syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)\A"me=e-1
177 syn match texAccent "\\[bcdvuH]$"
178 syn match texAccent +\\[=^.\~"`']+
179 syn match texAccent +\\['=t'.c^ud"vb~Hr]{\a}+
180 syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)$"
182 " \begin{}/\end{} section markers: {{{1
183 syn match texSectionMarker "\\begin\>\|\\end\>" nextgroup=texSectionName
184 syn region texSectionName matchgroup=Delimiter start="{" end="}" contained nextgroup=texSectionModifier
185 syn region texSectionModifier matchgroup=Delimiter start="\[" end="]" contained
187 " \documentclass, \documentstyle, \usepackage: {{{1
188 syn match texDocType "\\documentclass\>\|\\documentstyle\>\|\\usepackage\>" nextgroup=texSectionName,texDocTypeArgs
189 syn region texDocTypeArgs matchgroup=Delimiter start="\[" end="]" contained nextgroup=texSectionName
191 " Preamble syntax-based folding support: {{{1
192 if g:tex_fold_enabled && has("folding")
193 syn region texPreamble transparent fold start='\zs\\documentclass\>' end='\ze\\begin{document}' contains=@texMatchGroup
197 syn match texInput "\\input\s\+[a-zA-Z/.0-9_^]\+"hs=s+7 contains=texStatement
198 syn match texInputFile "\\include\(graphics\|list\)\=\(\[.\{-}\]\)\=\s*{.\{-}}" contains=texStatement,texInputCurlies
199 syn match texInputFile "\\\(epsfig\|input\|usepackage\)\s*\(\[.*\]\)\={.\{-}}" contains=texStatement,texInputCurlies,texInputFileOpt
200 syn match texInputCurlies "[{}]" contained
201 syn region texInputFileOpt matchgroup=Delimiter start="\[" end="\]" contained
203 " Type Styles (LaTeX 2.09): {{{1
204 syn match texTypeStyle "\\rm\>"
205 syn match texTypeStyle "\\em\>"
206 syn match texTypeStyle "\\bf\>"
207 syn match texTypeStyle "\\it\>"
208 syn match texTypeStyle "\\sl\>"
209 syn match texTypeStyle "\\sf\>"
210 syn match texTypeStyle "\\sc\>"
211 syn match texTypeStyle "\\tt\>"
213 " Type Styles: attributes, commands, families, etc (LaTeX2E): {{{1
214 syn match texTypeStyle "\\textbf\>"
215 syn match texTypeStyle "\\textit\>"
216 syn match texTypeStyle "\\textmd\>"
217 syn match texTypeStyle "\\textrm\>"
218 syn match texTypeStyle "\\textsc\>"
219 syn match texTypeStyle "\\textsf\>"
220 syn match texTypeStyle "\\textsl\>"
221 syn match texTypeStyle "\\texttt\>"
222 syn match texTypeStyle "\\textup\>"
223 syn match texTypeStyle "\\emph\>"
225 syn match texTypeStyle "\\mathbb\>"
226 syn match texTypeStyle "\\mathbf\>"
227 syn match texTypeStyle "\\mathcal\>"
228 syn match texTypeStyle "\\mathfrak\>"
229 syn match texTypeStyle "\\mathit\>"
230 syn match texTypeStyle "\\mathnormal\>"
231 syn match texTypeStyle "\\mathrm\>"
232 syn match texTypeStyle "\\mathsf\>"
233 syn match texTypeStyle "\\mathtt\>"
235 syn match texTypeStyle "\\rmfamily\>"
236 syn match texTypeStyle "\\sffamily\>"
237 syn match texTypeStyle "\\ttfamily\>"
239 syn match texTypeStyle "\\itshape\>"
240 syn match texTypeStyle "\\scshape\>"
241 syn match texTypeStyle "\\slshape\>"
242 syn match texTypeStyle "\\upshape\>"
244 syn match texTypeStyle "\\bfseries\>"
245 syn match texTypeStyle "\\mdseries\>"
247 " Some type sizes: {{{1
248 syn match texTypeSize "\\tiny\>"
249 syn match texTypeSize "\\scriptsize\>"
250 syn match texTypeSize "\\footnotesize\>"
251 syn match texTypeSize "\\small\>"
252 syn match texTypeSize "\\normalsize\>"
253 syn match texTypeSize "\\large\>"
254 syn match texTypeSize "\\Large\>"
255 syn match texTypeSize "\\LARGE\>"
256 syn match texTypeSize "\\huge\>"
257 syn match texTypeSize "\\Huge\>"
259 " Spacecodes (TeX'isms): {{{1
260 " \mathcode`\^^@="2201 \delcode`\(="028300 \sfcode`\)=0 \uccode`X=`X \lccode`x=`x
261 syn match texSpaceCode "\\\(math\|cat\|del\|lc\|sf\|uc\)code`"me=e-1 nextgroup=texSpaceCodeChar
262 syn match texSpaceCodeChar "`\\\=.\(\^.\)\==\(\d\|\"\x\{1,6}\|`.\)" contained
264 " Sections, subsections, etc: {{{1
265 if g:tex_fold_enabled && has("folding")
266 syn region texDocZone matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}' fold contains=@texFoldGroup,@texDocGroup,@Spell
267 syn region texPartZone matchgroup=texSection start='\\part\>' end='\n\ze\s*\\part\>' fold contains=@texFoldGroup,@texPartGroup,@Spell
268 syn region texChapterZone matchgroup=texSection start='\\chapter\>' end='\n\ze\s*\\chapter\>' fold contains=@texFoldGroup,@texChapterGroup,@Spell
269 syn region texSectionZone matchgroup=texSection start='\\section\>' end='\n\ze\s*\\section\>' fold contains=@texFoldGroup,@texSectionGroup,@Spell
270 syn region texSubSectionZone matchgroup=texSection start='\\subsection\>' end='\n\ze\s*\\subsection\>' fold contains=@texFoldGroup,@texSubSectionGroup,@Spell
271 syn region texSubSubSectionZone matchgroup=texSection start='\\subsubsection\>' end='\n\ze\s*\\subsubsection\>' fold contains=@texFoldGroup,@texSubSubSectionGroup,@Spell
272 syn region texParaZone matchgroup=texSection start='\\paragraph\>' end='\n\ze\s*\\paragraph\>' fold contains=@texFoldGroup,@texParaGroup,@Spell
273 syn region texSubParaZone matchgroup=texSection start='\\subparagraph\>' end='\n\ze\s*\\subparagraph\>' fold contains=@texFoldGroup,@Spell
274 syn region texTitle matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}' fold contains=@texFoldGroup,@Spell
275 syn region texAbstract matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}' fold contains=@texFoldGroup,@Spell
277 syn region texDocZone matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}' contains=@texFoldGroup,@texDocGroup,@Spell
278 syn region texPartZone matchgroup=texSection start='\\part\>' end='\n\ze\s*\\part\>' contains=@texFoldGroup,@texPartGroup,@Spell
279 syn region texChapterZone matchgroup=texSection start='\\chapter\>' end='\n\ze\s*\\chapter\>' contains=@texFoldGroup,@texChapterGroup,@Spell
280 syn region texSectionZone matchgroup=texSection start='\\section\>' end='\n\ze\s*\\section\>' contains=@texFoldGroup,@texSectionGroup,@Spell
281 syn region texSubSectionZone matchgroup=texSection start='\\subsection\>' end='\n\ze\s*\\subsection\>' contains=@texFoldGroup,@texSubSectionGroup,@Spell
282 syn region texSubSubSectionZone matchgroup=texSection start='\\subsubsection\>' end='\n\ze\s*\\subsubsection\>' contains=@texFoldGroup,@texSubSubSectionGroup,@Spell
283 syn region texParaZone matchgroup=texSection start='\\paragraph\>' end='\n\ze\s*\\paragraph\>' contains=@texFoldGroup,@texParaGroup,@Spell
284 syn region texSubParaZone matchgroup=texSection start='\\subparagraph\>' end='\n\ze\s*\\subparagraph\>' contains=@texFoldGroup,@Spell
285 syn region texTitle matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}' contains=@texFoldGroup,@Spell
286 syn region texAbstract matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}' contains=@texFoldGroup,@Spell
289 " Bad Math (mismatched): {{{1
290 if !exists("tex_no_math")
291 syn match texBadMath "\\end\s*{\s*\(array\|gathered\|bBpvV]matrix\|split\|subequations\|smallmatrix\|xxalignat\)\s*}"
292 syn match texBadMath "\\end\s*{\s*\(align\|alignat\|displaymath\|displaymath\|eqnarray\|equation\|flalign\|gather\|math\|multline\|xalignat\)\*\=\s*}"
293 syn match texBadMath "\\[\])]"
297 if !exists("tex_no_math")
298 " TexNewMathZone: function creates a mathzone with the given suffix and mathzone name. {{{2
299 " Starred forms are created if starform is true. Starred
300 " forms have syntax group and synchronization groups with a
301 " "S" appended. Handles: cluster, syntax, sync, and HiLink.
302 fun! TexNewMathZone(sfx,mathzone,starform)
303 let grpname = "texMathZone".a:sfx
304 let syncname = "texSyncMathZone".a:sfx
305 exe "syn cluster texMathZones add=".grpname
306 exe 'syn region '.grpname.' start='."'".'\\begin\s*{\s*'.a:mathzone.'\s*}'."'".' end='."'".'\\end\s*{\s*'.a:mathzone.'\s*}'."'".' keepend contains=@texMathZoneGroup'
307 exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
308 exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
309 exe 'HiLink '.grpname.' texMath'
311 let grpname = "texMathZone".a:sfx.'S'
312 let syncname = "texSyncMathZone".a:sfx.'S'
313 exe "syn cluster texMathZones add=".grpname
314 exe 'syn region '.grpname.' start='."'".'\\begin\s*{\s*'.a:mathzone.'\*\s*}'."'".' end='."'".'\\end\s*{\s*'.a:mathzone.'\*\s*}'."'".' keepend contains=@texMathZoneGroup'
315 exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
316 exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
317 exe 'HiLink '.grpname.' texMath'
321 " Standard Math Zones: {{{2
322 call TexNewMathZone("A","align",1)
323 call TexNewMathZone("B","alignat",1)
324 call TexNewMathZone("C","displaymath",1)
325 call TexNewMathZone("D","eqnarray",1)
326 call TexNewMathZone("E","equation",1)
327 call TexNewMathZone("F","flalign",1)
328 call TexNewMathZone("G","gather",1)
329 call TexNewMathZone("H","math",1)
330 call TexNewMathZone("I","multline",1)
331 call TexNewMathZone("J","subequations",0)
332 call TexNewMathZone("K","xalignat",1)
333 call TexNewMathZone("L","xxalignat",0)
335 " Inline Math Zones: {{{2
336 syn region texMathZoneV matchgroup=Delimiter start="\\(" matchgroup=Delimiter end="\\)\|%stopzone\>" keepend contains=@texMathZoneGroup
337 syn region texMathZoneW matchgroup=Delimiter start="\\\[" matchgroup=Delimiter end="\\]\|%stopzone\>" keepend contains=@texMathZoneGroup
338 syn region texMathZoneX matchgroup=Delimiter start="\$" skip="\\\\\|\\\$" matchgroup=Delimiter end="\$" end="%stopzone\>" contains=@texMathZoneGroup
339 syn region texMathZoneY matchgroup=Delimiter start="\$\$" matchgroup=Delimiter end="\$\$" end="%stopzone\>" keepend contains=@texMathZoneGroup
340 syn region texMathZoneZ matchgroup=texStatement start="\\ensuremath\s*{" matchgroup=texStatement end="}" end="%stopzone\>" contains=@texMathZoneGroup
342 syn match texMathOper "[_^=]" contained
344 " \left..something.. and \right..something.. support: {{{2
345 syn match texMathDelimBad contained "\S"
346 syn match texMathDelim contained "\\\(left\|right\|[bB]igg\=[lr]\)\>" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad
347 syn match texMathDelim contained "\\\(left\|right\)arrow\>\|\<\([aA]rrow\|brace\)\=vert\>"
348 syn match texMathDelim contained "\\lefteqn\>"
349 syn match texMathDelimSet2 contained "\\" nextgroup=texMathDelimKey,texMathDelimBad
350 syn match texMathDelimSet1 contained "[<>()[\]|/.]\|\\[{}|]"
351 syn keyword texMathDelimKey contained backslash lceil lVert rgroup uparrow
352 syn keyword texMathDelimKey contained downarrow lfloor rangle rmoustache Uparrow
353 syn keyword texMathDelimKey contained Downarrow lgroup rbrace rvert updownarrow
354 syn keyword texMathDelimKey contained langle lmoustache rceil rVert Updownarrow
355 syn keyword texMathDelimKey contained lbrace lvert rfloor
358 " Special TeX characters ( \$ \& \% \# \{ \} \_ \S \P ) : {{{1
359 syn match texSpecialChar "\\[$&%#{}_]"
361 syn match texSpecialChar "\\[SP@][^a-zA-Z@]"me=e-1
363 syn match texSpecialChar "\\[SP@]\A"me=e-1
365 syn match texSpecialChar "\\\\"
366 if !exists("tex_no_math")
367 syn match texOnlyMath "[_^]"
369 syn match texSpecialChar "\^\^[0-9a-f]\{2}\|\^\^\S"
372 " Normal TeX LaTeX : %....
373 " Documented TeX Format: ^^A... -and- leading %s (only)
374 syn cluster texCommentGroup contains=texTodo,@Spell
376 syn keyword texTodo contained combak fixme todo xxx
378 if b:extfname == "dtx"
379 syn match texComment "\^\^A.*$" contains=@texCommentGroup
380 syn match texComment "^%\+" contains=@texCommentGroup
382 if g:tex_fold_enabled
383 " allows syntax-folding of 2 or more contiguous comment lines
384 " single-line comments are not folded
385 syn match texComment "%.*$" contains=@texCommentGroup
386 syn region texComment start="^\zs\s*%.*\_s*%" skip="^\s*%" end='^\ze\s*[^%]' fold
388 syn match texComment "%.*$" contains=@texCommentGroup
392 " Separate lines used for verb` and verb# so that the end conditions {{{1
393 " will appropriately terminate. Ideally vim would let me save a
394 " character from the start pattern and re-use it in the end-pattern.
395 syn region texZone start="\\begin{verbatim}" end="\\end{verbatim}\|%stopzone\>" contains=@Spell
397 syn region texZone start="\\begin{lstlisting}" end="\\end{lstlisting}\|%stopzone\>" contains=@Spell
399 syn region texZone start="\\begin{verbatimtab}" end="\\end{verbatimtab}\|%stopzone\>" contains=@Spell
400 syn region texZone start="\\begin{verbatimwrite}" end="\\end{verbatimwrite}\|%stopzone\>" contains=@Spell
401 syn region texZone start="\\begin{boxedverbatim}" end="\\end{boxedverbatim}\|%stopzone\>" contains=@Spell
403 syn region texZone start="\\verb\*\=`" end="`\|%stopzone\>"
404 syn region texZone start="\\verb\*\=#" end="#\|%stopzone\>"
407 syn region texZone start="\\verb\*\=\z([^\ta-zA-Z@]\)" end="\z1\|%stopzone\>"
409 syn region texZone start="\\verb\*\=\z([^\ta-zA-Z]\)" end="\z1\|%stopzone\>"
413 " Tex Reference Zones: {{{1
414 syn region texZone matchgroup=texStatement start="@samp{" end="}\|%stopzone\>" contains=@texRefGroup
415 syn region texRefZone matchgroup=texStatement start="\\nocite{" end="}\|%stopzone\>" contains=@texRefGroup
416 syn region texRefZone matchgroup=texStatement start="\\bibliography{" end="}\|%stopzone\>" contains=@texRefGroup
417 syn region texRefZone matchgroup=texStatement start="\\label{" end="}\|%stopzone\>" contains=@texRefGroup
418 syn region texRefZone matchgroup=texStatement start="\\\(page\|eq\)ref{" end="}\|%stopzone\>" contains=@texRefGroup
419 syn region texRefZone matchgroup=texStatement start="\\v\=ref{" end="}\|%stopzone\>" contains=@texRefGroup
420 syn match texRefZone '\\cite\%(al\)\=\%([tp]\*\=\)\=' nextgroup=texRefOption,texCite
421 syn match texRefZone '\\citetext' nextgroup=texRefOption,texFreeCite
422 syn region texRefOption contained matchgroup=Delimiter start='\[' end=']' contains=@texRefGroup nextgroup=texRefOption,texCite
423 syn region texCite contained matchgroup=Delimiter start='{' end='}' contains=@texRefGroup
424 syn region texFreeCite contained matchgroup=Delimiter start="{"rs=s+1 skip="\\\\\|\\[{}]" matchgroup=Delimiter end="}" contains=@texMatchGroup
426 " Handle newcommand, newenvironment : {{{1
427 syn match texNewCmd "\\newcommand\>" nextgroup=texCmdName skipwhite skipnl
428 syn region texCmdName contained matchgroup=Delimiter start="{"rs=s+1 end="}" nextgroup=texCmdArgs,texCmdBody skipwhite skipnl
429 syn region texCmdArgs contained matchgroup=Delimiter start="\["rs=s+1 end="]" nextgroup=texCmdBody skipwhite skipnl
430 syn region texCmdBody contained matchgroup=Delimiter start="{"rs=s+1 skip="\\\\\|\\[{}]" matchgroup=Delimiter end="}" contains=@texCmdGroup
431 syn match texNewEnv "\\newenvironment\>" nextgroup=texEnvName skipwhite skipnl
432 syn region texEnvName contained matchgroup=Delimiter start="{"rs=s+1 end="}" nextgroup=texEnvBgn skipwhite skipnl
433 syn region texEnvBgn contained matchgroup=Delimiter start="{"rs=s+1 end="}" nextgroup=texEnvEnd skipwhite skipnl contains=@texEnvGroup
434 syn region texEnvEnd contained matchgroup=Delimiter start="{"rs=s+1 end="}" skipwhite skipnl contains=@texEnvGroup
436 " Definitions/Commands: {{{1
437 syn match texDefCmd "\\def\>" nextgroup=texDefName skipwhite skipnl
439 syn match texDefName contained "\\[a-zA-Z@]\+" nextgroup=texDefParms,texCmdBody skipwhite skipnl
440 syn match texDefName contained "\\[^a-zA-Z@]" nextgroup=texDefParms,texCmdBody skipwhite skipnl
442 syn match texDefName contained "\\\a\+" nextgroup=texDefParms,texCmdBody skipwhite skipnl
443 syn match texDefName contained "\\\A" nextgroup=texDefParms,texCmdBody skipwhite skipnl
445 syn match texDefParms contained "#[^{]*" contains=texDefParm nextgroup=texCmdBody skipwhite skipnl
446 syn match texDefParm contained "#\d\+"
448 " Tex URL Zones: {{{1
449 syn region texURLZone matchgroup=texURLZone start="\\\%(url\|href\){" end="}\|%stopzone\>" contains=@texURLGroup
450 syn region texURLZone matchgroup=texURLZone start="\\burl\%(alt\)\={" end="}\|%stopzone\>" contains=@texURLGroup
451 syn region texURLZone matchgroup=texURLZone start="\\\%(link\|email\){" end="}\|%stopzone\>" contains=@texURLGroup
453 " Tex Acronym Zones: {{{1
454 syn region texAcroZone matchgroup=texAcroZone start="\\ac\%(fi\|[fls]\=p\=\)\*\={" end="}\|%stopzone\>" contains=@texAcroGroup
455 syn region texAcroZone matchgroup=texAcroZone start="\\ac\%(used\|[ls]u\*\=\){" end="}\|%stopzone\>" contains=@texAcroGroup
458 syn match texLength "\<\d\+\([.,]\d\+\)\=\s*\(true\)\=\s*\(bp\|cc\|cm\|dd\|em\|ex\|in\|mm\|pc\|pt\|sp\)\>"
460 " TeX String Delimiters: {{{1
461 syn match texString "\(``\|''\|,,\)"
463 " LaTeX synchronization: {{{1
464 syn sync maxlines=200
467 syn sync match texSyncStop groupthere NONE "%stopzone\>"
469 " Synchronization: {{{1
470 " The $..$ and $$..$$ make for impossible sync patterns
471 " (one can't tell if a "$$" starts or stops a math zone by itself)
472 " The following grouptheres coupled with minlines above
473 " help improve the odds of good syncing.
474 if !exists("tex_no_math")
475 syn sync match texSyncMathZoneA groupthere NONE "\\end{abstract}"
476 syn sync match texSyncMathZoneA groupthere NONE "\\end{center}"
477 syn sync match texSyncMathZoneA groupthere NONE "\\end{description}"
478 syn sync match texSyncMathZoneA groupthere NONE "\\end{enumerate}"
479 syn sync match texSyncMathZoneA groupthere NONE "\\end{itemize}"
480 syn sync match texSyncMathZoneA groupthere NONE "\\end{table}"
481 syn sync match texSyncMathZoneA groupthere NONE "\\end{tabular}"
482 syn sync match texSyncMathZoneA groupthere NONE "\\\(sub\)*section\>"
486 if did_tex_syntax_inits == 1
487 let did_tex_syntax_inits= 2
488 " TeX highlighting groups which should share similar highlighting
489 if !exists("g:tex_no_error")
490 if !exists("tex_no_math")
491 HiLink texBadMath texError
492 HiLink texMathDelimBad texError
493 HiLink texMathError texError
495 HiLink texOnlyMath texError
498 HiLink texError Error
501 HiLink texCite texRefZone
502 HiLink texDefCmd texDef
503 HiLink texDefName texDef
504 HiLink texDocType texCmdName
505 HiLink texDocTypeArgs texCmdArgs
506 HiLink texInputFileOpt texCmdArgs
507 HiLink texInputCurlies texDelimiter
508 HiLink texLigature texSpecialChar
509 if !exists("tex_no_math")
510 HiLink texMathDelimSet1 texMathDelim
511 HiLink texMathDelimSet2 texMathDelim
512 HiLink texMathDelimKey texMathDelim
513 HiLink texMathMatcher texMath
514 HiLink texMathZoneW texMath
515 HiLink texMathZoneX texMath
516 HiLink texMathZoneY texMath
517 HiLink texMathZoneZ texMath
519 HiLink texSectionMarker texCmdName
520 HiLink texSectionName texSection
521 HiLink texSpaceCode texStatement
522 HiLink texTypeSize texType
523 HiLink texTypeStyle texType
525 " Basic TeX highlighting groups
526 HiLink texAcroZone Special
527 HiLink texCmdArgs Number
528 HiLink texCmdName Statement
529 HiLink texComment Comment
530 HiLink texDef Statement
531 HiLink texDefParm Special
532 HiLink texDelimiter Delimiter
533 HiLink texInput Special
534 HiLink texInputFile Special
535 HiLink texLength Number
536 HiLink texMath Special
537 HiLink texMathDelim Statement
538 HiLink texMathOper Operator
539 HiLink texNewCmd Statement
540 HiLink texNewEnv Statement
541 HiLink texOption Number
542 HiLink texRefZone Special
543 HiLink texSection PreCondit
544 HiLink texSpaceCodeChar Special
545 HiLink texSpecialChar SpecialChar
546 HiLink texStatement Statement
547 HiLink texString String
550 HiLink texURLZone Special
551 HiLink texZone PreCondit
556 " Current Syntax: {{{1
558 let b:current_syntax = "tex"
559 " vim: ts=8 fdm=marker