" Vim syntax file
" Language: TeX
" Maintainer: Dr. Charles E. Campbell, Jr. <NdrchipO@ScampbellPfamily.AbizM>
" Last Change: Feb 27, 2007
" Version: 37
" URL: http://mysite.verizon.net/astronaut/vim/index.html#vimlinks_syntax
"
" Notes: {{{1
"
" 1. If you have a \begin{verbatim} that appears to overrun its boundaries,
" use %stopzone.
"
" 2. Run-on equations ($..$ and $$..$$, particularly) can also be stopped
" by suitable use of %stopzone.
"
" 3. If you have a slow computer, you may wish to modify
"
" syn sync maxlines=200
" syn sync minlines=50
"
" to values that are more to your liking.
"
" 4. There is no match-syncing for $...$ and $$...$$; hence large
" equation blocks constructed that way may exhibit syncing problems.
" (there's no difference between begin/end patterns)
"
" 5. If you have the variable "g:tex_no_error" defined then none of the
" lexical error-checking will be done.
"
" ie. let g:tex_no_error=1
" Version Clears: {{{1
" For version 5.x: Clear all syntax items
" For version 6.x: Quit when a syntax file was already loaded
if version < 600
syntax clear
elseif exists("b:current_syntax")
finish
endif
" Define the default highlighting. {{{1
" For version 5.7 and earlier: only when not done already
" For version 5.8 and later: only when an item doesn't have highlighting yet
if version >= 508 || !exists("did_tex_syntax_inits")
let did_tex_syntax_inits = 1
if version < 508
command -nargs=+ HiLink hi link <args>
else
command -nargs=+ HiLink hi def link <args>
endif
endif
if exists("g:tex_tex") && !exists("g:tex_no_error")
let g:tex_no_error= 1
endif
" Determine whether or not to use "*.sty" mode {{{1
" The user may override the normal determination by setting
" g:tex_stylish to 1 (for "*.sty" mode)
" or to 0 else (normal "*.tex" mode)
" or on a buffer-by-buffer basis with b:tex_stylish
let b:extfname=expand("%:e")
if exists("g:tex_stylish")
let b:tex_stylish= g:tex_stylish
elseif !exists("b:tex_stylish")
if b:extfname == "sty" || b:extfname == "cls" || b:extfname == "clo" || b:extfname == "dtx" || b:extfname == "ltx"
let b:tex_stylish= 1
else
let b:tex_stylish= 0
endif
endif
" handle folding {{{1
if !exists("g:tex_fold_enabled")
let g:tex_fold_enabled= 0
elseif g:tex_fold_enabled && !has("folding")
let g:tex_fold_enabled= 0
echomsg "Ignoring g:tex_fold_enabled=".g:tex_fold_enabled."; need to re-compile vim for +fold support"
endif
if g:tex_fold_enabled && &fdm == "manual"
set fdm=syntax
endif
" (La)TeX keywords: only use the letters a-zA-Z {{{1
" but _ is the only one that causes problems.
if version < 600
set isk-=_
if b:tex_stylish
set isk+=@
endif
else
setlocal isk-=_
if b:tex_stylish
setlocal isk+=@
endif
endif
" Clusters: {{{1
" --------
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
if !exists("g:tex_no_error")
syn cluster texCmdGroup add=texMathError
endif
syn cluster texEnvGroup contains=texMatcher,texMathDelim,texSpecialChar,texStatement
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
syn cluster texMatchGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texMatcher,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,texInputFile,texOption,@Spell
syn cluster texRefGroup contains=texMatcher,texComment,texDelimiter
if !exists("tex_no_math")
syn cluster texMathZones contains=texMathZoneV,texMathZoneW,texMathZoneX,texMathZoneY,texMathZoneZ
syn cluster texMatchGroup add=@texMathZones
syn cluster texMathDelimGroup contains=texMathDelimBad,texMathDelimKey,texMathDelimSet1,texMathDelimSet2
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
syn cluster texMathZoneGroup contains=texComment,texDelimiter,texLength,texMathDelim,texMathMatcher,texMathOper,texRefZone,texSpecialChar,texStatement,texTypeSize,texTypeStyle
if !exists("g:tex_no_error")
syn cluster texMathMatchGroup add=texMathError
syn cluster texMathZoneGroup add=texMathError
endif
syn cluster texMathZoneGroup add=@NoSpell
" following used in the \part \chapter \section \subsection \subsubsection
" \paragraph \subparagraph \author \title highlighting
syn cluster texDocGroup contains=texPartZone,@texPartGroup
syn cluster texPartGroup contains=texChapterZone,texSectionZone,texParaZone
syn cluster texChapterGroup contains=texSectionZone,texParaZone
syn cluster texSectionGroup contains=texSubSectionZone,texParaZone
syn cluster texSubSectionGroup contains=texSubSubSectionZone,texParaZone
syn cluster texSubSubSectionGroup contains=texParaZone
syn cluster texParaGroup contains=texSubParaZone
endif
" Try to flag {} and () mismatches: {{{1
if !exists("g:tex_no_error")
syn region texMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" contains=@texMatchGroup,texError
syn region texMatcher matchgroup=Delimiter start="\[" end="]" contains=@texMatchGroup,texError
else
syn region texMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" contains=@texMatchGroup
syn region texMatcher matchgroup=Delimiter start="\[" end="]" contains=@texMatchGroup
endif
syn region texParen start="(" end=")" contains=@texMatchGroup,@Spell
if !exists("g:tex_no_error")
syn match texError "[}\])]"
endif
if !exists("tex_no_math")
if !exists("g:tex_no_error")
syn match texMathError "}" contained
endif
syn region texMathMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\}" end="}" end="%stopzone\>" contained contains=@texMathMatchGroup
endif
" TeX/LaTeX keywords: {{{1
" Instead of trying to be All Knowing, I just match \..alphameric..
" Note that *.tex files may not have "@" in their \commands
if exists("g:tex_tex") || b:tex_stylish
syn match texStatement "\\[a-zA-Z@]\+"
else
syn match texStatement "\\\a\+"
if !exists("g:tex_no_error")
syn match texError "\\\a*@[a-zA-Z@]*"
endif
endif
" TeX/LaTeX delimiters: {{{1
syn match texDelimiter "&"
syn match texDelimiter "\\\\"
" Tex/Latex Options: {{{1
syn match texOption "[^\\]\zs#\d\+\|^#\d\+"
" texAccent (tnx to Karim Belabas) avoids annoying highlighting for accents: {{{1
if b:tex_stylish
syn match texAccent "\\[bcdvuH][^a-zA-Z@]"me=e-1
syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)[^a-zA-Z@]"me=e-1
else
syn match texAccent "\\[bcdvuH]\A"me=e-1
syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)\A"me=e-1
endif
syn match texAccent "\\[bcdvuH]$"
syn match texAccent +\\[=^.\~"`']+
syn match texAccent +\\['=t'.c^ud"vb~Hr]{\a}+
syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)$"
" \begin{}/\end{} section markers: {{{1
syn match texSectionMarker "\\begin\>\|\\end\>" nextgroup=texSectionName
syn region texSectionName matchgroup=Delimiter start="{" end="}" contained nextgroup=texSectionModifier
syn region texSectionModifier matchgroup=Delimiter start="\[" end="]" contained
" \documentclass, \documentstyle, \usepackage: {{{1
syn match texDocType "\\documentclass\>\|\\documentstyle\>\|\\usepackage\>" nextgroup=texSectionName,texDocTypeArgs
syn region texDocTypeArgs matchgroup=Delimiter start="\[" end="]" contained nextgroup=texSectionName
" Preamble syntax-based folding support: {{{1
if g:tex_fold_enabled && has("folding")
syn region texPreamble transparent fold start='\zs\\documentclass\>' end='\ze\\begin{document}' contains=@texMatchGroup
endif
" TeX input: {{{1
syn match texInput "\\input\s\+[a-zA-Z/.0-9_^]\+"hs=s+7 contains=texStatement
syn match texInputFile "\\include\(graphics\|list\)\=\(\[.\{-}\]\)\=\s*{.\{-}}" contains=texStatement,texInputCurlies
syn match texInputFile "\\\(epsfig\|input\|usepackage\)\s*\(\[.*\]\)\={.\{-}}" contains=texStatement,texInputCurlies,texInputFileOpt
syn match texInputCurlies "[{}]" contained
syn region texInputFileOpt matchgroup=Delimiter start="\[" end="\]" contained
" Type Styles (LaTeX 2.09): {{{1
syn match texTypeStyle "\\rm\>"
syn match texTypeStyle "\\em\>"
syn match texTypeStyle "\\bf\>"
syn match texTypeStyle "\\it\>"
syn match texTypeStyle "\\sl\>"
syn match texTypeStyle "\\sf\>"
syn match texTypeStyle "\\sc\>"
syn match texTypeStyle "\\tt\>"
" Type Styles: attributes, commands, families, etc (LaTeX2E): {{{1
syn match texTypeStyle "\\textbf\>"
syn match texTypeStyle "\\textit\>"
syn match texTypeStyle "\\textmd\>"
syn match texTypeStyle "\\textrm\>"
syn match texTypeStyle "\\textsc\>"
syn match texTypeStyle "\\textsf\>"
syn match texTypeStyle "\\textsl\>"
syn match texTypeStyle "\\texttt\>"
syn match texTypeStyle "\\textup\>"
syn match texTypeStyle "\\emph\>"
syn match texTypeStyle "\\mathbb\>"
syn match texTypeStyle "\\mathbf\>"
syn match texTypeStyle "\\mathcal\>"
syn match texTypeStyle "\\mathfrak\>"
syn match texTypeStyle "\\mathit\>"
syn match texTypeStyle "\\mathnormal\>"
syn match texTypeStyle "\\mathrm\>"
syn match texTypeStyle "\\mathsf\>"
syn match texTypeStyle "\\mathtt\>"
syn match texTypeStyle "\\rmfamily\>"
syn match texTypeStyle "\\sffamily\>"
syn match texTypeStyle "\\ttfamily\>"
syn match texTypeStyle "\\itshape\>"
syn match texTypeStyle "\\scshape\>"
syn match texTypeStyle "\\slshape\>"
syn match texTypeStyle "\\upshape\>"
syn match texTypeStyle "\\bfseries\>"
syn match texTypeStyle "\\mdseries\>"
" Some type sizes: {{{1
syn match texTypeSize "\\tiny\>"
syn match texTypeSize "\\scriptsize\>"
syn match texTypeSize "\\footnotesize\>"
syn match texTypeSize "\\small\>"
syn match texTypeSize "\\normalsize\>"
syn match texTypeSize "\\large\>"
syn match texTypeSize "\\Large\>"
syn match texTypeSize "\\LARGE\>"
syn match texTypeSize "\\huge\>"
syn match texTypeSize "\\Huge\>"
" Spacecodes (TeX'isms): {{{1
" \mathcode`\^^@="2201 \delcode`\(="028300 \sfcode`\)=0 \uccode`X=`X \lccode`x=`x
syn match texSpaceCode "\\\(math\|cat\|del\|lc\|sf\|uc\)code`"me=e-1 nextgroup=texSpaceCodeChar
syn match texSpaceCodeChar "`\\\=.\(\^.\)\==\(\d\|\"\x\{1,6}\|`.\)" contained
" Sections, subsections, etc: {{{1
if g:tex_fold_enabled && has("folding")
syn region texDocZone matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}' fold contains=@texFoldGroup,@texDocGroup,@Spell
syn region texPartZone matchgroup=texSection start='\\part\>' end='\n\ze\s*\\part\>' fold contains=@texFoldGroup,@texPartGroup,@Spell
syn region texChapterZone matchgroup=texSection start='\\chapter\>' end='\n\ze\s*\\chapter\>' fold contains=@texFoldGroup,@texChapterGroup,@Spell
syn region texSectionZone matchgroup=texSection start='\\section\>' end='\n\ze\s*\\section\>' fold contains=@texFoldGroup,@texSectionGroup,@Spell
syn region texSubSectionZone matchgroup=texSection start='\\subsection\>' end='\n\ze\s*\\subsection\>' fold contains=@texFoldGroup,@texSubSectionGroup,@Spell
syn region texSubSubSectionZone matchgroup=texSection start='\\subsubsection\>' end='\n\ze\s*\\subsubsection\>' fold contains=@texFoldGroup,@texSubSubSectionGroup,@Spell
syn region texParaZone matchgroup=texSection start='\\paragraph\>' end='\n\ze\s*\\paragraph\>' fold contains=@texFoldGroup,@texParaGroup,@Spell
syn region texSubParaZone matchgroup=texSection start='\\subparagraph\>' end='\n\ze\s*\\subparagraph\>' fold contains=@texFoldGroup,@Spell
syn region texTitle matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}' fold contains=@texFoldGroup,@Spell
syn region texAbstract matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}' fold contains=@texFoldGroup,@Spell
else
syn region texDocZone matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}' contains=@texFoldGroup,@texDocGroup,@Spell
syn region texPartZone matchgroup=texSection start='\\part\>' end='\n\ze\s*\\part\>' contains=@texFoldGroup,@texPartGroup,@Spell
syn region texChapterZone matchgroup=texSection start='\\chapter\>' end='\n\ze\s*\\chapter\>' contains=@texFoldGroup,@texChapterGroup,@Spell
syn region texSectionZone matchgroup=texSection start='\\section\>' end='\n\ze\s*\\section\>' contains=@texFoldGroup,@texSectionGroup,@Spell
syn region texSubSectionZone matchgroup=texSection start='\\subsection\>' end='\n\ze\s*\\subsection\>' contains=@texFoldGroup,@texSubSectionGroup,@Spell
syn region texSubSubSectionZone matchgroup=texSection start='\\subsubsection\>' end='\n\ze\s*\\subsubsection\>' contains=@texFoldGroup,@texSubSubSectionGroup,@Spell
syn region texParaZone matchgroup=texSection start='\\paragraph\>' end='\n\ze\s*\\paragraph\>' contains=@texFoldGroup,@texParaGroup,@Spell
syn region texSubParaZone matchgroup=texSection start='\\subparagraph\>' end='\n\ze\s*\\subparagraph\>' contains=@texFoldGroup,@Spell
syn region texTitle matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}' contains=@texFoldGroup,@Spell
syn region texAbstract matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}' contains=@texFoldGroup,@Spell
endif
" Bad Math (mismatched): {{{1
if !exists("tex_no_math")
syn match texBadMath "\\end\s*{\s*\(array\|gathered\|bBpvV]matrix\|split\|subequations\|smallmatrix\|xxalignat\)\s*}"
syn match texBadMath "\\end\s*{\s*\(align\|alignat\|displaymath\|displaymath\|eqnarray\|equation\|flalign\|gather\|math\|multline\|xalignat\)\*\=\s*}"
syn match texBadMath "\\[\])]"
endif
" Math Zones: {{{1
if !exists("tex_no_math")
" TexNewMathZone: function creates a mathzone with the given suffix and mathzone name. {{{2
" Starred forms are created if starform is true. Starred
" forms have syntax group and synchronization groups with a
" "S" appended. Handles: cluster, syntax, sync, and HiLink.
fun! TexNewMathZone(sfx,mathzone,starform)
let grpname = "texMathZone".a:sfx
let syncname = "texSyncMathZone".a:sfx
exe "syn cluster texMathZones add=".grpname
exe 'syn region '.grpname.' start='."'".'\\begin\s*{\s*'.a:mathzone.'\s*}'."'".' end='."'".'\\end\s*{\s*'.a:mathzone.'\s*}'."'".' keepend contains=@texMathZoneGroup'
exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
exe 'HiLink '.grpname.' texMath'
if a:starform
let grpname = "texMathZone".a:sfx.'S'
let syncname = "texSyncMathZone".a:sfx.'S'
exe "syn cluster texMathZones add=".grpname
exe 'syn region '.grpname.' start='."'".'\\begin\s*{\s*'.a:mathzone.'\*\s*}'."'".' end='."'".'\\end\s*{\s*'.a:mathzone.'\*\s*}'."'".' keepend contains=@texMathZoneGroup'
exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
exe 'HiLink '.grpname.' texMath'
endif
endfun
" Standard Math Zones: {{{2
call TexNewMathZone("A","align",1)
call TexNewMathZone("B","alignat",1)
call TexNewMathZone("C","displaymath",1)
call TexNewMathZone("D","eqnarray",1)
call TexNewMathZone("E","equation",1)
call TexNewMathZone("F","flalign",1)
call TexNewMathZone("G","gather",1)
call TexNewMathZone("H","math",1)
call TexNewMathZone("I","multline",1)
call TexNewMathZone("J","subequations",0)
call TexNewMathZone("K","xalignat",1)
call TexNewMathZone("L","xxalignat",0)
" Inline Math Zones: {{{2
syn region texMathZoneV matchgroup=Delimiter start="\\(" matchgroup=Delimiter end="\\)\|%stopzone\>" keepend contains=@texMathZoneGroup
syn region texMathZoneW matchgroup=Delimiter start="\\\[" matchgroup=Delimiter end="\\]\|%stopzone\>" keepend contains=@texMathZoneGroup
syn region texMathZoneX matchgroup=Delimiter start="\$" skip="\\\\\|\\\$" matchgroup=Delimiter end="\$" end="%stopzone\>" contains=@texMathZoneGroup
syn region texMathZoneY matchgroup=Delimiter start="\$\$" matchgroup=Delimiter end="\$\$" end="%stopzone\>" keepend contains=@texMathZoneGroup
syn region texMathZoneZ matchgroup=texStatement start="\\ensuremath\s*{" matchgroup=texStatement end="}" end="%stopzone\>" contains=@texMathZoneGroup
syn match texMathOper "[_^=]" contained
" \left..something.. and \right..something.. support: {{{2
syn match texMathDelimBad contained "\S"
syn match texMathDelim contained "\\\(left\|right\|[bB]igg\=[lr]\)\>" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad
syn match texMathDelim contained "\\\(left\|right\)arrow\>\|\<\([aA]rrow\|brace\)\=vert\>"
syn match texMathDelim contained "\\lefteqn\>"
syn match texMathDelimSet2 contained "\\" nextgroup=texMathDelimKey,texMathDelimBad
syn match texMathDelimSet1 contained "[<>()[\]|/.]\|\\[{}|]"
syn keyword texMathDelimKey contained backslash lceil lVert rgroup uparrow
syn keyword texMathDelimKey contained downarrow lfloor rangle rmoustache Uparrow
syn keyword texMathDelimKey contained Downarrow lgroup rbrace rvert updownarrow
syn keyword texMathDelimKey contained langle lmoustache rceil rVert Updownarrow
syn keyword texMathDelimKey contained lbrace lvert rfloor
endif
" Special TeX characters ( \$ \& \% \# \{ \} \_ \S \P ) : {{{1
syn match texSpecialChar "\\[$&%#{}_]"
if b:tex_stylish
syn match texSpecialChar "\\[SP@][^a-zA-Z@]"me=e-1
else
syn match texSpecialChar "\\[SP@]\A"me=e-1
endif
syn match texSpecialChar "\\\\"
if !exists("tex_no_math")
syn match texOnlyMath "[_^]"
endif
syn match texSpecialChar "\^\^[0-9a-f]\{2}\|\^\^\S"
" Comments: {{{1
" Normal TeX LaTeX : %....
" Documented TeX Format: ^^A... -and- leading %s (only)
syn cluster texCommentGroup contains=texTodo,@Spell
syn case ignore
syn keyword texTodo contained combak fixme todo xxx
syn case match
if b:extfname == "dtx"
syn match texComment "\^\^A.*$" contains=@texCommentGroup
syn match texComment "^%\+" contains=@texCommentGroup
else
if g:tex_fold_enabled
" allows syntax-folding of 2 or more contiguous comment lines
" single-line comments are not folded
syn match texComment "%.*$" contains=@texCommentGroup
syn region texComment start="^\zs\s*%.*\_s*%" skip="^\s*%" end='^\ze\s*[^%]' fold
else
syn match texComment "%.*$" contains=@texCommentGroup
endif
endif
" Separate lines used for verb` and verb# so that the end conditions {{{1
" will appropriately terminate. Ideally vim would let me save a
" character from the start pattern and re-use it in the end-pattern.
syn region texZone start="\\begin{verbatim}" end="\\end{verbatim}\|%stopzone\>" contains=@Spell
" listings package:
syn region texZone start="\\begin{lstlisting}" end="\\end{lstlisting}\|%stopzone\>" contains=@Spell
" moreverb package:
syn region texZone start="\\begin{verbatimtab}" end="\\end{verbatimtab}\|%stopzone\>" contains=@Spell
syn region texZone start="\\begin{verbatimwrite}" end="\\end{verbatimwrite}\|%stopzone\>" contains=@Spell
syn region texZone start="\\begin{boxedverbatim}" end="\\end{boxedverbatim}\|%stopzone\>" contains=@Spell
if version < 600
syn region texZone start="\\verb\*\=`" end="`\|%stopzone\>"
syn region texZone start="\\verb\*\=#" end="#\|%stopzone\>"
else
if b:tex_stylish
syn region texZone start="\\verb\*\=\z([^\ta-zA-Z@]\)" end="\z1\|%stopzone\>"
else
syn region texZone start="\\verb\*\=\z([^\ta-zA-Z]\)" end="\z1\|%stopzone\>"
endif
endif
" Tex Reference Zones: {{{1
syn region texZone matchgroup=texStatement start="@samp{" end="}\|%stopzone\>" contains=@texRefGroup
syn region texRefZone matchgroup=texStatement start="\\nocite{" end="}\|%stopzone\>" contains=@texRefGroup
syn region texRefZone matchgroup=texStatement start="\\bibliography{" end="}\|%stopzone\>" contains=@texRefGroup
syn region texRefZone matchgroup=texStatement start="\\label{" end="}\|%stopzone\>" contains=@texRefGroup
syn region texRefZone matchgroup=texStatement start="\\\(page\|eq\)ref{" end="}\|%stopzone\>" contains=@texRefGroup
syn region texRefZone matchgroup=texStatement start="\\v\=ref{" end="}\|%stopzone\>" contains=@texRefGroup
syn match texRefZone '\\cite\%([tp]\*\=\)\=' nextgroup=texRefOption,texCite
syn region texRefOption contained matchgroup=Delimiter start='\[' end=']' contains=@texRefGroup nextgroup=texRefOption,texCite
syn region texCite contained matchgroup=Delimiter start='{' end='}' contains=@texRefGroup
" Handle newcommand, newenvironment : {{{1
syn match texNewCmd "\\newcommand\>" nextgroup=texCmdName skipwhite skipnl
syn region texCmdName contained matchgroup=Delimiter start="{"rs=s+1 end="}" nextgroup=texCmdArgs,texCmdBody skipwhite skipnl
syn region texCmdArgs contained matchgroup=Delimiter start="\["rs=s+1 end="]" nextgroup=texCmdBody skipwhite skipnl
syn region texCmdBody contained matchgroup=Delimiter start="{"rs=s+1 skip="\\\\\|\\[{}]" matchgroup=Delimiter end="}" contains=@texCmdGroup
syn match texNewEnv "\\newenvironment\>" nextgroup=texEnvName skipwhite skipnl
syn region texEnvName contained matchgroup=Delimiter start="{"rs=s+1 end="}" nextgroup=texEnvBgn skipwhite skipnl
syn region texEnvBgn contained matchgroup=Delimiter start="{"rs=s+1 end="}" nextgroup=texEnvEnd skipwhite skipnl contains=@texEnvGroup
syn region texEnvEnd contained matchgroup=Delimiter start="{"rs=s+1 end="}" skipwhite skipnl contains=@texEnvGroup
" Definitions/Commands: {{{1
syn match texDefCmd "\\def\>" nextgroup=texDefName skipwhite skipnl
if b:tex_stylish
syn match texDefName contained "\\[a-zA-Z@]\+" nextgroup=texDefParms,texCmdBody skipwhite skipnl
syn match texDefName contained "\\[^a-zA-Z@]" nextgroup=texDefParms,texCmdBody skipwhite skipnl
else
syn match texDefName contained "\\\a\+" nextgroup=texDefParms,texCmdBody skipwhite skipnl
syn match texDefName contained "\\\A" nextgroup=texDefParms,texCmdBody skipwhite skipnl
endif
syn match texDefParms contained "#[^{]*" contains=texDefParm nextgroup=texCmdBody skipwhite skipnl
syn match texDefParm contained "#\d\+"
" TeX Lengths: {{{1
syn match texLength "\<\d\+\([.,]\d\+\)\=\s*\(true\)\=\s*\(bp\|cc\|cm\|dd\|em\|ex\|in\|mm\|pc\|pt\|sp\)\>"
" TeX String Delimiters: {{{1
syn match texString "\(``\|''\|,,\)"
" LaTeX synchronization: {{{1
syn sync maxlines=200
syn sync minlines=50
syn sync match texSyncStop groupthere NONE "%stopzone\>"
" Synchronization: {{{1
" The $..$ and $$..$$ make for impossible sync patterns
" (one can't tell if a "$$" starts or stops a math zone by itself)
" The following grouptheres coupled with minlines above
" help improve the odds of good syncing.
if !exists("tex_no_math")
syn sync match texSyncMathZoneA groupthere NONE "\\end{abstract}"
syn sync match texSyncMathZoneA groupthere NONE "\\end{center}"
syn sync match texSyncMathZoneA groupthere NONE "\\end{description}"
syn sync match texSyncMathZoneA groupthere NONE "\\end{enumerate}"
syn sync match texSyncMathZoneA groupthere NONE "\\end{itemize}"
syn sync match texSyncMathZoneA groupthere NONE "\\end{table}"
syn sync match texSyncMathZoneA groupthere NONE "\\end{tabular}"
syn sync match texSyncMathZoneA groupthere NONE "\\\(sub\)*section\>"
endif
" Highlighting: {{{1
if did_tex_syntax_inits == 1
let did_tex_syntax_inits= 2
" TeX highlighting groups which should share similar highlighting
if !exists("g:tex_no_error")
if !exists("tex_no_math")
HiLink texBadMath texError
HiLink texMathDelimBad texError
HiLink texMathError texError
if !b:tex_stylish
HiLink texOnlyMath texError
endif
endif
HiLink texError Error
endif
HiLink texCite texRefZone
HiLink texDefCmd texDef
HiLink texDefName texDef
HiLink texDocType texCmdName
HiLink texDocTypeArgs texCmdArgs
HiLink texInputFileOpt texCmdArgs
HiLink texInputCurlies texDelimiter
HiLink texLigature texSpecialChar
if !exists("tex_no_math")
HiLink texMathDelimSet1 texMathDelim
HiLink texMathDelimSet2 texMathDelim
HiLink texMathDelimKey texMathDelim
HiLink texMathMatcher texMath
HiLink texMathZoneW texMath
HiLink texMathZoneX texMath
HiLink texMathZoneY texMath
HiLink texMathZoneZ texMath
endif
HiLink texSectionMarker texCmdName
HiLink texSectionName texSection
HiLink texSpaceCode texStatement
HiLink texTypeSize texType
HiLink texTypeStyle texType
" Basic TeX highlighting groups
HiLink texCmdArgs Number
HiLink texCmdName Statement
HiLink texComment Comment
HiLink texDef Statement
HiLink texDefParm Special
HiLink texDelimiter Delimiter
HiLink texInput Special
HiLink texInputFile Special
HiLink texLength Number
HiLink texMath Special
HiLink texMathDelim Statement
HiLink texMathOper Operator
HiLink texNewCmd Statement
HiLink texNewEnv Statement
HiLink texOption Number
HiLink texRefZone Special
HiLink texSection PreCondit
HiLink texSpaceCodeChar Special
HiLink texSpecialChar SpecialChar
HiLink texStatement Statement
HiLink texString String
HiLink texTodo Todo
HiLink texType Type
HiLink texZone PreCondit
delcommand HiLink
endif
" Current Syntax: {{{1
unlet b:extfname
let b:current_syntax = "tex"
" vim: ts=8 fdm=marker
|