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