]> git.madduck.net Git - etc/vim.git/blobdiff - .vim/syntax/tex.vim

madduck's git repository

Every one of the projects in this repository is available at the canonical URL git://git.madduck.net/madduck/pub/<projectpath> — see each project's metadata for the exact URL.

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.

SSH access, as well as push access can be individually arranged.

If you use my repositories frequently, consider adding the following snippet to ~/.gitconfig and using the third clone URL listed for each project:

[url "git://git.madduck.net/madduck/"]
  insteadOf = madduck:

fail softly if pathogen is not installed
[etc/vim.git] / .vim / syntax / tex.vim
index 72560a141a3f5ce166c38bcb9f7b71f792f630d6..14e1bd6e3341a42ef6c8cd922439726a6021936b 100644 (file)
@@ -1,8 +1,559 @@
-syntax match TexMySection "^\\section{.*}"
-syntax match TexMySubSection "^\\subsection{.*}"
-syntax match TexMySubSubSection "^\\subsubsection{.*}"
-syntax match TexMyParagraph "^\\paragraph{.*}"
-highlight TexMySection ctermbg=black ctermfg=white cterm=bold term=reverse
-highlight TexMySubSection ctermbg=blue ctermfg=white cterm=bold term=reverse
-highlight TexMySubSubSection ctermbg=cyan ctermfg=black cterm=bold term=reverse
-highlight TexMyParagraph ctermbg=none ctermfg=blue cterm=bold term=reverse
+" 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,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