1" Vim syntax file 2" Language: TeX 3" Maintainer: Charles E. Campbell <[email protected]> 4" Last Change: Jun 24, 2013 5" Version: 79 6" URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_TEX 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 40let s:keepcpo= &cpo 41set cpo&vim 42scriptencoding utf-8 43 44" Define the default highlighting. {{{1 45" For version 5.7 and earlier: only when not done already 46" For version 5.8 and later: only when an item doesn't have highlighting yet 47if version >= 508 || !exists("did_tex_syntax_inits") 48 let did_tex_syntax_inits = 1 49 if version < 508 50 command -nargs=+ HiLink hi link <args> 51 else 52 command -nargs=+ HiLink hi def link <args> 53 endif 54endif 55if exists("g:tex_no_error") && g:tex_no_error 56 let s:tex_no_error= 1 57endif 58 59" by default, enable all region-based highlighting 60let s:tex_fast= "bcmMprsSvV" 61if exists("g:tex_fast") 62 if type(g:tex_fast) != 1 63 " g:tex_fast exists and is not a string, so 64 " turn off all optional region-based highighting 65 let s:tex_fast= "" 66 else 67 let s:tex_fast= g:tex_fast 68 endif 69 let s:tex_no_error= 1 70else 71 let s:tex_fast= "bcmMprsSvV" 72endif 73 74" let user determine which classes of concealment will be supported 75" a=accents/ligatures d=delimiters m=math symbols g=Greek s=superscripts/subscripts 76if !exists("g:tex_conceal") 77 let s:tex_conceal= 'abdmgsS' 78else 79 let s:tex_conceal= g:tex_conceal 80endif 81 82" Determine whether or not to use "*.sty" mode {{{1 83" The user may override the normal determination by setting 84" g:tex_stylish to 1 (for "*.sty" mode) 85" or to 0 else (normal "*.tex" mode) 86" or on a buffer-by-buffer basis with b:tex_stylish 87let s:extfname=expand("%:e") 88if exists("g:tex_stylish") 89 let b:tex_stylish= g:tex_stylish 90elseif !exists("b:tex_stylish") 91 if s:extfname == "sty" || s:extfname == "cls" || s:extfname == "clo" || s:extfname == "dtx" || s:extfname == "ltx" 92 let b:tex_stylish= 1 93 else 94 let b:tex_stylish= 0 95 endif 96endif 97 98" handle folding {{{1 99if !exists("g:tex_fold_enabled") 100 let g:tex_fold_enabled= 0 101elseif g:tex_fold_enabled && !has("folding") 102 let g:tex_fold_enabled= 0 103 echomsg "Ignoring g:tex_fold_enabled=".g:tex_fold_enabled."; need to re-compile vim for +fold support" 104endif 105if g:tex_fold_enabled && &fdm == "manual" 106 setl fdm=syntax 107endif 108 109" (La)TeX keywords: uses the characters 0-9,a-z,A-Z,192-255 only... {{{1 110" but _ is the only one that causes problems. 111" One may override this iskeyword setting by providing 112" g:tex_isk 113if exists("g:tex_isk") 114 exe "setlocal isk=".g:tex_isk 115else 116 setlocal isk=48-57,a-z,A-Z,192-255 117endif 118if b:tex_stylish 119 setlocal isk+=@-@ 120endif 121if exists("g:tex_nospell") && g:tex_nospell && !exists("g:tex_comment_nospell") 122 let g:tex_comment_nospell= 1 123endif 124 125" Clusters: {{{1 126" -------- 127syn cluster texCmdGroup contains=texCmdBody,texComment,texDefParm,texDelimiter,texDocType,texInput,texLength,texLigature,texMathDelim,texMathOper,texNewCmd,texNewEnv,texRefZone,texSection,texBeginEnd,texBeginEndName,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle 128if !exists("s:tex_no_error") 129 syn cluster texCmdGroup add=texMathError 130endif 131syn cluster texEnvGroup contains=texMatcher,texMathDelim,texSpecialChar,texStatement 132syn 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,texBeginEnd,texSectionZone,texSpaceCode,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,@texMathZones,texTitle,texAbstract,texBoldStyle,texItalStyle,texNoSpell 133syn cluster texBoldGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texInputFile,texLength,texLigature,texMatcher,texMathZoneV,texMathZoneW,texMathZoneX,texMathZoneY,texMathZoneZ,texNewCmd,texNewEnv,texOnlyMath,texOption,texParen,texRefZone,texSection,texBeginEnd,texSectionZone,texSpaceCode,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,@texMathZones,texTitle,texAbstract,texBoldStyle,texBoldItalStyle,texNoSpell 134syn cluster texItalGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texInputFile,texLength,texLigature,texMatcher,texMathZoneV,texMathZoneW,texMathZoneX,texMathZoneY,texMathZoneZ,texNewCmd,texNewEnv,texOnlyMath,texOption,texParen,texRefZone,texSection,texBeginEnd,texSectionZone,texSpaceCode,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,@texMathZones,texTitle,texAbstract,texItalStyle,texItalBoldStyle,texNoSpell 135if !exists("g:tex_nospell") || !g:tex_nospell 136 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 137 syn cluster texStyleGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,texInputFile,texOption,texStyleStatement,@Spell,texStyleMatcher 138else 139 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 140 syn cluster texStyleGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,texInputFile,texOption,texStyleStatement,texStyleMatcher 141endif 142syn cluster texPreambleMatchGroup 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 143syn cluster texRefGroup contains=texMatcher,texComment,texDelimiter 144if !exists("tex_no_math") 145 syn cluster texMathZones contains=texMathZoneV,texMathZoneW,texMathZoneX,texMathZoneY,texMathZoneZ 146 syn cluster texMatchGroup add=@texMathZones 147 syn cluster texMathDelimGroup contains=texMathDelimBad,texMathDelimKey,texMathDelimSet1,texMathDelimSet2 148 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 149 syn cluster texMathZoneGroup contains=texComment,texDelimiter,texLength,texMathDelim,texMathMatcher,texMathOper,texMathSymbol,texMathText,texRefZone,texSpecialChar,texStatement,texTypeSize,texTypeStyle 150 if !exists("s:tex_no_error") 151 syn cluster texMathMatchGroup add=texMathError 152 syn cluster texMathZoneGroup add=texMathError 153 endif 154 syn cluster texMathZoneGroup add=@NoSpell 155 " following used in the \part \chapter \section \subsection \subsubsection 156 " \paragraph \subparagraph \author \title highlighting 157 syn cluster texDocGroup contains=texPartZone,@texPartGroup 158 syn cluster texPartGroup contains=texChapterZone,texSectionZone,texParaZone 159 syn cluster texChapterGroup contains=texSectionZone,texParaZone 160 syn cluster texSectionGroup contains=texSubSectionZone,texParaZone 161 syn cluster texSubSectionGroup contains=texSubSubSectionZone,texParaZone 162 syn cluster texSubSubSectionGroup contains=texParaZone 163 syn cluster texParaGroup contains=texSubParaZone 164 if has("conceal") && &enc == 'utf-8' 165 syn cluster texMathZoneGroup add=texGreek,texSuperscript,texSubscript,texMathSymbol 166 syn cluster texMathMatchGroup add=texGreek,texSuperscript,texSubscript,texMathSymbol 167 endif 168endif 169 170" Try to flag {} and () mismatches: {{{1 171if s:tex_fast =~ 'm' 172 if !exists("s:tex_no_error") 173 syn region texMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" contains=@texMatchGroup,texError 174 syn region texMatcher matchgroup=Delimiter start="\[" end="]" contains=@texMatchGroup,texError,@NoSpell 175 else 176 syn region texMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" contains=@texMatchGroup 177 syn region texMatcher matchgroup=Delimiter start="\[" end="]" contains=@texMatchGroup 178 endif 179 if !exists("g:tex_nospell") || !g:tex_nospell 180 syn region texParen start="(" end=")" contains=@texMatchGroup,@Spell 181 else 182 syn region texParen start="(" end=")" contains=@texMatchGroup 183 endif 184endif 185if !exists("s:tex_no_error") 186 syn match texError "[}\])]" 187endif 188if s:tex_fast =~ 'M' 189 if !exists("tex_no_math") 190 if !exists("s:tex_no_error") 191 syn match texMathError "}" contained 192 endif 193 syn region texMathMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\}" end="}" end="%stopzone\>" contained contains=@texMathMatchGroup 194 endif 195endif 196 197" TeX/LaTeX keywords: {{{1 198" Instead of trying to be All Knowing, I just match \..alphameric.. 199" Note that *.tex files may not have "@" in their \commands 200if exists("g:tex_tex") || b:tex_stylish 201 syn match texStatement "\\[a-zA-Z@]\+" 202else 203 syn match texStatement "\\\a\+" 204 if !exists("s:tex_no_error") 205 syn match texError "\\\a*@[a-zA-Z@]*" 206 endif 207endif 208 209" TeX/LaTeX delimiters: {{{1 210syn match texDelimiter "&" 211syn match texDelimiter "\\\\" 212syn match texDelimiter "[{}]" 213 214" Tex/Latex Options: {{{1 215syn match texOption "[^\\]\zs#\d\+\|^#\d\+" 216 217" texAccent (tnx to Karim Belabas) avoids annoying highlighting for accents: {{{1 218if b:tex_stylish 219 syn match texAccent "\\[bcdvuH][^a-zA-Z@]"me=e-1 220 syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)[^a-zA-Z@]"me=e-1 221else 222 syn match texAccent "\\[bcdvuH]\A"me=e-1 223 syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)\A"me=e-1 224endif 225syn match texAccent "\\[bcdvuH]$" 226syn match texAccent +\\[=^.\~"`']+ 227syn match texAccent +\\['=t'.c^ud"vb~Hr]{\a}+ 228syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)$" 229 230" \begin{}/\end{} section markers: {{{1 231syn match texBeginEnd "\\begin\>\|\\end\>" nextgroup=texBeginEndName 232if s:tex_fast =~ 'm' 233 syn region texBeginEndName matchgroup=Delimiter start="{" end="}" contained nextgroup=texBeginEndModifier contains=texComment 234 syn region texBeginEndModifier matchgroup=Delimiter start="\[" end="]" contained contains=texComment,@NoSpell 235endif 236 237" \documentclass, \documentstyle, \usepackage: {{{1 238syn match texDocType "\\documentclass\>\|\\documentstyle\>\|\\usepackage\>" nextgroup=texBeginEndName,texDocTypeArgs 239if s:tex_fast =~ 'm' 240 syn region texDocTypeArgs matchgroup=Delimiter start="\[" end="]" contained nextgroup=texBeginEndName contains=texComment,@NoSpell 241endif 242 243" Preamble syntax-based folding support: {{{1 244if g:tex_fold_enabled && has("folding") 245 syn region texPreamble transparent fold start='\zs\\documentclass\>' end='\ze\\begin{document}' contains=texStyle,@texPreambleMatchGroup 246endif 247 248" TeX input: {{{1 249syn match texInput "\\input\s\+[a-zA-Z/.0-9_^]\+"hs=s+7 contains=texStatement 250syn match texInputFile "\\include\(graphics\|list\)\=\(\[.\{-}\]\)\=\s*{.\{-}}" contains=texStatement,texInputCurlies,texInputFileOpt 251syn match texInputFile "\\\(epsfig\|input\|usepackage\)\s*\(\[.*\]\)\={.\{-}}" contains=texStatement,texInputCurlies,texInputFileOpt 252syn match texInputCurlies "[{}]" contained 253if s:tex_fast =~ 'm' 254 syn region texInputFileOpt matchgroup=Delimiter start="\[" end="\]" contained contains=texComment 255endif 256 257" Type Styles (LaTeX 2.09): {{{1 258syn match texTypeStyle "\\rm\>" 259syn match texTypeStyle "\\em\>" 260syn match texTypeStyle "\\bf\>" 261syn match texTypeStyle "\\it\>" 262syn match texTypeStyle "\\sl\>" 263syn match texTypeStyle "\\sf\>" 264syn match texTypeStyle "\\sc\>" 265syn match texTypeStyle "\\tt\>" 266 267" Type Styles: attributes, commands, families, etc (LaTeX2E): {{{1 268if s:tex_conceal !~ 'b' 269 syn match texTypeStyle "\\textbf\>" 270 syn match texTypeStyle "\\textit\>" 271endif 272syn match texTypeStyle "\\textmd\>" 273syn match texTypeStyle "\\textrm\>" 274syn match texTypeStyle "\\textsc\>" 275syn match texTypeStyle "\\textsf\>" 276syn match texTypeStyle "\\textsl\>" 277syn match texTypeStyle "\\texttt\>" 278syn match texTypeStyle "\\textup\>" 279syn match texTypeStyle "\\emph\>" 280 281syn match texTypeStyle "\\mathbb\>" 282syn match texTypeStyle "\\mathbf\>" 283syn match texTypeStyle "\\mathcal\>" 284syn match texTypeStyle "\\mathfrak\>" 285syn match texTypeStyle "\\mathit\>" 286syn match texTypeStyle "\\mathnormal\>" 287syn match texTypeStyle "\\mathrm\>" 288syn match texTypeStyle "\\mathsf\>" 289syn match texTypeStyle "\\mathtt\>" 290 291syn match texTypeStyle "\\rmfamily\>" 292syn match texTypeStyle "\\sffamily\>" 293syn match texTypeStyle "\\ttfamily\>" 294 295syn match texTypeStyle "\\itshape\>" 296syn match texTypeStyle "\\scshape\>" 297syn match texTypeStyle "\\slshape\>" 298syn match texTypeStyle "\\upshape\>" 299 300syn match texTypeStyle "\\bfseries\>" 301syn match texTypeStyle "\\mdseries\>" 302 303" Some type sizes: {{{1 304syn match texTypeSize "\\tiny\>" 305syn match texTypeSize "\\scriptsize\>" 306syn match texTypeSize "\\footnotesize\>" 307syn match texTypeSize "\\small\>" 308syn match texTypeSize "\\normalsize\>" 309syn match texTypeSize "\\large\>" 310syn match texTypeSize "\\Large\>" 311syn match texTypeSize "\\LARGE\>" 312syn match texTypeSize "\\huge\>" 313syn match texTypeSize "\\Huge\>" 314 315" Spacecodes (TeX'isms): {{{1 316" \mathcode`\^^@="2201 \delcode`\(="028300 \sfcode`\)=0 \uccode`X=`X \lccode`x=`x 317syn match texSpaceCode "\\\(math\|cat\|del\|lc\|sf\|uc\)code`"me=e-1 nextgroup=texSpaceCodeChar 318syn match texSpaceCodeChar "`\\\=.\(\^.\)\==\(\d\|\"\x\{1,6}\|`.\)" contained 319 320" Sections, subsections, etc: {{{1 321if s:tex_fast =~ 'p' 322 if !exists("g:tex_nospell") || !g:tex_nospell 323 if g:tex_fold_enabled && has("folding") 324 syn region texDocZone matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}' fold contains=@texFoldGroup,@texDocGroup,@Spell 325 syn region texPartZone matchgroup=texSection start='\\part\>' end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup,@texPartGroup,@Spell 326 syn region texChapterZone matchgroup=texSection start='\\chapter\>' end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup,@texChapterGroup,@Spell 327 syn region texSectionZone matchgroup=texSection start='\\section\>' end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup,@texSectionGroup,@Spell 328 syn region texSubSectionZone matchgroup=texSection start='\\subsection\>' end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup,@texSubSectionGroup,@Spell 329 syn region texSubSubSectionZone matchgroup=texSection start='\\subsubsection\>' end='\ze\s*\\\%(\%(sub\)\{,2}section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup,@texSubSubSectionGroup,@Spell 330 syn region texParaZone matchgroup=texSection start='\\paragraph\>' end='\ze\s*\\\%(paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup,@texParaGroup,@Spell 331 syn region texSubParaZone matchgroup=texSection start='\\subparagraph\>' end='\ze\s*\\\%(\%(sub\)\=paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup,@Spell 332 syn region texTitle matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}' fold contains=@texFoldGroup,@Spell 333 syn region texAbstract matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}' fold contains=@texFoldGroup,@Spell 334 else 335 syn region texDocZone matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}' contains=@texFoldGroup,@texDocGroup,@Spell 336 syn region texPartZone matchgroup=texSection start='\\part\>' end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texPartGroup,@Spell 337 syn region texChapterZone matchgroup=texSection start='\\chapter\>' end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texChapterGroup,@Spell 338 syn region texSectionZone matchgroup=texSection start='\\section\>' end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSectionGroup,@Spell 339 syn region texSubSectionZone matchgroup=texSection start='\\subsection\>' end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSectionGroup,@Spell 340 syn region texSubSubSectionZone matchgroup=texSection start='\\subsubsection\>' end='\ze\s*\\\%(\%(sub\)\{,2}section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSubSectionGroup,@Spell 341 syn region texParaZone matchgroup=texSection start='\\paragraph\>' end='\ze\s*\\\%(paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texParaGroup,@Spell 342 syn region texSubParaZone matchgroup=texSection start='\\subparagraph\>' end='\ze\s*\\\%(\%(sub\)\=paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@Spell 343 syn region texTitle matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}' contains=@texFoldGroup,@Spell 344 syn region texAbstract matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}' contains=@texFoldGroup,@Spell 345 endif 346 else 347 if g:tex_fold_enabled && has("folding") 348 syn region texDocZone matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}' fold contains=@texFoldGroup,@texDocGroup 349 syn region texPartZone matchgroup=texSection start='\\part\>' end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup,@texPartGroup 350 syn region texChapterZone matchgroup=texSection start='\\chapter\>' end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup,@texChapterGroup 351 syn region texSectionZone matchgroup=texSection start='\\section\>' end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup,@texSectionGroup 352 syn region texSubSectionZone matchgroup=texSection start='\\subsection\>' end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup,@texSubSectionGroup 353 syn region texSubSubSectionZone matchgroup=texSection start='\\subsubsection\>' end='\ze\s*\\\%(\%(sub\)\{,2}section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup,@texSubSubSectionGroup 354 syn region texParaZone matchgroup=texSection start='\\paragraph\>' end='\ze\s*\\\%(paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup,@texParaGroup 355 syn region texSubParaZone matchgroup=texSection start='\\subparagraph\>' end='\ze\s*\\\%(\%(sub\)\=paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup 356 syn region texTitle matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}' fold contains=@texFoldGroup 357 syn region texAbstract matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}' fold contains=@texFoldGroup 358 else 359 syn region texDocZone matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}' contains=@texFoldGroup,@texDocGroup 360 syn region texPartZone matchgroup=texSection start='\\part\>' end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texPartGroup 361 syn region texChapterZone matchgroup=texSection start='\\chapter\>' end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texChapterGroup 362 syn region texSectionZone matchgroup=texSection start='\\section\>' end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSectionGroup 363 syn region texSubSectionZone matchgroup=texSection start='\\subsection\>' end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSectionGroup 364 syn region texSubSubSectionZone matchgroup=texSection start='\\subsubsection\>' end='\ze\s*\\\%(\%(sub\)\{,2}section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSubSectionGroup 365 syn region texParaZone matchgroup=texSection start='\\paragraph\>' end='\ze\s*\\\%(paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texParaGroup 366 syn region texSubParaZone matchgroup=texSection start='\\subparagraph\>' end='\ze\s*\\\%(\%(sub\)\=paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup 367 syn region texTitle matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}' contains=@texFoldGroup 368 syn region texAbstract matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}' contains=@texFoldGroup 369 endif 370 endif 371endif 372 373" particular support for bold and italic {{{1 374if s:tex_fast =~ 'b' 375 if s:tex_conceal =~ 'b' 376 syn region texBoldStyle matchgroup=texTypeStyle start="\\textbf\s*{" end="}" concealends contains=@texBoldGroup 377 syn region texBoldItalStyle matchgroup=texTypeStyle start="\\textit\s*{" end="}" concealends contains=@texItalGroup 378 syn region texItalStyle matchgroup=texTypeStyle start="\\textit\s*{" end="}" concealends contains=@texItalGroup 379 syn region texItalBoldStyle matchgroup=texTypeStyle start="\\textbf\s*{" end="}" concealends contains=@texBoldGroup 380 endif 381endif 382 383" Bad Math (mismatched): {{{1 384if !exists("g:tex_no_math") && !exists("s:tex_no_error") 385 syn match texBadMath "\\end\s*{\s*\(array\|gathered\|bBpvV]matrix\|split\|subequations\|smallmatrix\|xxalignat\)\s*}" 386 syn match texBadMath "\\end\s*{\s*\(align\|alignat\|displaymath\|displaymath\|eqnarray\|equation\|flalign\|gather\|math\|multline\|xalignat\)\*\=\s*}" 387 syn match texBadMath "\\[\])]" 388endif 389 390" Math Zones: {{{1 391if !exists("tex_no_math") 392 " TexNewMathZone: function creates a mathzone with the given suffix and mathzone name. {{{2 393 " Starred forms are created if starform is true. Starred 394 " forms have syntax group and synchronization groups with a 395 " "S" appended. Handles: cluster, syntax, sync, and HiLink. 396 fun! TexNewMathZone(sfx,mathzone,starform) 397 let grpname = "texMathZone".a:sfx 398 let syncname = "texSyncMathZone".a:sfx 399 if g:tex_fold_enabled 400 let foldcmd= " fold" 401 else 402 let foldcmd= "" 403 endif 404 exe "syn cluster texMathZones add=".grpname 405 if s:tex_fast =~ 'M' 406 exe 'syn region '.grpname.' start='."'".'\\begin\s*{\s*'.a:mathzone.'\s*}'."'".' end='."'".'\\end\s*{\s*'.a:mathzone.'\s*}'."'".' keepend contains=@texMathZoneGroup'.foldcmd 407 exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"' 408 exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"' 409 endif 410 exe 'hi def link '.grpname.' texMath' 411 if a:starform 412 let grpname = "texMathZone".a:sfx.'S' 413 let syncname = "texSyncMathZone".a:sfx.'S' 414 exe "syn cluster texMathZones add=".grpname 415 if s:tex_fast =~ 'M' 416 exe 'syn region '.grpname.' start='."'".'\\begin\s*{\s*'.a:mathzone.'\*\s*}'."'".' end='."'".'\\end\s*{\s*'.a:mathzone.'\*\s*}'."'".' keepend contains=@texMathZoneGroup'.foldcmd 417 exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"' 418 exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"' 419 endif 420 exe 'hi def link '.grpname.' texMath' 421 endif 422 endfun 423 424 " Standard Math Zones: {{{2 425 call TexNewMathZone("A","align",1) 426 call TexNewMathZone("B","alignat",1) 427 call TexNewMathZone("C","displaymath",1) 428 call TexNewMathZone("D","eqnarray",1) 429 call TexNewMathZone("E","equation",1) 430 call TexNewMathZone("F","flalign",1) 431 call TexNewMathZone("G","gather",1) 432 call TexNewMathZone("H","math",1) 433 call TexNewMathZone("I","multline",1) 434 call TexNewMathZone("J","subequations",0) 435 call TexNewMathZone("K","xalignat",1) 436 call TexNewMathZone("L","xxalignat",0) 437 438 " Inline Math Zones: {{{2 439 if s:tex_fast =~ 'M' 440 if has("conceal") && &enc == 'utf-8' && s:tex_conceal =~ 'd' 441 syn region texMathZoneV matchgroup=Delimiter start="\\(" matchgroup=Delimiter end="\\)\|%stopzone\>" keepend concealends contains=@texMathZoneGroup 442 syn region texMathZoneW matchgroup=Delimiter start="\\\[" matchgroup=Delimiter end="\\]\|%stopzone\>" keepend concealends contains=@texMathZoneGroup 443 syn region texMathZoneX matchgroup=Delimiter start="\$" skip="\\\\\|\\\$" matchgroup=Delimiter end="\$" end="%stopzone\>" concealends contains=@texMathZoneGroup 444 syn region texMathZoneY matchgroup=Delimiter start="\$\$" matchgroup=Delimiter end="\$\$" end="%stopzone\>" concealends keepend contains=@texMathZoneGroup 445 else 446 syn region texMathZoneV matchgroup=Delimiter start="\\(" matchgroup=Delimiter end="\\)\|%stopzone\>" keepend contains=@texMathZoneGroup 447 syn region texMathZoneW matchgroup=Delimiter start="\\\[" matchgroup=Delimiter end="\\]\|%stopzone\>" keepend contains=@texMathZoneGroup 448 syn region texMathZoneX matchgroup=Delimiter start="\$" skip="\\\\\|\\\$" matchgroup=Delimiter end="\$" end="%stopzone\>" contains=@texMathZoneGroup 449 syn region texMathZoneY matchgroup=Delimiter start="\$\$" matchgroup=Delimiter end="\$\$" end="%stopzone\>" keepend contains=@texMathZoneGroup 450 endif 451 syn region texMathZoneZ matchgroup=texStatement start="\\ensuremath\s*{" matchgroup=texStatement end="}" end="%stopzone\>" contains=@texMathZoneGroup 452 endif 453 454 syn match texMathOper "[_^=]" contained 455 456 " Text Inside Math Zones: {{{2 457 if s:tex_fast =~ 'M' 458 if !exists("g:tex_nospell") || !g:tex_nospell 459 syn region texMathText matchgroup=texStatement start='\\\(\(inter\)\=text\|mbox\)\s*{' end='}' contains=@texFoldGroup,@Spell 460 else 461 syn region texMathText matchgroup=texStatement start='\\\(\(inter\)\=text\|mbox\)\s*{' end='}' contains=@texFoldGroup 462 endif 463 endif 464 465 " \left..something.. and \right..something.. support: {{{2 466 syn match texMathDelimBad contained "\S" 467 if has("conceal") && &enc == 'utf-8' && s:tex_conceal =~ 'm' 468 syn match texMathDelim contained "\\left\\{\>" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad contains=texMathSymbol cchar={ 469 syn match texMathDelim contained "\\right\\}\>" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad contains=texMathSymbol cchar=} 470 let s:texMathDelimList=[ 471 \ ['<' , '<'] , 472 \ ['>' , '>'] , 473 \ ['(' , '('] , 474 \ [')' , ')'] , 475 \ ['\[' , '['] , 476 \ [']' , ']'] , 477 \ ['\\{' , '{'] , 478 \ ['\\}' , '}'] , 479 \ ['|' , '|'] , 480 \ ['\\|' , '‖'] , 481 \ ['\\backslash' , '\'] , 482 \ ['\\downarrow' , '↓'] , 483 \ ['\\Downarrow' , '⇓'] , 484 \ ['\\langle' , '<'] , 485 \ ['\\lbrace' , '['] , 486 \ ['\\lceil' , '⌈'] , 487 \ ['\\lfloor' , '⌊'] , 488 \ ['\\lgroup' , '⌊'] , 489 \ ['\\lmoustache' , '⎛'] , 490 \ ['\\rangle' , '>'] , 491 \ ['\\rbrace' , ']'] , 492 \ ['\\rceil' , '⌉'] , 493 \ ['\\rfloor' , '⌋'] , 494 \ ['\\rgroup' , '⌋'] , 495 \ ['\\rmoustache' , '⎞'] , 496 \ ['\\uparrow' , '↑'] , 497 \ ['\\Uparrow' , '↑'] , 498 \ ['\\updownarrow', '↕'] , 499 \ ['\\Updownarrow', '⇕']] 500 syn match texMathDelim '\\[bB]igg\=[lr]' contained nextgroup=texMathDelimBad 501 for texmath in s:texMathDelimList 502 exe "syn match texMathDelim '\\\\[bB]igg\\=[lr]\\=".texmath[0]."' contained conceal cchar=".texmath[1] 503 endfor 504 505 else 506 syn match texMathDelim contained "\\\(left\|right\)\>" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad 507 syn match texMathDelim contained "\\[bB]igg\=[lr]\=\>" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad 508 syn match texMathDelimSet2 contained "\\" nextgroup=texMathDelimKey,texMathDelimBad 509 syn match texMathDelimSet1 contained "[<>()[\]|/.]\|\\[{}|]" 510 syn keyword texMathDelimKey contained backslash lceil lVert rgroup uparrow 511 syn keyword texMathDelimKey contained downarrow lfloor rangle rmoustache Uparrow 512 syn keyword texMathDelimKey contained Downarrow lgroup rbrace rvert updownarrow 513 syn keyword texMathDelimKey contained langle lmoustache rceil rVert Updownarrow 514 syn keyword texMathDelimKey contained lbrace lvert rfloor 515 endif 516 syn match texMathDelim contained "\\\(left\|right\)arrow\>\|\<\([aA]rrow\|brace\)\=vert\>" 517 syn match texMathDelim contained "\\lefteqn\>" 518endif 519 520" Special TeX characters ( \$ \& \% \# \{ \} \_ \S \P ) : {{{1 521syn match texSpecialChar "\\[$&%#{}_]" 522if b:tex_stylish 523 syn match texSpecialChar "\\[SP@][^a-zA-Z@]"me=e-1 524else 525 syn match texSpecialChar "\\[SP@]\A"me=e-1 526endif 527syn match texSpecialChar "\\\\" 528if !exists("tex_no_math") 529 syn match texOnlyMath "[_^]" 530endif 531syn match texSpecialChar "\^\^[0-9a-f]\{2}\|\^\^\S" 532if s:tex_conceal !~ 'S' 533 syn match texSpecialChar '\\glq\>' contained conceal cchar=‚ 534 syn match texSpecialChar '\\grq\>' contained conceal cchar=‘ 535 syn match texSpecialChar '\\glqq\>' contained conceal cchar=„ 536 syn match texSpecialChar '\\grqq\>' contained conceal cchar=“ 537 syn match texSpecialChar '\\hyp\>' contained conceal cchar=- 538endif 539 540" Comments: {{{1 541" Normal TeX LaTeX : %.... 542" Documented TeX Format: ^^A... -and- leading %s (only) 543if !exists("g:tex_comment_nospell") || !g:tex_comment_nospell 544 syn cluster texCommentGroup contains=texTodo,@Spell 545else 546 syn cluster texCommentGroup contains=texTodo,@NoSpell 547endif 548syn case ignore 549syn keyword texTodo contained combak fixme todo xxx 550syn case match 551if s:extfname == "dtx" 552 syn match texComment "\^\^A.*$" contains=@texCommentGroup 553 syn match texComment "^%\+" contains=@texCommentGroup 554else 555 if g:tex_fold_enabled 556 " allows syntax-folding of 2 or more contiguous comment lines 557 " single-line comments are not folded 558 syn match texComment "%.*$" contains=@texCommentGroup 559 if s:tex_fast =~ 'c' 560 syn region texComment start="^\zs\s*%.*\_s*%" skip="^\s*%" end='^\ze\s*[^%]' fold 561 syn region texNoSpell contained fold matchgroup=texComment start="%\s*nospell\s*{" end="%\s*nospell\s*}" contains=@texFoldGroup,@NoSpell 562 endif 563 else 564 syn match texComment "%.*$" contains=@texCommentGroup 565 if s:tex_fast =~ 'c' 566 syn region texNoSpell contained matchgroup=texComment start="%\s*nospell\s*{" end="%\s*nospell\s*}" contains=@texFoldGroup,@NoSpell 567 endif 568 endif 569endif 570 571" Separate lines used for verb` and verb# so that the end conditions {{{1 572" will appropriately terminate. 573" If g:tex_verbspell exists, then verbatim texZones will permit spellchecking there. 574if s:tex_fast =~ 'v' 575 if exists("g:tex_verbspell") && g:tex_verbspell 576 syn region texZone start="\\begin{[vV]erbatim}" end="\\end{[vV]erbatim}\|%stopzone\>" contains=@Spell 577 " listings package: 578 syn region texZone start="\\begin{lstlisting}" end="\\end{lstlisting}\|%stopzone\>" contains=@Spell 579 if version < 600 580 syn region texZone start="\\verb\*\=`" end="`\|%stopzone\>" contains=@Spell 581 syn region texZone start="\\verb\*\=#" end="#\|%stopzone\>" contains=@Spell 582 else 583 if b:tex_stylish 584 syn region texZone start="\\verb\*\=\z([^\ta-zA-Z@]\)" end="\z1\|%stopzone\>" contains=@Spell 585 else 586 syn region texZone start="\\verb\*\=\z([^\ta-zA-Z]\)" end="\z1\|%stopzone\>" contains=@Spell 587 endif 588 endif 589 else 590 syn region texZone start="\\begin{[vV]erbatim}" end="\\end{[vV]erbatim}\|%stopzone\>" 591 if version < 600 592 syn region texZone start="\\verb\*\=`" end="`\|%stopzone\>" 593 syn region texZone start="\\verb\*\=#" end="#\|%stopzone\>" 594 else 595 if b:tex_stylish 596 syn region texZone start="\\verb\*\=\z([^\ta-zA-Z@]\)" end="\z1\|%stopzone\>" 597 else 598 syn region texZone start="\\verb\*\=\z([^\ta-zA-Z]\)" end="\z1\|%stopzone\>" 599 endif 600 endif 601 endif 602endif 603 604" Tex Reference Zones: {{{1 605if s:tex_fast =~ 'r' 606 syn region texZone matchgroup=texStatement start="@samp{" end="}\|%stopzone\>" contains=@texRefGroup 607 syn region texRefZone matchgroup=texStatement start="\\nocite{" end="}\|%stopzone\>" contains=@texRefGroup 608 syn region texRefZone matchgroup=texStatement start="\\bibliography{" end="}\|%stopzone\>" contains=@texRefGroup 609 syn region texRefZone matchgroup=texStatement start="\\label{" end="}\|%stopzone\>" contains=@texRefGroup 610 syn region texRefZone matchgroup=texStatement start="\\\(page\|eq\)ref{" end="}\|%stopzone\>" contains=@texRefGroup 611 syn region texRefZone matchgroup=texStatement start="\\v\=ref{" end="}\|%stopzone\>" contains=@texRefGroup 612 syn region texRefOption contained matchgroup=Delimiter start='\[' end=']' contains=@texRefGroup,texRefZone nextgroup=texRefOption,texCite 613 syn region texCite contained matchgroup=Delimiter start='{' end='}' contains=@texRefGroup,texRefZone,texCite 614endif 615syn match texRefZone '\\cite\%([tp]\*\=\)\=' nextgroup=texRefOption,texCite 616 617" Handle newcommand, newenvironment : {{{1 618syn match texNewCmd "\\newcommand\>" nextgroup=texCmdName skipwhite skipnl 619if s:tex_fast =~ 'V' 620 syn region texCmdName contained matchgroup=Delimiter start="{"rs=s+1 end="}" nextgroup=texCmdArgs,texCmdBody skipwhite skipnl 621 syn region texCmdArgs contained matchgroup=Delimiter start="\["rs=s+1 end="]" nextgroup=texCmdBody skipwhite skipnl 622 syn region texCmdBody contained matchgroup=Delimiter start="{"rs=s+1 skip="\\\\\|\\[{}]" matchgroup=Delimiter end="}" contains=@texCmdGroup 623endif 624syn match texNewEnv "\\newenvironment\>" nextgroup=texEnvName skipwhite skipnl 625if s:tex_fast =~ 'V' 626 syn region texEnvName contained matchgroup=Delimiter start="{"rs=s+1 end="}" nextgroup=texEnvBgn skipwhite skipnl 627 syn region texEnvBgn contained matchgroup=Delimiter start="{"rs=s+1 end="}" nextgroup=texEnvEnd skipwhite skipnl contains=@texEnvGroup 628 syn region texEnvEnd contained matchgroup=Delimiter start="{"rs=s+1 end="}" skipwhite skipnl contains=@texEnvGroup 629endif 630 631" Definitions/Commands: {{{1 632syn match texDefCmd "\\def\>" nextgroup=texDefName skipwhite skipnl 633if b:tex_stylish 634 syn match texDefName contained "\\[a-zA-Z@]\+" nextgroup=texDefParms,texCmdBody skipwhite skipnl 635 syn match texDefName contained "\\[^a-zA-Z@]" nextgroup=texDefParms,texCmdBody skipwhite skipnl 636else 637 syn match texDefName contained "\\\a\+" nextgroup=texDefParms,texCmdBody skipwhite skipnl 638 syn match texDefName contained "\\\A" nextgroup=texDefParms,texCmdBody skipwhite skipnl 639endif 640syn match texDefParms contained "#[^{]*" contains=texDefParm nextgroup=texCmdBody skipwhite skipnl 641syn match texDefParm contained "#\d\+" 642 643" TeX Lengths: {{{1 644syn match texLength "\<\d\+\([.,]\d\+\)\=\s*\(true\)\=\s*\(bp\|cc\|cm\|dd\|em\|ex\|in\|mm\|pc\|pt\|sp\)\>" 645 646" TeX String Delimiters: {{{1 647syn match texString "\(``\|''\|,,\)" 648 649" makeatletter -- makeatother sections 650if !exists("s:tex_no_error") 651 if s:tex_fast =~ 'S' 652 syn region texStyle matchgroup=texStatement start='\\makeatletter' end='\\makeatother' contains=@texStyleGroup contained 653 endif 654 syn match texStyleStatement "\\[a-zA-Z@]\+" contained 655 if s:tex_fast =~ 'S' 656 syn region texStyleMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" contains=@texStyleGroup,texError contained 657 syn region texStyleMatcher matchgroup=Delimiter start="\[" end="]" contains=@texStyleGroup,texError contained 658 endif 659endif 660 661" Conceal mode support (supports set cole=2) {{{1 662if has("conceal") && &enc == 'utf-8' 663 664 " Math Symbols {{{2 665 " (many of these symbols were contributed by Björn Winckler) 666 if s:tex_conceal =~ 'm' 667 let s:texMathList=[ 668 \ ['|' , '‖'], 669 \ ['aleph' , 'ℵ'], 670 \ ['amalg' , '∐'], 671 \ ['angle' , '∠'], 672 \ ['approx' , '≈'], 673 \ ['ast' , '∗'], 674 \ ['asymp' , '≍'], 675 \ ['backepsilon' , '∍'], 676 \ ['backsimeq' , '≃'], 677 \ ['backslash' , '∖'], 678 \ ['barwedge' , '⊼'], 679 \ ['because' , '∵'], 680 \ ['between' , '≬'], 681 \ ['bigcap' , '∩'], 682 \ ['bigcirc' , '○'], 683 \ ['bigcup' , '∪'], 684 \ ['bigodot' , '⊙'], 685 \ ['bigoplus' , '⊕'], 686 \ ['bigotimes' , '⊗'], 687 \ ['bigsqcup' , '⊔'], 688 \ ['bigtriangledown', '∇'], 689 \ ['bigtriangleup' , '∆'], 690 \ ['bigvee' , '⋁'], 691 \ ['bigwedge' , '⋀'], 692 \ ['blacksquare' , '∎'], 693 \ ['bot' , '⊥'], 694 \ ['bowtie' , '⋈'], 695 \ ['boxdot' , '⊡'], 696 \ ['boxminus' , '⊟'], 697 \ ['boxplus' , '⊞'], 698 \ ['boxtimes' , '⊠'], 699 \ ['bullet' , '•'], 700 \ ['bumpeq' , '≏'], 701 \ ['Bumpeq' , '≎'], 702 \ ['cap' , '∩'], 703 \ ['Cap' , '⋒'], 704 \ ['cdot' , '·'], 705 \ ['cdots' , '⋯'], 706 \ ['circ' , '∘'], 707 \ ['circeq' , '≗'], 708 \ ['circlearrowleft', '↺'], 709 \ ['circlearrowright', '↻'], 710 \ ['circledast' , '⊛'], 711 \ ['circledcirc' , '⊚'], 712 \ ['clubsuit' , '♣'], 713 \ ['complement' , '∁'], 714 \ ['cong' , '≅'], 715 \ ['coprod' , '∐'], 716 \ ['copyright' , '©'], 717 \ ['cup' , '∪'], 718 \ ['Cup' , '⋓'], 719 \ ['curlyeqprec' , '⋞'], 720 \ ['curlyeqsucc' , '⋟'], 721 \ ['curlyvee' , '⋎'], 722 \ ['curlywedge' , '⋏'], 723 \ ['dagger' , '†'], 724 \ ['dashv' , '⊣'], 725 \ ['ddagger' , '‡'], 726 \ ['ddots' , '⋱'], 727 \ ['diamond' , '⋄'], 728 \ ['diamondsuit' , '♢'], 729 \ ['div' , '÷'], 730 \ ['doteq' , '≐'], 731 \ ['doteqdot' , '≑'], 732 \ ['dotplus' , '∔'], 733 \ ['dots' , '…'], 734 \ ['dotsb' , '⋯'], 735 \ ['dotsc' , '…'], 736 \ ['dotsi' , '⋯'], 737 \ ['dotso' , '…'], 738 \ ['doublebarwedge' , '⩞'], 739 \ ['downarrow' , '↓'], 740 \ ['Downarrow' , '⇓'], 741 \ ['ell' , 'ℓ'], 742 \ ['emptyset' , '∅'], 743 \ ['eqcirc' , '≖'], 744 \ ['eqsim' , '≂'], 745 \ ['eqslantgtr' , '⪖'], 746 \ ['eqslantless' , '⪕'], 747 \ ['equiv' , '≡'], 748 \ ['exists' , '∃'], 749 \ ['fallingdotseq' , '≒'], 750 \ ['flat' , '♭'], 751 \ ['forall' , '∀'], 752 \ ['frown' , '⁔'], 753 \ ['ge' , '≥'], 754 \ ['geq' , '≥'], 755 \ ['geqq' , '≧'], 756 \ ['gets' , '←'], 757 \ ['gg' , '⟫'], 758 \ ['gneqq' , '≩'], 759 \ ['gtrdot' , '⋗'], 760 \ ['gtreqless' , '⋛'], 761 \ ['gtrless' , '≷'], 762 \ ['gtrsim' , '≳'], 763 \ ['hbar' , 'ℏ'], 764 \ ['heartsuit' , '♡'], 765 \ ['hookleftarrow' , '↩'], 766 \ ['hookrightarrow' , '↪'], 767 \ ['iiint' , '∭'], 768 \ ['iint' , '∬'], 769 \ ['Im' , 'ℑ'], 770 \ ['imath' , 'ɩ'], 771 \ ['in' , '∈'], 772 \ ['infty' , '∞'], 773 \ ['int' , '∫'], 774 \ ['lceil' , '⌈'], 775 \ ['ldots' , '…'], 776 \ ['le' , '≤'], 777 \ ['leadsto' , '↝'], 778 \ ['left(' , '('], 779 \ ['left\[' , '['], 780 \ ['left\\{' , '{'], 781 \ ['leftarrow' , '⟵'], 782 \ ['Leftarrow' , '⟸'], 783 \ ['leftarrowtail' , '↢'], 784 \ ['leftharpoondown', '↽'], 785 \ ['leftharpoonup' , '↼'], 786 \ ['leftrightarrow' , '↔'], 787 \ ['Leftrightarrow' , '⇔'], 788 \ ['leftrightsquigarrow', '↭'], 789 \ ['leftthreetimes' , '⋋'], 790 \ ['leq' , '≤'], 791 \ ['leq' , '≤'], 792 \ ['leqq' , '≦'], 793 \ ['lessdot' , '⋖'], 794 \ ['lesseqgtr' , '⋚'], 795 \ ['lesssim' , '≲'], 796 \ ['lfloor' , '⌊'], 797 \ ['ll' , '≪'], 798 \ ['lmoustache' , '╭'], 799 \ ['lneqq' , '≨'], 800 \ ['ltimes' , '⋉'], 801 \ ['mapsto' , '↦'], 802 \ ['measuredangle' , '∡'], 803 \ ['mid' , '∣'], 804 \ ['models' , '╞'], 805 \ ['mp' , '∓'], 806 \ ['nabla' , '∇'], 807 \ ['natural' , '♮'], 808 \ ['ncong' , '≇'], 809 \ ['ne' , '≠'], 810 \ ['nearrow' , '↗'], 811 \ ['neg' , '¬'], 812 \ ['neq' , '≠'], 813 \ ['nexists' , '∄'], 814 \ ['ngeq' , '≱'], 815 \ ['ngeqq' , '≱'], 816 \ ['ngtr' , '≯'], 817 \ ['ni' , '∋'], 818 \ ['nleftarrow' , '↚'], 819 \ ['nLeftarrow' , '⇍'], 820 \ ['nLeftrightarrow', '⇎'], 821 \ ['nleq' , '≰'], 822 \ ['nleqq' , '≰'], 823 \ ['nless' , '≮'], 824 \ ['nmid' , '∤'], 825 \ ['notin' , '∉'], 826 \ ['nprec' , '⊀'], 827 \ ['nrightarrow' , '↛'], 828 \ ['nRightarrow' , '⇏'], 829 \ ['nsim' , '≁'], 830 \ ['nsucc' , '⊁'], 831 \ ['ntriangleleft' , '⋪'], 832 \ ['ntrianglelefteq', '⋬'], 833 \ ['ntriangleright' , '⋫'], 834 \ ['ntrianglerighteq', '⋭'], 835 \ ['nvdash' , '⊬'], 836 \ ['nvDash' , '⊭'], 837 \ ['nVdash' , '⊮'], 838 \ ['nwarrow' , '↖'], 839 \ ['odot' , '⊙'], 840 \ ['oint' , '∮'], 841 \ ['ominus' , '⊖'], 842 \ ['oplus' , '⊕'], 843 \ ['oslash' , '⊘'], 844 \ ['otimes' , '⊗'], 845 \ ['owns' , '∋'], 846 \ ['P' , '¶'], 847 \ ['parallel' , '║'], 848 \ ['partial' , '∂'], 849 \ ['perp' , '⊥'], 850 \ ['pitchfork' , '⋔'], 851 \ ['pm' , '±'], 852 \ ['prec' , '≺'], 853 \ ['precapprox' , '⪷'], 854 \ ['preccurlyeq' , '≼'], 855 \ ['preceq' , '⪯'], 856 \ ['precnapprox' , '⪹'], 857 \ ['precneqq' , '⪵'], 858 \ ['precsim' , '≾'], 859 \ ['prime' , '′'], 860 \ ['prod' , '∏'], 861 \ ['propto' , '∝'], 862 \ ['rceil' , '⌉'], 863 \ ['Re' , 'ℜ'], 864 \ ['rfloor' , '⌋'], 865 \ ['right)' , ')'], 866 \ ['right]' , ']'], 867 \ ['right\\}' , '}'], 868 \ ['rightarrow' , '⟶'], 869 \ ['Rightarrow' , '⟹'], 870 \ ['rightarrowtail' , '↣'], 871 \ ['rightleftharpoons', '⇌'], 872 \ ['rightsquigarrow', '↝'], 873 \ ['rightthreetimes', '⋌'], 874 \ ['risingdotseq' , '≓'], 875 \ ['rmoustache' , '╮'], 876 \ ['rtimes' , '⋊'], 877 \ ['S' , '§'], 878 \ ['searrow' , '↘'], 879 \ ['setminus' , '∖'], 880 \ ['sharp' , '♯'], 881 \ ['sim' , '∼'], 882 \ ['simeq' , '⋍'], 883 \ ['smile' , '‿'], 884 \ ['spadesuit' , '♠'], 885 \ ['sphericalangle' , '∢'], 886 \ ['sqcap' , '⊓'], 887 \ ['sqcup' , '⊔'], 888 \ ['sqsubset' , '⊏'], 889 \ ['sqsubseteq' , '⊑'], 890 \ ['sqsupset' , '⊐'], 891 \ ['sqsupseteq' , '⊒'], 892 \ ['star' , '✫'], 893 \ ['subset' , '⊂'], 894 \ ['Subset' , '⋐'], 895 \ ['subseteq' , '⊆'], 896 \ ['subseteqq' , '⫅'], 897 \ ['subsetneq' , '⊊'], 898 \ ['subsetneqq' , '⫋'], 899 \ ['succ' , '≻'], 900 \ ['succapprox' , '⪸'], 901 \ ['succcurlyeq' , '≽'], 902 \ ['succeq' , '⪰'], 903 \ ['succnapprox' , '⪺'], 904 \ ['succneqq' , '⪶'], 905 \ ['succsim' , '≿'], 906 \ ['sum' , '∑'], 907 \ ['supset' , '⊃'], 908 \ ['Supset' , '⋑'], 909 \ ['supseteq' , '⊇'], 910 \ ['supseteqq' , '⫆'], 911 \ ['supsetneq' , '⊋'], 912 \ ['supsetneqq' , '⫌'], 913 \ ['surd' , '√'], 914 \ ['swarrow' , '↙'], 915 \ ['therefore' , '∴'], 916 \ ['times' , '×'], 917 \ ['to' , '→'], 918 \ ['top' , '⊤'], 919 \ ['triangle' , '∆'], 920 \ ['triangleleft' , '⊲'], 921 \ ['trianglelefteq' , '⊴'], 922 \ ['triangleq' , '≜'], 923 \ ['triangleright' , '⊳'], 924 \ ['trianglerighteq', '⊵'], 925 \ ['twoheadleftarrow', '↞'], 926 \ ['twoheadrightarrow', '↠'], 927 \ ['uparrow' , '↑'], 928 \ ['Uparrow' , '⇑'], 929 \ ['updownarrow' , '↕'], 930 \ ['Updownarrow' , '⇕'], 931 \ ['varnothing' , '∅'], 932 \ ['vartriangle' , '∆'], 933 \ ['vdash' , '⊢'], 934 \ ['vDash' , '⊨'], 935 \ ['Vdash' , '⊩'], 936 \ ['vdots' , '⋮'], 937 \ ['vee' , '∨'], 938 \ ['veebar' , '⊻'], 939 \ ['Vvdash' , '⊪'], 940 \ ['wedge' , '∧'], 941 \ ['wp' , '℘'], 942 \ ['wr' , '≀']] 943" \ ['jmath' , 'X'] 944" \ ['uminus' , 'X'] 945" \ ['uplus' , 'X'] 946 for texmath in s:texMathList 947 if texmath[0] =~ '\w$' 948 exe "syn match texMathSymbol '\\\\".texmath[0]."\\>' contained conceal cchar=".texmath[1] 949 else 950 exe "syn match texMathSymbol '\\\\".texmath[0]."' contained conceal cchar=".texmath[1] 951 endif 952 endfor 953 954 if &ambw == "double" 955 syn match texMathSymbol '\\gg\>' contained conceal cchar=≫ 956 syn match texMathSymbol '\\ll\>' contained conceal cchar=≪ 957 else 958 syn match texMathSymbol '\\gg\>' contained conceal cchar=⟫ 959 syn match texMathSymbol '\\ll\>' contained conceal cchar=⟪ 960 endif 961 962 syn match texMathSymbol '\\hat{a}' contained conceal cchar=â 963 syn match texMathSymbol '\\hat{A}' contained conceal cchar= 964 syn match texMathSymbol '\\hat{c}' contained conceal cchar=ĉ 965 syn match texMathSymbol '\\hat{C}' contained conceal cchar=Ĉ 966 syn match texMathSymbol '\\hat{e}' contained conceal cchar=ê 967 syn match texMathSymbol '\\hat{E}' contained conceal cchar=Ê 968 syn match texMathSymbol '\\hat{g}' contained conceal cchar=ĝ 969 syn match texMathSymbol '\\hat{G}' contained conceal cchar=Ĝ 970 syn match texMathSymbol '\\hat{i}' contained conceal cchar=î 971 syn match texMathSymbol '\\hat{I}' contained conceal cchar=Î 972 syn match texMathSymbol '\\hat{o}' contained conceal cchar=ô 973 syn match texMathSymbol '\\hat{O}' contained conceal cchar=Ô 974 syn match texMathSymbol '\\hat{s}' contained conceal cchar=ŝ 975 syn match texMathSymbol '\\hat{S}' contained conceal cchar=Ŝ 976 syn match texMathSymbol '\\hat{u}' contained conceal cchar=û 977 syn match texMathSymbol '\\hat{U}' contained conceal cchar=Û 978 syn match texMathSymbol '\\hat{w}' contained conceal cchar=ŵ 979 syn match texMathSymbol '\\hat{W}' contained conceal cchar=Ŵ 980 syn match texMathSymbol '\\hat{y}' contained conceal cchar=ŷ 981 syn match texMathSymbol '\\hat{Y}' contained conceal cchar=Ŷ 982 endif 983 984 " Greek {{{2 985 if s:tex_conceal =~ 'g' 986 fun! s:Greek(group,pat,cchar) 987 exe 'syn match '.a:group." '".a:pat."' contained conceal cchar=".a:cchar 988 endfun 989 call s:Greek('texGreek','\\alpha\>' ,'α') 990 call s:Greek('texGreek','\\beta\>' ,'β') 991 call s:Greek('texGreek','\\gamma\>' ,'γ') 992 call s:Greek('texGreek','\\delta\>' ,'δ') 993 call s:Greek('texGreek','\\epsilon\>' ,'ϵ') 994 call s:Greek('texGreek','\\varepsilon\>' ,'ε') 995 call s:Greek('texGreek','\\zeta\>' ,'ζ') 996 call s:Greek('texGreek','\\eta\>' ,'η') 997 call s:Greek('texGreek','\\theta\>' ,'θ') 998 call s:Greek('texGreek','\\vartheta\>' ,'ϑ') 999 call s:Greek('texGreek','\\kappa\>' ,'κ') 1000 call s:Greek('texGreek','\\lambda\>' ,'λ') 1001 call s:Greek('texGreek','\\mu\>' ,'μ') 1002 call s:Greek('texGreek','\\nu\>' ,'ν') 1003 call s:Greek('texGreek','\\xi\>' ,'ξ') 1004 call s:Greek('texGreek','\\pi\>' ,'π') 1005 call s:Greek('texGreek','\\varpi\>' ,'ϖ') 1006 call s:Greek('texGreek','\\rho\>' ,'ρ') 1007 call s:Greek('texGreek','\\varrho\>' ,'ϱ') 1008 call s:Greek('texGreek','\\sigma\>' ,'σ') 1009 call s:Greek('texGreek','\\varsigma\>' ,'ς') 1010 call s:Greek('texGreek','\\tau\>' ,'τ') 1011 call s:Greek('texGreek','\\upsilon\>' ,'υ') 1012 call s:Greek('texGreek','\\phi\>' ,'φ') 1013 call s:Greek('texGreek','\\varphi\>' ,'ϕ') 1014 call s:Greek('texGreek','\\chi\>' ,'χ') 1015 call s:Greek('texGreek','\\psi\>' ,'ψ') 1016 call s:Greek('texGreek','\\omega\>' ,'ω') 1017 call s:Greek('texGreek','\\Gamma\>' ,'Γ') 1018 call s:Greek('texGreek','\\Delta\>' ,'Δ') 1019 call s:Greek('texGreek','\\Theta\>' ,'Θ') 1020 call s:Greek('texGreek','\\Lambda\>' ,'Λ') 1021 call s:Greek('texGreek','\\Xi\>' ,'Χ') 1022 call s:Greek('texGreek','\\Pi\>' ,'Π') 1023 call s:Greek('texGreek','\\Sigma\>' ,'Σ') 1024 call s:Greek('texGreek','\\Upsilon\>' ,'Υ') 1025 call s:Greek('texGreek','\\Phi\>' ,'Φ') 1026 call s:Greek('texGreek','\\Psi\>' ,'Ψ') 1027 call s:Greek('texGreek','\\Omega\>' ,'Ω') 1028 delfun s:Greek 1029 endif 1030 1031 " Superscripts/Subscripts {{{2 1032 if s:tex_conceal =~ 's' 1033 if s:tex_fast =~ 's' 1034 syn region texSuperscript matchgroup=Delimiter start='\^{' skip="\\\\\|\\[{}]" end='}' contained concealends contains=texSpecialChar,texSuperscripts,texStatement,texSubscript,texSuperscript,texMathMatcher 1035 syn region texSubscript matchgroup=Delimiter start='_{' skip="\\\\\|\\[{}]" end='}' contained concealends contains=texSpecialChar,texSubscripts,texStatement,texSubscript,texSuperscript,texMathMatcher 1036 endif 1037 fun! s:SuperSub(group,leader,pat,cchar) 1038 exe 'syn match '.a:group." '".a:leader.a:pat."' contained conceal cchar=".a:cchar 1039 exe 'syn match '.a:group."s '".a:pat."' contained conceal cchar=".a:cchar.' nextgroup='.a:group.'s' 1040 endfun 1041 call s:SuperSub('texSuperscript','\^','0','⁰') 1042 call s:SuperSub('texSuperscript','\^','1','¹') 1043 call s:SuperSub('texSuperscript','\^','2','²') 1044 call s:SuperSub('texSuperscript','\^','3','³') 1045 call s:SuperSub('texSuperscript','\^','4','⁴') 1046 call s:SuperSub('texSuperscript','\^','5','⁵') 1047 call s:SuperSub('texSuperscript','\^','6','⁶') 1048 call s:SuperSub('texSuperscript','\^','7','⁷') 1049 call s:SuperSub('texSuperscript','\^','8','⁸') 1050 call s:SuperSub('texSuperscript','\^','9','⁹') 1051 call s:SuperSub('texSuperscript','\^','a','ᵃ') 1052 call s:SuperSub('texSuperscript','\^','b','ᵇ') 1053 call s:SuperSub('texSuperscript','\^','c','ᶜ') 1054 call s:SuperSub('texSuperscript','\^','d','ᵈ') 1055 call s:SuperSub('texSuperscript','\^','e','ᵉ') 1056 call s:SuperSub('texSuperscript','\^','f','ᶠ') 1057 call s:SuperSub('texSuperscript','\^','g','ᵍ') 1058 call s:SuperSub('texSuperscript','\^','h','ʰ') 1059 call s:SuperSub('texSuperscript','\^','i','ⁱ') 1060 call s:SuperSub('texSuperscript','\^','j','ʲ') 1061 call s:SuperSub('texSuperscript','\^','k','ᵏ') 1062 call s:SuperSub('texSuperscript','\^','l','ˡ') 1063 call s:SuperSub('texSuperscript','\^','m','ᵐ') 1064 call s:SuperSub('texSuperscript','\^','n','ⁿ') 1065 call s:SuperSub('texSuperscript','\^','o','ᵒ') 1066 call s:SuperSub('texSuperscript','\^','p','ᵖ') 1067 call s:SuperSub('texSuperscript','\^','r','ʳ') 1068 call s:SuperSub('texSuperscript','\^','s','ˢ') 1069 call s:SuperSub('texSuperscript','\^','t','ᵗ') 1070 call s:SuperSub('texSuperscript','\^','u','ᵘ') 1071 call s:SuperSub('texSuperscript','\^','v','ᵛ') 1072 call s:SuperSub('texSuperscript','\^','w','ʷ') 1073 call s:SuperSub('texSuperscript','\^','x','ˣ') 1074 call s:SuperSub('texSuperscript','\^','y','ʸ') 1075 call s:SuperSub('texSuperscript','\^','z','ᶻ') 1076 call s:SuperSub('texSuperscript','\^','A','ᴬ') 1077 call s:SuperSub('texSuperscript','\^','B','ᴮ') 1078 call s:SuperSub('texSuperscript','\^','D','ᴰ') 1079 call s:SuperSub('texSuperscript','\^','E','ᴱ') 1080 call s:SuperSub('texSuperscript','\^','G','ᴳ') 1081 call s:SuperSub('texSuperscript','\^','H','ᴴ') 1082 call s:SuperSub('texSuperscript','\^','I','ᴵ') 1083 call s:SuperSub('texSuperscript','\^','J','ᴶ') 1084 call s:SuperSub('texSuperscript','\^','K','ᴷ') 1085 call s:SuperSub('texSuperscript','\^','L','ᴸ') 1086 call s:SuperSub('texSuperscript','\^','M','ᴹ') 1087 call s:SuperSub('texSuperscript','\^','N','ᴺ') 1088 call s:SuperSub('texSuperscript','\^','O','ᴼ') 1089 call s:SuperSub('texSuperscript','\^','P','ᴾ') 1090 call s:SuperSub('texSuperscript','\^','R','ᴿ') 1091 call s:SuperSub('texSuperscript','\^','T','ᵀ') 1092 call s:SuperSub('texSuperscript','\^','U','ᵁ') 1093 call s:SuperSub('texSuperscript','\^','W','ᵂ') 1094 call s:SuperSub('texSuperscript','\^',',','︐') 1095 call s:SuperSub('texSuperscript','\^',':','︓') 1096 call s:SuperSub('texSuperscript','\^',';','︔') 1097 call s:SuperSub('texSuperscript','\^','+','⁺') 1098 call s:SuperSub('texSuperscript','\^','-','⁻') 1099 call s:SuperSub('texSuperscript','\^','<','˂') 1100 call s:SuperSub('texSuperscript','\^','>','˃') 1101 call s:SuperSub('texSuperscript','\^','/','ˊ') 1102 call s:SuperSub('texSuperscript','\^','(','⁽') 1103 call s:SuperSub('texSuperscript','\^',')','⁾') 1104 call s:SuperSub('texSuperscript','\^','\.','˙') 1105 call s:SuperSub('texSuperscript','\^','=','˭') 1106 call s:SuperSub('texSubscript','_','0','₀') 1107 call s:SuperSub('texSubscript','_','1','₁') 1108 call s:SuperSub('texSubscript','_','2','₂') 1109 call s:SuperSub('texSubscript','_','3','₃') 1110 call s:SuperSub('texSubscript','_','4','₄') 1111 call s:SuperSub('texSubscript','_','5','₅') 1112 call s:SuperSub('texSubscript','_','6','₆') 1113 call s:SuperSub('texSubscript','_','7','₇') 1114 call s:SuperSub('texSubscript','_','8','₈') 1115 call s:SuperSub('texSubscript','_','9','₉') 1116 call s:SuperSub('texSubscript','_','a','ₐ') 1117 call s:SuperSub('texSubscript','_','e','ₑ') 1118 call s:SuperSub('texSubscript','_','i','ᵢ') 1119 call s:SuperSub('texSubscript','_','o','ₒ') 1120 call s:SuperSub('texSubscript','_','u','ᵤ') 1121 call s:SuperSub('texSubscript','_',',','︐') 1122 call s:SuperSub('texSubscript','_','+','₊') 1123 call s:SuperSub('texSubscript','_','-','₋') 1124 call s:SuperSub('texSubscript','_','/','ˏ') 1125 call s:SuperSub('texSubscript','_','(','₍') 1126 call s:SuperSub('texSubscript','_',')','₎') 1127 call s:SuperSub('texSubscript','_','\.','‸') 1128 call s:SuperSub('texSubscript','_','r','ᵣ') 1129 call s:SuperSub('texSubscript','_','v','ᵥ') 1130 call s:SuperSub('texSubscript','_','x','ₓ') 1131 call s:SuperSub('texSubscript','_','\\beta\>' ,'ᵦ') 1132 call s:SuperSub('texSubscript','_','\\delta\>','ᵨ') 1133 call s:SuperSub('texSubscript','_','\\phi\>' ,'ᵩ') 1134 call s:SuperSub('texSubscript','_','\\gamma\>','ᵧ') 1135 call s:SuperSub('texSubscript','_','\\chi\>' ,'ᵪ') 1136 delfun s:SuperSub 1137 endif 1138 1139 " Accented characters: {{{2 1140 if s:tex_conceal =~ 'a' 1141 if b:tex_stylish 1142 syn match texAccent "\\[bcdvuH][^a-zA-Z@]"me=e-1 1143 syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)[^a-zA-Z@]"me=e-1 1144 else 1145 fun! s:Accents(chr,...) 1146 let i= 1 1147 for accent in ["`","\\'","^",'"','\~','\.',"c","H","k","r","u","v"] 1148 if i > a:0 1149 break 1150 endif 1151 if strlen(a:{i}) == 0 || a:{i} == ' ' || a:{i} == '?' 1152 let i= i + 1 1153 continue 1154 endif 1155 if accent =~ '\a' 1156 exe "syn match texAccent '".'\\'.accent.'\(\s*{'.a:chr.'}\|\s\+'.a:chr.'\)'."' conceal cchar=".a:{i} 1157 else 1158 exe "syn match texAccent '".'\\'.accent.'\s*\({'.a:chr.'}\|'.a:chr.'\)'."' conceal cchar=".a:{i} 1159 endif 1160 let i= i + 1 1161 endfor 1162 endfun 1163 " \` \' \^ \" \~ \. \c \H \k \r \u \v 1164 call s:Accents('a','à','á','â','ä','ã','ȧ',' ',' ','ą','å','ă','ă') 1165 call s:Accents('A','À','Á','Â','Ä','Ã','Ȧ',' ',' ','Ą','Å','Ă','Ă') 1166 call s:Accents('c',' ','ć','ĉ',' ',' ','ċ','ç',' ',' ',' ',' ','č') 1167 call s:Accents('C',' ','Ć','Ĉ',' ',' ','Ċ','Ç',' ',' ',' ',' ','Č') 1168 call s:Accents('d',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ď') 1169 call s:Accents('D',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','Ď') 1170 call s:Accents('e','è','é','ê','ë','ẽ','ė','ȩ',' ','ę',' ','ĕ','ě') 1171 call s:Accents('E','È','É','Ê','Ë','Ẽ','Ė','Ȩ',' ','Ę',' ','Ĕ','Ě') 1172 call s:Accents('g',' ','ǵ','ĝ',' ',' ','ġ','ģ',' ',' ',' ','ğ',' ') 1173 call s:Accents('G',' ','Ǵ','Ĝ',' ',' ','Ġ','Ģ',' ',' ',' ','Ğ',' ') 1174 call s:Accents('h',' ',' ','ĥ',' ',' ',' ',' ',' ',' ',' ',' ','ȟ') 1175 call s:Accents('H',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','Ȟ') 1176 call s:Accents('i','ì','í','î','ï','ĩ','į',' ',' ',' ',' ','ĭ',' ') 1177 call s:Accents('I','Ì','Í','Î','Ï','Ĩ','İ',' ',' ',' ',' ','Ĭ',' ') 1178 call s:Accents('J',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ǰ') 1179 call s:Accents('k',' ',' ',' ',' ',' ',' ','ķ',' ',' ',' ',' ',' ') 1180 call s:Accents('K',' ',' ',' ',' ',' ',' ','Ķ',' ',' ',' ',' ',' ') 1181 call s:Accents('l',' ','ĺ','ľ',' ',' ',' ','ļ',' ',' ',' ',' ','ľ') 1182 call s:Accents('L',' ','Ĺ','Ľ',' ',' ',' ','Ļ',' ',' ',' ',' ','Ľ') 1183 call s:Accents('n',' ','ń',' ',' ','ñ',' ','ņ',' ',' ',' ',' ','ň') 1184 call s:Accents('N',' ','Ń',' ',' ','Ñ',' ','Ņ',' ',' ',' ',' ','Ň') 1185 call s:Accents('o','ò','ó','ô','ö','õ','ȯ',' ','ő','ǫ',' ','ŏ',' ') 1186 call s:Accents('O','Ò','Ó','Ô','Ö','Õ','Ȯ',' ','Ő','Ǫ',' ','Ŏ',' ') 1187 call s:Accents('r',' ','ŕ',' ',' ',' ',' ','ŗ',' ',' ',' ',' ','ř') 1188 call s:Accents('R',' ','Ŕ',' ',' ',' ',' ','Ŗ',' ',' ',' ',' ','Ř') 1189 call s:Accents('s',' ','ś','ŝ',' ',' ',' ','ş',' ','ȿ',' ',' ','š') 1190 call s:Accents('S',' ','Ś','Ŝ',' ',' ',' ','Ş',' ',' ',' ',' ','Š') 1191 call s:Accents('t',' ',' ',' ',' ',' ',' ','ţ',' ',' ',' ',' ','ť') 1192 call s:Accents('T',' ',' ',' ',' ',' ',' ','Ţ',' ',' ',' ',' ','Ť') 1193 call s:Accents('u','ù','ú','û','ü','ũ',' ',' ','ű','ų','ů','ŭ','ǔ') 1194 call s:Accents('U','Ù','Ú','Û','Ü','Ũ',' ',' ','Ű','Ų','Ů','Ŭ','Ǔ') 1195 call s:Accents('w',' ',' ','ŵ',' ',' ',' ',' ',' ',' ',' ',' ',' ') 1196 call s:Accents('W',' ',' ','Ŵ',' ',' ',' ',' ',' ',' ',' ',' ',' ') 1197 call s:Accents('y','ỳ','ý','ŷ','ÿ','ỹ',' ',' ',' ',' ',' ',' ',' ') 1198 call s:Accents('Y','Ỳ','Ý','Ŷ','Ÿ','Ỹ',' ',' ',' ',' ',' ',' ',' ') 1199 call s:Accents('z',' ','ź',' ',' ',' ','ż',' ',' ',' ',' ',' ','ž') 1200 call s:Accents('Z',' ','Ź',' ',' ',' ','Ż',' ',' ',' ',' ',' ','Ž') 1201 call s:Accents('\\i','ì','í','î','ï','ĩ','į',' ',' ',' ',' ','ĭ',' ') 1202 " \` \' \^ \" \~ \. \c \H \k \r \u \v 1203 delfun s:Accents 1204 syn match texAccent '\\aa\>' conceal cchar=å 1205 syn match texAccent '\\AA\>' conceal cchar=Å 1206 syn match texAccent '\\o\>' conceal cchar=ø 1207 syn match texAccent '\\O\>' conceal cchar=Ø 1208 syn match texLigature '\\AE\>' conceal cchar=Æ 1209 syn match texLigature '\\ae\>' conceal cchar=æ 1210 syn match texLigature '\\oe\>' conceal cchar=œ 1211 syn match texLigature '\\OE\>' conceal cchar=Œ 1212 syn match texLigature '\\ss\>' conceal cchar=ß 1213 endif 1214 endif 1215endif 1216 1217" --------------------------------------------------------------------- 1218" LaTeX synchronization: {{{1 1219syn sync maxlines=200 1220syn sync minlines=50 1221 1222syn sync match texSyncStop groupthere NONE "%stopzone\>" 1223 1224" Synchronization: {{{1 1225" The $..$ and $$..$$ make for impossible sync patterns 1226" (one can't tell if a "$$" starts or stops a math zone by itself) 1227" The following grouptheres coupled with minlines above 1228" help improve the odds of good syncing. 1229if !exists("tex_no_math") 1230 syn sync match texSyncMathZoneA groupthere NONE "\\end{abstract}" 1231 syn sync match texSyncMathZoneA groupthere NONE "\\end{center}" 1232 syn sync match texSyncMathZoneA groupthere NONE "\\end{description}" 1233 syn sync match texSyncMathZoneA groupthere NONE "\\end{enumerate}" 1234 syn sync match texSyncMathZoneA groupthere NONE "\\end{itemize}" 1235 syn sync match texSyncMathZoneA groupthere NONE "\\end{table}" 1236 syn sync match texSyncMathZoneA groupthere NONE "\\end{tabular}" 1237 syn sync match texSyncMathZoneA groupthere NONE "\\\(sub\)*section\>" 1238endif 1239 1240" --------------------------------------------------------------------- 1241" Highlighting: {{{1 1242if did_tex_syntax_inits == 1 1243 let did_tex_syntax_inits= 2 1244 " TeX highlighting groups which should share similar highlighting 1245 if !exists("s:tex_no_error") 1246 if !exists("g:tex_no_math") 1247 HiLink texBadMath texError 1248 HiLink texMathDelimBad texError 1249 HiLink texMathError texError 1250 if !b:tex_stylish 1251 HiLink texOnlyMath texError 1252 endif 1253 endif 1254 HiLink texError Error 1255 endif 1256 1257 hi texBoldStyle gui=bold cterm=bold 1258 hi texItalStyle gui=italic cterm=italic 1259 hi texBoldItalStyle gui=bold,italic cterm=bold,italic 1260 hi texItalBoldStyle gui=bold,italic cterm=bold,italic 1261 HiLink texCite texRefZone 1262 HiLink texDefCmd texDef 1263 HiLink texDefName texDef 1264 HiLink texDocType texCmdName 1265 HiLink texDocTypeArgs texCmdArgs 1266 HiLink texInputFileOpt texCmdArgs 1267 HiLink texInputCurlies texDelimiter 1268 HiLink texLigature texSpecialChar 1269 if !exists("tex_no_math") 1270 HiLink texMathDelimSet1 texMathDelim 1271 HiLink texMathDelimSet2 texMathDelim 1272 HiLink texMathDelimKey texMathDelim 1273 HiLink texMathMatcher texMath 1274 HiLink texAccent texStatement 1275 HiLink texGreek texStatement 1276 HiLink texSuperscript texStatement 1277 HiLink texSubscript texStatement 1278 HiLink texSuperscripts texSuperscript 1279 HiLink texSubscripts texSubscript 1280 HiLink texMathSymbol texStatement 1281 HiLink texMathZoneV texMath 1282 HiLink texMathZoneW texMath 1283 HiLink texMathZoneX texMath 1284 HiLink texMathZoneY texMath 1285 HiLink texMathZoneV texMath 1286 HiLink texMathZoneZ texMath 1287 endif 1288 HiLink texBeginEnd texCmdName 1289 HiLink texBeginEndName texSection 1290 HiLink texSpaceCode texStatement 1291 HiLink texStyleStatement texStatement 1292 HiLink texTypeSize texType 1293 HiLink texTypeStyle texType 1294 1295 " Basic TeX highlighting groups 1296 HiLink texCmdArgs Number 1297 HiLink texCmdName Statement 1298 HiLink texComment Comment 1299 HiLink texDef Statement 1300 HiLink texDefParm Special 1301 HiLink texDelimiter Delimiter 1302 HiLink texInput Special 1303 HiLink texInputFile Special 1304 HiLink texLength Number 1305 HiLink texMath Special 1306 HiLink texMathDelim Statement 1307 HiLink texMathOper Operator 1308 HiLink texNewCmd Statement 1309 HiLink texNewEnv Statement 1310 HiLink texOption Number 1311 HiLink texRefZone Special 1312 HiLink texSection PreCondit 1313 HiLink texSpaceCodeChar Special 1314 HiLink texSpecialChar SpecialChar 1315 HiLink texStatement Statement 1316 HiLink texString String 1317 HiLink texTodo Todo 1318 HiLink texType Type 1319 HiLink texZone PreCondit 1320 1321 delcommand HiLink 1322endif 1323 1324" Cleanup: {{{1 1325unlet s:extfname 1326let b:current_syntax = "tex" 1327let &cpo = s:keepcpo 1328unlet s:keepcpo 1329" vim: ts=8 fdm=marker 1330