" Vim syntax file " Language: TeX " Maintainer: Dr. Charles E. Campbell, Jr. " 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 else command -nargs=+ HiLink hi def link 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,texURLZone,texAcroZone 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,texURLZone,texAcroZone 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 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 syn cluster texURLGroup contains=texMatcher,@NoSpell syn cluster texAcroGroup contains=texMatcher,@NoSpell " 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,@NoSpell 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 '\\[cC]ite\%(\%(al\)\=\%([tp]\*\=\)\|num\|author\|year\|yearpar\|fullauthor\)\=' nextgroup=texRefOption,texCite syn match texRefZone '\\[cC]itetext' nextgroup=texRefOption,texFreeCite syn region texRefOption contained matchgroup=Delimiter start='\[' end=']' contains=@texRefGroup,texCite nextgroup=texRefOption,texCite syn region texCite contained matchgroup=Delimiter start='{' end='}' contains=@texRefGroup syn region texFreeCite contained matchgroup=Delimiter start="{"rs=s+1 skip="\\\\\|\\[{}]" matchgroup=Delimiter end="}" contains=@texMatchGroup " 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 URL Zones: {{{1 syn region texURLZone matchgroup=texURLZone start="\\\%(url\|href\){" end="}\|%stopzone\>" contains=@texURLGroup syn region texURLZone matchgroup=texURLZone start="\\burl\%(alt\)\={" end="}\|%stopzone\>" contains=@texURLGroup syn region texURLZone matchgroup=texURLZone start="\\\%(link\|email\){" end="}\|%stopzone\>" contains=@texURLGroup " Tex Acronym Zones: {{{1 syn region texAcroZone matchgroup=texAcroZone start="\\ac\%(fi\|[fls]\=p\=\)\*\={" end="}\|%stopzone\>" contains=@texAcroGroup syn region texAcroZone matchgroup=texAcroZone start="\\ac\%(used\|[ls]u\*\=\){" end="}\|%stopzone\>" contains=@texAcroGroup " 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 texAcroZone Special 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 texURLZone Special HiLink texZone PreCondit delcommand HiLink endif " Current Syntax: {{{1 unlet b:extfname let b:current_syntax = "tex" " vim: ts=8 fdm=marker